Blame view

drivers/ata/pata_netcell.c 3.82 KB
669a5db41   Jeff Garzik   [libata] Add a bu...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  /*
   *    pata_netcell.c - Netcell PATA driver
   *
   *	(c) 2006 Red Hat  <alan@redhat.com>
   */
  
  #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   Alan Cox   pata_netcell: re-...
19
  #define DRV_VERSION	"0.1.7"
669a5db41   Jeff Garzik   [libata] Add a bu...
20
21
22
23
24
25
26
27
28
29
30
  
  /* No PIO or DMA methods needed for this device */
  
  static struct scsi_host_template netcell_sht = {
  	.module			= THIS_MODULE,
  	.name			= DRV_NAME,
  	.ioctl			= ata_scsi_ioctl,
  	.queuecommand		= ata_scsi_queuecmd,
  	.can_queue		= ATA_DEF_QUEUE,
  	.this_id		= ATA_SHT_THIS_ID,
  	.sg_tablesize		= LIBATA_MAX_PRD,
669a5db41   Jeff Garzik   [libata] Add a bu...
31
32
33
34
35
36
  	.cmd_per_lun		= ATA_SHT_CMD_PER_LUN,
  	.emulated		= ATA_SHT_EMULATED,
  	.use_clustering		= ATA_SHT_USE_CLUSTERING,
  	.proc_name		= DRV_NAME,
  	.dma_boundary		= ATA_DMA_BOUNDARY,
  	.slave_configure	= ata_scsi_slave_config,
afdfe899e   Tejun Heo   [PATCH] libata: a...
37
  	.slave_destroy		= ata_scsi_slave_destroy,
669a5db41   Jeff Garzik   [libata] Add a bu...
38
39
40
41
42
  	/* Use standard CHS mapping rules */
  	.bios_param		= ata_std_bios_param,
  };
  
  static const struct ata_port_operations netcell_ops = {
669a5db41   Jeff Garzik   [libata] Add a bu...
43
44
45
46
47
48
49
50
51
  	/* Task file is PCI ATA format, use helpers */
  	.tf_load		= ata_tf_load,
  	.tf_read		= ata_tf_read,
  	.check_status		= ata_check_status,
  	.exec_command		= ata_exec_command,
  	.dev_select		= ata_std_dev_select,
  
  	.freeze			= ata_bmdma_freeze,
  	.thaw			= ata_bmdma_thaw,
3b4ba5910   Alan Cox   pata_netcell: re-...
52
  	.error_handler		= ata_bmdma_error_handler,
669a5db41   Jeff Garzik   [libata] Add a bu...
53
  	.post_internal_cmd	= ata_bmdma_post_internal_cmd,
3b4ba5910   Alan Cox   pata_netcell: re-...
54
  	.cable_detect		= ata_cable_80wire,
669a5db41   Jeff Garzik   [libata] Add a bu...
55
56
57
58
59
60
61
62
  
  	/* BMDMA handling is PCI ATA format, use helpers */
  	.bmdma_setup		= ata_bmdma_setup,
  	.bmdma_start		= ata_bmdma_start,
  	.bmdma_stop		= ata_bmdma_stop,
  	.bmdma_status		= ata_bmdma_status,
  	.qc_prep		= ata_qc_prep,
  	.qc_issue		= ata_qc_issue_prot,
0d5ff5667   Tejun Heo   libata: convert t...
63
  	.data_xfer		= ata_data_xfer,
669a5db41   Jeff Garzik   [libata] Add a bu...
64

bda302881   Jeff Garzik   [libata] Don't us...
65
  	/* IRQ-related hooks */
669a5db41   Jeff Garzik   [libata] Add a bu...
66
67
  	.irq_handler		= ata_interrupt,
  	.irq_clear		= ata_bmdma_irq_clear,
246ce3b67   Akira Iguchi   libata: add anoth...
68
  	.irq_on			= ata_irq_on,
669a5db41   Jeff Garzik   [libata] Add a bu...
69
70
  
  	/* Generic PATA PCI ATA helpers */
81ad1837b   Alan Cox   libata: Switch mo...
71
  	.port_start		= ata_sff_port_start,
669a5db41   Jeff Garzik   [libata] Add a bu...
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  };
  
  
  /**
   *	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   Tejun Heo   libata: clean up ...
92
  	static const struct ata_port_info info = {
669a5db41   Jeff Garzik   [libata] Add a bu...
93
  		.sht		= &netcell_sht,
1d2808fd3   Jeff Garzik   [libata] PATA dri...
94
  		.flags		= ATA_FLAG_SLAVE_POSS,
669a5db41   Jeff Garzik   [libata] Add a bu...
95
96
97
98
  		/* Actually we don't really care about these as the
  		   firmware deals with it */
  		.pio_mask	= 0x1f,	/* pio0-4 */
  		.mwdma_mask	= 0x07, /* mwdma0-2 */
bf6263a85   Jeff Garzik   [libata] Use ATA_...
99
  		.udma_mask 	= ATA_UDMA5, /* UDMA 133 */
669a5db41   Jeff Garzik   [libata] Add a bu...
100
101
  		.port_ops	= &netcell_ops,
  	};
1626aeb88   Tejun Heo   libata: clean up ...
102
  	const struct ata_port_info *port_info[] = { &info, NULL };
669a5db41   Jeff Garzik   [libata] Add a bu...
103
104
105
106
107
108
109
110
  
  	if (!printed_version++)
  		dev_printk(KERN_DEBUG, &pdev->dev,
  			   "version " DRV_VERSION "
  ");
  
  	/* Any chip specific setup/optimisation/messages here */
  	ata_pci_clear_simplex(pdev);
85cd7251b   Jeff Garzik   [libata #pata-dri...
111

669a5db41   Jeff Garzik   [libata] Add a bu...
112
  	/* And let the library code do the work */
1626aeb88   Tejun Heo   libata: clean up ...
113
  	return ata_pci_init_one(pdev, port_info);
669a5db41   Jeff Garzik   [libata] Add a bu...
114
115
116
  }
  
  static const struct pci_device_id netcell_pci_tbl[] = {
2d2744fc8   Jeff Garzik   [libata] PCI ID t...
117
  	{ PCI_VDEVICE(NETCELL, PCI_DEVICE_ID_REVOLUTION), },
669a5db41   Jeff Garzik   [libata] Add a bu...
118
119
120
121
122
123
124
125
  	{ }	/* 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   Tejun Heo   libata: add missi...
126
  #ifdef CONFIG_PM
30ced0f0d   Alan Cox   [PATCH] PATA liba...
127
128
  	.suspend		= ata_pci_device_suspend,
  	.resume			= ata_pci_device_resume,
438ac6d5e   Tejun Heo   libata: add missi...
129
  #endif
669a5db41   Jeff Garzik   [libata] Add a bu...
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  };
  
  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);