flashrom: Darwin / Mac OS X
Through DirectIO from coresystems GmbH we now support Darwin/Mac OS X. DirectIO is available at http://www.coresystems.de/en/directio Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Signed-off-by: Peter Stuge <peter@stuge.se> Acked-by: Peter Stuge <peter@stuge.se> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3905 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
d48091a35c
commit
713ee92c96
|
@ -18,6 +18,10 @@ OS_ARCH = $(shell uname)
|
|||
ifneq ($(OS_ARCH), SunOS)
|
||||
STRIP_ARGS = -s
|
||||
endif
|
||||
ifeq ($(OS_ARCH), Darwin)
|
||||
CFLAGS += -I/usr/local/include
|
||||
LDFLAGS += -framework IOKit -framework DirectIO -L/usr/local/lib
|
||||
endif
|
||||
ifeq ($(OS_ARCH), FreeBSD)
|
||||
CFLAGS += -I/usr/local/include
|
||||
LDFLAGS += -L/usr/local/lib
|
||||
|
|
|
@ -184,11 +184,20 @@ static void search_lb_records(struct lb_record *rec, struct lb_record *last,
|
|||
int coreboot_init(void)
|
||||
{
|
||||
uint8_t *low_1MB;
|
||||
unsigned long addr;
|
||||
unsigned long addr, start;
|
||||
struct lb_header *lb_table;
|
||||
struct lb_record *rec, *last;
|
||||
|
||||
low_1MB = physmap("low megabyte", 0x0, 1024*1024);
|
||||
#ifdef __DARWIN__
|
||||
/* This is a hack. DirectIO fails to map physical address 0x00000000.
|
||||
* Why?
|
||||
*/
|
||||
start = 0x400;
|
||||
#else
|
||||
start = 0x0;
|
||||
#endif
|
||||
low_1MB = physmap("low megabyte", start, 1024*1024);
|
||||
|
||||
lb_table = find_lb_table(low_1MB, 0x00000, 0x1000);
|
||||
if (!lb_table)
|
||||
lb_table = find_lb_table(low_1MB, 0xf0000, 1024*1024);
|
||||
|
@ -197,8 +206,8 @@ int coreboot_init(void)
|
|||
return -1;
|
||||
}
|
||||
|
||||
addr = ((char *)lb_table) - ((char *)low_1MB);
|
||||
printf_debug("coreboot table found at %p.\n", lb_table);
|
||||
addr = ((char *)lb_table) - ((char *)low_1MB) + start;
|
||||
printf_debug("coreboot table found at %p.\n", lb_table + start);
|
||||
rec = (struct lb_record *)(((char *)lb_table) + lb_table->header_bytes);
|
||||
last = (struct lb_record *)(((char *)rec) + lb_table->table_bytes);
|
||||
printf_debug("coreboot header(%d) checksum: %04x table(%d) checksum: %04x entries: %d\n",
|
||||
|
|
|
@ -30,6 +30,10 @@
|
|||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if (defined(__MACH__) && defined(__APPLE__))
|
||||
#define __DARWIN__
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
#include <machine/cpufunc.h>
|
||||
#define off64_t off_t
|
||||
|
@ -41,6 +45,11 @@
|
|||
#define INW(x) __extension__ ({ u_int tmp = (x); inw(tmp); })
|
||||
#define INL(x) __extension__ ({ u_int tmp = (x); inl(tmp); })
|
||||
#else
|
||||
#if defined(__DARWIN__)
|
||||
#include <DirectIO/darwinio.h>
|
||||
#define off64_t off_t
|
||||
#define lseek64 lseek
|
||||
#endif
|
||||
#define OUTB outb
|
||||
#define OUTW outw
|
||||
#define OUTL outl
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#include <sys/mman.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -6,6 +5,24 @@
|
|||
#include <errno.h>
|
||||
#include "flash.h"
|
||||
|
||||
#ifdef __DARWIN__
|
||||
#include <DirectIO/darwinio.h>
|
||||
|
||||
#define MEM_DEV "DirectIO"
|
||||
|
||||
void *sys_physmap(unsigned long phys_addr, size_t len)
|
||||
{
|
||||
return map_physical(phys_addr, len);
|
||||
}
|
||||
|
||||
void physunmap(void *virt_addr, size_t len)
|
||||
{
|
||||
unmap_physical(virt_addr, len);
|
||||
}
|
||||
|
||||
#else
|
||||
#include <sys/mman.h>
|
||||
|
||||
#if defined (__sun) && (defined(__i386) || defined(__amd64))
|
||||
# define MEM_DEV "/dev/xsvc"
|
||||
#else
|
||||
|
@ -34,6 +51,7 @@ void physunmap(void *virt_addr, size_t len)
|
|||
{
|
||||
munmap(virt_addr, len);
|
||||
}
|
||||
#endif
|
||||
|
||||
void *physmap(const char *descr, unsigned long phys_addr, size_t len)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue