Lines Matching +full:reserve +full:- +full:mem +full:- +full:v1

1 // SPDX-License-Identifier: GPL-2.0-only
3 * efi.c - EFI subsystem
103 return -EINVAL; in parse_efi_cmdline()
136 return -EINVAL; in systab_show()
152 return str - buf; in systab_show()
181 return attr->mode; in efi_attr_is_visible()
281 return -ENOMEM; in efivar_ssdt_load()
296 ret = -ENOMEM; in efivar_ssdt_load()
304 ucs2_as_utf8(utf8_name, name, limit - 1); in efivar_ssdt_load()
308 pr_info("loading SSDT from variable %s-%pUl\n", efivar_ssdt, &guid); in efivar_ssdt_load()
312 ret = -EIO; in efivar_ssdt_load()
318 ret = -ENOMEM; in efivar_ssdt_load()
367 switch (md->type) { in efi_debugfs_init()
370 type_count[md->type]++); in efi_debugfs_init()
374 type_count[md->type]++); in efi_debugfs_init()
386 debugfs_blob[i].size = md->num_pages << EFI_PAGE_SHIFT; in efi_debugfs_init()
387 debugfs_blob[i].data = memremap(md->phys_addr, in efi_debugfs_init()
432 platform_device_register_simple("rtc-efi", 0, NULL, 0); in efisubsys_init()
438 error = -ENOMEM; in efisubsys_init()
510 unsigned long long start = md->phys_addr; in efi_find_mirror()
511 unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; in efi_find_mirror()
514 if (md->attribute & EFI_MEMORY_MORE_RELIABLE) { in efi_find_mirror()
536 return -EINVAL; in __efi_mem_desc_lookup()
541 return -EINVAL; in __efi_mem_desc_lookup()
549 if ((md->phys_addr & (EFI_PAGE_SIZE - 1)) || in __efi_mem_desc_lookup()
550 (md->num_pages <= 0) || in __efi_mem_desc_lookup()
551 (md->num_pages > (U64_MAX - md->phys_addr) >> EFI_PAGE_SHIFT)) in __efi_mem_desc_lookup()
554 size = md->num_pages << EFI_PAGE_SHIFT; in __efi_mem_desc_lookup()
555 end = md->phys_addr + size; in __efi_mem_desc_lookup()
556 if (phys_addr >= md->phys_addr && phys_addr < end) { in __efi_mem_desc_lookup()
561 return -ENOENT; in __efi_mem_desc_lookup()
573 u64 size = md->num_pages << EFI_PAGE_SHIFT; in efi_mem_desc_end()
574 u64 end = md->phys_addr + size; in efi_mem_desc_end()
581 * efi_mem_reserve - Reserve an EFI memory region
582 * @addr: Physical address to reserve
602 * Some architectures (x86) reserve all boot services ranges in efi_mem_reserve()
673 * reserve_unaccepted - Map and reserve unaccepted configuration table
694 size = PAGE_ALIGN(sizeof(*unaccepted) + unaccepted->size); in reserve_unaccepted()
723 return -EINVAL; in efi_config_parse_tables()
742 size = min_t(u32, seed->size, SZ_1K); // sanity check in efi_config_parse_tables()
751 add_bootloader_randomness(seed->bits, size); in efi_config_parse_tables()
752 memzero_explicit(seed->bits, size); in efi_config_parse_tables()
781 return -ENOMEM; in efi_config_parse_tables()
786 /* reserve the entry itself */ in efi_config_parse_tables()
788 struct_size(rsv, entry, rsv->size)); in efi_config_parse_tables()
790 for (i = 0; i < atomic_read(&rsv->count); i++) { in efi_config_parse_tables()
791 memblock_reserve(rsv->entry[i].base, in efi_config_parse_tables()
792 rsv->entry[i].size); in efi_config_parse_tables()
795 prsv = rsv->next; in efi_config_parse_tables()
805 efi.runtime_supported_mask &= tbl->runtime_services_supported; in efi_config_parse_tables()
816 phys_initrd_start = tbl->base; in efi_config_parse_tables()
817 phys_initrd_size = tbl->size; in efi_config_parse_tables()
829 if (unaccepted->version == 1) { in efi_config_parse_tables()
844 if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) { in efi_systab_check_header()
846 return -EINVAL; in efi_systab_check_header()
878 for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i) in efi_systab_report_header()
885 rev = (u16)systab_hdr->revision; in efi_systab_report_header()
886 pr_info("EFI v%u.%u", systab_hdr->revision >> 16, rev / 10); in efi_systab_report_header()
895 systab_hdr->revision > EFI_1_10_SYSTEM_TABLE_REVISION && in efi_systab_report_header()
897 pr_info("Apple Mac detected, using EFI v1.10 runtime services only\n"); in efi_systab_report_header()
913 "ACPI Mem NVS",
929 if (md->type >= ARRAY_SIZE(memory_type_name)) in efi_md_typeattr_format()
930 type_len = snprintf(pos, size, "[type=%u", md->type); in efi_md_typeattr_format()
932 type_len = snprintf(pos, size, "[%-*s", in efi_md_typeattr_format()
933 (int)(sizeof(memory_type_name[0]) - 1), in efi_md_typeattr_format()
934 memory_type_name[md->type]); in efi_md_typeattr_format()
939 size -= type_len; in efi_md_typeattr_format()
941 attr = md->attribute; in efi_md_typeattr_format()
972 * efi_mem_attributes - lookup memmap attributes for physical address
987 if ((md->phys_addr <= phys_addr) && in efi_mem_attributes()
988 (phys_addr < (md->phys_addr + in efi_mem_attributes()
989 (md->num_pages << EFI_PAGE_SHIFT)))) in efi_mem_attributes()
990 return md->attribute; in efi_mem_attributes()
996 * efi_mem_type - lookup memmap type for physical address
1001 * map, -EINVAL otherwise.
1008 return -ENOTSUPP; in efi_mem_type()
1011 if ((md->phys_addr <= phys_addr) && in efi_mem_type()
1012 (phys_addr < (md->phys_addr + in efi_mem_type()
1013 (md->num_pages << EFI_PAGE_SHIFT)))) in efi_mem_type()
1014 return md->type; in efi_mem_type()
1016 return -EINVAL; in efi_mem_type()
1028 err = -EINVAL; in efi_status_to_err()
1031 err = -ENOSPC; in efi_status_to_err()
1034 err = -EIO; in efi_status_to_err()
1037 err = -EROFS; in efi_status_to_err()
1040 err = -EACCES; in efi_status_to_err()
1043 err = -ENOENT; in efi_status_to_err()
1046 err = -EINTR; in efi_status_to_err()
1049 err = -EINVAL; in efi_status_to_err()
1062 return -ENODEV; in efi_memreserve_map_root()
1068 return -ENOMEM; in efi_memreserve_map_root()
1079 return -ENOMEM; in efi_mem_reserve_iomem()
1081 res->name = "reserved"; in efi_mem_reserve_iomem()
1082 res->flags = IORESOURCE_MEM; in efi_mem_reserve_iomem()
1083 res->start = addr; in efi_mem_reserve_iomem()
1084 res->end = addr + size - 1; in efi_mem_reserve_iomem()
1108 return -ENODEV; in efi_mem_reserve_persistent()
1117 for (prsv = efi_memreserve_root->next; prsv; ) { in efi_mem_reserve_persistent()
1120 return -ENOMEM; in efi_mem_reserve_persistent()
1121 index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size); in efi_mem_reserve_persistent()
1122 if (index < rsv->size) { in efi_mem_reserve_persistent()
1123 rsv->entry[index].base = addr; in efi_mem_reserve_persistent()
1124 rsv->entry[index].size = size; in efi_mem_reserve_persistent()
1129 prsv = rsv->next; in efi_mem_reserve_persistent()
1133 /* no slot found - allocate a new linked list entry */ in efi_mem_reserve_persistent()
1136 return -ENOMEM; in efi_mem_reserve_persistent()
1150 rsv->size = EFI_MEMRESERVE_COUNT(SZ_4K); in efi_mem_reserve_persistent()
1151 atomic_set(&rsv->count, 1); in efi_mem_reserve_persistent()
1152 rsv->entry[0].base = addr; in efi_mem_reserve_persistent()
1153 rsv->entry[0].size = size; in efi_mem_reserve_persistent()
1156 rsv->next = efi_memreserve_root->next; in efi_mem_reserve_persistent()
1157 efi_memreserve_root->next = __pa(rsv); in efi_mem_reserve_persistent()
1185 size = min(seed->size, EFI_RANDOM_SEED_SIZE); in update_efi_random_seed()
1194 seed->size = size; in update_efi_random_seed()
1195 get_random_bytes(seed->bits, seed->size); in update_efi_random_seed()