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:
Stefan Reinauer 2009-01-26 01:23:31 +00:00 committed by Peter Stuge
parent d48091a35c
commit 713ee92c96
4 changed files with 45 additions and 5 deletions

View File

@ -18,6 +18,10 @@ OS_ARCH = $(shell uname)
ifneq ($(OS_ARCH), SunOS) ifneq ($(OS_ARCH), SunOS)
STRIP_ARGS = -s STRIP_ARGS = -s
endif endif
ifeq ($(OS_ARCH), Darwin)
CFLAGS += -I/usr/local/include
LDFLAGS += -framework IOKit -framework DirectIO -L/usr/local/lib
endif
ifeq ($(OS_ARCH), FreeBSD) ifeq ($(OS_ARCH), FreeBSD)
CFLAGS += -I/usr/local/include CFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib LDFLAGS += -L/usr/local/lib

View File

@ -184,11 +184,20 @@ static void search_lb_records(struct lb_record *rec, struct lb_record *last,
int coreboot_init(void) int coreboot_init(void)
{ {
uint8_t *low_1MB; uint8_t *low_1MB;
unsigned long addr; unsigned long addr, start;
struct lb_header *lb_table; struct lb_header *lb_table;
struct lb_record *rec, *last; 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); lb_table = find_lb_table(low_1MB, 0x00000, 0x1000);
if (!lb_table) if (!lb_table)
lb_table = find_lb_table(low_1MB, 0xf0000, 1024*1024); lb_table = find_lb_table(low_1MB, 0xf0000, 1024*1024);
@ -197,8 +206,8 @@ int coreboot_init(void)
return -1; return -1;
} }
addr = ((char *)lb_table) - ((char *)low_1MB); addr = ((char *)lb_table) - ((char *)low_1MB) + start;
printf_debug("coreboot table found at %p.\n", lb_table); printf_debug("coreboot table found at %p.\n", lb_table + start);
rec = (struct lb_record *)(((char *)lb_table) + lb_table->header_bytes); rec = (struct lb_record *)(((char *)lb_table) + lb_table->header_bytes);
last = (struct lb_record *)(((char *)rec) + lb_table->table_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", printf_debug("coreboot header(%d) checksum: %04x table(%d) checksum: %04x entries: %d\n",

View File

@ -30,6 +30,10 @@
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#if (defined(__MACH__) && defined(__APPLE__))
#define __DARWIN__
#endif
#if defined(__FreeBSD__) #if defined(__FreeBSD__)
#include <machine/cpufunc.h> #include <machine/cpufunc.h>
#define off64_t off_t #define off64_t off_t
@ -41,6 +45,11 @@
#define INW(x) __extension__ ({ u_int tmp = (x); inw(tmp); }) #define INW(x) __extension__ ({ u_int tmp = (x); inw(tmp); })
#define INL(x) __extension__ ({ u_int tmp = (x); inl(tmp); }) #define INL(x) __extension__ ({ u_int tmp = (x); inl(tmp); })
#else #else
#if defined(__DARWIN__)
#include <DirectIO/darwinio.h>
#define off64_t off_t
#define lseek64 lseek
#endif
#define OUTB outb #define OUTB outb
#define OUTW outw #define OUTW outw
#define OUTL outl #define OUTL outl

View File

@ -1,4 +1,3 @@
#include <sys/mman.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
@ -6,6 +5,24 @@
#include <errno.h> #include <errno.h>
#include "flash.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)) #if defined (__sun) && (defined(__i386) || defined(__amd64))
# define MEM_DEV "/dev/xsvc" # define MEM_DEV "/dev/xsvc"
#else #else
@ -34,6 +51,7 @@ void physunmap(void *virt_addr, size_t len)
{ {
munmap(virt_addr, len); munmap(virt_addr, len);
} }
#endif
void *physmap(const char *descr, unsigned long phys_addr, size_t len) void *physmap(const char *descr, unsigned long phys_addr, size_t len)
{ {