Browse Source

[hermon] Add infrastructure for Ethernet devices

Add PRM structures to support Hermon Ethernet devices.

Signed-off-by: Itay Gazit <itaygazit@gmail.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Itay Gazit 15 years ago
parent
commit
ed0ea7cfc2
2 changed files with 156 additions and 8 deletions
  1. 4
    4
      src/drivers/infiniband/hermon.c
  2. 152
    4
      src/drivers/infiniband/hermon.h

+ 4
- 4
src/drivers/infiniband/hermon.c View File

305
 
305
 
306
 static inline int
306
 static inline int
307
 hermon_cmd_set_port ( struct hermon *hermon, unsigned int port,
307
 hermon_cmd_set_port ( struct hermon *hermon, unsigned int port,
308
-		      struct hermonprm_set_port *set_port ) {
308
+		      union hermonprm_set_port *set_port ) {
309
 	return hermon_cmd ( hermon,
309
 	return hermon_cmd ( hermon,
310
 			    HERMON_HCR_IN_CMD ( HERMON_HCR_SET_PORT,
310
 			    HERMON_HCR_IN_CMD ( HERMON_HCR_SET_PORT,
311
 						1, sizeof ( *set_port ) ),
311
 						1, sizeof ( *set_port ) ),
1939
  */
1939
  */
1940
 static int hermon_open ( struct ib_device *ibdev ) {
1940
 static int hermon_open ( struct ib_device *ibdev ) {
1941
 	struct hermon *hermon = ib_get_drvdata ( ibdev );
1941
 	struct hermon *hermon = ib_get_drvdata ( ibdev );
1942
-	struct hermonprm_set_port set_port;
1942
+	union hermonprm_set_port set_port;
1943
 	int port_type;
1943
 	int port_type;
1944
 	int rc;
1944
 	int rc;
1945
 
1945
 
1954
 
1954
 
1955
 	/* Set port parameters */
1955
 	/* Set port parameters */
1956
 	memset ( &set_port, 0, sizeof ( set_port ) );
1956
 	memset ( &set_port, 0, sizeof ( set_port ) );
1957
-	MLX_FILL_7 ( &set_port, 0,
1957
+	MLX_FILL_7 ( &set_port.ib, 0,
1958
 		     mmc, 1,
1958
 		     mmc, 1,
1959
 		     mvc, 1,
1959
 		     mvc, 1,
1960
 		     mp, 1,
1960
 		     mp, 1,
1962
 		     mtu_cap, IB_MTU_2048,
1962
 		     mtu_cap, IB_MTU_2048,
1963
 		     vl_cap, IB_VL_0,
1963
 		     vl_cap, IB_VL_0,
1964
 		     rcm, 1 );
1964
 		     rcm, 1 );
1965
-	MLX_FILL_2 ( &set_port, 10,
1965
+	MLX_FILL_2 ( &set_port.ib, 10,
1966
 		     max_pkey, 1,
1966
 		     max_pkey, 1,
1967
 		     max_gid, 1 );
1967
 		     max_gid, 1 );
1968
 	if ( ( rc = hermon_cmd_set_port ( hermon, ibdev->port,
1968
 	if ( ( rc = hermon_cmd_set_port ( hermon, ibdev->port,

+ 152
- 4
src/drivers/infiniband/hermon.h View File

68
 #define HERMON_HCR_READ_MCG		0x0025
68
 #define HERMON_HCR_READ_MCG		0x0025
69
 #define HERMON_HCR_WRITE_MCG		0x0026
69
 #define HERMON_HCR_WRITE_MCG		0x0026
70
 #define HERMON_HCR_MGID_HASH		0x0027
70
 #define HERMON_HCR_MGID_HASH		0x0027
71
+#define HERMON_HCR_MOD_STAT_CFG		0x0034
72
+#define HERMON_HCR_QUERY_PORT		0x0043
71
 #define HERMON_HCR_SENSE_PORT		0x004d
73
 #define HERMON_HCR_SENSE_PORT		0x004d
72
 #define HERMON_HCR_RUN_FW		0x0ff6
74
 #define HERMON_HCR_RUN_FW		0x0ff6
73
 #define HERMON_HCR_DISABLE_LAM		0x0ff7
75
 #define HERMON_HCR_DISABLE_LAM		0x0ff7
86
 #define HERMON_ST_MLX			0x07
88
 #define HERMON_ST_MLX			0x07
87
 
89
 
88
 /* Port types */
90
 /* Port types */
91
+#define HERMON_PORT_TYPE_UNKNOWN	0
89
 #define HERMON_PORT_TYPE_IB		1
92
 #define HERMON_PORT_TYPE_IB		1
93
+#define HERMON_PORT_TYPE_ETH		2
90
 
94
 
91
 /* MTUs */
95
 /* MTUs */
92
 #define HERMON_MTU_2048			0x04
96
 #define HERMON_MTU_2048			0x04
191
 
195
 
192
 struct hermonprm_port_state_change_event_st {
196
 struct hermonprm_port_state_change_event_st {
193
 	pseudo_bit_t reserved[0x00020];
197
 	pseudo_bit_t reserved[0x00020];
198
+/* -------------- */
194
 	struct hermonprm_port_state_change_st data;
199
 	struct hermonprm_port_state_change_st data;
195
 } __attribute__ (( packed ));
200
 } __attribute__ (( packed ));
196
 
201
 
197
 struct hermonprm_sense_port_st {
202
 struct hermonprm_sense_port_st {
198
-	pseudo_bit_t port_type[0x00020];
203
+	pseudo_bit_t reserved0[0x00020];
199
 /* -------------- */
204
 /* -------------- */
200
-	pseudo_bit_t reserved[0x00020];
205
+	pseudo_bit_t port_type[0x00002];
206
+	pseudo_bit_t reserved1[0x00018];
201
 } __attribute__ (( packed ));
207
 } __attribute__ (( packed ));
202
 
208
 
203
-struct hermonprm_set_port_st {
209
+struct hermonprm_set_port_ib_st {
204
 	pseudo_bit_t rqk[0x00001];
210
 	pseudo_bit_t rqk[0x00001];
205
 	pseudo_bit_t rcm[0x00001];
211
 	pseudo_bit_t rcm[0x00001];
206
 	pseudo_bit_t reserved0[0x00002];
212
 	pseudo_bit_t reserved0[0x00002];
242
 	pseudo_bit_t max_pkey[0x00010];
248
 	pseudo_bit_t max_pkey[0x00010];
243
 } __attribute__ (( packed ));
249
 } __attribute__ (( packed ));
244
 
250
 
251
+struct hermonprm_query_port_cap_st {
252
+	pseudo_bit_t eth_mtu[0x00010];
253
+	pseudo_bit_t ib_mtu[0x00004];
254
+	pseudo_bit_t reserved0[0x00004];
255
+	pseudo_bit_t ib[0x00001];
256
+	pseudo_bit_t eth[0x00001];
257
+	pseudo_bit_t reserved1[0x00005];
258
+	pseudo_bit_t link_state[0x00001];
259
+/* -------------- */
260
+	pseudo_bit_t log_max_pkey[0x00004];
261
+	pseudo_bit_t log_max_gid[0x00004];
262
+	pseudo_bit_t ib_port_width[0x00004];
263
+	pseudo_bit_t reserved2[0x00004];
264
+	pseudo_bit_t eth_link_speed[0x00004];
265
+	pseudo_bit_t reserved3[0x00004];
266
+	pseudo_bit_t ib_link_speed[0x00004];
267
+	pseudo_bit_t reserved4[0x00004];
268
+/* -------------- */
269
+	pseudo_bit_t max_vl_ib[0x00004];
270
+	pseudo_bit_t reserved5[0x00004];
271
+	pseudo_bit_t log_max_mac[0x00004];
272
+	pseudo_bit_t log_max_vlan[0x00004];
273
+	pseudo_bit_t reserved6[0x00010];
274
+/* -------------- */
275
+	pseudo_bit_t reserved7[0x00020];
276
+/* -------------- */
277
+	pseudo_bit_t mac_47_32[0x00010];
278
+	pseudo_bit_t reserved8[0x00010];
279
+/* -------------- */
280
+	pseudo_bit_t mac_31_0[0x00020];
281
+/* -------------- */
282
+	pseudo_bit_t vendor_oui[0x00018];
283
+	pseudo_bit_t transceiver_type[0x00008];
284
+/* -------------- */
285
+	pseudo_bit_t reserved9[0x00010];
286
+	pseudo_bit_t wavelength[0x00010];
287
+/* -------------- */
288
+	pseudo_bit_t transceiver_code_hi[0x00020];
289
+/* -------------- */
290
+	pseudo_bit_t transceiver_code_lo[0x00020];
291
+/* -------------- */
292
+	pseudo_bit_t reserved10[0x000c0];
293
+} __attribute__ (( packed ));
294
+
295
+struct hermonprm_set_port_general_context_st {
296
+	pseudo_bit_t v_mtu[0x00001];
297
+	pseudo_bit_t v_pprx[0x00001];
298
+	pseudo_bit_t v_pptx[0x00001];
299
+	pseudo_bit_t reserved0[0x0001d];
300
+/* -------------- */
301
+	pseudo_bit_t mtu[0x00010];
302
+	pseudo_bit_t reserved1[0x00010];
303
+/* -------------- */
304
+	pseudo_bit_t reserved2[0x00010];
305
+	pseudo_bit_t pfctx[0x00008];
306
+	pseudo_bit_t reserved3[0x00007];
307
+	pseudo_bit_t pptx[0x00001];
308
+/* -------------- */
309
+	pseudo_bit_t reserved4[0x00010];
310
+	pseudo_bit_t pfcrx[0x00008];
311
+	pseudo_bit_t reserved5[0x00007];
312
+	pseudo_bit_t pprx[0x00001];
313
+/* -------------- */
314
+} __attribute__ (( packed ));
315
+
316
+struct hermonprm_set_port_rqp_calc_st {
317
+	pseudo_bit_t base_qpn[0x00018];
318
+	pseudo_bit_t reserved0[0x00008];
319
+/* -------------- */
320
+	pseudo_bit_t n_p[0x00002];
321
+	pseudo_bit_t reserved1[0x00006];
322
+	pseudo_bit_t n_v[0x00003];
323
+	pseudo_bit_t reserved2[0x00005];
324
+	pseudo_bit_t n_m[0x00004];
325
+	pseudo_bit_t reserved3[0x0000c];
326
+/* -------------- */
327
+	pseudo_bit_t mac_miss_index[0x00008];
328
+	pseudo_bit_t reserved4[0x00018];
329
+/* -------------- */
330
+	pseudo_bit_t vlan_miss_index[0x00007];
331
+	pseudo_bit_t reserved5[0x00008];
332
+	pseudo_bit_t intra_miss[0x00001];
333
+	pseudo_bit_t no_vlan_index[0x00007];
334
+	pseudo_bit_t reserved6[0x00008];
335
+	pseudo_bit_t intra_no_vlan[0x00001];
336
+/* -------------- */
337
+	pseudo_bit_t no_vlan_prio[0x00003];
338
+	pseudo_bit_t reserved7[0x0001d];
339
+/* -------------- */
340
+	pseudo_bit_t promisc_qpn[0x00018];
341
+	pseudo_bit_t reserved8[0x00007];
342
+	pseudo_bit_t en_uc_promisc[0x00001];
343
+/* -------------- */
344
+	pseudo_bit_t def_mcast_qpn[0x00018];
345
+	pseudo_bit_t reserved9[0x00005];
346
+	pseudo_bit_t mc_by_vlan[0x00001];
347
+	pseudo_bit_t mc_promisc_mode[0x00002];
348
+/* -------------- */
349
+	pseudo_bit_t reserved10[0x00020];
350
+/* -------------- */
351
+} __attribute__ (( packed ));
352
+
353
+struct hermonprm_set_port_mac_table_st {
354
+	pseudo_bit_t mac_h[0x00010];
355
+	pseudo_bit_t reserved0[0x0000f];
356
+	pseudo_bit_t v[0x00001];
357
+/* -------------- */
358
+	pseudo_bit_t mac_l[0x00020];
359
+/* -------------- */
360
+} __attribute__ (( packed ));
361
+
362
+struct hermonprm_set_port_vlan_st {
363
+	pseudo_bit_t vlan_id[0x0000c];
364
+	pseudo_bit_t reserved0[0x00012];
365
+	pseudo_bit_t intra[0x00001];
366
+	pseudo_bit_t v[0x00001];
367
+/* -------------- */
368
+} __attribute__ (( packed ));
369
+
370
+struct hermonprm_mod_stat_cfg_pf_net_boot_st {
371
+	pseudo_bit_t reserved1[0x0001c];
372
+	pseudo_bit_t pf_net_boot[0x00001];
373
+	pseudo_bit_t reserved2[0x00002];
374
+	pseudo_bit_t pf_net_boot_m[0x00001];
375
+/* -------------- */
376
+	pseudo_bit_t reserved0[0x00020];
377
+} __attribute__ (( packed ));
378
+
245
 /*
379
 /*
246
  * Wrapper structures for hardware datatypes
380
  * Wrapper structures for hardware datatypes
247
  *
381
  *
260
 struct MLX_DECLARE_STRUCT ( hermonprm_mad_ifc );
394
 struct MLX_DECLARE_STRUCT ( hermonprm_mad_ifc );
261
 struct MLX_DECLARE_STRUCT ( hermonprm_mcg_entry );
395
 struct MLX_DECLARE_STRUCT ( hermonprm_mcg_entry );
262
 struct MLX_DECLARE_STRUCT ( hermonprm_mgm_hash );
396
 struct MLX_DECLARE_STRUCT ( hermonprm_mgm_hash );
397
+struct MLX_DECLARE_STRUCT ( hermonprm_mod_stat_cfg_pf_net_boot );
263
 struct MLX_DECLARE_STRUCT ( hermonprm_mpt );
398
 struct MLX_DECLARE_STRUCT ( hermonprm_mpt );
264
 struct MLX_DECLARE_STRUCT ( hermonprm_mtt );
399
 struct MLX_DECLARE_STRUCT ( hermonprm_mtt );
265
 struct MLX_DECLARE_STRUCT ( hermonprm_port_state_change_event );
400
 struct MLX_DECLARE_STRUCT ( hermonprm_port_state_change_event );
267
 struct MLX_DECLARE_STRUCT ( hermonprm_qp_ee_state_transitions );
402
 struct MLX_DECLARE_STRUCT ( hermonprm_qp_ee_state_transitions );
268
 struct MLX_DECLARE_STRUCT ( hermonprm_query_dev_cap );
403
 struct MLX_DECLARE_STRUCT ( hermonprm_query_dev_cap );
269
 struct MLX_DECLARE_STRUCT ( hermonprm_query_fw );
404
 struct MLX_DECLARE_STRUCT ( hermonprm_query_fw );
405
+struct MLX_DECLARE_STRUCT ( hermonprm_query_port_cap );
270
 struct MLX_DECLARE_STRUCT ( hermonprm_queue_pair_ee_context_entry );
406
 struct MLX_DECLARE_STRUCT ( hermonprm_queue_pair_ee_context_entry );
271
 struct MLX_DECLARE_STRUCT ( hermonprm_scalar_parameter );
407
 struct MLX_DECLARE_STRUCT ( hermonprm_scalar_parameter );
272
 struct MLX_DECLARE_STRUCT ( hermonprm_sense_port );
408
 struct MLX_DECLARE_STRUCT ( hermonprm_sense_port );
273
 struct MLX_DECLARE_STRUCT ( hermonprm_send_db_register );
409
 struct MLX_DECLARE_STRUCT ( hermonprm_send_db_register );
274
-struct MLX_DECLARE_STRUCT ( hermonprm_set_port );
410
+struct MLX_DECLARE_STRUCT ( hermonprm_set_port_ib );
411
+struct MLX_DECLARE_STRUCT ( hermonprm_set_port_general_context );
412
+struct MLX_DECLARE_STRUCT ( hermonprm_set_port_mac_table );
413
+struct MLX_DECLARE_STRUCT ( hermonprm_set_port_rqp_calc );
414
+struct MLX_DECLARE_STRUCT ( hermonprm_set_port_vlan );
275
 struct MLX_DECLARE_STRUCT ( hermonprm_ud_address_vector );
415
 struct MLX_DECLARE_STRUCT ( hermonprm_ud_address_vector );
276
 struct MLX_DECLARE_STRUCT ( hermonprm_virtual_physical_mapping );
416
 struct MLX_DECLARE_STRUCT ( hermonprm_virtual_physical_mapping );
277
 struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ctrl_mlx );
417
 struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ctrl_mlx );
336
 	union ib_mad mad;
476
 	union ib_mad mad;
337
 } __attribute__ (( packed ));
477
 } __attribute__ (( packed ));
338
 
478
 
479
+union hermonprm_set_port {
480
+	struct hermonprm_set_port_ib ib;
481
+	struct hermonprm_set_port_general_context general;
482
+	struct hermonprm_set_port_rqp_calc rqp_calc;
483
+	struct hermonprm_set_port_mac_table mac_table[128];
484
+	struct hermonprm_set_port_vlan vlan;
485
+} __attribute__ (( packed ));
486
+
339
 /*
487
 /*
340
  * iPXE-specific definitions
488
  * iPXE-specific definitions
341
  *
489
  *

Loading…
Cancel
Save