fis.h 2.8 KB

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