Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/bktr/bktr_os.c
Show First 20 Lines • Show All 205 Lines • ▼ Show 20 Lines | |||||
/****************************/ | /****************************/ | ||||
static int bktr_probe( device_t dev ); | static int bktr_probe( device_t dev ); | ||||
static int bktr_attach( device_t dev ); | static int bktr_attach( device_t dev ); | ||||
static int bktr_detach( device_t dev ); | static int bktr_detach( device_t dev ); | ||||
static int bktr_shutdown( device_t dev ); | static int bktr_shutdown( device_t dev ); | ||||
static void bktr_intr(void *arg) { common_bktr_intr(arg); } | static void bktr_intr(void *arg) { common_bktr_intr(arg); } | ||||
static struct bktr_dev { | struct pci_device_table bktr_devs[] = { | ||||
uint16_t vendorid; | {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848), PCI_REVID(0x12), | ||||
uint16_t deviceid; | PCI_DESCR("BrookTree 848A")}, | ||||
uint8_t rev; | {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848), | ||||
const char *description; | PCI_DESCR("BrookTree 848")}, | ||||
} bktr_devs[] = { | {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT849), | ||||
{PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848, 0x12, | PCI_DESCR("BrookTree 849A")}, | ||||
"BrookTree 848A"}, | {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT878), | ||||
{PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848, 0, | PCI_DESCR("BrookTree 878")}, | ||||
"BrookTree 848"}, | {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT879), | ||||
{PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT849, 0, | PCI_DESCR("BrookTree 879")} | ||||
"BrookTree 849A"}, | |||||
{PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT878, 0, | |||||
"BrookTree 878"}, | |||||
{PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT879, 0, | |||||
"BrookTree 879"}, | |||||
{0, 0, 0, NULL}, | |||||
}; | }; | ||||
static device_method_t bktr_methods[] = { | static device_method_t bktr_methods[] = { | ||||
/* Device interface */ | /* Device interface */ | ||||
DEVMETHOD(device_probe, bktr_probe), | DEVMETHOD(device_probe, bktr_probe), | ||||
DEVMETHOD(device_attach, bktr_attach), | DEVMETHOD(device_attach, bktr_attach), | ||||
DEVMETHOD(device_detach, bktr_detach), | DEVMETHOD(device_detach, bktr_detach), | ||||
DEVMETHOD(device_shutdown, bktr_shutdown), | DEVMETHOD(device_shutdown, bktr_shutdown), | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | |||||
#ifdef BKTR_USE_FREEBSD_SMBUS | #ifdef BKTR_USE_FREEBSD_SMBUS | ||||
#include <dev/iicbus/iiconf.h> | #include <dev/iicbus/iiconf.h> | ||||
#include <dev/smbus/smbconf.h> | #include <dev/smbus/smbconf.h> | ||||
MODULE_DEPEND(bktr, iicbb, IICBB_MINVER, IICBB_MODVER, IICBB_MAXVER); | MODULE_DEPEND(bktr, iicbb, IICBB_MINVER, IICBB_MODVER, IICBB_MAXVER); | ||||
MODULE_DEPEND(bktr, iicbus, IICBUS_MINVER, IICBUS_MODVER, IICBUS_MAXVER); | MODULE_DEPEND(bktr, iicbus, IICBUS_MINVER, IICBUS_MODVER, IICBUS_MAXVER); | ||||
MODULE_DEPEND(bktr, smbus, SMBUS_MINVER, SMBUS_MODVER, SMBUS_MAXVER); | MODULE_DEPEND(bktr, smbus, SMBUS_MINVER, SMBUS_MODVER, SMBUS_MAXVER); | ||||
#endif | #endif | ||||
DRIVER_MODULE(bktr, pci, bktr_driver, bktr_devclass, 0, 0); | DRIVER_MODULE(bktr, pci, bktr_driver, bktr_devclass, 0, 0); | ||||
MODULE_PNP_INFO("U16:vendor;U16:device", pci, bktr, bktr_devs, | PCI_PNP_INFO(bktr_devs); | ||||
sizeof(bktr_devs[0]), nitems(bktr_devs) - 1); | |||||
MODULE_DEPEND(bktr, bktr_mem, 1,1,1); | MODULE_DEPEND(bktr, bktr_mem, 1,1,1); | ||||
MODULE_VERSION(bktr, 1); | MODULE_VERSION(bktr, 1); | ||||
/* | /* | ||||
* the boot time probe routine. | * the boot time probe routine. | ||||
*/ | */ | ||||
static int | static int | ||||
bktr_probe( device_t dev ) | bktr_probe( device_t dev ) | ||||
{ | { | ||||
unsigned int type = pci_get_devid(dev); | const struct pci_device_table *bktd; | ||||
unsigned int rev = pci_get_revid(dev); | |||||
const struct bktr_dev *bktd; | |||||
uint16_t vid; | |||||
uint16_t did; | |||||
size_t i; | |||||
vid = PCI_VENDOR(type); | bktd = PCI_MATCH(dev, bktr_devs); | ||||
did = PCI_PRODUCT(type); | if (bktd == NULL) | ||||
return (ENXIO); | |||||
// XXX merge conflicts. Need to convert to PCI_MATCH instead. | device_set_desc(dev, bktd->descr); | ||||
if (BKTR_PCI_VENDOR(type) == PCI_VENDOR_BROOKTREE) | return (BUS_PROBE_DEFAULT); | ||||
{ | |||||
switch (BKTR_PCI_PRODUCT(type)) { | |||||
case PCI_PRODUCT_BROOKTREE_BT848: | |||||
if (rev == 0x12) | |||||
device_set_desc(dev, "BrookTree 848A"); | |||||
else | |||||
device_set_desc(dev, "BrookTree 848"); | |||||
return BUS_PROBE_DEFAULT; | |||||
case PCI_PRODUCT_BROOKTREE_BT849: | |||||
device_set_desc(dev, "BrookTree 849A"); | |||||
return BUS_PROBE_DEFAULT; | |||||
case PCI_PRODUCT_BROOKTREE_BT878: | |||||
device_set_desc(dev, "BrookTree 878"); | |||||
return BUS_PROBE_DEFAULT; | |||||
case PCI_PRODUCT_BROOKTREE_BT879: | |||||
device_set_desc(dev, "BrookTree 879"); | |||||
return BUS_PROBE_DEFAULT; | |||||
} | |||||
} | |||||
return ENXIO; | |||||
} | } | ||||
/* | /* | ||||
* the attach routine. | * the attach routine. | ||||
*/ | */ | ||||
static int | static int | ||||
bktr_attach( device_t dev ) | bktr_attach( device_t dev ) | ||||
▲ Show 20 Lines • Show All 1,027 Lines • Show Last 20 Lines |