Re: [PATCH 2.6.20-rc3] sata_promise: ATAPI support
On Sun, 07 Jan 2007 20:50:48 -0500, Jeff Garzik wrote: > > With this patch ATAPI will work on SATA ports on second-generation > > chips, and on the first-generation PATA-only 20619. ATAPI on the > > 2057x' PATA port will work automatically when #promise-sata-pata > > is updated. ATAPI on the 2037x' PATA port is enabled by a followup > > patch for the #promise-sata-pata branch. > > > > Signed-off-by: Mikael Pettersson <[EMAIL PROTECTED]> > > No objections, minor revision requests follow. > > * general comment: please combine the 'make first gen SATAPI work' > patch with this one. Will do. > > +static unsigned int pdc_wait_for_drq(struct ata_port *ap) > > +{ > > + void __iomem *port_mmio = (void __iomem *) ap->ioaddr.cmd_addr; > > + unsigned int i; > > + unsigned int status; > > + > > + /* Following pdc-ultra's WaitForDrq() we loop here until BSY > > +* is clear and DRQ is set in altstatus. We could possibly call > > +* ata_busy_wait() and loop until DRQ is set, but since we don't > > +* know how much time a call to ata_busy_wait() took, we don't > > +* know when to time out the outer loop. > > +*/ > > + for(i = 0; i < 1000; ++i) { > > + status = readb(port_mmio + 0x38); /* altstatus */ > > + if (status == 0xFF) > > + break; > > + if (status & ATA_BUSY) > > + ; > > + else if (status & (ATA_DRQ | ATA_ERR)) > > + break; > > + mdelay(1); > > + } > > This really hurts to do this with spinlocks held. Long term, ponder > ways to move this to a kernel thread that can sleep [if it takes too long?] On the TODO list for a later update. > > +static void pdc_issue_atapi_pkt_cmd(struct ata_queued_cmd *qc) > > +{ > > + struct ata_port *ap = qc->ap; > > + void __iomem *port_mmio = (void __iomem *) ap->ioaddr.cmd_addr; > > + void __iomem *host_mmio = ap->host->mmio_base; > > + unsigned int nbytes; > > + unsigned int tmp; > > + > > + /* disable INTA here, it will be re-enable when CAM use SEQ 0 for > > packets */ > > cut-n-pasted comment? This is not CAM :) Indeed :-) Will fix. > > + writeb(0x00, port_mmio + PDC_CTLSTAT); /* that the drive INT pass to > > SEQ 0*/ > > + writeb(0x20, host_mmio + 0); /* but mask SEQ 0 INT */ > > please create named constants for these magic numbers Will do (for this and the other places you pointed out). /Mikael - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6.20-rc3] sata_promise: ATAPI support
On Sun, 07 Jan 2007 20:50:48 -0500, Jeff Garzik wrote: With this patch ATAPI will work on SATA ports on second-generation chips, and on the first-generation PATA-only 20619. ATAPI on the 2057x' PATA port will work automatically when #promise-sata-pata is updated. ATAPI on the 2037x' PATA port is enabled by a followup patch for the #promise-sata-pata branch. Signed-off-by: Mikael Pettersson [EMAIL PROTECTED] No objections, minor revision requests follow. * general comment: please combine the 'make first gen SATAPI work' patch with this one. Will do. +static unsigned int pdc_wait_for_drq(struct ata_port *ap) +{ + void __iomem *port_mmio = (void __iomem *) ap-ioaddr.cmd_addr; + unsigned int i; + unsigned int status; + + /* Following pdc-ultra's WaitForDrq() we loop here until BSY +* is clear and DRQ is set in altstatus. We could possibly call +* ata_busy_wait() and loop until DRQ is set, but since we don't +* know how much time a call to ata_busy_wait() took, we don't +* know when to time out the outer loop. +*/ + for(i = 0; i 1000; ++i) { + status = readb(port_mmio + 0x38); /* altstatus */ + if (status == 0xFF) + break; + if (status ATA_BUSY) + ; + else if (status (ATA_DRQ | ATA_ERR)) + break; + mdelay(1); + } This really hurts to do this with spinlocks held. Long term, ponder ways to move this to a kernel thread that can sleep [if it takes too long?] On the TODO list for a later update. +static void pdc_issue_atapi_pkt_cmd(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc-ap; + void __iomem *port_mmio = (void __iomem *) ap-ioaddr.cmd_addr; + void __iomem *host_mmio = ap-host-mmio_base; + unsigned int nbytes; + unsigned int tmp; + + /* disable INTA here, it will be re-enable when CAM use SEQ 0 for packets */ cut-n-pasted comment? This is not CAM :) Indeed :-) Will fix. + writeb(0x00, port_mmio + PDC_CTLSTAT); /* that the drive INT pass to SEQ 0*/ + writeb(0x20, host_mmio + 0); /* but mask SEQ 0 INT */ please create named constants for these magic numbers Will do (for this and the other places you pointed out). /Mikael - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6.20-rc3] sata_promise: ATAPI support
Mikael Pettersson wrote: This patch adds ATAPI support to the sata_promise driver. This has been tested on both first- and second-generation chips (20378 and 20575), and with both SATAPI and PATAPI devices. CD-writing works, and bulk data transfers use DMA. SATAPI works on second-generation chips, but not on first-generation chips due to HW limitations. PATAPI works on both first- and second-generation chips, but requires the PATA support patch as well (which needs an update due to a conflict in the board_2037x definition). The functional changes to the driver are: - remove ATA_FLAG_NO_ATAPI from PDC_COMMON_FLAGS, and add it back to the boards that cannot support SATAPI (20319, 2037x) - add ->check_atapi() operation to enable DMA for bulk data transfers but force PIO for other ATAPI commands; this filter is taken from Promise's driver and pata_pdc207x.c - add handling of ATAPI protocols to pdc_qc_prep(), pdc_host_intr(), and pdc_qc_issue_prot(): ATAPI_DMA is handled by the driver while non-DMA protocols are handed over to libata generic code - add pdc_issue_atapi_pkt_cmd() to handle the initial steps in issuing ATAPI DMA commands before sending the actual CDB; this procedure was ported from Promise's driver With this patch ATAPI will work on SATA ports on second-generation chips, and on the first-generation PATA-only 20619. ATAPI on the 2057x' PATA port will work automatically when #promise-sata-pata is updated. ATAPI on the 2037x' PATA port is enabled by a followup patch for the #promise-sata-pata branch. Signed-off-by: Mikael Pettersson <[EMAIL PROTECTED]> No objections, minor revision requests follow. * general comment: please combine the 'make first gen SATAPI work' patch with this one. --- linux-2.6.20-rc3/drivers/ata/sata_promise.c.~1~ 2007-01-01 13:32:35.0 +0100 +++ linux-2.6.20-rc3/drivers/ata/sata_promise.c 2007-01-06 15:36:43.0 +0100 @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -77,7 +78,7 @@ enum { PDC_RESET = (1 << 11), /* HDMA reset */ PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | - ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | + ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING, /* hp->flags bits */ @@ -105,6 +106,7 @@ static void pdc_pata_phy_reset(struct at static void pdc_qc_prep(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf); +static int pdc_check_atapi_dma(struct ata_queued_cmd *qc); static void pdc_irq_clear(struct ata_port *ap); static unsigned int pdc_qc_issue_prot(struct ata_queued_cmd *qc); static void pdc_host_stop(struct ata_host *host); @@ -139,6 +141,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .qc_prep = pdc_qc_prep, .qc_issue = pdc_qc_issue_prot, @@ -164,6 +167,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .phy_reset = pdc_pata_phy_reset, @@ -183,7 +187,7 @@ static const struct ata_port_info pdc_po /* board_2037x */ { .sht= _ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -193,7 +197,7 @@ static const struct ata_port_info pdc_po /* board_20319 */ { .sht= _ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -391,6 +395,30 @@ static void pdc_sata_scr_write (struct a writel(val, (void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); } +static void pdc_atapi_dma_pkt(struct ata_taskfile *tf, + dma_addr_t sg_table, + unsigned int cdb_len, u8 *cdb, + u8 *buf) +{ + u32 *buf32 = (u32 *) buf; + + /* set control bits (byte 0), zero delay seq id (byte 3), +* and seq id (byte 2) +*/ + if (!(tf->flags &
Re: [PATCH 2.6.20-rc3] sata_promise: ATAPI support
Mikael Pettersson wrote: This patch adds ATAPI support to the sata_promise driver. This has been tested on both first- and second-generation chips (20378 and 20575), and with both SATAPI and PATAPI devices. CD-writing works, and bulk data transfers use DMA. SATAPI works on second-generation chips, but not on first-generation chips due to HW limitations. PATAPI works on both first- and second-generation chips, but requires the PATA support patch as well (which needs an update due to a conflict in the board_2037x definition). The functional changes to the driver are: - remove ATA_FLAG_NO_ATAPI from PDC_COMMON_FLAGS, and add it back to the boards that cannot support SATAPI (20319, 2037x) - add -check_atapi() operation to enable DMA for bulk data transfers but force PIO for other ATAPI commands; this filter is taken from Promise's driver and pata_pdc207x.c - add handling of ATAPI protocols to pdc_qc_prep(), pdc_host_intr(), and pdc_qc_issue_prot(): ATAPI_DMA is handled by the driver while non-DMA protocols are handed over to libata generic code - add pdc_issue_atapi_pkt_cmd() to handle the initial steps in issuing ATAPI DMA commands before sending the actual CDB; this procedure was ported from Promise's driver With this patch ATAPI will work on SATA ports on second-generation chips, and on the first-generation PATA-only 20619. ATAPI on the 2057x' PATA port will work automatically when #promise-sata-pata is updated. ATAPI on the 2037x' PATA port is enabled by a followup patch for the #promise-sata-pata branch. Signed-off-by: Mikael Pettersson [EMAIL PROTECTED] No objections, minor revision requests follow. * general comment: please combine the 'make first gen SATAPI work' patch with this one. --- linux-2.6.20-rc3/drivers/ata/sata_promise.c.~1~ 2007-01-01 13:32:35.0 +0100 +++ linux-2.6.20-rc3/drivers/ata/sata_promise.c 2007-01-06 15:36:43.0 +0100 @@ -39,6 +39,7 @@ #include linux/interrupt.h #include linux/sched.h #include linux/device.h +#include scsi/scsi.h #include scsi/scsi_host.h #include scsi/scsi_cmnd.h #include linux/libata.h @@ -77,7 +78,7 @@ enum { PDC_RESET = (1 11), /* HDMA reset */ PDC_COMMON_FLAGS = ATA_FLAG_NO_LEGACY | - ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | + ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING, /* hp-flags bits */ @@ -105,6 +106,7 @@ static void pdc_pata_phy_reset(struct at static void pdc_qc_prep(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf); +static int pdc_check_atapi_dma(struct ata_queued_cmd *qc); static void pdc_irq_clear(struct ata_port *ap); static unsigned int pdc_qc_issue_prot(struct ata_queued_cmd *qc); static void pdc_host_stop(struct ata_host *host); @@ -139,6 +141,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .qc_prep = pdc_qc_prep, .qc_issue = pdc_qc_issue_prot, @@ -164,6 +167,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .phy_reset = pdc_pata_phy_reset, @@ -183,7 +187,7 @@ static const struct ata_port_info pdc_po /* board_2037x */ { .sht= pdc_ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -193,7 +197,7 @@ static const struct ata_port_info pdc_po /* board_20319 */ { .sht= pdc_ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -391,6 +395,30 @@ static void pdc_sata_scr_write (struct a writel(val, (void __iomem *) ap-ioaddr.scr_addr + (sc_reg * 4)); } +static void pdc_atapi_dma_pkt(struct ata_taskfile *tf, + dma_addr_t sg_table, + unsigned int cdb_len, u8 *cdb, + u8 *buf) +{ + u32 *buf32 = (u32 *) buf; + + /* set control bits (byte 0), zero delay
[PATCH 2.6.20-rc3] sata_promise: ATAPI support
This patch adds ATAPI support to the sata_promise driver. This has been tested on both first- and second-generation chips (20378 and 20575), and with both SATAPI and PATAPI devices. CD-writing works, and bulk data transfers use DMA. SATAPI works on second-generation chips, but not on first-generation chips due to HW limitations. PATAPI works on both first- and second-generation chips, but requires the PATA support patch as well (which needs an update due to a conflict in the board_2037x definition). The functional changes to the driver are: - remove ATA_FLAG_NO_ATAPI from PDC_COMMON_FLAGS, and add it back to the boards that cannot support SATAPI (20319, 2037x) - add ->check_atapi() operation to enable DMA for bulk data transfers but force PIO for other ATAPI commands; this filter is taken from Promise's driver and pata_pdc207x.c - add handling of ATAPI protocols to pdc_qc_prep(), pdc_host_intr(), and pdc_qc_issue_prot(): ATAPI_DMA is handled by the driver while non-DMA protocols are handed over to libata generic code - add pdc_issue_atapi_pkt_cmd() to handle the initial steps in issuing ATAPI DMA commands before sending the actual CDB; this procedure was ported from Promise's driver With this patch ATAPI will work on SATA ports on second-generation chips, and on the first-generation PATA-only 20619. ATAPI on the 2057x' PATA port will work automatically when #promise-sata-pata is updated. ATAPI on the 2037x' PATA port is enabled by a followup patch for the #promise-sata-pata branch. Signed-off-by: Mikael Pettersson <[EMAIL PROTECTED]> --- linux-2.6.20-rc3/drivers/ata/sata_promise.c.~1~ 2007-01-01 13:32:35.0 +0100 +++ linux-2.6.20-rc3/drivers/ata/sata_promise.c 2007-01-06 15:36:43.0 +0100 @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -77,7 +78,7 @@ enum { PDC_RESET = (1 << 11), /* HDMA reset */ PDC_COMMON_FLAGS= ATA_FLAG_NO_LEGACY | - ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | + ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING, /* hp->flags bits */ @@ -105,6 +106,7 @@ static void pdc_pata_phy_reset(struct at static void pdc_qc_prep(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf); +static int pdc_check_atapi_dma(struct ata_queued_cmd *qc); static void pdc_irq_clear(struct ata_port *ap); static unsigned int pdc_qc_issue_prot(struct ata_queued_cmd *qc); static void pdc_host_stop(struct ata_host *host); @@ -139,6 +141,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .qc_prep= pdc_qc_prep, .qc_issue = pdc_qc_issue_prot, @@ -164,6 +167,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .phy_reset = pdc_pata_phy_reset, @@ -183,7 +187,7 @@ static const struct ata_port_info pdc_po /* board_2037x */ { .sht= _ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -193,7 +197,7 @@ static const struct ata_port_info pdc_po /* board_20319 */ { .sht= _ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -391,6 +395,30 @@ static void pdc_sata_scr_write (struct a writel(val, (void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); } +static void pdc_atapi_dma_pkt(struct ata_taskfile *tf, + dma_addr_t sg_table, + unsigned int cdb_len, u8 *cdb, + u8 *buf) +{ + u32 *buf32 = (u32 *) buf; + + /* set control bits (byte 0), zero delay seq id (byte 3), +* and seq id (byte 2) +*/ + if (!(tf->flags & ATA_TFLAG_WRITE)) + buf32[0] = cpu_to_le32(PDC_PKT_READ); + else +
[PATCH 2.6.20-rc3] sata_promise: ATAPI support
This patch adds ATAPI support to the sata_promise driver. This has been tested on both first- and second-generation chips (20378 and 20575), and with both SATAPI and PATAPI devices. CD-writing works, and bulk data transfers use DMA. SATAPI works on second-generation chips, but not on first-generation chips due to HW limitations. PATAPI works on both first- and second-generation chips, but requires the PATA support patch as well (which needs an update due to a conflict in the board_2037x definition). The functional changes to the driver are: - remove ATA_FLAG_NO_ATAPI from PDC_COMMON_FLAGS, and add it back to the boards that cannot support SATAPI (20319, 2037x) - add -check_atapi() operation to enable DMA for bulk data transfers but force PIO for other ATAPI commands; this filter is taken from Promise's driver and pata_pdc207x.c - add handling of ATAPI protocols to pdc_qc_prep(), pdc_host_intr(), and pdc_qc_issue_prot(): ATAPI_DMA is handled by the driver while non-DMA protocols are handed over to libata generic code - add pdc_issue_atapi_pkt_cmd() to handle the initial steps in issuing ATAPI DMA commands before sending the actual CDB; this procedure was ported from Promise's driver With this patch ATAPI will work on SATA ports on second-generation chips, and on the first-generation PATA-only 20619. ATAPI on the 2057x' PATA port will work automatically when #promise-sata-pata is updated. ATAPI on the 2037x' PATA port is enabled by a followup patch for the #promise-sata-pata branch. Signed-off-by: Mikael Pettersson [EMAIL PROTECTED] --- linux-2.6.20-rc3/drivers/ata/sata_promise.c.~1~ 2007-01-01 13:32:35.0 +0100 +++ linux-2.6.20-rc3/drivers/ata/sata_promise.c 2007-01-06 15:36:43.0 +0100 @@ -39,6 +39,7 @@ #include linux/interrupt.h #include linux/sched.h #include linux/device.h +#include scsi/scsi.h #include scsi/scsi_host.h #include scsi/scsi_cmnd.h #include linux/libata.h @@ -77,7 +78,7 @@ enum { PDC_RESET = (1 11), /* HDMA reset */ PDC_COMMON_FLAGS= ATA_FLAG_NO_LEGACY | - ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | + ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING, /* hp-flags bits */ @@ -105,6 +106,7 @@ static void pdc_pata_phy_reset(struct at static void pdc_qc_prep(struct ata_queued_cmd *qc); static void pdc_tf_load_mmio(struct ata_port *ap, const struct ata_taskfile *tf); static void pdc_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf); +static int pdc_check_atapi_dma(struct ata_queued_cmd *qc); static void pdc_irq_clear(struct ata_port *ap); static unsigned int pdc_qc_issue_prot(struct ata_queued_cmd *qc); static void pdc_host_stop(struct ata_host *host); @@ -139,6 +141,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .qc_prep= pdc_qc_prep, .qc_issue = pdc_qc_issue_prot, @@ -164,6 +167,7 @@ static const struct ata_port_operations .check_status = ata_check_status, .exec_command = pdc_exec_command_mmio, .dev_select = ata_std_dev_select, + .check_atapi_dma= pdc_check_atapi_dma, .phy_reset = pdc_pata_phy_reset, @@ -183,7 +187,7 @@ static const struct ata_port_info pdc_po /* board_2037x */ { .sht= pdc_ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -193,7 +197,7 @@ static const struct ata_port_info pdc_po /* board_20319 */ { .sht= pdc_ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -391,6 +395,30 @@ static void pdc_sata_scr_write (struct a writel(val, (void __iomem *) ap-ioaddr.scr_addr + (sc_reg * 4)); } +static void pdc_atapi_dma_pkt(struct ata_taskfile *tf, + dma_addr_t sg_table, + unsigned int cdb_len, u8 *cdb, + u8 *buf) +{ + u32 *buf32 = (u32 *) buf; + + /* set control bits (byte 0), zero delay seq id (byte 3), +* and seq id (byte 2) +*/ + if (!(tf-flags