Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/arcmsr/arcmsr.c
Show First 20 Lines • Show All 207 Lines • ▼ Show 20 Lines | |||||
/* | /* | ||||
************************************************************************** | ************************************************************************** | ||||
************************************************************************** | ************************************************************************** | ||||
*/ | */ | ||||
static d_open_t arcmsr_open; | static d_open_t arcmsr_open; | ||||
static d_close_t arcmsr_close; | static d_close_t arcmsr_close; | ||||
static d_ioctl_t arcmsr_ioctl; | static d_ioctl_t arcmsr_ioctl; | ||||
static struct arcmsr_dev { | struct pci_device_table arcmsr_devs[] = { | ||||
uint16_t vendorid; | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1110), | ||||
uint32_t deviceid; | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller")}, | ||||
uint16_t subdeviceid; | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1200), | ||||
char *description; | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller")}, | ||||
} arcmsr_devs[] = { | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1201), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1110, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1210), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1200, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1120), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1201, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1130), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1210, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1160), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1120, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1170), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1130, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1220), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1160, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1230), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1170, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1231), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1220, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1260), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1230, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1261), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1231, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1270), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1260, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1280), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1261, 0, | PCI_DESCR("Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1212), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1270, 0, | PCI_DESCR("Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1222), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1280, 0, | PCI_DESCR("Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1380), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1212, 0, | PCI_DESCR("Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1381), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1222, 0, | PCI_DESCR("Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1680), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1380, 0, | PCI_DESCR("Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1681), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1381, 0, | PCI_DESCR("Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1880), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1680, 0, | PCI_DESCR("Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1882), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1681, 0, | PCI_DESCR("Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1213), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, 0, | PCI_DESCR("Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1223), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, 0, | PCI_DESCR("Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1880), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, 0, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1883), | ||||
"Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, 0, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1882), | ||||
"Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1883), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, ARECA_SUB_DEV_ID_1883, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1213), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, ARECA_SUB_DEV_ID_1883, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1883), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, ARECA_SUB_DEV_ID_1883, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1223), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1883), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, ARECA_SUB_DEV_ID_1883, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1880), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, ARECA_SUB_DEV_ID_1216, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1216), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, ARECA_SUB_DEV_ID_1216, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1882), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1216), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, ARECA_SUB_DEV_ID_1216, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1213), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, ARECA_SUB_DEV_ID_1216, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1216), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, ARECA_SUB_DEV_ID_1226, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1223), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1216), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, ARECA_SUB_DEV_ID_1226, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1880), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, ARECA_SUB_DEV_ID_1226, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1226), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, ARECA_SUB_DEV_ID_1226, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1882), | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1226), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1884, 0, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
"Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1213), | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1214, 0, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1226), | ||||
"Areca SATA 6G Host Adapter RAID Controller\n(RAID6 capable)"}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1203, 0, | {PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1223), | ||||
"Areca SATA 6G Host Adapter RAID Controller\n(RAID6 capable)"}, | .match_flag_subdevice = 1, .subdevice = (ARECA_SUB_DEV_ID_1226), | ||||
{0, 0, 0, 0}, | PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | ||||
{PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1884), | |||||
PCI_DESCR("Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)")}, | |||||
{PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1214), | |||||
PCI_DESCR("Areca SATA 6G Host Adapter RAID Controller\n(RAID6 capable)")}, | |||||
{PCI_DEV(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1203), | |||||
PCI_DESCR("Areca SATA 6G Host Adapter RAID Controller\n(RAID6 capable)")}, | |||||
}; | }; | ||||
static device_method_t arcmsr_methods[]={ | static device_method_t arcmsr_methods[]={ | ||||
DEVMETHOD(device_probe, arcmsr_probe), | DEVMETHOD(device_probe, arcmsr_probe), | ||||
DEVMETHOD(device_attach, arcmsr_attach), | DEVMETHOD(device_attach, arcmsr_attach), | ||||
DEVMETHOD(device_detach, arcmsr_detach), | DEVMETHOD(device_detach, arcmsr_detach), | ||||
DEVMETHOD(device_shutdown, arcmsr_shutdown), | DEVMETHOD(device_shutdown, arcmsr_shutdown), | ||||
DEVMETHOD(device_suspend, arcmsr_suspend), | DEVMETHOD(device_suspend, arcmsr_suspend), | ||||
DEVMETHOD(device_resume, arcmsr_resume), | DEVMETHOD(device_resume, arcmsr_resume), | ||||
#if __FreeBSD_version >= 803000 | #if __FreeBSD_version >= 803000 | ||||
DEVMETHOD_END | DEVMETHOD_END | ||||
#else | #else | ||||
{ 0, 0 } | { 0, 0 } | ||||
#endif | #endif | ||||
}; | }; | ||||
static driver_t arcmsr_driver={ | static driver_t arcmsr_driver={ | ||||
"arcmsr", arcmsr_methods, sizeof(struct AdapterControlBlock) | "arcmsr", arcmsr_methods, sizeof(struct AdapterControlBlock) | ||||
}; | }; | ||||
static devclass_t arcmsr_devclass; | static devclass_t arcmsr_devclass; | ||||
DRIVER_MODULE(arcmsr, pci, arcmsr_driver, arcmsr_devclass, 0, 0); | DRIVER_MODULE(arcmsr, pci, arcmsr_driver, arcmsr_devclass, 0, 0); | ||||
MODULE_PNP_INFO("U16:vendor;W32:vendor/device;U16:subdevice;D:#", pci, arcmsr, | PCI_PNP_INFO(arcmsr_devs); | ||||
arcmsr_devs, sizeof(arcmsr_devs[0]), nitems(arcmsr_devs) - 1); | |||||
MODULE_DEPEND(arcmsr, pci, 1, 1, 1); | MODULE_DEPEND(arcmsr, pci, 1, 1, 1); | ||||
MODULE_DEPEND(arcmsr, cam, 1, 1, 1); | MODULE_DEPEND(arcmsr, cam, 1, 1, 1); | ||||
#ifndef BUS_DMA_COHERENT | #ifndef BUS_DMA_COHERENT | ||||
#define BUS_DMA_COHERENT 0x04 /* hint: map memory in a coherent way */ | #define BUS_DMA_COHERENT 0x04 /* hint: map memory in a coherent way */ | ||||
#endif | #endif | ||||
#if __FreeBSD_version >= 501000 | #if __FreeBSD_version >= 501000 | ||||
static struct cdevsw arcmsr_cdevsw={ | static struct cdevsw arcmsr_cdevsw={ | ||||
#if __FreeBSD_version >= 503000 | #if __FreeBSD_version >= 503000 | ||||
▲ Show 20 Lines • Show All 4,658 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
/* | /* | ||||
************************************************************************ | ************************************************************************ | ||||
************************************************************************ | ************************************************************************ | ||||
*/ | */ | ||||
static int arcmsr_probe(device_t dev) | static int arcmsr_probe(device_t dev) | ||||
{ | { | ||||
const struct arcmsr_dev *arcd; | const struct pci_device_table *arcd; | ||||
u_int32_t did; | |||||
size_t i; | |||||
u_int16_t sub_device_id; | |||||
char buf[256]; | char buf[256]; | ||||
if (pci_get_vendor(dev) != PCI_VENDOR_ID_ARECA) { | arcd = PCI_MATCH(dev, arcmsr_devs); | ||||
if (arcd == NULL) | |||||
return (ENXIO); | return (ENXIO); | ||||
} | sprintf(buf, "%s\n%s\n", arcd->descr, ARCMSR_DRIVER_VERSION); | ||||
did = pci_get_devid(dev); | |||||
sub_device_id = pci_read_config(dev, PCIR_SUBDEV_0, 2); | |||||
for (i = 0; i < nitems(arcmsr_devs); i++) { | |||||
arcd = &arcmsr_devs[i]; | |||||
if ((arcd->deviceid == did) && | |||||
((arcd->subdeviceid == sub_device_id) | |||||
|| (arcd->subdeviceid == 0))) { | |||||
sprintf(buf, "%s\n%s\n", arcd->description, ARCMSR_DRIVER_VERSION); | |||||
device_set_desc_copy(dev, buf); | device_set_desc_copy(dev, buf); | ||||
return (BUS_PROBE_DEFAULT); | return (BUS_PROBE_DEFAULT); | ||||
} | |||||
} | |||||
return(ENXIO); | |||||
} | } | ||||
/* | /* | ||||
************************************************************************ | ************************************************************************ | ||||
************************************************************************ | ************************************************************************ | ||||
*/ | */ | ||||
static int arcmsr_shutdown(device_t dev) | static int arcmsr_shutdown(device_t dev) | ||||
{ | { | ||||
u_int32_t i; | u_int32_t i; | ||||
▲ Show 20 Lines • Show All 101 Lines • Show Last 20 Lines |