瀏覽代碼

efi_loader: adjust definitions of variable services

The definitons of the variable services are adjusted:
- use efi_uintn_t instead of unsigned long
- use u16 * instead of s16 * for Unicode strings
- correct definition of QueryVariableInfo
- rename efi_get_next_variable to efi_get_next_variable_name

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
Heinrich Schuchardt 7 年之前
父節點
當前提交
45c66f9cdf
共有 5 個文件被更改,包括 43 次插入43 次删除
  1. 12 12
      include/efi_api.h
  2. 9 9
      include/efi_loader.h
  3. 5 5
      lib/efi_loader/efi_bootmgr.c
  4. 5 5
      lib/efi_loader/efi_runtime.c
  5. 12 12
      lib/efi_loader/efi_variable.c

+ 12 - 12
include/efi_api.h

@@ -214,15 +214,15 @@ struct efi_runtime_services {
 			uint32_t descriptor_version,
 			struct efi_mem_desc *virtmap);
 	efi_status_t (*convert_pointer)(unsigned long dbg, void **address);
-	efi_status_t (EFIAPI *get_variable)(s16 *variable_name,
-			efi_guid_t *vendor, u32 *attributes,
-			unsigned long *data_size, void *data);
-	efi_status_t (EFIAPI *get_next_variable)(
-			unsigned long *variable_name_size,
-			s16 *variable_name, efi_guid_t *vendor);
-	efi_status_t (EFIAPI *set_variable)(s16 *variable_name,
-			efi_guid_t *vendor, u32 attributes,
-			unsigned long data_size, void *data);
+	efi_status_t (EFIAPI *get_variable)(u16 *variable_name,
+					    efi_guid_t *vendor, u32 *attributes,
+					    efi_uintn_t *data_size, void *data);
+	efi_status_t (EFIAPI *get_next_variable_name)(
+			efi_uintn_t *variable_name_size,
+			u16 *variable_name, efi_guid_t *vendor);
+	efi_status_t (EFIAPI *set_variable)(u16 *variable_name,
+					    efi_guid_t *vendor, u32 attributes,
+					    efi_uintn_t data_size, void *data);
 	efi_status_t (EFIAPI *get_next_high_mono_count)(
 			uint32_t *high_count);
 	void (EFIAPI *reset_system)(enum efi_reset_type reset_type,
@@ -239,9 +239,9 @@ struct efi_runtime_services {
 			u32 reset_type);
 	efi_status_t (EFIAPI *query_variable_info)(
 			u32 attributes,
-			u64 maximum_variable_storage_size,
-			u64 remaining_variable_storage_size,
-			u64 maximum_variable_size);
+			u64 *maximum_variable_storage_size,
+			u64 *remaining_variable_storage_size,
+			u64 *maximum_variable_size);
 };
 
 /* EFI event group GUID definitions */

+ 9 - 9
include/efi_loader.h

@@ -422,15 +422,15 @@ efi_status_t EFIAPI efi_selftest(efi_handle_t image_handle,
 				 struct efi_system_table *systab);
 #endif
 
-efi_status_t EFIAPI efi_get_variable(s16 *variable_name,
-		efi_guid_t *vendor, u32 *attributes,
-		unsigned long *data_size, void *data);
-efi_status_t EFIAPI efi_get_next_variable(
-		unsigned long *variable_name_size,
-		s16 *variable_name, efi_guid_t *vendor);
-efi_status_t EFIAPI efi_set_variable(s16 *variable_name,
-		efi_guid_t *vendor, u32 attributes,
-		unsigned long data_size, void *data);
+efi_status_t EFIAPI efi_get_variable(u16 *variable_name, efi_guid_t *vendor,
+				     u32 *attributes, efi_uintn_t *data_size,
+				     void *data);
+efi_status_t EFIAPI efi_get_next_variable_name(efi_uintn_t *variable_name_size,
+					       u16 *variable_name,
+					       efi_guid_t *vendor);
+efi_status_t EFIAPI efi_set_variable(u16 *variable_name, efi_guid_t *vendor,
+				     u32 attributes, efi_uintn_t data_size,
+				     void *data);
 
 void *efi_bootmgr_load(struct efi_device_path **device_path,
 		       struct efi_device_path **file_path);

+ 5 - 5
lib/efi_loader/efi_bootmgr.c

@@ -70,17 +70,17 @@ static void parse_load_option(struct load_option *lo, void *ptr)
 
 /* free() the result */
 static void *get_var(u16 *name, const efi_guid_t *vendor,
-		     unsigned long *size)
+		     efi_uintn_t *size)
 {
 	efi_guid_t *v = (efi_guid_t *)vendor;
 	efi_status_t ret;
 	void *buf = NULL;
 
 	*size = 0;
-	EFI_CALL(ret = rs->get_variable((s16 *)name, v, NULL, size, buf));
+	EFI_CALL(ret = rs->get_variable(name, v, NULL, size, buf));
 	if (ret == EFI_BUFFER_TOO_SMALL) {
 		buf = malloc(*size);
-		EFI_CALL(ret = rs->get_variable((s16 *)name, v, NULL, size, buf));
+		EFI_CALL(ret = rs->get_variable(name, v, NULL, size, buf));
 	}
 
 	if (ret != EFI_SUCCESS) {
@@ -104,7 +104,7 @@ static void *try_load_entry(uint16_t n, struct efi_device_path **device_path,
 	u16 varname[] = L"Boot0000";
 	u16 hexmap[] = L"0123456789ABCDEF";
 	void *load_option, *image = NULL;
-	unsigned long size;
+	efi_uintn_t size;
 
 	varname[4] = hexmap[(n & 0xf000) >> 12];
 	varname[5] = hexmap[(n & 0x0f00) >> 8];
@@ -147,7 +147,7 @@ void *efi_bootmgr_load(struct efi_device_path **device_path,
 		       struct efi_device_path **file_path)
 {
 	uint16_t *bootorder;
-	unsigned long size;
+	efi_uintn_t size;
 	void *image = NULL;
 	int i, num;
 

+ 5 - 5
lib/efi_loader/efi_runtime.c

@@ -212,7 +212,7 @@ static const struct efi_runtime_detach_list_struct efi_runtime_detach_list[] = {
 		.ptr = &efi_runtime_services.get_variable,
 		.patchto = &efi_device_error,
 	}, {
-		.ptr = &efi_runtime_services.get_next_variable,
+		.ptr = &efi_runtime_services.get_next_variable_name,
 		.patchto = &efi_device_error,
 	}, {
 		.ptr = &efi_runtime_services.set_variable,
@@ -444,9 +444,9 @@ efi_status_t __efi_runtime EFIAPI efi_query_capsule_caps(
 
 efi_status_t __efi_runtime EFIAPI efi_query_variable_info(
 			u32 attributes,
-			u64 maximum_variable_storage_size,
-			u64 remaining_variable_storage_size,
-			u64 maximum_variable_size)
+			u64 *maximum_variable_storage_size,
+			u64 *remaining_variable_storage_size,
+			u64 *maximum_variable_size)
 {
 	return EFI_UNSUPPORTED;
 }
@@ -464,7 +464,7 @@ struct efi_runtime_services __efi_runtime_data efi_runtime_services = {
 	.set_virtual_address_map = &efi_set_virtual_address_map,
 	.convert_pointer = (void *)&efi_invalid_parameter,
 	.get_variable = efi_get_variable,
-	.get_next_variable = efi_get_next_variable,
+	.get_next_variable_name = efi_get_next_variable_name,
 	.set_variable = efi_set_variable,
 	.get_next_high_mono_count = (void *)&efi_device_error,
 	.reset_system = &efi_reset_system_boottime,

+ 12 - 12
lib/efi_loader/efi_variable.c

@@ -113,8 +113,8 @@ static char *mem2hex(char *hexstr, const u8 *mem, int count)
 	return hexstr;
 }
 
-static efi_status_t efi_to_native(char *native, s16 *variable_name,
-		efi_guid_t *vendor)
+static efi_status_t efi_to_native(char *native, u16 *variable_name,
+				  efi_guid_t *vendor)
 {
 	size_t len;
 
@@ -176,9 +176,9 @@ static const char *parse_attr(const char *str, u32 *attrp)
 }
 
 /* http://wiki.phoenix.com/wiki/index.php/EFI_RUNTIME_SERVICES#GetVariable.28.29 */
-efi_status_t EFIAPI efi_get_variable(s16 *variable_name,
-		efi_guid_t *vendor, u32 *attributes,
-		unsigned long *data_size, void *data)
+efi_status_t EFIAPI efi_get_variable(u16 *variable_name, efi_guid_t *vendor,
+				     u32 *attributes, efi_uintn_t *data_size,
+				     void *data)
 {
 	char native_name[MAX_NATIVE_VAR_NAME + 1];
 	efi_status_t ret;
@@ -250,9 +250,9 @@ efi_status_t EFIAPI efi_get_variable(s16 *variable_name,
 }
 
 /* http://wiki.phoenix.com/wiki/index.php/EFI_RUNTIME_SERVICES#GetNextVariableName.28.29 */
-efi_status_t EFIAPI efi_get_next_variable(
-		unsigned long *variable_name_size,
-		s16 *variable_name, efi_guid_t *vendor)
+efi_status_t EFIAPI efi_get_next_variable_name(efi_uintn_t *variable_name_size,
+					       u16 *variable_name,
+					       efi_guid_t *vendor)
 {
 	EFI_ENTRY("%p \"%ls\" %pUl", variable_name_size, variable_name, vendor);
 
@@ -260,16 +260,16 @@ efi_status_t EFIAPI efi_get_next_variable(
 }
 
 /* http://wiki.phoenix.com/wiki/index.php/EFI_RUNTIME_SERVICES#SetVariable.28.29 */
-efi_status_t EFIAPI efi_set_variable(s16 *variable_name,
-		efi_guid_t *vendor, u32 attributes,
-		unsigned long data_size, void *data)
+efi_status_t EFIAPI efi_set_variable(u16 *variable_name, efi_guid_t *vendor,
+				     u32 attributes, efi_uintn_t data_size,
+				     void *data)
 {
 	char native_name[MAX_NATIVE_VAR_NAME + 1];
 	efi_status_t ret = EFI_SUCCESS;
 	char *val, *s;
 	u32 attr;
 
-	EFI_ENTRY("\"%ls\" %pUl %x %lu %p", variable_name, vendor, attributes,
+	EFI_ENTRY("\"%ls\" %pUl %x %zu %p", variable_name, vendor, attributes,
 		  data_size, data);
 
 	if (!variable_name || !vendor)