Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ipmi/ipmi_pci.c
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
#include <ipmivars.h> | #include <ipmivars.h> | ||||
#else | #else | ||||
#include <dev/ipmi/ipmivars.h> | #include <dev/ipmi/ipmivars.h> | ||||
#endif | #endif | ||||
static int ipmi_pci_probe(device_t dev); | static int ipmi_pci_probe(device_t dev); | ||||
static int ipmi_pci_attach(device_t dev); | static int ipmi_pci_attach(device_t dev); | ||||
static struct ipmi_ident | struct pci_device_table ipmi_identifiers[] = { | ||||
{ | {PCI_DEV(0x1028, 0x000d), | ||||
u_int16_t vendor; | PCI_DESCR("Dell PE2650 SMIC interface")} | ||||
u_int16_t device; | |||||
char *desc; | |||||
} ipmi_identifiers[] = { | |||||
{0x1028, 0x000d, "Dell PE2650 SMIC interface"}, | |||||
{0, 0, 0} | |||||
}; | }; | ||||
const char * | |||||
ipmi_pci_match(uint16_t vendor, uint16_t device) | |||||
{ | |||||
struct ipmi_ident *m; | |||||
for (m = ipmi_identifiers; m->vendor != 0; m++) | |||||
if (m->vendor == vendor && m->device == device) | |||||
return (m->desc); | |||||
return (NULL); | |||||
} | |||||
static int | static int | ||||
ipmi_pci_probe(device_t dev) | ipmi_pci_probe(device_t dev) | ||||
{ | { | ||||
const char *desc; | const struct pci_device_table *ipmd; | ||||
if (ipmi_attached) | if (ipmi_attached) | ||||
return (ENXIO); | return (ENXIO); | ||||
ipmd = PCI_MATCH(dev, ipmi_identifiers); | |||||
desc = ipmi_pci_match(pci_get_vendor(dev), pci_get_device(dev)); | if (ipmd == NULL) | ||||
if (desc != NULL) { | return (ENXIO); | ||||
device_set_desc(dev, desc); | device_set_desc(dev, ipmd->descr); | ||||
return (BUS_PROBE_DEFAULT); | return (BUS_PROBE_DEFAULT); | ||||
} | } | ||||
return (ENXIO); | |||||
} | |||||
static int | static int | ||||
ipmi_pci_attach(device_t dev) | ipmi_pci_attach(device_t dev) | ||||
{ | { | ||||
struct ipmi_softc *sc = device_get_softc(dev); | struct ipmi_softc *sc = device_get_softc(dev); | ||||
struct ipmi_get_info info; | struct ipmi_get_info info; | ||||
const char *mode; | const char *mode; | ||||
int error, type; | int error, type; | ||||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | |||||
static driver_t ipmi_pci_driver = { | static driver_t ipmi_pci_driver = { | ||||
"ipmi", | "ipmi", | ||||
ipmi_methods, | ipmi_methods, | ||||
sizeof(struct ipmi_softc) | sizeof(struct ipmi_softc) | ||||
}; | }; | ||||
DRIVER_MODULE(ipmi_pci, pci, ipmi_pci_driver, ipmi_devclass, 0, 0); | DRIVER_MODULE(ipmi_pci, pci, ipmi_pci_driver, ipmi_devclass, 0, 0); | ||||
PCI_PNP_INFO(ipmi_identifiers); | |||||
/* Native IPMI on PCI driver. */ | /* Native IPMI on PCI driver. */ | ||||
struct pci_device_table ipmi2_devs[] = { | |||||
{PCI_CLASS(PCIC_SERIALBUS), PCI_SUBCLASS(PCIS_SERIALBUS_IPMI), | |||||
PCI_DESCR("IPMI System Interface")} | |||||
}; | |||||
static int | static int | ||||
ipmi2_pci_probe(device_t dev) | ipmi2_pci_probe(device_t dev) | ||||
{ | { | ||||
const struct pci_device_table *ipmi2d; | |||||
if (pci_get_class(dev) == PCIC_SERIALBUS && | ipmi2d = PCI_MATCH(dev, ipmi2_devs); | ||||
pci_get_subclass(dev) == PCIS_SERIALBUS_IPMI) { | if (ipmi2d == NULL) | ||||
device_set_desc(dev, "IPMI System Interface"); | return (ENXIO); | ||||
device_set_desc(dev, ipmi2d->descr); | |||||
return (BUS_PROBE_GENERIC); | return (BUS_PROBE_GENERIC); | ||||
} | } | ||||
return (ENXIO); | |||||
} | |||||
static int | static int | ||||
ipmi2_pci_attach(device_t dev) | ipmi2_pci_attach(device_t dev) | ||||
{ | { | ||||
struct ipmi_softc *sc; | struct ipmi_softc *sc; | ||||
int error, iface, type; | int error, iface, type; | ||||
sc = device_get_softc(dev); | sc = device_get_softc(dev); | ||||
sc->ipmi_dev = dev; | sc->ipmi_dev = dev; | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
static driver_t ipmi2_pci_driver = { | static driver_t ipmi2_pci_driver = { | ||||
"ipmi", | "ipmi", | ||||
ipmi2_methods, | ipmi2_methods, | ||||
sizeof(struct ipmi_softc) | sizeof(struct ipmi_softc) | ||||
}; | }; | ||||
DRIVER_MODULE(ipmi2_pci, pci, ipmi2_pci_driver, ipmi_devclass, 0, 0); | DRIVER_MODULE(ipmi2_pci, pci, ipmi2_pci_driver, ipmi_devclass, 0, 0); | ||||
PCI_PNP_INFO(ipmi2_devs); |