diff options
| -rw-r--r-- | drivers/ata/sata_inic162x.c | 59 |
1 files changed, 56 insertions, 3 deletions
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c index 1f5d17eb0f38..1b10455e1ae0 100644 --- a/drivers/ata/sata_inic162x.c +++ b/drivers/ata/sata_inic162x.c | |||
| @@ -35,6 +35,7 @@ enum { | |||
| 35 | 35 | ||
| 36 | NR_PORTS = 2, | 36 | NR_PORTS = 2, |
| 37 | 37 | ||
| 38 | HOST_ACTRL = 0x08, | ||
| 38 | HOST_CTL = 0x7c, | 39 | HOST_CTL = 0x7c, |
| 39 | HOST_STAT = 0x7e, | 40 | HOST_STAT = 0x7e, |
| 40 | HOST_IRQ_STAT = 0xbc, | 41 | HOST_IRQ_STAT = 0xbc, |
| @@ -43,22 +44,37 @@ enum { | |||
| 43 | PORT_SIZE = 0x40, | 44 | PORT_SIZE = 0x40, |
| 44 | 45 | ||
| 45 | /* registers for ATA TF operation */ | 46 | /* registers for ATA TF operation */ |
| 46 | PORT_TF = 0x00, | 47 | PORT_TF_DATA = 0x00, |
| 47 | PORT_ALT_STAT = 0x08, | 48 | PORT_TF_FEATURE = 0x01, |
| 49 | PORT_TF_NSECT = 0x02, | ||
| 50 | PORT_TF_LBAL = 0x03, | ||
| 51 | PORT_TF_LBAM = 0x04, | ||
| 52 | PORT_TF_LBAH = 0x05, | ||
| 53 | PORT_TF_DEVICE = 0x06, | ||
| 54 | PORT_TF_COMMAND = 0x07, | ||
| 55 | PORT_TF_ALT_STAT = 0x08, | ||
| 48 | PORT_IRQ_STAT = 0x09, | 56 | PORT_IRQ_STAT = 0x09, |
| 49 | PORT_IRQ_MASK = 0x0a, | 57 | PORT_IRQ_MASK = 0x0a, |
| 50 | PORT_PRD_CTL = 0x0b, | 58 | PORT_PRD_CTL = 0x0b, |
| 51 | PORT_PRD_ADDR = 0x0c, | 59 | PORT_PRD_ADDR = 0x0c, |
| 52 | PORT_PRD_XFERLEN = 0x10, | 60 | PORT_PRD_XFERLEN = 0x10, |
| 61 | PORT_CPB_CPBLAR = 0x18, | ||
| 62 | PORT_CPB_PTQFIFO = 0x1c, | ||
| 53 | 63 | ||
| 54 | /* IDMA register */ | 64 | /* IDMA register */ |
| 55 | PORT_IDMA_CTL = 0x14, | 65 | PORT_IDMA_CTL = 0x14, |
| 66 | PORT_IDMA_STAT = 0x16, | ||
| 67 | |||
| 68 | PORT_RPQ_FIFO = 0x1e, | ||
| 69 | PORT_RPQ_CNT = 0x1f, | ||
| 56 | 70 | ||
| 57 | PORT_SCR = 0x20, | 71 | PORT_SCR = 0x20, |
| 58 | 72 | ||
| 59 | /* HOST_CTL bits */ | 73 | /* HOST_CTL bits */ |
| 60 | HCTL_IRQOFF = (1 << 8), /* global IRQ off */ | 74 | HCTL_IRQOFF = (1 << 8), /* global IRQ off */ |
| 61 | HCTL_PWRDWN = (1 << 13), /* power down PHYs */ | 75 | HCTL_FTHD0 = (1 << 10), /* fifo threshold 0 */ |
| 76 | HCTL_FTHD1 = (1 << 11), /* fifo threshold 1*/ | ||
| 77 | HCTL_PWRDWN = (1 << 12), /* power down PHYs */ | ||
| 62 | HCTL_SOFTRST = (1 << 13), /* global reset (no phy reset) */ | 78 | HCTL_SOFTRST = (1 << 13), /* global reset (no phy reset) */ |
| 63 | HCTL_RPGSEL = (1 << 15), /* register page select */ | 79 | HCTL_RPGSEL = (1 << 15), /* register page select */ |
| 64 | 80 | ||
| @@ -96,6 +112,43 @@ enum { | |||
| 96 | IDMA_CTL_RST_IDMA = (1 << 5), /* reset IDMA machinary */ | 112 | IDMA_CTL_RST_IDMA = (1 << 5), /* reset IDMA machinary */ |
| 97 | IDMA_CTL_GO = (1 << 7), /* IDMA mode go */ | 113 | IDMA_CTL_GO = (1 << 7), /* IDMA mode go */ |
| 98 | IDMA_CTL_ATA_NIEN = (1 << 8), /* ATA IRQ disable */ | 114 | IDMA_CTL_ATA_NIEN = (1 << 8), /* ATA IRQ disable */ |
| 115 | |||
| 116 | /* PORT_IDMA_STAT bits */ | ||
| 117 | IDMA_STAT_PERR = (1 << 0), /* PCI ERROR MODE */ | ||
| 118 | IDMA_STAT_CPBERR = (1 << 1), /* ADMA CPB error */ | ||
| 119 | IDMA_STAT_LGCY = (1 << 3), /* ADMA legacy */ | ||
| 120 | IDMA_STAT_UIRQ = (1 << 4), /* ADMA unsolicited irq */ | ||
| 121 | IDMA_STAT_STPD = (1 << 5), /* ADMA stopped */ | ||
| 122 | IDMA_STAT_PSD = (1 << 6), /* ADMA pause */ | ||
| 123 | IDMA_STAT_DONE = (1 << 7), /* ADMA done */ | ||
| 124 | |||
| 125 | IDMA_STAT_ERR = IDMA_STAT_PERR | IDMA_STAT_CPBERR, | ||
| 126 | |||
| 127 | /* CPB Control Flags*/ | ||
| 128 | CPB_CTL_VALID = (1 << 0), /* CPB valid */ | ||
| 129 | CPB_CTL_QUEUED = (1 << 1), /* queued command */ | ||
| 130 | CPB_CTL_DATA = (1 << 2), /* data, rsvd in datasheet */ | ||
| 131 | CPB_CTL_IEN = (1 << 3), /* PCI interrupt enable */ | ||
| 132 | CPB_CTL_DEVDIR = (1 << 4), /* device direction control */ | ||
| 133 | |||
| 134 | /* CPB Response Flags */ | ||
| 135 | CPB_RESP_DONE = (1 << 0), /* ATA command complete */ | ||
| 136 | CPB_RESP_REL = (1 << 1), /* ATA release */ | ||
| 137 | CPB_RESP_IGNORED = (1 << 2), /* CPB ignored */ | ||
| 138 | CPB_RESP_ATA_ERR = (1 << 3), /* ATA command error */ | ||
| 139 | CPB_RESP_SPURIOUS = (1 << 4), /* ATA spurious interrupt error */ | ||
| 140 | CPB_RESP_UNDERFLOW = (1 << 5), /* APRD deficiency length error */ | ||
| 141 | CPB_RESP_OVERFLOW = (1 << 6), /* APRD exccess length error */ | ||
| 142 | CPB_RESP_CPB_ERR = (1 << 7), /* CPB error flag */ | ||
| 143 | |||
| 144 | /* PRD Control Flags */ | ||
| 145 | PRD_DRAIN = (1 << 1), /* ignore data excess */ | ||
| 146 | PRD_CDB = (1 << 2), /* atapi packet command pointer */ | ||
| 147 | PRD_DIRECT_INTR = (1 << 3), /* direct interrupt */ | ||
| 148 | PRD_DMA = (1 << 4), /* data transfer method */ | ||
| 149 | PRD_WRITE = (1 << 5), /* data dir, rsvd in datasheet */ | ||
| 150 | PRD_IOM = (1 << 6), /* io/memory transfer */ | ||
| 151 | PRD_END = (1 << 7), /* APRD chain end */ | ||
| 99 | }; | 152 | }; |
| 100 | 153 | ||
| 101 | struct inic_host_priv { | 154 | struct inic_host_priv { |
