libata queue updated
BK users:
bk pull bk://gkernel.bkbits.net/libata-2.6
Patch:
http://www.kernel.org/pub/linux/kernel/people/jgarzik/patchkits/2.6/2.6.8.1-libata2.patch.bz2
This will update the following files:
drivers/scsi/ata_piix.c | 148 ++++++-- drivers/scsi/libata-core.c | 759 +++++++++++++++++++++++++++----------------- drivers/scsi/libata-scsi.c | 426 +++++++++++++++++++++--- drivers/scsi/libata.h | 3 drivers/scsi/sata_nv.c | 3 drivers/scsi/sata_promise.c | 78 +--- drivers/scsi/sata_sil.c | 10 drivers/scsi/sata_sis.c | 6 drivers/scsi/sata_svw.c | 3 drivers/scsi/sata_sx4.c | 166 +++++---- drivers/scsi/sata_via.c | 2 drivers/scsi/sata_vsc.c | 2 include/linux/ata.h | 31 + include/linux/libata.h | 43 +- include/scsi/scsi.h | 1 15 files changed, 1169 insertions(+), 512 deletions(-)
through these ChangeSets:
Alan Cox:
o [libata] improve translation of ATA errors to SCSI sense codes
Andrew Morton:
o libata build fix
Douglas Gilbert:
o [libata] fix INQUIRY handling
Jeff Garzik:
o [ata] remove 'packed' attributed from struct ata_prd
o [libata] fix error recovery reference count
o [libata] add ioctl infrastructure
o [libata] ATAPI PIO data xfer
o [libata] fix PIO data xfer on big endian
o [libata] support commands SYNCHRONIZE CACHE, VERIFY, VERIFY(16)
o [libata] (cosmetic) minimize diff with 2.4.x libata
o [libata] ATAPI work - cdb len, new taskfile protocol, cleanups
o [libata] flags cleanup
o [libata ata_piix] make sure AHCI is disabled, if h/w is used by this driver
o [PCI, libata] Fix "combined mode" PCI quirk for ICH6
o [libata] ATAPI work - PIO xfer, completion function
o [libata] update IDENTIFY DEVICE path to use ata_queued_cmd
o [libata] pio/dma flag bug fix, and cleanup
o [libata sata_sx4] deliver non-data taskfiles using Promise packet format
o [libata sata_promise] convert to using packets for non-data taskfiles
o [libata] transfer mode bug fixes and type cleanup
o [libata] convert set-xfer-mode operation to use ata_queued_cmd
o [libata] fix completion bug, better debug output
o [libata] transfer mode cleanup
drivers/scsi/ata_piix.c +111 -37
@@ -39,6 +39,7 @@ICH5_PMR =0x90 ,/* port mapping register */ ICH5_PCS =0x92 ,/* port control and status */ +PIIX_FLAG_AHCI = (1 <<28 ),/* AHCI possible */ PIIX_FLAG_CHECKINTR = (1 <<29 ),/* make sure PCI INTx enabled */ PIIX_FLAG_COMBINED = (1 << 30), /* combined mode possible */
@@ -58,6 +59,7 @@ ich5_sata =1 , piix4_pata =2 , ich6_sata =3 , + ich6_sata_rm = 4, }; static int piix_init_one (struct pci_dev *pdev,
@@ -65,10 +67,8 @@static void piix_pata_phy_reset (struct ata_port *ap);static void piix_sata_phy_reset (struct ata_port *ap); -static void piix_set_piomode (struct ata_port *ap,struct ata_device *adev, -unsigned int pio); -static void piix_set_udmamode (struct ata_port *ap,struct ata_device *adev, -unsigned int udma); +static void piix_set_piomode (struct ata_port *ap,struct ata_device *adev); +static void piix_set_dmamode (struct ata_port *ap,struct ata_device *adev);static unsigned int in_module_init =1 ;
@@ -87,13 +87,9 @@ { 0x8086, 0x24df, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, { 0x8086, 0x25a3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, { 0x8086, 0x25b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich5_sata }, - -/* ICH6 operates in two modes, "looks-like-ICH5" mode, -* and enhanced mode, with queueing and other fancy stuff. -* This is distinguished by PCI class code. -*/ { 0x8086, 0x2651, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata }, - { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata }, + { 0x8086, 0x2652, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_rm }, + { 0x8086, 0x2653, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich6_sata_rm }, { } /* terminate list */ };
@@ -108,6 +104,7 @@static Scsi_Host_Template piix_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -126,7 +123,7 @@static struct ata_port_operations piix_pata_ops = { .port_disable = ata_port_disable, .set_piomode = piix_set_piomode, - .set_udmamode = piix_set_udmamode, + .set_dmamode = piix_set_dmamode, .tf_load = ata_tf_load_pio, .tf_read = ata_tf_read_pio,
@@ -151,8 +148,6 @@static struct ata_port_operations piix_sata_ops = { .port_disable = ata_port_disable, - .set_piomode = piix_set_piomode, - .set_udmamode = piix_set_udmamode, .tf_load = ata_tf_load_pio, .tf_read = ata_tf_read_pio,
@@ -181,7 +176,12 @@ .sht = &piix_sht, .host_flags =ATA_FLAG_SLAVE_POSS |ATA_FLAG_SRST | PIIX_FLAG_CHECKINTR, - .pio_mask = 0x03, /* pio3-4 */ + .pio_mask =0x1f ,/* pio0-4 */ +#if 0 + .mwdma_mask =0x06 ,/* mwdma1-2 */ +#else + .mwdma_mask = 0x00, /* mwdma broken */ +#endif .udma_mask = ATA_UDMA_MASK_40C, /* FIXME: cbl det */ .port_ops = &piix_pata_ops, },
@@ -191,8 +191,9 @@ .sht = &piix_sht, .host_flags =ATA_FLAG_SATA |ATA_FLAG_SRST | PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR, - .pio_mask = 0x03, /* pio3-4 */ - .udma_mask = 0x7f, /* udma0-6 ; FIXME */ + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ + .udma_mask = 0x7f, /* udma0-6 */ .port_ops = &piix_sata_ops, },
@@ -200,7 +201,12 @@ { .sht = &piix_sht, .host_flags = ATA_FLAG_SLAVE_POSS | ATA_FLAG_SRST, - .pio_mask = 0x03, /* pio3-4 */ + .pio_mask =0x1f ,/* pio0-4 */ +#if 0 + .mwdma_mask =0x06 ,/* mwdma1-2 */ +#else + .mwdma_mask = 0x00, /* mwdma broken */ +#endif .udma_mask = ATA_UDMA_MASK_40C, /* FIXME: cbl det */ .port_ops = &piix_pata_ops, },
@@ -211,8 +217,21 @@ .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST | PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR | ATA_FLAG_SLAVE_POSS, - .pio_mask = 0x03, /* pio3-4 */ - .udma_mask = 0x7f, /* udma0-6 ; FIXME */ + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ + .udma_mask = 0x7f, /* udma0-6 */ + .port_ops = &piix_sata_ops, + }, + +/* ich6_sata_rm */ + { + .sht = &piix_sht, + .host_flags = ATA_FLAG_SATA | ATA_FLAG_SRST | + PIIX_FLAG_COMBINED | PIIX_FLAG_CHECKINTR | + ATA_FLAG_SLAVE_POSS | PIIX_FLAG_AHCI, + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ + .udma_mask = 0x7f, /* udma0-6 */ .port_ops = &piix_sata_ops, }, };
@@ -368,11 +387,11 @@* None (inherited from caller). */ -static void piix_set_piomode (struct ata_port *ap,struct ata_device *adev, -unsigned int pio) +static void piix_set_piomode (struct ata_port *ap,struct ata_device *adev) { +unsigned int pio = adev->pio_mode;struct pci_dev *dev = ap->host_set->pdev; -unsigned int is_slave = (adev->flags &ATA_DFLAG_MASTER ) ?0 :1 ; +unsigned int is_slave = (adev->devno !=0 );unsigned int master_port= ap->port_no ?0x42 :0x40 ;unsigned int slave_port =0x44 ;u16 master_data;
@@ -409,7 +428,7 @@ }/** -* piix_set_udmamode - Initialize host controller PATA PIO timings +* piix_set_dmamode - Initialize host controller PATA PIO timings * @ap: Port whose timings we are configuring * @adev: um * @udma: udma mode, 0 - 6
@@ -420,9 +439,9 @@* None (inherited from caller). */ -static void piix_set_udmamode (struct ata_port *ap,struct ata_device *adev, -unsigned int udma) +static void piix_set_dmamode (struct ata_port *ap,struct ata_device *adev) { +unsigned int udma = adev->dma_mode;/* FIXME: MWDMA too */ struct pci_dev *dev = ap->host_set->pdev;u8 maslave = ap->port_no ?0x42 :0x40 ;u8 speed = udma;
@@ -452,25 +471,38 @@case XFER_UDMA_3 :case XFER_UDMA_1 : u_speed =1 << (drive_dn *4 );break ;case XFER_UDMA_0 : u_speed =0 << (drive_dn *4 );break ; +case XFER_MW_DMA_2 : +case XFER_MW_DMA_1 :break ;default :BUG ();return ; } -if (!(reg48 & u_flag)) -pci_write_config_byte (dev,0x48 , reg48 | u_flag); -if (speed ==XFER_UDMA_5 ) { -pci_write_config_byte (dev,0x55 , (u8 ) reg55|w_flag); +if (speed >=XFER_UDMA_0 ) { +if (!(reg48 & u_flag)) +pci_write_config_byte (dev,0x48 , reg48 | u_flag); +if (speed ==XFER_UDMA_5 ) { +pci_write_config_byte (dev,0x55 , (u8 ) reg55|w_flag); + }else { +pci_write_config_byte (dev,0x55 , (u8 ) reg55 & ~w_flag); + } +if ((reg4a & a_speed) != u_speed) +pci_write_config_word (dev,0x4a , (reg4a & ~a_speed) | u_speed); +if (speed >XFER_UDMA_2 ) { +if (!(reg54 & v_flag)) +pci_write_config_byte (dev,0x54 , reg54 | v_flag); + }else +pci_write_config_byte (dev,0x54 , reg54 & ~v_flag); }else { -pci_write_config_byte (dev,0x55 , (u8 ) reg55 & ~w_flag); +if (reg48 & u_flag) +pci_write_config_byte (dev,0x48 , reg48 & ~u_flag); +if (reg4a & a_speed) +pci_write_config_word (dev,0x4a , reg4a & ~a_speed); +if (reg54 & v_flag) +pci_write_config_byte (dev,0x54 , reg54 & ~v_flag); +if (reg55 & w_flag) +pci_write_config_byte (dev,0x55 , (u8 ) reg55 & ~w_flag); } -if ((reg4a & a_speed) != u_speed) -pci_write_config_word (dev,0x4a , (reg4a & ~a_speed) | u_speed); -if (speed >XFER_UDMA_2 ) { -if (!(reg54 & v_flag)) -pci_write_config_byte (dev,0x54 , reg54 | v_flag); - }else -pci_write_config_byte (dev,0x54 , reg54 & ~v_flag); }/* move to PCI layer, integrate w/ MSI stuff */
@@ -485,6 +517,42 @@ } } +#define AHCI_PCI_BAR 5 +#define AHCI_GLOBAL_CTL 0x04 +#define AHCI_ENABLE (1 << 31) +static int piix_disable_ahci (struct pci_dev *pdev) +{ +void *mmio; +unsigned long addr; +u32 tmp; +int rc =0 ; + +/* BUG: pci_enable_device has not yet been called. This +* works because this device is usually set up by BIOS. +*/ + + addr =pci_resource_start (pdev,AHCI_PCI_BAR ); +if (!addr || !pci_resource_len (pdev,AHCI_PCI_BAR )) +return 0 ; + + mmio =ioremap (addr,64 ); +if (!mmio) +return -ENOMEM ; + + tmp =readl (mmio +AHCI_GLOBAL_CTL ); +if (tmp &AHCI_ENABLE ) { + tmp &= ~AHCI_ENABLE ; +writel (tmp, mmio +AHCI_GLOBAL_CTL ); + + tmp =readl (mmio +AHCI_GLOBAL_CTL ); +if (tmp &AHCI_ENABLE ) + rc = -EIO ; + } + +iounmap (mmio); +return rc; +} +/** * piix_init_one - Register PIIX ATA PCI device with kernel services * @pdev: PCI device to register
@@ -516,6 +584,12 @@ port_info[0 ] = &piix_port_info[ent->driver_data]; port_info[1 ] =NULL ; + +if (port_info[0 ]->host_flags &PIIX_FLAG_AHCI ) { +int rc =piix_disable_ahci (pdev); +if (rc) +return rc; + }if (port_info[0 ]->host_flags &PIIX_FLAG_COMBINED ) {u8 tmp;
drivers/scsi/libata-core.c +466 -293
1,083 lines not on this page · raw message
drivers/scsi/libata-scsi.c +375 -51
582 lines not on this page · raw message
drivers/scsi/libata.h +2 -1
@@ -42,10 +42,11 @@extern void ata_dev_select (struct ata_port *ap,unsigned int device,unsigned int wait,unsigned int can_sleep);extern void ata_tf_to_host_nolock (struct ata_port *ap,struct ata_taskfile *tf); +extern void swap_buf_le16 (u16 *buf,unsigned int buf_words);/* libata-scsi.c */ -extern void ata_to_sense_error (struct ata_queued_cmd *qc); +extern void ata_to_sense_error (struct ata_queued_cmd *qc,u8 drv_stat);extern int ata_scsi_error (struct Scsi_Host *host);extern unsigned int ata_scsiop_inq_std (struct ata_scsi_args *args,u8 *rbuf,unsigned int buflen);
drivers/scsi/sata_nv.c +3 -0
@@ -44,6 +44,7 @@#define NV_PORTS 2#define NV_PIO_MASK 0x1f +#define NV_MWDMA_MASK 0x07#define NV_UDMA_MASK 0x7f#define NV_PORT0_BMDMA_REG_OFFSET 0x00#define NV_PORT1_BMDMA_REG_OFFSET 0x08
@@ -177,6 +178,7 @@static Scsi_Host_Template nv_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -343,6 +345,7 @@ probe_ent->irq = pdev->irq; probe_ent->irq_flags =SA_SHIRQ ; probe_ent->pio_mask =NV_PIO_MASK ; + probe_ent->mwdma_mask =NV_MWDMA_MASK ; probe_ent->udma_mask =NV_UDMA_MASK ; probe_ent->port[0 ].cmd_addr =pci_resource_start (pdev,0 );
drivers/scsi/sata_promise.c +34 -44
167 lines not on this page · raw message
drivers/scsi/sata_sil.c +7 -3
@@ -6,7 +6,7 @@* on emails. * * Copyright 2003 Red Hat, Inc. -* Copyright 2003 Benjamin Herrenschmidt <[email protected]> +* Copyright 2003 Benjamin Herrenschmidt * * The contents of this file are subject to the Open * Software License version 1.1 that can be found at
@@ -106,6 +106,7 @@static Scsi_Host_Template sil_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -149,7 +150,8 @@ .sht = &sil_sht, .host_flags =ATA_FLAG_SATA |ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | ATA_FLAG_MMIO, - .pio_mask = 0x03, /* pio3-4 */ + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x3f, /* udma0-5 */ .port_ops = &sil_ops, }, /* sil_3114 */
@@ -157,7 +159,8 @@ .sht = &sil_sht, .host_flags =ATA_FLAG_SATA |ATA_FLAG_NO_LEGACY | ATA_FLAG_SRST | ATA_FLAG_MMIO, - .pio_mask = 0x03, /* pio3-4 */ + .pio_mask = 0x1f, /* pio0-4 */ + .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x3f, /* udma0-5 */ .port_ops = &sil_ops, },
@@ -363,6 +366,7 @@ probe_ent->sht = sil_port_info[ent->driver_data].sht; probe_ent->n_ports = (ent->driver_data == sil_3114) ?4 :2 ; probe_ent->pio_mask = sil_port_info[ent->driver_data].pio_mask; + probe_ent->mwdma_mask = sil_port_info[ent->driver_data].mwdma_mask; probe_ent->udma_mask = sil_port_info[ent->driver_data].udma_mask; probe_ent->irq = pdev->irq; probe_ent->irq_flags =SA_SHIRQ ;
drivers/scsi/sata_sis.c +4 -2
@@ -76,6 +76,7 @@static Scsi_Host_Template sis_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -230,7 +231,8 @@ probe_ent->host_flags |=SIS_FLAG_CFGSCR ; } - probe_ent->pio_mask =0x03 ; + probe_ent->pio_mask =0x1f ; + probe_ent->mwdma_mask =0x7 ; probe_ent->udma_mask =0x7f ; probe_ent->port_ops = &sis_ops;
@@ -284,6 +286,6 @@pci_unregister_driver (&sis_pci_driver); } -module_init (sis_init);module_exit (sis_exit); +
drivers/scsi/sata_svw.c +3 -0
@@ -205,6 +205,7 @@static Scsi_Host_Template k2_sata_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -343,6 +344,7 @@* if we don't fill these */ probe_ent->pio_mask =0x1f ; + probe_ent->mwdma_mask =0x7 ; probe_ent->udma_mask =0x7f ;/* We have 4 ports per PCI function */
@@ -387,6 +389,7 @@ {return pci_module_init (&k2_sata_pci_driver); } + static void __exit k2_sata_exit(void) {
drivers/scsi/sata_sx4.c +101 -65
305 lines not on this page · raw message
drivers/scsi/sata_via.c +2 -0
@@ -81,6 +81,7 @@static Scsi_Host_Template svia_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -214,6 +215,7 @@ probe_ent->irq = pdev->irq; probe_ent->irq_flags =SA_SHIRQ ; probe_ent->pio_mask =0x1f ; + probe_ent->mwdma_mask =0x07 ; probe_ent->udma_mask =0x7f ; probe_ent->port[0 ].cmd_addr =pci_resource_start (pdev,0 );
drivers/scsi/sata_vsc.c +2 -0
@@ -190,6 +190,7 @@static Scsi_Host_Template vsc_sata_sht = { .module =THIS_MODULE , .name =DRV_NAME , + .ioctl = ata_scsi_ioctl, .queuecommand = ata_scsi_queuecmd, .eh_strategy_handler = ata_scsi_error, .can_queue =ATA_DEF_QUEUE ,
@@ -320,6 +321,7 @@* if we don't fill these */ probe_ent->pio_mask =0x1f ; + probe_ent->mwdma_mask =0x07 ; probe_ent->udma_mask =0x7f ;/* We have 4 ports per PCI function */
include/linux/ata.h +29 -2
@@ -42,6 +42,7 @@ATA_ID_SERNO_OFS =10 ,ATA_ID_MAJOR_VER =80 ,ATA_ID_PIO_MODES =64 , +ATA_ID_MWDMA_MODES =63 ,ATA_ID_UDMA_MODES =88 , ATA_ID_PIO4 = (1 << 1),
@@ -133,13 +134,20 @@XFER_UDMA_2 =0x42 ,XFER_UDMA_1 =0x41 ,XFER_UDMA_0 =0x40 , +XFER_MW_DMA_2 =0x22 , +XFER_MW_DMA_1 =0x21 , +XFER_MW_DMA_0 =0x20 ,XFER_PIO_4 =0x0C ,XFER_PIO_3 =0x0B , +XFER_PIO_2 =0x0A , +XFER_PIO_1 =0x09 , +XFER_PIO_0 =0x08 ,/* ATAPI stuff */ ATAPI_PKT_DMA = (1 <<0 ),ATAPI_DMADIR = (1 <<2 ),/* ATAPI data dir: 0=to device, 1=to host */ +ATAPI_CDB_LEN =16 ,/* cable types */ ATA_CBL_NONE = 0,
@@ -169,16 +177,22 @@ ATA_PROT_PIO, /* PIO single sector */ATA_PROT_PIO_MULT ,/* PIO multiple sector */ ATA_PROT_DMA ,/* DMA */ -ATA_PROT_ATAPI ,/* packet command */ +ATA_PROT_ATAPI ,/* packet command, PIO data xfer*/ +ATA_PROT_ATAPI_NODATA ,/* packet command, no data */ ATA_PROT_ATAPI_DMA, /* packet command with special DMA sauce */ }; +enum ata_ioctls { +ATA_IOC_GET_IO32 =0x309 , +ATA_IOC_SET_IO32 =0x324 , +}; +/* core structures */ struct ata_prd {u32 addr;u32 flags_len; -} __attribute__((packed)); +};struct ata_taskfile {unsigned long flags;/* ATA_TFLAG_xxx */
@@ -206,6 +220,8 @@#define ata_id_is_ata (dev) (((dev)->id[0] & (1 << 15)) == 0)#define ata_id_rahead_enabled (dev) ((dev)->id[85] & (1 << 6))#define ata_id_wcache_enabled (dev) ((dev)->id[85] & (1 << 5)) +#define ata_id_has_flush (dev) ((dev)->id[83] & (1 << 12)) +#define ata_id_has_flush_ext (dev) ((dev)->id[83] & (1 << 13))#define ata_id_has_lba48 (dev) ((dev)->id[83] & (1 << 10))#define ata_id_has_wcache (dev) ((dev)->id[82] & (1 << 5))#define ata_id_has_pm (dev) ((dev)->id[82] & (1 << 3))
@@ -220,9 +236,20 @@ ((u64) dev->id[(n) + 1] << 16) | \ ((u64) dev->id[(n) + 0]) ) +static inline int atapi_cdb_len (u16 *dev_id) +{ +u16 tmp = dev_id[0 ] &0x3 ; +switch (tmp) { +case 0 :return 12 ; +case 1 :return 16 ; +default :return -1 ; + } +} +static inline int is_atapi_taskfile (struct ata_taskfile *tf) {return (tf->protocol ==ATA_PROT_ATAPI ) || + (tf->protocol ==ATA_PROT_ATAPI_NODATA ) || (tf->protocol ==ATA_PROT_ATAPI_DMA ); }
include/linux/libata.h +29 -14
129 lines not on this page · raw message
include/scsi/scsi.h +1 -0
@@ -108,6 +108,7 @@#define WRITE_LONG_2 0xea#define READ_16 0x88#define WRITE_16 0x8a +#define VERIFY_16 0x8f#define SERVICE_ACTION_IN 0x9e/* values for service action in */ #define SAI_READ_CAPACITY_16 0x10