398 |
} |
} |
399 |
|
|
400 |
int |
int |
401 |
grub_ieee1275_claim (void *p, grub_size_t size, |
grub_ieee1275_claim (grub_addr_t addr, grub_size_t size, unsigned int align, |
402 |
unsigned int align, void **result) |
grub_addr_t *result) |
403 |
{ |
{ |
404 |
struct claim_args { |
struct claim_args { |
405 |
struct grub_ieee1275_common_hdr common; |
struct grub_ieee1275_common_hdr common; |
406 |
void *p; |
grub_addr_t addr; |
407 |
grub_size_t size; |
grub_size_t size; |
408 |
unsigned int align; |
unsigned int align; |
409 |
void *addr; |
grub_addr_t base; |
410 |
} args; |
} args; |
411 |
|
|
412 |
INIT_IEEE1275_COMMON (&args.common, "claim", 3, 1); |
INIT_IEEE1275_COMMON (&args.common, "claim", 3, 1); |
413 |
args.p = p; |
args.addr = addr; |
414 |
args.size = size; |
args.size = size; |
415 |
args.align = align; |
args.align = align; |
416 |
|
|
417 |
if (IEEE1275_CALL_ENTRY_FN (&args) == -1) |
if (IEEE1275_CALL_ENTRY_FN (&args) == -1) |
418 |
return -1; |
return -1; |
419 |
*result = args.addr; |
|
420 |
|
if (result) |
421 |
|
*result = args.base; |
422 |
|
|
423 |
return 0; |
return 0; |
424 |
} |
} |
425 |
|
|
426 |
int |
int |
427 |
grub_ieee1275_release (void *p, grub_size_t size) |
grub_ieee1275_release (grub_addr_t addr, grub_size_t size) |
428 |
{ |
{ |
429 |
struct release_args { |
struct release_args { |
430 |
struct grub_ieee1275_common_hdr common; |
struct grub_ieee1275_common_hdr common; |
431 |
void *p; |
grub_addr_t addr; |
432 |
grub_size_t size; |
grub_size_t size; |
433 |
} args; |
} args; |
434 |
|
|
435 |
INIT_IEEE1275_COMMON (&args.common, "release", 2, 0); |
INIT_IEEE1275_COMMON (&args.common, "release", 2, 0); |
436 |
args.p = p; |
args.addr = addr; |
437 |
args.size = size; |
args.size = size; |
438 |
|
|
439 |
if (IEEE1275_CALL_ENTRY_FN (&args) == -1) |
if (IEEE1275_CALL_ENTRY_FN (&args) == -1) |