fis.h 2.5 KB

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