static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_device_id *id) { struct ide_port_info d = ali15x3_chipset; u8 rev = dev->revision, idx = id->driver_data; if (rev <= 0xC4) d.host_flags |= IDE_HFLAG_NO_LBA48_DMA; if (rev >= 0x20) { if (rev == 0x20) d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA; if (rev < 0xC2) d.udma_mask = ATA_UDMA2; else if (rev == 0xC2 || rev == 0xC3) d.udma_mask = ATA_UDMA4; else if (rev == 0xC4) d.udma_mask = ATA_UDMA5; else d.udma_mask = ATA_UDMA6; d.dma_ops = &ali_dma_ops; } else { d.host_flags |= IDE_HFLAG_NO_DMA; d.mwdma_mask = d.swdma_mask = 0; } if (idx == 0) d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX; return ide_pci_init_one(dev, &d, NULL); }
static int __devinit tc86c001_init_one(struct pci_dev *dev, const struct pci_device_id *id) { int rc; rc = pci_enable_device(dev); if (rc) goto out; rc = pci_request_region(dev, 5, DRV_NAME); if (rc) { printk(KERN_ERR DRV_NAME ": system control regs already in use"); goto out_disable; } rc = ide_pci_init_one(dev, &tc86c001_chipset, NULL); if (rc) goto out_release; goto out; out_release: pci_release_region(dev, 5); out_disable: pci_disable_device(dev); out: return rc; }
static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_device_id *id) { const struct chipset_bus_clock_list_entry *bus_clock; struct ide_port_info d; u8 idx = id->driver_data; int bus_speed = ide_pci_clk ? ide_pci_clk : 33; int err; if (bus_speed <= 33) bus_clock = aec6xxx_33_base; else bus_clock = aec6xxx_34_base; err = pci_enable_device(dev); if (err) return err; d = aec62xx_chipsets[idx]; if (idx == 3 || idx == 4) { unsigned long dma_base = pci_resource_start(dev, 4); if (inb(dma_base + 2) & 0x10) { printk(KERN_INFO DRV_NAME " %s: AEC6880%s card detected" "\n", pci_name(dev), (idx == 4) ? "R" : ""); d.udma_mask = ATA_UDMA6; } } err = ide_pci_init_one(dev, &d, (void *)bus_clock); if (err) pci_disable_device(dev); return err; }
static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_device_id *id) { const struct ide_port_info *d = &pdcnew_chipsets[id->driver_data]; struct pci_dev *bridge = dev->bus->self; if (dev->device == PCI_DEVICE_ID_PROMISE_20270 && bridge && bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == PCI_DEVICE_ID_DEC_21150) { struct pci_dev *dev2; if (PCI_SLOT(dev->devfn) & 2) return -ENODEV; dev2 = pdc20270_get_dev2(dev); if (dev2) { int ret = ide_pci_init_two(dev, dev2, d, NULL); if (ret < 0) pci_dev_put(dev2); return ret; } } if (dev->device == PCI_DEVICE_ID_PROMISE_20276 && bridge && bridge->vendor == PCI_VENDOR_ID_INTEL && (bridge->device == PCI_DEVICE_ID_INTEL_I960 || bridge->device == PCI_DEVICE_ID_INTEL_I960RM)) { printk(KERN_INFO DRV_NAME " %s: attached to I2O RAID controller," " skipping\n", pci_name(dev)); return -ENODEV; } return ide_pci_init_one(dev, d, NULL); }
static int __devinit siimage_init_one(struct pci_dev *dev, const struct pci_device_id *id) { void __iomem *ioaddr = NULL; resource_size_t bar5 = pci_resource_start(dev, 5); unsigned long barsize = pci_resource_len(dev, 5); int rc; struct ide_port_info d; u8 idx = id->driver_data; u8 BA5_EN; d = siimage_chipsets[idx]; if (idx) { static int first = 1; if (first) { printk(KERN_INFO DRV_NAME ": For full SATA support you " "should use the libata sata_sil module.\n"); first = 0; } d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA; } rc = pci_enable_device(dev); if (rc) return rc; pci_read_config_byte(dev, 0x8A, &BA5_EN); if ((BA5_EN & 0x01) || bar5) { /* * Drop back to PIO if we can't map the MMIO. Some systems * seem to get terminally confused in the PCI spaces. */ if (!request_mem_region(bar5, barsize, d.name)) { printk(KERN_WARNING DRV_NAME " %s: MMIO ports not " "available\n", pci_name(dev)); } else { ioaddr = pci_ioremap_bar(dev, 5); if (ioaddr == NULL) release_mem_region(bar5, barsize); } } rc = ide_pci_init_one(dev, &d, ioaddr); if (rc) { if (ioaddr) { iounmap(ioaddr); release_mem_region(bar5, barsize); } pci_disable_device(dev); } return rc; }
static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_device_id *id) { const struct ide_port_info *d; u16 pcicmd = 0; pci_read_config_word(dev, PCI_COMMAND, &pcicmd); d = &hpt34x_chipsets[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; return ide_pci_init_one(dev, d, NULL); }
static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) { struct ide_port_info d = rz1000_chipset; int rc; rc = pci_enable_device(dev); if (rc) return rc; if (rz1000_disable_readahead(dev)) { d.host_flags |= IDE_HFLAG_SERIALIZE; d.host_flags |= IDE_HFLAG_NO_UNMASK_IRQS; } return ide_pci_init_one(dev, &d, NULL); }
static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id) { struct ide_port_info d; u8 idx = id->driver_data; d = cmd64x_chipsets[idx]; if (idx == 1) { if (dev->revision < 5) { d.udma_mask = 0x00; if (dev->revision < 3) { d.enablebits[0].reg = 0; d.port_ops = &cmd64x_port_ops; if (dev->revision == 1) d.dma_ops = &cmd646_rev1_dma_ops; } } } return ide_pci_init_one(dev, &d, NULL); }
static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id) { struct ide_port_info d = sis5513_chipset; u8 udma_rates[] = { 0x00, 0x00, 0x07, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f }; int rc; rc = pci_enable_device(dev); if (rc) return rc; if (sis_find_family(dev) == 0) return -ENOTSUPP; if (chipset_family >= ATA_133) d.port_ops = &sis_ata133_port_ops; else d.port_ops = &sis_port_ops; d.udma_mask = udma_rates[chipset_family]; return ide_pci_init_one(dev, &d, NULL); }
static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id) { struct ide_port_info d; u8 idx = id->driver_data; d = cmd64x_chipsets[idx]; if (idx == 1) { /* * UltraDMA only supported on PCI646U and PCI646U2, which * correspond to revisions 0x03, 0x05 and 0x07 respectively. * Actually, although the CMD tech support people won't * tell me the details, the 0x03 revision cannot support * UDMA correctly without hardware modifications, and even * then it only works with Quantum disks due to some * hold time assumptions in the 646U part which are fixed * in the 646U2. * * So we only do UltraDMA on revision 0x05 and 0x07 chipsets. */ if (dev->revision < 5) { d.udma_mask = 0x00; /* * The original PCI0646 didn't have the primary * channel enable bit, it appeared starting with * PCI0646U (i.e. revision ID 3). */ if (dev->revision < 3) { d.enablebits[0].reg = 0; if (dev->revision == 1) d.dma_ops = &cmd646_rev1_dma_ops; else d.dma_ops = &cmd64x_dma_ops; } } } return ide_pci_init_one(dev, &d, NULL); }
static int __devinit triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &triflex_device, NULL); }
static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &piix_pci_info[id->driver_data], NULL); }
static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &slc90e66_chipset, NULL); }
static int __devinit it8213_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &it8213_chipset, NULL); }
static int __devinit jmicron_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &jmicron_chipset, NULL); }
static int __devinit opti621_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &opti621_chipset, NULL); }
static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) { return ide_pci_init_one(dev, &rz1000_chipset, NULL); }