Blame view
drivers/ata/pata_netcell.c
2.56 KB
669a5db41
|
1 2 3 |
/* * pata_netcell.c - Netcell PATA driver * |
ab7716300
|
4 |
* (c) 2006 Red Hat |
669a5db41
|
5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
*/ #include <linux/kernel.h> #include <linux/module.h> #include <linux/pci.h> #include <linux/init.h> #include <linux/blkdev.h> #include <linux/delay.h> #include <linux/device.h> #include <scsi/scsi_host.h> #include <linux/libata.h> #include <linux/ata.h> #define DRV_NAME "pata_netcell" |
3b4ba5910
|
19 |
#define DRV_VERSION "0.1.7" |
669a5db41
|
20 21 22 23 |
/* No PIO or DMA methods needed for this device */ static struct scsi_host_template netcell_sht = { |
68d1d07b5
|
24 |
ATA_BMDMA_SHT(DRV_NAME), |
669a5db41
|
25 |
}; |
029cfd6b7
|
26 27 |
static struct ata_port_operations netcell_ops = { .inherits = &ata_bmdma_port_ops, |
3b4ba5910
|
28 |
.cable_detect = ata_cable_80wire, |
669a5db41
|
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
}; /** * netcell_init_one - Register Netcell ATA PCI device with kernel services * @pdev: PCI device to register * @ent: Entry in netcell_pci_tbl matching with @pdev * * Called from kernel PCI layer. * * LOCKING: * Inherited from PCI layer (may sleep). * * RETURNS: * Zero on success, or -ERRNO value. */ static int netcell_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) { static int printed_version; |
1626aeb88
|
49 |
static const struct ata_port_info info = { |
1d2808fd3
|
50 |
.flags = ATA_FLAG_SLAVE_POSS, |
669a5db41
|
51 52 |
/* Actually we don't really care about these as the firmware deals with it */ |
14bdef982
|
53 54 |
.pio_mask = ATA_PIO4, .mwdma_mask = ATA_MWDMA2, |
bf6263a85
|
55 |
.udma_mask = ATA_UDMA5, /* UDMA 133 */ |
669a5db41
|
56 57 |
.port_ops = &netcell_ops, }; |
1626aeb88
|
58 |
const struct ata_port_info *port_info[] = { &info, NULL }; |
f08048e94
|
59 |
int rc; |
669a5db41
|
60 61 62 63 64 |
if (!printed_version++) dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION " "); |
f08048e94
|
65 66 67 |
rc = pcim_enable_device(pdev); if (rc) return rc; |
669a5db41
|
68 |
/* Any chip specific setup/optimisation/messages here */ |
9363c3825
|
69 |
ata_pci_bmdma_clear_simplex(pdev); |
85cd7251b
|
70 |
|
669a5db41
|
71 |
/* And let the library code do the work */ |
9363c3825
|
72 |
return ata_pci_sff_init_one(pdev, port_info, &netcell_sht, NULL); |
669a5db41
|
73 74 75 |
} static const struct pci_device_id netcell_pci_tbl[] = { |
2d2744fc8
|
76 |
{ PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), }, |
669a5db41
|
77 78 79 80 81 82 83 84 |
{ } /* terminate list */ }; static struct pci_driver netcell_pci_driver = { .name = DRV_NAME, .id_table = netcell_pci_tbl, .probe = netcell_init_one, .remove = ata_pci_remove_one, |
438ac6d5e
|
85 |
#ifdef CONFIG_PM |
30ced0f0d
|
86 87 |
.suspend = ata_pci_device_suspend, .resume = ata_pci_device_resume, |
438ac6d5e
|
88 |
#endif |
669a5db41
|
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
}; static int __init netcell_init(void) { return pci_register_driver(&netcell_pci_driver); } static void __exit netcell_exit(void) { pci_unregister_driver(&netcell_pci_driver); } module_init(netcell_init); module_exit(netcell_exit); MODULE_AUTHOR("Alan Cox"); MODULE_DESCRIPTION("SCSI low-level driver for Netcell PATA RAID"); MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(pci, netcell_pci_tbl); MODULE_VERSION(DRV_VERSION); |