On Tue, Apr 12, 2016 at 03:39:55PM +0300, Stanislav Kholmanskikh wrote: > Add wrappers for memory allocation using > alloc-mem and free-mem commands from the User Interface.
Please tell why it is needed. Additionally, please forgive me if it is stupid question, why are you using command line to allocate/free memory? There is a lack of better API in IEEE 1275? > Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmansk...@oracle.com> > --- > grub-core/kern/ieee1275/openfw.c | 68 > ++++++++++++++++++++++++++++++++++++++ > include/grub/ieee1275/ieee1275.h | 2 + > 2 files changed, 70 insertions(+), 0 deletions(-) > > diff --git a/grub-core/kern/ieee1275/openfw.c > b/grub-core/kern/ieee1275/openfw.c > index ddb7783..35225ec 100644 > --- a/grub-core/kern/ieee1275/openfw.c > +++ b/grub-core/kern/ieee1275/openfw.c > @@ -561,3 +561,71 @@ grub_ieee1275_canonicalise_devname (const char *path) > return NULL; > } > > +/* Allocate memory with alloc-mem */ > +void * > +grub_ieee1275_alloc_mem (grub_size_t len) > +{ > + struct alloc_args > + { > + struct grub_ieee1275_common_hdr common; > + grub_ieee1275_cell_t method; > + grub_ieee1275_cell_t len; > + grub_ieee1275_cell_t catch; > + grub_ieee1275_cell_t result; > + } > + args; > + > + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET)) > + { > + grub_error (GRUB_ERR_UNKNOWN_COMMAND, N_("interpret is not > supported")); > + return NULL; > + } > + > + INIT_IEEE1275_COMMON (&args.common, "interpret", 2, 2); > + args.len = len; > + args.method = (grub_ieee1275_cell_t) "alloc-mem"; > + > + if (IEEE1275_CALL_ENTRY_FN (&args) == -1 > + || args.catch) I think that this can be in one line. > + { > + grub_error (GRUB_ERR_INVALID_COMMAND, N_("alloc-mem failed")); > + return NULL; > + } > + else > + return (void *)args.result; > +} > + > +/* Free memory allocated by alloc-mem */ > +grub_err_t > +grub_ieee1275_free_mem (void *addr, grub_size_t len) > +{ > + struct free_args > + { > + struct grub_ieee1275_common_hdr common; > + grub_ieee1275_cell_t method; > + grub_ieee1275_cell_t len; > + grub_ieee1275_cell_t addr; > + grub_ieee1275_cell_t catch; > + } > + args; > + > + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET)) > + { > + grub_error (GRUB_ERR_UNKNOWN_COMMAND, N_("interpret is not > supported")); > + return grub_errno; > + } > + > + INIT_IEEE1275_COMMON (&args.common, "interpret", 3, 1); > + args.addr = (grub_ieee1275_cell_t)addr; > + args.len = len; > + args.method = (grub_ieee1275_cell_t) "free-mem"; > + > + if (IEEE1275_CALL_ENTRY_FN(&args) == -1 > + || args.catch) Ditto. Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel