Home | History | Annotate | Line # | Download | only in ic
mvsatareg.h revision 1.3.28.1
      1  1.3.28.1  jdolecek /*	$NetBSD: mvsatareg.h,v 1.3.28.1 2017/06/10 13:25:51 jdolecek 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.1  kiyohara 	uint32_t cprdbl;	/* cPRD Desriptor Table Base Low Address */
    254       1.1  kiyohara 	uint32_t cprdbh;	/* cPRD Desriptor 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.1  kiyohara 	uint32_t cprdbl;	/* cPRD Desriptor Table Base Low Address */
    261       1.1  kiyohara 	uint32_t cprdbh;	/* cPRD Desriptor 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.3.28.1  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