View | Details | Raw Unified | Return to bug 15923 | Differences between
and this patch

Collapse All | Expand All

(-)ata/drivers/ata/ata_generic.c (-7 / +19 lines)
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

Return to bug 15923