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