Notable changes:
* Updating libata to directly bind with ACPI / runtime power mgmt.
This is a pre-req for SATA ZPODD (CD-ROM power management).
Touches ACPI (exports++) and SCSI in minor ways. Has been in linux-next
for weeks.
The rest of this should come via SCSI tree, as it involves a lot of updates
to the 'sr' driver etc.
Other, minor changes:
* module_pci_driver() removes a lot of common boilerplate from each PCI driver
* minor coding style, whitespace cleanups
* pata_pcmcia bug fix, caught by Coccinelle
* pata_imx, sata_dwc_460ex minor vendor updates
* ahci_platform: use simple PM ops, and thereby add hibernation cb's
* Add a few device-specific quirks
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
iQIVAwUAUBBVaCWzCDIBeCsvAQI+5Q/8CuxFaimde21SkPkwopL+Ij3YikgO2h1D
hjRX/2HodFIswmyjOvitX7mgaa0ojjU06zR/YJM5e0KQvRJMZxHV0VjRzZQz8Sq7
ELoC7De4NLyz/2hFvwyshQuamaYI4145tS7oeQAF4o3SnOVwtDiQGuxK4aVaDlKt
nRu+VBZ2qGD7TsiSu6eKtP1v4QRjy/5jYWlxqQH2Hr81FeP6gO5OlHiCrnAKqBCh
QiXV/PG/GRr63mB4AHMn/G9rvtz3G16IgjcXHB+6jWnJOVUAwjbL5N4bSD6fP4w5
ecaL6V1UYLmsJQlSEVDayV1Kay1F7H478GKzCiiakZMlp9pu0u5dqJD+uBdzFy5W
EuemeBMSOV9wuAg4CosZKgjyxysR8Zs+eYabp1VCLK8Q4hlisporrCYJNGSGErXD
c3CZQ2RVLlbMFRYjqLATe0p4WJd8nBdxvnP6vJ6ua6ArJu7KQ8I/Of0+GRPsQO8i
sDaIz/ycuXskt+iWU15RA8Juzu8DyCwTf7RtriT1Nc03JcOk7tVkoGTBtbgo/PaB
fP5VLveF9KKxZzjPJLBqIVspMbfGSVzoNN5nJFPlIUg6cDdA+60DzgkJjP2vtTnn
px/tGykZAM1fTWCRckTvysRgpfTmcVomeppYsAQqjZ+wH2SOkcscYLEq3l10UMEi
Wjy6DdqFrlU=
=Ou1W
-----END PGP SIGNATURE-----
Merge tag 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
Pull libata updates from Jeff Garzik:
"Notable changes:
- Updating libata to directly bind with ACPI / runtime power mgmt.
This is a pre-req for SATA ZPODD (CD-ROM power management).
Touches ACPI (exports++) and SCSI in minor ways. Has been in
linux-next for weeks.
The rest of this should come via SCSI tree, as it involves a lot of
updates to the 'sr' driver etc.
Other, minor changes:
- module_pci_driver() removes a lot of common boilerplate from each
PCI driver
- minor coding style, whitespace cleanups
- pata_pcmcia bug fix, caught by Coccinelle
- pata_imx, sata_dwc_460ex minor vendor updates
- ahci_platform: use simple PM ops, and thereby add hibernation cb's
- Add a few device-specific quirks"
* tag 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: (23 commits)
[libata] pata_cmd64x: whitespace cleanup
libata-acpi: fix up for acpi_pm_device_sleep_state API
sata_dwc_460ex: device tree may specify dma_channel
ahci, trivial: fixed coding style issues related to braces
ahci_platform: add hibernation callbacks
libata-eh.c: local functions should not be exposed globally
libata-transport.c: local functions should not be exposed globally
sata_dwc_460ex: support hardreset
ata: use module_pci_driver
drivers/ata/pata_pcmcia.c: adjust suspicious bit operation
pata_imx: Convert to clk_prepare_enable/clk_disable_unprepare
ahci: Enable SB600 64bit DMA on MSI K9AGM2 (MS-7327) v2
[libata] Prevent interface errors with Seagate FreeAgent GoFlex
drivers/acpi/glue: revert accidental license-related 6b66d95895
bits
libata-acpi: add missing inlines in libata.h
libata: tell scsi layer device supports runtime power off
libata: detect Device Attention support
libata-acpi: register/unregister device to/from power resource
libata-acpi: add ata port runtime D3Cold support
libata-acpi: set acpi state for SATA port
...
This commit is contained in:
commit
5e23ae4996
79 changed files with 510 additions and 959 deletions
|
@ -39,6 +39,7 @@ int register_acpi_bus_type(struct acpi_bus_type *type)
|
|||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(register_acpi_bus_type);
|
||||
|
||||
int unregister_acpi_bus_type(struct acpi_bus_type *type)
|
||||
{
|
||||
|
@ -54,6 +55,7 @@ int unregister_acpi_bus_type(struct acpi_bus_type *type)
|
|||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(unregister_acpi_bus_type);
|
||||
|
||||
static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type)
|
||||
{
|
||||
|
@ -69,7 +71,6 @@ static struct acpi_bus_type *acpi_get_bus_type(struct bus_type *type)
|
|||
up_read(&bus_type_sem);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(register_acpi_bus_type);
|
||||
|
||||
static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle)
|
||||
{
|
||||
|
@ -86,7 +87,6 @@ static int acpi_find_bridge_device(struct device *dev, acpi_handle * handle)
|
|||
up_read(&bus_type_sem);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(unregister_acpi_bus_type);
|
||||
|
||||
/* Get device's handler per its address under its parent */
|
||||
struct acpi_find_child {
|
||||
|
|
|
@ -392,6 +392,7 @@ void acpi_power_resource_unregister_device(struct device *dev, acpi_handle handl
|
|||
__acpi_power_resource_unregister_device(dev,
|
||||
list->handles[i]);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_power_resource_unregister_device);
|
||||
|
||||
static int __acpi_power_resource_register_device(
|
||||
struct acpi_power_managed_device *powered_device, acpi_handle handle)
|
||||
|
@ -462,6 +463,7 @@ no_power_resource:
|
|||
printk(KERN_WARNING PREFIX "Invalid Power Resource to register!");
|
||||
return -ENODEV;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_power_resource_register_device);
|
||||
|
||||
/**
|
||||
* acpi_device_sleep_wake - execute _DSW (Device Sleep Wake) or (deprecated in
|
||||
|
|
|
@ -809,6 +809,7 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p, int d_max_in)
|
|||
}
|
||||
return d_max;
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_pm_device_sleep_state);
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
|
@ -845,6 +846,7 @@ int acpi_pm_device_run_wake(struct device *phys_dev, bool enable)
|
|||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(acpi_pm_device_run_wake);
|
||||
|
||||
/**
|
||||
* acpi_pm_device_sleep_wake - enable or disable the system wake-up
|
||||
|
|
|
@ -503,21 +503,10 @@ static int acard_ahci_init_one(struct pci_dev *pdev, const struct pci_device_id
|
|||
&acard_ahci_sht);
|
||||
}
|
||||
|
||||
static int __init acard_ahci_init(void)
|
||||
{
|
||||
return pci_register_driver(&acard_ahci_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit acard_ahci_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&acard_ahci_pci_driver);
|
||||
}
|
||||
module_pci_driver(acard_ahci_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Jeff Garzik");
|
||||
MODULE_DESCRIPTION("ACard AHCI SATA low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, acard_ahci_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(acard_ahci_init);
|
||||
module_exit(acard_ahci_exit);
|
||||
|
|
|
@ -105,31 +105,27 @@ static struct ata_port_operations ahci_p5wdh_ops = {
|
|||
|
||||
static const struct ata_port_info ahci_port_info[] = {
|
||||
/* by features */
|
||||
[board_ahci] =
|
||||
{
|
||||
[board_ahci] = {
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_ign_iferr] =
|
||||
{
|
||||
[board_ahci_ign_iferr] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_nosntf] =
|
||||
{
|
||||
[board_ahci_nosntf] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_NO_SNTF),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_yes_fbs] =
|
||||
{
|
||||
[board_ahci_yes_fbs] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_YES_FBS),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
|
@ -137,8 +133,7 @@ static const struct ata_port_info ahci_port_info[] = {
|
|||
.port_ops = &ahci_ops,
|
||||
},
|
||||
/* by chipsets */
|
||||
[board_ahci_mcp65] =
|
||||
{
|
||||
[board_ahci_mcp65] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP |
|
||||
AHCI_HFLAG_YES_NCQ),
|
||||
.flags = AHCI_FLAG_COMMON | ATA_FLAG_NO_DIPM,
|
||||
|
@ -146,24 +141,21 @@ static const struct ata_port_info ahci_port_info[] = {
|
|||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_mcp77] =
|
||||
{
|
||||
[board_ahci_mcp77] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_mcp89] =
|
||||
{
|
||||
[board_ahci_mcp89] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_mv] =
|
||||
{
|
||||
[board_ahci_mv] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
|
||||
AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP),
|
||||
.flags = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA,
|
||||
|
@ -171,8 +163,7 @@ static const struct ata_port_info ahci_port_info[] = {
|
|||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_sb600] =
|
||||
{
|
||||
[board_ahci_sb600] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL |
|
||||
AHCI_HFLAG_NO_MSI | AHCI_HFLAG_SECT255 |
|
||||
AHCI_HFLAG_32BIT_ONLY),
|
||||
|
@ -181,16 +172,14 @@ static const struct ata_port_info ahci_port_info[] = {
|
|||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_pmp_retry_srst_ops,
|
||||
},
|
||||
[board_ahci_sb700] = /* for SB700 and SB800 */
|
||||
{
|
||||
[board_ahci_sb700] = { /* for SB700 and SB800 */
|
||||
AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_pmp_retry_srst_ops,
|
||||
},
|
||||
[board_ahci_vt8251] =
|
||||
{
|
||||
[board_ahci_vt8251] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_PMP),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
|
@ -776,6 +765,22 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
|||
DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
|
||||
},
|
||||
},
|
||||
/*
|
||||
* All BIOS versions for the MSI K9AGM2 (MS-7327) support
|
||||
* 64bit DMA.
|
||||
*
|
||||
* This board also had the typo mentioned above in the
|
||||
* Manufacturer DMI field (fixed in BIOS version 1.5), so
|
||||
* match on DMI_BOARD_VENDOR of "MICRO-STAR INTER" again.
|
||||
*/
|
||||
{
|
||||
.ident = "MSI K9AGM2",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR,
|
||||
"MICRO-STAR INTER"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "MS-7327"),
|
||||
},
|
||||
},
|
||||
/*
|
||||
* All BIOS versions for the Asus M3A support 64bit DMA.
|
||||
* (all release versions from 0301 to 1206 were tested)
|
||||
|
@ -1233,22 +1238,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
&ahci_sht);
|
||||
}
|
||||
|
||||
static int __init ahci_init(void)
|
||||
{
|
||||
return pci_register_driver(&ahci_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit ahci_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&ahci_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(ahci_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Jeff Garzik");
|
||||
MODULE_DESCRIPTION("AHCI SATA low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, ahci_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(ahci_init);
|
||||
module_exit(ahci_exit);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/device.h>
|
||||
|
@ -271,13 +272,10 @@ static int ahci_resume(struct device *dev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dev_pm_ops ahci_pm_ops = {
|
||||
.suspend = &ahci_suspend,
|
||||
.resume = &ahci_resume,
|
||||
};
|
||||
#endif
|
||||
|
||||
SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume);
|
||||
|
||||
static const struct of_device_id ahci_of_match[] = {
|
||||
{ .compatible = "calxeda,hb-ahci", },
|
||||
{ .compatible = "snps,spear-ahci", },
|
||||
|
@ -291,9 +289,7 @@ static struct platform_driver ahci_driver = {
|
|||
.name = "ahci",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = ahci_of_match,
|
||||
#ifdef CONFIG_PM
|
||||
.pm = &ahci_pm_ops,
|
||||
#endif
|
||||
},
|
||||
.id_table = ahci_devtype,
|
||||
};
|
||||
|
|
|
@ -255,17 +255,7 @@ static struct pci_driver ata_generic_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init ata_generic_init(void)
|
||||
{
|
||||
return pci_register_driver(&ata_generic_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit ata_generic_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&ata_generic_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(ata_generic_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for generic ATA");
|
||||
|
@ -273,7 +263,4 @@ MODULE_LICENSE("GPL");
|
|||
MODULE_DEVICE_TABLE(pci, ata_generic);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(ata_generic_init);
|
||||
module_exit(ata_generic_exit);
|
||||
|
||||
module_param(all_generic_ide, int, 0);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <linux/libata.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <scsi/scsi_device.h>
|
||||
#include "libata.h"
|
||||
|
||||
|
@ -48,62 +49,53 @@ static void ata_acpi_clear_gtf(struct ata_device *dev)
|
|||
}
|
||||
|
||||
/**
|
||||
* ata_acpi_associate_sata_port - associate SATA port with ACPI objects
|
||||
* @ap: target SATA port
|
||||
* ata_ap_acpi_handle - provide the acpi_handle for an ata_port
|
||||
* @ap: the acpi_handle returned will correspond to this port
|
||||
*
|
||||
* Look up ACPI objects associated with @ap and initialize acpi_handle
|
||||
* fields of @ap, the port and devices accordingly.
|
||||
*
|
||||
* LOCKING:
|
||||
* EH context.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, -errno on failure.
|
||||
* Returns the acpi_handle for the ACPI namespace object corresponding to
|
||||
* the ata_port passed into the function, or NULL if no such object exists
|
||||
*/
|
||||
void ata_acpi_associate_sata_port(struct ata_port *ap)
|
||||
acpi_handle ata_ap_acpi_handle(struct ata_port *ap)
|
||||
{
|
||||
WARN_ON(!(ap->flags & ATA_FLAG_ACPI_SATA));
|
||||
if (ap->flags & ATA_FLAG_ACPI_SATA)
|
||||
return NULL;
|
||||
|
||||
if (!sata_pmp_attached(ap)) {
|
||||
u64 adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
|
||||
|
||||
ap->link.device->acpi_handle =
|
||||
acpi_get_child(ap->host->acpi_handle, adr);
|
||||
} else {
|
||||
struct ata_link *link;
|
||||
|
||||
ap->link.device->acpi_handle = NULL;
|
||||
|
||||
ata_for_each_link(link, ap, EDGE) {
|
||||
u64 adr = SATA_ADR(ap->port_no, link->pmp);
|
||||
|
||||
link->device->acpi_handle =
|
||||
acpi_get_child(ap->host->acpi_handle, adr);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* If acpi bind operation has already happened, we can get the handle
|
||||
* for the port by checking the corresponding scsi_host device's
|
||||
* firmware node, otherwise we will need to find out the handle from
|
||||
* its parent's acpi node.
|
||||
*/
|
||||
if (ap->scsi_host)
|
||||
return DEVICE_ACPI_HANDLE(&ap->scsi_host->shost_gendev);
|
||||
else
|
||||
return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev),
|
||||
ap->port_no);
|
||||
}
|
||||
EXPORT_SYMBOL(ata_ap_acpi_handle);
|
||||
|
||||
static void ata_acpi_associate_ide_port(struct ata_port *ap)
|
||||
/**
|
||||
* ata_dev_acpi_handle - provide the acpi_handle for an ata_device
|
||||
* @dev: the acpi_device returned will correspond to this port
|
||||
*
|
||||
* Returns the acpi_handle for the ACPI namespace object corresponding to
|
||||
* the ata_device passed into the function, or NULL if no such object exists
|
||||
*/
|
||||
acpi_handle ata_dev_acpi_handle(struct ata_device *dev)
|
||||
{
|
||||
int max_devices, i;
|
||||
acpi_integer adr;
|
||||
struct ata_port *ap = dev->link->ap;
|
||||
|
||||
ap->acpi_handle = acpi_get_child(ap->host->acpi_handle, ap->port_no);
|
||||
if (!ap->acpi_handle)
|
||||
return;
|
||||
|
||||
max_devices = 1;
|
||||
if (ap->flags & ATA_FLAG_SLAVE_POSS)
|
||||
max_devices++;
|
||||
|
||||
for (i = 0; i < max_devices; i++) {
|
||||
struct ata_device *dev = &ap->link.device[i];
|
||||
|
||||
dev->acpi_handle = acpi_get_child(ap->acpi_handle, i);
|
||||
}
|
||||
|
||||
if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0)
|
||||
ap->pflags |= ATA_PFLAG_INIT_GTM_VALID;
|
||||
if (ap->flags & ATA_FLAG_ACPI_SATA) {
|
||||
if (!sata_pmp_attached(ap))
|
||||
adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
|
||||
else
|
||||
adr = SATA_ADR(ap->port_no, dev->link->pmp);
|
||||
return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev), adr);
|
||||
} else
|
||||
return acpi_get_child(ata_ap_acpi_handle(ap), dev->devno);
|
||||
}
|
||||
EXPORT_SYMBOL(ata_dev_acpi_handle);
|
||||
|
||||
/* @ap and @dev are the same as ata_acpi_handle_hotplug() */
|
||||
static void ata_acpi_detach_device(struct ata_port *ap, struct ata_device *dev)
|
||||
|
@ -228,56 +220,6 @@ static const struct acpi_dock_ops ata_acpi_ap_dock_ops = {
|
|||
.uevent = ata_acpi_ap_uevent,
|
||||
};
|
||||
|
||||
/**
|
||||
* ata_acpi_associate - associate ATA host with ACPI objects
|
||||
* @host: target ATA host
|
||||
*
|
||||
* Look up ACPI objects associated with @host and initialize
|
||||
* acpi_handle fields of @host, its ports and devices accordingly.
|
||||
*
|
||||
* LOCKING:
|
||||
* EH context.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, -errno on failure.
|
||||
*/
|
||||
void ata_acpi_associate(struct ata_host *host)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
if (!is_pci_dev(host->dev) || libata_noacpi)
|
||||
return;
|
||||
|
||||
host->acpi_handle = DEVICE_ACPI_HANDLE(host->dev);
|
||||
if (!host->acpi_handle)
|
||||
return;
|
||||
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ata_port *ap = host->ports[i];
|
||||
|
||||
if (host->ports[0]->flags & ATA_FLAG_ACPI_SATA)
|
||||
ata_acpi_associate_sata_port(ap);
|
||||
else
|
||||
ata_acpi_associate_ide_port(ap);
|
||||
|
||||
if (ap->acpi_handle) {
|
||||
/* we might be on a docking station */
|
||||
register_hotplug_dock_device(ap->acpi_handle,
|
||||
&ata_acpi_ap_dock_ops, ap);
|
||||
}
|
||||
|
||||
for (j = 0; j < ata_link_max_devices(&ap->link); j++) {
|
||||
struct ata_device *dev = &ap->link.device[j];
|
||||
|
||||
if (dev->acpi_handle) {
|
||||
/* we might be on a docking station */
|
||||
register_hotplug_dock_device(dev->acpi_handle,
|
||||
&ata_acpi_dev_dock_ops, dev);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_acpi_dissociate - dissociate ATA host from ACPI objects
|
||||
* @host: target ATA host
|
||||
|
@ -299,7 +241,7 @@ void ata_acpi_dissociate(struct ata_host *host)
|
|||
struct ata_port *ap = host->ports[i];
|
||||
const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap);
|
||||
|
||||
if (ap->acpi_handle && gtm)
|
||||
if (ata_ap_acpi_handle(ap) && gtm)
|
||||
ata_acpi_stm(ap, gtm);
|
||||
}
|
||||
}
|
||||
|
@ -324,7 +266,8 @@ int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *gtm)
|
|||
acpi_status status;
|
||||
int rc = 0;
|
||||
|
||||
status = acpi_evaluate_object(ap->acpi_handle, "_GTM", NULL, &output);
|
||||
status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_GTM", NULL,
|
||||
&output);
|
||||
|
||||
rc = -ENOENT;
|
||||
if (status == AE_NOT_FOUND)
|
||||
|
@ -394,7 +337,8 @@ int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm)
|
|||
input.count = 3;
|
||||
input.pointer = in_params;
|
||||
|
||||
status = acpi_evaluate_object(ap->acpi_handle, "_STM", &input, NULL);
|
||||
status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_STM", &input,
|
||||
NULL);
|
||||
|
||||
if (status == AE_NOT_FOUND)
|
||||
return -ENOENT;
|
||||
|
@ -451,7 +395,8 @@ static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf)
|
|||
__func__, ap->port_no);
|
||||
|
||||
/* _GTF has no input parameters */
|
||||
status = acpi_evaluate_object(dev->acpi_handle, "_GTF", NULL, &output);
|
||||
status = acpi_evaluate_object(ata_dev_acpi_handle(dev), "_GTF", NULL,
|
||||
&output);
|
||||
out_obj = dev->gtf_cache = output.pointer;
|
||||
|
||||
if (ACPI_FAILURE(status)) {
|
||||
|
@ -817,7 +762,8 @@ static int ata_acpi_push_id(struct ata_device *dev)
|
|||
|
||||
/* It's OK for _SDD to be missing too. */
|
||||
swap_buf_le16(dev->id, ATA_ID_WORDS);
|
||||
status = acpi_evaluate_object(dev->acpi_handle, "_SDD", &input, NULL);
|
||||
status = acpi_evaluate_object(ata_dev_acpi_handle(dev), "_SDD", &input,
|
||||
NULL);
|
||||
swap_buf_le16(dev->id, ATA_ID_WORDS);
|
||||
|
||||
if (status == AE_NOT_FOUND)
|
||||
|
@ -867,7 +813,7 @@ void ata_acpi_on_resume(struct ata_port *ap)
|
|||
const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap);
|
||||
struct ata_device *dev;
|
||||
|
||||
if (ap->acpi_handle && gtm) {
|
||||
if (ata_ap_acpi_handle(ap) && gtm) {
|
||||
/* _GTM valid */
|
||||
|
||||
/* restore timing parameters */
|
||||
|
@ -907,23 +853,39 @@ void ata_acpi_on_resume(struct ata_port *ap)
|
|||
void ata_acpi_set_state(struct ata_port *ap, pm_message_t state)
|
||||
{
|
||||
struct ata_device *dev;
|
||||
|
||||
if (!ap->acpi_handle || (ap->flags & ATA_FLAG_ACPI_SATA))
|
||||
return;
|
||||
acpi_handle handle;
|
||||
int acpi_state;
|
||||
|
||||
/* channel first and then drives for power on and vica versa
|
||||
for power off */
|
||||
if (state.event == PM_EVENT_ON)
|
||||
acpi_bus_set_power(ap->acpi_handle, ACPI_STATE_D0);
|
||||
handle = ata_ap_acpi_handle(ap);
|
||||
if (handle && state.event == PM_EVENT_ON)
|
||||
acpi_bus_set_power(handle, ACPI_STATE_D0);
|
||||
|
||||
ata_for_each_dev(dev, &ap->link, ENABLED) {
|
||||
if (dev->acpi_handle)
|
||||
acpi_bus_set_power(dev->acpi_handle,
|
||||
state.event == PM_EVENT_ON ?
|
||||
ACPI_STATE_D0 : ACPI_STATE_D3);
|
||||
handle = ata_dev_acpi_handle(dev);
|
||||
if (!handle)
|
||||
continue;
|
||||
|
||||
if (state.event != PM_EVENT_ON) {
|
||||
acpi_state = acpi_pm_device_sleep_state(
|
||||
&dev->sdev->sdev_gendev, NULL, ACPI_STATE_D3);
|
||||
if (acpi_state > 0)
|
||||
acpi_bus_set_power(handle, acpi_state);
|
||||
/* TBD: need to check if it's runtime pm request */
|
||||
acpi_pm_device_run_wake(
|
||||
&dev->sdev->sdev_gendev, true);
|
||||
} else {
|
||||
/* Ditto */
|
||||
acpi_pm_device_run_wake(
|
||||
&dev->sdev->sdev_gendev, false);
|
||||
acpi_bus_set_power(handle, ACPI_STATE_D0);
|
||||
}
|
||||
}
|
||||
if (state.event != PM_EVENT_ON)
|
||||
acpi_bus_set_power(ap->acpi_handle, ACPI_STATE_D3);
|
||||
|
||||
handle = ata_ap_acpi_handle(ap);
|
||||
if (handle && state.event != PM_EVENT_ON)
|
||||
acpi_bus_set_power(handle, ACPI_STATE_D3);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -948,7 +910,7 @@ int ata_acpi_on_devcfg(struct ata_device *dev)
|
|||
int nr_executed = 0;
|
||||
int rc;
|
||||
|
||||
if (!dev->acpi_handle)
|
||||
if (!ata_dev_acpi_handle(dev))
|
||||
return 0;
|
||||
|
||||
/* do we need to do _GTF? */
|
||||
|
@ -994,7 +956,6 @@ int ata_acpi_on_devcfg(struct ata_device *dev)
|
|||
}
|
||||
|
||||
ata_dev_warn(dev, "ACPI: failed the second time, disabled\n");
|
||||
dev->acpi_handle = NULL;
|
||||
|
||||
/* We can safely continue if no _GTF command has been executed
|
||||
* and port is not frozen.
|
||||
|
@ -1018,3 +979,218 @@ void ata_acpi_on_disable(struct ata_device *dev)
|
|||
{
|
||||
ata_acpi_clear_gtf(dev);
|
||||
}
|
||||
|
||||
static void ata_acpi_wake_dev(acpi_handle handle, u32 event, void *context)
|
||||
{
|
||||
struct ata_device *ata_dev = context;
|
||||
|
||||
if (event == ACPI_NOTIFY_DEVICE_WAKE && ata_dev &&
|
||||
pm_runtime_suspended(&ata_dev->sdev->sdev_gendev))
|
||||
scsi_autopm_get_device(ata_dev->sdev);
|
||||
}
|
||||
|
||||
static void ata_acpi_add_pm_notifier(struct ata_device *dev)
|
||||
{
|
||||
struct acpi_device *acpi_dev;
|
||||
acpi_handle handle;
|
||||
acpi_status status;
|
||||
|
||||
handle = ata_dev_acpi_handle(dev);
|
||||
if (!handle)
|
||||
return;
|
||||
|
||||
status = acpi_bus_get_device(handle, &acpi_dev);
|
||||
if (ACPI_FAILURE(status))
|
||||
return;
|
||||
|
||||
if (dev->sdev->can_power_off) {
|
||||
acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
|
||||
ata_acpi_wake_dev, dev);
|
||||
device_set_run_wake(&dev->sdev->sdev_gendev, true);
|
||||
}
|
||||
}
|
||||
|
||||
static void ata_acpi_remove_pm_notifier(struct ata_device *dev)
|
||||
{
|
||||
struct acpi_device *acpi_dev;
|
||||
acpi_handle handle;
|
||||
acpi_status status;
|
||||
|
||||
handle = ata_dev_acpi_handle(dev);
|
||||
if (!handle)
|
||||
return;
|
||||
|
||||
status = acpi_bus_get_device(handle, &acpi_dev);
|
||||
if (ACPI_FAILURE(status))
|
||||
return;
|
||||
|
||||
if (dev->sdev->can_power_off) {
|
||||
device_set_run_wake(&dev->sdev->sdev_gendev, false);
|
||||
acpi_remove_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
|
||||
ata_acpi_wake_dev);
|
||||
}
|
||||
}
|
||||
|
||||
static void ata_acpi_register_power_resource(struct ata_device *dev)
|
||||
{
|
||||
struct scsi_device *sdev = dev->sdev;
|
||||
acpi_handle handle;
|
||||
struct device *device;
|
||||
|
||||
handle = ata_dev_acpi_handle(dev);
|
||||
if (!handle)
|
||||
return;
|
||||
|
||||
device = &sdev->sdev_gendev;
|
||||
|
||||
acpi_power_resource_register_device(device, handle);
|
||||
}
|
||||
|
||||
static void ata_acpi_unregister_power_resource(struct ata_device *dev)
|
||||
{
|
||||
struct scsi_device *sdev = dev->sdev;
|
||||
acpi_handle handle;
|
||||
struct device *device;
|
||||
|
||||
handle = ata_dev_acpi_handle(dev);
|
||||
if (!handle)
|
||||
return;
|
||||
|
||||
device = &sdev->sdev_gendev;
|
||||
|
||||
acpi_power_resource_unregister_device(device, handle);
|
||||
}
|
||||
|
||||
void ata_acpi_bind(struct ata_device *dev)
|
||||
{
|
||||
ata_acpi_add_pm_notifier(dev);
|
||||
ata_acpi_register_power_resource(dev);
|
||||
}
|
||||
|
||||
void ata_acpi_unbind(struct ata_device *dev)
|
||||
{
|
||||
ata_acpi_remove_pm_notifier(dev);
|
||||
ata_acpi_unregister_power_resource(dev);
|
||||
}
|
||||
|
||||
static int compat_pci_ata(struct ata_port *ap)
|
||||
{
|
||||
struct device *dev = ap->tdev.parent;
|
||||
struct pci_dev *pdev;
|
||||
|
||||
if (!is_pci_dev(dev))
|
||||
return 0;
|
||||
|
||||
pdev = to_pci_dev(dev);
|
||||
|
||||
if ((pdev->class >> 8) != PCI_CLASS_STORAGE_SATA &&
|
||||
(pdev->class >> 8) != PCI_CLASS_STORAGE_IDE)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ata_acpi_bind_host(struct ata_port *ap, acpi_handle *handle)
|
||||
{
|
||||
if (ap->flags & ATA_FLAG_ACPI_SATA)
|
||||
return -ENODEV;
|
||||
|
||||
*handle = acpi_get_child(DEVICE_ACPI_HANDLE(ap->tdev.parent),
|
||||
ap->port_no);
|
||||
|
||||
if (!*handle)
|
||||
return -ENODEV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ata_acpi_bind_device(struct ata_port *ap, struct scsi_device *sdev,
|
||||
acpi_handle *handle)
|
||||
{
|
||||
struct ata_device *ata_dev;
|
||||
acpi_status status;
|
||||
struct acpi_device *acpi_dev;
|
||||
struct acpi_device_power_state *states;
|
||||
|
||||
if (ap->flags & ATA_FLAG_ACPI_SATA)
|
||||
ata_dev = &ap->link.device[sdev->channel];
|
||||
else
|
||||
ata_dev = &ap->link.device[sdev->id];
|
||||
|
||||
*handle = ata_dev_acpi_handle(ata_dev);
|
||||
|
||||
if (!*handle)
|
||||
return -ENODEV;
|
||||
|
||||
status = acpi_bus_get_device(*handle, &acpi_dev);
|
||||
if (ACPI_FAILURE(status))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* If firmware has _PS3 or _PR3 for this device,
|
||||
* and this ata ODD device support device attention,
|
||||
* it means this device can be powered off
|
||||
*/
|
||||
states = acpi_dev->power.states;
|
||||
if ((states[ACPI_STATE_D3_HOT].flags.valid ||
|
||||
states[ACPI_STATE_D3_COLD].flags.explicit_set) &&
|
||||
ata_dev->flags & ATA_DFLAG_DA)
|
||||
sdev->can_power_off = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int is_ata_port(const struct device *dev)
|
||||
{
|
||||
return dev->type == &ata_port_type;
|
||||
}
|
||||
|
||||
static struct ata_port *dev_to_ata_port(struct device *dev)
|
||||
{
|
||||
while (!is_ata_port(dev)) {
|
||||
if (!dev->parent)
|
||||
return NULL;
|
||||
dev = dev->parent;
|
||||
}
|
||||
return to_ata_port(dev);
|
||||
}
|
||||
|
||||
static int ata_acpi_find_device(struct device *dev, acpi_handle *handle)
|
||||
{
|
||||
struct ata_port *ap = dev_to_ata_port(dev);
|
||||
|
||||
if (!ap)
|
||||
return -ENODEV;
|
||||
|
||||
if (!compat_pci_ata(ap))
|
||||
return -ENODEV;
|
||||
|
||||
if (scsi_is_host_device(dev))
|
||||
return ata_acpi_bind_host(ap, handle);
|
||||
else if (scsi_is_sdev_device(dev)) {
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
|
||||
return ata_acpi_bind_device(ap, sdev, handle);
|
||||
} else
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int ata_acpi_find_dummy(struct device *dev, acpi_handle *handle)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static struct acpi_bus_type ata_acpi_bus = {
|
||||
.find_bridge = ata_acpi_find_dummy,
|
||||
.find_device = ata_acpi_find_device,
|
||||
};
|
||||
|
||||
int ata_acpi_register(void)
|
||||
{
|
||||
return scsi_register_acpi_bus_type(&ata_acpi_bus);
|
||||
}
|
||||
|
||||
void ata_acpi_unregister(void)
|
||||
{
|
||||
scsi_unregister_acpi_bus_type(&ata_acpi_bus);
|
||||
}
|
||||
|
|
|
@ -2376,6 +2376,9 @@ int ata_dev_configure(struct ata_device *dev)
|
|||
dma_dir_string = ", DMADIR";
|
||||
}
|
||||
|
||||
if (ata_id_has_da(dev->id))
|
||||
dev->flags |= ATA_DFLAG_DA;
|
||||
|
||||
/* print device info to dmesg */
|
||||
if (ata_msg_drv(ap) && print_info)
|
||||
ata_dev_info(dev,
|
||||
|
@ -4128,6 +4131,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
|||
|
||||
/* Devices which aren't very happy with higher link speeds */
|
||||
{ "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },
|
||||
{ "Seagate FreeAgent GoFlex", NULL, ATA_HORKAGE_1_5_GBPS, },
|
||||
|
||||
/*
|
||||
* Devices which choke on SETXFER. Applies only if both the
|
||||
|
@ -5290,8 +5294,6 @@ static int ata_port_request_pm(struct ata_port *ap, pm_message_t mesg,
|
|||
return rc;
|
||||
}
|
||||
|
||||
#define to_ata_port(d) container_of(d, struct ata_port, tdev)
|
||||
|
||||
static int ata_port_suspend_common(struct device *dev, pm_message_t mesg)
|
||||
{
|
||||
struct ata_port *ap = to_ata_port(dev);
|
||||
|
@ -6053,9 +6055,6 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
|
|||
if (rc)
|
||||
goto err_tadd;
|
||||
|
||||
/* associate with ACPI nodes */
|
||||
ata_acpi_associate(host);
|
||||
|
||||
/* set cable, sata_spd_limit and report */
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ata_port *ap = host->ports[i];
|
||||
|
@ -6515,6 +6514,8 @@ static int __init ata_init(void)
|
|||
|
||||
ata_parse_force_param();
|
||||
|
||||
ata_acpi_register();
|
||||
|
||||
rc = ata_sff_init();
|
||||
if (rc) {
|
||||
kfree(ata_force_tbl);
|
||||
|
@ -6541,6 +6542,7 @@ static void __exit ata_exit(void)
|
|||
ata_release_transport(ata_scsi_transport_template);
|
||||
libata_transport_exit();
|
||||
ata_sff_exit();
|
||||
ata_acpi_unregister();
|
||||
kfree(ata_force_tbl);
|
||||
}
|
||||
|
||||
|
|
|
@ -419,7 +419,7 @@ int ata_ering_map(struct ata_ering *ering,
|
|||
return rc;
|
||||
}
|
||||
|
||||
int ata_ering_clear_cb(struct ata_ering_entry *ent, void *void_arg)
|
||||
static int ata_ering_clear_cb(struct ata_ering_entry *ent, void *void_arg)
|
||||
{
|
||||
ent->eflags |= ATA_EFLAG_OLD_ER;
|
||||
return 0;
|
||||
|
|
|
@ -529,8 +529,6 @@ int sata_pmp_attach(struct ata_device *dev)
|
|||
ata_for_each_link(tlink, ap, EDGE)
|
||||
sata_link_init_spd(tlink);
|
||||
|
||||
ata_acpi_associate_sata_port(ap);
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
|
@ -570,8 +568,6 @@ static void sata_pmp_detach(struct ata_device *dev)
|
|||
ap->nr_pmp_links = 0;
|
||||
link->pmp = 0;
|
||||
spin_unlock_irqrestore(ap->lock, flags);
|
||||
|
||||
ata_acpi_associate_sata_port(ap);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -3445,6 +3445,7 @@ void ata_scsi_scan_host(struct ata_port *ap, int sync)
|
|||
if (!IS_ERR(sdev)) {
|
||||
dev->sdev = sdev;
|
||||
scsi_device_put(sdev);
|
||||
ata_acpi_bind(dev);
|
||||
} else {
|
||||
dev->sdev = NULL;
|
||||
}
|
||||
|
@ -3541,6 +3542,8 @@ static void ata_scsi_remove_dev(struct ata_device *dev)
|
|||
mutex_lock(&ap->scsi_host->scan_mutex);
|
||||
spin_lock_irqsave(ap->lock, flags);
|
||||
|
||||
ata_acpi_unbind(dev);
|
||||
|
||||
/* clearing dev->sdev is protected by host lock */
|
||||
sdev = dev->sdev;
|
||||
dev->sdev = NULL;
|
||||
|
|
|
@ -232,7 +232,7 @@ static void ata_tport_release(struct device *dev)
|
|||
* Returns:
|
||||
* %1 if the device represents a ATA Port, %0 else
|
||||
*/
|
||||
int ata_is_port(const struct device *dev)
|
||||
static int ata_is_port(const struct device *dev)
|
||||
{
|
||||
return dev->release == ata_tport_release;
|
||||
}
|
||||
|
@ -355,7 +355,7 @@ static void ata_tlink_release(struct device *dev)
|
|||
* Returns:
|
||||
* %1 if the device represents a ATA link, %0 else
|
||||
*/
|
||||
int ata_is_link(const struct device *dev)
|
||||
static int ata_is_link(const struct device *dev)
|
||||
{
|
||||
return dev->release == ata_tlink_release;
|
||||
}
|
||||
|
@ -572,7 +572,7 @@ static void ata_tdev_release(struct device *dev)
|
|||
* Returns:
|
||||
* %1 if the device represents a ATA device, %0 else
|
||||
*/
|
||||
int ata_is_ata_dev(const struct device *dev)
|
||||
static int ata_is_ata_dev(const struct device *dev)
|
||||
{
|
||||
return dev->release == ata_tdev_release;
|
||||
}
|
||||
|
|
|
@ -107,21 +107,22 @@ extern const char *sata_spd_string(unsigned int spd);
|
|||
extern int ata_port_probe(struct ata_port *ap);
|
||||
extern void __ata_port_probe(struct ata_port *ap);
|
||||
|
||||
#define to_ata_port(d) container_of(d, struct ata_port, tdev)
|
||||
|
||||
/* libata-acpi.c */
|
||||
#ifdef CONFIG_ATA_ACPI
|
||||
extern unsigned int ata_acpi_gtf_filter;
|
||||
|
||||
extern void ata_acpi_associate_sata_port(struct ata_port *ap);
|
||||
extern void ata_acpi_associate(struct ata_host *host);
|
||||
extern void ata_acpi_dissociate(struct ata_host *host);
|
||||
extern int ata_acpi_on_suspend(struct ata_port *ap);
|
||||
extern void ata_acpi_on_resume(struct ata_port *ap);
|
||||
extern int ata_acpi_on_devcfg(struct ata_device *dev);
|
||||
extern void ata_acpi_on_disable(struct ata_device *dev);
|
||||
extern void ata_acpi_set_state(struct ata_port *ap, pm_message_t state);
|
||||
extern int ata_acpi_register(void);
|
||||
extern void ata_acpi_unregister(void);
|
||||
extern void ata_acpi_bind(struct ata_device *dev);
|
||||
extern void ata_acpi_unbind(struct ata_device *dev);
|
||||
#else
|
||||
static inline void ata_acpi_associate_sata_port(struct ata_port *ap) { }
|
||||
static inline void ata_acpi_associate(struct ata_host *host) { }
|
||||
static inline void ata_acpi_dissociate(struct ata_host *host) { }
|
||||
static inline int ata_acpi_on_suspend(struct ata_port *ap) { return 0; }
|
||||
static inline void ata_acpi_on_resume(struct ata_port *ap) { }
|
||||
|
@ -129,6 +130,10 @@ static inline int ata_acpi_on_devcfg(struct ata_device *dev) { return 0; }
|
|||
static inline void ata_acpi_on_disable(struct ata_device *dev) { }
|
||||
static inline void ata_acpi_set_state(struct ata_port *ap,
|
||||
pm_message_t state) { }
|
||||
static inline int ata_acpi_register(void) { return 0; }
|
||||
static inline void ata_acpi_unregister(void) { }
|
||||
static inline void ata_acpi_bind(struct ata_device *dev) { }
|
||||
static inline void ata_acpi_unbind(struct ata_device *dev) { }
|
||||
#endif
|
||||
|
||||
/* libata-scsi.c */
|
||||
|
|
|
@ -39,7 +39,7 @@ static int pacpi_pre_reset(struct ata_link *link, unsigned long deadline)
|
|||
{
|
||||
struct ata_port *ap = link->ap;
|
||||
struct pata_acpi *acpi = ap->private_data;
|
||||
if (ap->acpi_handle == NULL || ata_acpi_gtm(ap, &acpi->gtm) < 0)
|
||||
if (ata_ap_acpi_handle(ap) == NULL || ata_acpi_gtm(ap, &acpi->gtm) < 0)
|
||||
return -ENODEV;
|
||||
|
||||
return ata_sff_prereset(link, deadline);
|
||||
|
@ -195,7 +195,7 @@ static int pacpi_port_start(struct ata_port *ap)
|
|||
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
|
||||
struct pata_acpi *acpi;
|
||||
|
||||
if (ap->acpi_handle == NULL)
|
||||
if (ata_ap_acpi_handle(ap) == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
acpi = ap->private_data = devm_kzalloc(&pdev->dev, sizeof(struct pata_acpi), GFP_KERNEL);
|
||||
|
@ -273,22 +273,10 @@ static struct pci_driver pacpi_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init pacpi_init(void)
|
||||
{
|
||||
return pci_register_driver(&pacpi_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit pacpi_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&pacpi_pci_driver);
|
||||
}
|
||||
|
||||
module_init(pacpi_init);
|
||||
module_exit(pacpi_exit);
|
||||
module_pci_driver(pacpi_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for ATA in ACPI mode");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, pacpi_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -632,21 +632,10 @@ static struct pci_driver amd_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init amd_init(void)
|
||||
{
|
||||
return pci_register_driver(&amd_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit amd_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&amd_pci_driver);
|
||||
}
|
||||
module_pci_driver(amd_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for AMD and Nvidia PATA IDE");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, amd);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(amd_init);
|
||||
module_exit(amd_exit);
|
||||
|
|
|
@ -451,18 +451,7 @@ static struct pci_driver artop_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init artop_init(void)
|
||||
{
|
||||
return pci_register_driver(&artop_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit artop_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&artop_pci_driver);
|
||||
}
|
||||
|
||||
module_init(artop_init);
|
||||
module_exit(artop_exit);
|
||||
module_pci_driver(artop_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox, Bartlomiej Zolnierkiewicz");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for ARTOP PATA");
|
||||
|
|
|
@ -289,22 +289,10 @@ static struct pci_driver atiixp_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init atiixp_init(void)
|
||||
{
|
||||
return pci_register_driver(&atiixp_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit atiixp_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&atiixp_pci_driver);
|
||||
}
|
||||
module_pci_driver(atiixp_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for ATI IXP200/300/400");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, atiixp);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(atiixp_init);
|
||||
module_exit(atiixp_exit);
|
||||
|
|
|
@ -565,21 +565,10 @@ static struct pci_driver atp867x_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init atp867x_init(void)
|
||||
{
|
||||
return pci_register_driver(&atp867x_driver);
|
||||
}
|
||||
|
||||
static void __exit atp867x_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&atp867x_driver);
|
||||
}
|
||||
module_pci_driver(atp867x_driver);
|
||||
|
||||
MODULE_AUTHOR("John(Jung-Ik) Lee, Google Inc.");
|
||||
MODULE_DESCRIPTION("low level driver for Artop/Acard 867x ATA controller");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, atp867x_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(atp867x_init);
|
||||
module_exit(atp867x_exit);
|
||||
|
|
|
@ -263,21 +263,10 @@ static struct pci_driver cmd640_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cmd640_init(void)
|
||||
{
|
||||
return pci_register_driver(&cmd640_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit cmd640_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cmd640_pci_driver);
|
||||
}
|
||||
module_pci_driver(cmd640_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for CMD640 PATA controllers");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, cmd640);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cmd640_init);
|
||||
module_exit(cmd640_exit);
|
||||
|
|
|
@ -423,7 +423,7 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
.port_ops = &cmd648_port_ops
|
||||
}
|
||||
};
|
||||
const struct ata_port_info *ppi[] = {
|
||||
const struct ata_port_info *ppi[] = {
|
||||
&cmd_info[id->driver_data],
|
||||
&cmd_info[id->driver_data],
|
||||
NULL
|
||||
|
@ -478,7 +478,7 @@ static int cmd64x_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
if (port_ok && cntrl_ch0_ok && !(reg & CNTRL_CH0)) {
|
||||
dev_printk(KERN_NOTICE, &pdev->dev, "Primary port is disabled\n");
|
||||
ppi[0] = &ata_dummy_port_info;
|
||||
|
||||
|
||||
}
|
||||
if (port_ok && !(reg & CNTRL_CH1)) {
|
||||
dev_printk(KERN_NOTICE, &pdev->dev, "Secondary port is disabled\n");
|
||||
|
@ -525,21 +525,10 @@ static struct pci_driver cmd64x_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cmd64x_init(void)
|
||||
{
|
||||
return pci_register_driver(&cmd64x_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit cmd64x_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cmd64x_pci_driver);
|
||||
}
|
||||
module_pci_driver(cmd64x_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for CMD64x series PATA controllers");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, cmd64x);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cmd64x_init);
|
||||
module_exit(cmd64x_exit);
|
||||
|
|
|
@ -302,22 +302,10 @@ static struct pci_driver cs5520_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cs5520_init(void)
|
||||
{
|
||||
return pci_register_driver(&cs5520_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit cs5520_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cs5520_pci_driver);
|
||||
}
|
||||
module_pci_driver(cs5520_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Cyrix CS5510/5520");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, pata_cs5520);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cs5520_init);
|
||||
module_exit(cs5520_exit);
|
||||
|
||||
|
|
|
@ -363,21 +363,10 @@ static struct pci_driver cs5530_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cs5530_init(void)
|
||||
{
|
||||
return pci_register_driver(&cs5530_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit cs5530_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cs5530_pci_driver);
|
||||
}
|
||||
module_pci_driver(cs5530_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the Cyrix/NS/AMD 5530");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, cs5530);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cs5530_init);
|
||||
module_exit(cs5530_exit);
|
||||
|
|
|
@ -207,21 +207,10 @@ static struct pci_driver cs5535_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cs5535_init(void)
|
||||
{
|
||||
return pci_register_driver(&cs5535_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit cs5535_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cs5535_pci_driver);
|
||||
}
|
||||
module_pci_driver(cs5535_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox, Jens Altmann, Wolfgan Zuleger, Alexander Kiausch");
|
||||
MODULE_DESCRIPTION("low-level driver for the NS/AMD 5535");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, cs5535);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cs5535_init);
|
||||
module_exit(cs5535_exit);
|
||||
|
|
|
@ -274,21 +274,10 @@ static struct pci_driver cs5536_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cs5536_init(void)
|
||||
{
|
||||
return pci_register_driver(&cs5536_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit cs5536_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cs5536_pci_driver);
|
||||
}
|
||||
module_pci_driver(cs5536_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Martin K. Petersen");
|
||||
MODULE_DESCRIPTION("low-level driver for the CS5536 IDE controller");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, cs5536);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cs5536_init);
|
||||
module_exit(cs5536_exit);
|
||||
|
|
|
@ -158,23 +158,10 @@ static struct pci_driver cy82c693_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init cy82c693_init(void)
|
||||
{
|
||||
return pci_register_driver(&cy82c693_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit cy82c693_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&cy82c693_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(cy82c693_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the CY82C693 PATA controller");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, cy82c693);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(cy82c693_init);
|
||||
module_exit(cy82c693_exit);
|
||||
|
|
|
@ -295,22 +295,10 @@ static struct pci_driver efar_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init efar_init(void)
|
||||
{
|
||||
return pci_register_driver(&efar_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit efar_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&efar_pci_driver);
|
||||
}
|
||||
|
||||
module_init(efar_init);
|
||||
module_exit(efar_exit);
|
||||
module_pci_driver(efar_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for EFAR PIIX clones");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, efar_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -418,21 +418,10 @@ static struct pci_driver hpt36x_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init hpt36x_init(void)
|
||||
{
|
||||
return pci_register_driver(&hpt36x_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit hpt36x_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&hpt36x_pci_driver);
|
||||
}
|
||||
module_pci_driver(hpt36x_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the Highpoint HPT366/368");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, hpt36x);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(hpt36x_init);
|
||||
module_exit(hpt36x_exit);
|
||||
|
|
|
@ -1058,21 +1058,10 @@ static struct pci_driver hpt37x_pci_driver = {
|
|||
.remove = ata_pci_remove_one
|
||||
};
|
||||
|
||||
static int __init hpt37x_init(void)
|
||||
{
|
||||
return pci_register_driver(&hpt37x_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit hpt37x_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&hpt37x_pci_driver);
|
||||
}
|
||||
module_pci_driver(hpt37x_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the Highpoint HPT37x/30x");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, hpt37x);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(hpt37x_init);
|
||||
module_exit(hpt37x_exit);
|
||||
|
|
|
@ -621,21 +621,10 @@ static struct pci_driver hpt3x2n_pci_driver = {
|
|||
.remove = ata_pci_remove_one
|
||||
};
|
||||
|
||||
static int __init hpt3x2n_init(void)
|
||||
{
|
||||
return pci_register_driver(&hpt3x2n_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit hpt3x2n_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&hpt3x2n_pci_driver);
|
||||
}
|
||||
module_pci_driver(hpt3x2n_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the Highpoint HPT3xxN");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, hpt3x2n);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(hpt3x2n_init);
|
||||
module_exit(hpt3x2n_exit);
|
||||
|
|
|
@ -284,23 +284,10 @@ static struct pci_driver hpt3x3_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init hpt3x3_init(void)
|
||||
{
|
||||
return pci_register_driver(&hpt3x3_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit hpt3x3_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&hpt3x3_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(hpt3x3_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the Highpoint HPT343/363");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, hpt3x3);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(hpt3x3_init);
|
||||
module_exit(hpt3x3_exit);
|
||||
|
|
|
@ -118,7 +118,7 @@ static int __devinit pata_imx_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(priv->clk);
|
||||
}
|
||||
|
||||
clk_enable(priv->clk);
|
||||
clk_prepare_enable(priv->clk);
|
||||
|
||||
host = ata_host_alloc(&pdev->dev, 1);
|
||||
if (!host)
|
||||
|
@ -162,7 +162,7 @@ static int __devinit pata_imx_probe(struct platform_device *pdev)
|
|||
&pata_imx_sht);
|
||||
|
||||
free_priv:
|
||||
clk_disable(priv->clk);
|
||||
clk_disable_unprepare(priv->clk);
|
||||
clk_put(priv->clk);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ static int __devexit pata_imx_remove(struct platform_device *pdev)
|
|||
|
||||
__raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN);
|
||||
|
||||
clk_disable(priv->clk);
|
||||
clk_disable_unprepare(priv->clk);
|
||||
clk_put(priv->clk);
|
||||
|
||||
return 0;
|
||||
|
@ -194,7 +194,7 @@ static int pata_imx_suspend(struct device *dev)
|
|||
__raw_writel(0, priv->host_regs + PATA_IMX_ATA_INT_EN);
|
||||
priv->ata_ctl =
|
||||
__raw_readl(priv->host_regs + PATA_IMX_ATA_CONTROL);
|
||||
clk_disable(priv->clk);
|
||||
clk_disable_unprepare(priv->clk);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -205,7 +205,7 @@ static int pata_imx_resume(struct device *dev)
|
|||
struct ata_host *host = dev_get_drvdata(dev);
|
||||
struct pata_imx_priv *priv = host->private_data;
|
||||
|
||||
clk_enable(priv->clk);
|
||||
clk_prepare_enable(priv->clk);
|
||||
|
||||
__raw_writel(priv->ata_ctl, priv->host_regs + PATA_IMX_ATA_CONTROL);
|
||||
|
||||
|
|
|
@ -290,18 +290,7 @@ static struct pci_driver it8213_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init it8213_init(void)
|
||||
{
|
||||
return pci_register_driver(&it8213_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit it8213_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&it8213_pci_driver);
|
||||
}
|
||||
|
||||
module_init(it8213_init);
|
||||
module_exit(it8213_exit);
|
||||
module_pci_driver(it8213_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for the ITE 8213");
|
||||
|
|
|
@ -972,15 +972,7 @@ static struct pci_driver it821x_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init it821x_init(void)
|
||||
{
|
||||
return pci_register_driver(&it821x_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit it821x_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&it821x_pci_driver);
|
||||
}
|
||||
module_pci_driver(it821x_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for the IT8211/IT8212 IDE RAID controller");
|
||||
|
@ -988,9 +980,5 @@ MODULE_LICENSE("GPL");
|
|||
MODULE_DEVICE_TABLE(pci, it821x);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
||||
module_param_named(noraid, it8212_noraid, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(noraid, "Force card into bypass mode");
|
||||
|
||||
module_init(it821x_init);
|
||||
module_exit(it821x_exit);
|
||||
|
|
|
@ -164,18 +164,7 @@ static struct pci_driver jmicron_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init jmicron_init(void)
|
||||
{
|
||||
return pci_register_driver(&jmicron_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit jmicron_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&jmicron_pci_driver);
|
||||
}
|
||||
|
||||
module_init(jmicron_init);
|
||||
module_exit(jmicron_exit);
|
||||
module_pci_driver(jmicron_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for Jmicron PATA ports");
|
||||
|
|
|
@ -178,22 +178,10 @@ static struct pci_driver marvell_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init marvell_init(void)
|
||||
{
|
||||
return pci_register_driver(&marvell_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit marvell_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&marvell_pci_driver);
|
||||
}
|
||||
|
||||
module_init(marvell_init);
|
||||
module_exit(marvell_exit);
|
||||
module_pci_driver(marvell_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for Marvell ATA in legacy mode");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, marvell_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -230,21 +230,10 @@ static struct pci_driver mpiix_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init mpiix_init(void)
|
||||
{
|
||||
return pci_register_driver(&mpiix_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit mpiix_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&mpiix_pci_driver);
|
||||
}
|
||||
module_pci_driver(mpiix_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Intel MPIIX");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, mpiix);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(mpiix_init);
|
||||
module_exit(mpiix_exit);
|
||||
|
|
|
@ -99,22 +99,10 @@ static struct pci_driver netcell_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init netcell_init(void)
|
||||
{
|
||||
return pci_register_driver(&netcell_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit netcell_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&netcell_pci_driver);
|
||||
}
|
||||
|
||||
module_init(netcell_init);
|
||||
module_exit(netcell_exit);
|
||||
module_pci_driver(netcell_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for Netcell PATA RAID");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, netcell_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -190,21 +190,10 @@ static struct pci_driver ninja32_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init ninja32_init(void)
|
||||
{
|
||||
return pci_register_driver(&ninja32_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit ninja32_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&ninja32_pci_driver);
|
||||
}
|
||||
module_pci_driver(ninja32_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Ninja32 ATA");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, ninja32);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(ninja32_init);
|
||||
module_exit(ninja32_exit);
|
||||
|
|
|
@ -168,21 +168,10 @@ static struct pci_driver ns87410_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init ns87410_init(void)
|
||||
{
|
||||
return pci_register_driver(&ns87410_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit ns87410_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&ns87410_pci_driver);
|
||||
}
|
||||
module_pci_driver(ns87410_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Nat Semi 87410");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, ns87410);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(ns87410_init);
|
||||
module_exit(ns87410_exit);
|
||||
|
|
|
@ -414,18 +414,7 @@ static struct pci_driver ns87415_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init ns87415_init(void)
|
||||
{
|
||||
return pci_register_driver(&ns87415_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit ns87415_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&ns87415_pci_driver);
|
||||
}
|
||||
|
||||
module_init(ns87415_init);
|
||||
module_exit(ns87415_exit);
|
||||
module_pci_driver(ns87415_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("ATA low-level driver for NS87415 controllers");
|
||||
|
|
|
@ -265,22 +265,10 @@ static struct pci_driver oldpiix_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init oldpiix_init(void)
|
||||
{
|
||||
return pci_register_driver(&oldpiix_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit oldpiix_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&oldpiix_pci_driver);
|
||||
}
|
||||
|
||||
module_init(oldpiix_init);
|
||||
module_exit(oldpiix_exit);
|
||||
module_pci_driver(oldpiix_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for early PIIX series controllers");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, oldpiix_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -191,22 +191,10 @@ static struct pci_driver opti_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init opti_init(void)
|
||||
{
|
||||
return pci_register_driver(&opti_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit opti_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&opti_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(opti_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Opti 621/621X");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, opti);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(opti_init);
|
||||
module_exit(opti_exit);
|
||||
|
|
|
@ -447,21 +447,10 @@ static struct pci_driver optidma_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init optidma_init(void)
|
||||
{
|
||||
return pci_register_driver(&optidma_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit optidma_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&optidma_pci_driver);
|
||||
}
|
||||
module_pci_driver(optidma_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Opti Firestar/Firestar Plus");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, optidma);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(optidma_init);
|
||||
module_exit(optidma_exit);
|
||||
|
|
|
@ -170,7 +170,8 @@ static int pcmcia_check_one_config(struct pcmcia_device *pdev, void *priv_data)
|
|||
{
|
||||
int *is_kme = priv_data;
|
||||
|
||||
if (!(pdev->resource[0]->flags & IO_DATA_PATH_WIDTH_8)) {
|
||||
if ((pdev->resource[0]->flags & IO_DATA_PATH_WIDTH)
|
||||
!= IO_DATA_PATH_WIDTH_8) {
|
||||
pdev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
|
||||
pdev->resource[0]->flags |= IO_DATA_PATH_WIDTH_AUTO;
|
||||
}
|
||||
|
|
|
@ -784,21 +784,4 @@ static int pdc2027x_reinit_one(struct pci_dev *pdev)
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* pdc2027x_init - Called after this module is loaded into the kernel.
|
||||
*/
|
||||
static int __init pdc2027x_init(void)
|
||||
{
|
||||
return pci_register_driver(&pdc2027x_pci_driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* pdc2027x_exit - Called before this module unloaded from the kernel
|
||||
*/
|
||||
static void __exit pdc2027x_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&pdc2027x_pci_driver);
|
||||
}
|
||||
|
||||
module_init(pdc2027x_init);
|
||||
module_exit(pdc2027x_exit);
|
||||
module_pci_driver(pdc2027x_pci_driver);
|
||||
|
|
|
@ -384,21 +384,10 @@ static struct pci_driver pdc202xx_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init pdc202xx_init(void)
|
||||
{
|
||||
return pci_register_driver(&pdc202xx_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit pdc202xx_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&pdc202xx_pci_driver);
|
||||
}
|
||||
module_pci_driver(pdc202xx_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Promise 2024x and 20262-20267");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, pdc202xx);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(pdc202xx_init);
|
||||
module_exit(pdc202xx_exit);
|
||||
|
|
|
@ -117,24 +117,10 @@ static struct pci_driver ata_tosh_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init ata_tosh_init(void)
|
||||
{
|
||||
return pci_register_driver(&ata_tosh_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit ata_tosh_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&ata_tosh_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(ata_tosh_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("Low level driver for Toshiba Piccolo ATA");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, ata_tosh);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(ata_tosh_init);
|
||||
module_exit(ata_tosh_exit);
|
||||
|
||||
|
|
|
@ -244,22 +244,10 @@ static struct pci_driver radisys_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init radisys_init(void)
|
||||
{
|
||||
return pci_register_driver(&radisys_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit radisys_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&radisys_pci_driver);
|
||||
}
|
||||
|
||||
module_init(radisys_init);
|
||||
module_exit(radisys_exit);
|
||||
module_pci_driver(radisys_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for Radisys R82600 controllers");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, radisys_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -394,18 +394,7 @@ static struct pci_driver rdc_pci_driver = {
|
|||
};
|
||||
|
||||
|
||||
static int __init rdc_init(void)
|
||||
{
|
||||
return pci_register_driver(&rdc_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit rdc_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&rdc_pci_driver);
|
||||
}
|
||||
|
||||
module_init(rdc_init);
|
||||
module_exit(rdc_exit);
|
||||
module_pci_driver(rdc_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox (based on ata_piix)");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for RDC PATA controllers");
|
||||
|
|
|
@ -140,22 +140,10 @@ static struct pci_driver rz1000_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init rz1000_init(void)
|
||||
{
|
||||
return pci_register_driver(&rz1000_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit rz1000_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&rz1000_pci_driver);
|
||||
}
|
||||
module_pci_driver(rz1000_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for RZ1000 PCI ATA");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, pata_rz1000);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(rz1000_init);
|
||||
module_exit(rz1000_exit);
|
||||
|
||||
|
|
|
@ -261,21 +261,10 @@ static struct pci_driver sc1200_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init sc1200_init(void)
|
||||
{
|
||||
return pci_register_driver(&sc1200_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sc1200_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sc1200_pci_driver);
|
||||
}
|
||||
module_pci_driver(sc1200_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox, Mark Lord");
|
||||
MODULE_DESCRIPTION("low-level driver for the NS/AMD SC1200");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, sc1200);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(sc1200_init);
|
||||
module_exit(sc1200_exit);
|
||||
|
|
|
@ -1103,26 +1103,7 @@ static struct pci_driver scc_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init scc_init (void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
DPRINTK("pci_register_driver\n");
|
||||
rc = pci_register_driver(&scc_pci_driver);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
DPRINTK("done\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit scc_exit (void)
|
||||
{
|
||||
pci_unregister_driver(&scc_pci_driver);
|
||||
}
|
||||
|
||||
module_init(scc_init);
|
||||
module_exit(scc_exit);
|
||||
module_pci_driver(scc_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Toshiba corp");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for Toshiba SCC PATA controller");
|
||||
|
|
|
@ -179,15 +179,4 @@ static int __devinit sch_init_one(struct pci_dev *pdev,
|
|||
return ata_pci_bmdma_init_one(pdev, ppi, &sch_sht, NULL, 0);
|
||||
}
|
||||
|
||||
static int __init sch_init(void)
|
||||
{
|
||||
return pci_register_driver(&sch_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sch_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sch_pci_driver);
|
||||
}
|
||||
|
||||
module_init(sch_init);
|
||||
module_exit(sch_exit);
|
||||
module_pci_driver(sch_pci_driver);
|
||||
|
|
|
@ -475,21 +475,10 @@ static struct pci_driver serverworks_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init serverworks_init(void)
|
||||
{
|
||||
return pci_register_driver(&serverworks_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit serverworks_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&serverworks_pci_driver);
|
||||
}
|
||||
module_pci_driver(serverworks_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Serverworks OSB4/CSB5/CSB6");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, serverworks);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(serverworks_init);
|
||||
module_exit(serverworks_exit);
|
||||
|
|
|
@ -437,21 +437,10 @@ static struct pci_driver sil680_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init sil680_init(void)
|
||||
{
|
||||
return pci_register_driver(&sil680_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sil680_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sil680_pci_driver);
|
||||
}
|
||||
module_pci_driver(sil680_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for SI680 PATA");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, sil680);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(sil680_init);
|
||||
module_exit(sil680_exit);
|
||||
|
|
|
@ -906,22 +906,10 @@ static struct pci_driver sis_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init sis_init(void)
|
||||
{
|
||||
return pci_register_driver(&sis_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sis_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sis_pci_driver);
|
||||
}
|
||||
|
||||
module_init(sis_init);
|
||||
module_exit(sis_exit);
|
||||
module_pci_driver(sis_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("SCSI low-level driver for SiS ATA");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, sis_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
|
|
|
@ -372,21 +372,10 @@ static struct pci_driver sl82c105_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init sl82c105_init(void)
|
||||
{
|
||||
return pci_register_driver(&sl82c105_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sl82c105_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sl82c105_pci_driver);
|
||||
}
|
||||
module_pci_driver(sl82c105_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Sl82c105");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, sl82c105);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(sl82c105_init);
|
||||
module_exit(sl82c105_exit);
|
||||
|
|
|
@ -240,21 +240,10 @@ static struct pci_driver triflex_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init triflex_init(void)
|
||||
{
|
||||
return pci_register_driver(&triflex_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit triflex_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&triflex_pci_driver);
|
||||
}
|
||||
module_pci_driver(triflex_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for Compaq Triflex");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, triflex);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(triflex_init);
|
||||
module_exit(triflex_exit);
|
||||
|
|
|
@ -711,21 +711,10 @@ static struct pci_driver via_pci_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static int __init via_init(void)
|
||||
{
|
||||
return pci_register_driver(&via_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit via_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&via_pci_driver);
|
||||
}
|
||||
module_pci_driver(via_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Alan Cox");
|
||||
MODULE_DESCRIPTION("low-level driver for VIA PATA");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, via);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(via_init);
|
||||
module_exit(via_exit);
|
||||
|
|
|
@ -660,21 +660,10 @@ static int adma_ata_init_one(struct pci_dev *pdev,
|
|||
&adma_ata_sht);
|
||||
}
|
||||
|
||||
static int __init adma_ata_init(void)
|
||||
{
|
||||
return pci_register_driver(&adma_ata_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit adma_ata_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&adma_ata_pci_driver);
|
||||
}
|
||||
module_pci_driver(adma_ata_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Mark Lord");
|
||||
MODULE_DESCRIPTION("Pacific Digital Corporation ADMA low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, adma_ata_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(adma_ata_init);
|
||||
module_exit(adma_ata_exit);
|
||||
|
|
72
drivers/ata/sata_dwc_460ex.c
Normal file → Executable file
72
drivers/ata/sata_dwc_460ex.c
Normal file → Executable file
|
@ -158,6 +158,7 @@ enum {
|
|||
/* Assign HW handshaking interface (x) to destination / source peripheral */
|
||||
#define DMA_CFG_HW_HS_DEST(int_num) (((int_num) & 0xF) << 11)
|
||||
#define DMA_CFG_HW_HS_SRC(int_num) (((int_num) & 0xF) << 7)
|
||||
#define DMA_CFG_HW_CH_PRIOR(int_num) (((int_num) & 0xF) << 5)
|
||||
#define DMA_LLP_LMS(addr, master) (((addr) & 0xfffffffc) | (master))
|
||||
|
||||
/*
|
||||
|
@ -318,6 +319,7 @@ struct sata_dwc_host_priv {
|
|||
u32 dma_interrupt_count;
|
||||
struct ahb_dma_regs *sata_dma_regs;
|
||||
struct device *dwc_dev;
|
||||
int dma_channel;
|
||||
};
|
||||
struct sata_dwc_host_priv host_pvt;
|
||||
/*
|
||||
|
@ -437,15 +439,12 @@ static void clear_chan_interrupts(int c)
|
|||
*/
|
||||
static int dma_request_channel(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < DMA_NUM_CHANS; i++) {
|
||||
if (!(in_le32(&(host_pvt.sata_dma_regs->dma_chan_en.low)) &\
|
||||
DMA_CHANNEL(i)))
|
||||
return i;
|
||||
}
|
||||
dev_err(host_pvt.dwc_dev, "%s NO channel chan_en: 0x%08x\n", __func__,
|
||||
in_le32(&(host_pvt.sata_dma_regs->dma_chan_en.low)));
|
||||
/* Check if the channel is not currently in use */
|
||||
if (!(in_le32(&(host_pvt.sata_dma_regs->dma_chan_en.low)) &
|
||||
DMA_CHANNEL(host_pvt.dma_channel)))
|
||||
return host_pvt.dma_channel;
|
||||
dev_err(host_pvt.dwc_dev, "%s Channel %d is currently in use\n",
|
||||
__func__, host_pvt.dma_channel);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -481,7 +480,8 @@ static irqreturn_t dma_dwc_interrupt(int irq, void *hsdev_instance)
|
|||
dev_dbg(ap->dev, "eot=0x%08x err=0x%08x pending=%d active port=%d\n",
|
||||
tfr_reg, err_reg, hsdevp->dma_pending[tag], port);
|
||||
|
||||
for (chan = 0; chan < DMA_NUM_CHANS; chan++) {
|
||||
chan = host_pvt.dma_channel;
|
||||
if (chan >= 0) {
|
||||
/* Check for end-of-transfer interrupt. */
|
||||
if (tfr_reg & DMA_CHANNEL(chan)) {
|
||||
/*
|
||||
|
@ -534,9 +534,9 @@ static irqreturn_t dma_dwc_interrupt(int irq, void *hsdev_instance)
|
|||
static int dma_request_interrupts(struct sata_dwc_device *hsdev, int irq)
|
||||
{
|
||||
int retval = 0;
|
||||
int chan;
|
||||
int chan = host_pvt.dma_channel;
|
||||
|
||||
for (chan = 0; chan < DMA_NUM_CHANS; chan++) {
|
||||
if (chan >= 0) {
|
||||
/* Unmask error interrupt */
|
||||
out_le32(&(host_pvt.sata_dma_regs)->interrupt_mask.error.low,
|
||||
DMA_ENABLE_CHAN(chan));
|
||||
|
@ -575,7 +575,10 @@ static int map_sg_to_lli(struct scatterlist *sg, int num_elems,
|
|||
int fis_len = 0;
|
||||
dma_addr_t next_llp;
|
||||
int bl;
|
||||
int sms_val, dms_val;
|
||||
|
||||
sms_val = 0;
|
||||
dms_val = 1 + host_pvt.dma_channel;
|
||||
dev_dbg(host_pvt.dwc_dev, "%s: sg=%p nelem=%d lli=%p dma_lli=0x%08x"
|
||||
" dmadr=0x%08x\n", __func__, sg, num_elems, lli, (u32)dma_lli,
|
||||
(u32)dmadr_addr);
|
||||
|
@ -635,8 +638,8 @@ static int map_sg_to_lli(struct scatterlist *sg, int num_elems,
|
|||
|
||||
lli[idx].ctl.low = cpu_to_le32(
|
||||
DMA_CTL_TTFC(DMA_CTL_TTFC_P2M_DMAC) |
|
||||
DMA_CTL_SMS(0) |
|
||||
DMA_CTL_DMS(1) |
|
||||
DMA_CTL_SMS(sms_val) |
|
||||
DMA_CTL_DMS(dms_val) |
|
||||
DMA_CTL_SRC_MSIZE(bl) |
|
||||
DMA_CTL_DST_MSIZE(bl) |
|
||||
DMA_CTL_SINC_NOCHANGE |
|
||||
|
@ -651,8 +654,8 @@ static int map_sg_to_lli(struct scatterlist *sg, int num_elems,
|
|||
|
||||
lli[idx].ctl.low = cpu_to_le32(
|
||||
DMA_CTL_TTFC(DMA_CTL_TTFC_M2P_PER) |
|
||||
DMA_CTL_SMS(1) |
|
||||
DMA_CTL_DMS(0) |
|
||||
DMA_CTL_SMS(dms_val) |
|
||||
DMA_CTL_DMS(sms_val) |
|
||||
DMA_CTL_SRC_MSIZE(bl) |
|
||||
DMA_CTL_DST_MSIZE(bl) |
|
||||
DMA_CTL_DINC_NOCHANGE |
|
||||
|
@ -744,8 +747,10 @@ static int dma_dwc_xfer_setup(struct scatterlist *sg, int num_elems,
|
|||
|
||||
/* Program the CFG register. */
|
||||
out_le32(&(host_pvt.sata_dma_regs->chan_regs[dma_ch].cfg.high),
|
||||
DMA_CFG_HW_HS_SRC(dma_ch) | DMA_CFG_HW_HS_DEST(dma_ch) |
|
||||
DMA_CFG_PROTCTL | DMA_CFG_FCMOD_REQ);
|
||||
out_le32(&(host_pvt.sata_dma_regs->chan_regs[dma_ch].cfg.low), 0);
|
||||
out_le32(&(host_pvt.sata_dma_regs->chan_regs[dma_ch].cfg.low),
|
||||
DMA_CFG_HW_CH_PRIOR(dma_ch));
|
||||
|
||||
/* Program the address of the linked list */
|
||||
out_le32(&(host_pvt.sata_dma_regs->chan_regs[dma_ch].llp.low),
|
||||
|
@ -1581,10 +1586,31 @@ static void sata_dwc_qc_prep(struct ata_queued_cmd *qc)
|
|||
|
||||
static void sata_dwc_error_handler(struct ata_port *ap)
|
||||
{
|
||||
ap->link.flags |= ATA_LFLAG_NO_HRST;
|
||||
ata_sff_error_handler(ap);
|
||||
}
|
||||
|
||||
int sata_dwc_hardreset(struct ata_link *link, unsigned int *class,
|
||||
unsigned long deadline)
|
||||
{
|
||||
struct sata_dwc_device *hsdev = HSDEV_FROM_AP(link->ap);
|
||||
int ret;
|
||||
|
||||
ret = sata_sff_hardreset(link, class, deadline);
|
||||
|
||||
sata_dwc_enable_interrupts(hsdev);
|
||||
|
||||
/* Reconfigure the DMA control register */
|
||||
out_le32(&hsdev->sata_dwc_regs->dmacr,
|
||||
SATA_DWC_DMACR_TXRXCH_CLEAR);
|
||||
|
||||
/* Reconfigure the DMA Burst Transaction Size register */
|
||||
out_le32(&hsdev->sata_dwc_regs->dbtsr,
|
||||
SATA_DWC_DBTSR_MWR(AHB_DMA_BRST_DFLT) |
|
||||
SATA_DWC_DBTSR_MRD(AHB_DMA_BRST_DFLT));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* scsi mid-layer and libata interface structures
|
||||
*/
|
||||
|
@ -1604,6 +1630,7 @@ static struct ata_port_operations sata_dwc_ops = {
|
|||
.inherits = &ata_sff_port_ops,
|
||||
|
||||
.error_handler = sata_dwc_error_handler,
|
||||
.hardreset = sata_dwc_hardreset,
|
||||
|
||||
.qc_prep = sata_dwc_qc_prep,
|
||||
.qc_issue = sata_dwc_qc_issue,
|
||||
|
@ -1638,6 +1665,8 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
|||
struct ata_host *host;
|
||||
struct ata_port_info pi = sata_dwc_port_info[0];
|
||||
const struct ata_port_info *ppi[] = { &pi, NULL };
|
||||
struct device_node *np = ofdev->dev.of_node;
|
||||
u32 dma_chan;
|
||||
|
||||
/* Allocate DWC SATA device */
|
||||
hsdev = kzalloc(sizeof(*hsdev), GFP_KERNEL);
|
||||
|
@ -1647,6 +1676,13 @@ static int sata_dwc_probe(struct platform_device *ofdev)
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (of_property_read_u32(np, "dma-channel", &dma_chan)) {
|
||||
dev_warn(&ofdev->dev, "no dma-channel property set."
|
||||
" Use channel 0\n");
|
||||
dma_chan = 0;
|
||||
}
|
||||
host_pvt.dma_channel = dma_chan;
|
||||
|
||||
/* Ioremap SATA registers */
|
||||
base = of_iomap(ofdev->dev.of_node, 0);
|
||||
if (!base) {
|
||||
|
|
|
@ -894,21 +894,10 @@ static struct pci_driver inic_pci_driver = {
|
|||
.remove = ata_pci_remove_one,
|
||||
};
|
||||
|
||||
static int __init inic_init(void)
|
||||
{
|
||||
return pci_register_driver(&inic_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit inic_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&inic_pci_driver);
|
||||
}
|
||||
module_pci_driver(inic_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Tejun Heo");
|
||||
MODULE_DESCRIPTION("low-level driver for Initio 162x SATA");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_DEVICE_TABLE(pci, inic_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(inic_init);
|
||||
module_exit(inic_exit);
|
||||
|
|
|
@ -2510,22 +2510,11 @@ static void nv_adma_host_stop(struct ata_host *host)
|
|||
nv_ck804_host_stop(host);
|
||||
}
|
||||
|
||||
static int __init nv_init(void)
|
||||
{
|
||||
return pci_register_driver(&nv_pci_driver);
|
||||
}
|
||||
module_pci_driver(nv_pci_driver);
|
||||
|
||||
static void __exit nv_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&nv_pci_driver);
|
||||
}
|
||||
|
||||
module_init(nv_init);
|
||||
module_exit(nv_exit);
|
||||
module_param_named(adma, adma_enabled, bool, 0444);
|
||||
MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)");
|
||||
module_param_named(swncq, swncq_enabled, bool, 0444);
|
||||
MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)");
|
||||
module_param_named(msi, msi_enabled, bool, 0444);
|
||||
MODULE_PARM_DESC(msi, "Enable use of MSI (Default: false)");
|
||||
|
||||
|
|
|
@ -1249,21 +1249,10 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
|
|||
&pdc_ata_sht);
|
||||
}
|
||||
|
||||
static int __init pdc_ata_init(void)
|
||||
{
|
||||
return pci_register_driver(&pdc_ata_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit pdc_ata_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&pdc_ata_pci_driver);
|
||||
}
|
||||
module_pci_driver(pdc_ata_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Jeff Garzik");
|
||||
MODULE_DESCRIPTION("Promise ATA TX2/TX4/TX4000 low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, pdc_ata_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(pdc_ata_init);
|
||||
module_exit(pdc_ata_exit);
|
||||
|
|
|
@ -635,21 +635,10 @@ static int qs_ata_init_one(struct pci_dev *pdev,
|
|||
&qs_ata_sht);
|
||||
}
|
||||
|
||||
static int __init qs_ata_init(void)
|
||||
{
|
||||
return pci_register_driver(&qs_ata_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit qs_ata_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&qs_ata_pci_driver);
|
||||
}
|
||||
module_pci_driver(qs_ata_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Mark Lord");
|
||||
MODULE_DESCRIPTION("Pacific Digital Corporation QStor SATA low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, qs_ata_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(qs_ata_init);
|
||||
module_exit(qs_ata_exit);
|
||||
|
|
|
@ -819,16 +819,4 @@ static int sil_pci_device_resume(struct pci_dev *pdev)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int __init sil_init(void)
|
||||
{
|
||||
return pci_register_driver(&sil_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sil_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sil_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
module_init(sil_init);
|
||||
module_exit(sil_exit);
|
||||
module_pci_driver(sil_pci_driver);
|
||||
|
|
|
@ -1382,20 +1382,9 @@ static int sil24_port_resume(struct ata_port *ap)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int __init sil24_init(void)
|
||||
{
|
||||
return pci_register_driver(&sil24_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sil24_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sil24_pci_driver);
|
||||
}
|
||||
module_pci_driver(sil24_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Tejun Heo");
|
||||
MODULE_DESCRIPTION("Silicon Image 3124/3132 SATA low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, sil24_pci_tbl);
|
||||
|
||||
module_init(sil24_init);
|
||||
module_exit(sil24_exit);
|
||||
|
|
|
@ -308,15 +308,4 @@ static int sis_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
IRQF_SHARED, &sis_sht);
|
||||
}
|
||||
|
||||
static int __init sis_init(void)
|
||||
{
|
||||
return pci_register_driver(&sis_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit sis_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&sis_pci_driver);
|
||||
}
|
||||
|
||||
module_init(sis_init);
|
||||
module_exit(sis_exit);
|
||||
module_pci_driver(sis_pci_driver);
|
||||
|
|
|
@ -525,21 +525,10 @@ static struct pci_driver k2_sata_pci_driver = {
|
|||
.remove = ata_pci_remove_one,
|
||||
};
|
||||
|
||||
static int __init k2_sata_init(void)
|
||||
{
|
||||
return pci_register_driver(&k2_sata_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit k2_sata_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&k2_sata_pci_driver);
|
||||
}
|
||||
module_pci_driver(k2_sata_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Benjamin Herrenschmidt");
|
||||
MODULE_DESCRIPTION("low-level driver for K2 SATA controller");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, k2_sata_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(k2_sata_init);
|
||||
module_exit(k2_sata_exit);
|
||||
|
|
|
@ -1498,24 +1498,10 @@ static int pdc_sata_init_one(struct pci_dev *pdev,
|
|||
IRQF_SHARED, &pdc_sata_sht);
|
||||
}
|
||||
|
||||
|
||||
static int __init pdc_sata_init(void)
|
||||
{
|
||||
return pci_register_driver(&pdc_sata_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
static void __exit pdc_sata_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&pdc_sata_pci_driver);
|
||||
}
|
||||
|
||||
module_pci_driver(pdc_sata_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Jeff Garzik");
|
||||
MODULE_DESCRIPTION("Promise SATA low-level driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, pdc_sata_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(pdc_sata_init);
|
||||
module_exit(pdc_sata_exit);
|
||||
|
|
|
@ -243,16 +243,4 @@ static int uli_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
IRQF_SHARED, &uli_sht);
|
||||
}
|
||||
|
||||
static int __init uli_init(void)
|
||||
{
|
||||
return pci_register_driver(&uli_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit uli_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&uli_pci_driver);
|
||||
}
|
||||
|
||||
|
||||
module_init(uli_init);
|
||||
module_exit(uli_exit);
|
||||
module_pci_driver(uli_pci_driver);
|
||||
|
|
|
@ -655,15 +655,4 @@ static int svia_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
IRQF_SHARED, &svia_sht);
|
||||
}
|
||||
|
||||
static int __init svia_init(void)
|
||||
{
|
||||
return pci_register_driver(&svia_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit svia_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&svia_pci_driver);
|
||||
}
|
||||
|
||||
module_init(svia_init);
|
||||
module_exit(svia_exit);
|
||||
module_pci_driver(svia_pci_driver);
|
||||
|
|
|
@ -436,21 +436,10 @@ static struct pci_driver vsc_sata_pci_driver = {
|
|||
.remove = ata_pci_remove_one,
|
||||
};
|
||||
|
||||
static int __init vsc_sata_init(void)
|
||||
{
|
||||
return pci_register_driver(&vsc_sata_pci_driver);
|
||||
}
|
||||
|
||||
static void __exit vsc_sata_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&vsc_sata_pci_driver);
|
||||
}
|
||||
module_pci_driver(vsc_sata_pci_driver);
|
||||
|
||||
MODULE_AUTHOR("Jeremy Higdon");
|
||||
MODULE_DESCRIPTION("low-level driver for Vitesse VSC7174 SATA controller");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DEVICE_TABLE(pci, vsc_sata_pci_tbl);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
|
||||
module_init(vsc_sata_init);
|
||||
module_exit(vsc_sata_exit);
|
||||
|
|
|
@ -68,6 +68,23 @@ static struct scsi_host_sg_pool scsi_sg_pools[] = {
|
|||
|
||||
struct kmem_cache *scsi_sdb_cache;
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
#include <acpi/acpi_bus.h>
|
||||
|
||||
int scsi_register_acpi_bus_type(struct acpi_bus_type *bus)
|
||||
{
|
||||
bus->bus = &scsi_bus_type;
|
||||
return register_acpi_bus_type(bus);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(scsi_register_acpi_bus_type);
|
||||
|
||||
void scsi_unregister_acpi_bus_type(struct acpi_bus_type *bus)
|
||||
{
|
||||
unregister_acpi_bus_type(bus);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(scsi_unregister_acpi_bus_type);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* When to reinvoke queueing after a resource shortage. It's 3 msecs to
|
||||
* not change behaviour from the previous unplug mechanism, experimentation
|
||||
|
|
|
@ -578,6 +578,7 @@ static inline int ata_is_data(u8 prot)
|
|||
((u64) (id)[(n) + 0]) )
|
||||
|
||||
#define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
|
||||
#define ata_id_has_da(id) ((id)[77] & (1 << 4))
|
||||
|
||||
static inline bool ata_id_has_hipm(const u16 *id)
|
||||
{
|
||||
|
|
|
@ -161,6 +161,8 @@ enum {
|
|||
ATA_DFLAG_DETACH = (1 << 24),
|
||||
ATA_DFLAG_DETACHED = (1 << 25),
|
||||
|
||||
ATA_DFLAG_DA = (1 << 26), /* device supports Device Attention */
|
||||
|
||||
ATA_DEV_UNKNOWN = 0, /* unknown device */
|
||||
ATA_DEV_ATA = 1, /* ATA device */
|
||||
ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */
|
||||
|
@ -545,9 +547,6 @@ struct ata_host {
|
|||
struct mutex eh_mutex;
|
||||
struct task_struct *eh_owner;
|
||||
|
||||
#ifdef CONFIG_ATA_ACPI
|
||||
acpi_handle acpi_handle;
|
||||
#endif
|
||||
struct ata_port *simplex_claimed; /* channel owning the DMA */
|
||||
struct ata_port *ports[0];
|
||||
};
|
||||
|
@ -615,7 +614,6 @@ struct ata_device {
|
|||
struct scsi_device *sdev; /* attached SCSI device */
|
||||
void *private_data;
|
||||
#ifdef CONFIG_ATA_ACPI
|
||||
acpi_handle acpi_handle;
|
||||
union acpi_object *gtf_cache;
|
||||
unsigned int gtf_filter;
|
||||
#endif
|
||||
|
@ -797,7 +795,6 @@ struct ata_port {
|
|||
void *private_data;
|
||||
|
||||
#ifdef CONFIG_ATA_ACPI
|
||||
acpi_handle acpi_handle;
|
||||
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
|
||||
#endif
|
||||
/* owned by EH */
|
||||
|
@ -1116,6 +1113,8 @@ int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm);
|
|||
int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm);
|
||||
unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev,
|
||||
const struct ata_acpi_gtm *gtm);
|
||||
acpi_handle ata_ap_acpi_handle(struct ata_port *ap);
|
||||
acpi_handle ata_dev_acpi_handle(struct ata_device *dev);
|
||||
int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm);
|
||||
#else
|
||||
static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
|
||||
|
|
|
@ -216,6 +216,16 @@ scsi_command_size(const unsigned char *cmnd)
|
|||
scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
struct acpi_bus_type;
|
||||
|
||||
extern int
|
||||
scsi_register_acpi_bus_type(struct acpi_bus_type *bus);
|
||||
|
||||
extern void
|
||||
scsi_unregister_acpi_bus_type(struct acpi_bus_type *bus);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
|
||||
* T10/1561-D Revision 4 Draft dated 7th November 2002.
|
||||
|
|
|
@ -154,6 +154,7 @@ struct scsi_device {
|
|||
unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */
|
||||
unsigned try_rc_10_first:1; /* Try READ_CAPACACITY_10 first */
|
||||
unsigned is_visible:1; /* is the device visible in sysfs */
|
||||
unsigned can_power_off:1; /* Device supports runtime power off */
|
||||
unsigned wce_default_on:1; /* Cache is ON by default */
|
||||
|
||||
DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
|
||||
|
|
Loading…
Reference in a new issue