mmap.c
1 /* intelmetool */ 2 /* SPDX-License-Identifier: GPL-2.0-or-later */ 3 4 #include "mmap.h" 5 #include <errno.h> 6 #include <string.h> 7 8 #ifndef __DARWIN__ 9 int fd_mem; 10 11 void *map_physical_exact(off_t phys_addr, void *mapto, size_t len) 12 { 13 void *virt_addr; 14 int err; 15 16 virt_addr = mmap(mapto, len, PROT_WRITE | PROT_READ, 17 MAP_SHARED | MAP_FIXED, fd_mem, phys_addr); 18 19 if (virt_addr == MAP_FAILED) { 20 err = errno; 21 printf("Error mapping physical memory 0x%016jx [0x%zx] ERRNO=%d %s\n", 22 (uintmax_t)phys_addr, len, err, strerror(err)); 23 return NULL; 24 } 25 26 return virt_addr; 27 } 28 29 void *map_physical(off_t phys_addr, size_t len) 30 { 31 void *virt_addr; 32 int err; 33 34 virt_addr = mmap(NULL, len, PROT_WRITE | PROT_READ, MAP_SHARED, fd_mem, phys_addr); 35 36 if (virt_addr == MAP_FAILED) { 37 err = errno; 38 printf("Error mapping physical memory 0x%016jx [0x%zx] ERRNO=%d %s\n", 39 (uintmax_t)phys_addr, len, err, strerror(err)); 40 return NULL; 41 } 42 43 return virt_addr; 44 } 45 46 void unmap_physical(void *virt_addr, size_t len) 47 { 48 munmap(virt_addr, len); 49 } 50 #endif