You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata
Pull libata updates from Tejun Heo:
"Overview of changes:
- The rest of maintainer email address updates.
- Some core updates - more robust default behavior for port
multipliers, better error reporting for SG_IO commands, and a way
to better work around now ancient and probably pretty rare PATA ->
SATA bridges with ATAPI devices.
- sata_rcar stabilization.
- Some hardware PCI ID additions and one-off low level driver
updates."
* 'for-3.11' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: (22 commits)
AHCI: use ATA_BUSY
libata-zpodd: must use ata_tf_init()
ahci: AHCI-mode SATA patch for Intel Coleto Creek DeviceIDs
ata_piix: IDE-mode SATA patch for Intel Coleto Creek DeviceIDs
libata: cleanup SAT error translation
ahci: sata: add support for exynos5440 sata
libata: skip SRST for all SIMG [34]7x port-multipliers
ahci: remove pmp link online check in FBS EH
sata highbank: add bit-banged SGPIO driver support
ahci: make ahci_transmit_led_message into a function pointer
sata_rcar: fix compilation warning in sata_rcar_thaw()
sata_highbank: increase retry count but shorten duration for Calxeda controller
ata: use pci_get_drvdata()
ipr: qc_fill_rtf() method should not store alternate status register
sata_rcar: add 'base' local variable to some functions
sata_rcar: correct 'sata_rcar_sht'
sata_rcar: kill superfluous code in sata_rcar_bmdma_fill_sg()
libata: do not limit R-Car SATA driver to shmobile
ata: use platform_{get,set}_drvdata()
AHCI: Make distinct names for ports in /proc/interrupts
...
This commit is contained in:
@@ -12,6 +12,11 @@ Optional properties:
|
||||
- calxeda,port-phys: phandle-combophy and lane assignment, which maps each
|
||||
SATA port to a combophy and a lane within that
|
||||
combophy
|
||||
- calxeda,sgpio-gpio: phandle-gpio bank, bit offset, and default on or off,
|
||||
which indicates that the driver supports SGPIO
|
||||
indicator lights using the indicated GPIOs
|
||||
- calxeda,led-order : a u32 array that map port numbers to offsets within the
|
||||
SGPIO bitstream.
|
||||
- dma-coherent : Present if dma operations are coherent
|
||||
|
||||
Example:
|
||||
|
||||
@@ -1458,6 +1458,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
|
||||
* dump_id: dump IDENTIFY data.
|
||||
|
||||
* atapi_dmadir: Enable ATAPI DMADIR bridge support
|
||||
|
||||
If there are multiple matching configurations changing
|
||||
the same attribute, the last one is used.
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
calxeda,port-phys = <&combophy5 0 &combophy0 0
|
||||
&combophy0 1 &combophy0 2
|
||||
&combophy0 3>;
|
||||
calxeda,sgpio-gpio =<&gpioh 5 1 &gpioh 6 1 &gpioh 7 1>;
|
||||
calxeda,led-order = <4 0 1 2 3>;
|
||||
};
|
||||
|
||||
sdhci@ffe0e000 {
|
||||
|
||||
@@ -263,7 +263,6 @@ config SATA_PROMISE
|
||||
|
||||
config SATA_RCAR
|
||||
tristate "Renesas R-Car SATA support"
|
||||
depends on ARCH_SHMOBILE && ARCH_R8A7779
|
||||
help
|
||||
This option enables support for Renesas R-Car Serial ATA.
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ static struct pci_driver acard_ahci_pci_driver = {
|
||||
#ifdef CONFIG_PM
|
||||
static int acard_ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
struct ahci_host_priv *hpriv = host->private_data;
|
||||
void __iomem *mmio = hpriv->mmio;
|
||||
u32 ctl;
|
||||
@@ -156,7 +156,7 @@ static int acard_ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg
|
||||
|
||||
static int acard_ahci_pci_device_resume(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int rc;
|
||||
|
||||
rc = ata_pci_device_do_resume(pdev);
|
||||
|
||||
+7
-4
@@ -291,6 +291,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(INTEL, 0x8d64), board_ahci }, /* Wellsburg RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
|
||||
{ PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */
|
||||
|
||||
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
|
||||
{ PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
||||
@@ -586,7 +587,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
|
||||
|
||||
/* clear D2H reception area to properly wait for D2H FIS */
|
||||
ata_tf_init(link->device, &tf);
|
||||
tf.command = 0x80;
|
||||
tf.command = ATA_BUSY;
|
||||
ata_tf_to_fis(&tf, 0, 0, d2h_fis);
|
||||
|
||||
rc = sata_link_hardreset(link, sata_ehc_deb_timing(&link->eh_context),
|
||||
@@ -619,7 +620,7 @@ static int ahci_p5wdh_hardreset(struct ata_link *link, unsigned int *class,
|
||||
#ifdef CONFIG_PM
|
||||
static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
struct ahci_host_priv *hpriv = host->private_data;
|
||||
void __iomem *mmio = hpriv->mmio;
|
||||
u32 ctl;
|
||||
@@ -647,7 +648,7 @@ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
|
||||
static int ahci_pci_device_resume(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int rc;
|
||||
|
||||
rc = ata_pci_device_do_resume(pdev);
|
||||
@@ -1145,9 +1146,11 @@ int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
|
||||
return rc;
|
||||
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ahci_port_priv *pp = host->ports[i]->private_data;
|
||||
|
||||
rc = devm_request_threaded_irq(host->dev,
|
||||
irq + i, ahci_hw_interrupt, ahci_thread_fn, IRQF_SHARED,
|
||||
dev_driver_string(host->dev), host->ports[i]);
|
||||
pp->irq_desc, host->ports[i]);
|
||||
if (rc)
|
||||
goto out_free_irqs;
|
||||
}
|
||||
|
||||
@@ -306,6 +306,7 @@ struct ahci_port_priv {
|
||||
int fbs_last_dev; /* save FBS.DEV of last FIS */
|
||||
/* enclosure management info per PM slot */
|
||||
struct ahci_em_priv em_priv[EM_MAX_SLOTS];
|
||||
char *irq_desc; /* desc in /proc/interrupts */
|
||||
};
|
||||
|
||||
struct ahci_host_priv {
|
||||
@@ -321,6 +322,7 @@ struct ahci_host_priv {
|
||||
u32 em_buf_sz; /* EM buffer size in byte */
|
||||
u32 em_msg_type; /* EM message type */
|
||||
struct clk *clk; /* Only for platforms supporting clk */
|
||||
void *plat_data; /* Other platform data */
|
||||
};
|
||||
|
||||
extern int ahci_ignore_sss;
|
||||
|
||||
@@ -327,6 +327,7 @@ static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume);
|
||||
|
||||
static const struct of_device_id ahci_of_match[] = {
|
||||
{ .compatible = "snps,spear-ahci", },
|
||||
{ .compatible = "snps,exynos5440-ahci", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ahci_of_match);
|
||||
|
||||
@@ -338,6 +338,8 @@ static const struct pci_device_id piix_pci_tbl[] = {
|
||||
/* SATA Controller IDE (BayTrail) */
|
||||
{ 0x8086, 0x0F20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
|
||||
{ 0x8086, 0x0F21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata_byt },
|
||||
/* SATA Controller IDE (Coleto Creek) */
|
||||
{ 0x8086, 0x23a6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
|
||||
|
||||
{ } /* terminate list */
|
||||
};
|
||||
@@ -993,7 +995,7 @@ static int piix_broken_suspend(void)
|
||||
|
||||
static int piix_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
unsigned long flags;
|
||||
int rc = 0;
|
||||
|
||||
@@ -1028,7 +1030,7 @@ static int piix_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||
|
||||
static int piix_pci_device_resume(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
unsigned long flags;
|
||||
int rc;
|
||||
|
||||
@@ -1751,7 +1753,7 @@ static int piix_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
static void piix_remove_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
struct piix_host_priv *hpriv = host->private_data;
|
||||
|
||||
pci_write_config_dword(pdev, PIIX_IOCFG, hpriv->saved_iocfg);
|
||||
|
||||
+18
-8
@@ -173,6 +173,7 @@ struct ata_port_operations ahci_ops = {
|
||||
.em_store = ahci_led_store,
|
||||
.sw_activity_show = ahci_activity_show,
|
||||
.sw_activity_store = ahci_activity_store,
|
||||
.transmit_led_message = ahci_transmit_led_message,
|
||||
#ifdef CONFIG_PM
|
||||
.port_suspend = ahci_port_suspend,
|
||||
.port_resume = ahci_port_resume,
|
||||
@@ -774,7 +775,7 @@ static void ahci_start_port(struct ata_port *ap)
|
||||
|
||||
/* EM Transmit bit maybe busy during init */
|
||||
for (i = 0; i < EM_MAX_RETRY; i++) {
|
||||
rc = ahci_transmit_led_message(ap,
|
||||
rc = ap->ops->transmit_led_message(ap,
|
||||
emp->led_state,
|
||||
4);
|
||||
if (rc == -EBUSY)
|
||||
@@ -915,7 +916,7 @@ static void ahci_sw_activity_blink(unsigned long arg)
|
||||
led_message |= (1 << 16);
|
||||
}
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
ahci_transmit_led_message(ap, led_message, 4);
|
||||
ap->ops->transmit_led_message(ap, led_message, 4);
|
||||
}
|
||||
|
||||
static void ahci_init_sw_activity(struct ata_link *link)
|
||||
@@ -1044,7 +1045,7 @@ static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
|
||||
if (emp->blink_policy)
|
||||
state &= ~EM_MSG_LED_VALUE_ACTIVITY;
|
||||
|
||||
return ahci_transmit_led_message(ap, state, size);
|
||||
return ap->ops->transmit_led_message(ap, state, size);
|
||||
}
|
||||
|
||||
static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val)
|
||||
@@ -1063,7 +1064,7 @@ static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val)
|
||||
/* set the LED to OFF */
|
||||
port_led_state &= EM_MSG_LED_VALUE_OFF;
|
||||
port_led_state |= (ap->port_no | (link->pmp << 8));
|
||||
ahci_transmit_led_message(ap, port_led_state, 4);
|
||||
ap->ops->transmit_led_message(ap, port_led_state, 4);
|
||||
} else {
|
||||
link->flags |= ATA_LFLAG_SW_ACTIVITY;
|
||||
if (val == BLINK_OFF) {
|
||||
@@ -1071,7 +1072,7 @@ static ssize_t ahci_activity_store(struct ata_device *dev, enum sw_activity val)
|
||||
port_led_state &= EM_MSG_LED_VALUE_OFF;
|
||||
port_led_state |= (ap->port_no | (link->pmp << 8));
|
||||
port_led_state |= EM_MSG_LED_VALUE_ON; /* check this */
|
||||
ahci_transmit_led_message(ap, port_led_state, 4);
|
||||
ap->ops->transmit_led_message(ap, port_led_state, 4);
|
||||
}
|
||||
}
|
||||
emp->blink_policy = val;
|
||||
@@ -1412,7 +1413,7 @@ static int ahci_hardreset(struct ata_link *link, unsigned int *class,
|
||||
|
||||
/* clear D2H reception area to properly wait for D2H FIS */
|
||||
ata_tf_init(link->device, &tf);
|
||||
tf.command = 0x80;
|
||||
tf.command = ATA_BUSY;
|
||||
ata_tf_to_fis(&tf, 0, 0, d2h_fis);
|
||||
|
||||
rc = sata_link_hardreset(link, timing, deadline, &online,
|
||||
@@ -1560,8 +1561,7 @@ static void ahci_error_intr(struct ata_port *ap, u32 irq_stat)
|
||||
u32 fbs = readl(port_mmio + PORT_FBS);
|
||||
int pmp = fbs >> PORT_FBS_DWE_OFFSET;
|
||||
|
||||
if ((fbs & PORT_FBS_SDE) && (pmp < ap->nr_pmp_links) &&
|
||||
ata_link_online(&ap->pmp_link[pmp])) {
|
||||
if ((fbs & PORT_FBS_SDE) && (pmp < ap->nr_pmp_links)) {
|
||||
link = &ap->pmp_link[pmp];
|
||||
fbs_need_dec = true;
|
||||
}
|
||||
@@ -2234,6 +2234,16 @@ static int ahci_port_start(struct ata_port *ap)
|
||||
if (!pp)
|
||||
return -ENOMEM;
|
||||
|
||||
if (ap->host->n_ports > 1) {
|
||||
pp->irq_desc = devm_kzalloc(dev, 8, GFP_KERNEL);
|
||||
if (!pp->irq_desc) {
|
||||
devm_kfree(dev, pp);
|
||||
return -ENOMEM;
|
||||
}
|
||||
snprintf(pp->irq_desc, 8,
|
||||
"%s%d", dev_driver_string(dev), ap->port_no);
|
||||
}
|
||||
|
||||
/* check FBS capability */
|
||||
if ((hpriv->cap & HOST_CAP_FBS) && sata_pmp_supported(ap)) {
|
||||
void __iomem *port_mmio = ahci_port_base(ap);
|
||||
|
||||
@@ -2401,7 +2401,7 @@ int ata_dev_configure(struct ata_device *dev)
|
||||
cdb_intr_string = ", CDB intr";
|
||||
}
|
||||
|
||||
if (atapi_dmadir || atapi_id_dmadir(dev->id)) {
|
||||
if (atapi_dmadir || (dev->horkage & ATA_HORKAGE_ATAPI_DMADIR) || atapi_id_dmadir(dev->id)) {
|
||||
dev->flags |= ATA_DFLAG_DMADIR;
|
||||
dma_dir_string = ", DMADIR";
|
||||
}
|
||||
@@ -5642,6 +5642,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
|
||||
ap->pflags |= ATA_PFLAG_INITIALIZING | ATA_PFLAG_FROZEN;
|
||||
ap->lock = &host->lock;
|
||||
ap->print_id = -1;
|
||||
ap->local_port_no = -1;
|
||||
ap->host = host;
|
||||
ap->dev = host->dev;
|
||||
|
||||
@@ -6132,9 +6133,10 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
|
||||
kfree(host->ports[i]);
|
||||
|
||||
/* give ports names and add SCSI hosts */
|
||||
for (i = 0; i < host->n_ports; i++)
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
|
||||
|
||||
host->ports[i]->local_port_no = i + 1;
|
||||
}
|
||||
|
||||
/* Create associated sysfs transport objects */
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
@@ -6502,6 +6504,7 @@ static int __init ata_parse_force_one(char **cur,
|
||||
{ "nosrst", .lflags = ATA_LFLAG_NO_SRST },
|
||||
{ "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST },
|
||||
{ "rstonce", .lflags = ATA_LFLAG_RST_ONCE },
|
||||
{ "atapi_dmadir", .horkage_on = ATA_HORKAGE_ATAPI_DMADIR },
|
||||
};
|
||||
char *start = *cur, *p = *cur;
|
||||
char *id, *val, *endp;
|
||||
|
||||
+16
-15
@@ -389,9 +389,13 @@ static void sata_pmp_quirks(struct ata_port *ap)
|
||||
/* link reports offline after LPM */
|
||||
link->flags |= ATA_LFLAG_NO_LPM;
|
||||
|
||||
/* Class code report is unreliable. */
|
||||
/*
|
||||
* Class code report is unreliable and SRST times
|
||||
* out under certain configurations.
|
||||
*/
|
||||
if (link->pmp < 5)
|
||||
link->flags |= ATA_LFLAG_ASSUME_ATA;
|
||||
link->flags |= ATA_LFLAG_NO_SRST |
|
||||
ATA_LFLAG_ASSUME_ATA;
|
||||
|
||||
/* port 5 is for SEMB device and it doesn't like SRST */
|
||||
if (link->pmp == 5)
|
||||
@@ -399,20 +403,17 @@ static void sata_pmp_quirks(struct ata_port *ap)
|
||||
ATA_LFLAG_ASSUME_SEMB;
|
||||
}
|
||||
} else if (vendor == 0x1095 && devid == 0x4723) {
|
||||
/* sil4723 quirks */
|
||||
ata_for_each_link(link, ap, EDGE) {
|
||||
/* link reports offline after LPM */
|
||||
link->flags |= ATA_LFLAG_NO_LPM;
|
||||
|
||||
/* class code report is unreliable */
|
||||
if (link->pmp < 2)
|
||||
link->flags |= ATA_LFLAG_ASSUME_ATA;
|
||||
|
||||
/* the config device at port 2 locks up on SRST */
|
||||
if (link->pmp == 2)
|
||||
link->flags |= ATA_LFLAG_NO_SRST |
|
||||
/*
|
||||
* sil4723 quirks
|
||||
*
|
||||
* Link reports offline after LPM. Class code report is
|
||||
* unreliable. SIMG PMPs never got SRST reliable and the
|
||||
* config device at port 2 locks up on SRST.
|
||||
*/
|
||||
ata_for_each_link(link, ap, EDGE)
|
||||
link->flags |= ATA_LFLAG_NO_LPM |
|
||||
ATA_LFLAG_NO_SRST |
|
||||
ATA_LFLAG_ASSUME_ATA;
|
||||
}
|
||||
} else if (vendor == 0x1095 && devid == 0x4726) {
|
||||
/* sil4726 quirks */
|
||||
ata_for_each_link(link, ap, EDGE) {
|
||||
|
||||
+15
-18
@@ -850,14 +850,13 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
|
||||
{0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field
|
||||
/* TRK0 */
|
||||
{0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error
|
||||
/* Abort & !ICRC */
|
||||
{0x04, ABORTED_COMMAND, 0x00, 0x00}, // Aborted command Aborted command
|
||||
/* Abort: 0x04 is not translated here, see below */
|
||||
/* Media change request */
|
||||
{0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline
|
||||
/* SRV */
|
||||
{0x10, ABORTED_COMMAND, 0x14, 0x00}, // ID not found Recorded entity not found
|
||||
/* Media change */
|
||||
{0x08, NOT_READY, 0x04, 0x00}, // Media change FIXME: faking offline
|
||||
/* SRV/IDNF */
|
||||
{0x10, ILLEGAL_REQUEST, 0x21, 0x00}, // ID not found Logical address out of range
|
||||
/* MC */
|
||||
{0x20, UNIT_ATTENTION, 0x28, 0x00}, // Media Changed Not ready to ready change, medium may have changed
|
||||
/* ECC */
|
||||
{0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error
|
||||
/* BBD - block marked bad */
|
||||
@@ -867,7 +866,7 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
|
||||
static const unsigned char stat_table[][4] = {
|
||||
/* Must be first because BUSY means no other bits valid */
|
||||
{0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now
|
||||
{0x20, HARDWARE_ERROR, 0x00, 0x00}, // Device fault
|
||||
{0x20, HARDWARE_ERROR, 0x44, 0x00}, // Device fault, internal target failure
|
||||
{0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now
|
||||
{0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered
|
||||
{0xFF, 0xFF, 0xFF, 0xFF}, // END mark
|
||||
@@ -892,13 +891,13 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
|
||||
goto translate_done;
|
||||
}
|
||||
}
|
||||
/* No immediate match */
|
||||
if (verbose)
|
||||
printk(KERN_WARNING "ata%u: no sense translation for "
|
||||
"error 0x%02x\n", id, drv_err);
|
||||
}
|
||||
|
||||
/* Fall back to interpreting status bits */
|
||||
/*
|
||||
* Fall back to interpreting status bits. Note that if the drv_err
|
||||
* has only the ABRT bit set, we decode drv_stat. ABRT by itself
|
||||
* is not descriptive enough.
|
||||
*/
|
||||
for (i = 0; stat_table[i][0] != 0xFF; i++) {
|
||||
if (stat_table[i][0] & drv_stat) {
|
||||
*sk = stat_table[i][1];
|
||||
@@ -907,13 +906,11 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
|
||||
goto translate_done;
|
||||
}
|
||||
}
|
||||
/* No error? Undecoded? */
|
||||
if (verbose)
|
||||
printk(KERN_WARNING "ata%u: no sense translation for "
|
||||
"status: 0x%02x\n", id, drv_stat);
|
||||
|
||||
/* We need a sensible error return here, which is tricky, and one
|
||||
that won't cause people to do things like return a disk wrongly */
|
||||
/*
|
||||
* We need a sensible error return here, which is tricky, and one
|
||||
* that won't cause people to do things like return a disk wrongly.
|
||||
*/
|
||||
*sk = ABORTED_COMMAND;
|
||||
*asc = 0x00;
|
||||
*ascq = 0x00;
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#include "libata.h"
|
||||
#include "libata-transport.h"
|
||||
|
||||
#define ATA_PORT_ATTRS 2
|
||||
#define ATA_PORT_ATTRS 3
|
||||
#define ATA_LINK_ATTRS 3
|
||||
#define ATA_DEV_ATTRS 9
|
||||
|
||||
@@ -216,6 +216,7 @@ static DEVICE_ATTR(name, S_IRUGO, show_ata_port_##name, NULL)
|
||||
|
||||
ata_port_simple_attr(nr_pmp_links, nr_pmp_links, "%d\n", int);
|
||||
ata_port_simple_attr(stats.idle_irq, idle_irq, "%ld\n", unsigned long);
|
||||
ata_port_simple_attr(local_port_no, port_no, "%u\n", unsigned int);
|
||||
|
||||
static DECLARE_TRANSPORT_CLASS(ata_port_class,
|
||||
"ata_port", NULL, NULL, NULL);
|
||||
@@ -709,6 +710,7 @@ struct scsi_transport_template *ata_attach_transport(void)
|
||||
count = 0;
|
||||
SETUP_PORT_ATTRIBUTE(nr_pmp_links);
|
||||
SETUP_PORT_ATTRIBUTE(idle_irq);
|
||||
SETUP_PORT_ATTRIBUTE(port_no);
|
||||
BUG_ON(count > ATA_PORT_ATTRS);
|
||||
i->port_attrs[count] = NULL;
|
||||
|
||||
|
||||
@@ -32,13 +32,14 @@ struct zpodd {
|
||||
|
||||
static int eject_tray(struct ata_device *dev)
|
||||
{
|
||||
struct ata_taskfile tf = {};
|
||||
struct ata_taskfile tf;
|
||||
const char cdb[] = { GPCMD_START_STOP_UNIT,
|
||||
0, 0, 0,
|
||||
0x02, /* LoEj */
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
ata_tf_init(dev, &tf);
|
||||
tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
|
||||
tf.command = ATA_CMD_PACKET;
|
||||
tf.protocol = ATAPI_PROT_NODATA;
|
||||
@@ -52,8 +53,7 @@ static enum odd_mech_type zpodd_get_mech_type(struct ata_device *dev)
|
||||
char buf[16];
|
||||
unsigned int ret;
|
||||
struct rm_feature_desc *desc = (void *)(buf + 8);
|
||||
struct ata_taskfile tf = {};
|
||||
|
||||
struct ata_taskfile tf;
|
||||
char cdb[] = { GPCMD_GET_CONFIGURATION,
|
||||
2, /* only 1 feature descriptor requested */
|
||||
0, 3, /* 3, removable medium feature */
|
||||
@@ -62,6 +62,7 @@ static enum odd_mech_type zpodd_get_mech_type(struct ata_device *dev)
|
||||
0, 0, 0,
|
||||
};
|
||||
|
||||
ata_tf_init(dev, &tf);
|
||||
tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
|
||||
tf.command = ATA_CMD_PACKET;
|
||||
tf.protocol = ATAPI_PROT_PIO;
|
||||
|
||||
@@ -592,7 +592,7 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
#ifdef CONFIG_PM
|
||||
static int ali_reinit_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int rc;
|
||||
|
||||
rc = ata_pci_device_do_resume(pdev);
|
||||
|
||||
@@ -578,7 +578,7 @@ static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
#ifdef CONFIG_PM
|
||||
static int amd_reinit_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int rc;
|
||||
|
||||
rc = ata_pci_device_do_resume(pdev);
|
||||
|
||||
@@ -908,7 +908,7 @@ free_clk:
|
||||
|
||||
static int arasan_cf_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = platform_get_drvdata(pdev);
|
||||
struct arasan_cf_dev *acdev = host->ports[0]->private_data;
|
||||
|
||||
ata_host_detach(host);
|
||||
|
||||
@@ -426,7 +426,7 @@ static const struct pci_device_id artop_pci_tbl[] = {
|
||||
#ifdef CONFIG_PM
|
||||
static int atp8xx_reinit_one(struct pci_dev *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int rc;
|
||||
|
||||
rc = ata_pci_device_do_resume(pdev);
|
||||
|
||||
@@ -422,7 +422,7 @@ err_put:
|
||||
|
||||
static int pata_at91_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ata_host *host = dev_get_drvdata(&pdev->dev);
|
||||
struct ata_host *host = platform_get_drvdata(pdev);
|
||||
struct at91_ide_info *info;
|
||||
|
||||
if (!host)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user