MCPcopy Create free account
hub / github.com/F-Stack/f-stack / memory_mapping_mode

Function memory_mapping_mode

freebsd/arm64/arm64/machdep.c:1181–1221  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1179}
1180
1181int
1182memory_mapping_mode(vm_paddr_t pa)
1183{
1184 struct efi_md *map, *p;
1185 size_t efisz;
1186 int ndesc, i;
1187
1188 if (efihdr == NULL)
1189 return (VM_MEMATTR_WRITE_BACK);
1190
1191 /*
1192 * Memory map data provided by UEFI via the GetMemoryMap
1193 * Boot Services API.
1194 */
1195 efisz = (sizeof(struct efi_map_header) + 0xf) & ~0xf;
1196 map = (struct efi_md *)((uint8_t *)efihdr + efisz);
1197
1198 if (efihdr->descriptor_size == 0)
1199 return (VM_MEMATTR_WRITE_BACK);
1200 ndesc = efihdr->memory_size / efihdr->descriptor_size;
1201
1202 for (i = 0, p = map; i < ndesc; i++,
1203 p = efi_next_descriptor(p, efihdr->descriptor_size)) {
1204 if (pa < p->md_phys ||
1205 pa >= p->md_phys + p->md_pages * EFI_PAGE_SIZE)
1206 continue;
1207 if (p->md_type == EFI_MD_TYPE_IOMEM ||
1208 p->md_type == EFI_MD_TYPE_IOPORT)
1209 return (VM_MEMATTR_DEVICE);
1210 else if ((p->md_attr & EFI_MD_ATTR_WB) != 0 ||
1211 p->md_type == EFI_MD_TYPE_RECLAIM)
1212 return (VM_MEMATTR_WRITE_BACK);
1213 else if ((p->md_attr & EFI_MD_ATTR_WT) != 0)
1214 return (VM_MEMATTR_WRITE_THROUGH);
1215 else if ((p->md_attr & EFI_MD_ATTR_WC) != 0)
1216 return (VM_MEMATTR_WRITE_COMBINING);
1217 break;
1218 }
1219
1220 return (VM_MEMATTR_DEVICE);
1221}
1222
1223void
1224initarm(struct arm64_bootparams *abp)

Callers 1

pmap_mapbiosFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected