2.4.x libata update
Subsystems (3)
PATCH 1/1 2.4.x libata update
Please do a
bk pull bk://kernel.bkbits.net/jgarzik/libata-upstream-2.4
This will update the following files:
Documentation/Configure.help | 5 drivers/scsi/Config.in | 1 drivers/scsi/Makefile | 1 drivers/scsi/ahci.c | 26 + drivers/scsi/ata_piix.c | 4 drivers/scsi/libata-core.c | 120 ++++++- drivers/scsi/libata-scsi.c | 1 drivers/scsi/libata.h | 1 drivers/scsi/sata_nv.c | 10 drivers/scsi/sata_promise.c | 10 drivers/scsi/sata_qstor.c | 699 ++++++++++++++++++++++++++++++++++++++++++ drivers/scsi/sata_sil.c | 10 drivers/scsi/sata_sis.c | 10 drivers/scsi/sata_svw.c | 10 drivers/scsi/sata_sx4.c | 14 drivers/scsi/sata_uli.c | 10 drivers/scsi/sata_via.c | 213 +++++++++--- drivers/scsi/sata_vsc.c | 12 include/linux/libata-compat.h | 22 + include/linux/libata.h | 64 --- 20 files changed, 1079 insertions(+), 164 deletions(-)
through these ChangeSets:
<mat.loikkanen:synopsys.com>:
o [libata] add ->bmdma_{stop,status} hooks
Jeff Garzik:
o [libata ahci] Print out port id on error messages
o [libata] Use DMA_{32,64}BIT_MASK in ahci, sata_vsc drivers
o [libata] Add missing hooks, to avoid oops in advanced SATA drivers
o [libata] do not call pci_disable_device() for certain errors
o [libata] trivial: whitespace sync with 2.6
o [libata] resync with 2.6 msleep() updates
o [libata sata_via] add support for VT6421 SATA
o [libata sata_via] minor cleanups
John W. Linville:
o libata: fix command queue leak when xlat_func fails
Mark Lord:
o [libata qstor] minor update per LKML comments
o sata_qstor: new basic driver for Pacific Digital
Documentation/Configure.help +5 -0
@@ -9345,6 +9345,11 @@ If unsure, say N. +CONFIG_SCSI_SATA_QSTOR + This option enables support for Pacific Digital Serial ATA QStor. + + If unsure, say N. + CONFIG_SCSI_SATA_SX4 This option enables support for Promise Serial ATA SX4.
drivers/scsi/Config.in +1 -0
@@ -73,6 +73,7 @@ dep_tristate ' ServerWorks Frodo / Apple K2 SATA support (EXPERIMENTAL)' CONFIG_SCSI_SATA_SVW $CONFIG_SCSI_SATA $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate ' Intel PIIX/ICH SATA support' CONFIG_SCSI_ATA_PIIX $CONFIG_SCSI_SATA $CONFIG_PCI dep_tristate ' NVIDIA SATA support (EXPERIMENTAL)' CONFIG_SCSI_SATA_NV $CONFIG_SCSI_SATA $CONFIG_PCI $CONFIG_EXPERIMENTAL +dep_tristate ' Pacific Digital SATA QStor support' CONFIG_SCSI_SATA_QSTOR $CONFIG_SCSI_SATA $CONFIG_PCI dep_tristate ' Promise SATA TX2/TX4 support (EXPERIMENTAL)' CONFIG_SCSI_SATA_PROMISE $CONFIG_SCSI_SATA $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate ' Promise SATA SX4 support (EXPERIMENTAL)' CONFIG_SCSI_SATA_SX4 $CONFIG_SCSI_SATA $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate ' Silicon Image SATA support (EXPERIMENTAL)' CONFIG_SCSI_SATA_SIL $CONFIG_SCSI_SATA $CONFIG_PCI $CONFIG_EXPERIMENTAL
drivers/scsi/Makefile +1 -0
@@ -134,6 +134,7 @@ obj-$(CONFIG_SCSI_SATA_SVW) += libata.o sata_svw.o obj-$(CONFIG_SCSI_ATA_PIIX) += libata.o ata_piix.o obj-$(CONFIG_SCSI_SATA_PROMISE) += libata.o sata_promise.o +obj-$(CONFIG_SCSI_SATA_QSTOR) += libata.o sata_qstor.o obj-$(CONFIG_SCSI_SATA_SIL) += libata.o sata_sil.o obj-$(CONFIG_SCSI_SATA_VIA) += libata.o sata_via.o obj-$(CONFIG_SCSI_SATA_VITESSE) += libata.o sata_vsc.o
drivers/scsi/ahci.c +19 -7
@@ -40,8 +40,6 @@#define DRV_NAME "ahci"#define DRV_VERSION "1.00" -#define msleep libata_msleep/* 2.4-specific */ -enum {AHCI_PCI_BAR =5 ,AHCI_MAX_SG =168 ,/* hardware max is 64K */
@@ -180,6 +178,7 @@static void ahci_host_stop (struct ata_host_set *host_set);static void ahci_qc_prep (struct ata_queued_cmd *qc);static u8 ahci_check_status (struct ata_port *ap); +static u8 ahci_check_err (struct ata_port *ap);static inline int ahci_host_intr (struct ata_port *ap,struct ata_queued_cmd *qc);static Scsi_Host_Template ahci_sht = {
@@ -206,6 +205,8 @@ .port_disable = ata_port_disable, .check_status = ahci_check_status, + .check_altstatus = ahci_check_status, + .check_err = ahci_check_err, .dev_select = ata_noop_dev_select, .phy_reset = ahci_phy_reset,
@@ -454,6 +455,13 @@return readl (mmio +PORT_TFDATA ) &0xFF ; } +static u8 ahci_check_err (struct ata_port *ap) +{ +void *mmio = (void *) ap->ioaddr.cmd_addr; + +return (readl (mmio +PORT_TFDATA ) >>8 ) &0xFF ; +} +static void ahci_fill_sg (struct ata_queued_cmd *qc) {struct ahci_port_priv *pp = qc->ap->private_data;
@@ -566,7 +574,7 @@writel (tmp, port_mmio +PORT_CMD );readl (port_mmio +PORT_CMD );/* flush */ -printk (KERN_WARNING "ata%u: error occurred, port reset\n" , ap->port_no); +printk (KERN_WARNING "ata%u: error occurred, port reset\n" , ap->id); }static void ahci_eng_timeout (struct ata_port *ap)
@@ -758,10 +766,10 @@ using_dac = hpriv->cap &HOST_CAP_64 ;if (using_dac && - !pci_set_dma_mask (pdev,0xffffffffffffffffULL )) { + !pci_set_dma_mask (pdev,DMA_64BIT_MASK )) { hpriv->flags |=HOST_CAP_64 ; }else { - rc =pci_set_dma_mask (pdev,0xffffffffULL ); + rc =pci_set_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { printk(KERN_ERR DRV_NAME "(%s): 32-bit DMA enable failed\n", pci_name(pdev));
@@ -926,6 +934,7 @@unsigned long base;void *mmio_base;unsigned int board_idx = (unsigned int ) ent->driver_data; +int pci_dev_busy =0 ;int rc;VPRINTK ("ENTER\n" );
@@ -938,8 +947,10 @@return rc; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + }pci_enable_intx (pdev);
@@ -999,7 +1010,8 @@ err_out_regions:pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/ata_piix.c +4 -0
@@ -139,6 +139,8 @@ .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot,
@@ -164,6 +166,8 @@ .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot,
drivers/scsi/libata-core.c +102 -18
237 lines not on this page · raw message
drivers/scsi/libata-scsi.c +1 -0
@@ -663,6 +663,7 @@return ; err_out: +ata_qc_free (qc);ata_bad_cdb (cmd, done);DPRINTK ("EXIT - badcmd\n" ); }
drivers/scsi/libata.h +1 -0
@@ -37,6 +37,7 @@/* libata-core.c */ extern struct ata_queued_cmd *ata_qc_new_init (struct ata_port *ap,struct ata_device *dev); +extern void ata_qc_free (struct ata_queued_cmd *qc);extern int ata_qc_issue (struct ata_queued_cmd *qc);extern int ata_check_atapi_dma (struct ata_queued_cmd *qc); extern void ata_dev_select(struct ata_port *ap, unsigned int device,
drivers/scsi/sata_nv.c +8 -2
@@ -218,6 +218,8 @@ .phy_reset = sata_phy_reset, .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot, .eng_timeout = ata_eng_timeout,
@@ -333,6 +335,7 @@struct nv_host *host;struct ata_port_info *ppi;struct ata_probe_ent *probe_ent; +int pci_dev_busy =0 ;int rc;u32 bar;
@@ -351,8 +354,10 @@ goto err_out; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out_disable; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -418,7 +423,8 @@ err_out_regions:pci_release_regions (pdev); err_out_disable: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev); err_out:return rc; }
drivers/scsi/sata_promise.c +6 -4
@@ -42,8 +42,6 @@#define DRV_NAME "sata_promise"#define DRV_VERSION "1.01" -#define msleep libata_msleep/* 2.4-specific */ -enum {PDC_PKT_SUBMIT =0x40 ,/* Command packet pointer addr */ PDC_INT_SEQMASK =0x40 ,/* Mask of asserted SEQ INTs */
@@ -558,6 +556,7 @@unsigned long base;void *mmio_base;unsigned int board_idx = (unsigned int ) ent->driver_data; +int pci_dev_busy =0 ;int rc;if (!printed_version++)
@@ -572,8 +571,10 @@return rc; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -647,7 +648,8 @@ err_out_regions:pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/sata_qstor.c new file +699 -0
699 lines not on this page · raw message
drivers/scsi/sata_sil.c +8 -2
@@ -140,6 +140,8 @@ .post_set_mode = sil_post_set_mode, .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot, .eng_timeout = ata_eng_timeout,
@@ -337,6 +339,7 @@void *mmio_base;int rc;unsigned int i; +int pci_dev_busy =0 ;u32 tmp, irq_mask;if (!printed_version++)
@@ -351,8 +354,10 @@return rc; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -434,7 +439,8 @@ err_out_regions:pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/sata_sis.c +8 -2
@@ -103,6 +103,8 @@ .phy_reset = sata_phy_reset, .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot, .eng_timeout = ata_eng_timeout,
@@ -201,14 +203,17 @@int rc;u32 genctl;struct ata_port_info *ppi; +int pci_dev_busy =0 ; rc =pci_enable_device (pdev);if (rc)return rc; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -255,7 +260,8 @@pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/sata_svw.c +8 -2
@@ -302,6 +302,8 @@ .phy_reset = sata_phy_reset, .bmdma_setup = k2_bmdma_setup_mmio, .bmdma_start = k2_bmdma_start_mmio, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot, .eng_timeout = ata_eng_timeout,
@@ -339,6 +341,7 @@struct ata_probe_ent *probe_ent =NULL ;unsigned long base;void *mmio_base; +int pci_dev_busy =0 ;int rc;if (!printed_version++)
@@ -360,8 +363,10 @@/* Request PCI regions */ rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -429,7 +434,8 @@ err_out_regions:pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/sata_sx4.c +8 -6
@@ -1191,8 +1191,7 @@ error =0 ;break ; } -set_current_state (TASK_UNINTERRUPTIBLE ); -schedule_timeout ((i *100 ) *HZ /1000 +1 ); +msleep (i*100 ); }return error; }
@@ -1225,8 +1224,7 @@readl (mmio +PDC_TIME_CONTROL );/* Wait 3 seconds */ -set_current_state (TASK_UNINTERRUPTIBLE ); -schedule_timeout (3 *HZ ); +msleep (3000 );/* When timer is enabled, counter is decreased every internal
@@ -1369,6 +1367,7 @@void *mmio_base, *dimm_mmio =NULL ;struct pdc_host_priv *hpriv =NULL ;unsigned int board_idx = (unsigned int ) ent->driver_data; +int pci_dev_busy =0 ;int rc;if (!printed_version++)
@@ -1383,8 +1382,10 @@return rc; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -1469,7 +1470,8 @@ err_out_regions:pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/sata_uli.c +8 -2
@@ -98,6 +98,8 @@ .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot,
@@ -186,14 +188,17 @@struct ata_port_info *ppi;int rc;unsigned int board_idx = (unsigned int ) ent->driver_data; +int pci_dev_busy =0 ; rc =pci_enable_device (pdev);if (rc)return rc; rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + } rc =pci_set_dma_mask (pdev,ATA_DMA_MASK );if (rc)
@@ -256,7 +261,8 @@pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
drivers/scsi/sata_via.c +157 -56
292 lines not on this page · raw message
drivers/scsi/sata_vsc.c +9 -3
@@ -218,6 +218,8 @@ .phy_reset = sata_phy_reset, .bmdma_setup = ata_bmdma_setup, .bmdma_start = ata_bmdma_start, + .bmdma_stop = ata_bmdma_stop, + .bmdma_status = ata_bmdma_status, .qc_prep = ata_qc_prep, .qc_issue = ata_qc_issue_prot, .eng_timeout = ata_eng_timeout,
@@ -256,6 +258,7 @@static int printed_version;struct ata_probe_ent *probe_ent =NULL ;unsigned long base; +int pci_dev_busy =0 ;void *mmio_base;int rc;
@@ -275,13 +278,15 @@ } rc =pci_request_regions (pdev,DRV_NAME ); -if (rc) +if (rc) { + pci_dev_busy =1 ; goto err_out; + }/* * Use 32 bit DMA mask, because 64 bit address support is poor. */ - rc =pci_set_dma_mask (pdev,0xFFFFFFFFULL ); + rc =pci_set_dma_mask (pdev,DMA_32BIT_MASK );if (rc) goto err_out_regions;
@@ -348,7 +353,8 @@ err_out_regions:pci_release_regions (pdev); err_out: -pci_disable_device (pdev); +if (!pci_dev_busy) +pci_disable_device (pdev);return rc; }
include/linux/libata-compat.h +17 -5
@@ -1,8 +1,16 @@#ifndef __LIBATA_COMPAT_H__#define __LIBATA_COMPAT_H__ +#include <linux/types.h> #include <linux/delay.h> #include <linux/pci.h> +#include <linux/slab.h> + +typedef u32 __le32 ; +typedef u64 __le64 ; + +#define DMA_64BIT_MASK 0xffffffffffffffffULL +#define DMA_32BIT_MASK 0x00000000ffffffffULL#define MODULE_VERSION (ver_str)
@@ -10,11 +18,6 @@struct pci_dev pdev; }; -static inline void libata_msleep (unsigned long msecs) -{ -msleep (msecs); -} -static inline struct pci_dev *to_pci_dev (struct device *dev) {return (struct pci_dev *) dev;
@@ -46,5 +49,14 @@ pci_get_drvdata(to_pci_dev(dev))#define dev_set_drvdata (dev,ptr) \ pci_set_drvdata(to_pci_dev(dev),(ptr)) + +static inline void *kcalloc (size_t nmemb,size_t size,int flags) +{ +size_t total = nmemb * size; +void *mem =kmalloc (total, flags); +if (mem) +memset (mem,0 , total); +return mem; +}#endif /* __LIBATA_COMPAT_H__ */
include/linux/libata.h +9 -55
105 lines not on this page · raw message