Allow superiotool to compile and work on FreeBSD. Tested on FreeBSD 7.
authorAndriy Gapon <avg@icyb.net.ua>
Tue, 28 Oct 2008 22:13:38 +0000 (22:13 +0000)
committerUwe Hermann <uwe@hermann-uwe.de>
Tue, 28 Oct 2008 22:13:38 +0000 (22:13 +0000)
Signed-off-by: Andriy Gapon <avg@icyb.net.ua>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3698 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/superiotool/ali.c
util/superiotool/ite.c
util/superiotool/nsc.c
util/superiotool/smsc.c
util/superiotool/superiotool.c
util/superiotool/superiotool.h
util/superiotool/winbond.c

index a23ffcc9fc07c9bf426d403792451c2d7b17001f..0bc1e062e39ff4890af80ff895a8dfe249dda7a8 100644 (file)
@@ -60,13 +60,13 @@ static const struct superio_registers reg_table[] = {
 
 static void enter_conf_mode_ali(uint16_t port)
 {
-       outb(0x51, port);
-       outb(0x23, port);
+       OUTB(0x51, port);
+       OUTB(0x23, port);
 }
 
 static void exit_conf_mode_ali(uint16_t port)
 {
-       outb(0xbb, port);
+       OUTB(0xbb, port);
 }
 
 void probe_idregs_ali(uint16_t port)
index fcb6375227d16828c1b4d5f5841a683c81fe66d1..1cfa3170379fd4ea97fdf2b4192f0f1ad547b600 100644 (file)
@@ -468,11 +468,11 @@ static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
        /* Determine Super I/O config port. */
        idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
        for (i = 0; i < 4; i++)
-               outb(init[idx][i], ISA_PNP_ADDR);
+               OUTB(init[idx][i], ISA_PNP_ADDR);
 
        /* Sequentially write the 32 MB PnP init values. */
        for (i = 0; i < 32; i++)
-               outb(initkey_mbpnp[i], port);
+               OUTB(initkey_mbpnp[i], port);
 }
 
 /**
@@ -482,10 +482,10 @@ static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
  */
 static void enter_conf_mode_ite(uint16_t port)
 {
-       outb(0x87, port);
-       outb(0x01, port);
-       outb(0x55, port);
-       outb((port == 0x2e) ? 0x55 : 0xaa, port);
+       OUTB(0x87, port);
+       OUTB(0x01, port);
+       OUTB(0x55, port);
+       OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
 }
 
 static void exit_conf_mode_ite(uint16_t port)
index f5b2cd48e95faa54da6248021c18939554831bf3..3a3336a6b49ed68120361e12f0f62b0de7c92528 100644 (file)
@@ -479,21 +479,21 @@ void probe_idregs_nsc(uint16_t port)
 
        probing_for("NSC", "", port);
 
-       outb(CHIP_ID_REG, port);
-       if (inb(port) != CHIP_ID_REG) {
+       OUTB(CHIP_ID_REG, port);
+       if (INB(port) != CHIP_ID_REG) {
                if (verbose)
                        printf(NOTFOUND "port=0x%02x, port+1=0x%02x\n",
-                              inb(port), inb(port + 1));
+                              INB(port), INB(port + 1));
                return;
        }
-       id = inb(port + 1);
+       id = INB(port + 1);
 
-       outb(CHIP_REV_REG, port);
-       if (inb(port) != CHIP_REV_REG) {
+       OUTB(CHIP_REV_REG, port);
+       if (INB(port) != CHIP_REV_REG) {
                printf("Warning: Can't get chip revision. Setting to 0xff.\n");
                rev = 0xff;
        } else {
-               rev = inb(port + 1);
+               rev = INB(port + 1);
        }
 
        if (superio_unknown(reg_table, id)) {
index a45ee45a9972dc9f935af12c18efd66705f23a87..ae141ea815f7f69a49cb720339d57bc4a75d060a 100644 (file)
@@ -608,13 +608,13 @@ static void enter_conf_mode_smsc(uint16_t port)
         * in the assumption that the extra 0x55 won't hurt the other
         * Super I/Os. This is verified to be true on (at least) the FDC37N769.
         */
-       outb(0x55, port);
-       outb(0x55, port);
+       OUTB(0x55, port);
+       OUTB(0x55, port);
 }
 
 static void exit_conf_mode_smsc(uint16_t port)
 {
-       outb(0xaa, port);
+       OUTB(0xaa, port);
 }
 
 static void probe_idregs_smsc_helper(uint16_t port, uint8_t idreg,
index 10f225f6dcaa0b1de79797fbbfb17e4c624e61ae..1bbe5feec7a815f1d63a62f05b2ba23e259dd093 100644 (file)
 
 #include "superiotool.h"
 
+#if defined(__FreeBSD__)
+#include <fcntl.h>
+#include <unistd.h>
+#endif
+
 /* Command line options. */
 int dump = 0, verbose = 0, extra_dump = 0;
 
@@ -31,25 +36,25 @@ int chip_found = 0;
 
 uint8_t regval(uint16_t port, uint8_t reg)
 {
-       outb(reg, port);
-       return inb(port + ((port == 0x3bd) ? 2 : 1)); /* 0x3bd is special. */
+       OUTB(reg, port);
+       return INB(port + ((port == 0x3bd) ? 2 : 1)); /* 0x3bd is special. */
 }
 
 void regwrite(uint16_t port, uint8_t reg, uint8_t val)
 {
-       outb(reg, port);
-       outb(val, port + 1);
+       OUTB(reg, port);
+       OUTB(val, port + 1);
 }
 
 void enter_conf_mode_winbond_fintek_ite_8787(uint16_t port)
 {
-       outb(0x87, port);
-       outb(0x87, port);
+       OUTB(0x87, port);
+       OUTB(0x87, port);
 }
 
 void exit_conf_mode_winbond_fintek_ite_8787(uint16_t port)
 {
-       outb(0xaa, port);               /* Fintek, Winbond */
+       OUTB(0xaa, port);               /* Fintek, Winbond */
        regwrite(port, 0x02, 0x02);     /* ITE */
 }
 
@@ -204,6 +209,9 @@ static void print_version(void)
 int main(int argc, char *argv[])
 {
        int i, j, opt, option_index;
+#if defined(__FreeBSD__)
+       int io_fd;
+#endif
 
        static const struct option long_options[] = {
                {"dump",                no_argument, NULL, 'd'},
@@ -247,8 +255,13 @@ int main(int argc, char *argv[])
                }
        }
 
+#if defined(__FreeBSD__)
+       if ((io_fd = open("/dev/io", O_RDWR)) < 0) {
+               perror("/dev/io");
+#else
        if (iopl(3) < 0) {
                perror("iopl");
+#endif
                printf("Superiotool must be run as root.\n");
                exit(1);
        }
@@ -264,5 +277,8 @@ int main(int argc, char *argv[])
        if (!chip_found)
                printf("No Super I/O found\n");
 
+#if defined(__FreeBSD__)
+       close(io_fd);
+#endif
        return 0;
 }
index 3433cdb4a6f08fea321b55694c136192a7910d17..7e0ca0bd9bcd799bf81912dafc85cbbe4ac816bb 100644 (file)
 #include <stdint.h>
 #include <string.h>
 #include <getopt.h>
+#if defined(__GLIBC__)
 #include <sys/io.h>
+#endif
+
+#if defined(__FreeBSD__)
+#include <sys/types.h>
+#include <machine/cpufunc.h>
+#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 tmp = (x); inb(tmp); })
+#define INW(x) __extension__ ({ u_int tmp = (x); inw(tmp); })
+#define INL(x) __extension__ ({ u_int tmp = (x); inl(tmp); })
+#else
+#define OUTB outb
+#define OUTW outw
+#define OUTL outl
+#define INB  inb
+#define INW  inw
+#define INL  inl
+#endif
 
 #define USAGE "Usage: superiotool [-d] [-e] [-l] [-V] [-v] [-h]\n\n\
   -d | --dump            Dump Super I/O register contents\n\
index 4e2794470b04aabbec44ac1c336c1a82e78f6dc3..91f06063eca96af46686765e63435a61de710938 100644 (file)
@@ -470,18 +470,18 @@ static const struct superio_registers reg_table[] = {
 
 static void enter_conf_mode_winbond_88(uint16_t port)
 {
-       outb(0x88, port);
+       OUTB(0x88, port);
 }
 
 static void enter_conf_mode_winbond_89(uint16_t port)
 {
-       outb(0x89, port);
+       OUTB(0x89, port);
 }
 
 static void enter_conf_mode_winbond_86(uint16_t port)
 {
-       outb(0x86, port);
-       outb(0x86, port);
+       OUTB(0x86, port);
+       OUTB(0x86, port);
 }
 
 static void probe_idregs_winbond_helper(const char *init, uint16_t port)