| /* SPDX-License-Identifier: GPL-2.0+ */ |
| /* |
| * Copyright (C) 2008 Freescale Semiconductor, Inc. |
| * Dave Liu <daveliu@freescale.com> |
| */ |
| |
| #ifndef __FIS_H__ |
| #define __FIS_H__ |
| /* |
| * Register - Host to Device FIS |
| */ |
| typedef struct sata_fis_h2d { |
| u8 fis_type; |
| u8 pm_port_c; |
| u8 command; |
| u8 features; |
| u8 lba_low; |
| u8 lba_mid; |
| u8 lba_high; |
| u8 device; |
| u8 lba_low_exp; |
| u8 lba_mid_exp; |
| u8 lba_high_exp; |
| u8 features_exp; |
| u8 sector_count; |
| u8 sector_count_exp; |
| u8 res1; |
| u8 control; |
| u8 res2[4]; |
| } __attribute__ ((packed)) sata_fis_h2d_t; |
| |
| /* |
| * Register - Host to Device FIS for read/write FPDMA queued |
| */ |
| typedef struct sata_fis_h2d_ncq { |
| u8 fis_type; |
| u8 pm_port_c; |
| u8 command; |
| u8 sector_count_low; |
| u8 lba_low; |
| u8 lba_mid; |
| u8 lba_high; |
| u8 device; |
| u8 lba_low_exp; |
| u8 lba_mid_exp; |
| u8 lba_high_exp; |
| u8 sector_count_high; |
| u8 tag; |
| u8 res1; |
| u8 res2; |
| u8 control; |
| u8 res3[4]; |
| } __attribute__ ((packed)) sata_fis_h2d_ncq_t; |
| |
| /* |
| * Register - Device to Host FIS |
| */ |
| typedef struct sata_fis_d2h { |
| u8 fis_type; |
| u8 pm_port_i; |
| u8 status; |
| u8 error; |
| u8 lba_low; |
| u8 lba_mid; |
| u8 lba_high; |
| u8 device; |
| u8 lba_low_exp; |
| u8 lba_mid_exp; |
| u8 lba_high_exp; |
| u8 res1; |
| u8 sector_count; |
| u8 sector_count_exp; |
| u8 res2[2]; |
| u8 res3[4]; |
| } __attribute__ ((packed)) sata_fis_d2h_t; |
| |
| /* |
| * DMA Setup - Device to Host or Host to Device FIS |
| */ |
| typedef struct sata_fis_dma_setup { |
| u8 fis_type; |
| u8 pm_port_dir_int_act; |
| u8 res1; |
| u8 res2; |
| u32 dma_buffer_id_low; |
| u32 dma_buffer_id_high; |
| u32 res3; |
| u32 dma_buffer_offset; |
| u32 dma_transfer_count; |
| u32 res4; |
| } __attribute__ ((packed)) sata_fis_dma_setup_t; |
| |
| /* |
| * PIO Setup - Device to Host FIS |
| */ |
| typedef struct sata_fis_pio_setup { |
| u8 fis_type; |
| u8 pm_port_dir_int; |
| u8 status; |
| u8 error; |
| u8 lba_low; |
| u8 lba_mid; |
| u8 lba_high; |
| u8 res1; |
| u8 lba_low_exp; |
| u8 lba_mid_exp; |
| u8 lba_high_exp; |
| u8 res2; |
| u8 sector_count; |
| u8 sector_count_exp; |
| u8 res3; |
| u8 e_status; |
| u16 transfer_count; |
| u16 res4; |
| } __attribute__ ((packed)) sata_fis_pio_setup_t; |
| |
| /* |
| * Data - Host to Device or Device to Host FIS |
| */ |
| typedef struct sata_fis_data { |
| u8 fis_type; |
| u8 pm_port; |
| u8 res1; |
| u8 res2; |
| u32 data[2048]; |
| } __attribute__ ((packed)) sata_fis_data_t; |
| |
| /* fis_type - SATA FIS type |
| */ |
| enum sata_fis_type { |
| SATA_FIS_TYPE_REGISTER_H2D = 0x27, |
| SATA_FIS_TYPE_REGISTER_D2H = 0x34, |
| SATA_FIS_TYPE_DMA_ACT_D2H = 0x39, |
| SATA_FIS_TYPE_DMA_SETUP_BI = 0x41, |
| SATA_FIS_TYPE_DATA_BI = 0x46, |
| SATA_FIS_TYPE_BIST_ACT_BI = 0x58, |
| SATA_FIS_TYPE_PIO_SETUP_D2H = 0x5F, |
| SATA_FIS_TYPE_SET_DEVICE_BITS_D2H = 0xA1, |
| }; |
| |
| #endif /* __FIS_H__ */ |