efi_loader: enable UEFI variables at runtime
Enable UEFI variables at runtime. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
		
							parent
							
								
									ab7296c99c
								
							
						
					
					
						commit
						b02a707152
					
				|  | @ -121,6 +121,8 @@ efi_status_t efi_init_runtime_supported(void) | ||||||
| 	rt_table->version = EFI_RT_PROPERTIES_TABLE_VERSION; | 	rt_table->version = EFI_RT_PROPERTIES_TABLE_VERSION; | ||||||
| 	rt_table->length = sizeof(struct efi_rt_properties_table); | 	rt_table->length = sizeof(struct efi_rt_properties_table); | ||||||
| 	rt_table->runtime_services_supported = | 	rt_table->runtime_services_supported = | ||||||
|  | 				EFI_RT_SUPPORTED_GET_VARIABLE | | ||||||
|  | 				EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME | | ||||||
| 				EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP | | 				EFI_RT_SUPPORTED_SET_VIRTUAL_ADDRESS_MAP | | ||||||
| 				EFI_RT_SUPPORTED_CONVERT_POINTER; | 				EFI_RT_SUPPORTED_CONVERT_POINTER; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -183,9 +183,9 @@ static efi_status_t __maybe_unused efi_var_restore(struct efi_var_file *buf) | ||||||
| 		u16 *data = var->name + u16_strlen(var->name) + 1; | 		u16 *data = var->name + u16_strlen(var->name) + 1; | ||||||
| 
 | 
 | ||||||
| 		if (var->attr & EFI_VARIABLE_NON_VOLATILE && var->length) { | 		if (var->attr & EFI_VARIABLE_NON_VOLATILE && var->length) { | ||||||
| 			ret = efi_set_variable_int(var->name, &var->guid, | 			ret = efi_var_mem_ins(var->name, &var->guid, var->attr, | ||||||
| 						   var->attr, var->length, | 					      var->length, data, 0, NULL, | ||||||
| 						   data, true); | 					      var->time); | ||||||
| 			if (ret != EFI_SUCCESS) | 			if (ret != EFI_SUCCESS) | ||||||
| 				log_err("Failed to set EFI variable %ls\n", | 				log_err("Failed to set EFI variable %ls\n", | ||||||
| 					var->name); | 					var->name); | ||||||
|  |  | ||||||
|  | @ -668,7 +668,16 @@ static efi_status_t __efi_runtime EFIAPI | ||||||
| efi_get_variable_runtime(u16 *variable_name, const efi_guid_t *vendor, | efi_get_variable_runtime(u16 *variable_name, const efi_guid_t *vendor, | ||||||
| 			 u32 *attributes, efi_uintn_t *data_size, void *data) | 			 u32 *attributes, efi_uintn_t *data_size, void *data) | ||||||
| { | { | ||||||
| 	return EFI_UNSUPPORTED; | 	efi_status_t ret; | ||||||
|  | 
 | ||||||
|  | 	ret = efi_get_variable_int(variable_name, vendor, attributes, | ||||||
|  | 				   data_size, data, NULL); | ||||||
|  | 
 | ||||||
|  | 	/* Remove EFI_VARIABLE_READ_ONLY flag */ | ||||||
|  | 	if (attributes) | ||||||
|  | 		*attributes &= EFI_VARIABLE_MASK; | ||||||
|  | 
 | ||||||
|  | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -684,7 +693,8 @@ static efi_status_t __efi_runtime EFIAPI | ||||||
| efi_get_next_variable_name_runtime(efi_uintn_t *variable_name_size, | efi_get_next_variable_name_runtime(efi_uintn_t *variable_name_size, | ||||||
| 				   u16 *variable_name, efi_guid_t *vendor) | 				   u16 *variable_name, efi_guid_t *vendor) | ||||||
| { | { | ||||||
| 	return EFI_UNSUPPORTED; | 	return efi_get_next_variable_name_int(variable_name_size, variable_name, | ||||||
|  | 					      vendor); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue