*/
u64 efi_mem_attributes(unsigned long phys_addr)
{
- efi_memory_desc_t *md;
+ efi_memory_desc_t md;
- if (!efi_enabled(EFI_MEMMAP))
+ if (efi_mem_desc_lookup(phys_addr, &md))
return 0;
- for_each_efi_memory_desc(md) {
- if ((md->phys_addr <= phys_addr) &&
- (phys_addr < (md->phys_addr +
- (md->num_pages << EFI_PAGE_SHIFT))))
- return md->attribute;
- }
- return 0;
+ return md.attribute;
}
/*
*/
int efi_mem_type(unsigned long phys_addr)
{
- const efi_memory_desc_t *md;
+ efi_memory_desc_t md;
- if (!efi_enabled(EFI_MEMMAP))
+ if (!efi_enabled(EFI_MEMMAP) && !efi_enabled(EFI_PARAVIRT))
return -ENOTSUPP;
- for_each_efi_memory_desc(md) {
- if ((md->phys_addr <= phys_addr) &&
- (phys_addr < (md->phys_addr +
- (md->num_pages << EFI_PAGE_SHIFT))))
- return md->type;
- }
- return -EINVAL;
+ if (efi_mem_desc_lookup(phys_addr, &md))
+ return -EINVAL;
+
+ return md.type;
}
int efi_status_to_err(efi_status_t status)