ide: delete filenames/versions from comments
[linux-2.6] / drivers / ide / pci / generic.c
1 /*
2  *  Copyright (C) 2001-2002     Andre Hedrick <andre@linux-ide.org>
3  *  Portions (C) Copyright 2002  Red Hat Inc <alan@redhat.com>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2, or (at your option) any
8  * later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * For the avoidance of doubt the "preferred form" of this code is one which
16  * is in an open non patent encumbered format. Where cryptographic key signing
17  * forms part of the process of creating an executable the information
18  * including keys needed to generate an equivalently functional executable
19  * are deemed to be part of the source code.
20  */
21
22 #include <linux/types.h>
23 #include <linux/module.h>
24 #include <linux/kernel.h>
25 #include <linux/delay.h>
26 #include <linux/timer.h>
27 #include <linux/mm.h>
28 #include <linux/ioport.h>
29 #include <linux/blkdev.h>
30 #include <linux/hdreg.h>
31 #include <linux/pci.h>
32 #include <linux/ide.h>
33 #include <linux/init.h>
34
35 #include <asm/io.h>
36
37 static int ide_generic_all;             /* Set to claim all devices */
38
39 /*
40  * the module_param_named() was added for the modular case
41  * the __setup() is left as compatibility for existing setups
42  */
43 #ifndef MODULE
44 static int __init ide_generic_all_on(char *unused)
45 {
46         ide_generic_all = 1;
47         printk(KERN_INFO "IDE generic will claim all unknown PCI IDE storage controllers.\n");
48         return 1;
49 }
50 const __setup("all-generic-ide", ide_generic_all_on);
51 #endif
52 module_param_named(all_generic_ide, ide_generic_all, bool, 0444);
53 MODULE_PARM_DESC(all_generic_ide, "IDE generic will claim all unknown PCI IDE storage controllers.");
54
55 #define IDE_HFLAGS_UMC (IDE_HFLAG_NO_DMA | IDE_HFLAG_FORCE_LEGACY_IRQS)
56
57 #define DECLARE_GENERIC_PCI_DEV(name_str, extra_flags) \
58         { \
59                 .name           = name_str, \
60                 .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA | \
61                                   extra_flags | \
62                                   IDE_HFLAG_BOOTABLE, \
63                 .swdma_mask     = ATA_SWDMA2, \
64                 .mwdma_mask     = ATA_MWDMA2, \
65                 .udma_mask      = ATA_UDMA6, \
66         }
67
68 static const struct ide_port_info generic_chipsets[] __devinitdata = {
69         /*  0 */ DECLARE_GENERIC_PCI_DEV("Unknown",     0),
70
71         {       /* 1 */
72                 .name           = "NS87410",
73                 .enablebits     = {{0x43,0x08,0x08}, {0x47,0x08,0x08}},
74                 .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA |
75                                   IDE_HFLAG_BOOTABLE,
76                 .swdma_mask     = ATA_SWDMA2,
77                 .mwdma_mask     = ATA_MWDMA2,
78                 .udma_mask      = ATA_UDMA6,
79         },
80
81         /*  2 */ DECLARE_GENERIC_PCI_DEV("SAMURAI",     0),
82         /*  3 */ DECLARE_GENERIC_PCI_DEV("HT6565",      0),
83         /*  4 */ DECLARE_GENERIC_PCI_DEV("UM8673F",     IDE_HFLAGS_UMC),
84         /*  5 */ DECLARE_GENERIC_PCI_DEV("UM8886A",     IDE_HFLAGS_UMC),
85         /*  6 */ DECLARE_GENERIC_PCI_DEV("UM8886BF",    IDE_HFLAGS_UMC),
86         /*  7 */ DECLARE_GENERIC_PCI_DEV("HINT_IDE",    0),
87         /*  8 */ DECLARE_GENERIC_PCI_DEV("VIA_IDE",     IDE_HFLAG_NO_AUTODMA),
88         /*  9 */ DECLARE_GENERIC_PCI_DEV("OPTI621V",    IDE_HFLAG_NO_AUTODMA),
89
90         {       /* 10 */
91                 .name           = "VIA8237SATA",
92                 .host_flags     = IDE_HFLAG_TRUST_BIOS_FOR_DMA |
93                                   IDE_HFLAG_OFF_BOARD,
94                 .swdma_mask     = ATA_SWDMA2,
95                 .mwdma_mask     = ATA_MWDMA2,
96                 .udma_mask      = ATA_UDMA6,
97         },
98
99         /* 11 */ DECLARE_GENERIC_PCI_DEV("Piccolo0102", IDE_HFLAG_NO_AUTODMA),
100         /* 12 */ DECLARE_GENERIC_PCI_DEV("Piccolo0103", IDE_HFLAG_NO_AUTODMA),
101         /* 13 */ DECLARE_GENERIC_PCI_DEV("Piccolo0105", IDE_HFLAG_NO_AUTODMA),
102
103         {       /* 14 */
104                 .name           = "Revolution",
105                 .host_flags     = IDE_HFLAG_CLEAR_SIMPLEX |
106                                   IDE_HFLAG_TRUST_BIOS_FOR_DMA |
107                                   IDE_HFLAG_OFF_BOARD,
108                 .swdma_mask     = ATA_SWDMA2,
109                 .mwdma_mask     = ATA_MWDMA2,
110                 .udma_mask      = ATA_UDMA6,
111         }
112 };
113
114 /**
115  *      generic_init_one        -       called when a PIIX is found
116  *      @dev: the generic device
117  *      @id: the matching pci id
118  *
119  *      Called when the PCI registration layer (or the IDE initialization)
120  *      finds a device matching our IDE device tables.
121  */
122  
123 static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_device_id *id)
124 {
125         const struct ide_port_info *d = &generic_chipsets[id->driver_data];
126         int ret = -ENODEV;
127
128         /* Don't use the generic entry unless instructed to do so */
129         if (id->driver_data == 0 && ide_generic_all == 0)
130                         goto out;
131
132         switch (dev->vendor) {
133         case PCI_VENDOR_ID_UMC:
134                 if (dev->device == PCI_DEVICE_ID_UMC_UM8886A &&
135                                 !(PCI_FUNC(dev->devfn) & 1))
136                         goto out; /* UM8886A/BF pair */
137                 break;
138         case PCI_VENDOR_ID_OPTI:
139                 if (dev->device == PCI_DEVICE_ID_OPTI_82C558 &&
140                                 !(PCI_FUNC(dev->devfn) & 1))
141                         goto out;
142                 break;
143         case PCI_VENDOR_ID_JMICRON:
144                 if (dev->device != PCI_DEVICE_ID_JMICRON_JMB368 &&
145                                 PCI_FUNC(dev->devfn) != 1)
146                         goto out;
147                 break;
148         case PCI_VENDOR_ID_NS:
149                 if (dev->device == PCI_DEVICE_ID_NS_87410 &&
150                                 (dev->class >> 8) != PCI_CLASS_STORAGE_IDE)
151                         goto out;
152                 break;
153         }
154
155         if (dev->vendor != PCI_VENDOR_ID_JMICRON) {
156                 u16 command;
157                 pci_read_config_word(dev, PCI_COMMAND, &command);
158                 if (!(command & PCI_COMMAND_IO)) {
159                         printk(KERN_INFO "Skipping disabled %s IDE "
160                                         "controller.\n", d->name);
161                         goto out;
162                 }
163         }
164         ret = ide_setup_pci_device(dev, d);
165 out:
166         return ret;
167 }
168
169 static const struct pci_device_id generic_pci_tbl[] = {
170         { PCI_VDEVICE(NS,       PCI_DEVICE_ID_NS_87410),                 1 },
171         { PCI_VDEVICE(PCTECH,   PCI_DEVICE_ID_PCTECH_SAMURAI_IDE),       2 },
172         { PCI_VDEVICE(HOLTEK,   PCI_DEVICE_ID_HOLTEK_6565),              3 },
173         { PCI_VDEVICE(UMC,      PCI_DEVICE_ID_UMC_UM8673F),              4 },
174         { PCI_VDEVICE(UMC,      PCI_DEVICE_ID_UMC_UM8886A),              5 },
175         { PCI_VDEVICE(UMC,      PCI_DEVICE_ID_UMC_UM8886BF),             6 },
176         { PCI_VDEVICE(HINT,     PCI_DEVICE_ID_HINT_VXPROII_IDE),         7 },
177         { PCI_VDEVICE(VIA,      PCI_DEVICE_ID_VIA_82C561),               8 },
178         { PCI_VDEVICE(OPTI,     PCI_DEVICE_ID_OPTI_82C558),              9 },
179 #ifdef CONFIG_BLK_DEV_IDE_SATA
180         { PCI_VDEVICE(VIA,      PCI_DEVICE_ID_VIA_8237_SATA),           10 },
181 #endif
182         { PCI_VDEVICE(TOSHIBA,  PCI_DEVICE_ID_TOSHIBA_PICCOLO),         11 },
183         { PCI_VDEVICE(TOSHIBA,  PCI_DEVICE_ID_TOSHIBA_PICCOLO_1),       12 },
184         { PCI_VDEVICE(TOSHIBA,  PCI_DEVICE_ID_TOSHIBA_PICCOLO_2),       13 },
185         { PCI_VDEVICE(NETCELL,  PCI_DEVICE_ID_REVOLUTION),              14 },
186         /*
187          * Must come last.  If you add entries adjust
188          * this table and generic_chipsets[] appropriately.
189          */
190         { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 0 },
191         { 0, },
192 };
193 MODULE_DEVICE_TABLE(pci, generic_pci_tbl);
194
195 static struct pci_driver driver = {
196         .name           = "PCI_IDE",
197         .id_table       = generic_pci_tbl,
198         .probe          = generic_init_one,
199 };
200
201 static int __init generic_ide_init(void)
202 {
203         return ide_pci_register_driver(&driver);
204 }
205
206 module_init(generic_ide_init);
207
208 MODULE_AUTHOR("Andre Hedrick");
209 MODULE_DESCRIPTION("PCI driver module for generic PCI IDE");
210 MODULE_LICENSE("GPL");