Blame view

drivers/ide/amd74xx.c 10 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
   * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04
   * IDE driver for Linux.
   *
   * Copyright (c) 2000-2002 Vojtech Pavlik
31bbb668f   Bartlomiej Zolnierkiewicz   amd74xx: don't ch...
6
   * Copyright (c) 2007-2010 Bartlomiej Zolnierkiewicz
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
10
11
12
13
14
15
16
   *
   * Based on the work of:
   *      Andre Hedrick
   */
  
  /*
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 as published by
   * the Free Software Foundation.
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
18
  #include <linux/module.h>
  #include <linux/kernel.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
21
  #include <linux/pci.h>
  #include <linux/init.h>
  #include <linux/ide.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22

ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
23
  #define DRV_NAME "amd74xx"
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
24
25
26
27
28
29
30
  enum {
  	AMD_IDE_CONFIG		= 0x41,
  	AMD_CABLE_DETECT	= 0x42,
  	AMD_DRIVE_TIMING	= 0x48,
  	AMD_8BIT_TIMING		= 0x4e,
  	AMD_ADDRESS_SETUP	= 0x4c,
  	AMD_UDMA_TIMING		= 0x50,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
32
33
  static unsigned int amd_80w;
  static unsigned int amd_clock;
75b1d9753   Bartlomiej Zolnierkiewicz   ide: convert ide_...
34
  static char *amd_dma[] = { "16", "25", "33", "44", "66", "100", "133" };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
  static unsigned char amd_cyc2udma[] = { 6, 6, 5, 4, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 7 };
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
36
37
38
39
  static inline u8 amd_offset(struct pci_dev *dev)
  {
  	return (dev->vendor == PCI_VENDOR_ID_NVIDIA) ? 0x10 : 0;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
42
   * amd_set_speed() writes timing values to the chipset registers
   */
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
43
44
  static void amd_set_speed(struct pci_dev *dev, u8 dn, u8 udma_mask,
  			  struct ide_timing *timing)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
45
  {
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
46
  	u8 t = 0, offset = amd_offset(dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47

993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
48
  	pci_read_config_byte(dev, AMD_ADDRESS_SETUP + offset, &t);
d6cddd3ca   Harvey Harrison   ide: eliminate FI...
49
  	t = (t & ~(3 << ((3 - dn) << 1))) | ((clamp_val(timing->setup, 1, 4) - 1) << ((3 - dn) << 1));
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
50
  	pci_write_config_byte(dev, AMD_ADDRESS_SETUP + offset, t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51

993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
52
  	pci_write_config_byte(dev, AMD_8BIT_TIMING + offset + (1 - (dn >> 1)),
d6cddd3ca   Harvey Harrison   ide: eliminate FI...
53
  		((clamp_val(timing->act8b, 1, 16) - 1) << 4) | (clamp_val(timing->rec8b, 1, 16) - 1));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54

993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
55
  	pci_write_config_byte(dev, AMD_DRIVE_TIMING + offset + (3 - dn),
d6cddd3ca   Harvey Harrison   ide: eliminate FI...
56
  		((clamp_val(timing->active, 1, 16) - 1) << 4) | (clamp_val(timing->recover, 1, 16) - 1));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57

993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
58
  	switch (udma_mask) {
d6cddd3ca   Harvey Harrison   ide: eliminate FI...
59
60
61
62
  	case ATA_UDMA2: t = timing->udma ? (0xc0 | (clamp_val(timing->udma, 2, 5) - 2)) : 0x03; break;
  	case ATA_UDMA4: t = timing->udma ? (0xc0 | amd_cyc2udma[clamp_val(timing->udma, 2, 10)]) : 0x03; break;
  	case ATA_UDMA5: t = timing->udma ? (0xc0 | amd_cyc2udma[clamp_val(timing->udma, 1, 10)]) : 0x03; break;
  	case ATA_UDMA6: t = timing->udma ? (0xc0 | amd_cyc2udma[clamp_val(timing->udma, 1, 15)]) : 0x03; break;
75b1d9753   Bartlomiej Zolnierkiewicz   ide: convert ide_...
63
  	default: return;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
  	}
31bbb668f   Bartlomiej Zolnierkiewicz   amd74xx: don't ch...
65
66
  	if (timing->udma)
  		pci_write_config_byte(dev, AMD_UDMA_TIMING + offset + 3 - dn, t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
  }
  
  /*
88b2b32ba   Bartlomiej Zolnierkiewicz   ide: move ide_con...
70
71
   * amd_set_drive() computes timing values and configures the chipset
   * to a desired transfer mode.  It also can be called by upper layers.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
   */
8776168ca   Bartlomiej Zolnierkiewicz   ide: change ->set...
73
  static void amd_set_drive(ide_hwif_t *hwif, ide_drive_t *drive)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
  {
36501650e   Bartlomiej Zolnierkiewicz   ide: keep pointer...
75
  	struct pci_dev *dev = to_pci_dev(hwif->dev);
bca4ff16e   Bartlomiej Zolnierkiewicz   amd74xx: use ide_...
76
  	ide_drive_t *peer = ide_get_pair_dev(drive);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
77
78
  	struct ide_timing t, p;
  	int T, UT;
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
79
  	u8 udma_mask = hwif->ultra_mask;
8776168ca   Bartlomiej Zolnierkiewicz   ide: change ->set...
80
  	const u8 speed = drive->dma_mode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
81

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
82
  	T = 1000000000 / amd_clock;
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
83
  	UT = (udma_mask == ATA_UDMA2) ? T : (T / 2);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
84
85
  
  	ide_timing_compute(drive, speed, &t, T, UT);
bca4ff16e   Bartlomiej Zolnierkiewicz   amd74xx: use ide_...
86
  	if (peer) {
f6d23c2e2   Bartlomiej Zolnierkiewicz   amd74xx: use ->pi...
87
  		ide_timing_compute(peer, peer->pio_mode, &p, T, UT);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
89
90
91
92
  		ide_timing_merge(&p, &t, &t, IDE_TIMING_8BIT);
  	}
  
  	if (speed == XFER_UDMA_5 && amd_clock <= 33333) t.udma = 1;
  	if (speed == XFER_UDMA_6 && amd_clock <= 33333) t.udma = 15;
36501650e   Bartlomiej Zolnierkiewicz   ide: keep pointer...
93
  	amd_set_speed(dev, drive->dn, udma_mask, &t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
  }
  
  /*
26bcb879c   Bartlomiej Zolnierkiewicz   ide: add ide_set{...
97
   * amd_set_pio_mode() is a callback from upper layers for PIO-only tuning.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
   */
e085b3cae   Bartlomiej Zolnierkiewicz   ide: change ->set...
99
  static void amd_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
  {
8776168ca   Bartlomiej Zolnierkiewicz   ide: change ->set...
101
102
  	drive->dma_mode = drive->pio_mode;
  	amd_set_drive(hwif, drive);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
  }
feb22b7f8   Bartlomiej Zolnierkiewicz   ide: add proper P...
104
  static void amd7409_cable_detect(struct pci_dev *dev)
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
105
106
107
108
  {
  	/* no host side cable detection */
  	amd_80w = 0x03;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109

feb22b7f8   Bartlomiej Zolnierkiewicz   ide: add proper P...
110
  static void amd7411_cable_detect(struct pci_dev *dev)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
  {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112
  	int i;
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
113
114
115
116
117
118
119
120
  	u32 u = 0;
  	u8 t = 0, offset = amd_offset(dev);
  
  	pci_read_config_byte(dev, AMD_CABLE_DETECT + offset, &t);
  	pci_read_config_dword(dev, AMD_UDMA_TIMING + offset, &u);
  	amd_80w = ((t & 0x3) ? 1 : 0) | ((t & 0xc) ? 2 : 0);
  	for (i = 24; i >= 0; i -= 8)
  		if (((u >> i) & 4) && !(amd_80w & (1 << (1 - (i >> 4))))) {
a326b02b0   Bartlomiej Zolnierkiewicz   ide: drop 'name' ...
121
122
123
124
  			printk(KERN_WARNING DRV_NAME " %s: BIOS didn't set "
  				"cable bits correctly. Enabling workaround.
  ",
  				pci_name(dev));
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
125
126
127
  			amd_80w |= (1 << (1 - (i >> 4)));
  		}
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
129
  
  /*
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
130
   * The initialization callback.  Initialize drive independent registers.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
   */
2ed0ef543   Bartlomiej Zolnierkiewicz   ide: fix ->init_c...
132
  static int init_chipset_amd74xx(struct pci_dev *dev)
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
133
134
  {
  	u8 t = 0, offset = amd_offset(dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
135
136
137
138
  
  /*
   * Check 80-wire cable presence.
   */
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
139
140
141
142
143
  	if (dev->vendor == PCI_VENDOR_ID_AMD &&
  	    dev->device == PCI_DEVICE_ID_AMD_COBRA_7401)
  		; /* no UDMA > 2 */
  	else if (dev->vendor == PCI_VENDOR_ID_AMD &&
  		 dev->device == PCI_DEVICE_ID_AMD_VIPER_7409)
a326b02b0   Bartlomiej Zolnierkiewicz   ide: drop 'name' ...
144
  		amd7409_cable_detect(dev);
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
145
  	else
a326b02b0   Bartlomiej Zolnierkiewicz   ide: drop 'name' ...
146
  		amd7411_cable_detect(dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
147
148
149
150
  
  /*
   * Take care of prefetch & postwrite.
   */
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
151
152
153
154
155
  	pci_read_config_byte(dev, AMD_IDE_CONFIG + offset, &t);
  	/*
  	 * Check for broken FIFO support.
  	 */
  	if (dev->vendor == PCI_VENDOR_ID_AMD &&
43a12216d   Roel Kluin   amd74xx: device/v...
156
  	    dev->device == PCI_DEVICE_ID_AMD_VIPER_7411)
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
157
158
159
160
  		t &= 0x0f;
  	else
  		t |= 0xf0;
  	pci_write_config_byte(dev, AMD_IDE_CONFIG + offset, t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
161

2ed0ef543   Bartlomiej Zolnierkiewicz   ide: fix ->init_c...
162
  	return 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
  }
f454cbe8c   Bartlomiej Zolnierkiewicz   ide: ->cable_dete...
164
  static u8 amd_cable_detect(ide_hwif_t *hwif)
bfa14b42a   Bartlomiej Zolnierkiewicz   ide: add ->cable_...
165
166
167
168
169
170
  {
  	if ((amd_80w >> hwif->channel) & 1)
  		return ATA_CBL_PATA80;
  	else
  		return ATA_CBL_PATA40;
  }
ac95beedf   Bartlomiej Zolnierkiewicz   ide: add struct i...
171
172
173
174
175
  static const struct ide_port_ops amd_port_ops = {
  	.set_pio_mode		= amd_set_pio_mode,
  	.set_dma_mode		= amd_set_drive,
  	.cable_detect		= amd_cable_detect,
  };
caea7602f   Bartlomiej Zolnierkiewicz   ide: add IDE_HFLA...
176
177
  #define IDE_HFLAGS_AMD \
  	(IDE_HFLAG_PIO_NO_BLACKLIST | \
caea7602f   Bartlomiej Zolnierkiewicz   ide: add IDE_HFLA...
178
179
  	 IDE_HFLAG_POST_SET_MODE | \
  	 IDE_HFLAG_IO_32BIT | \
5e71d9c5a   Bartlomiej Zolnierkiewicz   ide: IDE_HFLAG_BO...
180
  	 IDE_HFLAG_UNMASK_IRQS)
caea7602f   Bartlomiej Zolnierkiewicz   ide: add IDE_HFLA...
181

ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
182
  #define DECLARE_AMD_DEV(swdma, udma)				\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
183
  	{								\
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
184
  		.name		= DRV_NAME,				\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
185
  		.init_chipset	= init_chipset_amd74xx,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
186
  		.enablebits	= {{0x40,0x02,0x02}, {0x40,0x01,0x01}},	\
ac95beedf   Bartlomiej Zolnierkiewicz   ide: add struct i...
187
  		.port_ops	= &amd_port_ops,			\
caea7602f   Bartlomiej Zolnierkiewicz   ide: add IDE_HFLA...
188
  		.host_flags	= IDE_HFLAGS_AMD,			\
4099d1432   Bartlomiej Zolnierkiewicz   ide: add PIO masks
189
  		.pio_mask	= ATA_PIO5,				\
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
190
  		.swdma_mask	= swdma,				\
5f8b6c348   Bartlomiej Zolnierkiewicz   ide: add ->mwdma_...
191
  		.mwdma_mask	= ATA_MWDMA2,				\
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
192
  		.udma_mask	= udma,					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193
  	}
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
194
  #define DECLARE_NV_DEV(udma)					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
195
  	{								\
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
196
  		.name		= DRV_NAME,				\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
197
  		.init_chipset	= init_chipset_amd74xx,			\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
198
  		.enablebits	= {{0x50,0x02,0x02}, {0x50,0x01,0x01}},	\
ac95beedf   Bartlomiej Zolnierkiewicz   ide: add struct i...
199
  		.port_ops	= &amd_port_ops,			\
caea7602f   Bartlomiej Zolnierkiewicz   ide: add IDE_HFLA...
200
  		.host_flags	= IDE_HFLAGS_AMD,			\
4099d1432   Bartlomiej Zolnierkiewicz   ide: add PIO masks
201
  		.pio_mask	= ATA_PIO5,				\
5f8b6c348   Bartlomiej Zolnierkiewicz   ide: add ->mwdma_...
202
203
  		.swdma_mask	= ATA_SWDMA2,				\
  		.mwdma_mask	= ATA_MWDMA2,				\
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
204
  		.udma_mask	= udma,					\
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
205
  	}
856204360   Bartlomiej Zolnierkiewicz   ide: constify str...
206
  static const struct ide_port_info amd74xx_chipsets[] __devinitdata = {
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
207
208
209
210
211
212
213
214
215
  	/* 0: AMD7401 */	DECLARE_AMD_DEV(0x00, ATA_UDMA2),
  	/* 1: AMD7409 */	DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA4),
  	/* 2: AMD7411/7441 */	DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA5),
  	/* 3: AMD8111 */	DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA6),
  
  	/* 4: NFORCE */		DECLARE_NV_DEV(ATA_UDMA5),
  	/* 5: >= NFORCE2 */	DECLARE_NV_DEV(ATA_UDMA6),
  
  	/* 6: AMD5536 */	DECLARE_AMD_DEV(ATA_SWDMA2, ATA_UDMA5),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
216
217
218
219
  };
  
  static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id)
  {
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
220
221
222
223
224
225
226
227
228
229
230
  	struct ide_port_info d;
  	u8 idx = id->driver_data;
  
  	d = amd74xx_chipsets[idx];
  
  	/*
  	 * Check for bad SWDMA and incorrectly wired Serenade mainboards.
  	 */
  	if (idx == 1) {
  		if (dev->revision <= 7)
  			d.swdma_mask = 0;
8ac2b42a4   Bartlomiej Zolnierkiewicz   ide: add IDE_HFLA...
231
  		d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX;
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
232
  	} else if (idx == 3) {
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
233
234
235
  		if (dev->subsystem_vendor == PCI_VENDOR_ID_AMD &&
  		    dev->subsystem_device == PCI_DEVICE_ID_AMD_SERENADE)
  			d.udma_mask = ATA_UDMA5;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
236
  	}
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
237

6636487e8   Bartlomiej Zolnierkiewicz   amd74xx: workarou...
238
239
240
241
242
243
244
245
  	/*
  	 * It seems that on some nVidia controllers using AltStatus
  	 * register can be unreliable so default to Status register
  	 * if the device is in Compatibility Mode.
  	 */
  	if (dev->vendor == PCI_VENDOR_ID_NVIDIA &&
  	    ide_pci_is_in_compatibility_mode(dev))
  		d.host_flags |= IDE_HFLAG_BROKEN_ALTSTATUS;
28cfd8af5   Bartlomiej Zolnierkiewicz   ide: include PCI ...
246
247
248
  	printk(KERN_INFO "%s %s: UDMA%s controller
  ",
  		d.name, pci_name(dev), amd_dma[fls(d.udma_mask) - 1]);
993da8f9e   Bartlomiej Zolnierkiewicz   amd74xx: remove a...
249

d51f19c86   Bartlomiej Zolnierkiewicz   amd74xx: cleanup ...
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
  	/*
  	* Determine the system bus clock.
  	*/
  	amd_clock = (ide_pci_clk ? ide_pci_clk : 33) * 1000;
  
  	switch (amd_clock) {
  	case 33000: amd_clock = 33333; break;
  	case 37000: amd_clock = 37500; break;
  	case 41000: amd_clock = 41666; break;
  	}
  
  	if (amd_clock < 20000 || amd_clock > 50000) {
  		printk(KERN_WARNING "%s: User given PCI clock speed impossible"
  				    " (%d), using 33 MHz instead.
  ",
  				    d.name, amd_clock);
  		amd_clock = 33333;
  	}
6cdf6eb35   Bartlomiej Zolnierkiewicz   ide: add ->dev an...
268
  	return ide_pci_init_one(dev, &d, NULL);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
269
  }
9cbcc5e3c   Bartlomiej Zolnierkiewicz   ide: use PCI_VDEV...
270
271
272
273
  static const struct pci_device_id amd74xx_pci_tbl[] = {
  	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_COBRA_7401),		 0 },
  	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_VIPER_7409),		 1 },
  	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_VIPER_7411),		 2 },
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
274
275
276
277
278
  	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_OPUS_7441),		 2 },
  	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_8111_IDE),		 3 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_IDE),	 4 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE),	 5 },
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
279
  #ifdef CONFIG_BLK_DEV_IDE_SATA
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
280
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA),	 5 },
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
281
  #endif
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
282
283
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE),	 5 },
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
284
  #ifdef CONFIG_BLK_DEV_IDE_SATA
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
285
286
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2),	 5 },
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
287
  #endif
ced3ec8aa   Bartlomiej Zolnierkiewicz   ide: prefix messa...
288
289
290
291
292
293
294
295
296
297
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP65_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP67_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE),	 5 },
  	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE),	 5 },
  	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_CS5536_IDE),		 6 },
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
298
299
300
  	{ 0, },
  };
  MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl);
a9ab09e26   Bartlomiej Zolnierkiewicz   ide: use unique n...
301
  static struct pci_driver amd74xx_pci_driver = {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
302
303
304
  	.name		= "AMD_IDE",
  	.id_table	= amd74xx_pci_tbl,
  	.probe		= amd74xx_probe,
b2509ac1d   Bartlomiej Zolnierkiewicz   amd74xx: add ->re...
305
  	.remove		= ide_pci_remove,
feb22b7f8   Bartlomiej Zolnierkiewicz   ide: add proper P...
306
307
  	.suspend	= ide_pci_suspend,
  	.resume		= ide_pci_resume,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
308
  };
82ab1eece   Bartlomiej Zolnierkiewicz   ide: add missing ...
309
  static int __init amd74xx_ide_init(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310
  {
a9ab09e26   Bartlomiej Zolnierkiewicz   ide: use unique n...
311
  	return ide_pci_register_driver(&amd74xx_pci_driver);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
312
  }
b2509ac1d   Bartlomiej Zolnierkiewicz   amd74xx: add ->re...
313
314
  static void __exit amd74xx_ide_exit(void)
  {
a9ab09e26   Bartlomiej Zolnierkiewicz   ide: use unique n...
315
  	pci_unregister_driver(&amd74xx_pci_driver);
b2509ac1d   Bartlomiej Zolnierkiewicz   amd74xx: add ->re...
316
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
317
  module_init(amd74xx_ide_init);
b2509ac1d   Bartlomiej Zolnierkiewicz   amd74xx: add ->re...
318
  module_exit(amd74xx_ide_exit);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
319

31bbb668f   Bartlomiej Zolnierkiewicz   amd74xx: don't ch...
320
  MODULE_AUTHOR("Vojtech Pavlik, Bartlomiej Zolnierkiewicz");
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
321
322
  MODULE_DESCRIPTION("AMD PCI IDE driver");
  MODULE_LICENSE("GPL");