xref: /rk3399_rockchip-uboot/include/fis.h (revision 69386383c5c2b323c66495b0b0cef6a9714d83bf)
1*69386383SDave Liu /*
2*69386383SDave Liu  * Copyright (C) 2008 Freescale Semiconductor, Inc.
3*69386383SDave Liu  *		Dave Liu <daveliu@freescale.com>
4*69386383SDave Liu  *
5*69386383SDave Liu  * This program is free software; you can redistribute it and/or
6*69386383SDave Liu  * modify it under the terms of the GNU General Public License as
7*69386383SDave Liu  * published by the Free Software Foundation; either version 2 of
8*69386383SDave Liu  * the License, or (at your option) any later version.
9*69386383SDave Liu  *
10*69386383SDave Liu  * This program is distributed in the hope that it will be useful,
11*69386383SDave Liu  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*69386383SDave Liu  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*69386383SDave Liu  * GNU General Public License for more details.
14*69386383SDave Liu  *
15*69386383SDave Liu  * You should have received a copy of the GNU General Public License
16*69386383SDave Liu  * along with this program; if not, write to the Free Software
17*69386383SDave Liu  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
18*69386383SDave Liu  * MA 02111-1307 USA
19*69386383SDave Liu  *
20*69386383SDave Liu  */
21*69386383SDave Liu 
22*69386383SDave Liu #ifndef __FIS_H__
23*69386383SDave Liu #define __FIS_H__
24*69386383SDave Liu /*
25*69386383SDave Liu * Register - Host to Device FIS
26*69386383SDave Liu */
27*69386383SDave Liu typedef struct sata_fis_h2d {
28*69386383SDave Liu 	u8 fis_type;
29*69386383SDave Liu 	u8 pm_port_c;
30*69386383SDave Liu 	u8 command;
31*69386383SDave Liu 	u8 features;
32*69386383SDave Liu 	u8 lba_low;
33*69386383SDave Liu 	u8 lba_mid;
34*69386383SDave Liu 	u8 lba_high;
35*69386383SDave Liu 	u8 device;
36*69386383SDave Liu 	u8 lba_low_exp;
37*69386383SDave Liu 	u8 lba_mid_exp;
38*69386383SDave Liu 	u8 lba_high_exp;
39*69386383SDave Liu 	u8 features_exp;
40*69386383SDave Liu 	u8 sector_count;
41*69386383SDave Liu 	u8 sector_count_exp;
42*69386383SDave Liu 	u8 res1;
43*69386383SDave Liu 	u8 control;
44*69386383SDave Liu 	u8 res2[4];
45*69386383SDave Liu } __attribute__ ((packed)) sata_fis_h2d_t;
46*69386383SDave Liu 
47*69386383SDave Liu /*
48*69386383SDave Liu * Register - Host to Device FIS for read/write FPDMA queued
49*69386383SDave Liu */
50*69386383SDave Liu typedef struct sata_fis_h2d_ncq {
51*69386383SDave Liu 	u8 fis_type;
52*69386383SDave Liu 	u8 pm_port_c;
53*69386383SDave Liu 	u8 command;
54*69386383SDave Liu 	u8 sector_count_low;
55*69386383SDave Liu 	u8 lba_low;
56*69386383SDave Liu 	u8 lba_mid;
57*69386383SDave Liu 	u8 lba_high;
58*69386383SDave Liu 	u8 device;
59*69386383SDave Liu 	u8 lba_low_exp;
60*69386383SDave Liu 	u8 lba_mid_exp;
61*69386383SDave Liu 	u8 lba_high_exp;
62*69386383SDave Liu 	u8 sector_count_high;
63*69386383SDave Liu 	u8 tag;
64*69386383SDave Liu 	u8 res1;
65*69386383SDave Liu 	u8 res2;
66*69386383SDave Liu 	u8 control;
67*69386383SDave Liu 	u8 res3[4];
68*69386383SDave Liu } __attribute__ ((packed)) sata_fis_h2d_ncq_t;
69*69386383SDave Liu 
70*69386383SDave Liu /*
71*69386383SDave Liu * Register - Device to Host FIS
72*69386383SDave Liu */
73*69386383SDave Liu typedef struct sata_fis_d2h {
74*69386383SDave Liu 	u8 fis_type;
75*69386383SDave Liu 	u8 pm_port_i;
76*69386383SDave Liu 	u8 status;
77*69386383SDave Liu 	u8 error;
78*69386383SDave Liu 	u8 lba_low;
79*69386383SDave Liu 	u8 lba_mid;
80*69386383SDave Liu 	u8 lba_high;
81*69386383SDave Liu 	u8 device;
82*69386383SDave Liu 	u8 lba_low_exp;
83*69386383SDave Liu 	u8 lba_mid_exp;
84*69386383SDave Liu 	u8 lba_high_exp;
85*69386383SDave Liu 	u8 res1;
86*69386383SDave Liu 	u8 sector_count;
87*69386383SDave Liu 	u8 sector_count_exp;
88*69386383SDave Liu 	u8 res2[2];
89*69386383SDave Liu 	u8 res3[4];
90*69386383SDave Liu } __attribute__ ((packed)) sata_fis_d2h_t;
91*69386383SDave Liu 
92*69386383SDave Liu /*
93*69386383SDave Liu * DMA Setup - Device to Host or Host to Device FIS
94*69386383SDave Liu */
95*69386383SDave Liu typedef struct sata_fis_dma_setup {
96*69386383SDave Liu 	u8 fis_type;
97*69386383SDave Liu 	u8 pm_port_dir_int_act;
98*69386383SDave Liu 	u8 res1;
99*69386383SDave Liu 	u8 res2;
100*69386383SDave Liu 	u32 dma_buffer_id_low;
101*69386383SDave Liu 	u32 dma_buffer_id_high;
102*69386383SDave Liu 	u32 res3;
103*69386383SDave Liu 	u32 dma_buffer_offset;
104*69386383SDave Liu 	u32 dma_transfer_count;
105*69386383SDave Liu 	u32 res4;
106*69386383SDave Liu } __attribute__ ((packed)) sata_fis_dma_setup_t;
107*69386383SDave Liu 
108*69386383SDave Liu /*
109*69386383SDave Liu * PIO Setup - Device to Host FIS
110*69386383SDave Liu */
111*69386383SDave Liu typedef struct sata_fis_pio_setup {
112*69386383SDave Liu 	u8 fis_type;
113*69386383SDave Liu 	u8 pm_port_dir_int;
114*69386383SDave Liu 	u8 status;
115*69386383SDave Liu 	u8 error;
116*69386383SDave Liu 	u8 lba_low;
117*69386383SDave Liu 	u8 lba_mid;
118*69386383SDave Liu 	u8 lba_high;
119*69386383SDave Liu 	u8 res1;
120*69386383SDave Liu 	u8 lba_low_exp;
121*69386383SDave Liu 	u8 lba_mid_exp;
122*69386383SDave Liu 	u8 lba_high_exp;
123*69386383SDave Liu 	u8 res2;
124*69386383SDave Liu 	u8 sector_count;
125*69386383SDave Liu 	u8 sector_count_exp;
126*69386383SDave Liu 	u8 res3;
127*69386383SDave Liu 	u8 e_status;
128*69386383SDave Liu 	u16 transfer_count;
129*69386383SDave Liu 	u16 res4;
130*69386383SDave Liu } __attribute__ ((packed)) sata_fis_pio_setup_t;
131*69386383SDave Liu 
132*69386383SDave Liu /*
133*69386383SDave Liu * Data - Host to Device or Device to Host FIS
134*69386383SDave Liu */
135*69386383SDave Liu typedef struct sata_fis_data {
136*69386383SDave Liu 	u8 fis_type;
137*69386383SDave Liu 	u8 pm_port;
138*69386383SDave Liu 	u8 res1;
139*69386383SDave Liu 	u8 res2;
140*69386383SDave Liu 	u32 data[2048];
141*69386383SDave Liu } __attribute__ ((packed)) sata_fis_data_t;
142*69386383SDave Liu 
143*69386383SDave Liu /* fis_type - SATA FIS type
144*69386383SDave Liu  */
145*69386383SDave Liu enum sata_fis_type {
146*69386383SDave Liu 	SATA_FIS_TYPE_REGISTER_H2D		= 0x27,
147*69386383SDave Liu 	SATA_FIS_TYPE_REGISTER_D2H		= 0x34,
148*69386383SDave Liu 	SATA_FIS_TYPE_DMA_ACT_D2H		= 0x39,
149*69386383SDave Liu 	SATA_FIS_TYPE_DMA_SETUP_BI		= 0x41,
150*69386383SDave Liu 	SATA_FIS_TYPE_DATA_BI			= 0x46,
151*69386383SDave Liu 	SATA_FIS_TYPE_BIST_ACT_BI		= 0x58,
152*69386383SDave Liu 	SATA_FIS_TYPE_PIO_SETUP_D2H		= 0x5F,
153*69386383SDave Liu 	SATA_FIS_TYPE_SET_DEVICE_BITS_D2H	= 0xA1,
154*69386383SDave Liu };
155*69386383SDave Liu 
156*69386383SDave Liu #endif	/* __FIS_H__ */
157