1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (C) 2008 Freescale Semiconductor, Inc. 4 * Dave Liu <daveliu@freescale.com> 5 */ 6 7 #ifndef __FIS_H__ 8 #define __FIS_H__ 9 /* 10 * Register - Host to Device FIS 11 */ 12 typedef struct sata_fis_h2d { 13 u8 fis_type; 14 u8 pm_port_c; 15 u8 command; 16 u8 features; 17 u8 lba_low; 18 u8 lba_mid; 19 u8 lba_high; 20 u8 device; 21 u8 lba_low_exp; 22 u8 lba_mid_exp; 23 u8 lba_high_exp; 24 u8 features_exp; 25 u8 sector_count; 26 u8 sector_count_exp; 27 u8 res1; 28 u8 control; 29 u8 res2[4]; 30 } __attribute__ ((packed)) sata_fis_h2d_t; 31 32 /* 33 * Register - Host to Device FIS for read/write FPDMA queued 34 */ 35 typedef struct sata_fis_h2d_ncq { 36 u8 fis_type; 37 u8 pm_port_c; 38 u8 command; 39 u8 sector_count_low; 40 u8 lba_low; 41 u8 lba_mid; 42 u8 lba_high; 43 u8 device; 44 u8 lba_low_exp; 45 u8 lba_mid_exp; 46 u8 lba_high_exp; 47 u8 sector_count_high; 48 u8 tag; 49 u8 res1; 50 u8 res2; 51 u8 control; 52 u8 res3[4]; 53 } __attribute__ ((packed)) sata_fis_h2d_ncq_t; 54 55 /* 56 * Register - Device to Host FIS 57 */ 58 typedef struct sata_fis_d2h { 59 u8 fis_type; 60 u8 pm_port_i; 61 u8 status; 62 u8 error; 63 u8 lba_low; 64 u8 lba_mid; 65 u8 lba_high; 66 u8 device; 67 u8 lba_low_exp; 68 u8 lba_mid_exp; 69 u8 lba_high_exp; 70 u8 res1; 71 u8 sector_count; 72 u8 sector_count_exp; 73 u8 res2[2]; 74 u8 res3[4]; 75 } __attribute__ ((packed)) sata_fis_d2h_t; 76 77 /* 78 * DMA Setup - Device to Host or Host to Device FIS 79 */ 80 typedef struct sata_fis_dma_setup { 81 u8 fis_type; 82 u8 pm_port_dir_int_act; 83 u8 res1; 84 u8 res2; 85 u32 dma_buffer_id_low; 86 u32 dma_buffer_id_high; 87 u32 res3; 88 u32 dma_buffer_offset; 89 u32 dma_transfer_count; 90 u32 res4; 91 } __attribute__ ((packed)) sata_fis_dma_setup_t; 92 93 /* 94 * PIO Setup - Device to Host FIS 95 */ 96 typedef struct sata_fis_pio_setup { 97 u8 fis_type; 98 u8 pm_port_dir_int; 99 u8 status; 100 u8 error; 101 u8 lba_low; 102 u8 lba_mid; 103 u8 lba_high; 104 u8 res1; 105 u8 lba_low_exp; 106 u8 lba_mid_exp; 107 u8 lba_high_exp; 108 u8 res2; 109 u8 sector_count; 110 u8 sector_count_exp; 111 u8 res3; 112 u8 e_status; 113 u16 transfer_count; 114 u16 res4; 115 } __attribute__ ((packed)) sata_fis_pio_setup_t; 116 117 /* 118 * Data - Host to Device or Device to Host FIS 119 */ 120 typedef struct sata_fis_data { 121 u8 fis_type; 122 u8 pm_port; 123 u8 res1; 124 u8 res2; 125 u32 data[2048]; 126 } __attribute__ ((packed)) sata_fis_data_t; 127 128 /* fis_type - SATA FIS type 129 */ 130 enum sata_fis_type { 131 SATA_FIS_TYPE_REGISTER_H2D = 0x27, 132 SATA_FIS_TYPE_REGISTER_D2H = 0x34, 133 SATA_FIS_TYPE_DMA_ACT_D2H = 0x39, 134 SATA_FIS_TYPE_DMA_SETUP_BI = 0x41, 135 SATA_FIS_TYPE_DATA_BI = 0x46, 136 SATA_FIS_TYPE_BIST_ACT_BI = 0x58, 137 SATA_FIS_TYPE_PIO_SETUP_D2H = 0x5F, 138 SATA_FIS_TYPE_SET_DEVICE_BITS_D2H = 0xA1, 139 }; 140 141 #endif /* __FIS_H__ */ 142