Commit 93bd9868 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/jgarzik/libata-upstream-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 9e9c96de 3a540dab
...@@ -817,6 +817,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev) ...@@ -817,6 +817,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev)
static void __init quirk_intel_ide_combined(struct pci_dev *pdev) static void __init quirk_intel_ide_combined(struct pci_dev *pdev)
{ {
u8 prog, comb, tmp; u8 prog, comb, tmp;
int ich = 0;
/* /*
* Narrow down to Intel SATA PCI devices. * Narrow down to Intel SATA PCI devices.
...@@ -827,8 +828,12 @@ static void __init quirk_intel_ide_combined(struct pci_dev *pdev) ...@@ -827,8 +828,12 @@ static void __init quirk_intel_ide_combined(struct pci_dev *pdev)
case 0x24df: case 0x24df:
case 0x25a3: case 0x25a3:
case 0x25b0: case 0x25b0:
ich = 5;
break;
case 0x2651: case 0x2651:
case 0x2652: case 0x2652:
case 0x2653:
ich = 6;
break; break;
default: default:
/* we do not handle this PCI device */ /* we do not handle this PCI device */
...@@ -839,13 +844,25 @@ static void __init quirk_intel_ide_combined(struct pci_dev *pdev) ...@@ -839,13 +844,25 @@ static void __init quirk_intel_ide_combined(struct pci_dev *pdev)
* Read combined mode register. * Read combined mode register.
*/ */
pci_read_config_byte(pdev, 0x90, &tmp); /* combined mode reg */ pci_read_config_byte(pdev, 0x90, &tmp); /* combined mode reg */
tmp &= 0x6; /* interesting bits 2:1, PATA primary/secondary */
if (tmp == 0x4) /* bits 10x */ if (ich == 5) {
comb = (1 << 0); /* SATA port 0, PATA port 1 */ tmp &= 0x6; /* interesting bits 2:1, PATA primary/secondary */
else if (tmp == 0x6) /* bits 11x */ if (tmp == 0x4) /* bits 10x */
comb = (1 << 2); /* PATA port 0, SATA port 1 */ comb = (1 << 0); /* SATA port 0, PATA port 1 */
else else if (tmp == 0x6) /* bits 11x */
return; /* not in combined mode */ comb = (1 << 2); /* PATA port 0, SATA port 1 */
else
return; /* not in combined mode */
} else {
WARN_ON(ich != 6);
tmp &= 0x3; /* interesting bits 1:0 */
if (tmp & (1 << 0))
comb = (1 << 2); /* PATA port 0, SATA port 1 */
else if (tmp & (1 << 1))
comb = (1 << 0); /* SATA port 0, PATA port 1 */
else
return; /* not in combined mode */
}
/* /*
* Read programming interface register. * Read programming interface register.
......
...@@ -2029,6 +2029,7 @@ static void ata_pio_sector(struct ata_port *ap) ...@@ -2029,6 +2029,7 @@ static void ata_pio_sector(struct ata_port *ap)
{ {
struct ata_queued_cmd *qc; struct ata_queued_cmd *qc;
struct scatterlist *sg; struct scatterlist *sg;
struct page *page;
unsigned char *buf; unsigned char *buf;
u8 status; u8 status;
...@@ -2065,7 +2066,8 @@ static void ata_pio_sector(struct ata_port *ap) ...@@ -2065,7 +2066,8 @@ static void ata_pio_sector(struct ata_port *ap)
if (qc->cursect == (qc->nsect - 1)) if (qc->cursect == (qc->nsect - 1))
ap->pio_task_state = PIO_ST_LAST; ap->pio_task_state = PIO_ST_LAST;
buf = kmap(sg[qc->cursg].page) + page = sg[qc->cursg].page;
buf = kmap(page) +
sg[qc->cursg].offset + (qc->cursg_ofs * ATA_SECT_SIZE); sg[qc->cursg].offset + (qc->cursg_ofs * ATA_SECT_SIZE);
qc->cursect++; qc->cursect++;
...@@ -2088,7 +2090,7 @@ static void ata_pio_sector(struct ata_port *ap) ...@@ -2088,7 +2090,7 @@ static void ata_pio_sector(struct ata_port *ap)
else else
insl(ap->ioaddr.data_addr, buf, ATA_SECT_DWORDS); insl(ap->ioaddr.data_addr, buf, ATA_SECT_DWORDS);
kunmap(sg[qc->cursg].page); kunmap(page);
} }
static void ata_pio_task(void *_data) static void ata_pio_task(void *_data)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment