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