You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CIB_PRM.h 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167
  1. /*
  2. * Copyright (C) 2013-2015 Mellanox Technologies Ltd.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License as
  6. * published by the Free Software Foundation; either version 2 of the
  7. * License, or any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  17. * 02110-1301, USA.
  18. */
  19. FILE_LICENCE ( GPL2_OR_LATER );
  20. #ifndef __CIB_PRM__
  21. #define __CIB_PRM__
  22. typedef unsigned long long __be64;
  23. typedef uint32_t __be32;
  24. typedef uint16_t __be16;
  25. #define GOLAN_CMD_DATA_BLOCK_SIZE (1 << 9)
  26. #define GOLAN_CMD_PAS_CNT (GOLAN_CMD_DATA_BLOCK_SIZE / sizeof(__be64))
  27. #define MAILBOX_STRIDE (1 << 10)
  28. #define MAILBOX_MASK (MAILBOX_STRIDE - 1)
  29. #define GOLAN_PCI_CMD_XPORT 7
  30. #define CMD_OWNER_HW 0x1
  31. #define GOLAN_LOG_MAX_QP 0x1
  32. #define IB_NUM_PKEYS 0x20
  33. struct health_buffer {
  34. __be32 assert_var[5];
  35. __be32 rsvd0[3];
  36. __be32 assert_exit_ptr;
  37. __be32 assert_callra;
  38. __be32 rsvd1[2];
  39. __be32 fw_ver;
  40. __be32 hw_id;
  41. __be32 rsvd2;
  42. u8 irisc_index;
  43. u8 synd;
  44. __be16 ext_sync;
  45. } __attribute ( ( packed ) );
  46. struct golan_hca_init_seg {
  47. __be32 fw_rev;
  48. __be32 cmdif_rev_fw_sub;
  49. __be32 rsvd0[2];
  50. __be32 cmdq_addr_h;
  51. __be32 cmdq_addr_l_sz;
  52. __be32 cmd_dbell;
  53. __be32 rsvd1[121];
  54. struct health_buffer health;
  55. __be32 rsvd2[884];
  56. __be32 health_counter;
  57. __be32 rsvd3[1023];
  58. __be64 ieee1588_clk;
  59. __be32 ieee1588_clk_type;
  60. __be32 clr_intx;
  61. } __attribute ( ( packed ) );
  62. enum golan_manage_pages_mode {
  63. GOLAN_PAGES_CANT_GIVE = 0,
  64. GOLAN_PAGES_GIVE = 1,
  65. GOLAN_PAGES_TAKE = 2
  66. };
  67. enum golan_qry_pages_mode {
  68. GOLAN_BOOT_PAGES = 0x1,
  69. GOLAN_INIT_PAGES = 0x2,
  70. GOLAN_REG_PAGES = 0x3,
  71. };
  72. enum {
  73. GOLAN_REG_PCAP = 0x5001,
  74. GOLAN_REG_PMTU = 0x5003,
  75. GOLAN_REG_PTYS = 0x5004,
  76. GOLAN_REG_PAOS = 0x5006,
  77. GOLAN_REG_PMAOS = 0x5012,
  78. GOLAN_REG_PUDE = 0x5009,
  79. GOLAN_REG_PMPE = 0x5010,
  80. GOLAN_REG_PELC = 0x500e,
  81. GOLAN_REG_PMLP = 0, /* TBD */
  82. GOLAN_REG_NODE_DESC = 0x6001,
  83. GOLAN_REG_HOST_ENDIANESS = 0x7004,
  84. };
  85. enum {
  86. GOLAN_CMD_OP_QUERY_HCA_CAP = 0x100,
  87. GOLAN_CMD_OP_QUERY_ADAPTER = 0x101,
  88. GOLAN_CMD_OP_INIT_HCA = 0x102,
  89. GOLAN_CMD_OP_TEARDOWN_HCA = 0x103,
  90. GOLAN_CMD_OP_ENABLE_HCA = 0x104,
  91. GOLAN_CMD_OP_DISABLE_HCA = 0x105,
  92. GOLAN_CMD_OP_QUERY_PAGES = 0x107,
  93. GOLAN_CMD_OP_MANAGE_PAGES = 0x108,
  94. GOLAN_CMD_OP_SET_HCA_CAP = 0x109,
  95. GOLAN_CMD_OP_CREATE_MKEY = 0x200,
  96. GOLAN_CMD_OP_QUERY_MKEY = 0x201,
  97. GOLAN_CMD_OP_DESTROY_MKEY = 0x202,
  98. GOLAN_CMD_OP_QUERY_SPECIAL_CONTEXTS = 0x203,
  99. GOLAN_CMD_OP_CREATE_EQ = 0x301,
  100. GOLAN_CMD_OP_DESTROY_EQ = 0x302,
  101. GOLAN_CMD_OP_QUERY_EQ = 0x303,
  102. GOLAN_CMD_OP_CREATE_CQ = 0x400,
  103. GOLAN_CMD_OP_DESTROY_CQ = 0x401,
  104. GOLAN_CMD_OP_QUERY_CQ = 0x402,
  105. GOLAN_CMD_OP_MODIFY_CQ = 0x403,
  106. GOLAN_CMD_OP_CREATE_QP = 0x500,
  107. GOLAN_CMD_OP_DESTROY_QP = 0x501,
  108. GOLAN_CMD_OP_RST2INIT_QP = 0x502,
  109. GOLAN_CMD_OP_INIT2RTR_QP = 0x503,
  110. GOLAN_CMD_OP_RTR2RTS_QP = 0x504,
  111. GOLAN_CMD_OP_RTS2RTS_QP = 0x505,
  112. GOLAN_CMD_OP_SQERR2RTS_QP = 0x506,
  113. GOLAN_CMD_OP_2ERR_QP = 0x507,
  114. GOLAN_CMD_OP_RTS2SQD_QP = 0x508,
  115. GOLAN_CMD_OP_SQD2RTS_QP = 0x509,
  116. GOLAN_CMD_OP_2RST_QP = 0x50a,
  117. GOLAN_CMD_OP_QUERY_QP = 0x50b,
  118. GOLAN_CMD_OP_CONF_SQP = 0x50c,
  119. GOLAN_CMD_OP_MAD_IFC = 0x50d,
  120. GOLAN_CMD_OP_INIT2INIT_QP = 0x50e,
  121. GOLAN_CMD_OP_SUSPEND_QP = 0x50f,
  122. GOLAN_CMD_OP_UNSUSPEND_QP = 0x510,
  123. GOLAN_CMD_OP_SQD2SQD_QP = 0x511,
  124. GOLAN_CMD_OP_ALLOC_QP_COUNTER_SET = 0x512,
  125. GOLAN_CMD_OP_DEALLOC_QP_COUNTER_SET = 0x513,
  126. GOLAN_CMD_OP_QUERY_QP_COUNTER_SET = 0x514,
  127. GOLAN_CMD_OP_CREATE_PSV = 0x600,
  128. GOLAN_CMD_OP_DESTROY_PSV = 0x601,
  129. GOLAN_CMD_OP_QUERY_PSV = 0x602,
  130. GOLAN_CMD_OP_QUERY_SIG_RULE_TABLE = 0x603,
  131. GOLAN_CMD_OP_QUERY_BLOCK_SIZE_TABLE = 0x604,
  132. GOLAN_CMD_OP_CREATE_SRQ = 0x700,
  133. GOLAN_CMD_OP_DESTROY_SRQ = 0x701,
  134. GOLAN_CMD_OP_QUERY_SRQ = 0x702,
  135. GOLAN_CMD_OP_ARM_RQ = 0x703,
  136. GOLAN_CMD_OP_RESIZE_SRQ = 0x704,
  137. GOLAN_CMD_OP_QUERY_HCA_VPORT_CONTEXT = 0x762,
  138. GOLAN_CMD_OP_QUERY_HCA_VPORT_GID = 0x764,
  139. GOLAN_CMD_OP_QUERY_HCA_VPORT_PKEY = 0x765,
  140. GOLAN_CMD_OP_ALLOC_PD = 0x800,
  141. GOLAN_CMD_OP_DEALLOC_PD = 0x801,
  142. GOLAN_CMD_OP_ALLOC_UAR = 0x802,
  143. GOLAN_CMD_OP_DEALLOC_UAR = 0x803,
  144. GOLAN_CMD_OP_ATTACH_TO_MCG = 0x806,
  145. GOLAN_CMD_OP_DETACH_FROM_MCG = 0x807,
  146. GOLAN_CMD_OP_ALLOC_XRCD = 0x80e,
  147. GOLAN_CMD_OP_DEALLOC_XRCD = 0x80f,
  148. GOLAN_CMD_OP_ACCESS_REG = 0x805,
  149. };
  150. struct golan_inbox_hdr {
  151. __be16 opcode;
  152. u8 rsvd[4];
  153. __be16 opmod;
  154. } __attribute ( ( packed ) );
  155. struct golan_cmd_layout {
  156. u8 type;
  157. u8 rsvd0[3];
  158. __be32 inlen;
  159. union {
  160. __be64 in_ptr;
  161. __be32 in_ptr32[2];
  162. };
  163. __be32 in[4];
  164. __be32 out[4];
  165. union {
  166. __be64 out_ptr;
  167. __be32 out_ptr32[2];
  168. };
  169. __be32 outlen;
  170. u8 token;
  171. u8 sig;
  172. u8 rsvd1;
  173. volatile u8 status_own;
  174. } __attribute ( ( packed ) );
  175. struct golan_outbox_hdr {
  176. u8 status;
  177. u8 rsvd[3];
  178. __be32 syndrome;
  179. } __attribute ( ( packed ) );
  180. enum {
  181. GOLAN_DEV_CAP_FLAG_RC = 1LL << 0,
  182. GOLAN_DEV_CAP_FLAG_UC = 1LL << 1,
  183. GOLAN_DEV_CAP_FLAG_UD = 1LL << 2,
  184. GOLAN_DEV_CAP_FLAG_XRC = 1LL << 3,
  185. GOLAN_DEV_CAP_FLAG_SRQ = 1LL << 6,
  186. GOLAN_DEV_CAP_FLAG_BAD_PKEY_CNTR = 1LL << 8,
  187. GOLAN_DEV_CAP_FLAG_BAD_QKEY_CNTR = 1LL << 9,
  188. GOLAN_DEV_CAP_FLAG_APM = 1LL << 17,
  189. GOLAN_DEV_CAP_FLAG_ATOMIC = 1LL << 18,
  190. GOLAN_DEV_CAP_FLAG_ON_DMND_PG = 1LL << 24,
  191. GOLAN_DEV_CAP_FLAG_RESIZE_SRQ = 1LL << 32,
  192. GOLAN_DEV_CAP_FLAG_REMOTE_FENCE = 1LL << 38,
  193. GOLAN_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39,
  194. GOLAN_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40,
  195. GOLAN_DEV_CAP_FLAG_DCT = 1LL << 41,
  196. GOLAN_DEV_CAP_FLAG_CMDIF_CSUM = 1LL << 46,
  197. };
  198. struct golan_hca_cap {
  199. u8 rsvd1[16];
  200. u8 log_max_srq_sz;
  201. u8 log_max_qp_sz;
  202. __be16 log_max_qp;
  203. u8 log_max_strq_sz;
  204. u8 log_max_srqs;
  205. u8 rsvd4[2];
  206. u8 rsvd5;
  207. u8 log_max_cq_sz;
  208. u8 rsvd6;
  209. u8 log_max_cq;
  210. u8 log_max_eq_sz;
  211. u8 log_max_mkey;
  212. u8 rsvd7;
  213. u8 log_max_eq;
  214. u8 max_indirection;
  215. u8 log_max_mrw_sz;
  216. u8 log_max_bsf_list_sz;
  217. u8 log_max_klm_list_sz;
  218. u8 rsvd_8_0;
  219. u8 log_max_ra_req_dc;
  220. u8 rsvd_8_1;
  221. u8 log_max_ra_res_dc;
  222. u8 rsvd9;
  223. u8 log_max_ra_req_qp;
  224. u8 rsvd10;
  225. u8 log_max_ra_res_qp;
  226. u8 rsvd11[4];
  227. __be16 max_qp_count;
  228. __be16 pkey_table_size;
  229. u8 rsvd13;
  230. u8 local_ca_ack_delay;
  231. u8 rsvd14;
  232. u8 num_ports;
  233. u8 log_max_msg;
  234. u8 rsvd15[3];
  235. __be16 stat_rate_support;
  236. u8 rsvd16[2];
  237. __be64 flags;
  238. u8 rsvd17;
  239. u8 uar_sz;
  240. u8 rsvd18;
  241. u8 log_pg_sz;
  242. __be16 bf_log_bf_reg_size;
  243. u8 rsvd19[4];
  244. __be16 max_wqe_sz_sq;
  245. u8 rsvd20[2];
  246. __be16 max_wqe_sz_rq;
  247. u8 rsvd21[2];
  248. __be16 max_wqe_sz_sq_dc;
  249. u8 rsvd22[4];
  250. __be16 max_qp_mcg;
  251. u8 rsvd23;
  252. u8 log_max_mcg;
  253. u8 rsvd24;
  254. u8 log_max_pd;
  255. u8 rsvd25;
  256. u8 log_max_xrcd;
  257. u8 rsvd26[40];
  258. __be32 uar_page_sz;
  259. u8 rsvd27[28];
  260. u8 log_msx_atomic_size_qp;
  261. u8 rsvd28[2];
  262. u8 log_msx_atomic_size_dc;
  263. u8 rsvd29[76];
  264. } __attribute ( ( packed ) );
  265. struct golan_query_pages_inbox {
  266. struct golan_inbox_hdr hdr;
  267. u8 rsvd[8];
  268. } __attribute ( ( packed ) );
  269. struct golan_query_pages_outbox {
  270. struct golan_outbox_hdr hdr;
  271. u8 rsvd[2];
  272. __be16 func_id;
  273. __be32 num_pages;
  274. } __attribute ( ( packed ) );
  275. struct golan_cmd_query_hca_cap_mbox_in {
  276. struct golan_inbox_hdr hdr;
  277. u8 rsvd[8];
  278. } __attribute ( ( packed ) );
  279. struct golan_cmd_query_hca_cap_mbox_out {
  280. struct golan_outbox_hdr hdr;
  281. u8 rsvd0[8];
  282. struct golan_hca_cap hca_cap;
  283. } __attribute ( ( packed ) );
  284. struct golan_cmd_set_hca_cap_mbox_in {
  285. struct golan_inbox_hdr hdr;
  286. u8 rsvd[8];
  287. struct golan_hca_cap hca_cap;
  288. } __attribute ( ( packed ) );
  289. struct golan_cmd_set_hca_cap_mbox_out {
  290. struct golan_outbox_hdr hdr;
  291. u8 rsvd0[8];
  292. } __attribute ( ( packed ) );
  293. struct golan_cmd_init_hca_mbox_in {
  294. struct golan_inbox_hdr hdr;
  295. u8 rsvd0[2];
  296. __be16 profile;
  297. u8 rsvd1[4];
  298. } __attribute ( ( packed ) );
  299. struct golan_cmd_init_hca_mbox_out {
  300. struct golan_outbox_hdr hdr;
  301. u8 rsvd[8];
  302. } __attribute ( ( packed ) );
  303. enum golan_teardown {
  304. GOLAN_TEARDOWN_GRACEFUL = 0x0,
  305. GOLAN_TEARDOWN_PANIC = 0x1
  306. };
  307. struct golan_cmd_teardown_hca_mbox_in {
  308. struct golan_inbox_hdr hdr;
  309. u8 rsvd0[2];
  310. __be16 profile;
  311. u8 rsvd1[4];
  312. } __attribute ( ( packed ) );
  313. struct golan_cmd_teardown_hca_mbox_out {
  314. struct golan_outbox_hdr hdr;
  315. u8 rsvd[8];
  316. } __attribute ( ( packed ) );
  317. struct golan_enable_hca_mbox_in {
  318. struct golan_inbox_hdr hdr;
  319. u8 rsvd[8];
  320. } __attribute ( ( packed ) );
  321. struct golan_enable_hca_mbox_out {
  322. struct golan_outbox_hdr hdr;
  323. u8 rsvd[8];
  324. } __attribute ( ( packed ) );
  325. struct golan_disable_hca_mbox_in {
  326. struct golan_inbox_hdr hdr;
  327. u8 rsvd[8];
  328. } __attribute ( ( packed ) );
  329. struct golan_disable_hca_mbox_out {
  330. struct golan_outbox_hdr hdr;
  331. u8 rsvd[8];
  332. } __attribute ( ( packed ) );
  333. struct golan_manage_pages_inbox_data {
  334. u8 rsvd2[16];
  335. __be64 pas[0];
  336. } __attribute ( ( packed ) );
  337. struct golan_manage_pages_inbox {
  338. struct golan_inbox_hdr hdr;
  339. __be16 rsvd0;
  340. __be16 func_id;
  341. __be32 num_entries;
  342. struct golan_manage_pages_inbox_data data;
  343. } __attribute ( ( packed ) );
  344. struct golan_manage_pages_outbox_data {
  345. __be64 pas[0];
  346. } __attribute ( ( packed ) );
  347. struct golan_manage_pages_outbox {
  348. struct golan_outbox_hdr hdr;
  349. __be32 num_entries;
  350. __be32 rsrvd;
  351. struct golan_manage_pages_outbox_data data;
  352. } __attribute ( ( packed ) );
  353. struct golan_reg_host_endianess {
  354. u8 he;
  355. u8 rsvd[15];
  356. } __attribute ( ( packed ) );
  357. struct golan_cmd_prot_block {
  358. union {
  359. __be64 data[GOLAN_CMD_PAS_CNT];
  360. u8 bdata[GOLAN_CMD_DATA_BLOCK_SIZE];
  361. };
  362. u8 rsvd0[48];
  363. __be64 next;
  364. __be32 block_num;
  365. u8 rsvd1;
  366. u8 token;
  367. u8 ctrl_sig;
  368. u8 sig;
  369. } __attribute ( ( packed ) );
  370. /* MAD IFC structures */
  371. #define GOLAN_MAD_SIZE 256
  372. #define GOLAN_MAD_IFC_NO_VALIDATION 0x3
  373. #define GOLAN_MAD_IFC_RLID_BIT 16
  374. struct golan_mad_ifc_mbox_in {
  375. struct golan_inbox_hdr hdr;
  376. __be16 remote_lid;
  377. u8 rsvd0;
  378. u8 port;
  379. u8 rsvd1[4];
  380. u8 mad[GOLAN_MAD_SIZE];
  381. } __attribute ( ( packed ) );
  382. struct golan_mad_ifc_mbox_out {
  383. struct golan_outbox_hdr hdr;
  384. u8 rsvd[8];
  385. u8 mad[GOLAN_MAD_SIZE];
  386. } __attribute ( ( packed ) );
  387. /* UAR Structures */
  388. struct golan_alloc_uar_mbox_in {
  389. struct golan_inbox_hdr hdr;
  390. u8 rsvd[8];
  391. } __attribute ( ( packed ) );
  392. struct golan_alloc_uar_mbox_out {
  393. struct golan_outbox_hdr hdr;
  394. __be32 uarn;
  395. u8 rsvd[4];
  396. } __attribute ( ( packed ) );
  397. struct golan_free_uar_mbox_in {
  398. struct golan_inbox_hdr hdr;
  399. __be32 uarn;
  400. u8 rsvd[4];
  401. } __attribute ( ( packed ) );
  402. struct golan_free_uar_mbox_out {
  403. struct golan_outbox_hdr hdr;
  404. u8 rsvd[8];
  405. } __attribute ( ( packed ) );
  406. /* Event Queue Structures */
  407. enum {
  408. GOLAN_EQ_STATE_ARMED = 0x9,
  409. GOLAN_EQ_STATE_FIRED = 0xa,
  410. GOLAN_EQ_STATE_ALWAYS_ARMED = 0xb,
  411. };
  412. struct golan_eq_context {
  413. u8 status;
  414. u8 ec_oi;
  415. u8 st;
  416. u8 rsvd2[7];
  417. __be16 page_pffset;
  418. __be32 log_sz_usr_page;
  419. u8 rsvd3[7];
  420. u8 intr;
  421. u8 log_page_size;
  422. u8 rsvd4[15];
  423. __be32 consumer_counter;
  424. __be32 produser_counter;
  425. u8 rsvd5[16];
  426. } __attribute ( ( packed ) );
  427. struct golan_create_eq_mbox_in_data {
  428. struct golan_eq_context ctx;
  429. u8 rsvd2[8];
  430. __be64 events_mask;
  431. u8 rsvd3[176];
  432. __be64 pas[0];
  433. } __attribute ( ( packed ) );
  434. struct golan_create_eq_mbox_in {
  435. struct golan_inbox_hdr hdr;
  436. u8 rsvd0[3];
  437. u8 input_eqn;
  438. u8 rsvd1[4];
  439. struct golan_create_eq_mbox_in_data data;
  440. } __attribute ( ( packed ) );
  441. struct golan_create_eq_mbox_out {
  442. struct golan_outbox_hdr hdr;
  443. u8 rsvd0[3];
  444. u8 eq_number;
  445. u8 rsvd1[4];
  446. } __attribute ( ( packed ) );
  447. struct golan_destroy_eq_mbox_in {
  448. struct golan_inbox_hdr hdr;
  449. u8 rsvd0[3];
  450. u8 eqn;
  451. u8 rsvd1[4];
  452. } __attribute ( ( packed ) );
  453. struct golan_destroy_eq_mbox_out {
  454. struct golan_outbox_hdr hdr;
  455. u8 rsvd[8];
  456. } __attribute ( ( packed ) );
  457. /***********************************************/
  458. /************** Query Vport ****************/
  459. struct golan_query_hca_vport_context_inbox {
  460. struct golan_inbox_hdr hdr;
  461. __be16 other_vport : 1;
  462. __be16 rsvd1 : 7;
  463. __be16 port_num : 4;
  464. __be16 rsvd2 : 4;
  465. __be16 vport_number;
  466. u8 rsvd[4];
  467. } __attribute ( ( packed ) );
  468. struct golan_query_hca_vport_context_data {
  469. __be32 field_select;
  470. __be32 rsvd1[7];
  471. //****
  472. __be16 sm_virt_aware : 1;
  473. __be16 has_smi : 1;
  474. __be16 has_raw : 1;
  475. __be16 grh_required : 1;
  476. __be16 rsvd2 : 12;
  477. u8 port_physical_state : 4;
  478. u8 vport_state_policy : 4;
  479. u8 port_state : 4;
  480. u8 vport_state : 4;
  481. //****
  482. u8 rsvd3[4];
  483. //****
  484. __be32 system_image_guid[2];
  485. //****
  486. __be32 port_guid[2];
  487. //****
  488. __be32 node_guid[2];
  489. //****
  490. __be32 cap_mask1;
  491. __be32 cap_mask1_field_select;
  492. __be32 cap_mask2;
  493. __be32 cap_mask2_field_select;
  494. u8 rsvd4[16];
  495. __be16 lid;
  496. u8 rsvd5 : 4;
  497. u8 init_type_reply : 4;
  498. u8 lmc : 3;
  499. u8 subnet_timeout : 5;
  500. __be16 sm_lid;
  501. u8 sm_sl : 4;
  502. u8 rsvd6 : 4;
  503. u8 rsvd7;
  504. __be16 qkey_violation_counter;
  505. __be16 pkey_violation_counter;
  506. u8 rsvd8[100];
  507. } __attribute ( ( packed ) );
  508. struct golan_query_hca_vport_context_outbox {
  509. struct golan_outbox_hdr hdr;
  510. u8 rsvd[8];
  511. struct golan_query_hca_vport_context_data context_data;
  512. } __attribute ( ( packed ) );
  513. struct golan_query_hca_vport_gid_inbox {
  514. struct golan_inbox_hdr hdr;
  515. u8 other_vport : 1;
  516. u8 rsvd1 : 7;
  517. u8 port_num : 4;
  518. u8 rsvd2 : 4;
  519. __be16 vport_number;
  520. __be16 rsvd3;
  521. __be16 gid_index;
  522. } __attribute ( ( packed ) );
  523. struct golan_query_hca_vport_gid_outbox {
  524. struct golan_outbox_hdr hdr;
  525. u8 rsvd0[4];
  526. __be16 gids_num;
  527. u8 rsvd1[2];
  528. __be32 gid0[4];
  529. } __attribute ( ( packed ) );
  530. struct golan_query_hca_vport_pkey_inbox {
  531. struct golan_inbox_hdr hdr;
  532. u8 other_vport : 1;
  533. u8 rsvd1 : 7;
  534. u8 port_num : 4;
  535. u8 rsvd2 : 4;
  536. __be16 vport_number;
  537. __be16 rsvd3;
  538. __be16 pkey_index;
  539. } __attribute ( ( packed ) );
  540. struct golan_query_hca_vport_pkey_data {
  541. __be16 rsvd1;
  542. __be16 pkey0;
  543. } __attribute ( ( packed ) );
  544. struct golan_query_hca_vport_pkey_outbox {
  545. struct golan_outbox_hdr hdr;
  546. u8 rsvd[8];
  547. struct golan_query_hca_vport_pkey_data *pkey_data;
  548. } __attribute ( ( packed ) );
  549. struct golan_eqe_comp {
  550. __be32 reserved[6];
  551. __be32 cqn;
  552. } __attribute ( ( packed ) );
  553. struct golan_eqe_qp_srq {
  554. __be32 reserved[6];
  555. __be32 qp_srq_n;
  556. } __attribute ( ( packed ) );
  557. struct golan_eqe_cq_err {
  558. __be32 cqn;
  559. u8 reserved1[7];
  560. u8 syndrome;
  561. } __attribute ( ( packed ) );
  562. struct golan_eqe_dropped_packet {
  563. };
  564. struct golan_eqe_port_state {
  565. u8 reserved0[8];
  566. u8 port;
  567. } __attribute ( ( packed ) );
  568. struct golan_eqe_gpio {
  569. __be32 reserved0[2];
  570. __be64 gpio_event;
  571. } __attribute ( ( packed ) );
  572. struct golan_eqe_congestion {
  573. u8 type;
  574. u8 rsvd0;
  575. u8 congestion_level;
  576. } __attribute ( ( packed ) );
  577. struct golan_eqe_stall_vl {
  578. u8 rsvd0[3];
  579. u8 port_vl;
  580. } __attribute ( ( packed ) );
  581. struct golan_eqe_cmd {
  582. __be32 vector;
  583. __be32 rsvd[6];
  584. } __attribute ( ( packed ) );
  585. struct golan_eqe_page_req {
  586. u8 rsvd0[2];
  587. __be16 func_id;
  588. u8 rsvd1[2];
  589. __be16 num_pages;
  590. __be32 rsvd2[5];
  591. } __attribute ( ( packed ) );
  592. union ev_data {
  593. __be32 raw[7];
  594. struct golan_eqe_cmd cmd;
  595. struct golan_eqe_comp comp;
  596. struct golan_eqe_qp_srq qp_srq;
  597. struct golan_eqe_cq_err cq_err;
  598. struct golan_eqe_dropped_packet dp;
  599. struct golan_eqe_port_state port;
  600. struct golan_eqe_gpio gpio;
  601. struct golan_eqe_congestion cong;
  602. struct golan_eqe_stall_vl stall_vl;
  603. struct golan_eqe_page_req req_pages;
  604. } __attribute__ ((packed));
  605. struct golan_eqe {
  606. u8 rsvd0;
  607. u8 type;
  608. u8 rsvd1;
  609. u8 sub_type;
  610. __be32 rsvd2[7];
  611. union ev_data data;
  612. __be16 rsvd3;
  613. u8 signature;
  614. u8 owner;
  615. } __attribute__ ((packed));
  616. /* Protection Domain Structures */
  617. struct golan_alloc_pd_mbox_in {
  618. struct golan_inbox_hdr hdr;
  619. u8 rsvd[8];
  620. } __attribute ( ( packed ) );
  621. struct golan_alloc_pd_mbox_out {
  622. struct golan_outbox_hdr hdr;
  623. __be32 pdn;
  624. u8 rsvd[4];
  625. } __attribute ( ( packed ) );
  626. struct golan_dealloc_pd_mbox_in {
  627. struct golan_inbox_hdr hdr;
  628. __be32 pdn;
  629. u8 rsvd[4];
  630. } __attribute ( ( packed ) );
  631. struct golan_dealloc_pd_mbox_out {
  632. struct golan_outbox_hdr hdr;
  633. u8 rsvd[8];
  634. } __attribute ( ( packed ) );
  635. /* Memory key structures */
  636. #define GOLAN_IB_ACCESS_LOCAL_READ (1 << 2)
  637. #define GOLAN_IB_ACCESS_LOCAL_WRITE (1 << 3)
  638. #define GOLAN_MKEY_LEN64 (1 << 31)
  639. #define GOLAN_CREATE_MKEY_SEG_QPN_BIT 8
  640. struct golan_mkey_seg {
  641. /*
  642. * This is a two bit field occupying bits 31-30.
  643. * bit 31 is always 0,
  644. * bit 30 is zero for regular MRs and 1 (e.g free) for UMRs that do not have tanslation
  645. */
  646. u8 status;
  647. u8 pcie_control;
  648. u8 flags;
  649. u8 version;
  650. __be32 qpn_mkey7_0;
  651. u8 rsvd1[4];
  652. __be32 flags_pd;
  653. __be64 start_addr;
  654. __be64 len;
  655. __be32 bsfs_octo_size;
  656. u8 rsvd2[16];
  657. __be32 xlt_oct_size;
  658. u8 rsvd3[3];
  659. u8 log2_page_size;
  660. u8 rsvd4[4];
  661. } __attribute ( ( packed ) );
  662. struct golan_create_mkey_mbox_in_data {
  663. struct golan_mkey_seg seg;
  664. u8 rsvd1[16];
  665. __be32 xlat_oct_act_size;
  666. __be32 bsf_coto_act_size;
  667. u8 rsvd2[168];
  668. __be64 pas[0];
  669. } __attribute ( ( packed ) );
  670. struct golan_create_mkey_mbox_in {
  671. struct golan_inbox_hdr hdr;
  672. __be32 input_mkey_index;
  673. u8 rsvd0[4];
  674. struct golan_create_mkey_mbox_in_data data;
  675. } __attribute ( ( packed ) );
  676. struct golan_create_mkey_mbox_out {
  677. struct golan_outbox_hdr hdr;
  678. __be32 mkey;
  679. u8 rsvd[4];
  680. } __attribute ( ( packed ) );
  681. struct golan_destroy_mkey_mbox_in {
  682. struct golan_inbox_hdr hdr;
  683. __be32 mkey;
  684. u8 rsvd[4];
  685. } __attribute ( ( packed ) );
  686. struct golan_destroy_mkey_mbox_out {
  687. struct golan_outbox_hdr hdr;
  688. u8 rsvd[8];
  689. } __attribute ( ( packed ) );
  690. /* Completion Queue Structures */
  691. enum {
  692. GOLAN_CQ_STATE_ARMED = 9,
  693. GOLAN_CQ_STATE_ALWAYS_ARMED = 0xb,
  694. GOLAN_CQ_STATE_FIRED = 0xa
  695. };
  696. enum {
  697. GOLAN_CQE_REQ = 0,
  698. GOLAN_CQE_RESP_WR_IMM = 1,
  699. GOLAN_CQE_RESP_SEND = 2,
  700. GOLAN_CQE_RESP_SEND_IMM = 3,
  701. GOLAN_CQE_RESP_SEND_INV = 4,
  702. GOLAN_CQE_RESIZE_CQ = 0xff, /* TBD */
  703. GOLAN_CQE_REQ_ERR = 13,
  704. GOLAN_CQE_RESP_ERR = 14
  705. };
  706. struct golan_cq_context {
  707. u8 status;
  708. u8 cqe_sz_flags;
  709. u8 st;
  710. u8 rsvd3;
  711. u8 rsvd4[6];
  712. __be16 page_offset;
  713. __be32 log_sz_usr_page;
  714. __be16 cq_period;
  715. __be16 cq_max_count;
  716. __be16 rsvd20;
  717. __be16 c_eqn;
  718. u8 log_pg_sz;
  719. u8 rsvd25[7];
  720. __be32 last_notified_index;
  721. __be32 solicit_producer_index;
  722. __be32 consumer_counter;
  723. __be32 producer_counter;
  724. u8 rsvd48[8];
  725. __be64 db_record_addr;
  726. } __attribute ( ( packed ) );
  727. struct golan_create_cq_mbox_in_data {
  728. struct golan_cq_context ctx;
  729. u8 rsvd6[192];
  730. __be64 pas[0];
  731. } __attribute ( ( packed ) );
  732. struct golan_create_cq_mbox_in {
  733. struct golan_inbox_hdr hdr;
  734. __be32 input_cqn;
  735. u8 rsvdx[4];
  736. struct golan_create_cq_mbox_in_data data;
  737. } __attribute ( ( packed ) );
  738. struct golan_create_cq_mbox_out {
  739. struct golan_outbox_hdr hdr;
  740. __be32 cqn;
  741. u8 rsvd0[4];
  742. } __attribute ( ( packed ) );
  743. struct golan_destroy_cq_mbox_in {
  744. struct golan_inbox_hdr hdr;
  745. __be32 cqn;
  746. u8 rsvd0[4];
  747. } __attribute ( ( packed ) );
  748. struct golan_destroy_cq_mbox_out {
  749. struct golan_outbox_hdr hdr;
  750. u8 rsvd0[8];
  751. } __attribute ( ( packed ) );
  752. struct golan_err_cqe {
  753. u8 rsvd0[32];
  754. __be32 srqn;
  755. u8 rsvd1[16];
  756. u8 hw_syndrom;
  757. u8 rsvd2;
  758. u8 vendor_err_synd;
  759. u8 syndrome;
  760. __be32 s_wqe_opcode_qpn;
  761. __be16 wqe_counter;
  762. u8 signature;
  763. u8 op_own;
  764. } __attribute ( ( packed ) );
  765. struct golan_cqe64 {
  766. u8 rsvd0[17];
  767. u8 ml_path;
  768. u8 rsvd20[4];
  769. __be16 slid;
  770. __be32 flags_rqpn;
  771. u8 rsvd28[4];
  772. __be32 srqn;
  773. __be32 imm_inval_pkey;
  774. u8 rsvd40[4];
  775. __be32 byte_cnt;
  776. __be64 timestamp;
  777. __be32 sop_drop_qpn;
  778. __be16 wqe_counter;
  779. u8 signature;
  780. u8 op_own;
  781. } __attribute ( ( packed ) );
  782. /* Queue Pair Structures */
  783. #define GOLAN_QP_CTX_ST_BIT 16
  784. #define GOLAN_QP_CTX_PM_STATE_BIT 11
  785. #define GOLAN_QP_CTX_FRE_BIT 11
  786. #define GOLAN_QP_CTX_RLKY_BIT 4
  787. #define GOLAN_QP_CTX_RQ_SIZE_BIT 3
  788. #define GOLAN_QP_CTX_SQ_SIZE_BIT 11
  789. #define GOLAN_QP_CTX_MTU_BIT 5
  790. #define GOLAN_QP_CTX_ACK_REQ_FREQ_BIT 28
  791. enum {
  792. GOLAN_QP_CTX_DONT_USE_RSRVD_LKEY = 0,
  793. GOLAN_QP_CTX_USE_RSRVD_LKEY = 1
  794. };
  795. enum {
  796. GOLAN_IB_ACK_REQ_FREQ = 8,
  797. };
  798. enum golan_qp_optpar {
  799. GOLAN_QP_PARAM_ALT_ADDR_PATH = 1 << 0,
  800. GOLAN_QP_PARAM_RRE = 1 << 1,
  801. GOLAN_QP_PARAM_RAE = 1 << 2,
  802. GOLAN_QP_PARAM_RWE = 1 << 3,
  803. GOLAN_QP_PARAM_PKEY_INDEX = 1 << 4,
  804. GOLAN_QP_PARAM_Q_KEY = 1 << 5,
  805. GOLAN_QP_PARAM_RNR_TIMEOUT = 1 << 6,
  806. GOLAN_QP_PARAM_PRIMARY_ADDR_PATH = 1 << 7,
  807. GOLAN_QP_PARAM_SRA_MAX = 1 << 8,
  808. GOLAN_QP_PARAM_RRA_MAX = 1 << 9,
  809. GOLAN_QP_PARAM_PM_STATE = 1 << 10,
  810. GOLAN_QP_PARAM_RETRY_COUNT = 1 << 12,
  811. GOLAN_QP_PARAM_RNR_RETRY = 1 << 13,
  812. GOLAN_QP_PARAM_ACK_TIMEOUT = 1 << 14,
  813. GOLAN_QP_PARAM_PRI_PORT = 1 << 16,
  814. GOLAN_QP_PARAM_SRQN = 1 << 18,
  815. GOLAN_QP_PARAM_CQN_RCV = 1 << 19,
  816. GOLAN_QP_PARAM_DC_HS = 1 << 20,
  817. GOLAN_QP_PARAM_DC_KEY = 1 << 21
  818. };
  819. #define GOLAN_QP_PARAMS_INIT2RTR_MASK (GOLAN_QP_PARAM_PKEY_INDEX |\
  820. GOLAN_QP_PARAM_Q_KEY |\
  821. GOLAN_QP_PARAM_RWE |\
  822. GOLAN_QP_PARAM_RRE)
  823. #define GOLAN_QP_PARAMS_RTR2RTS_MASK (GOLAN_QP_PARAM_PM_STATE |\
  824. GOLAN_QP_PARAM_RNR_TIMEOUT |\
  825. GOLAN_QP_PARAM_Q_KEY |\
  826. GOLAN_QP_PARAM_RWE |\
  827. GOLAN_QP_PARAM_RRE)
  828. enum {
  829. GOLAN_QP_ST_RC = 0x0,
  830. GOLAN_QP_ST_UC = 0x1,
  831. GOLAN_QP_ST_UD = 0x2,
  832. GOLAN_QP_ST_XRC = 0x3,
  833. GOLAN_QP_ST_MLX = 0x4,
  834. GOLAN_QP_ST_DC = 0x5,
  835. GOLAN_QP_ST_QP0 = 0x7,
  836. GOLAN_QP_ST_QP1 = 0x8,
  837. GOLAN_QP_ST_RAW_ETHERTYPE = 0x9,
  838. GOLAN_QP_ST_RAW_IPV6 = 0xa,
  839. GOLAN_QP_ST_SNIFFER = 0xb,
  840. GOLAN_QP_ST_SYNC_UMR = 0xe,
  841. GOLAN_QP_ST_PTP_1588 = 0xd,
  842. GOLAN_QP_ST_REG_UMR = 0xc,
  843. GOLAN_QP_ST_MAX
  844. };
  845. enum {
  846. GOLAN_QP_PM_MIGRATED = 0x3,
  847. GOLAN_QP_PM_ARMED = 0x0,
  848. GOLAN_QP_PM_REARM = 0x1
  849. };
  850. enum {
  851. GOLAN_QP_LAT_SENSITIVE = 1 << 28,
  852. GOLAN_QP_ENABLE_SIG = 1 << 31
  853. };
  854. struct golan_qp_db {
  855. u8 rsvd0[2];
  856. __be16 recv_db;
  857. u8 rsvd1[2];
  858. __be16 send_db;
  859. } __attribute ( ( packed ) );
  860. enum {
  861. GOLAN_WQE_CTRL_CQ_UPDATE = 2 << 2, /*Wissam, wtf?*/
  862. GOLAN_WQE_CTRL_SOLICITED = 1 << 1
  863. };
  864. struct golan_wqe_ctrl_seg {
  865. __be32 opmod_idx_opcode;
  866. __be32 qpn_ds;
  867. u8 signature;
  868. u8 rsvd[2];
  869. u8 fm_ce_se;
  870. __be32 imm;
  871. } __attribute ( ( packed ) );
  872. struct golan_av {
  873. union {
  874. struct {
  875. __be32 qkey;
  876. __be32 reserved;
  877. } qkey;
  878. __be64 dc_key;
  879. } key;
  880. __be32 dqp_dct;
  881. u8 stat_rate_sl;
  882. u8 fl_mlid;
  883. __be16 rlid;
  884. u8 reserved0[10];
  885. u8 tclass;
  886. u8 hop_limit;
  887. __be32 grh_gid_fl;
  888. u8 rgid[16];
  889. } __attribute ( ( packed ) );
  890. struct golan_wqe_data_seg {
  891. __be32 byte_count;
  892. __be32 lkey;
  893. __be64 addr;
  894. } __attribute ( ( packed ) );
  895. struct golan_wqe_signature_seg {
  896. u8 rsvd0[4];
  897. u8 signature;
  898. u8 rsvd1[11];
  899. } __attribute ( ( packed ) );
  900. struct golan_wqe_inline_seg {
  901. __be32 byte_count;
  902. } __attribute ( ( packed ) );
  903. struct golan_qp_path {
  904. u8 fl;
  905. u8 rsvd3;
  906. u8 free_ar;
  907. u8 pkey_index;
  908. u8 rsvd0;
  909. u8 grh_mlid;
  910. __be16 rlid;
  911. u8 ackto_lt;
  912. u8 mgid_index;
  913. u8 static_rate;
  914. u8 hop_limit;
  915. __be32 tclass_flowlabel;
  916. u8 rgid[16];
  917. u8 rsvd1[4];
  918. u8 sl;
  919. u8 port;
  920. u8 rsvd2[6];
  921. } __attribute ( ( packed ) );
  922. struct golan_qp_context {
  923. __be32 flags;
  924. __be32 flags_pd;
  925. u8 mtu_msgmax;
  926. u8 rq_size_stride;
  927. __be16 sq_crq_size;
  928. __be32 qp_counter_set_usr_page;
  929. __be32 wire_qpn;
  930. __be32 log_pg_sz_remote_qpn;
  931. struct golan_qp_path pri_path;
  932. struct golan_qp_path alt_path;
  933. __be32 params1;
  934. u8 reserved2[4];
  935. __be32 next_send_psn;
  936. __be32 cqn_send;
  937. u8 reserved3[8];
  938. __be32 last_acked_psn;
  939. __be32 ssn;
  940. __be32 params2;
  941. __be32 rnr_nextrecvpsn;
  942. __be32 xrcd;
  943. __be32 cqn_recv;
  944. __be64 db_rec_addr;
  945. __be32 qkey;
  946. __be32 rq_type_srqn;
  947. __be32 rmsn;
  948. __be16 hw_sq_wqe_counter;
  949. __be16 sw_sq_wqe_counter;
  950. __be16 hw_rcyclic_byte_counter;
  951. __be16 hw_rq_counter;
  952. __be16 sw_rcyclic_byte_counter;
  953. __be16 sw_rq_counter;
  954. u8 rsvd0[5];
  955. u8 cgs;
  956. u8 cs_req;
  957. u8 cs_res;
  958. __be64 dc_access_key;
  959. u8 rsvd1[24];
  960. } __attribute ( ( packed ) );
  961. struct golan_create_qp_mbox_in_data {
  962. __be32 opt_param_mask;
  963. u8 rsvd1[4];
  964. struct golan_qp_context ctx;
  965. u8 rsvd3[16];
  966. __be64 pas[0];
  967. } __attribute ( ( packed ) );
  968. struct golan_create_qp_mbox_in {
  969. struct golan_inbox_hdr hdr;
  970. __be32 input_qpn;
  971. u8 rsvd0[4];
  972. struct golan_create_qp_mbox_in_data data;
  973. } __attribute ( ( packed ) );
  974. struct golan_create_qp_mbox_out {
  975. struct golan_outbox_hdr hdr;
  976. __be32 qpn;
  977. u8 rsvd0[4];
  978. } __attribute ( ( packed ) );
  979. struct golan_destroy_qp_mbox_in {
  980. struct golan_inbox_hdr hdr;
  981. __be32 qpn;
  982. u8 rsvd0[4];
  983. } __attribute ( ( packed ) );
  984. struct golan_destroy_qp_mbox_out {
  985. struct golan_outbox_hdr hdr;
  986. u8 rsvd0[8];
  987. } __attribute ( ( packed ) );
  988. struct golan_modify_qp_mbox_in_data {
  989. __be32 optparam;
  990. u8 rsvd0[4];
  991. struct golan_qp_context ctx;
  992. } __attribute ( ( packed ) );
  993. struct golan_modify_qp_mbox_in {
  994. struct golan_inbox_hdr hdr;
  995. __be32 qpn;
  996. u8 rsvd1[4];
  997. struct golan_modify_qp_mbox_in_data data;
  998. } __attribute ( ( packed ) );
  999. struct golan_modify_qp_mbox_out {
  1000. struct golan_outbox_hdr hdr;
  1001. u8 rsvd0[8];
  1002. } __attribute ( ( packed ) );
  1003. struct golan_attach_mcg_mbox_in {
  1004. struct golan_inbox_hdr hdr;
  1005. __be32 qpn;
  1006. __be32 rsvd;
  1007. u8 gid[16];
  1008. } __attribute ( ( packed ) );
  1009. struct golan_attach_mcg_mbox_out {
  1010. struct golan_outbox_hdr hdr;
  1011. u8 rsvf[8];
  1012. } __attribute ( ( packed ) );
  1013. struct golan_detach_mcg_mbox_in {
  1014. struct golan_inbox_hdr hdr;
  1015. __be32 qpn;
  1016. __be32 rsvd;
  1017. u8 gid[16];
  1018. } __attribute ( ( packed ) );
  1019. struct golan_detach_mcg_mbox_out {
  1020. struct golan_outbox_hdr hdr;
  1021. u8 rsvf[8];
  1022. } __attribute ( ( packed ) );
  1023. #define MAILBOX_SIZE sizeof(struct golan_cmd_prot_block)
  1024. #endif /* __CIB_PRM__ */