Lines 32-37
Link Here
|
32 |
* A generic parallel ATA driver using libata |
32 |
* A generic parallel ATA driver using libata |
33 |
*/ |
33 |
*/ |
34 |
|
34 |
|
|
|
35 |
enum { |
36 |
ATA_GEN_CLASS_MATCH = (1 << 0), |
37 |
ATA_GEN_FORCE_DMA = (1 << 1), |
38 |
}; |
39 |
|
35 |
/** |
40 |
/** |
36 |
* generic_set_mode - mode setting |
41 |
* generic_set_mode - mode setting |
37 |
* @link: link to set up |
42 |
* @link: link to set up |
Lines 46-58
Link Here
|
46 |
static int generic_set_mode(struct ata_link *link, struct ata_device **unused) |
51 |
static int generic_set_mode(struct ata_link *link, struct ata_device **unused) |
47 |
{ |
52 |
{ |
48 |
struct ata_port *ap = link->ap; |
53 |
struct ata_port *ap = link->ap; |
|
|
54 |
const struct pci_device_id *id = ap->host->private_data; |
49 |
int dma_enabled = 0; |
55 |
int dma_enabled = 0; |
50 |
struct ata_device *dev; |
56 |
struct ata_device *dev; |
51 |
struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
57 |
struct pci_dev *pdev = to_pci_dev(ap->host->dev); |
52 |
|
58 |
|
53 |
/* Bits 5 and 6 indicate if DMA is active on master/slave */ |
59 |
if (id->driver_data & ATA_GEN_FORCE_DMA) { |
54 |
if (ap->ioaddr.bmdma_addr) |
60 |
dma_enabled = 0xff; |
|
|
61 |
} else if (ap->ioaddr.bmdma_addr) { |
62 |
/* Bits 5 and 6 indicate if DMA is active on master/slave */ |
55 |
dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); |
63 |
dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); |
|
|
64 |
} |
56 |
|
65 |
|
57 |
if (pdev->vendor == PCI_VENDOR_ID_CENATEK) |
66 |
if (pdev->vendor == PCI_VENDOR_ID_CENATEK) |
58 |
dma_enabled = 0xFF; |
67 |
dma_enabled = 0xFF; |
Lines 126-132
static int ata_generic_init_one(struct p
Link Here
|
126 |
const struct ata_port_info *ppi[] = { &info, NULL }; |
135 |
const struct ata_port_info *ppi[] = { &info, NULL }; |
127 |
|
136 |
|
128 |
/* Don't use the generic entry unless instructed to do so */ |
137 |
/* Don't use the generic entry unless instructed to do so */ |
129 |
if (id->driver_data == 1 && all_generic_ide == 0) |
138 |
if ((id->driver_data & ATA_GEN_CLASS_MATCH) && all_generic_ide == 0) |
130 |
return -ENODEV; |
139 |
return -ENODEV; |
131 |
|
140 |
|
132 |
/* Devices that need care */ |
141 |
/* Devices that need care */ |
Lines 155-161
static int ata_generic_init_one(struct p
Link Here
|
155 |
return rc; |
164 |
return rc; |
156 |
pcim_pin_device(dev); |
165 |
pcim_pin_device(dev); |
157 |
} |
166 |
} |
158 |
return ata_pci_bmdma_init_one(dev, ppi, &generic_sht, NULL, 0); |
167 |
return ata_pci_bmdma_init_one(dev, ppi, &generic_sht, (void *)id, 0); |
159 |
} |
168 |
} |
160 |
|
169 |
|
161 |
static struct pci_device_id ata_generic[] = { |
170 |
static struct pci_device_id ata_generic[] = { |
Lines 167-179
static struct pci_device_id ata_generic[
Link Here
|
167 |
{ PCI_DEVICE(PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), }, |
176 |
{ PCI_DEVICE(PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT_VXPROII_IDE), }, |
168 |
{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561), }, |
177 |
{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C561), }, |
169 |
{ PCI_DEVICE(PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558), }, |
178 |
{ PCI_DEVICE(PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C558), }, |
170 |
{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), }, |
179 |
{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE), |
|
|
180 |
.driver_data = ATA_GEN_FORCE_DMA }, |
171 |
/* |
181 |
/* |
172 |
* For some reason, MCP89 on MacBook 7,1 doesn't work with |
182 |
* For some reason, MCP89 on MacBook 7,1 doesn't work with |
173 |
* ahci, use ata_generic instead. |
183 |
* ahci, use ata_generic instead. |
174 |
*/ |
184 |
*/ |
175 |
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA, |
185 |
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP89_SATA, |
176 |
PCI_VENDOR_ID_APPLE, 0xcb89, }, |
186 |
PCI_VENDOR_ID_APPLE, 0xcb89, |
|
|
187 |
.driver_data = ATA_GEN_FORCE_DMA }, |
177 |
#if !defined(CONFIG_PATA_TOSHIBA) && !defined(CONFIG_PATA_TOSHIBA_MODULE) |
188 |
#if !defined(CONFIG_PATA_TOSHIBA) && !defined(CONFIG_PATA_TOSHIBA_MODULE) |
178 |
{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), }, |
189 |
{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_1), }, |
179 |
{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), }, |
190 |
{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_2), }, |
Lines 181-187
static struct pci_device_id ata_generic[
Link Here
|
181 |
{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_5), }, |
192 |
{ PCI_DEVICE(PCI_VENDOR_ID_TOSHIBA,PCI_DEVICE_ID_TOSHIBA_PICCOLO_5), }, |
182 |
#endif |
193 |
#endif |
183 |
/* Must come last. If you add entries adjust this table appropriately */ |
194 |
/* Must come last. If you add entries adjust this table appropriately */ |
184 |
{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL, 1}, |
195 |
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_IDE << 8, 0xFFFFFF00UL), |
|
|
196 |
.driver_data = ATA_GEN_CLASS_MATCH }, |
185 |
{ 0, }, |
197 |
{ 0, }, |
186 |
}; |
198 |
}; |
187 |
|
199 |
|