Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/nfsmb/nfsmb.c
Show First 20 Lines • Show All 115 Lines • ▼ Show 20 Lines | |||||
struct nfsmb_softc { | struct nfsmb_softc { | ||||
int rid; | int rid; | ||||
struct resource *res; | struct resource *res; | ||||
device_t smbus; | device_t smbus; | ||||
device_t subdev; | device_t subdev; | ||||
struct mtx lock; | struct mtx lock; | ||||
}; | }; | ||||
struct pci_device_table nfsmb_devs[] = { | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF2_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF2_ULTRA_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF3_PRO150_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF3_250GB_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_04_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_51_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_55_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_61_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_65_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_67_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_73_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_78S_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
{PCI_DEV(NFSMB_VENDORID_NVIDIA, NFSMB_DEVICEID_NF4_79_SMB), | |||||
PCI_DESCR("nForce2/3/4 MCP SMBus Controller")}, | |||||
}; | |||||
#define NFSMB_LOCK(nfsmb) mtx_lock(&(nfsmb)->lock) | #define NFSMB_LOCK(nfsmb) mtx_lock(&(nfsmb)->lock) | ||||
#define NFSMB_UNLOCK(nfsmb) mtx_unlock(&(nfsmb)->lock) | #define NFSMB_UNLOCK(nfsmb) mtx_unlock(&(nfsmb)->lock) | ||||
#define NFSMB_LOCK_ASSERT(nfsmb) mtx_assert(&(nfsmb)->lock, MA_OWNED) | #define NFSMB_LOCK_ASSERT(nfsmb) mtx_assert(&(nfsmb)->lock, MA_OWNED) | ||||
#define NFSMB_SMBINB(nfsmb, register) \ | #define NFSMB_SMBINB(nfsmb, register) \ | ||||
(bus_read_1(nfsmb->res, register)) | (bus_read_1(nfsmb->res, register)) | ||||
#define NFSMB_SMBOUTB(nfsmb, register, value) \ | #define NFSMB_SMBOUTB(nfsmb, register, value) \ | ||||
(bus_write_1(nfsmb->res, register, value)) | (bus_write_1(nfsmb->res, register, value)) | ||||
static int nfsmb_detach(device_t dev); | static int nfsmb_detach(device_t dev); | ||||
static int nfsmbsub_detach(device_t dev); | static int nfsmbsub_detach(device_t dev); | ||||
static int | static int | ||||
nfsmbsub_probe(device_t dev) | nfsmbsub_probe(device_t dev) | ||||
{ | { | ||||
device_set_desc(dev, "nForce2/3/4 MCP SMBus Controller"); | device_set_desc(dev, "nForce2/3/4 MCP SMBus Controller"); | ||||
return (BUS_PROBE_DEFAULT); | return (BUS_PROBE_DEFAULT); | ||||
} | } | ||||
static int | static int | ||||
nfsmb_probe(device_t dev) | nfsmb_probe(device_t dev) | ||||
{ | { | ||||
u_int16_t vid; | const struct pci_device_table *nfsd; | ||||
u_int16_t did; | |||||
vid = pci_get_vendor(dev); | nfsd = PCI_MATCH(dev, nfsmb_devs); | ||||
did = pci_get_device(dev); | if (nfsd == NULL) | ||||
return (ENXIO); | |||||
if (vid == NFSMB_VENDORID_NVIDIA) { | device_set_desc(dev, nfsd->descr); | ||||
switch(did) { | |||||
case NFSMB_DEVICEID_NF2_SMB: | |||||
case NFSMB_DEVICEID_NF2_ULTRA_SMB: | |||||
case NFSMB_DEVICEID_NF3_PRO150_SMB: | |||||
case NFSMB_DEVICEID_NF3_250GB_SMB: | |||||
case NFSMB_DEVICEID_NF4_SMB: | |||||
case NFSMB_DEVICEID_NF4_04_SMB: | |||||
case NFSMB_DEVICEID_NF4_51_SMB: | |||||
case NFSMB_DEVICEID_NF4_55_SMB: | |||||
case NFSMB_DEVICEID_NF4_61_SMB: | |||||
case NFSMB_DEVICEID_NF4_65_SMB: | |||||
case NFSMB_DEVICEID_NF4_67_SMB: | |||||
case NFSMB_DEVICEID_NF4_73_SMB: | |||||
case NFSMB_DEVICEID_NF4_78S_SMB: | |||||
case NFSMB_DEVICEID_NF4_79_SMB: | |||||
device_set_desc(dev, "nForce2/3/4 MCP SMBus Controller"); | |||||
return (BUS_PROBE_DEFAULT); | return (BUS_PROBE_DEFAULT); | ||||
} | } | ||||
} | |||||
return (ENXIO); | |||||
} | |||||
static int | static int | ||||
nfsmbsub_attach(device_t dev) | nfsmbsub_attach(device_t dev) | ||||
{ | { | ||||
device_t parent; | device_t parent; | ||||
struct nfsmb_softc *nfsmbsub_sc = device_get_softc(dev); | struct nfsmb_softc *nfsmbsub_sc = device_get_softc(dev); | ||||
parent = device_get_parent(dev); | parent = device_get_parent(dev); | ||||
▲ Show 20 Lines • Show All 459 Lines • ▼ Show 20 Lines | |||||
static driver_t nfsmbsub_driver = { | static driver_t nfsmbsub_driver = { | ||||
"nfsmb", | "nfsmb", | ||||
nfsmbsub_methods, | nfsmbsub_methods, | ||||
sizeof(struct nfsmb_softc), | sizeof(struct nfsmb_softc), | ||||
}; | }; | ||||
DRIVER_MODULE(nfsmb, pci, nfsmb_driver, nfsmb_devclass, 0, 0); | DRIVER_MODULE(nfsmb, pci, nfsmb_driver, nfsmb_devclass, 0, 0); | ||||
PCI_PNP_INFO(nfsmb_devs); | |||||
DRIVER_MODULE(nfsmb, nfsmb, nfsmbsub_driver, nfsmb_devclass, 0, 0); | DRIVER_MODULE(nfsmb, nfsmb, nfsmbsub_driver, nfsmb_devclass, 0, 0); | ||||
DRIVER_MODULE(smbus, nfsmb, smbus_driver, smbus_devclass, 0, 0); | DRIVER_MODULE(smbus, nfsmb, smbus_driver, smbus_devclass, 0, 0); | ||||
MODULE_DEPEND(nfsmb, pci, 1, 1, 1); | MODULE_DEPEND(nfsmb, pci, 1, 1, 1); | ||||
MODULE_DEPEND(nfsmb, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER); | MODULE_DEPEND(nfsmb, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER); | ||||
MODULE_VERSION(nfsmb, 1); | MODULE_VERSION(nfsmb, 1); |