mirror of https://gitee.com/openkylin/linux.git
ide-pmac: store pmif instead of hwif in ->driver_data (take 2)
* Pass pmif instead of hwif to pmac_ide_do_{suspend,resume}(). * Store pmif instead of hwif in ->driver_data. * Use dev_get_drvdata() instead of ->hwif_data to obtain pmif. v2: * Build fixes from Stephen Rothwell. There should be no functional changes caused by this patch. Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
c010b2f76c
commit
7b8797acd4
|
@ -424,7 +424,9 @@ static void pmac_ide_kauai_selectproc(ide_drive_t *drive);
|
||||||
static void
|
static void
|
||||||
pmac_ide_selectproc(ide_drive_t *drive)
|
pmac_ide_selectproc(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
|
|
||||||
if (pmif == NULL)
|
if (pmif == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -444,7 +446,9 @@ pmac_ide_selectproc(ide_drive_t *drive)
|
||||||
static void
|
static void
|
||||||
pmac_ide_kauai_selectproc(ide_drive_t *drive)
|
pmac_ide_kauai_selectproc(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
|
|
||||||
if (pmif == NULL)
|
if (pmif == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -465,7 +469,9 @@ pmac_ide_kauai_selectproc(ide_drive_t *drive)
|
||||||
static void
|
static void
|
||||||
pmac_ide_do_update_timings(ide_drive_t *drive)
|
pmac_ide_do_update_timings(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
|
|
||||||
if (pmif == NULL)
|
if (pmif == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -493,11 +499,13 @@ static void pmac_outbsync(ide_hwif_t *hwif, u8 value, unsigned long port)
|
||||||
static void
|
static void
|
||||||
pmac_ide_set_pio_mode(ide_drive_t *drive, const u8 pio)
|
pmac_ide_set_pio_mode(ide_drive_t *drive, const u8 pio)
|
||||||
{
|
{
|
||||||
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
struct ide_timing *tim = ide_timing_find_mode(XFER_PIO_0 + pio);
|
struct ide_timing *tim = ide_timing_find_mode(XFER_PIO_0 + pio);
|
||||||
u32 *timings, t;
|
u32 *timings, t;
|
||||||
unsigned accessTicks, recTicks;
|
unsigned accessTicks, recTicks;
|
||||||
unsigned accessTime, recTime;
|
unsigned accessTime, recTime;
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
|
||||||
unsigned int cycle_time;
|
unsigned int cycle_time;
|
||||||
|
|
||||||
if (pmif == NULL)
|
if (pmif == NULL)
|
||||||
|
@ -778,9 +786,11 @@ set_timings_mdma(ide_drive_t *drive, int intf_type, u32 *timings, u32 *timings2,
|
||||||
|
|
||||||
static void pmac_ide_set_dma_mode(ide_drive_t *drive, const u8 speed)
|
static void pmac_ide_set_dma_mode(ide_drive_t *drive, const u8 speed)
|
||||||
{
|
{
|
||||||
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
int unit = (drive->select.b.unit & 0x01);
|
int unit = (drive->select.b.unit & 0x01);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
|
||||||
u32 *timings, *timings2, tl[2];
|
u32 *timings, *timings2, tl[2];
|
||||||
|
|
||||||
timings = &pmif->timings[unit];
|
timings = &pmif->timings[unit];
|
||||||
|
@ -852,11 +862,8 @@ sanitize_timings(pmac_ide_hwif_t *pmif)
|
||||||
/* Suspend call back, should be called after the child devices
|
/* Suspend call back, should be called after the child devices
|
||||||
* have actually been suspended
|
* have actually been suspended
|
||||||
*/
|
*/
|
||||||
static int
|
static int pmac_ide_do_suspend(pmac_ide_hwif_t *pmif)
|
||||||
pmac_ide_do_suspend(ide_hwif_t *hwif)
|
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)hwif->hwif_data;
|
|
||||||
|
|
||||||
/* We clear the timings */
|
/* We clear the timings */
|
||||||
pmif->timings[0] = 0;
|
pmif->timings[0] = 0;
|
||||||
pmif->timings[1] = 0;
|
pmif->timings[1] = 0;
|
||||||
|
@ -884,11 +891,8 @@ pmac_ide_do_suspend(ide_hwif_t *hwif)
|
||||||
/* Resume call back, should be called before the child devices
|
/* Resume call back, should be called before the child devices
|
||||||
* are resumed
|
* are resumed
|
||||||
*/
|
*/
|
||||||
static int
|
static int pmac_ide_do_resume(pmac_ide_hwif_t *pmif)
|
||||||
pmac_ide_do_resume(ide_hwif_t *hwif)
|
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)hwif->hwif_data;
|
|
||||||
|
|
||||||
/* Hard reset & re-enable controller (do we really need to reset ? -BenH) */
|
/* Hard reset & re-enable controller (do we really need to reset ? -BenH) */
|
||||||
if (!pmif->mediabay) {
|
if (!pmif->mediabay) {
|
||||||
ppc_md.feature_call(PMAC_FTR_IDE_RESET, pmif->node, pmif->aapl_bus_id, 1);
|
ppc_md.feature_call(PMAC_FTR_IDE_RESET, pmif->node, pmif->aapl_bus_id, 1);
|
||||||
|
@ -916,7 +920,8 @@ pmac_ide_do_resume(ide_hwif_t *hwif)
|
||||||
|
|
||||||
static u8 pmac_ide_cable_detect(ide_hwif_t *hwif)
|
static u8 pmac_ide_cable_detect(ide_hwif_t *hwif)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)ide_get_hwifdata(hwif);
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
struct device_node *np = pmif->node;
|
struct device_node *np = pmif->node;
|
||||||
const char *cable = of_get_property(np, "cable-type", NULL);
|
const char *cable = of_get_property(np, "cable-type", NULL);
|
||||||
|
|
||||||
|
@ -1058,7 +1063,6 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif, hw_regs_t *hw)
|
||||||
default_hwif_mmiops(hwif);
|
default_hwif_mmiops(hwif);
|
||||||
hwif->OUTBSYNC = pmac_outbsync;
|
hwif->OUTBSYNC = pmac_outbsync;
|
||||||
|
|
||||||
hwif->hwif_data = pmif;
|
|
||||||
ide_init_port_hw(hwif, hw);
|
ide_init_port_hw(hwif, hw);
|
||||||
|
|
||||||
printk(KERN_INFO "ide%d: Found Apple %s controller, bus ID %d%s, irq %d\n",
|
printk(KERN_INFO "ide%d: Found Apple %s controller, bus ID %d%s, irq %d\n",
|
||||||
|
@ -1164,7 +1168,7 @@ pmac_ide_macio_attach(struct macio_dev *mdev, const struct of_device_id *match)
|
||||||
} else
|
} else
|
||||||
pmif->dma_regs = NULL;
|
pmif->dma_regs = NULL;
|
||||||
#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
|
#endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
|
||||||
dev_set_drvdata(&mdev->ofdev.dev, hwif);
|
dev_set_drvdata(&mdev->ofdev.dev, pmif);
|
||||||
|
|
||||||
memset(&hw, 0, sizeof(hw));
|
memset(&hw, 0, sizeof(hw));
|
||||||
pmac_ide_init_ports(&hw, pmif->regbase);
|
pmac_ide_init_ports(&hw, pmif->regbase);
|
||||||
|
@ -1195,12 +1199,13 @@ pmac_ide_macio_attach(struct macio_dev *mdev, const struct of_device_id *match)
|
||||||
static int
|
static int
|
||||||
pmac_ide_macio_suspend(struct macio_dev *mdev, pm_message_t mesg)
|
pmac_ide_macio_suspend(struct macio_dev *mdev, pm_message_t mesg)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = (ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev);
|
pmac_ide_hwif_t *pmif =
|
||||||
int rc = 0;
|
(pmac_ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev);
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
if (mesg.event != mdev->ofdev.dev.power.power_state.event
|
if (mesg.event != mdev->ofdev.dev.power.power_state.event
|
||||||
&& (mesg.event & PM_EVENT_SLEEP)) {
|
&& (mesg.event & PM_EVENT_SLEEP)) {
|
||||||
rc = pmac_ide_do_suspend(hwif);
|
rc = pmac_ide_do_suspend(pmif);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
mdev->ofdev.dev.power.power_state = mesg;
|
mdev->ofdev.dev.power.power_state = mesg;
|
||||||
}
|
}
|
||||||
|
@ -1211,11 +1216,12 @@ pmac_ide_macio_suspend(struct macio_dev *mdev, pm_message_t mesg)
|
||||||
static int
|
static int
|
||||||
pmac_ide_macio_resume(struct macio_dev *mdev)
|
pmac_ide_macio_resume(struct macio_dev *mdev)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = (ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev);
|
pmac_ide_hwif_t *pmif =
|
||||||
int rc = 0;
|
(pmac_ide_hwif_t *)dev_get_drvdata(&mdev->ofdev.dev);
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
if (mdev->ofdev.dev.power.power_state.event != PM_EVENT_ON) {
|
if (mdev->ofdev.dev.power.power_state.event != PM_EVENT_ON) {
|
||||||
rc = pmac_ide_do_resume(hwif);
|
rc = pmac_ide_do_resume(pmif);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
mdev->ofdev.dev.power.power_state = PMSG_ON;
|
mdev->ofdev.dev.power.power_state = PMSG_ON;
|
||||||
}
|
}
|
||||||
|
@ -1284,7 +1290,7 @@ pmac_ide_pci_attach(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
pmif->kauai_fcr = base;
|
pmif->kauai_fcr = base;
|
||||||
pmif->irq = pdev->irq;
|
pmif->irq = pdev->irq;
|
||||||
|
|
||||||
pci_set_drvdata(pdev, hwif);
|
pci_set_drvdata(pdev, pmif);
|
||||||
|
|
||||||
memset(&hw, 0, sizeof(hw));
|
memset(&hw, 0, sizeof(hw));
|
||||||
pmac_ide_init_ports(&hw, pmif->regbase);
|
pmac_ide_init_ports(&hw, pmif->regbase);
|
||||||
|
@ -1310,12 +1316,12 @@ pmac_ide_pci_attach(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
static int
|
static int
|
||||||
pmac_ide_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
pmac_ide_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = (ide_hwif_t *)pci_get_drvdata(pdev);
|
pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)pci_get_drvdata(pdev);
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
if (mesg.event != pdev->dev.power.power_state.event
|
if (mesg.event != pdev->dev.power.power_state.event
|
||||||
&& (mesg.event & PM_EVENT_SLEEP)) {
|
&& (mesg.event & PM_EVENT_SLEEP)) {
|
||||||
rc = pmac_ide_do_suspend(hwif);
|
rc = pmac_ide_do_suspend(pmif);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
pdev->dev.power.power_state = mesg;
|
pdev->dev.power.power_state = mesg;
|
||||||
}
|
}
|
||||||
|
@ -1326,11 +1332,11 @@ pmac_ide_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
|
||||||
static int
|
static int
|
||||||
pmac_ide_pci_resume(struct pci_dev *pdev)
|
pmac_ide_pci_resume(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = (ide_hwif_t *)pci_get_drvdata(pdev);
|
pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)pci_get_drvdata(pdev);
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
if (pdev->dev.power.power_state.event != PM_EVENT_ON) {
|
if (pdev->dev.power.power_state.event != PM_EVENT_ON) {
|
||||||
rc = pmac_ide_do_resume(hwif);
|
rc = pmac_ide_do_resume(pmif);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
pdev->dev.power.power_state = PMSG_ON;
|
pdev->dev.power.power_state = PMSG_ON;
|
||||||
}
|
}
|
||||||
|
@ -1421,10 +1427,11 @@ int __init pmac_ide_probe(void)
|
||||||
static int
|
static int
|
||||||
pmac_ide_build_dmatable(ide_drive_t *drive, struct request *rq)
|
pmac_ide_build_dmatable(ide_drive_t *drive, struct request *rq)
|
||||||
{
|
{
|
||||||
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
struct dbdma_cmd *table;
|
struct dbdma_cmd *table;
|
||||||
int i, count = 0;
|
int i, count = 0;
|
||||||
ide_hwif_t *hwif = HWIF(drive);
|
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)hwif->hwif_data;
|
|
||||||
volatile struct dbdma_regs __iomem *dma = pmif->dma_regs;
|
volatile struct dbdma_regs __iomem *dma = pmif->dma_regs;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
int wr = (rq_data_dir(rq) == WRITE);
|
int wr = (rq_data_dir(rq) == WRITE);
|
||||||
|
@ -1520,7 +1527,8 @@ static int
|
||||||
pmac_ide_dma_setup(ide_drive_t *drive)
|
pmac_ide_dma_setup(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = HWIF(drive);
|
ide_hwif_t *hwif = HWIF(drive);
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)hwif->hwif_data;
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
struct request *rq = HWGROUP(drive)->rq;
|
struct request *rq = HWGROUP(drive)->rq;
|
||||||
u8 unit = (drive->select.b.unit & 0x01);
|
u8 unit = (drive->select.b.unit & 0x01);
|
||||||
u8 ata4;
|
u8 ata4;
|
||||||
|
@ -1560,7 +1568,9 @@ pmac_ide_dma_exec_cmd(ide_drive_t *drive, u8 command)
|
||||||
static void
|
static void
|
||||||
pmac_ide_dma_start(ide_drive_t *drive)
|
pmac_ide_dma_start(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
volatile struct dbdma_regs __iomem *dma;
|
volatile struct dbdma_regs __iomem *dma;
|
||||||
|
|
||||||
dma = pmif->dma_regs;
|
dma = pmif->dma_regs;
|
||||||
|
@ -1576,7 +1586,9 @@ pmac_ide_dma_start(ide_drive_t *drive)
|
||||||
static int
|
static int
|
||||||
pmac_ide_dma_end (ide_drive_t *drive)
|
pmac_ide_dma_end (ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
volatile struct dbdma_regs __iomem *dma;
|
volatile struct dbdma_regs __iomem *dma;
|
||||||
u32 dstat;
|
u32 dstat;
|
||||||
|
|
||||||
|
@ -1604,7 +1616,9 @@ pmac_ide_dma_end (ide_drive_t *drive)
|
||||||
static int
|
static int
|
||||||
pmac_ide_dma_test_irq (ide_drive_t *drive)
|
pmac_ide_dma_test_irq (ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
volatile struct dbdma_regs __iomem *dma;
|
volatile struct dbdma_regs __iomem *dma;
|
||||||
unsigned long status, timeout;
|
unsigned long status, timeout;
|
||||||
|
|
||||||
|
@ -1664,7 +1678,9 @@ static void pmac_ide_dma_host_set(ide_drive_t *drive, int on)
|
||||||
static void
|
static void
|
||||||
pmac_ide_dma_lost_irq (ide_drive_t *drive)
|
pmac_ide_dma_lost_irq (ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t* pmif = (pmac_ide_hwif_t *)HWIF(drive)->hwif_data;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
volatile struct dbdma_regs __iomem *dma;
|
volatile struct dbdma_regs __iomem *dma;
|
||||||
unsigned long status;
|
unsigned long status;
|
||||||
|
|
||||||
|
@ -1694,7 +1710,8 @@ static const struct ide_dma_ops pmac_dma_ops = {
|
||||||
static int __devinit pmac_ide_init_dma(ide_hwif_t *hwif,
|
static int __devinit pmac_ide_init_dma(ide_hwif_t *hwif,
|
||||||
const struct ide_port_info *d)
|
const struct ide_port_info *d)
|
||||||
{
|
{
|
||||||
pmac_ide_hwif_t *pmif = (pmac_ide_hwif_t *)hwif->hwif_data;
|
pmac_ide_hwif_t *pmif =
|
||||||
|
(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
|
||||||
struct pci_dev *dev = to_pci_dev(hwif->dev);
|
struct pci_dev *dev = to_pci_dev(hwif->dev);
|
||||||
|
|
||||||
/* We won't need pci_dev if we switch to generic consistent
|
/* We won't need pci_dev if we switch to generic consistent
|
||||||
|
|
Loading…
Reference in New Issue