From patchwork Sun Oct 17 16:37:31 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: inteltool support for FreeBSD Date: Sun, 17 Oct 2010 16:37:31 -0000 From: Idwer Vollering X-Patchwork-Id: 2129 Message-Id: To: coreboot@coreboot.org Add support for FreeBSD. Signed-off-by: Idwer Vollering --- I took the liberty to copy MSR code from flashrom's hwaccess.h. Patch was written using FreeBSD 8.1, earlier versions might or might not work. Index: inteltool.h =================================================================== --- inteltool.h (revision 5954) +++ inteltool.h (working copy) @@ -29,6 +29,23 @@ #endif #include +#if defined(__FreeBSD__) + #include + #define OUTB(x, y) do { u_int tmp = (y); outb(tmp, (x)); } while (0) + #define OUTW(x, y) do { u_int tmp = (y); outw(tmp, (x)); } while (0) + #define OUTL(x, y) do { u_int tmp = (y); outl(tmp, (x)); } while (0) + #define INB(x) __extension__ ({ u_int inb_tmp = (x); inb(inb_tmp); }) + #define INW(x) __extension__ ({ u_int inw_tmp = (x); inw(inw_tmp); }) + #define INL(x) __extension__ ({ u_int inl_tmp = (x); inl(inl_tmp); }) +#else + #define OUTB outb + #define OUTW outw + #define OUTL outl + #define INB inb + #define INW inw + #define INL inl +#endif + #define INTELTOOL_VERSION "1.0" /* Tested chipsets: */ @@ -88,9 +105,19 @@ #define ARRAY_SIZE(a) ((int)(sizeof(a) / sizeof((a)[0]))) -#ifndef __DARWIN__ +#if !defined(__DARWIN__) && !defined(__FreeBSD__) typedef struct { uint32_t hi, lo; } msr_t; #endif +#if defined (__FreeBSD__) +/* FreeBSD already has conflicting definitions for wrmsr/rdmsr. */ +#undef rdmsr +#undef wrmsr +#define rdmsr freebsd_rdmsr +#define wrmsr freebsd_wrmsr +typedef struct { uint32_t hi, lo; } msr_t; +msr_t freebsd_rdmsr(int addr); +int freebsd_wrmsr(int addr, msr_t msr); +#endif typedef struct { uint16_t addr; int size; char *name; } io_register_t; void *map_physical(unsigned long phys_addr, size_t len); Index: inteltool.c =================================================================== --- inteltool.c (revision 5954) +++ inteltool.c (working copy) @@ -24,6 +24,9 @@ #include #include #include "inteltool.h" +#if defined(__FreeBSD__) +#include +#endif static const struct { uint16_t vendor_id, device_id; @@ -213,7 +216,17 @@ } } +#if defined(__FreeBSD__) + int io_fd; +#endif + +#if defined(__FreeBSD__) + if ((io_fd = open("/dev/io", O_RDWR)) < 0) { + perror("/dev/io"); +#else if (iopl(3)) { + perror("iopl"); +#endif printf("You need to be root.\n"); exit(1); } Index: Makefile =================================================================== --- Makefile (revision 5954) +++ Makefile (working copy) @@ -33,6 +33,11 @@ ifeq ($(OS_ARCH), Darwin) LDFLAGS = -framework DirectIO -lpci -lz endif +ifeq ($(OS_ARCH), FreeBSD) +CFLAGS += -I/usr/local/include +LDFLAGS += -L/usr/local/lib +LIBS = -lz +endif all: pciutils dep $(PROGRAM)