diff options
authorCarl-Daniel Hailfinger <>2010-07-02 17:12:50 +0000
committerCarl-Daniel Hailfinger <>2010-07-02 17:12:50 +0000
commitb63b067ae22803689592db482611093b33a29eef (patch)
parentf93b36a6bcc3ee7a3c97554e76976e2081f8ba0f (diff)
Add OpenBSD support
Add a requirements section to the man page which lists the needed access permissions for each programmer. This feature needs my pciutils/libpci 8/16-bit write emulation patch at titled [PATCH] Fix pciutils non-32bit PCI write on OpenBSD Corresponding to flashrom svn r1067. Signed-off-by: Carl-Daniel Hailfinger <> Acked-by: Stuart Henderson <>
6 files changed, 81 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 00ab0b2..96de0ae 100644
--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,10 @@ ifeq ($(OS_ARCH), FreeBSD)
CPPFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib
+ifeq ($(OS_ARCH), OpenBSD)
+CPPFLAGS += -I/usr/local/include
+LDFLAGS += -L/usr/local/lib
ifeq ($(OS_ARCH), DOS)
CPPFLAGS += -I../libgetopt -I../libpci/include
@@ -259,6 +263,10 @@ ifeq ($(OS_ARCH), DOS)
LIBS += ../libpci/lib/libpci.a
LIBS += -lpci
+ifeq ($(OS_ARCH), OpenBSD)
+# For (i386|amd64)_iopl(2).
+LIBS += -l$(shell uname -m)
diff --git a/README b/README
index 022c035..9bbecf0 100644
--- a/README
+++ b/README
@@ -55,6 +55,11 @@ On FreeBSD, you need the following ports:
* devel/gmake
* devel/libpci
+On OpenBSD, you need the following ports:
+ * devel/gmake
+ * sysutils/pciutils
To compile on Linux, use:
@@ -76,6 +81,10 @@ To compile on NetBSD or DragonFly BSD, use:
ln -s /usr/pkg/include/pciutils pci
gmake CPPFLAGS=-I. LDFLAGS="-L/usr/pkg/lib -Wl,-rpath-link,/usr/pkg/lib"
+To compile on OpenBSD, use:
+ gmake
To compile and run on Darwin/Mac OS X:
Install DirectIO from coresystems GmbH.
diff --git a/flashrom.8 b/flashrom.8
index f065342..d94df61 100644
--- a/flashrom.8
+++ b/flashrom.8
@@ -306,7 +306,7 @@ can be any comma-separated combination of
.B "flashrom \-p dummy:lpc,fwh"
-.BR "nic3com" , " nicrealtek" , " nicsmc1211" , " gfxnvidia" , " satasii\
+.BR "nic3com" , " nicrealtek" , " nicsmc1211" , " gfxnvidia" , " satasii \
" and " atahpt " programmers
These programmers have an option to specify the PCI address of the card
your want to use, which must be specified if more than one card supported
@@ -391,6 +391,51 @@ can be any of
flashrom exits with 0 on success, 1 on most failures but with 2 if /dev/mem
(/dev/xsvc on Solaris) can not be opened and with 3 if a call to mmap() fails.
+flashrom needs different access permissions for different programmers.
+.B internal
+needs raw memory access, PCI configuration space access, raw I/O port
+access (x86) and MSR access (x86).
+.B it87spi
+needs raw I/O port access (x86).
+.BR nic3com ", " nicrealtek ", " nicsmc1211 " and " nicnatsemi "
+need PCI configuration space read access and raw I/O port access.
+.B atahpt
+needs PCI configuration space access and raw I/O port access.
+.BR gfxnvidia " and " drkaiser
+need PCI configuration space access and raw memory access.
+.B satasii
+needs PCI configuration space read access and raw memory access.
+.B serprog
+needs TCP access to the network or userspace access to a serial port.
+.B buspirate_spi
+needs userspace access to a serial port.
+.BR dediprog " and " ft2232_spi
+need access to the USB device via libusb.
+.B dummy
+needs no access permissions at all.
+.BR internal ", " it87spi ", " nic3com ", " nicrealtek ", " nicsmc1211 ", "
+.BR nicnatsemi ", " "gfxnvidia" ", " drkaiser ", " satasii " and " atahpt
+have to be run as superuser/root, and need additional raw access permission.
+.BR serprog ", " buspirate_spi ", " dediprog " and " ft2232_spi
+can be run as normal user on most operating systems if appropriate device
+permissions are set.
+On OpenBSD, you can obtain raw access permission by setting
+securelevel=-1 in /etc/rc.securelevel and rebooting, or rebooting into single
+user mode.
Please report any bugs at
diff --git a/hwaccess.c b/hwaccess.c
index 85e13ed..3a61e60 100644
--- a/hwaccess.c
+++ b/hwaccess.c
@@ -57,6 +57,11 @@ void get_io_perms(void)
msg_perr("ERROR: Could not get I/O privileges (%s).\n"
"You need to be root.\n", strerror(errno));
+#if defined (__OpenBSD__)
+ msg_perr("Please set securelevel=-1 in /etc/rc.securelevel "
+ "and reboot, or reboot into \n");
+ msg_perr("single user mode.\n");
diff --git a/hwaccess.h b/hwaccess.h
index 53e908a..c38ee6f 100644
--- a/hwaccess.h
+++ b/hwaccess.h
@@ -228,17 +228,25 @@ cpu_to_be(64)
-#if defined(__NetBSD__)
+#if defined(__NetBSD__) || defined (__OpenBSD__)
#define off64_t off_t
#define lseek64 lseek
#if defined(__i386__) || defined(__x86_64__)
#include <sys/types.h>
#include <machine/sysarch.h>
+#if defined(__NetBSD__)
#if defined(__i386__)
#define iopl i386_iopl
#elif defined(__x86_64__)
#define iopl x86_64_iopl
+#elif defined (__OpenBSD__)
+ #if defined(__i386__)
+ #define iopl i386_iopl
+ #elif defined(__amd64__)
+ #define iopl amd64_iopl
+ #endif
#include <stdint.h>
static inline void outb(uint8_t value, uint16_t port)
diff --git a/physmap.c b/physmap.c
index c65df30..bc02007 100644
--- a/physmap.c
+++ b/physmap.c
@@ -229,6 +229,10 @@ void *physmap_common(const char *descr, unsigned long phys_addr, size_t len, int
msg_perr("You can override CONFIG_X86_PAT at boot with the nopat kernel parameter but\n");
msg_perr("disabling the other option unfortunately requires a kernel recompile. Sorry!\n");
+#elif defined (__OpenBSD__)
+ msg_perr("Please set securelevel=-1 in /etc/rc.securelevel "
+ "and reboot, or reboot into \n");
+ msg_perr("single user mode.\n");
if (!mayfail)
OpenPOWER on IntegriCloud