Commit e58d4fd8 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev

* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
  sata_fsl: Return non-zero on error in probe()
  drivers/ata/pata_ali.c: s/isa_bridge/ali_isa_bridge/ to fix alpha build
  libata: New driver for OCTEON SOC Compact Flash interface (v7).
  libata: Add another column to the ata_timing table.
  sata_via: Add VT8261 support
  pata_atiixp: update port enabledness test handling
  [libata] get-identity ioctl: Fix use of invalid memory pointer
parents a11d9b62 e4ac522b
...@@ -698,6 +698,15 @@ config PATA_IXP4XX_CF ...@@ -698,6 +698,15 @@ config PATA_IXP4XX_CF
If unsure, say N. If unsure, say N.
config PATA_OCTEON_CF
tristate "OCTEON Boot Bus Compact Flash support"
depends on CPU_CAVIUM_OCTEON
help
This option enables a polled compact flash driver for use with
compact flash cards attached to the OCTEON boot bus.
If unsure, say N.
config PATA_SCC config PATA_SCC
tristate "Toshiba's Cell Reference Set IDE support" tristate "Toshiba's Cell Reference Set IDE support"
depends on PCI && PPC_CELLEB depends on PCI && PPC_CELLEB
......
...@@ -69,6 +69,7 @@ obj-$(CONFIG_PATA_IXP4XX_CF) += pata_ixp4xx_cf.o ...@@ -69,6 +69,7 @@ obj-$(CONFIG_PATA_IXP4XX_CF) += pata_ixp4xx_cf.o
obj-$(CONFIG_PATA_SCC) += pata_scc.o obj-$(CONFIG_PATA_SCC) += pata_scc.o
obj-$(CONFIG_PATA_SCH) += pata_sch.o obj-$(CONFIG_PATA_SCH) += pata_sch.o
obj-$(CONFIG_PATA_BF54X) += pata_bf54x.o obj-$(CONFIG_PATA_BF54X) += pata_bf54x.o
obj-$(CONFIG_PATA_OCTEON_CF) += pata_octeon_cf.o
obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o
obj-$(CONFIG_PATA_OF_PLATFORM) += pata_of_platform.o obj-$(CONFIG_PATA_OF_PLATFORM) += pata_of_platform.o
obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o
......
...@@ -3029,33 +3029,33 @@ int sata_set_spd(struct ata_link *link) ...@@ -3029,33 +3029,33 @@ int sata_set_spd(struct ata_link *link)
*/ */
static const struct ata_timing ata_timing[] = { static const struct ata_timing ata_timing[] = {
/* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 960, 0 }, */ /* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 0, 960, 0 }, */
{ XFER_PIO_0, 70, 290, 240, 600, 165, 150, 600, 0 }, { XFER_PIO_0, 70, 290, 240, 600, 165, 150, 0, 600, 0 },
{ XFER_PIO_1, 50, 290, 93, 383, 125, 100, 383, 0 }, { XFER_PIO_1, 50, 290, 93, 383, 125, 100, 0, 383, 0 },
{ XFER_PIO_2, 30, 290, 40, 330, 100, 90, 240, 0 }, { XFER_PIO_2, 30, 290, 40, 330, 100, 90, 0, 240, 0 },
{ XFER_PIO_3, 30, 80, 70, 180, 80, 70, 180, 0 }, { XFER_PIO_3, 30, 80, 70, 180, 80, 70, 0, 180, 0 },
{ XFER_PIO_4, 25, 70, 25, 120, 70, 25, 120, 0 }, { XFER_PIO_4, 25, 70, 25, 120, 70, 25, 0, 120, 0 },
{ XFER_PIO_5, 15, 65, 25, 100, 65, 25, 100, 0 }, { XFER_PIO_5, 15, 65, 25, 100, 65, 25, 0, 100, 0 },
{ XFER_PIO_6, 10, 55, 20, 80, 55, 20, 80, 0 }, { XFER_PIO_6, 10, 55, 20, 80, 55, 20, 0, 80, 0 },
{ XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 960, 0 }, { XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 50, 960, 0 },
{ XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 480, 0 }, { XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 30, 480, 0 },
{ XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 240, 0 }, { XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 20, 240, 0 },
{ XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 480, 0 }, { XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 20, 480, 0 },
{ XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 150, 0 }, { XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 5, 150, 0 },
{ XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 120, 0 }, { XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 5, 120, 0 },
{ XFER_MW_DMA_3, 25, 0, 0, 0, 65, 25, 100, 0 }, { XFER_MW_DMA_3, 25, 0, 0, 0, 65, 25, 5, 100, 0 },
{ XFER_MW_DMA_4, 25, 0, 0, 0, 55, 20, 80, 0 }, { XFER_MW_DMA_4, 25, 0, 0, 0, 55, 20, 5, 80, 0 },
/* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 150 }, */ /* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 0, 150 }, */
{ XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 120 }, { XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 0, 120 },
{ XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 80 }, { XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 0, 80 },
{ XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 60 }, { XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 0, 60 },
{ XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 45 }, { XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 0, 45 },
{ XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 30 }, { XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 0, 30 },
{ XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 20 }, { XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 0, 20 },
{ XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 15 }, { XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 0, 15 },
{ 0xFF } { 0xFF }
}; };
...@@ -3065,14 +3065,15 @@ static const struct ata_timing ata_timing[] = { ...@@ -3065,14 +3065,15 @@ static const struct ata_timing ata_timing[] = {
static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT) static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT)
{ {
q->setup = EZ(t->setup * 1000, T); q->setup = EZ(t->setup * 1000, T);
q->act8b = EZ(t->act8b * 1000, T); q->act8b = EZ(t->act8b * 1000, T);
q->rec8b = EZ(t->rec8b * 1000, T); q->rec8b = EZ(t->rec8b * 1000, T);
q->cyc8b = EZ(t->cyc8b * 1000, T); q->cyc8b = EZ(t->cyc8b * 1000, T);
q->active = EZ(t->active * 1000, T); q->active = EZ(t->active * 1000, T);
q->recover = EZ(t->recover * 1000, T); q->recover = EZ(t->recover * 1000, T);
q->cycle = EZ(t->cycle * 1000, T); q->dmack_hold = EZ(t->dmack_hold * 1000, T);
q->udma = EZ(t->udma * 1000, UT); q->cycle = EZ(t->cycle * 1000, T);
q->udma = EZ(t->udma * 1000, UT);
} }
void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b,
...@@ -3084,6 +3085,7 @@ void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, ...@@ -3084,6 +3085,7 @@ void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b,
if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b); if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b);
if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active); if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active);
if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover); if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover);
if (what & ATA_TIMING_DMACK_HOLD) m->dmack_hold = max(a->dmack_hold, b->dmack_hold);
if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle); if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle);
if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma); if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma);
} }
...@@ -6638,7 +6640,6 @@ EXPORT_SYMBOL_GPL(ata_dev_pair); ...@@ -6638,7 +6640,6 @@ EXPORT_SYMBOL_GPL(ata_dev_pair);
EXPORT_SYMBOL_GPL(ata_port_disable); EXPORT_SYMBOL_GPL(ata_port_disable);
EXPORT_SYMBOL_GPL(ata_ratelimit); EXPORT_SYMBOL_GPL(ata_ratelimit);
EXPORT_SYMBOL_GPL(ata_wait_register); EXPORT_SYMBOL_GPL(ata_wait_register);
EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
EXPORT_SYMBOL_GPL(ata_scsi_queuecmd); EXPORT_SYMBOL_GPL(ata_scsi_queuecmd);
EXPORT_SYMBOL_GPL(ata_scsi_slave_config); EXPORT_SYMBOL_GPL(ata_scsi_slave_config);
EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy); EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy);
......
...@@ -423,9 +423,9 @@ int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev, ...@@ -423,9 +423,9 @@ int ata_std_bios_param(struct scsi_device *sdev, struct block_device *bdev,
* RETURNS: * RETURNS:
* Zero on success, negative errno on error. * Zero on success, negative errno on error.
*/ */
static int ata_get_identity(struct scsi_device *sdev, void __user *arg) static int ata_get_identity(struct ata_port *ap, struct scsi_device *sdev,
void __user *arg)
{ {
struct ata_port *ap = ata_shost_to_port(sdev->host);
struct ata_device *dev = ata_scsi_find_dev(ap, sdev); struct ata_device *dev = ata_scsi_find_dev(ap, sdev);
u16 __user *dst = arg; u16 __user *dst = arg;
char buf[40]; char buf[40];
...@@ -645,7 +645,8 @@ int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg) ...@@ -645,7 +645,8 @@ int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg)
return rc; return rc;
} }
int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg) int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *scsidev,
int cmd, void __user *arg)
{ {
int val = -EINVAL, rc = -EINVAL; int val = -EINVAL, rc = -EINVAL;
...@@ -663,7 +664,7 @@ int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg) ...@@ -663,7 +664,7 @@ int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
return 0; return 0;
case HDIO_GET_IDENTITY: case HDIO_GET_IDENTITY:
return ata_get_identity(scsidev, arg); return ata_get_identity(ap, scsidev, arg);
case HDIO_DRIVE_CMD: case HDIO_DRIVE_CMD:
if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO)) if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
...@@ -682,6 +683,14 @@ int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg) ...@@ -682,6 +683,14 @@ int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
return rc; return rc;
} }
EXPORT_SYMBOL_GPL(ata_sas_scsi_ioctl);
int ata_scsi_ioctl(struct scsi_device *scsidev, int cmd, void __user *arg)
{
return ata_sas_scsi_ioctl(ata_shost_to_port(scsidev->host),
scsidev, cmd, arg);
}
EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
/** /**
* ata_scsi_qc_new - acquire new ata_queued_cmd reference * ata_scsi_qc_new - acquire new ata_queued_cmd reference
......
...@@ -41,7 +41,7 @@ static int ali_atapi_dma = 0; ...@@ -41,7 +41,7 @@ static int ali_atapi_dma = 0;
module_param_named(atapi_dma, ali_atapi_dma, int, 0644); module_param_named(atapi_dma, ali_atapi_dma, int, 0644);
MODULE_PARM_DESC(atapi_dma, "Enable ATAPI DMA (0=disable, 1=enable)"); MODULE_PARM_DESC(atapi_dma, "Enable ATAPI DMA (0=disable, 1=enable)");
static struct pci_dev *isa_bridge; static struct pci_dev *ali_isa_bridge;
/* /*
* Cable special cases * Cable special cases
...@@ -346,13 +346,13 @@ static void ali_c2_c3_postreset(struct ata_link *link, unsigned int *classes) ...@@ -346,13 +346,13 @@ static void ali_c2_c3_postreset(struct ata_link *link, unsigned int *classes)
int port_bit = 4 << link->ap->port_no; int port_bit = 4 << link->ap->port_no;
/* If our bridge is an ALI 1533 then do the extra work */ /* If our bridge is an ALI 1533 then do the extra work */
if (isa_bridge) { if (ali_isa_bridge) {
/* Tristate and re-enable the bus signals */ /* Tristate and re-enable the bus signals */
pci_read_config_byte(isa_bridge, 0x58, &r); pci_read_config_byte(ali_isa_bridge, 0x58, &r);
r &= ~port_bit; r &= ~port_bit;
pci_write_config_byte(isa_bridge, 0x58, r); pci_write_config_byte(ali_isa_bridge, 0x58, r);
r |= port_bit; r |= port_bit;
pci_write_config_byte(isa_bridge, 0x58, r); pci_write_config_byte(ali_isa_bridge, 0x58, r);
} }
ata_sff_postreset(link, classes); ata_sff_postreset(link, classes);
} }
...@@ -467,14 +467,14 @@ static void ali_init_chipset(struct pci_dev *pdev) ...@@ -467,14 +467,14 @@ static void ali_init_chipset(struct pci_dev *pdev)
pci_write_config_byte(pdev, 0x53, tmp); pci_write_config_byte(pdev, 0x53, tmp);
} }
north = pci_get_bus_and_slot(0, PCI_DEVFN(0,0)); north = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
if (north && north->vendor == PCI_VENDOR_ID_AL && isa_bridge) { if (north && north->vendor == PCI_VENDOR_ID_AL && ali_isa_bridge) {
/* Configure the ALi bridge logic. For non ALi rely on BIOS. /* Configure the ALi bridge logic. For non ALi rely on BIOS.
Set the south bridge enable bit */ Set the south bridge enable bit */
pci_read_config_byte(isa_bridge, 0x79, &tmp); pci_read_config_byte(ali_isa_bridge, 0x79, &tmp);
if (pdev->revision == 0xC2) if (pdev->revision == 0xC2)
pci_write_config_byte(isa_bridge, 0x79, tmp | 0x04); pci_write_config_byte(ali_isa_bridge, 0x79, tmp | 0x04);
else if (pdev->revision > 0xC2 && pdev->revision < 0xC5) else if (pdev->revision > 0xC2 && pdev->revision < 0xC5)
pci_write_config_byte(isa_bridge, 0x79, tmp | 0x02); pci_write_config_byte(ali_isa_bridge, 0x79, tmp | 0x02);
} }
pci_dev_put(north); pci_dev_put(north);
ata_pci_bmdma_clear_simplex(pdev); ata_pci_bmdma_clear_simplex(pdev);
...@@ -571,9 +571,9 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -571,9 +571,9 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
ali_init_chipset(pdev); ali_init_chipset(pdev);
if (isa_bridge && pdev->revision >= 0x20 && pdev->revision < 0xC2) { if (ali_isa_bridge && pdev->revision >= 0x20 && pdev->revision < 0xC2) {
/* Are we paired with a UDMA capable chip */ /* Are we paired with a UDMA capable chip */
pci_read_config_byte(isa_bridge, 0x5E, &tmp); pci_read_config_byte(ali_isa_bridge, 0x5E, &tmp);
if ((tmp & 0x1E) == 0x12) if ((tmp & 0x1E) == 0x12)
ppi[0] = &info_20_udma; ppi[0] = &info_20_udma;
} }
...@@ -617,11 +617,11 @@ static struct pci_driver ali_pci_driver = { ...@@ -617,11 +617,11 @@ static struct pci_driver ali_pci_driver = {
static int __init ali_init(void) static int __init ali_init(void)
{ {
int ret; int ret;
isa_bridge = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL); ali_isa_bridge = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL);
ret = pci_register_driver(&ali_pci_driver); ret = pci_register_driver(&ali_pci_driver);
if (ret < 0) if (ret < 0)
pci_dev_put(isa_bridge); pci_dev_put(ali_isa_bridge);
return ret; return ret;
} }
...@@ -629,7 +629,7 @@ static int __init ali_init(void) ...@@ -629,7 +629,7 @@ static int __init ali_init(void)
static void __exit ali_exit(void) static void __exit ali_exit(void)
{ {
pci_unregister_driver(&ali_pci_driver); pci_unregister_driver(&ali_pci_driver);
pci_dev_put(isa_bridge); pci_dev_put(ali_isa_bridge);
} }
......
...@@ -32,21 +32,6 @@ enum { ...@@ -32,21 +32,6 @@ enum {
ATIIXP_IDE_UDMA_MODE = 0x56 ATIIXP_IDE_UDMA_MODE = 0x56
}; };
static int atiixp_pre_reset(struct ata_link *link, unsigned long deadline)
{
struct ata_port *ap = link->ap;
static const struct pci_bits atiixp_enable_bits[] = {
{ 0x48, 1, 0x01, 0x00 },
{ 0x48, 1, 0x08, 0x00 }
};
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no]))
return -ENOENT;
return ata_sff_prereset(link, deadline);
}
static int atiixp_cable_detect(struct ata_port *ap) static int atiixp_cable_detect(struct ata_port *ap)
{ {
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
...@@ -229,10 +214,9 @@ static struct ata_port_operations atiixp_port_ops = { ...@@ -229,10 +214,9 @@ static struct ata_port_operations atiixp_port_ops = {
.cable_detect = atiixp_cable_detect, .cable_detect = atiixp_cable_detect,
.set_piomode = atiixp_set_piomode, .set_piomode = atiixp_set_piomode,
.set_dmamode = atiixp_set_dmamode, .set_dmamode = atiixp_set_dmamode,
.prereset = atiixp_pre_reset,
}; };
static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) static int atiixp_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
{ {
static const struct ata_port_info info = { static const struct ata_port_info info = {
.flags = ATA_FLAG_SLAVE_POSS, .flags = ATA_FLAG_SLAVE_POSS,
...@@ -241,8 +225,18 @@ static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) ...@@ -241,8 +225,18 @@ static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
.udma_mask = 0x3F, .udma_mask = 0x3F,
.port_ops = &atiixp_port_ops .port_ops = &atiixp_port_ops
}; };
const struct ata_port_info *ppi[] = { &info, NULL }; static const struct pci_bits atiixp_enable_bits[] = {
return ata_pci_sff_init_one(dev, ppi, &atiixp_sht, NULL); { 0x48, 1, 0x01, 0x00 },
{ 0x48, 1, 0x08, 0x00 }
};
const struct ata_port_info *ppi[] = { &info, &info };
int i;
for (i = 0; i < 2; i++)
if (!pci_test_config_bits(pdev, &atiixp_enable_bits[i]))
ppi[i] = &ata_dummy_port_info;
return ata_pci_sff_init_one(pdev, ppi, &atiixp_sht, NULL);
} }
static const struct pci_device_id atiixp[] = { static const struct pci_device_id atiixp[] = {
......
This diff is collapsed.
...@@ -1288,7 +1288,7 @@ static const struct ata_port_info sata_fsl_port_info[] = { ...@@ -1288,7 +1288,7 @@ static const struct ata_port_info sata_fsl_port_info[] = {
static int sata_fsl_probe(struct of_device *ofdev, static int sata_fsl_probe(struct of_device *ofdev,
const struct of_device_id *match) const struct of_device_id *match)
{ {
int retval = 0; int retval = -ENXIO;
void __iomem *hcr_base = NULL; void __iomem *hcr_base = NULL;
void __iomem *ssr_base = NULL; void __iomem *ssr_base = NULL;
void __iomem *csr_base = NULL; void __iomem *csr_base = NULL;
......
...@@ -92,6 +92,8 @@ static const struct pci_device_id svia_pci_tbl[] = { ...@@ -92,6 +92,8 @@ static const struct pci_device_id svia_pci_tbl[] = {
{ PCI_VDEVICE(VIA, 0x5372), vt6420 }, { PCI_VDEVICE(VIA, 0x5372), vt6420 },
{ PCI_VDEVICE(VIA, 0x7372), vt6420 }, { PCI_VDEVICE(VIA, 0x7372), vt6420 },
{ PCI_VDEVICE(VIA, 0x5287), vt8251 }, /* 2 sata chnls (Master/Slave) */ { PCI_VDEVICE(VIA, 0x5287), vt8251 }, /* 2 sata chnls (Master/Slave) */
{ PCI_VDEVICE(VIA, 0x9000), vt8251 },
{ PCI_VDEVICE(VIA, 0x9040), vt8251 },
{ } /* terminate list */ { } /* terminate list */
}; };
......
...@@ -4912,7 +4912,7 @@ static int ipr_ioctl(struct scsi_device *sdev, int cmd, void __user *arg) ...@@ -4912,7 +4912,7 @@ static int ipr_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
if (res && ipr_is_gata(res)) { if (res && ipr_is_gata(res)) {
if (cmd == HDIO_GET_IDENTITY) if (cmd == HDIO_GET_IDENTITY)
return -ENOTTY; return -ENOTTY;
return ata_scsi_ioctl(sdev, cmd, arg); return ata_sas_scsi_ioctl(res->sata_port->ap, sdev, cmd, arg);
} }
return -EINVAL; return -EINVAL;
......
...@@ -717,7 +717,7 @@ int sas_ioctl(struct scsi_device *sdev, int cmd, void __user *arg) ...@@ -717,7 +717,7 @@ int sas_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
struct domain_device *dev = sdev_to_domain_dev(sdev); struct domain_device *dev = sdev_to_domain_dev(sdev);
if (dev_is_sata(dev)) if (dev_is_sata(dev))
return ata_scsi_ioctl(sdev, cmd, arg); return ata_sas_scsi_ioctl(dev->sata_dev.ap, sdev, cmd, arg);
return -EINVAL; return -EINVAL;
} }
......
...@@ -401,12 +401,14 @@ enum { ...@@ -401,12 +401,14 @@ enum {
ATA_TIMING_CYC8B, ATA_TIMING_CYC8B,
ATA_TIMING_ACTIVE = (1 << 4), ATA_TIMING_ACTIVE = (1 << 4),
ATA_TIMING_RECOVER = (1 << 5), ATA_TIMING_RECOVER = (1 << 5),
ATA_TIMING_CYCLE = (1 << 6), ATA_TIMING_DMACK_HOLD = (1 << 6),
ATA_TIMING_UDMA = (1 << 7), ATA_TIMING_CYCLE = (1 << 7),
ATA_TIMING_UDMA = (1 << 8),
ATA_TIMING_ALL = ATA_TIMING_SETUP | ATA_TIMING_ACT8B | ATA_TIMING_ALL = ATA_TIMING_SETUP | ATA_TIMING_ACT8B |
ATA_TIMING_REC8B | ATA_TIMING_CYC8B | ATA_TIMING_REC8B | ATA_TIMING_CYC8B |
ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER | ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER |
ATA_TIMING_CYCLE | ATA_TIMING_UDMA, ATA_TIMING_DMACK_HOLD | ATA_TIMING_CYCLE |
ATA_TIMING_UDMA,
}; };
enum ata_xfer_mask { enum ata_xfer_mask {
...@@ -866,6 +868,7 @@ struct ata_timing { ...@@ -866,6 +868,7 @@ struct ata_timing {
unsigned short cyc8b; /* t0 for 8-bit I/O */ unsigned short cyc8b; /* t0 for 8-bit I/O */
unsigned short active; /* t2 or tD */ unsigned short active; /* t2 or tD */
unsigned short recover; /* t2i or tK */ unsigned short recover; /* t2i or tK */
unsigned short dmack_hold; /* tj */
unsigned short cycle; /* t0 */ unsigned short cycle; /* t0 */
unsigned short udma; /* t2CYCTYP/2 */ unsigned short udma; /* t2CYCTYP/2 */
}; };
...@@ -927,6 +930,8 @@ extern void ata_host_init(struct ata_host *, struct device *, ...@@ -927,6 +930,8 @@ extern void ata_host_init(struct ata_host *, struct device *,
extern int ata_scsi_detect(struct scsi_host_template *sht); extern int ata_scsi_detect(struct scsi_host_template *sht);
extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)); extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
int cmd, void __user *arg);
extern void ata_sas_port_destroy(struct ata_port *); extern void ata_sas_port_destroy(struct ata_port *);
extern struct ata_port *ata_sas_port_alloc(struct ata_host *, extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
struct ata_port_info *, struct Scsi_Host *); struct ata_port_info *, struct Scsi_Host *);
......
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