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)
|
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
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue