| /* intelmetool |
| * |
| * Copyright (C) 2013-2015 Damien Zammit <damien@zamaudio.com> |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License as |
| * published by the Free Software Foundation; either version 2 of |
| * the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| */ |
| |
| #include "mmap.h" |
| #include <errno.h> |
| #include <string.h> |
| |
| #ifndef __DARWIN__ |
| int fd_mem; |
| |
| void *map_physical_exact(off_t phys_addr, void *mapto, size_t len) |
| { |
| void *virt_addr; |
| int err; |
| |
| virt_addr = mmap(mapto, len, PROT_WRITE | PROT_READ, |
| MAP_SHARED | MAP_FIXED, fd_mem, phys_addr); |
| |
| if (virt_addr == MAP_FAILED) { |
| err = errno; |
| printf("Error mapping physical memory 0x%016jd [0x%zx] ERRNO=%d %s\n", |
| (intmax_t)phys_addr, len, err, strerror(err)); |
| return NULL; |
| } |
| |
| return virt_addr; |
| } |
| |
| void *map_physical(off_t phys_addr, size_t len) |
| { |
| void *virt_addr; |
| int err; |
| |
| virt_addr = mmap(NULL, len, PROT_WRITE | PROT_READ, MAP_SHARED, fd_mem, phys_addr); |
| |
| if (virt_addr == MAP_FAILED) { |
| err = errno; |
| printf("Error mapping physical memory 0x%016jd [0x%zx] ERRNO=%d %s\n", |
| (intmax_t)phys_addr, len, err, strerror(err)); |
| return NULL; |
| } |
| |
| return virt_addr; |
| } |
| |
| void unmap_physical(void *virt_addr, size_t len) |
| { |
| munmap(virt_addr, len); |
| } |
| #endif |