Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/intpm/intpm.c
Show First 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | |||||
static int intsmb_bwrite(device_t dev, u_char slave, char cmd, u_char count, char *buf); | static int intsmb_bwrite(device_t dev, u_char slave, char cmd, u_char count, char *buf); | ||||
static int intsmb_bread(device_t dev, u_char slave, char cmd, u_char *count, char *buf); | static int intsmb_bread(device_t dev, u_char slave, char cmd, u_char *count, char *buf); | ||||
static void intsmb_start(struct intsmb_softc *sc, u_char cmd, int nointr); | static void intsmb_start(struct intsmb_softc *sc, u_char cmd, int nointr); | ||||
static int intsmb_stop(struct intsmb_softc *sc); | static int intsmb_stop(struct intsmb_softc *sc); | ||||
static int intsmb_stop_poll(struct intsmb_softc *sc); | static int intsmb_stop_poll(struct intsmb_softc *sc); | ||||
static int intsmb_free(struct intsmb_softc *sc); | static int intsmb_free(struct intsmb_softc *sc); | ||||
static void intsmb_rawintr(void *arg); | static void intsmb_rawintr(void *arg); | ||||
const struct intsmb_device { | |||||
uint32_t devid; | |||||
const char *description; | |||||
} intsmb_products[] = { | |||||
{ 0x71138086, "Intel PIIX4 SMBUS Interface" }, | |||||
{ 0x719b8086, "Intel PIIX4 SMBUS Interface" }, | |||||
#if 0 | |||||
/* Not a good idea yet, this stops isab0 functioning */ | |||||
{ 0x02001166, "ServerWorks OSB4" }, | |||||
#endif | |||||
{ 0x43721002, "ATI IXP400 SMBus Controller" }, | |||||
{ AMDSB_SMBUS_DEVID, "AMD SB600/7xx/8xx/9xx SMBus Controller" }, | |||||
{ AMDFCH_SMBUS_DEVID, "AMD FCH SMBus Controller" }, | |||||
{ AMDCZ_SMBUS_DEVID, "AMD FCH SMBus Controller" }, | |||||
}; | |||||
static int | static int | ||||
intsmb_probe(device_t dev) | intsmb_probe(device_t dev) | ||||
{ | { | ||||
const struct intsmb_device *isd; | |||||
uint32_t devid; | |||||
size_t i; | |||||
switch (pci_get_devid(dev)) { | devid = pci_get_devid(dev); | ||||
case 0x71138086: /* Intel 82371AB */ | for (i = 0; i < nitems(intsmb_products); i++) { | ||||
case 0x719b8086: /* Intel 82443MX */ | isd = &intsmb_products[i]; | ||||
#if 0 | if (isd->devid == devid) { | ||||
/* Not a good idea yet, this stops isab0 functioning */ | device_set_desc(dev, isd->description); | ||||
case 0x02001166: /* ServerWorks OSB4 */ | return (BUS_PROBE_DEFAULT); | ||||
#endif | } | ||||
device_set_desc(dev, "Intel PIIX4 SMBUS Interface"); | } | ||||
break; | |||||
case 0x43721002: | |||||
device_set_desc(dev, "ATI IXP400 SMBus Controller"); | |||||
break; | |||||
case AMDSB_SMBUS_DEVID: | |||||
device_set_desc(dev, "AMD SB600/7xx/8xx/9xx SMBus Controller"); | |||||
break; | |||||
case AMDFCH_SMBUS_DEVID: /* AMD FCH */ | |||||
case AMDCZ_SMBUS_DEVID: /* AMD Carizzo FCH */ | |||||
device_set_desc(dev, "AMD FCH SMBus Controller"); | |||||
break; | |||||
default: | |||||
return (ENXIO); | return (ENXIO); | ||||
} | } | ||||
return (BUS_PROBE_DEFAULT); | |||||
} | |||||
static uint8_t | static uint8_t | ||||
amd_pmio_read(struct resource *res, uint8_t reg) | amd_pmio_read(struct resource *res, uint8_t reg) | ||||
{ | { | ||||
bus_write_1(res, 0, reg); /* Index */ | bus_write_1(res, 0, reg); /* Index */ | ||||
return (bus_read_1(res, 1)); /* Data */ | return (bus_read_1(res, 1)); /* Data */ | ||||
} | } | ||||
static int | static int | ||||
▲ Show 20 Lines • Show All 757 Lines • ▼ Show 20 Lines | static driver_t intsmb_driver = { | ||||
sizeof(struct intsmb_softc), | sizeof(struct intsmb_softc), | ||||
}; | }; | ||||
DRIVER_MODULE_ORDERED(intsmb, pci, intsmb_driver, intsmb_devclass, 0, 0, | DRIVER_MODULE_ORDERED(intsmb, pci, intsmb_driver, intsmb_devclass, 0, 0, | ||||
SI_ORDER_ANY); | SI_ORDER_ANY); | ||||
DRIVER_MODULE(smbus, intsmb, smbus_driver, smbus_devclass, 0, 0); | DRIVER_MODULE(smbus, intsmb, smbus_driver, smbus_devclass, 0, 0); | ||||
MODULE_DEPEND(intsmb, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER); | MODULE_DEPEND(intsmb, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER); | ||||
MODULE_VERSION(intsmb, 1); | MODULE_VERSION(intsmb, 1); | ||||
MODULE_PNP_INFO("W32:vendor/device;D:human", pci, intpm, intsmb_products, | |||||
sizeof(intsmb_products[0]), nitems(intsmb_products)); |