fis.h 2.5 KB

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