/* Register a configuration table either supplying the address directly or with a hook */ grub_err_t grub_efiemu_register_configuration_table (grub_efi_guid_t guid, void * (*get_table) (void *data), void (*unload) (void *data), void *data) { struct grub_efiemu_configuration_table *tbl; grub_err_t err; err = grub_efiemu_unregister_configuration_table (guid); if (err) return err; tbl = (struct grub_efiemu_configuration_table *) grub_malloc (sizeof (*tbl)); if (! tbl) return grub_errno; tbl->guid = guid; tbl->get_table = get_table; tbl->unload = unload; tbl->data = data; tbl->next = efiemu_config_tables; efiemu_config_tables = tbl; return GRUB_ERR_NONE; }
/* Register a configuration table either supplying the address directly or with a hook */ grub_err_t grub_efiemu_register_configuration_table (grub_efi_guid_t guid, void * (*get_table) (void *data), void (*unload) (void *data), void *data) { struct grub_efiemu_configuration_table *tbl; grub_err_t err; if (! get_table && ! data) return grub_error (GRUB_ERR_BAD_ARGUMENT, "you must set at least get_table or data"); if ((err = grub_efiemu_unregister_configuration_table (guid))) return err; tbl = (struct grub_efiemu_configuration_table *) grub_malloc (sizeof (*tbl)); if (! tbl) return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't register table"); tbl->guid = guid; tbl->get_table = get_table; tbl->unload = unload; tbl->data = data; tbl->next = efiemu_config_tables; efiemu_config_tables = tbl; return GRUB_ERR_NONE; }