ATA_OUTL
ATA_OUTL(ch->r_io[idx].res, ch->r_io[idx].offset, value)
ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, ATA_AHCI_GHC_AE);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, ATA_AHCI_GHC_AE|ATA_AHCI_GHC_HR);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, ATA_AHCI_GHC_AE);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, ATA_INL(ctlr->r_res2, ATA_AHCI_IS));
ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_IS + offset, istatus);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, 1 << ch->unit);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CI + offset, (1 << tag));
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset, cmd);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_IS + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_IE + offset, 0);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CLB + offset, work & 0xffffffff);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CLBU + offset, work >> 32);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_FB + offset, work & 0xffffffff);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_FBU + offset, work >> 32);
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_IE + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
ATA_OUTL(ctlr->r_res2, 0x4,
ATA_OUTL(ctlr->r_res1, 0x01d64, 0x00000000);
ATA_OUTL(ctlr->r_res1, 0x01d5c, 0x00000000);
ATA_OUTL(ctlr->r_res1, 0x20014, 0x00000000);
ATA_OUTL(ctlr->r_res1, 0x30014, 0x00000000);
ATA_OUTL(ctlr->r_res1, 0x01d58, 0x00000000);
ATA_OUTL(ctlr->r_res1, 0x01d5c, 0x007fffff);
ATA_OUTL(ctlr->r_res1, 0x01d64, 0x000000ff/*HC0*/ | 0x0001fe00/*HC1*/ |
ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000002);
ATA_OUTL(ctlr->r_res1, 0x02000 + ATA_MV_EDMA_BASE(ch), (1<<11) | (1<<13));
ATA_OUTL(ctlr->r_res1, 0x02010 + ATA_MV_EDMA_BASE(ch), work >> 32);
ATA_OUTL(ctlr->r_res1, 0x02014 + ATA_MV_EDMA_BASE(ch), work & 0xffffffff);
ATA_OUTL(ctlr->r_res1, 0x02018 + ATA_MV_EDMA_BASE(ch), 0x0);
ATA_OUTL(ctlr->r_res1, 0x0201c + ATA_MV_EDMA_BASE(ch), work >> 32);
ATA_OUTL(ctlr->r_res1, 0x02020 + ATA_MV_EDMA_BASE(ch), 0x0);
ATA_OUTL(ctlr->r_res1, 0x02024 + ATA_MV_EDMA_BASE(ch), work & 0xffffffff);
ATA_OUTL(ctlr->r_res1, 0x02008 + ATA_MV_EDMA_BASE(ch), 0x0);
ATA_OUTL(ctlr->r_res1, 0x0200c + ATA_MV_EDMA_BASE(ch), ~0x0);
ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000001);
ATA_OUTL(ctlr->r_res1, 0x02008 + ATA_MV_EDMA_BASE(ch), 0x0);
ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000002);
ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000001);
ATA_OUTL(ctlr->r_res1, 0x02014 + ATA_MV_EDMA_BASE(ch), req_in);
ATA_OUTL(ctlr->r_res1, 0x02024 + ATA_MV_EDMA_BASE(ch), rsp_out);
ATA_OUTL(ctlr->r_res1, offset, ~(icr & (0x0101 << (ch->unit & 3))));
ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000002);
ATA_OUTL(ctlr->r_res1, 0x02008 + ATA_MV_EDMA_BASE(ch), 0x0);
ATA_OUTL(ctlr->r_res1, 0x0200c + ATA_MV_EDMA_BASE(ch), ~0x0);
ATA_OUTL(ctlr->r_res1, 0x02028 + ATA_MV_EDMA_BASE(ch), 0x00000001);
ATA_OUTL(ctlr->r_res2, offset, 0x00ff00ff);
ATA_OUTL(ctlr->r_res2, offset + 4, 0x000d000d);
ATA_OUTL(ctlr->r_res2, 0x0400,
ATA_OUTL(ctlr->r_res2, offset, (0x0f << shift) | 0x00f000f0);
ATA_OUTL(ctlr->r_res2, 0x000c0400 + ((ch->unit + 1) << 2), 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0240 + (ch->unit << 7),
ATA_OUTL(ctlr->r_res2, 0x000c0484, 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0400 + ((ch->unit+5)<<2), 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0400 + ((ch->unit+9)<<2), 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0240 + (ch->unit << 7),
ATA_OUTL(ctlr->r_res2, 0x000c0400 + ((ch->unit+1)<<2), 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0400 + ((ch->unit+13)<<2), 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0100, hpkt);
ATA_OUTL(ctlr->r_res2, 0x000c0100, hp->addr);
ATA_OUTL(ctlr->r_res2, 0x000c000c,
ATA_OUTL(ctlr->r_res2, fake_reg, 0xffffffff);
ATA_OUTL(ctlr->r_res2, stat_reg, 0x000000ff);
ATA_OUTL(ctlr->r_res2, 0x44, ATA_INL(ctlr->r_res2, 0x44) | 0x2000);
ATA_OUTL(ctlr->r_res1, ch->unit ? 0x24 : 0x20,
ATA_OUTL(ctlr->r_res1, ch->unit ? 0x24 : 0x20, 0);
ATA_OUTL(ctlr->r_res2, 0x040, vector);
ATA_OUTL(ctlr->r_res2, fake_reg, vector);
ATA_OUTL(ctlr->r_res2, fake_reg, 0xffffffff);
ATA_OUTL(ctlr->r_res2, stat_reg, status & (0x00000011 << ch->unit));
ATA_OUTL(ctlr->r_res2, (ch->unit + 1) << 2, 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x0240 + (ch->unit << 7), ch->dma->work_bus);
ATA_OUTL(ctlr->r_res2, 0xc0260 + (ch->unit << 7), ch->unit + 1);
ATA_OUTL(ctlr->r_res2, 0xc0260 + (ch->unit << 7),
ATA_OUTL(ctlr->r_res2, 0xc012c,
ATA_OUTL(ctlr->r_res2, 0xc012c,
ATA_OUTL(ctlr->r_res2, 0x06c, (0x00110000 << ch->unit));
ATA_OUTL(ctlr->r_res2, 0x0260 + (ch->unit << 7), (1 << 11));
ATA_OUTL(ctlr->r_res2, 0x0260 + (ch->unit << 7),
ATA_OUTL(ctlr->r_res2, 0x06c, (0x00000011 << ch->unit));
ATA_OUTL(ctlr->r_res2, 0x060, (0x00110000 << ch->unit));
ATA_OUTL(ctlr->r_res2, 0x0260 + (ch->unit << 7), (1 << 11));
ATA_OUTL(ctlr->r_res2, 0x0260 + (ch->unit << 7),
ATA_OUTL(ctlr->r_res2, 0x414 + (ch->unit << 8),
ATA_OUTL(ctlr->r_res2, 0x060, (0x00000011 << ch->unit));
ATA_OUTL(ctlr->r_res2, 0x4e8 + (ch->unit << 8), 0x00);
ATA_OUTL(ctlr->r_res2, 0x000c0240 + (ch->unit << 7),
ATA_OUTL(ctlr->r_res2, 0x000c0400 + ((ch->unit + 1) << 2), 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x000c0484, 0x00000001);
ATA_OUTL(ctlr->r_res1, 0x0040, 0x80000000);
ATA_OUTL(ctlr->r_res1, 0x0040, 0x0000000f);
ATA_OUTL(ctlr->r_res2, 0x0200, 0x00000002);
ATA_OUTL(ctlr->r_res2, 0x148 + (unit01 << 7) + (unit10 << 8),(1 << 16));
ATA_OUTL(ctlr->r_res2, 0x1008 + offset, istatus);
ATA_OUTL(ctlr->r_res2, 0x1004 + offset, 0x00000020);
ATA_OUTL(ctlr->r_res2, 0x1000 + offset, 0x00000020);
ATA_OUTL(ctlr->r_res2, 0x1c00 + offset, prb_bus);
ATA_OUTL(ctlr->r_res2, 0x1c04 + offset, prb_bus>>32);
ATA_OUTL(ctlr->r_res2, 0x1000 + offset, 0x00000004);
ATA_OUTL(ctlr->r_res2, 0x1c00 + offset, prb_bus);
ATA_OUTL(ctlr->r_res2, 0x1c04 + offset, prb_bus >> 32);
ATA_OUTL(ctlr->r_res2, 0x1014 + offset, 0x000000ff);
ATA_OUTL(ctlr->r_res2, 0x1000 + offset, 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x1004 + offset, 0x00000001);
ATA_OUTL(ctlr->r_res2, 0x1008 + offset, 0x000008ff);
ATA_OUTL(ctlr->r_res2, 0x1000 + offset, 0x00000008);
ATA_OUTL(ctlr->r_res2, 0x1004 + offset, 0x00000400);
ATA_OUTL(ctlr->r_res2, 0x1010 + offset, 0x000000ff);