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