qla_edif_bsg.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Marvell Fibre Channel HBA Driver
  4. * Copyright (C) 2018- Marvell
  5. *
  6. */
  7. #ifndef __QLA_EDIF_BSG_H
  8. #define __QLA_EDIF_BSG_H
  9. #define EDIF_VERSION1 1
  10. /* BSG Vendor specific commands */
  11. #define ELS_MAX_PAYLOAD 2112
  12. #ifndef WWN_SIZE
  13. #define WWN_SIZE 8
  14. #endif
  15. #define VND_CMD_APP_RESERVED_SIZE 28
  16. #define VND_CMD_PAD_SIZE 3
  17. enum auth_els_sub_cmd {
  18. SEND_ELS = 0,
  19. SEND_ELS_REPLY,
  20. PULL_ELS,
  21. };
  22. struct extra_auth_els {
  23. enum auth_els_sub_cmd sub_cmd;
  24. uint32_t extra_rx_xchg_address;
  25. uint8_t extra_control_flags;
  26. #define BSG_CTL_FLAG_INIT 0
  27. #define BSG_CTL_FLAG_LS_ACC 1
  28. #define BSG_CTL_FLAG_LS_RJT 2
  29. #define BSG_CTL_FLAG_TRM 3
  30. uint8_t version;
  31. uint8_t pad[2];
  32. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  33. } __packed;
  34. struct qla_bsg_auth_els_request {
  35. struct fc_bsg_request r;
  36. struct extra_auth_els e;
  37. };
  38. struct qla_bsg_auth_els_reply {
  39. struct fc_bsg_reply r;
  40. uint32_t rx_xchg_address;
  41. uint8_t version;
  42. uint8_t pad[VND_CMD_PAD_SIZE];
  43. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  44. };
  45. struct app_id {
  46. int app_vid;
  47. uint8_t version;
  48. uint8_t pad[VND_CMD_PAD_SIZE];
  49. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  50. } __packed;
  51. struct app_start_reply {
  52. uint32_t host_support_edif;
  53. uint32_t edif_enode_active;
  54. uint32_t edif_edb_active;
  55. uint8_t version;
  56. uint8_t pad[VND_CMD_PAD_SIZE];
  57. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  58. } __packed;
  59. struct app_start {
  60. struct app_id app_info;
  61. uint8_t app_start_flags;
  62. uint8_t version;
  63. uint8_t pad[2];
  64. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  65. } __packed;
  66. struct app_stop {
  67. struct app_id app_info;
  68. uint8_t version;
  69. uint8_t pad[VND_CMD_PAD_SIZE];
  70. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  71. } __packed;
  72. struct app_plogi_reply {
  73. uint32_t prli_status;
  74. uint8_t version;
  75. uint8_t pad[VND_CMD_PAD_SIZE];
  76. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  77. } __packed;
  78. struct app_pinfo_req {
  79. struct app_id app_info;
  80. uint8_t num_ports;
  81. struct {
  82. #ifdef __BIG_ENDIAN
  83. uint8_t domain;
  84. uint8_t area;
  85. uint8_t al_pa;
  86. #elif defined(__LITTLE_ENDIAN)
  87. uint8_t al_pa;
  88. uint8_t area;
  89. uint8_t domain;
  90. #else
  91. #error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
  92. #endif
  93. uint8_t rsvd_1;
  94. } remote_pid;
  95. uint8_t version;
  96. uint8_t pad[VND_CMD_PAD_SIZE];
  97. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  98. } __packed;
  99. struct app_pinfo {
  100. port_id_t remote_pid;
  101. uint8_t remote_wwpn[WWN_SIZE];
  102. uint8_t remote_type;
  103. #define VND_CMD_RTYPE_UNKNOWN 0
  104. #define VND_CMD_RTYPE_TARGET 1
  105. #define VND_CMD_RTYPE_INITIATOR 2
  106. uint8_t remote_state;
  107. uint8_t auth_state;
  108. uint8_t version;
  109. uint8_t pad[VND_CMD_PAD_SIZE];
  110. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  111. } __packed;
  112. /* AUTH States */
  113. #define VND_CMD_AUTH_STATE_UNDEF 0
  114. #define VND_CMD_AUTH_STATE_SESSION_SHUTDOWN 1
  115. #define VND_CMD_AUTH_STATE_NEEDED 2
  116. #define VND_CMD_AUTH_STATE_ELS_RCVD 3
  117. #define VND_CMD_AUTH_STATE_SAUPDATE_COMPL 4
  118. struct app_pinfo_reply {
  119. uint8_t port_count;
  120. uint8_t version;
  121. uint8_t pad[VND_CMD_PAD_SIZE];
  122. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  123. struct app_pinfo ports[];
  124. } __packed;
  125. struct app_sinfo_req {
  126. struct app_id app_info;
  127. uint8_t num_ports;
  128. uint8_t version;
  129. uint8_t pad[VND_CMD_PAD_SIZE];
  130. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  131. } __packed;
  132. struct app_sinfo {
  133. uint8_t remote_wwpn[WWN_SIZE];
  134. int64_t rekey_count;
  135. uint8_t rekey_mode;
  136. int64_t tx_bytes;
  137. int64_t rx_bytes;
  138. } __packed;
  139. struct app_stats_reply {
  140. uint8_t elem_count;
  141. uint8_t version;
  142. uint8_t pad[VND_CMD_PAD_SIZE];
  143. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  144. struct app_sinfo elem[];
  145. } __packed;
  146. struct qla_sa_update_frame {
  147. struct app_id app_info;
  148. uint16_t flags;
  149. #define SAU_FLG_INV 0x01 /* delete key */
  150. #define SAU_FLG_TX 0x02 /* 1=tx, 0 = rx */
  151. #define SAU_FLG_FORCE_DELETE 0x08
  152. #define SAU_FLG_GMAC_MODE 0x20 /*
  153. * GMAC mode is cleartext for the IO
  154. * (i.e. NULL encryption)
  155. */
  156. #define SAU_FLG_KEY128 0x40
  157. #define SAU_FLG_KEY256 0x80
  158. uint16_t fast_sa_index:10,
  159. reserved:6;
  160. uint32_t salt;
  161. uint32_t spi;
  162. uint8_t sa_key[32];
  163. uint8_t node_name[WWN_SIZE];
  164. uint8_t port_name[WWN_SIZE];
  165. port_id_t port_id;
  166. uint8_t version;
  167. uint8_t pad[VND_CMD_PAD_SIZE];
  168. uint8_t reserved2[VND_CMD_APP_RESERVED_SIZE];
  169. } __packed;
  170. #define QL_VND_SC_UNDEF 0
  171. #define QL_VND_SC_SA_UPDATE 1
  172. #define QL_VND_SC_APP_START 2
  173. #define QL_VND_SC_APP_STOP 3
  174. #define QL_VND_SC_AUTH_OK 4
  175. #define QL_VND_SC_AUTH_FAIL 5
  176. #define QL_VND_SC_REKEY_CONFIG 6
  177. #define QL_VND_SC_GET_FCINFO 7
  178. #define QL_VND_SC_GET_STATS 8
  179. #define QL_VND_SC_AEN_COMPLETE 9
  180. #define QL_VND_SC_READ_DBELL 10
  181. /*
  182. * bsg caller to provide empty buffer for doorbell events.
  183. *
  184. * sg_io_v4.din_xferp = empty buffer for door bell events
  185. * sg_io_v4.dout_xferp = struct edif_read_dbell *buf
  186. */
  187. struct edif_read_dbell {
  188. struct app_id app_info;
  189. uint8_t version;
  190. uint8_t pad[VND_CMD_PAD_SIZE];
  191. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  192. };
  193. /* Application interface data structure for rtn data */
  194. #define EXT_DEF_EVENT_DATA_SIZE 64
  195. struct edif_app_dbell {
  196. uint32_t event_code;
  197. uint32_t event_data_size;
  198. union {
  199. port_id_t port_id;
  200. uint8_t event_data[EXT_DEF_EVENT_DATA_SIZE];
  201. };
  202. } __packed;
  203. struct edif_sa_update_aen {
  204. port_id_t port_id;
  205. uint32_t key_type; /* Tx (1) or RX (2) */
  206. uint32_t status; /* 0 succes, 1 failed, 2 timeout , 3 error */
  207. uint8_t version;
  208. uint8_t pad[VND_CMD_PAD_SIZE];
  209. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  210. } __packed;
  211. #define QL_VND_SA_STAT_SUCCESS 0
  212. #define QL_VND_SA_STAT_FAILED 1
  213. #define QL_VND_SA_STAT_TIMEOUT 2
  214. #define QL_VND_SA_STAT_ERROR 3
  215. #define QL_VND_RX_SA_KEY 1
  216. #define QL_VND_TX_SA_KEY 2
  217. /* App defines for plogi auth'd ok and plogi auth bad requests */
  218. struct auth_complete_cmd {
  219. struct app_id app_info;
  220. #define PL_TYPE_WWPN 1
  221. #define PL_TYPE_DID 2
  222. uint32_t type;
  223. union {
  224. uint8_t wwpn[WWN_SIZE];
  225. port_id_t d_id;
  226. } u;
  227. uint8_t version;
  228. uint8_t pad[VND_CMD_PAD_SIZE];
  229. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  230. } __packed;
  231. struct aen_complete_cmd {
  232. struct app_id app_info;
  233. port_id_t port_id;
  234. uint32_t event_code;
  235. uint8_t version;
  236. uint8_t pad[VND_CMD_PAD_SIZE];
  237. uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
  238. } __packed;
  239. #define RX_DELAY_DELETE_TIMEOUT 20
  240. #define FCH_EVT_VENDOR_UNIQUE_VPORT_DOWN 1
  241. #endif /* QLA_EDIF_BSG_H */