xref: /rk3399_rockchip-uboot/include/fis.h (revision 326ea986ac150acdc7656d57fca647db80b50158)
169386383SDave Liu /*
269386383SDave Liu  * Copyright (C) 2008 Freescale Semiconductor, Inc.
369386383SDave Liu  *		Dave Liu <daveliu@freescale.com>
469386383SDave Liu  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
669386383SDave Liu  */
769386383SDave Liu 
869386383SDave Liu #ifndef __FIS_H__
969386383SDave Liu #define __FIS_H__
1069386383SDave Liu /*
1169386383SDave Liu * Register - Host to Device FIS
1269386383SDave Liu */
1369386383SDave Liu typedef struct sata_fis_h2d {
1469386383SDave Liu 	u8 fis_type;
1569386383SDave Liu 	u8 pm_port_c;
1669386383SDave Liu 	u8 command;
1769386383SDave Liu 	u8 features;
1869386383SDave Liu 	u8 lba_low;
1969386383SDave Liu 	u8 lba_mid;
2069386383SDave Liu 	u8 lba_high;
2169386383SDave Liu 	u8 device;
2269386383SDave Liu 	u8 lba_low_exp;
2369386383SDave Liu 	u8 lba_mid_exp;
2469386383SDave Liu 	u8 lba_high_exp;
2569386383SDave Liu 	u8 features_exp;
2669386383SDave Liu 	u8 sector_count;
2769386383SDave Liu 	u8 sector_count_exp;
2869386383SDave Liu 	u8 res1;
2969386383SDave Liu 	u8 control;
3069386383SDave Liu 	u8 res2[4];
3169386383SDave Liu } __attribute__ ((packed)) sata_fis_h2d_t;
3269386383SDave Liu 
3369386383SDave Liu /*
3469386383SDave Liu * Register - Host to Device FIS for read/write FPDMA queued
3569386383SDave Liu */
3669386383SDave Liu typedef struct sata_fis_h2d_ncq {
3769386383SDave Liu 	u8 fis_type;
3869386383SDave Liu 	u8 pm_port_c;
3969386383SDave Liu 	u8 command;
4069386383SDave Liu 	u8 sector_count_low;
4169386383SDave Liu 	u8 lba_low;
4269386383SDave Liu 	u8 lba_mid;
4369386383SDave Liu 	u8 lba_high;
4469386383SDave Liu 	u8 device;
4569386383SDave Liu 	u8 lba_low_exp;
4669386383SDave Liu 	u8 lba_mid_exp;
4769386383SDave Liu 	u8 lba_high_exp;
4869386383SDave Liu 	u8 sector_count_high;
4969386383SDave Liu 	u8 tag;
5069386383SDave Liu 	u8 res1;
5169386383SDave Liu 	u8 res2;
5269386383SDave Liu 	u8 control;
5369386383SDave Liu 	u8 res3[4];
5469386383SDave Liu } __attribute__ ((packed)) sata_fis_h2d_ncq_t;
5569386383SDave Liu 
5669386383SDave Liu /*
5769386383SDave Liu * Register - Device to Host FIS
5869386383SDave Liu */
5969386383SDave Liu typedef struct sata_fis_d2h {
6069386383SDave Liu 	u8 fis_type;
6169386383SDave Liu 	u8 pm_port_i;
6269386383SDave Liu 	u8 status;
6369386383SDave Liu 	u8 error;
6469386383SDave Liu 	u8 lba_low;
6569386383SDave Liu 	u8 lba_mid;
6669386383SDave Liu 	u8 lba_high;
6769386383SDave Liu 	u8 device;
6869386383SDave Liu 	u8 lba_low_exp;
6969386383SDave Liu 	u8 lba_mid_exp;
7069386383SDave Liu 	u8 lba_high_exp;
7169386383SDave Liu 	u8 res1;
7269386383SDave Liu 	u8 sector_count;
7369386383SDave Liu 	u8 sector_count_exp;
7469386383SDave Liu 	u8 res2[2];
7569386383SDave Liu 	u8 res3[4];
7669386383SDave Liu } __attribute__ ((packed)) sata_fis_d2h_t;
7769386383SDave Liu 
7869386383SDave Liu /*
7969386383SDave Liu * DMA Setup - Device to Host or Host to Device FIS
8069386383SDave Liu */
8169386383SDave Liu typedef struct sata_fis_dma_setup {
8269386383SDave Liu 	u8 fis_type;
8369386383SDave Liu 	u8 pm_port_dir_int_act;
8469386383SDave Liu 	u8 res1;
8569386383SDave Liu 	u8 res2;
8669386383SDave Liu 	u32 dma_buffer_id_low;
8769386383SDave Liu 	u32 dma_buffer_id_high;
8869386383SDave Liu 	u32 res3;
8969386383SDave Liu 	u32 dma_buffer_offset;
9069386383SDave Liu 	u32 dma_transfer_count;
9169386383SDave Liu 	u32 res4;
9269386383SDave Liu } __attribute__ ((packed)) sata_fis_dma_setup_t;
9369386383SDave Liu 
9469386383SDave Liu /*
9569386383SDave Liu * PIO Setup - Device to Host FIS
9669386383SDave Liu */
9769386383SDave Liu typedef struct sata_fis_pio_setup {
9869386383SDave Liu 	u8 fis_type;
9969386383SDave Liu 	u8 pm_port_dir_int;
10069386383SDave Liu 	u8 status;
10169386383SDave Liu 	u8 error;
10269386383SDave Liu 	u8 lba_low;
10369386383SDave Liu 	u8 lba_mid;
10469386383SDave Liu 	u8 lba_high;
10569386383SDave Liu 	u8 res1;
10669386383SDave Liu 	u8 lba_low_exp;
10769386383SDave Liu 	u8 lba_mid_exp;
10869386383SDave Liu 	u8 lba_high_exp;
10969386383SDave Liu 	u8 res2;
11069386383SDave Liu 	u8 sector_count;
11169386383SDave Liu 	u8 sector_count_exp;
11269386383SDave Liu 	u8 res3;
11369386383SDave Liu 	u8 e_status;
11469386383SDave Liu 	u16 transfer_count;
11569386383SDave Liu 	u16 res4;
11669386383SDave Liu } __attribute__ ((packed)) sata_fis_pio_setup_t;
11769386383SDave Liu 
11869386383SDave Liu /*
11969386383SDave Liu * Data - Host to Device or Device to Host FIS
12069386383SDave Liu */
12169386383SDave Liu typedef struct sata_fis_data {
12269386383SDave Liu 	u8 fis_type;
12369386383SDave Liu 	u8 pm_port;
12469386383SDave Liu 	u8 res1;
12569386383SDave Liu 	u8 res2;
12669386383SDave Liu 	u32 data[2048];
12769386383SDave Liu } __attribute__ ((packed)) sata_fis_data_t;
12869386383SDave Liu 
12969386383SDave Liu /* fis_type - SATA FIS type
13069386383SDave Liu  */
13169386383SDave Liu enum sata_fis_type {
13269386383SDave Liu 	SATA_FIS_TYPE_REGISTER_H2D		= 0x27,
13369386383SDave Liu 	SATA_FIS_TYPE_REGISTER_D2H		= 0x34,
13469386383SDave Liu 	SATA_FIS_TYPE_DMA_ACT_D2H		= 0x39,
13569386383SDave Liu 	SATA_FIS_TYPE_DMA_SETUP_BI		= 0x41,
13669386383SDave Liu 	SATA_FIS_TYPE_DATA_BI			= 0x46,
13769386383SDave Liu 	SATA_FIS_TYPE_BIST_ACT_BI		= 0x58,
13869386383SDave Liu 	SATA_FIS_TYPE_PIO_SETUP_D2H		= 0x5F,
13969386383SDave Liu 	SATA_FIS_TYPE_SET_DEVICE_BITS_D2H	= 0xA1,
14069386383SDave Liu };
14169386383SDave Liu 
14269386383SDave Liu #endif	/* __FIS_H__ */
143