1 1.5 andvar /* $NetBSD: mvsatareg.h,v 1.5 2022/02/16 22:00:55 andvar Exp $ */ 2 1.1 kiyohara /* 3 1.1 kiyohara * Copyright (c) 2008 KIYOHARA Takashi 4 1.1 kiyohara * All rights reserved. 5 1.1 kiyohara * 6 1.1 kiyohara * Redistribution and use in source and binary forms, with or without 7 1.1 kiyohara * modification, are permitted provided that the following conditions 8 1.1 kiyohara * are met: 9 1.1 kiyohara * 1. Redistributions of source code must retain the above copyright 10 1.1 kiyohara * notice, this list of conditions and the following disclaimer. 11 1.1 kiyohara * 2. Redistributions in binary form must reproduce the above copyright 12 1.1 kiyohara * notice, this list of conditions and the following disclaimer in the 13 1.1 kiyohara * documentation and/or other materials provided with the distribution. 14 1.1 kiyohara * 15 1.1 kiyohara * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16 1.1 kiyohara * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 1.1 kiyohara * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 1.1 kiyohara * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 19 1.1 kiyohara * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 1.1 kiyohara * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 21 1.1 kiyohara * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 1.1 kiyohara * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 23 1.1 kiyohara * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 24 1.1 kiyohara * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 kiyohara * POSSIBILITY OF SUCH DAMAGE. 26 1.1 kiyohara */ 27 1.1 kiyohara 28 1.1 kiyohara #ifndef _MVSATAREG_H_ 29 1.1 kiyohara #define _MVSATAREG_H_ 30 1.1 kiyohara 31 1.1 kiyohara /* 32 1.1 kiyohara * SATAHC Arbiter Registers 33 1.1 kiyohara */ 34 1.1 kiyohara #define SATAHC_REGISTER_SIZE 0x10000 35 1.1 kiyohara #define SATAHC(hc) ((hc) * SATAHC_REGISTER_SIZE) 36 1.1 kiyohara 37 1.1 kiyohara #define SATAHC_C 0x000 /* Configuration */ 38 1.1 kiyohara #define SATAHC_C_TIMEOUT_MASK (0xff << 0) 39 1.1 kiyohara #define SATAHC_C_TIMEOUTEN (1 << 16) /* Timer Enable */ 40 1.1 kiyohara #define SATAHC_C_COALDIS(p) (1 << ((p) + 24))/* Coalescing Disable*/ 41 1.1 kiyohara #define SATAHC_RQOP 0x004 /* Request Queue Out-Pointer */ 42 1.1 kiyohara #define SATAHC_RQIP 0x008 /* Response Queue In-Pointer */ 43 1.1 kiyohara #define SATAHC_RQP_ERPQP(p, x) (((x) >> ((p) * 8)) & 0x7f) 44 1.1 kiyohara #define SATAHC_ICT 0x00c /* Interrupt Coalescing Threshold */ 45 1.1 kiyohara #define SATAHC_ICT_SAICOALT_MASK 0x000000ff 46 1.1 kiyohara #define SATAHC_ITT 0x010 /* Interrupt Time Threshold */ 47 1.1 kiyohara #define SATAHC_ITT_SAITMTH 0x00ffffff 48 1.1 kiyohara #define SATAHC_IC 0x014 /* Interrupt Cause */ 49 1.1 kiyohara #define SATAHC_IC_DONE(p) (1 << (p)) /* SaCrpb/DMA Done */ 50 1.1 kiyohara #define SATAHC_IC_SAINTCOAL (1 << 4) /* Intr Coalescing */ 51 1.1 kiyohara #define SATAHC_IC_SADEVINTERRUPT(p) (1 << ((p) + 8))/* Device Intr */ 52 1.1 kiyohara 53 1.1 kiyohara /* 54 1.1 kiyohara * Physical Registers for Generation I 55 1.1 kiyohara */ 56 1.1 kiyohara #define SATAHC_I_R02(p) ((p) * 0x100 + 0x108) 57 1.1 kiyohara #define SATAHC_I_PHYCONTROL(p) ((p) * 0x100 + 0x10c) 58 1.1 kiyohara #define SATAHC_I_LTMODE(p) ((p) * 0x100 + 0x130) 59 1.1 kiyohara #define SATAHC_I_PHYMODE(p) ((p) * 0x100 + 0x174) 60 1.1 kiyohara 61 1.1 kiyohara 62 1.1 kiyohara /* 63 1.1 kiyohara * EDMA Registers 64 1.1 kiyohara */ 65 1.1 kiyohara #define EDMA_REGISTERS_OFFSET 0x2000 66 1.1 kiyohara #define EDMA_REGISTERS_SIZE 0x2000 67 1.1 kiyohara 68 1.1 kiyohara #define EDMA_CFG 0x000 /* Configuration */ 69 1.1 kiyohara #define EDMA_CFG_RESERVED (0x1f << 0) /* Queue len ? */ 70 1.1 kiyohara #define EDMA_CFG_ESATANATVCMDQUE (1 << 5) 71 1.1 kiyohara #define EDMA_CFG_ERDBSZ (1 << 8) 72 1.1 kiyohara #define EDMA_CFG_EQUE (1 << 9) 73 1.1 kiyohara #define EDMA_CFG_ERDBSZEXT (1 << 11) 74 1.1 kiyohara #define EDMA_CFG_RESERVED2 (1 << 12) 75 1.1 kiyohara #define EDMA_CFG_EWRBUFFERLEN (1 << 13) 76 1.1 kiyohara #define EDMA_CFG_EDEVERR (1 << 14) 77 1.1 kiyohara #define EDMA_CFG_EEDMAFBS (1 << 16) 78 1.1 kiyohara #define EDMA_CFG_ECUTTHROUGHEN (1 << 17) 79 1.1 kiyohara #define EDMA_CFG_EEARLYCOMPLETIONEN (1 << 18) 80 1.1 kiyohara #define EDMA_CFG_EEDMAQUELEN (1 << 19) 81 1.1 kiyohara #define EDMA_CFG_EHOSTQUEUECACHEEN (1 << 22) 82 1.1 kiyohara #define EDMA_CFG_EMASKRXPM (1 << 23) 83 1.1 kiyohara #define EDMA_CFG_RESUMEDIS (1 << 24) 84 1.1 kiyohara #define EDMA_CFG_EDMAFBS (1 << 26) 85 1.1 kiyohara #define EDMA_T 0x004 /* Timer */ 86 1.1 kiyohara #define EDMA_IEC 0x008 /* Interrupt Error Cause */ 87 1.1 kiyohara #define EDMA_IEM 0x00c /* Interrupt Error Mask */ 88 1.1 kiyohara #define EDMA_IE_EDEVERR (1 << 2) /* EDMA Device Error */ 89 1.1 kiyohara #define EDMA_IE_EDEVDIS (1 << 3) /* EDMA Dev Disconn */ 90 1.1 kiyohara #define EDMA_IE_EDEVCON (1 << 4) /* EDMA Dev Conn */ 91 1.1 kiyohara #define EDMA_IE_SERRINT (1 << 5) 92 1.1 kiyohara #define EDMA_IE_ESELFDIS (1 << 7) /* EDMA Self Disable */ 93 1.1 kiyohara #define EDMA_IE_ETRANSINT (1 << 8) /* Transport Layer */ 94 1.1 kiyohara #define EDMA_IE_EIORDYERR (1 << 12) /* EDMA IORdy Error */ 95 1.1 kiyohara # define EDMA_IE_LINKXERR_SATACRC (1 << 0) /* SATA CRC error */ 96 1.1 kiyohara # define EDMA_IE_LINKXERR_INTERNALFIFO (1 << 1) /* internal FIFO err */ 97 1.1 kiyohara # define EDMA_IE_LINKXERR_LINKLAYERRESET (1 << 2) 98 1.1 kiyohara /* Link Layer is reset by the reception of SYNC primitive from device */ 99 1.1 kiyohara # define EDMA_IE_LINKXERR_OTHERERRORS (1 << 3) 100 1.1 kiyohara /* 101 1.1 kiyohara * Link state errors, coding errors, or running disparity errors occur 102 1.1 kiyohara * during FIS reception. 103 1.1 kiyohara */ 104 1.1 kiyohara # define EDMA_IE_LINKTXERR_FISTXABORTED (1 << 4) /* FIS Tx is aborted */ 105 1.1 kiyohara #define EDMA_IE_LINKCTLRXERR(x) ((x) << 13) /* Link Ctrl Recv Err */ 106 1.1 kiyohara #define EDMA_IE_LINKDATARXERR(x) ((x) << 17) /* Link Data Recv Err */ 107 1.1 kiyohara #define EDMA_IE_LINKCTLTXERR(x) ((x) << 21) /* Link Ctrl Tx Error */ 108 1.1 kiyohara #define EDMA_IE_LINKDATATXERR(x) ((x) << 26) /* Link Data Tx Error */ 109 1.1 kiyohara #define EDMA_IE_TRANSPROTERR (1 << 31) /* Transport Proto E */ 110 1.1 kiyohara #define EDMA_REQQBAH 0x010 /* Request Queue Base Address High */ 111 1.1 kiyohara #define EDMA_REQQIP 0x014 /* Request Queue In-Pointer */ 112 1.1 kiyohara #define EDMA_REQQOP 0x018 /* Request Queue Out-Pointer */ 113 1.1 kiyohara #define EDMA_REQQP_ERQQP_SHIFT 5 114 1.1 kiyohara #define EDMA_REQQP_ERQQP_MASK 0x000003e0 115 1.1 kiyohara #define EDMA_REQQP_ERQQBAP_MASK 0x00000c00 116 1.1 kiyohara #define EDMA_REQQP_ERQQBA_MASK 0xfffff000 117 1.1 kiyohara #define EDMA_RESQBAH 0x01c /* Response Queue Base Address High */ 118 1.1 kiyohara #define EDMA_RESQIP 0x020 /* Response Queue In-Pointer */ 119 1.1 kiyohara #define EDMA_RESQOP 0x024 /* Response Queue Out-Pointer */ 120 1.1 kiyohara #define EDMA_RESQP_ERPQP_SHIFT 3 121 1.1 kiyohara #define EDMA_RESQP_ERPQP_MASK 0x000000f8 122 1.1 kiyohara #define EDMA_RESQP_ERPQBAP_MASK 0x00000300 123 1.1 kiyohara #define EDMA_RESQP_ERPQBA_MASK 0xfffffc00 124 1.1 kiyohara #define EDMA_CMD 0x028 /* Command */ 125 1.1 kiyohara #define EDMA_CMD_EENEDMA (1 << 0) /* Enable EDMA */ 126 1.1 kiyohara #define EDMA_CMD_EDSEDMA (1 << 1) /* Disable EDMA */ 127 1.1 kiyohara #define EDMA_CMD_EATARST (1 << 2) /* ATA Device Reset */ 128 1.1 kiyohara #define EDMA_CMD_EEDMAFRZ (1 << 4) /* EDMA Freeze */ 129 1.1 kiyohara #define EDMA_TC 0x02c /* Test Control */ 130 1.1 kiyohara #define EDMA_S 0x030 /* Status */ 131 1.1 kiyohara #define EDMA_S_EDEVQUETAG(s) ((s) & 0x0000001f) 132 1.1 kiyohara #define EDMA_S_EDEVDIR_WRITE (0 << 5) 133 1.1 kiyohara #define EDMA_S_EDEVDIR_READ (1 << 5) 134 1.1 kiyohara #define EDMA_S_ECACHEEMPTY (1 << 6) 135 1.1 kiyohara #define EDMA_S_EDMAIDLE (1 << 7) 136 1.1 kiyohara #define EDMA_S_ESTATE(s) (((s) & 0x0000ff00) >> 8) 137 1.1 kiyohara #define EDMA_S_EIOID(s) (((s) & 0x003f0000) >> 16) 138 1.1 kiyohara #define EDMA_IORT 0x034 /* IORdy Timeout */ 139 1.1 kiyohara #define EDMA_CDT 0x040 /* Command Delay Threshold */ 140 1.1 kiyohara #define EDMA_HC 0x060 /* Halt Condition */ 141 1.1 kiyohara #define EDMA_CQDCQOS(x) (0x090 + ((x) << 2) 142 1.1 kiyohara /* NCQ Done/TCQ Outstanding Status */ 143 1.1 kiyohara 144 1.1 kiyohara /* 145 1.1 kiyohara * Shadow Register Block Registers 146 1.1 kiyohara */ 147 1.1 kiyohara #define SHADOW_REG_BLOCK_OFFSET 0x100 148 1.1 kiyohara #define SHADOW_REG_BLOCK_SIZE 0x100 149 1.1 kiyohara 150 1.1 kiyohara #define SRB_PIOD 0x000 /* PIO Data */ 151 1.1 kiyohara #define SRB_FE 0x004 /* Feature/Error */ 152 1.1 kiyohara #define SRB_SC 0x008 /* Sector Count */ 153 1.1 kiyohara #define SRB_LBAL 0x00c /* LBA Low */ 154 1.1 kiyohara #define SRB_LBAM 0x010 /* LBA Mid */ 155 1.1 kiyohara #define SRB_LBAH 0x014 /* LBA High */ 156 1.1 kiyohara #define SRB_H 0x018 /* Head */ 157 1.1 kiyohara #define SRB_CS 0x01c /* Command/Status */ 158 1.1 kiyohara #define SRB_CAS 0x020 /* Control/Alternate Status */ 159 1.1 kiyohara 160 1.1 kiyohara /* 161 1.1 kiyohara * Basic DMA Registers 162 1.1 kiyohara * Does support for this registers only 88Sx6xxx? 163 1.1 kiyohara */ 164 1.1 kiyohara #define DMA_C 0x224 /* Basic DMA Command */ 165 1.1 kiyohara #define DMA_C_START (1 << 0) 166 1.1 kiyohara #define DMA_C_READ (1 << 3) 167 1.1 kiyohara #define DMA_C_DREGIONVALID (1 << 8) 168 1.1 kiyohara #define DMA_C_DREGIONLAST (1 << 9) 169 1.1 kiyohara #define DMA_C_CONTFROMPREV (1 << 10) 170 1.1 kiyohara #define DMA_C_DRBC(n) (((n) & 0xffff) << 16) 171 1.1 kiyohara #define DMA_S 0x228 /* Basic DMA Status */ 172 1.1 kiyohara #define DMA_DTLBA 0x22c /* Descriptor Table Low Base Address */ 173 1.1 kiyohara #define DMA_DTLBA_MASK 0xfffffff0 174 1.1 kiyohara #define DMA_DTHBA 0x230 /* Descriptor Table High Base Address */ 175 1.1 kiyohara #define DMA_DRLA 0x234 /* Data Region Low Address */ 176 1.1 kiyohara #define DMA_DRHA 0x238 /* Data Region High Address */ 177 1.1 kiyohara 178 1.1 kiyohara /* 179 1.1 kiyohara * Serial-ATA Registers 180 1.1 kiyohara */ 181 1.1 kiyohara #define SATA_SS 0x300 /* SStatus */ 182 1.1 kiyohara #define SATA_SE 0x304 /* SError */ 183 1.1 kiyohara #define SATA_SEIM 0x340 /* SError Interrupt Mask */ 184 1.1 kiyohara #define SATA_SC 0x308 /* SControl */ 185 1.1 kiyohara #define SATA_LTM 0x30c /* LTMode */ 186 1.1 kiyohara #define SATA_PHYM3 0x310 /* PHY Mode 3 */ 187 1.1 kiyohara #define SATA_PHYM4 0x314 /* PHY Mode 4 */ 188 1.1 kiyohara #define SATA_PHYM1 0x32c /* PHY Mode 1 */ 189 1.1 kiyohara #define SATA_PHYM2 0x330 /* PHY Mode 2 */ 190 1.1 kiyohara #define SATA_BISTC 0x334 /* BIST Control */ 191 1.1 kiyohara #define SATA_BISTDW1 0x338 /* BIST DW1 */ 192 1.1 kiyohara #define SATA_BISTDW2 0x33c /* BIST DW2 */ 193 1.1 kiyohara #define SATA_SATAICFG 0x050 /* Serial-ATA Interface Configuration */ 194 1.2 jakllsch #define SATA_SATAICFG_REFCLKCNF_20MHZ (0 << 0) 195 1.2 jakllsch #define SATA_SATAICFG_REFCLKCNF_25MHZ (1 << 0) 196 1.2 jakllsch #define SATA_SATAICFG_REFCLKCNF_30MHZ (2 << 0) 197 1.2 jakllsch #define SATA_SATAICFG_REFCLKCNF_40MHZ (3 << 0) 198 1.2 jakllsch #define SATA_SATAICFG_REFCLKCNF_MASK (3 << 0) 199 1.2 jakllsch #define SATA_SATAICFG_REFCLKDIV_1 (0 << 2) 200 1.2 jakllsch #define SATA_SATAICFG_REFCLKDIV_2 (1 << 2) /* Used 20 or 25MHz */ 201 1.2 jakllsch #define SATA_SATAICFG_REFCLKDIV_4 (2 << 2) /* Used 40MHz */ 202 1.2 jakllsch #define SATA_SATAICFG_REFCLKDIV_3 (3 << 2) /* Used 30MHz */ 203 1.2 jakllsch #define SATA_SATAICFG_REFCLKDIV_MASK (3 << 2) 204 1.2 jakllsch #define SATA_SATAICFG_REFCLKFEEDDIV_50 (0 << 4) /* or 100, when Gen2En is 1 */ 205 1.2 jakllsch #define SATA_SATAICFG_REFCLKFEEDDIV_60 (1 << 4) /* or 120. Used 25MHz */ 206 1.2 jakllsch #define SATA_SATAICFG_REFCLKFEEDDIV_75 (2 << 4) /* or 150. Used 20MHz */ 207 1.2 jakllsch #define SATA_SATAICFG_REFCLKFEEDDIV_90 (3 << 4) /* or 180 */ 208 1.2 jakllsch #define SATA_SATAICFG_REFCLKFEEDDIV_MASK (3 << 4) 209 1.2 jakllsch #define SATA_SATAICFG_PHYSSCEN (1 << 6) 210 1.2 jakllsch #define SATA_SATAICFG_GEN2EN (1 << 7) 211 1.2 jakllsch #define SATA_SATAICFG_COMMEN (1 << 8) 212 1.2 jakllsch #define SATA_SATAICFG_PHYSHUTDOWN (1 << 9) 213 1.2 jakllsch #define SATA_SATAICFG_TARGETMODE (1 << 10) /* 1 = Initiator */ 214 1.2 jakllsch #define SATA_SATAICFG_COMCHANNEL (1 << 11) 215 1.2 jakllsch #define SATA_SATAICFG_IGNOREBSY (1 << 24) 216 1.2 jakllsch #define SATA_SATAICFG_LINKRSTEN (1 << 25) 217 1.2 jakllsch #define SATA_SATAICFG_CMDRETXDS (1 << 26) 218 1.1 kiyohara #define SATA_SATAICTL 0x344 /* Serial-ATA Interface Control */ 219 1.1 kiyohara #define SATA_SATAITC 0x348 /* Serial-ATA Interface Test Control */ 220 1.1 kiyohara #define SATA_SATAIS 0x34c /* Serial-ATA Interface Status */ 221 1.1 kiyohara #define SATA_VU 0x35c /* Vendor Unique */ 222 1.1 kiyohara #define SATA_FISC 0x360 /* FIS Configuration */ 223 1.1 kiyohara #define SATA_FISC_FISWAIT4RDYEN_B0 (1 << 0) /* Device to Host FIS */ 224 1.1 kiyohara #define SATA_FISC_FISWAIT4RDYEN_B1 (1 << 1) /* SDB FIS rcv with <N>bit 0 */ 225 1.1 kiyohara #define SATA_FISC_FISWAIT4RDYEN_B2 (1 << 2) /* DMA Activate FIS */ 226 1.1 kiyohara #define SATA_FISC_FISWAIT4RDYEN_B3 (1 << 3) /* DMA Setup FIS */ 227 1.1 kiyohara #define SATA_FISC_FISWAIT4RDYEN_B4 (1 << 4) /* Data FIS first DW */ 228 1.1 kiyohara #define SATA_FISC_FISWAIT4RDYEN_B5 (1 << 5) /* Data FIS entire FIS */ 229 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B0 (1 << 8) 230 1.1 kiyohara /* Device to Host FIS with <ERR> or <DF> */ 231 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B1 (1 << 9) /* SDB FIS rcv with <N>bit */ 232 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B2 (1 << 10) /* SDB FIS rcv with <ERR> */ 233 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B3 (1 << 11) /* BIST Acivate FIS */ 234 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B4 (1 << 12) /* PIO Setup FIS */ 235 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B5 (1 << 13) /* Data FIS with Link error */ 236 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B6 (1 << 14) /* Unrecognized FIS type */ 237 1.1 kiyohara #define SATA_FISC_FISWAIT4HOSTRDYEN_B7 (1 << 15) /* Any FIS */ 238 1.1 kiyohara #define SATA_FISC_FISDMAACTIVATESYNCRESP (1 << 16) 239 1.1 kiyohara #define SATA_FISC_FISUNRECTYPECONT (1 << 17) 240 1.1 kiyohara #define SATA_FISIC 0x364 /* FIS Interrupt Cause */ 241 1.1 kiyohara #define SATA_FISIM 0x368 /* FIS Interrupt Mask */ 242 1.1 kiyohara #define SATA_FISDW0 0x370 /* FIS DW0 */ 243 1.1 kiyohara #define SATA_FISDW1 0x374 /* FIS DW1 */ 244 1.1 kiyohara #define SATA_FISDW2 0x378 /* FIS DW2 */ 245 1.1 kiyohara #define SATA_FISDW3 0x37c /* FIS DW3 */ 246 1.1 kiyohara #define SATA_FISDW4 0x380 /* FIS DW4 */ 247 1.1 kiyohara #define SATA_FISDW5 0x384 /* FIS DW5 */ 248 1.1 kiyohara #define SATA_FISDW6 0x388 /* FIS DW6 */ 249 1.1 kiyohara 250 1.1 kiyohara 251 1.1 kiyohara /* EDMA Command Request Block (CRQB) Data */ 252 1.1 kiyohara struct crqb { 253 1.5 andvar uint32_t cprdbl; /* cPRD Descriptor Table Base Low Address */ 254 1.5 andvar uint32_t cprdbh; /* cPRD Descriptor Table Base High Address */ 255 1.1 kiyohara uint16_t ctrlflg; /* Control Flags */ 256 1.1 kiyohara uint16_t atacommand[11]; 257 1.3 jakllsch } __packed __aligned(8); 258 1.1 kiyohara 259 1.1 kiyohara struct crqb_gen2e { 260 1.5 andvar uint32_t cprdbl; /* cPRD Descriptor Table Base Low Address */ 261 1.5 andvar uint32_t cprdbh; /* cPRD Descriptor Table Base High Address */ 262 1.1 kiyohara uint32_t ctrlflg; /* Control Flags */ 263 1.1 kiyohara uint32_t drbc; /* Data Region Byte Count */ 264 1.4 jdolecek uint8_t atacommand[16]; 265 1.3 jakllsch } __packed __aligned(8); 266 1.1 kiyohara 267 1.1 kiyohara 268 1.1 kiyohara #define CRQB_CRQBL_EPRD_MASK 0xfffffff0 269 1.1 kiyohara #define CRQB_CRQBL_SDR_MASK 0xfffffffe /* Single data region mask */ 270 1.1 kiyohara 271 1.1 kiyohara /* Control Flags */ 272 1.1 kiyohara #define CRQB_CDIR_WRITE (0 << 0) 273 1.1 kiyohara #define CRQB_CDIR_READ (1 << 0) 274 1.1 kiyohara #define CRQB_CDEVICEQUETAG(x) (((x) & 0x1f) << 1) /* CRQB Dev Queue Tag */ 275 1.1 kiyohara #define CRQB_CHOSTQUETAG(x) (((x) & 0x7f) << 1) /* CRQB Host Q Tag */ 276 1.1 kiyohara #define CRQB_CPMPORT(x) (((x) & 0xf) << 12) /* PM Port Transmit */ 277 1.1 kiyohara #define CRQB_CPRDMODE_EPRD (0 << 16) /* PRD table */ 278 1.1 kiyohara #define CRQB_CPRDMODE_SDR (1 << 16) /* Single data region */ 279 1.1 kiyohara #define CRQB_CHOSTQUETAG_GEN2(x) (((x) & 0x7f) << 17) /* CRQB Host Q Tag G2 */ 280 1.1 kiyohara 281 1.1 kiyohara /* Data Region Byte Count */ 282 1.1 kiyohara #define CRQB_CDRBC(x) (((x) & 0xfffe) << 0) 283 1.1 kiyohara 284 1.1 kiyohara #define CRQB_ATACOMMAND(reg, val) \ 285 1.1 kiyohara ((reg << 8) | (val & 0xff)) 286 1.1 kiyohara #define CRQB_ATACOMMAND_LAST (1 << 15) 287 1.1 kiyohara #define CRQB_ATACOMMAND_REG(reg) (((reg) >> 2) + 0x10) 288 1.1 kiyohara #define CRQB_ATACOMMAND_FEATURES CRQB_ATACOMMAND_REG(SRB_FE) 289 1.1 kiyohara #define CRQB_ATACOMMAND_SECTORCOUNT CRQB_ATACOMMAND_REG(SRB_SC) 290 1.1 kiyohara #define CRQB_ATACOMMAND_LBALOW CRQB_ATACOMMAND_REG(SRB_LBAL) 291 1.1 kiyohara #define CRQB_ATACOMMAND_LBAMID CRQB_ATACOMMAND_REG(SRB_LBAM) 292 1.1 kiyohara #define CRQB_ATACOMMAND_LBAHIGH CRQB_ATACOMMAND_REG(SRB_LBAH) 293 1.1 kiyohara #define CRQB_ATACOMMAND_DEVICE CRQB_ATACOMMAND_REG(SRB_H) 294 1.1 kiyohara #define CRQB_ATACOMMAND_COMMAND CRQB_ATACOMMAND_REG(SRB_CS) 295 1.1 kiyohara 296 1.1 kiyohara 297 1.1 kiyohara /* EDMA Phisical Region Descriptors (ePRD) Table Data Structure */ 298 1.1 kiyohara struct eprd { 299 1.1 kiyohara uint32_t prdbal; /* address bits[31:1] */ 300 1.1 kiyohara uint16_t bytecount; /* Byte Count */ 301 1.1 kiyohara uint16_t eot; /* End Of Table */ 302 1.1 kiyohara uint32_t prdbah; /* address bits[63:32] */ 303 1.1 kiyohara uint32_t resv; 304 1.3 jakllsch } __packed __aligned(8); 305 1.1 kiyohara 306 1.1 kiyohara #define EPRD_PRDBAL_MASK 0xfffffffe /* phy memory region mask */ 307 1.1 kiyohara 308 1.1 kiyohara #define EPRD_BYTECOUNT(x) (((x) & 0xffff) << 0) 309 1.1 kiyohara #define EPRD_EOT (1 << 15) /* End Of Table */ 310 1.1 kiyohara 311 1.1 kiyohara 312 1.1 kiyohara /* EDMA Command Response Block (CRPB) Data */ 313 1.1 kiyohara struct crpb { 314 1.1 kiyohara uint16_t id; /* CRPB ID */ 315 1.1 kiyohara uint16_t rspflg; /* CPRB Response Flags */ 316 1.1 kiyohara uint32_t ts; /* CPRB Time Stamp */ 317 1.3 jakllsch } __packed __aligned(8); 318 1.1 kiyohara 319 1.1 kiyohara /* ID */ 320 1.1 kiyohara #define CRPB_CHOSTQUETAG(x) (((x) >> 0) & 0x7f) /* CRPB Host Q Tag */ 321 1.1 kiyohara 322 1.1 kiyohara /* Response Flags */ 323 1.1 kiyohara #define CRPB_CEDMASTS(x) (((x) >> 0) & 0x7f) /* CRPB EDMA Status */ 324 1.1 kiyohara #define CRPB_CDEVSTS(x) (((x) >> 8) & 0xff) /* CRPB Device Status */ 325 1.1 kiyohara 326 1.1 kiyohara #endif /* _MVSATAREG_H_ */ 327