Lines Matching +full:ultra +full:- +full:low

1 // SPDX-License-Identifier: GPL-2.0-only
3 * pata_serverworks.c - Serverworks PATA for new ATA layer
11 * Copyright (C) 1998-2000 Michel Aubry
12 * Copyright (C) 1998-2000 Andrzej Krzysztofowicz
13 * Copyright (C) 1998-2000 Andre Hedrick <andre@linux-ide.org>
27 * *** to detect 80-conductor cable presence. ***
61 * oem_cable - Dell/Sun serverworks cable detection
70 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in oem_cable()
72 if (pdev->subsystem_device & (1 << (ap->port_no + 14))) in oem_cable()
96 * serverworks_cable_detect - cable detection
105 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in serverworks_cable_detect()
108 while(cb->device) { in serverworks_cable_detect()
109 if (cb->device == pdev->device && in serverworks_cable_detect()
110 (cb->subvendor == pdev->subsystem_vendor || in serverworks_cable_detect()
111 cb->subvendor == PCI_ANY_ID)) { in serverworks_cable_detect()
112 return cb->cable_detect(ap); in serverworks_cable_detect()
118 return -1; /* kill compiler warning */ in serverworks_cable_detect()
122 * serverworks_is_csb - Check for CSB or OSB
131 switch (pdev->device) { in serverworks_is_csb()
144 * serverworks_osb4_filter - mode selection filter
155 if (adev->class == ATA_DEV_ATA) in serverworks_osb4_filter()
162 * serverworks_csb_filter - mode selection filter
176 if (adev->class != ATA_DEV_ATA) in serverworks_csb_filter()
180 ata_id_c_string(adev->id, model_num, ATA_ID_PROD, sizeof(model_num)); in serverworks_csb_filter()
190 * serverworks_set_piomode - set initial PIO mode data
200 int offset = 1 + 2 * ap->port_no - adev->devno; in serverworks_set_piomode()
201 int devbits = (2 * ap->port_no + adev->devno) * 4; in serverworks_set_piomode()
203 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in serverworks_set_piomode()
204 int pio = adev->pio_mode - XFER_PIO_0; in serverworks_set_piomode()
218 * serverworks_set_dmamode - set initial DMA mode data
230 int offset = 1 + 2 * ap->port_no - adev->devno; in serverworks_set_dmamode()
231 int devbits = 2 * ap->port_no + adev->devno; in serverworks_set_dmamode()
232 u8 ultra; in serverworks_set_dmamode() local
234 struct pci_dev *pdev = to_pci_dev(ap->host->dev); in serverworks_set_dmamode()
237 pci_read_config_byte(pdev, 0x56 + ap->port_no, &ultra); in serverworks_set_dmamode()
238 ultra &= ~(0x0F << (adev->devno * 4)); in serverworks_set_dmamode()
240 if (adev->dma_mode >= XFER_UDMA_0) { in serverworks_set_dmamode()
243 ultra |= (adev->dma_mode - XFER_UDMA_0) in serverworks_set_dmamode()
244 << (adev->devno * 4); in serverworks_set_dmamode()
248 dma_mode[adev->dma_mode - XFER_MW_DMA_0]); in serverworks_set_dmamode()
251 pci_write_config_byte(pdev, 0x56 + ap->port_no, ultra); in serverworks_set_dmamode()
289 dev_info(&pdev->dev, "UDMA not BIOS enabled.\n"); in serverworks_fixup_osb4()
295 dev_warn(&pdev->dev, "Unable to find bridge.\n"); in serverworks_fixup_osb4()
296 return -ENODEV; in serverworks_fixup_osb4()
304 if (!(PCI_FUNC(pdev->devfn) & 1)) { in serverworks_fixup_csb()
333 * 2. enable DMA modes with bits 0-1 in serverworks_fixup_csb()
341 if (!(PCI_FUNC(pdev->devfn) & 1)) in serverworks_fixup_csb()
344 btr |= (pdev->revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2; in serverworks_fixup_csb()
353 /* Setup HT1000 SouthBridge Controller - Single Channel Only */ in serverworks_fixup_ht1000()
367 switch (pdev->device) { in serverworks_fixup()
407 }, { /* CSB5 - later revisions*/ in serverworks_init_one()
415 const struct ata_port_info *ppi[] = { &info[id->driver_data], NULL }; in serverworks_init_one()
426 if (pdev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { in serverworks_init_one()
433 else if ((pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) || in serverworks_init_one()
434 (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE) || in serverworks_init_one()
435 (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2)) { in serverworks_init_one()
443 if (pdev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2) in serverworks_init_one()
491 MODULE_DESCRIPTION("low-level driver for Serverworks OSB4/CSB5/CSB6");