mirror of https://gitee.com/openkylin/linux.git
Automatic merge of 'misc-fixes' branch from
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
This commit is contained in:
commit
79158229b0
|
@ -32,6 +32,7 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include "scsi.h"
|
#include "scsi.h"
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
|
@ -289,6 +290,8 @@ static void ahci_host_stop(struct ata_host_set *host_set)
|
||||||
{
|
{
|
||||||
struct ahci_host_priv *hpriv = host_set->private_data;
|
struct ahci_host_priv *hpriv = host_set->private_data;
|
||||||
kfree(hpriv);
|
kfree(hpriv);
|
||||||
|
|
||||||
|
ata_host_stop(host_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ahci_port_start(struct ata_port *ap)
|
static int ahci_port_start(struct ata_port *ap)
|
||||||
|
|
|
@ -153,6 +153,7 @@ static struct ata_port_operations piix_pata_ops = {
|
||||||
|
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_operations piix_sata_ops = {
|
static struct ata_port_operations piix_sata_ops = {
|
||||||
|
@ -180,6 +181,7 @@ static struct ata_port_operations piix_sata_ops = {
|
||||||
|
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_info piix_port_info[] = {
|
static struct ata_port_info piix_port_info[] = {
|
||||||
|
|
|
@ -3322,6 +3322,13 @@ void ata_port_stop (struct ata_port *ap)
|
||||||
dma_free_coherent(dev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma);
|
dma_free_coherent(dev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ata_host_stop (struct ata_host_set *host_set)
|
||||||
|
{
|
||||||
|
if (host_set->mmio_base)
|
||||||
|
iounmap(host_set->mmio_base);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_host_remove - Unregister SCSI host structure with upper layers
|
* ata_host_remove - Unregister SCSI host structure with upper layers
|
||||||
* @ap: Port to unregister
|
* @ap: Port to unregister
|
||||||
|
@ -3878,10 +3885,6 @@ void ata_pci_remove_one (struct pci_dev *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
free_irq(host_set->irq, host_set);
|
free_irq(host_set->irq, host_set);
|
||||||
if (host_set->ops->host_stop)
|
|
||||||
host_set->ops->host_stop(host_set);
|
|
||||||
if (host_set->mmio_base)
|
|
||||||
iounmap(host_set->mmio_base);
|
|
||||||
|
|
||||||
for (i = 0; i < host_set->n_ports; i++) {
|
for (i = 0; i < host_set->n_ports; i++) {
|
||||||
ap = host_set->ports[i];
|
ap = host_set->ports[i];
|
||||||
|
@ -3900,6 +3903,9 @@ void ata_pci_remove_one (struct pci_dev *pdev)
|
||||||
scsi_host_put(ap->host);
|
scsi_host_put(ap->host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (host_set->ops->host_stop)
|
||||||
|
host_set->ops->host_stop(host_set);
|
||||||
|
|
||||||
kfree(host_set);
|
kfree(host_set);
|
||||||
|
|
||||||
pci_release_regions(pdev);
|
pci_release_regions(pdev);
|
||||||
|
@ -3997,6 +4003,7 @@ EXPORT_SYMBOL_GPL(ata_chk_err);
|
||||||
EXPORT_SYMBOL_GPL(ata_exec_command);
|
EXPORT_SYMBOL_GPL(ata_exec_command);
|
||||||
EXPORT_SYMBOL_GPL(ata_port_start);
|
EXPORT_SYMBOL_GPL(ata_port_start);
|
||||||
EXPORT_SYMBOL_GPL(ata_port_stop);
|
EXPORT_SYMBOL_GPL(ata_port_stop);
|
||||||
|
EXPORT_SYMBOL_GPL(ata_host_stop);
|
||||||
EXPORT_SYMBOL_GPL(ata_interrupt);
|
EXPORT_SYMBOL_GPL(ata_interrupt);
|
||||||
EXPORT_SYMBOL_GPL(ata_qc_prep);
|
EXPORT_SYMBOL_GPL(ata_qc_prep);
|
||||||
EXPORT_SYMBOL_GPL(ata_bmdma_setup);
|
EXPORT_SYMBOL_GPL(ata_bmdma_setup);
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#define __LIBATA_H__
|
#define __LIBATA_H__
|
||||||
|
|
||||||
#define DRV_NAME "libata"
|
#define DRV_NAME "libata"
|
||||||
#define DRV_VERSION "1.10" /* must be exactly four chars */
|
#define DRV_VERSION "1.11" /* must be exactly four chars */
|
||||||
|
|
||||||
struct ata_scsi_args {
|
struct ata_scsi_args {
|
||||||
u16 *id;
|
u16 *id;
|
||||||
|
|
|
@ -329,6 +329,8 @@ static void nv_host_stop (struct ata_host_set *host_set)
|
||||||
host->host_desc->disable_hotplug(host_set);
|
host->host_desc->disable_hotplug(host_set);
|
||||||
|
|
||||||
kfree(host);
|
kfree(host);
|
||||||
|
|
||||||
|
ata_host_stop(host_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
static int nv_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
|
|
|
@ -122,6 +122,7 @@ static struct ata_port_operations pdc_ata_ops = {
|
||||||
.scr_write = pdc_sata_scr_write,
|
.scr_write = pdc_sata_scr_write,
|
||||||
.port_start = pdc_port_start,
|
.port_start = pdc_port_start,
|
||||||
.port_stop = pdc_port_stop,
|
.port_stop = pdc_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_info pdc_port_info[] = {
|
static struct ata_port_info pdc_port_info[] = {
|
||||||
|
|
|
@ -536,6 +536,8 @@ static void qs_host_stop(struct ata_host_set *host_set)
|
||||||
|
|
||||||
writeb(0, mmio_base + QS_HCT_CTRL); /* disable host interrupts */
|
writeb(0, mmio_base + QS_HCT_CTRL); /* disable host interrupts */
|
||||||
writeb(QS_CNFG3_GSRST, mmio_base + QS_HCF_CNFG3); /* global reset */
|
writeb(QS_CNFG3_GSRST, mmio_base + QS_HCF_CNFG3); /* global reset */
|
||||||
|
|
||||||
|
ata_host_stop(host_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qs_host_init(unsigned int chip_id, struct ata_probe_ent *pe)
|
static void qs_host_init(unsigned int chip_id, struct ata_probe_ent *pe)
|
||||||
|
|
|
@ -161,6 +161,7 @@ static struct ata_port_operations sil_ops = {
|
||||||
.scr_write = sil_scr_write,
|
.scr_write = sil_scr_write,
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_info sil_port_info[] = {
|
static struct ata_port_info sil_port_info[] = {
|
||||||
|
|
|
@ -114,6 +114,7 @@ static struct ata_port_operations sis_ops = {
|
||||||
.scr_write = sis_scr_write,
|
.scr_write = sis_scr_write,
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_info sis_port_info = {
|
static struct ata_port_info sis_port_info = {
|
||||||
|
|
|
@ -313,6 +313,7 @@ static struct ata_port_operations k2_sata_ops = {
|
||||||
.scr_write = k2_sata_scr_write,
|
.scr_write = k2_sata_scr_write,
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void k2_sata_setup_port(struct ata_ioports *port, unsigned long base)
|
static void k2_sata_setup_port(struct ata_ioports *port, unsigned long base)
|
||||||
|
|
|
@ -245,6 +245,8 @@ static void pdc20621_host_stop(struct ata_host_set *host_set)
|
||||||
|
|
||||||
iounmap(dimm_mmio);
|
iounmap(dimm_mmio);
|
||||||
kfree(hpriv);
|
kfree(hpriv);
|
||||||
|
|
||||||
|
ata_host_stop(host_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pdc_port_start(struct ata_port *ap)
|
static int pdc_port_start(struct ata_port *ap)
|
||||||
|
|
|
@ -113,6 +113,7 @@ static struct ata_port_operations uli_ops = {
|
||||||
|
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_info uli_port_info = {
|
static struct ata_port_info uli_port_info = {
|
||||||
|
|
|
@ -134,6 +134,7 @@ static struct ata_port_operations svia_sata_ops = {
|
||||||
|
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_info svia_port_info = {
|
static struct ata_port_info svia_port_info = {
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include "scsi.h"
|
#include "scsi.h"
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
|
@ -230,6 +231,7 @@ static struct ata_port_operations vsc_sata_ops = {
|
||||||
.scr_write = vsc_sata_scr_write,
|
.scr_write = vsc_sata_scr_write,
|
||||||
.port_start = ata_port_start,
|
.port_start = ata_port_start,
|
||||||
.port_stop = ata_port_stop,
|
.port_stop = ata_port_stop,
|
||||||
|
.host_stop = ata_host_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __devinit vsc_sata_setup_port(struct ata_ioports *port, unsigned long base)
|
static void __devinit vsc_sata_setup_port(struct ata_ioports *port, unsigned long base)
|
||||||
|
|
|
@ -410,6 +410,7 @@ extern u8 ata_chk_err(struct ata_port *ap);
|
||||||
extern void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf);
|
extern void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf);
|
||||||
extern int ata_port_start (struct ata_port *ap);
|
extern int ata_port_start (struct ata_port *ap);
|
||||||
extern void ata_port_stop (struct ata_port *ap);
|
extern void ata_port_stop (struct ata_port *ap);
|
||||||
|
extern void ata_host_stop (struct ata_host_set *host_set);
|
||||||
extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
|
extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
|
||||||
extern void ata_qc_prep(struct ata_queued_cmd *qc);
|
extern void ata_qc_prep(struct ata_queued_cmd *qc);
|
||||||
extern int ata_qc_issue_prot(struct ata_queued_cmd *qc);
|
extern int ata_qc_issue_prot(struct ata_queued_cmd *qc);
|
||||||
|
|
Loading…
Reference in New Issue