Allow superiotool to compile and work on FreeBSD. Tested on FreeBSD 7.
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
This commit is contained in:
parent
c372aa4f77
commit
b64aa60f1f
|
@ -60,13 +60,13 @@ static const struct superio_registers reg_table[] = {
|
||||||
|
|
||||||
static void enter_conf_mode_ali(uint16_t port)
|
static void enter_conf_mode_ali(uint16_t port)
|
||||||
{
|
{
|
||||||
outb(0x51, port);
|
OUTB(0x51, port);
|
||||||
outb(0x23, port);
|
OUTB(0x23, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void exit_conf_mode_ali(uint16_t port)
|
static void exit_conf_mode_ali(uint16_t port)
|
||||||
{
|
{
|
||||||
outb(0xbb, port);
|
OUTB(0xbb, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
void probe_idregs_ali(uint16_t port)
|
void probe_idregs_ali(uint16_t port)
|
||||||
|
|
|
@ -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. */
|
/* Determine Super I/O config port. */
|
||||||
idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
|
idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
|
||||||
for (i = 0; i < 4; i++)
|
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. */
|
/* Sequentially write the 32 MB PnP init values. */
|
||||||
for (i = 0; i < 32; i++)
|
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)
|
static void enter_conf_mode_ite(uint16_t port)
|
||||||
{
|
{
|
||||||
outb(0x87, port);
|
OUTB(0x87, port);
|
||||||
outb(0x01, port);
|
OUTB(0x01, port);
|
||||||
outb(0x55, port);
|
OUTB(0x55, port);
|
||||||
outb((port == 0x2e) ? 0x55 : 0xaa, port);
|
OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void exit_conf_mode_ite(uint16_t port)
|
static void exit_conf_mode_ite(uint16_t port)
|
||||||
|
|
|
@ -479,21 +479,21 @@ void probe_idregs_nsc(uint16_t port)
|
||||||
|
|
||||||
probing_for("NSC", "", port);
|
probing_for("NSC", "", port);
|
||||||
|
|
||||||
outb(CHIP_ID_REG, port);
|
OUTB(CHIP_ID_REG, port);
|
||||||
if (inb(port) != CHIP_ID_REG) {
|
if (INB(port) != CHIP_ID_REG) {
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf(NOTFOUND "port=0x%02x, port+1=0x%02x\n",
|
printf(NOTFOUND "port=0x%02x, port+1=0x%02x\n",
|
||||||
inb(port), inb(port + 1));
|
INB(port), INB(port + 1));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
id = inb(port + 1);
|
id = INB(port + 1);
|
||||||
|
|
||||||
outb(CHIP_REV_REG, port);
|
OUTB(CHIP_REV_REG, port);
|
||||||
if (inb(port) != CHIP_REV_REG) {
|
if (INB(port) != CHIP_REV_REG) {
|
||||||
printf("Warning: Can't get chip revision. Setting to 0xff.\n");
|
printf("Warning: Can't get chip revision. Setting to 0xff.\n");
|
||||||
rev = 0xff;
|
rev = 0xff;
|
||||||
} else {
|
} else {
|
||||||
rev = inb(port + 1);
|
rev = INB(port + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (superio_unknown(reg_table, id)) {
|
if (superio_unknown(reg_table, id)) {
|
||||||
|
|
|
@ -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
|
* 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.
|
* 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)
|
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,
|
static void probe_idregs_smsc_helper(uint16_t port, uint8_t idreg,
|
||||||
|
|
|
@ -23,6 +23,11 @@
|
||||||
|
|
||||||
#include "superiotool.h"
|
#include "superiotool.h"
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Command line options. */
|
/* Command line options. */
|
||||||
int dump = 0, verbose = 0, extra_dump = 0;
|
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)
|
uint8_t regval(uint16_t port, uint8_t reg)
|
||||||
{
|
{
|
||||||
outb(reg, port);
|
OUTB(reg, port);
|
||||||
return inb(port + ((port == 0x3bd) ? 2 : 1)); /* 0x3bd is special. */
|
return INB(port + ((port == 0x3bd) ? 2 : 1)); /* 0x3bd is special. */
|
||||||
}
|
}
|
||||||
|
|
||||||
void regwrite(uint16_t port, uint8_t reg, uint8_t val)
|
void regwrite(uint16_t port, uint8_t reg, uint8_t val)
|
||||||
{
|
{
|
||||||
outb(reg, port);
|
OUTB(reg, port);
|
||||||
outb(val, port + 1);
|
OUTB(val, port + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void enter_conf_mode_winbond_fintek_ite_8787(uint16_t port)
|
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)
|
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 */
|
regwrite(port, 0x02, 0x02); /* ITE */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,6 +209,9 @@ static void print_version(void)
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i, j, opt, option_index;
|
int i, j, opt, option_index;
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
int io_fd;
|
||||||
|
#endif
|
||||||
|
|
||||||
static const struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
{"dump", no_argument, NULL, 'd'},
|
{"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) {
|
if (iopl(3) < 0) {
|
||||||
perror("iopl");
|
perror("iopl");
|
||||||
|
#endif
|
||||||
printf("Superiotool must be run as root.\n");
|
printf("Superiotool must be run as root.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -264,5 +277,8 @@ int main(int argc, char *argv[])
|
||||||
if (!chip_found)
|
if (!chip_found)
|
||||||
printf("No Super I/O found\n");
|
printf("No Super I/O found\n");
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
close(io_fd);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,27 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
#if defined(__GLIBC__)
|
||||||
#include <sys/io.h>
|
#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\
|
#define USAGE "Usage: superiotool [-d] [-e] [-l] [-V] [-v] [-h]\n\n\
|
||||||
-d | --dump Dump Super I/O register contents\n\
|
-d | --dump Dump Super I/O register contents\n\
|
||||||
|
|
|
@ -470,18 +470,18 @@ static const struct superio_registers reg_table[] = {
|
||||||
|
|
||||||
static void enter_conf_mode_winbond_88(uint16_t port)
|
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)
|
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)
|
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)
|
static void probe_idregs_winbond_helper(const char *init, uint16_t port)
|
||||||
|
|
Loading…
Reference in New Issue