Blame view
drivers/ide/amd74xx.c
10 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
1da177e4c 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 amd74xx: don't ch... |
6 |
* Copyright (c) 2007-2010 Bartlomiej Zolnierkiewicz |
1da177e4c 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 Linux-2.6.12-rc2 |
17 18 |
#include <linux/module.h> #include <linux/kernel.h> |
1da177e4c Linux-2.6.12-rc2 |
19 20 21 |
#include <linux/pci.h> #include <linux/init.h> #include <linux/ide.h> |
1da177e4c Linux-2.6.12-rc2 |
22 |
|
ced3ec8aa ide: prefix messa... |
23 |
#define DRV_NAME "amd74xx" |
993da8f9e 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 Linux-2.6.12-rc2 |
31 |
}; |
1da177e4c Linux-2.6.12-rc2 |
32 33 |
static unsigned int amd_80w; static unsigned int amd_clock; |
75b1d9753 ide: convert ide_... |
34 |
static char *amd_dma[] = { "16", "25", "33", "44", "66", "100", "133" }; |
1da177e4c 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 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 Linux-2.6.12-rc2 |
40 |
/* |
1da177e4c Linux-2.6.12-rc2 |
41 42 |
* amd_set_speed() writes timing values to the chipset registers */ |
993da8f9e amd74xx: remove a... |
43 44 |
static void amd_set_speed(struct pci_dev *dev, u8 dn, u8 udma_mask, struct ide_timing *timing) |
1da177e4c Linux-2.6.12-rc2 |
45 |
{ |
993da8f9e amd74xx: remove a... |
46 |
u8 t = 0, offset = amd_offset(dev); |
1da177e4c Linux-2.6.12-rc2 |
47 |
|
993da8f9e amd74xx: remove a... |
48 |
pci_read_config_byte(dev, AMD_ADDRESS_SETUP + offset, &t); |
d6cddd3ca ide: eliminate FI... |
49 |
t = (t & ~(3 << ((3 - dn) << 1))) | ((clamp_val(timing->setup, 1, 4) - 1) << ((3 - dn) << 1)); |
993da8f9e amd74xx: remove a... |
50 |
pci_write_config_byte(dev, AMD_ADDRESS_SETUP + offset, t); |
1da177e4c Linux-2.6.12-rc2 |
51 |
|
993da8f9e amd74xx: remove a... |
52 |
pci_write_config_byte(dev, AMD_8BIT_TIMING + offset + (1 - (dn >> 1)), |
d6cddd3ca ide: eliminate FI... |
53 |
((clamp_val(timing->act8b, 1, 16) - 1) << 4) | (clamp_val(timing->rec8b, 1, 16) - 1)); |
1da177e4c Linux-2.6.12-rc2 |
54 |
|
993da8f9e amd74xx: remove a... |
55 |
pci_write_config_byte(dev, AMD_DRIVE_TIMING + offset + (3 - dn), |
d6cddd3ca ide: eliminate FI... |
56 |
((clamp_val(timing->active, 1, 16) - 1) << 4) | (clamp_val(timing->recover, 1, 16) - 1)); |
1da177e4c Linux-2.6.12-rc2 |
57 |
|
993da8f9e amd74xx: remove a... |
58 |
switch (udma_mask) { |
d6cddd3ca 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 ide: convert ide_... |
63 |
default: return; |
1da177e4c Linux-2.6.12-rc2 |
64 |
} |
31bbb668f amd74xx: don't ch... |
65 66 |
if (timing->udma) pci_write_config_byte(dev, AMD_UDMA_TIMING + offset + 3 - dn, t); |
1da177e4c Linux-2.6.12-rc2 |
67 68 69 |
} /* |
88b2b32ba 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 Linux-2.6.12-rc2 |
72 |
*/ |
8776168ca ide: change ->set... |
73 |
static void amd_set_drive(ide_hwif_t *hwif, ide_drive_t *drive) |
1da177e4c Linux-2.6.12-rc2 |
74 |
{ |
36501650e ide: keep pointer... |
75 |
struct pci_dev *dev = to_pci_dev(hwif->dev); |
bca4ff16e amd74xx: use ide_... |
76 |
ide_drive_t *peer = ide_get_pair_dev(drive); |
1da177e4c Linux-2.6.12-rc2 |
77 78 |
struct ide_timing t, p; int T, UT; |
993da8f9e amd74xx: remove a... |
79 |
u8 udma_mask = hwif->ultra_mask; |
8776168ca ide: change ->set... |
80 |
const u8 speed = drive->dma_mode; |
1da177e4c Linux-2.6.12-rc2 |
81 |
|
1da177e4c Linux-2.6.12-rc2 |
82 |
T = 1000000000 / amd_clock; |
993da8f9e amd74xx: remove a... |
83 |
UT = (udma_mask == ATA_UDMA2) ? T : (T / 2); |
1da177e4c Linux-2.6.12-rc2 |
84 85 |
ide_timing_compute(drive, speed, &t, T, UT); |
bca4ff16e amd74xx: use ide_... |
86 |
if (peer) { |
f6d23c2e2 amd74xx: use ->pi... |
87 |
ide_timing_compute(peer, peer->pio_mode, &p, T, UT); |
1da177e4c 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 ide: keep pointer... |
93 |
amd_set_speed(dev, drive->dn, udma_mask, &t); |
1da177e4c Linux-2.6.12-rc2 |
94 95 96 |
} /* |
26bcb879c ide: add ide_set{... |
97 |
* amd_set_pio_mode() is a callback from upper layers for PIO-only tuning. |
1da177e4c Linux-2.6.12-rc2 |
98 |
*/ |
e085b3cae ide: change ->set... |
99 |
static void amd_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) |
1da177e4c Linux-2.6.12-rc2 |
100 |
{ |
8776168ca ide: change ->set... |
101 102 |
drive->dma_mode = drive->pio_mode; amd_set_drive(hwif, drive); |
1da177e4c Linux-2.6.12-rc2 |
103 |
} |
feb22b7f8 ide: add proper P... |
104 |
static void amd7409_cable_detect(struct pci_dev *dev) |
993da8f9e amd74xx: remove a... |
105 106 107 108 |
{ /* no host side cable detection */ amd_80w = 0x03; } |
1da177e4c Linux-2.6.12-rc2 |
109 |
|
feb22b7f8 ide: add proper P... |
110 |
static void amd7411_cable_detect(struct pci_dev *dev) |
1da177e4c Linux-2.6.12-rc2 |
111 |
{ |
1da177e4c Linux-2.6.12-rc2 |
112 |
int i; |
993da8f9e 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 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 amd74xx: remove a... |
125 126 127 |
amd_80w |= (1 << (1 - (i >> 4))); } } |
1da177e4c Linux-2.6.12-rc2 |
128 129 |
/* |
993da8f9e amd74xx: remove a... |
130 |
* The initialization callback. Initialize drive independent registers. |
1da177e4c Linux-2.6.12-rc2 |
131 |
*/ |
2ed0ef543 ide: fix ->init_c... |
132 |
static int init_chipset_amd74xx(struct pci_dev *dev) |
993da8f9e amd74xx: remove a... |
133 134 |
{ u8 t = 0, offset = amd_offset(dev); |
1da177e4c Linux-2.6.12-rc2 |
135 136 137 138 |
/* * Check 80-wire cable presence. */ |
993da8f9e 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 ide: drop 'name' ... |
144 |
amd7409_cable_detect(dev); |
993da8f9e amd74xx: remove a... |
145 |
else |
a326b02b0 ide: drop 'name' ... |
146 |
amd7411_cable_detect(dev); |
1da177e4c Linux-2.6.12-rc2 |
147 148 149 150 |
/* * Take care of prefetch & postwrite. */ |
993da8f9e 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 amd74xx: device/v... |
156 |
dev->device == PCI_DEVICE_ID_AMD_VIPER_7411) |
993da8f9e amd74xx: remove a... |
157 158 159 160 |
t &= 0x0f; else t |= 0xf0; pci_write_config_byte(dev, AMD_IDE_CONFIG + offset, t); |
1da177e4c Linux-2.6.12-rc2 |
161 |
|
2ed0ef543 ide: fix ->init_c... |
162 |
return 0; |
1da177e4c Linux-2.6.12-rc2 |
163 |
} |
f454cbe8c ide: ->cable_dete... |
164 |
static u8 amd_cable_detect(ide_hwif_t *hwif) |
bfa14b42a 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 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 ide: add IDE_HFLA... |
176 177 |
#define IDE_HFLAGS_AMD \ (IDE_HFLAG_PIO_NO_BLACKLIST | \ |
caea7602f ide: add IDE_HFLA... |
178 179 |
IDE_HFLAG_POST_SET_MODE | \ IDE_HFLAG_IO_32BIT | \ |
5e71d9c5a ide: IDE_HFLAG_BO... |
180 |
IDE_HFLAG_UNMASK_IRQS) |
caea7602f ide: add IDE_HFLA... |
181 |
|
ced3ec8aa ide: prefix messa... |
182 |
#define DECLARE_AMD_DEV(swdma, udma) \ |
1da177e4c Linux-2.6.12-rc2 |
183 |
{ \ |
ced3ec8aa ide: prefix messa... |
184 |
.name = DRV_NAME, \ |
1da177e4c Linux-2.6.12-rc2 |
185 |
.init_chipset = init_chipset_amd74xx, \ |
1da177e4c Linux-2.6.12-rc2 |
186 |
.enablebits = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \ |
ac95beedf ide: add struct i... |
187 |
.port_ops = &amd_port_ops, \ |
caea7602f ide: add IDE_HFLA... |
188 |
.host_flags = IDE_HFLAGS_AMD, \ |
4099d1432 ide: add PIO masks |
189 |
.pio_mask = ATA_PIO5, \ |
993da8f9e amd74xx: remove a... |
190 |
.swdma_mask = swdma, \ |
5f8b6c348 ide: add ->mwdma_... |
191 |
.mwdma_mask = ATA_MWDMA2, \ |
993da8f9e amd74xx: remove a... |
192 |
.udma_mask = udma, \ |
1da177e4c Linux-2.6.12-rc2 |
193 |
} |
ced3ec8aa ide: prefix messa... |
194 |
#define DECLARE_NV_DEV(udma) \ |
1da177e4c Linux-2.6.12-rc2 |
195 |
{ \ |
ced3ec8aa ide: prefix messa... |
196 |
.name = DRV_NAME, \ |
1da177e4c Linux-2.6.12-rc2 |
197 |
.init_chipset = init_chipset_amd74xx, \ |
1da177e4c Linux-2.6.12-rc2 |
198 |
.enablebits = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \ |
ac95beedf ide: add struct i... |
199 |
.port_ops = &amd_port_ops, \ |
caea7602f ide: add IDE_HFLA... |
200 |
.host_flags = IDE_HFLAGS_AMD, \ |
4099d1432 ide: add PIO masks |
201 |
.pio_mask = ATA_PIO5, \ |
5f8b6c348 ide: add ->mwdma_... |
202 203 |
.swdma_mask = ATA_SWDMA2, \ .mwdma_mask = ATA_MWDMA2, \ |
993da8f9e amd74xx: remove a... |
204 |
.udma_mask = udma, \ |
1da177e4c Linux-2.6.12-rc2 |
205 |
} |
856204360 ide: constify str... |
206 |
static const struct ide_port_info amd74xx_chipsets[] __devinitdata = { |
ced3ec8aa 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 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 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 ide: add IDE_HFLA... |
231 |
d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX; |
ced3ec8aa ide: prefix messa... |
232 |
} else if (idx == 3) { |
993da8f9e 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 Linux-2.6.12-rc2 |
236 |
} |
993da8f9e amd74xx: remove a... |
237 |
|
6636487e8 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 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 amd74xx: remove a... |
249 |
|
d51f19c86 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 ide: add ->dev an... |
268 |
return ide_pci_init_one(dev, &d, NULL); |
1da177e4c Linux-2.6.12-rc2 |
269 |
} |
9cbcc5e3c 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 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 Linux-2.6.12-rc2 |
279 |
#ifdef CONFIG_BLK_DEV_IDE_SATA |
ced3ec8aa ide: prefix messa... |
280 |
{ PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), 5 }, |
1da177e4c Linux-2.6.12-rc2 |
281 |
#endif |
ced3ec8aa 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 Linux-2.6.12-rc2 |
284 |
#ifdef CONFIG_BLK_DEV_IDE_SATA |
ced3ec8aa 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 Linux-2.6.12-rc2 |
287 |
#endif |
ced3ec8aa 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 Linux-2.6.12-rc2 |
298 299 300 |
{ 0, }, }; MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl); |
a9ab09e26 ide: use unique n... |
301 |
static struct pci_driver amd74xx_pci_driver = { |
1da177e4c Linux-2.6.12-rc2 |
302 303 304 |
.name = "AMD_IDE", .id_table = amd74xx_pci_tbl, .probe = amd74xx_probe, |
b2509ac1d amd74xx: add ->re... |
305 |
.remove = ide_pci_remove, |
feb22b7f8 ide: add proper P... |
306 307 |
.suspend = ide_pci_suspend, .resume = ide_pci_resume, |
1da177e4c Linux-2.6.12-rc2 |
308 |
}; |
82ab1eece ide: add missing ... |
309 |
static int __init amd74xx_ide_init(void) |
1da177e4c Linux-2.6.12-rc2 |
310 |
{ |
a9ab09e26 ide: use unique n... |
311 |
return ide_pci_register_driver(&amd74xx_pci_driver); |
1da177e4c Linux-2.6.12-rc2 |
312 |
} |
b2509ac1d amd74xx: add ->re... |
313 314 |
static void __exit amd74xx_ide_exit(void) { |
a9ab09e26 ide: use unique n... |
315 |
pci_unregister_driver(&amd74xx_pci_driver); |
b2509ac1d amd74xx: add ->re... |
316 |
} |
1da177e4c Linux-2.6.12-rc2 |
317 |
module_init(amd74xx_ide_init); |
b2509ac1d amd74xx: add ->re... |
318 |
module_exit(amd74xx_ide_exit); |
1da177e4c Linux-2.6.12-rc2 |
319 |
|
31bbb668f amd74xx: don't ch... |
320 |
MODULE_AUTHOR("Vojtech Pavlik, Bartlomiej Zolnierkiewicz"); |
1da177e4c Linux-2.6.12-rc2 |
321 322 |
MODULE_DESCRIPTION("AMD PCI IDE driver"); MODULE_LICENSE("GPL"); |