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