xref: /onnv-gate/usr/src/uts/common/sys/scsi/adapters/pmcs/atapi7v3.h (revision 10696:cd0f390dd9e2)
1*10696SDavid.Hollister@Sun.COM /*
2*10696SDavid.Hollister@Sun.COM  * CDDL HEADER START
3*10696SDavid.Hollister@Sun.COM  *
4*10696SDavid.Hollister@Sun.COM  * The contents of this file are subject to the terms of the
5*10696SDavid.Hollister@Sun.COM  * Common Development and Distribution License (the "License").
6*10696SDavid.Hollister@Sun.COM  * You may not use this file except in compliance with the License.
7*10696SDavid.Hollister@Sun.COM  *
8*10696SDavid.Hollister@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*10696SDavid.Hollister@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*10696SDavid.Hollister@Sun.COM  * See the License for the specific language governing permissions
11*10696SDavid.Hollister@Sun.COM  * and limitations under the License.
12*10696SDavid.Hollister@Sun.COM  *
13*10696SDavid.Hollister@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*10696SDavid.Hollister@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*10696SDavid.Hollister@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*10696SDavid.Hollister@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*10696SDavid.Hollister@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*10696SDavid.Hollister@Sun.COM  *
19*10696SDavid.Hollister@Sun.COM  * CDDL HEADER END
20*10696SDavid.Hollister@Sun.COM  *
21*10696SDavid.Hollister@Sun.COM  *
22*10696SDavid.Hollister@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*10696SDavid.Hollister@Sun.COM  * Use is subject to license terms.
24*10696SDavid.Hollister@Sun.COM  */
25*10696SDavid.Hollister@Sun.COM /*
26*10696SDavid.Hollister@Sun.COM  * ATAPI-7 Definitions (subset) that include Serial ATA
27*10696SDavid.Hollister@Sun.COM  * ATA/ATAPI-7 V3 (d1532v3r4b-ATA-ATAPI-7)
28*10696SDavid.Hollister@Sun.COM  */
29*10696SDavid.Hollister@Sun.COM #ifndef	_ATAPI7V3_H
30*10696SDavid.Hollister@Sun.COM #define	_ATAPI7V3_H
31*10696SDavid.Hollister@Sun.COM #ifdef	__cplusplus
32*10696SDavid.Hollister@Sun.COM extern "C" {
33*10696SDavid.Hollister@Sun.COM #endif
34*10696SDavid.Hollister@Sun.COM 
35*10696SDavid.Hollister@Sun.COM /*
36*10696SDavid.Hollister@Sun.COM  * Register - Host to Device FIS
37*10696SDavid.Hollister@Sun.COM  */
38*10696SDavid.Hollister@Sun.COM typedef struct {
39*10696SDavid.Hollister@Sun.COM 	uint8_t 	fis_type;
40*10696SDavid.Hollister@Sun.COM 	uint8_t 	idcbits;
41*10696SDavid.Hollister@Sun.COM 	uint8_t		cmd;
42*10696SDavid.Hollister@Sun.COM 	uint8_t		features;
43*10696SDavid.Hollister@Sun.COM #define	FEATURE_LBA	0x40
44*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_low;
45*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_mid;
46*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_hi;
47*10696SDavid.Hollister@Sun.COM 	uint8_t		device;
48*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_low_exp;
49*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_mid_exp;
50*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_hi_exp;
51*10696SDavid.Hollister@Sun.COM 	uint8_t		features_exp;
52*10696SDavid.Hollister@Sun.COM 	uint8_t		sector_count;
53*10696SDavid.Hollister@Sun.COM 	uint8_t		sector_count_exp;
54*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved0;
55*10696SDavid.Hollister@Sun.COM 	uint8_t		control;
56*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved1[4];
57*10696SDavid.Hollister@Sun.COM } register_h2d_fis_t;
58*10696SDavid.Hollister@Sun.COM 
59*10696SDavid.Hollister@Sun.COM /*
60*10696SDavid.Hollister@Sun.COM  * Register - Device to Host FIS
61*10696SDavid.Hollister@Sun.COM  */
62*10696SDavid.Hollister@Sun.COM typedef struct {
63*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
64*10696SDavid.Hollister@Sun.COM 	uint8_t		idcbits;
65*10696SDavid.Hollister@Sun.COM 	uint8_t		status;
66*10696SDavid.Hollister@Sun.COM 	uint8_t		error;
67*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_low;
68*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_mid;
69*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_hi;
70*10696SDavid.Hollister@Sun.COM 	uint8_t		device;
71*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_low_exp;
72*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_mid_exp;
73*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_hi_exp;
74*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved0;
75*10696SDavid.Hollister@Sun.COM 	uint8_t		sector_count;
76*10696SDavid.Hollister@Sun.COM 	uint8_t		sector_count_exp;
77*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved1[6];
78*10696SDavid.Hollister@Sun.COM } register_d2h_fis_t;
79*10696SDavid.Hollister@Sun.COM 
80*10696SDavid.Hollister@Sun.COM typedef struct {
81*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
82*10696SDavid.Hollister@Sun.COM 	uint8_t		idcbits;
83*10696SDavid.Hollister@Sun.COM 	uint8_t		status_bits;
84*10696SDavid.Hollister@Sun.COM #define	STATUS_HI_MASK	0xE
85*10696SDavid.Hollister@Sun.COM #define	STATUS_HI_SHIFT	4
86*10696SDavid.Hollister@Sun.COM #define	STATUS_LO_MASK	0x7
87*10696SDavid.Hollister@Sun.COM 	uint8_t		error;
88*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved;
89*10696SDavid.Hollister@Sun.COM } set_device_bits_fis_t;
90*10696SDavid.Hollister@Sun.COM 
91*10696SDavid.Hollister@Sun.COM typedef struct {
92*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
93*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved[3];
94*10696SDavid.Hollister@Sun.COM } dma_activate_fis_type;
95*10696SDavid.Hollister@Sun.COM 
96*10696SDavid.Hollister@Sun.COM typedef struct {
97*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
98*10696SDavid.Hollister@Sun.COM 	uint8_t		idcbits;
99*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved0[2];
100*10696SDavid.Hollister@Sun.COM 	uint32_t	dma_buffer_id_lo;
101*10696SDavid.Hollister@Sun.COM 	uint32_t	dma_buffer_id_hi;
102*10696SDavid.Hollister@Sun.COM 	uint32_t	reserved1;
103*10696SDavid.Hollister@Sun.COM 	uint32_t	dma_buffer_offset;
104*10696SDavid.Hollister@Sun.COM 	uint32_t	dma_buffer_count;
105*10696SDavid.Hollister@Sun.COM 	uint32_t	reserved2;
106*10696SDavid.Hollister@Sun.COM } dma_fpactivate_fis_t;
107*10696SDavid.Hollister@Sun.COM 
108*10696SDavid.Hollister@Sun.COM typedef struct {
109*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
110*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved0;
111*10696SDavid.Hollister@Sun.COM 	uint8_t		bist_bits;
112*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved1;
113*10696SDavid.Hollister@Sun.COM 	uint8_t		data[8];
114*10696SDavid.Hollister@Sun.COM } bist_activate_fis_t;
115*10696SDavid.Hollister@Sun.COM #define	BIST_T	0x80
116*10696SDavid.Hollister@Sun.COM #define	BIST_A	0x40
117*10696SDavid.Hollister@Sun.COM #define	BIST_S	0x20
118*10696SDavid.Hollister@Sun.COM #define	BIST_L	0x10
119*10696SDavid.Hollister@Sun.COM #define	BIST_F	0x08
120*10696SDavid.Hollister@Sun.COM #define	BIST_P	0x04
121*10696SDavid.Hollister@Sun.COM #define	BIST_V	0x01
122*10696SDavid.Hollister@Sun.COM 
123*10696SDavid.Hollister@Sun.COM typedef struct {
124*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
125*10696SDavid.Hollister@Sun.COM 	uint8_t		idcbits;
126*10696SDavid.Hollister@Sun.COM 	uint8_t		status;
127*10696SDavid.Hollister@Sun.COM 	uint8_t		error;
128*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_low;
129*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_mid;
130*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_high;
131*10696SDavid.Hollister@Sun.COM 	uint8_t		device;
132*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_low_exp;
133*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_mid_exp;
134*10696SDavid.Hollister@Sun.COM 	uint8_t		lba_high_exp;
135*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved0;
136*10696SDavid.Hollister@Sun.COM 	uint8_t		sector_count;
137*10696SDavid.Hollister@Sun.COM 	uint8_t		sector_count_exp;
138*10696SDavid.Hollister@Sun.COM 	uint8_t		reserved1;
139*10696SDavid.Hollister@Sun.COM 	uint8_t		E_status;
140*10696SDavid.Hollister@Sun.COM 	uint16_t	transfer_count;
141*10696SDavid.Hollister@Sun.COM 	uint16_t	reserved2;
142*10696SDavid.Hollister@Sun.COM } pio_setup_fis_t;
143*10696SDavid.Hollister@Sun.COM 
144*10696SDavid.Hollister@Sun.COM typedef struct {
145*10696SDavid.Hollister@Sun.COM 	uint8_t		fis_type;
146*10696SDavid.Hollister@Sun.COM 	uint32_t	dwords[1];
147*10696SDavid.Hollister@Sun.COM } bidirectional_fis_t;
148*10696SDavid.Hollister@Sun.COM 
149*10696SDavid.Hollister@Sun.COM /*
150*10696SDavid.Hollister@Sun.COM  * FIS Types
151*10696SDavid.Hollister@Sun.COM  */
152*10696SDavid.Hollister@Sun.COM 
153*10696SDavid.Hollister@Sun.COM #define	FIS_REG_H2DEV		0x27	/* 5 DWORDS */
154*10696SDavid.Hollister@Sun.COM #define	FIS_REG_D2H		0x34	/* 5 DWORDS */
155*10696SDavid.Hollister@Sun.COM #define	FIS_SET_DEVICE_BITS	0xA1	/* 2 DWORDS */
156*10696SDavid.Hollister@Sun.COM #define	FIS_DMA_ACTIVATE	0x39	/* 1 DWORD */
157*10696SDavid.Hollister@Sun.COM #define	FIS_DMA_FPSETUP		0x41	/* 7 DWORDS */
158*10696SDavid.Hollister@Sun.COM #define	FIS_BIST_ACTIVATE	0x58	/* 3 DWORDS */
159*10696SDavid.Hollister@Sun.COM #define	FIS_PIO_SETUP		0x5F	/* 5 DWORDS */
160*10696SDavid.Hollister@Sun.COM #define	FIS_BI			0x46	/* 1 DWORD min, 2048 DWORD max */
161*10696SDavid.Hollister@Sun.COM 
162*10696SDavid.Hollister@Sun.COM /*
163*10696SDavid.Hollister@Sun.COM  * IDC bits
164*10696SDavid.Hollister@Sun.COM  */
165*10696SDavid.Hollister@Sun.COM #define	C_BIT	0x80
166*10696SDavid.Hollister@Sun.COM #define	I_BIT	0x40
167*10696SDavid.Hollister@Sun.COM #define	D_BIT	0x20
168*10696SDavid.Hollister@Sun.COM 
169*10696SDavid.Hollister@Sun.COM /*
170*10696SDavid.Hollister@Sun.COM  * 28-Bit Command Mapping from ACS to FIS
171*10696SDavid.Hollister@Sun.COM  *
172*10696SDavid.Hollister@Sun.COM  * ACS Field       	FIS Field
173*10696SDavid.Hollister@Sun.COM  * --------------------------------------
174*10696SDavid.Hollister@Sun.COM  * Feature (7:0)	-> Feature
175*10696SDavid.Hollister@Sun.COM  * Count (7:0)		-> Sector Count
176*10696SDavid.Hollister@Sun.COM  * LBA (7:0)		-> LBA Low
177*10696SDavid.Hollister@Sun.COM  * LBA (15:8)		-> LBA Mid
178*10696SDavid.Hollister@Sun.COM  * LBA (23:16)		-> LBA High
179*10696SDavid.Hollister@Sun.COM  * LBA (27:24)		-> Device (3:0)
180*10696SDavid.Hollister@Sun.COM  * Device (15:12)	-> Device (7:4)
181*10696SDavid.Hollister@Sun.COM  * Command		-> Command
182*10696SDavid.Hollister@Sun.COM  *
183*10696SDavid.Hollister@Sun.COM  * 48- Bit Command Mapping from ACS to FIS
184*10696SDavid.Hollister@Sun.COM  *
185*10696SDavid.Hollister@Sun.COM  * ACS Field       	FIS Field
186*10696SDavid.Hollister@Sun.COM  * --------------------------------------
187*10696SDavid.Hollister@Sun.COM  * Feature (7:0)	-> Feature
188*10696SDavid.Hollister@Sun.COM  * Feature (15:8)	-> Feature (exp)
189*10696SDavid.Hollister@Sun.COM  * Count (7:0)		-> Sector Count
190*10696SDavid.Hollister@Sun.COM  * Count (15:8)		-> Sector Count (exp)
191*10696SDavid.Hollister@Sun.COM  * LBA (7:0)		-> LBA Low
192*10696SDavid.Hollister@Sun.COM  * LBA (15:8)		-> LBA Mid
193*10696SDavid.Hollister@Sun.COM  * LBA (23:16)		-> LBA High
194*10696SDavid.Hollister@Sun.COM  * LBA (31:24)		-> LBA Low (exp)
195*10696SDavid.Hollister@Sun.COM  * LBA (39:32)		-> LBA Mid (exp)
196*10696SDavid.Hollister@Sun.COM  * LBA (47:40)		-> LBA High (exp)
197*10696SDavid.Hollister@Sun.COM  * Device (15:12)	-> Device (7:4)
198*10696SDavid.Hollister@Sun.COM  * Command		-> Command
199*10696SDavid.Hollister@Sun.COM  *
200*10696SDavid.Hollister@Sun.COM  * FIS (FIS_REG_H2DEV) layout:
201*10696SDavid.Hollister@Sun.COM  *
202*10696SDavid.Hollister@Sun.COM  * 31.........24 23...........16 15....................8.7.............0
203*10696SDavid.Hollister@Sun.COM  * FEATURE	| COMMAND	| C R R RESERVED	| FIS TYPE 0x27
204*10696SDavid.Hollister@Sun.COM  * DEVICE   	| LBA HIGH	| LBA MID		| LBA LOW
205*10696SDavid.Hollister@Sun.COM  * FEATURE(exp)	| LBA HIGH(exp)	| LBA MID(exp)		| LBA LOW(exp)
206*10696SDavid.Hollister@Sun.COM  * CONTROL	| RESERVED	| Sector Count(exp)	| Sector Count
207*10696SDavid.Hollister@Sun.COM  * RESERVED 	| RESERVED	| RESERVED		| RESERVED
208*10696SDavid.Hollister@Sun.COM  *
209*10696SDavid.Hollister@Sun.COM  * FIS (FIS_REG_D2H) layout:
210*10696SDavid.Hollister@Sun.COM  *
211*10696SDavid.Hollister@Sun.COM  * 31.........24 23...........16 15....................8.7.............0
212*10696SDavid.Hollister@Sun.COM  * ERROR        | STATUS        | R I R RESERVED	| FIS TYPE 0x34
213*10696SDavid.Hollister@Sun.COM  * DEVICE   	| LBA HIGH	| LBA MID		| LBA LOW
214*10696SDavid.Hollister@Sun.COM  * RESERVED	| LBA HIGH(exp)	| LBA MID(exp)		| LBA LOW(exp)
215*10696SDavid.Hollister@Sun.COM  * RESERVED 	| RESERVED	| Sector Count(exp)	| Sector Count
216*10696SDavid.Hollister@Sun.COM  * RESERVED 	| RESERVED	| RESERVED		| RESERVED
217*10696SDavid.Hollister@Sun.COM  */
218*10696SDavid.Hollister@Sun.COM 
219*10696SDavid.Hollister@Sun.COM 
220*10696SDavid.Hollister@Sun.COM /*
221*10696SDavid.Hollister@Sun.COM  * Reasonable size to reserve for holding the most common FIS types.
222*10696SDavid.Hollister@Sun.COM  */
223*10696SDavid.Hollister@Sun.COM typedef	uint32_t fis_t[5];
224*10696SDavid.Hollister@Sun.COM 
225*10696SDavid.Hollister@Sun.COM #ifdef	__cplusplus
226*10696SDavid.Hollister@Sun.COM }
227*10696SDavid.Hollister@Sun.COM #endif
228*10696SDavid.Hollister@Sun.COM #endif	/* _ATAPI7V3_H */
229