xref: /aosp_15_r20/external/coreboot/util/intelmetool/mmap.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
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 
map_physical_exact(off_t phys_addr,void * mapto,size_t len)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 
map_physical(off_t phys_addr,size_t len)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 
unmap_physical(void * virt_addr,size_t len)46 void unmap_physical(void *virt_addr, size_t len)
47 {
48 	munmap(virt_addr, len);
49 }
50 #endif
51