iPXE
hermon.h
Go to the documentation of this file.
1 #ifndef _HERMON_H
2 #define _HERMON_H
3 
4 /** @file
5  *
6  * Mellanox Hermon Infiniband HCA driver
7  *
8  */
9 
10 FILE_LICENCE ( GPL2_OR_LATER );
11 
12 #include <stdint.h>
13 #include <ipxe/ib_packet.h>
14 #include <ipxe/bofm.h>
15 #include <ipxe/nvsvpd.h>
16 #include <ipxe/nvo.h>
17 #include "mlx_bitops.h"
18 #include "MT25408_PRM.h"
19 
20 /*
21  * Hardware constants
22  *
23  */
24 
25 /* Ports in existence */
26 #define HERMON_MAX_PORTS 2
27 #define HERMON_PORT_BASE 1
28 
29 /* PCI BARs */
30 #define HERMON_PCI_CONFIG_BAR PCI_BASE_ADDRESS_0
31 #define HERMON_PCI_CONFIG_BAR_SIZE 0x100000
32 #define HERMON_PCI_UAR_BAR PCI_BASE_ADDRESS_2
33 
34 /* Device reset */
35 #define HERMON_RESET_OFFSET 0x0f0010
36 #define HERMON_RESET_MAGIC 0x01000001UL
37 #define HERMON_RESET_MAX_WAIT_MS 1000
38 
39 /* Work queue entry and completion queue entry opcodes */
40 #define HERMON_OPCODE_NOP 0x00
41 #define HERMON_OPCODE_SEND 0x0a
42 #define HERMON_OPCODE_RECV_ERROR 0xfe
43 #define HERMON_OPCODE_SEND_ERROR 0xff
44 
45 /* HCA command register opcodes */
46 #define HERMON_HCR_QUERY_DEV_CAP 0x0003
47 #define HERMON_HCR_QUERY_FW 0x0004
48 #define HERMON_HCR_INIT_HCA 0x0007
49 #define HERMON_HCR_CLOSE_HCA 0x0008
50 #define HERMON_HCR_INIT_PORT 0x0009
51 #define HERMON_HCR_CLOSE_PORT 0x000a
52 #define HERMON_HCR_SET_PORT 0x000c
53 #define HERMON_HCR_SW2HW_MPT 0x000d
54 #define HERMON_HCR_HW2SW_MPT 0x000f
55 #define HERMON_HCR_WRITE_MTT 0x0011
56 #define HERMON_HCR_MAP_EQ 0x0012
57 #define HERMON_HCR_SW2HW_EQ 0x0013
58 #define HERMON_HCR_HW2SW_EQ 0x0014
59 #define HERMON_HCR_QUERY_EQ 0x0015
60 #define HERMON_HCR_SW2HW_CQ 0x0016
61 #define HERMON_HCR_HW2SW_CQ 0x0017
62 #define HERMON_HCR_QUERY_CQ 0x0018
63 #define HERMON_HCR_RST2INIT_QP 0x0019
64 #define HERMON_HCR_INIT2RTR_QP 0x001a
65 #define HERMON_HCR_RTR2RTS_QP 0x001b
66 #define HERMON_HCR_RTS2RTS_QP 0x001c
67 #define HERMON_HCR_2RST_QP 0x0021
68 #define HERMON_HCR_QUERY_QP 0x0022
69 #define HERMON_HCR_CONF_SPECIAL_QP 0x0023
70 #define HERMON_HCR_MAD_IFC 0x0024
71 #define HERMON_HCR_READ_MCG 0x0025
72 #define HERMON_HCR_WRITE_MCG 0x0026
73 #define HERMON_HCR_MGID_HASH 0x0027
74 #define HERMON_HCR_MOD_STAT_CFG 0x0034
75 #define HERMON_HCR_QUERY_PORT 0x0043
76 #define HERMON_HCR_SENSE_PORT 0x004d
77 #define HERMON_HCR_RUN_FW 0x0ff6
78 #define HERMON_HCR_DISABLE_LAM 0x0ff7
79 #define HERMON_HCR_ENABLE_LAM 0x0ff8
80 #define HERMON_HCR_UNMAP_ICM 0x0ff9
81 #define HERMON_HCR_MAP_ICM 0x0ffa
82 #define HERMON_HCR_UNMAP_ICM_AUX 0x0ffb
83 #define HERMON_HCR_MAP_ICM_AUX 0x0ffc
84 #define HERMON_HCR_SET_ICM_SIZE 0x0ffd
85 #define HERMON_HCR_UNMAP_FA 0x0ffe
86 #define HERMON_HCR_MAP_FA 0x0fff
87 
88 /* Service types */
89 #define HERMON_ST_RC 0x00
90 #define HERMON_ST_UD 0x03
91 #define HERMON_ST_MLX 0x07
92 
93 /* Port types */
94 #define HERMON_PORT_TYPE_UNKNOWN 0
95 #define HERMON_PORT_TYPE_IB 1
96 #define HERMON_PORT_TYPE_ETH 2
97 
98 /* MTUs */
99 #define HERMON_MTU_2048 0x04
100 #define HERMON_MTU_ETH 0x07
101 
102 #define HERMON_INVALID_LKEY 0x00000100UL
103 
104 #define HERMON_PAGE_SIZE ( ( size_t ) 4096 )
105 
106 #define HERMON_DB_POST_SND_OFFSET 0x14
107 #define HERMON_DB_EQ_OFFSET(_eqn) \
108  ( 0x800 + HERMON_PAGE_SIZE * ( (_eqn) / 4 ) + 0x08 * ( (_eqn) % 4 ) )
109 
110 #define HERMON_QP_OPT_PARAM_PM_STATE 0x00000400UL
111 #define HERMON_QP_OPT_PARAM_QKEY 0x00000020UL
112 #define HERMON_QP_OPT_PARAM_ALT_PATH 0x00000001UL
113 
114 #define HERMON_MAP_EQ ( 0UL << 31 )
115 #define HERMON_UNMAP_EQ ( 1UL << 31 )
116 
117 #define HERMON_SET_PORT_GENERAL_PARAM 0x0000
118 #define HERMON_SET_PORT_RECEIVE_QP 0x0100
119 #define HERMON_SET_PORT_MAC_TABLE 0x0200
120 #define HERMON_SET_PORT_VLAN_TABLE 0x0300
121 #define HERMON_SET_PORT_PRIORITY_TABLE 0x0400
122 #define HERMON_SET_PORT_GID_TABLE 0x0500
123 
124 #define HERMON_EV_PORT_STATE_CHANGE 0x09
125 #define HERMON_EV_PORT_MGMNT_CHANGE 0x1d
126 
127 #define HERMON_SCHED_QP0 0x3f
128 #define HERMON_SCHED_DEFAULT 0x83
129 
130 #define HERMON_LOG_MULTICAST_HASH_SIZE 7
131 
132 #define HERMON_PM_STATE_ARMED 0x00
133 #define HERMON_PM_STATE_REARM 0x01
134 #define HERMON_PM_STATE_MIGRATED 0x03
135 
136 #define HERMON_RETRY_MAX 0x07
137 
138 #define HERMON_MOD_STAT_CFG_SET 0x01
139 #define HERMON_MOD_STAT_CFG_QUERY 0x03
140 
141 #define HERMON_VPD_FIELD( port ) \
142  PCI_VPD_FIELD ( PCI_VPD_TAG_RW, 'V', ( '5' + (port) - 1 ) )
143 
144 /*
145  * Datatypes that seem to be missing from the autogenerated documentation
146  *
147  */
150 /* -------------- */
151  pseudo_bit_t hash[0x00010];
153 } __attribute__ (( packed ));
154 
158 } __attribute__ (( packed ));
159 
163 /* -------------- */
165  pseudo_bit_t cmd[0x00003];
169 } __attribute__ (( packed ));
170 
173  pseudo_bit_t qn[0x00018];
174 } __attribute__ (( packed ));
175 
177  pseudo_bit_t ci[0x00018];
179  pseudo_bit_t a[0x00001];
180 } __attribute__ (( packed ));
181 
184 /* -------------- */
185  pseudo_bit_t value[0x00020];
186 } __attribute__ (( packed ));
187 
190 /* -------------- */
209  pseudo_bit_t gpio[0x00001];
212 } __attribute__ (( packed ));
213 
216 /* -------------- */
218 } __attribute__ (( packed ));
219 
222 /* -------------- */
223  pseudo_bit_t port[0x00008];
225 } __attribute__ (( packed ));
226 
229 /* -------------- */
232 } __attribute__ (( packed ));
233 
235  pseudo_bit_t rqk[0x00001];
236  pseudo_bit_t rcm[0x00001];
241  pseudo_bit_t g0[0x00001];
242  pseudo_bit_t ng[0x00001];
243  pseudo_bit_t sig[0x00001];
244  pseudo_bit_t mg[0x00001];
245  pseudo_bit_t mp[0x00001];
246  pseudo_bit_t mvc[0x00001];
247  pseudo_bit_t mmc[0x00001];
249  pseudo_bit_t lws[0x00001];
250  pseudo_bit_t lss[0x00001];
252 /* -------------- */
254 /* -------------- */
256 /* -------------- */
258 /* -------------- */
260 /* -------------- */
262 /* -------------- */
264 /* -------------- */
266 /* -------------- */
270 /* -------------- */
274 /* -------------- */
277 /* -------------- */
279 /* -------------- */
281 /* -------------- */
283 /* -------------- */
285 /* -------------- */
287 /* -------------- */
289 /* -------------- */
291 /* -------------- */
293 /* -------------- */
295 /* -------------- */
297 /* -------------- */
299 /* -------------- */
301 /* -------------- */
303 /* -------------- */
305 /* -------------- */
307 /* -------------- */
309 /* -------------- */
311 /* -------------- */
315 /* -------------- */
316 } __attribute__ (( packed ));
317 
322  pseudo_bit_t ib[0x00001];
323  pseudo_bit_t eth[0x00001];
326 /* -------------- */
335 /* -------------- */
341 /* -------------- */
343 /* -------------- */
346 /* -------------- */
348 /* -------------- */
351 /* -------------- */
354 /* -------------- */
356 /* -------------- */
358 /* -------------- */
360 } __attribute__ (( packed ));
361 
363  pseudo_bit_t v_mtu[0x00001];
367 /* -------------- */
368  pseudo_bit_t mtu[0x00010];
370 /* -------------- */
372  pseudo_bit_t pfctx[0x00008];
374  pseudo_bit_t pptx[0x00001];
375 /* -------------- */
377  pseudo_bit_t pfcrx[0x00008];
379  pseudo_bit_t pprx[0x00001];
380 /* -------------- */
381 } __attribute__ (( packed ));
382 
386 /* -------------- */
387  pseudo_bit_t n_p[0x00002];
389  pseudo_bit_t n_v[0x00003];
391  pseudo_bit_t n_m[0x00004];
393 /* -------------- */
396 /* -------------- */
403 /* -------------- */
406 /* -------------- */
410 /* -------------- */
415 /* -------------- */
417 /* -------------- */
418 } __attribute__ (( packed ));
419 
421  pseudo_bit_t mac_h[0x00010];
423  pseudo_bit_t v[0x00001];
424 /* -------------- */
425  pseudo_bit_t mac_l[0x00020];
426 /* -------------- */
427 } __attribute__ (( packed ));
428 
432  pseudo_bit_t intra[0x00001];
433  pseudo_bit_t v[0x00001];
434 /* -------------- */
435 } __attribute__ (( packed ));
436 
440  pseudo_bit_t xnum[0x00004];
445 } __attribute__ (( packed ));
446 
447 /*
448  * Wrapper structures for hardware datatypes
449  *
450  */
451 
452 struct MLX_DECLARE_STRUCT ( hermonprm_completion_queue_context );
453 struct MLX_DECLARE_STRUCT ( hermonprm_completion_queue_entry );
454 struct MLX_DECLARE_STRUCT ( hermonprm_completion_with_error );
455 struct MLX_DECLARE_STRUCT ( hermonprm_cq_db_record );
456 struct MLX_DECLARE_STRUCT ( hermonprm_eqc );
457 struct MLX_DECLARE_STRUCT ( hermonprm_event_db_register );
458 struct MLX_DECLARE_STRUCT ( hermonprm_event_mask );
459 struct MLX_DECLARE_STRUCT ( hermonprm_event_queue_entry );
460 struct MLX_DECLARE_STRUCT ( hermonprm_hca_command_register );
461 struct MLX_DECLARE_STRUCT ( hermonprm_init_hca );
462 struct MLX_DECLARE_STRUCT ( hermonprm_mad_ifc );
463 struct MLX_DECLARE_STRUCT ( hermonprm_mcg_entry );
464 struct MLX_DECLARE_STRUCT ( hermonprm_mgm_hash );
465 struct MLX_DECLARE_STRUCT ( hermonprm_mod_stat_cfg );
466 struct MLX_DECLARE_STRUCT ( hermonprm_mod_stat_cfg_input_mod );
467 struct MLX_DECLARE_STRUCT ( hermonprm_mpt );
468 struct MLX_DECLARE_STRUCT ( hermonprm_mtt );
469 struct MLX_DECLARE_STRUCT ( hermonprm_port_state_change_event );
470 struct MLX_DECLARE_STRUCT ( hermonprm_port_mgmnt_change_event );
471 struct MLX_DECLARE_STRUCT ( hermonprm_qp_db_record );
472 struct MLX_DECLARE_STRUCT ( hermonprm_qp_ee_state_transitions );
473 struct MLX_DECLARE_STRUCT ( hermonprm_query_dev_cap );
474 struct MLX_DECLARE_STRUCT ( hermonprm_query_fw );
475 struct MLX_DECLARE_STRUCT ( hermonprm_query_port_cap );
476 struct MLX_DECLARE_STRUCT ( hermonprm_queue_pair_ee_context_entry );
477 struct MLX_DECLARE_STRUCT ( hermonprm_scalar_parameter );
478 struct MLX_DECLARE_STRUCT ( hermonprm_sense_port );
479 struct MLX_DECLARE_STRUCT ( hermonprm_send_db_register );
480 struct MLX_DECLARE_STRUCT ( hermonprm_set_port_ib );
481 struct MLX_DECLARE_STRUCT ( hermonprm_set_port_general_context );
482 struct MLX_DECLARE_STRUCT ( hermonprm_set_port_mac_table );
483 struct MLX_DECLARE_STRUCT ( hermonprm_set_port_rqp_calc );
484 struct MLX_DECLARE_STRUCT ( hermonprm_set_port_vlan );
485 struct MLX_DECLARE_STRUCT ( hermonprm_ud_address_vector );
486 struct MLX_DECLARE_STRUCT ( hermonprm_virtual_physical_mapping );
487 struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ctrl_mlx );
488 struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ctrl_send );
489 struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_data_ptr );
490 struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ud );
491 
492 /*
493  * Composite hardware datatypes
494  *
495  */
496 
498  struct hermonprm_scalar_parameter mtt_base_addr;
499  struct hermonprm_scalar_parameter reserved;
500  struct hermonprm_mtt mtt;
501 } __attribute__ (( packed ));
502 
503 #define HERMON_MAX_GATHER 2
504 
506  struct hermonprm_wqe_segment_ctrl_send ctrl;
507  struct hermonprm_wqe_segment_ud ud;
508  struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER];
509 } __attribute__ (( packed ));
510 
512  struct hermonprm_wqe_segment_ctrl_mlx ctrl;
513  struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER];
515 } __attribute__ (( packed ));
516 
518  struct hermonprm_wqe_segment_ctrl_send ctrl;
519  struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER];
520 } __attribute__ (( packed ));
521 
523  struct hermonprm_wqe_segment_ctrl_send ctrl;
524  struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER];
525 } __attribute__ (( packed ));
526 
527 #define HERMON_MAX_SCATTER 2
528 
530  struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_SCATTER];
531 } __attribute__ (( packed ));
532 
534  struct hermonprm_completion_queue_entry normal;
535  struct hermonprm_completion_with_error error;
536 } __attribute__ (( packed ));
537 
539  struct hermonprm_event_queue_entry generic;
540  struct hermonprm_port_state_change_event port_state_change;
541  struct hermonprm_port_mgmnt_change_event port_mgmnt_change;
542 } __attribute__ (( packed ));
543 
545  struct hermonprm_send_db_register send;
546  struct hermonprm_event_db_register event;
548 } __attribute__ (( packed ));
549 
551  struct hermonprm_mad_ifc ifc;
552  union ib_mad mad;
553 } __attribute__ (( packed ));
554 
556  struct hermonprm_set_port_ib ib;
557  struct hermonprm_set_port_general_context general;
558  struct hermonprm_set_port_rqp_calc rqp_calc;
559  struct hermonprm_set_port_mac_table mac_table[128];
560  struct hermonprm_set_port_vlan vlan;
561 } __attribute__ (( packed ));
562 
563 /*
564  * iPXE-specific definitions
565  *
566  */
567 
568 /** Hermon device capabilitiess */
570  /** CMPT entry size */
572  /** Number of reserved QPs */
573  unsigned int reserved_qps;
574  /** QP context entry size */
576  /** Alternate path context entry size */
578  /** Auxiliary context entry size */
580  /** Number of reserved SRQs */
581  unsigned int reserved_srqs;
582  /** SRQ context entry size */
584  /** Number of reserved CQs */
585  unsigned int reserved_cqs;
586  /** CQ context entry size */
588  /** Number of reserved EQs */
589  unsigned int reserved_eqs;
590  /** EQ context entry size */
592  /** Number of reserved MTTs */
593  unsigned int reserved_mtts;
594  /** MTT entry size */
596  /** Number of reserved MRWs */
597  unsigned int reserved_mrws;
598  /** DMPT entry size */
600  /** Number of reserved UARs */
601  unsigned int reserved_uars;
602  /** Number of ports */
603  unsigned int num_ports;
604  /** Dual-port different protocol */
605  int dpdp;
606 };
607 
608 /** Number of cMPT entries of each type */
609 #define HERMON_CMPT_MAX_ENTRIES ( 1 << 24 )
610 
611 /** Hermon ICM memory map entry */
613  /** Offset (virtual address within ICM) */
615  /** Length */
616  size_t len;
617 };
618 
619 /** Discontiguous regions within Hermon ICM */
627 };
628 
629 /** UAR page for doorbell accesses
630  *
631  * Pages 0-127 are reserved for event queue doorbells only, so we use
632  * page 128.
633  */
634 #define HERMON_UAR_NON_EQ_PAGE 128
635 
636 /** Maximum number of allocatable MTT entries
637  *
638  * This is a policy decision, not a device limit.
639  */
640 #define HERMON_MAX_MTTS 64
641 
642 /** A Hermon MTT descriptor */
643 struct hermon_mtt {
644  /** MTT offset */
645  unsigned int mtt_offset;
646  /** Number of pages */
647  unsigned int num_pages;
648  /** MTT base address */
649  unsigned int mtt_base_addr;
650  /** Offset within page */
651  unsigned int page_offset;
652 };
653 
654 /** Alignment of Hermon send work queue entries */
655 #define HERMON_SEND_WQE_ALIGN 128
656 
657 /** A Hermon send work queue entry */
659  struct hermonprm_wqe_segment_ctrl_send ctrl;
665 } __attribute__ (( packed ));
666 
667 /** A Hermon send work queue */
669  /** Number of work queue entries, including headroom
670  *
671  * Hermon requires us to leave unused space within the send
672  * WQ, so we create a send WQ with more entries than are
673  * requested in the create_qp() call.
674  */
675  unsigned int num_wqes;
676  /** Work queue entries */
678  /** Size of work queue */
679  size_t wqe_size;
680  /** Doorbell register */
681  void *doorbell;
682 };
683 
684 /** Alignment of Hermon receive work queue entries */
685 #define HERMON_RECV_WQE_ALIGN 16
686 
687 /** A Hermon receive work queue entry */
691 } __attribute__ (( packed ));
692 
693 /** A Hermon receive work queue */
695  /** Work queue entries */
697  /** Size of work queue */
698  size_t wqe_size;
699  /** GRH buffers (if applicable) */
701  /** Size of GRH buffers */
702  size_t grh_size;
703  /** Doorbell record */
704  struct hermonprm_qp_db_record *doorbell;
705 };
706 
707 /** Number of special queue pairs */
708 #define HERMON_NUM_SPECIAL_QPS 8
709 
710 /** Number of queue pairs reserved for the "special QP" block
711  *
712  * The special QPs must be within a contiguous block aligned on its
713  * own size.
714  */
715 #define HERMON_RSVD_SPECIAL_QPS ( ( HERMON_NUM_SPECIAL_QPS << 1 ) - 1 )
716 
717 /** Maximum number of allocatable queue pairs
718  *
719  * This is a policy decision, not a device limit.
720  */
721 #define HERMON_MAX_QPS 8
722 
723 /** Queue pair number randomisation mask */
724 #define HERMON_QPN_RANDOM_MASK 0xfff000
725 
726 /** Hermon queue pair state */
732 };
733 
734 /** A Hermon queue pair */
736  /** Work queue buffer */
737  void *wqe;
738  /** Size of work queue buffer */
739  size_t wqe_size;
740  /** MTT descriptor */
741  struct hermon_mtt mtt;
742  /** Send work queue */
744  /** Receive work queue */
746  /** Queue state */
748 };
749 
750 /** Maximum number of allocatable completion queues
751  *
752  * This is a policy decision, not a device limit.
753  */
754 #define HERMON_MAX_CQS 8
755 
756 /** A Hermon completion queue */
758  /** Completion queue entries */
760  /** Size of completion queue */
761  size_t cqe_size;
762  /** MTT descriptor */
763  struct hermon_mtt mtt;
764  /** Doorbell record */
765  struct hermonprm_cq_db_record *doorbell;
766 };
767 
768 /** Maximum number of allocatable event queues
769  *
770  * This is a policy decision, not a device limit.
771  */
772 #define HERMON_MAX_EQS 8
773 
774 /** A Hermon event queue */
776  /** Event queue entries */
778  /** Size of event queue */
779  size_t eqe_size;
780  /** MTT descriptor */
781  struct hermon_mtt mtt;
782  /** Event queue number */
783  unsigned long eqn;
784  /** Next event queue entry index */
785  unsigned long next_idx;
786  /** Doorbell register */
787  void *doorbell;
788 };
789 
790 /** Number of event queue entries
791  *
792  * This is a policy decision.
793  */
794 #define HERMON_NUM_EQES 8
795 
796 /** A Hermon resource bitmask */
798 
799 /** Size of a hermon resource bitmask */
800 #define HERMON_BITMASK_SIZE(max_entries) \
801  ( ( (max_entries) + ( 8 * sizeof ( hermon_bitmask_t ) ) - 1 ) / \
802  ( 8 * sizeof ( hermon_bitmask_t ) ) )
803 
804 struct hermon;
805 struct hermon_port;
806 
807 /** A Hermon port type */
809  /** Register port
810  *
811  * @v hermon Hermon device
812  * @v port Hermon port
813  * @ret rc Return status code
814  */
815  int ( * register_dev ) ( struct hermon *hermon,
816  struct hermon_port *port );
817  /** Port state changed
818  *
819  * @v hermon Hermon device
820  * @v port Hermon port
821  * @v link_up Link is up
822  */
823  void ( * state_change ) ( struct hermon *hermon,
824  struct hermon_port *port,
825  int link_up );
826  /** Unregister port
827  *
828  * @v hermon Hermon device
829  * @v port Hermon port
830  */
831  void ( * unregister_dev ) ( struct hermon *hermon,
832  struct hermon_port *port );
833 };
834 
835 /** A Hermon port Ethernet MAC address */
837  struct {
840  } __attribute__ (( packed )) part;
842 };
843 
844 /** A Hermon port */
845 struct hermon_port {
846  /** Infiniband device */
847  struct ib_device *ibdev;
848  /** Network device */
850  /** Ethernet completion queue */
852  /** Ethernet queue pair */
854  /** Ethernet MAC */
856  /** Port type */
858  /** Non-volatile option storage */
859  struct nvo_block nvo;
860 };
861 
862 /** A Hermon device */
863 struct hermon {
864  /** PCI device */
865  struct pci_device *pci;
866  /** PCI configuration registers */
867  void *config;
868  /** PCI user Access Region */
869  void *uar;
870 
871  /** Command toggle */
872  unsigned int toggle;
873  /** Command input mailbox */
874  void *mailbox_in;
875  /** Command output mailbox */
876  void *mailbox_out;
877 
878  /** Device open request counter */
879  unsigned int open_count;
880 
881  /** Firmware size */
882  size_t firmware_len;
883  /** Firmware area in external memory
884  *
885  * This is allocated when first needed, and freed only on
886  * final teardown, in order to avoid memory map changes at
887  * runtime.
888  */
890  /** ICM map */
892  /** ICM size */
893  size_t icm_len;
894  /** ICM AUX size */
895  size_t icm_aux_len;
896  /** ICM area
897  *
898  * This is allocated when first needed, and freed only on
899  * final teardown, in order to avoid memory map changes at
900  * runtime.
901  */
902  void *icm;
903 
904  /** Event queue */
906  /** Last unsolicited link state poll */
907  unsigned long last_poll;
908  /** Unrestricted LKey
909  *
910  * Used to get unrestricted memory access.
911  */
912  unsigned long lkey;
913 
914  /** Completion queue in-use bitmask */
916  /** Queue pair in-use bitmask */
918  /** MTT entry in-use bitmask */
920 
921  /** Device capabilities */
923  /** Special QPN base */
924  unsigned long special_qpn_base;
925  /** QPN base */
926  unsigned long qpn_base;
927 
928  /** Non-volatile storage in PCI VPD */
930 
931  /** Ports */
933 
934  /** BOFM device */
936 };
937 
938 /** Global protection domain */
939 #define HERMON_GLOBAL_PD 0x123456
940 
941 /** Memory key prefix */
942 #define HERMON_MKEY_PREFIX 0x77000000UL
943 
944 /** Link poll interval
945  *
946  * Used when we need to poll for link state (rather than relying upon
947  * receiving an event).
948  */
949 #define HERMON_LINK_POLL_INTERVAL ( TICKS_PER_SEC / 2 )
950 
951 /*
952  * HCA commands
953  *
954  */
955 
956 #define HERMON_HCR_BASE 0x80680
957 #define HERMON_HCR_REG(x) ( HERMON_HCR_BASE + 4 * (x) )
958 #define HERMON_HCR_MAX_WAIT_MS 10000
959 #define HERMON_MBOX_ALIGN 4096
960 #define HERMON_MBOX_SIZE 1024
961 
962 /* HCA command is split into
963  *
964  * bits 11:0 Opcode
965  * bit 12 Input uses mailbox
966  * bit 13 Output uses mailbox
967  * bits 22:14 Input parameter length (in dwords)
968  * bits 31:23 Output parameter length (in dwords)
969  *
970  * Encoding the information in this way allows us to cut out several
971  * parameters to the hermon_command() call.
972  */
973 #define HERMON_HCR_IN_MBOX 0x00001000UL
974 #define HERMON_HCR_OUT_MBOX 0x00002000UL
975 #define HERMON_HCR_OPCODE( _command ) ( (_command) & 0xfff )
976 #define HERMON_HCR_IN_LEN( _command ) ( ( (_command) >> 12 ) & 0x7fc )
977 #define HERMON_HCR_OUT_LEN( _command ) ( ( (_command) >> 21 ) & 0x7fc )
978 
979 /** Build HCR command from component parts */
980 #define HERMON_HCR_INOUT_CMD( _opcode, _in_mbox, _in_len, \
981  _out_mbox, _out_len ) \
982  ( (_opcode) | \
983  ( (_in_mbox) ? HERMON_HCR_IN_MBOX : 0 ) | \
984  ( ( (_in_len) / 4 ) << 14 ) | \
985  ( (_out_mbox) ? HERMON_HCR_OUT_MBOX : 0 ) | \
986  ( ( (_out_len) / 4 ) << 23 ) )
987 
988 #define HERMON_HCR_IN_CMD( _opcode, _in_mbox, _in_len ) \
989  HERMON_HCR_INOUT_CMD ( _opcode, _in_mbox, _in_len, 0, 0 )
990 
991 #define HERMON_HCR_OUT_CMD( _opcode, _out_mbox, _out_len ) \
992  HERMON_HCR_INOUT_CMD ( _opcode, 0, 0, _out_mbox, _out_len )
993 
994 #define HERMON_HCR_VOID_CMD( _opcode ) \
995  HERMON_HCR_INOUT_CMD ( _opcode, 0, 0, 0, 0 )
996 
997 #endif /* _HERMON_H */
pseudo_bit_t no_vlan_prio[0x00003]
Definition: hermon.h:404
size_t eqe_size
Size of event queue.
Definition: hermon.h:779
struct ib_completion_queue * eth_cq
Ethernet completion queue.
Definition: hermon.h:851
pseudo_bit_t reserved[0x00020]
Definition: hermon.h:215
pseudo_bit_t srq_catastrophe[0x00001]
Definition: hermon.h:206
#define __attribute__(x)
Definition: compiler.h:10
struct hermonprm_port_mgmnt_change_event port_mgmnt_change
Definition: hermon.h:541
hermon_queue_pair_state
Hermon queue pair state.
Definition: hermon.h:727
struct hermonprm_mcg_qp_dw_st qp[8]
Definition: hermon.h:157
pseudo_bit_t rcm[0x00001]
Definition: hermon.h:236
struct ib_device * ibdev
Infiniband device.
Definition: hermon.h:847
struct net_device * netdev
Network device.
Definition: hermon.h:849
unsigned short uint16_t
Definition: stdint.h:11
struct hermonprm_set_port_rqp_calc rqp_calc
Definition: hermon.h:558
struct hermon_send_work_queue send
Send work queue.
Definition: hermon.h:743
pseudo_bit_t reserved2[0x00005]
Definition: hermon.h:390
struct hermon_mtt mtt
MTT descriptor.
Definition: hermon.h:763
pseudo_bit_t command_done[0x00001]
Definition: hermon.h:201
pseudo_bit_t pprx[0x00001]
Definition: hermon.h:379
hermon_icm_map_regions
Discontiguous regions within Hermon ICM.
Definition: hermon.h:620
pseudo_bit_t reserved1[0x00004]
Definition: hermon.h:203
pseudo_bit_t vl_cap[0x00004]
Definition: hermon.h:238
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition: hermon.h:519
struct hermonprm_event_db_register event
Definition: hermon.h:546
pseudo_bit_t reserved1[0x00010]
Definition: hermon.h:152
size_t auxc_entry_size
Auxiliary context entry size.
Definition: hermon.h:579
struct hermon_recv_work_queue recv
Receive work queue.
Definition: hermon.h:745
pseudo_bit_t vendor_oui[0x00018]
Definition: hermon.h:349
pseudo_bit_t reserved13[0x00020]
Definition: hermon.h:292
pseudo_bit_t egress_sniff_qpn[0x00018]
Definition: hermon.h:267
void * doorbell
Doorbell register.
Definition: hermon.h:681
An NVS VPD device.
Definition: nvsvpd.h:20
struct hermonprm_send_db_register send
Definition: hermon.h:545
pseudo_bit_t reserved2[0x00009]
Definition: hermon.h:211
struct hermonprm_recv_wqe recv
Definition: hermon.h:689
pseudo_bit_t reserved15[0x00020]
Definition: hermon.h:296
pseudo_bit_t reserved0[0x00004]
Definition: hermon.h:321
size_t cqc_entry_size
CQ context entry size.
Definition: hermon.h:587
pseudo_bit_t reserved0[0x0001d]
Definition: hermon.h:366
pseudo_bit_t log_max_mac[0x00004]
Definition: hermon.h:338
void * mailbox_in
Command input mailbox.
Definition: hermon.h:874
pseudo_bit_t log_max_gid[0x00004]
Definition: hermon.h:328
pseudo_bit_t reserved7[0x00020]
Definition: hermon.h:342
pseudo_bit_t reserved[0x00020]
Definition: hermon.h:221
#define HERMON_SEND_WQE_ALIGN
Alignment of Hermon send work queue entries.
Definition: hermon.h:655
Non-Volatile Storage using Vital Product Data.
pseudo_bit_t ingress_sniff_mode[0x00002]
Definition: hermon.h:272
size_t mtt_entry_size
MTT entry size.
Definition: hermon.h:595
pseudo_bit_t lws[0x00001]
Definition: hermon.h:249
pseudo_bit_t reserved3[0x0000c]
Definition: hermon.h:392
pseudo_bit_t autoneg[0x00001]
Definition: hermon.h:442
pseudo_bit_t reserved12[0x00020]
Definition: hermon.h:290
pseudo_bit_t fexch_error[0x00001]
Definition: hermon.h:202
pseudo_bit_t no_vlan_index[0x00007]
Definition: hermon.h:400
pseudo_bit_t value[0x00020]
Definition: hermon.h:185
pseudo_bit_t transceiver_type[0x00008]
Definition: hermon.h:350
pseudo_bit_t eth_mtu[0x00010]
Definition: hermon.h:319
pseudo_bit_t reserved9[0x00020]
Definition: hermon.h:284
pseudo_bit_t setup_mode[0x00004]
Definition: hermon.h:444
unsigned long last_poll
Last unsolicited link state poll.
Definition: hermon.h:907
pseudo_bit_t reserved9[0x00010]
Definition: hermon.h:352
pseudo_bit_t link_speed_supported[0x00004]
Definition: hermon.h:313
struct MLX_DECLARE_STRUCT(hermonprm_completion_queue_context)
pseudo_bit_t mvc[0x00001]
Definition: hermon.h:246
pseudo_bit_t reserved17[0x00020]
Definition: hermon.h:300
unsigned long long uint64_t
Definition: stdint.h:13
pseudo_bit_t reserved0[0x00020]
Definition: hermon.h:228
unsigned long special_qpn_base
Special QPN base.
Definition: hermon.h:924
pseudo_bit_t mc_by_vlan[0x00001]
Definition: hermon.h:413
pseudo_bit_t rqk[0x00001]
Definition: hermon.h:235
pseudo_bit_t reserved5[0x00004]
Definition: hermon.h:337
pseudo_bit_t intra[0x00001]
Definition: hermon.h:432
pseudo_bit_t reserver[0x00007]
Definition: hermon.h:178
pseudo_bit_t srq_rq_limit[0x00001]
Definition: hermon.h:208
pseudo_bit_t mtu_cap[0x00004]
Definition: hermon.h:240
pseudo_bit_t mg[0x00001]
Definition: hermon.h:244
pseudo_bit_t reserved18[0x00020]
Definition: hermon.h:302
A Hermon send work queue entry.
Definition: hermon.h:658
struct hermon_port_mac::@401 part
pseudo_bit_t reserved5[0x00008]
Definition: hermon.h:398
Hermon ICM memory map entry.
Definition: hermon.h:612
pseudo_bit_t ib_mtu[0x00004]
Definition: hermon.h:320
pseudo_bit_t reserved[0x00008]
Definition: hermon.h:172
pseudo_bit_t reserved16[0x00020]
Definition: hermon.h:298
A Hermon completion queue.
Definition: hermon.h:757
pseudo_bit_t reserved20[0x00020]
Definition: hermon.h:306
unsigned char pseudo_bit_t
Datatype used to represent a bit in the pseudo-structures.
Definition: nx_bitops.h:37
pseudo_bit_t pfctx[0x00008]
Definition: hermon.h:372
pseudo_bit_t reserved11[0x00020]
Definition: hermon.h:288
unsigned int mtt_offset
MTT offset.
Definition: hermon.h:645
union hermonprm_event_entry * eqe
Event queue entries.
Definition: hermon.h:777
struct hermonprm_wqe_segment_ctrl_mlx ctrl
Definition: hermon.h:512
pseudo_bit_t cq_error[0x00001]
Definition: hermon.h:195
pseudo_bit_t v_pptx[0x00001]
Definition: hermon.h:365
unsigned int reserved_cqs
Number of reserved CQs.
Definition: hermon.h:585
size_t cqe_size
Size of completion queue.
Definition: hermon.h:761
pseudo_bit_t wq_invalid_request[0x00001]
Definition: hermon.h:204
struct hermonprm_qp_db_record * doorbell
Doorbell record.
Definition: hermon.h:704
enum hermon_queue_pair_state state
Queue state.
Definition: hermon.h:747
pseudo_bit_t reserved8[0x00010]
Definition: hermon.h:345
struct hermonprm_set_port_general_context general
Definition: hermon.h:557
A Hermon port type.
Definition: hermon.h:808
pseudo_bit_t mac_miss_index[0x00008]
Definition: hermon.h:394
FILE_LICENCE(GPL2_OR_LATER)
union hermon_port_mac eth_mac
Ethernet MAC.
Definition: hermon.h:855
void(* unregister_dev)(struct hermon *hermon, struct hermon_port *port)
Unregister port.
Definition: hermon.h:831
pseudo_bit_t n_p[0x00002]
Definition: hermon.h:387
pseudo_bit_t reserved7[0x0001d]
Definition: hermon.h:405
pseudo_bit_t system_image_guid_l[0x00020]
Definition: hermon.h:257
struct bofm_device bofm
BOFM device.
Definition: hermon.h:935
pseudo_bit_t arm_ci[0x00018]
Definition: hermon.h:164
pseudo_bit_t wq_catastrophe[0x00001]
Definition: hermon.h:196
pseudo_bit_t reserved3[0x00007]
Definition: hermon.h:373
A Hermon port Ethernet MAC address.
Definition: hermon.h:836
pseudo_bit_t qpc_catastrophe[0x00001]
Definition: hermon.h:197
Definition: hermon.h:533
union hermon_recv_wqe * wqe
Work queue entries.
Definition: hermon.h:696
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition: hermon.h:524
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition: hermon.h:523
struct hermonprm_mcg_hdr_st hdr
Definition: hermon.h:156
pseudo_bit_t g0[0x00001]
Definition: hermon.h:241
An Infiniband device.
Definition: infiniband.h:398
pseudo_bit_t reserved9[0x00005]
Definition: hermon.h:412
struct hermon_mtt mtt
MTT descriptor.
Definition: hermon.h:781
pseudo_bit_t reserved0[0x00020]
Definition: hermon.h:149
pseudo_bit_t completion[0x00001]
Definition: hermon.h:191
struct hermonprm_scalar_parameter reserved
Definition: hermon.h:499
unsigned int mtt_base_addr
MTT base address.
Definition: hermon.h:649
uint32_t l
Definition: hermon.h:839
Mellanox bit operations.
hermon_bitmask_t cq_inuse[HERMON_BITMASK_SIZE(HERMON_MAX_CQS)]
Completion queue in-use bitmask.
Definition: hermon.h:915
unsigned int num_ports
Number of ports.
Definition: hermon.h:603
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition: hermon.h:513
u8 port
Port number.
Definition: CIB_PRM.h:31
void * mailbox_out
Command output mailbox.
Definition: hermon.h:876
pseudo_bit_t node_guid_h[0x00020]
Definition: hermon.h:263
uint32_t hermon_bitmask_t
A Hermon resource bitmask.
Definition: hermon.h:797
IBM BladeCenter Open Fabric Manager (BOFM)
pseudo_bit_t ci[0x00018]
Definition: hermon.h:177
size_t wqe_size
Size of work queue buffer.
Definition: hermon.h:739
pseudo_bit_t reserved5[0x00007]
Definition: hermon.h:378
struct hermonprm_eth_send_wqe eth
Definition: hermon.h:663
struct hermonprm_mad_ifc ifc
Definition: hermon.h:551
pseudo_bit_t reserved10[0x00020]
Definition: hermon.h:416
struct hermonprm_rc_send_wqe rc
Definition: hermon.h:662
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition: hermon.h:506
uint16_t h
Definition: hermon.h:838
uint64_t offset
Offset (virtual address within ICM)
Definition: hermon.h:614
struct hermonprm_event_queue_entry generic
Definition: hermon.h:539
pseudo_bit_t srq_last_wqe[0x00001]
Definition: hermon.h:207
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition: hermon.h:659
size_t wqe_size
Size of work queue.
Definition: hermon.h:698
pseudo_bit_t system_image_guid_h[0x00020]
Definition: hermon.h:255
pseudo_bit_t reserved21[0x00020]
Definition: hermon.h:308
void * wqe
Work queue buffer.
Definition: hermon.h:737
pseudo_bit_t reserved8[0x00020]
Definition: hermon.h:282
pseudo_bit_t reserved1[0x00006]
Definition: hermon.h:388
pseudo_bit_t ng[0x00001]
Definition: hermon.h:242
pseudo_bit_t reserved0[0x0000f]
Definition: hermon.h:422
struct hermonprm_port_state_change_st data
Definition: hermon.h:217
pseudo_bit_t pfcrx[0x00008]
Definition: hermon.h:377
pseudo_bit_t reserved10[0x000c0]
Definition: hermon.h:359
An Infiniband Global Route Header.
Definition: ib_packet.h:89
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition: hermon.h:518
pseudo_bit_t reserved6[0x00008]
Definition: hermon.h:401
pseudo_bit_t sig[0x00001]
Definition: hermon.h:243
pseudo_bit_t reserved6[0x00010]
Definition: hermon.h:340
pseudo_bit_t reserved3[0x00004]
Definition: hermon.h:332
pseudo_bit_t egress_sniff_mode[0x00002]
Definition: hermon.h:268
struct hermon_port_type * type
Port type.
Definition: hermon.h:857
A Hermon receive work queue.
Definition: hermon.h:694
void * firmware_area
Firmware area in external memory.
Definition: hermon.h:889
pseudo_bit_t max_gid[0x00010]
Definition: hermon.h:275
pseudo_bit_t portnum[0x00008]
Definition: hermon.h:439
struct hermonprm_scalar_parameter mtt_base_addr
Definition: hermon.h:498
struct hermonprm_completion_with_error error
Definition: hermon.h:535
pseudo_bit_t v[0x00001]
Definition: hermon.h:423
pseudo_bit_t cmd[0x00003]
Definition: hermon.h:165
pseudo_bit_t port_type[0x00002]
Definition: hermon.h:230
uint8_t force_align[HERMON_SEND_WQE_ALIGN]
Definition: hermon.h:664
pseudo_bit_t v_pprx[0x00001]
Definition: hermon.h:364
Non-volatile stored options.
pseudo_bit_t cmd_sn[0x00002]
Definition: hermon.h:167
A block of non-volatile stored options.
Definition: nvo.h:22
unsigned int reserved_qps
Number of reserved QPs.
Definition: hermon.h:573
#define HERMON_RECV_WQE_ALIGN
Alignment of Hermon receive work queue entries.
Definition: hermon.h:685
pseudo_bit_t reserved19[0x00020]
Definition: hermon.h:304
pseudo_bit_t value_hi[0x00020]
Definition: hermon.h:183
struct hermon_event_queue eq
Event queue.
Definition: hermon.h:905
pseudo_bit_t ib_link_speed[0x00004]
Definition: hermon.h:333
#define HERMON_MAX_GATHER
Definition: hermon.h:503
unsigned int num_pages
Number of pages.
Definition: hermon.h:647
pseudo_bit_t intra_miss[0x00001]
Definition: hermon.h:399
unsigned int reserved_mtts
Number of reserved MTTs.
Definition: hermon.h:593
A PCI device.
Definition: pci.h:210
struct pci_device * pci
PCI device.
Definition: hermon.h:865
pseudo_bit_t transceiver_code_lo[0x00020]
Definition: hermon.h:357
pseudo_bit_t reserved14[0x00020]
Definition: hermon.h:294
size_t firmware_len
Firmware size.
Definition: hermon.h:882
size_t icm_len
ICM size.
Definition: hermon.h:893
Definition: hermon.h:538
A network device.
Definition: netdevice.h:352
pseudo_bit_t mac_h[0x00010]
Definition: hermon.h:421
pseudo_bit_t ingress_sniff_qpn[0x00018]
Definition: hermon.h:271
#define HERMON_MAX_PORTS
Definition: hermon.h:26
A BOFM device.
Definition: bofm.h:286
pseudo_bit_t reserved0[0x00020]
Definition: hermon.h:189
size_t len
Length.
Definition: hermon.h:616
union hermon_send_wqe * wqe
Work queue entries.
Definition: hermon.h:677
An Infiniband Completion Queue.
Definition: infiniband.h:224
struct ib_queue_pair * eth_qp
Ethernet queue pair.
Definition: hermon.h:853
#define HERMON_MAX_SCATTER
Definition: hermon.h:527
void * uar
PCI user Access Region.
Definition: hermon.h:869
pseudo_bit_t lss[0x00001]
Definition: hermon.h:250
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_SCATTER]
Definition: hermon.h:530
pseudo_bit_t vlan_id[0x0000c]
Definition: hermon.h:430
unsigned char uint8_t
Definition: stdint.h:10
pseudo_bit_t transceiver_code_hi[0x00020]
Definition: hermon.h:355
pseudo_bit_t mac_47_32[0x00010]
Definition: hermon.h:344
struct hermonprm_wqe_segment_ud ud
Definition: hermon.h:507
pseudo_bit_t internal_error[0x00001]
Definition: hermon.h:199
unsigned int reserved_eqs
Number of reserved EQs.
Definition: hermon.h:589
pseudo_bit_t xnum[0x00004]
Definition: hermon.h:440
int dpdp
Dual-port different protocol.
Definition: hermon.h:605
pseudo_bit_t max_vl_ib[0x00004]
Definition: hermon.h:336
pseudo_bit_t reserved22[0x00020]
Definition: hermon.h:310
pseudo_bit_t clientreregister[0x00001]
Definition: hermon.h:210
size_t icm_aux_len
ICM AUX size.
Definition: hermon.h:895
struct hermon_dev_cap cap
Device capabilities.
Definition: hermon.h:922
size_t eqc_entry_size
EQ context entry size.
Definition: hermon.h:591
size_t wqe_size
Size of work queue.
Definition: hermon.h:679
struct hermonprm_mtt mtt
Definition: hermon.h:500
pseudo_bit_t max_pkey[0x00010]
Definition: hermon.h:276
#define ETH_ALEN
Definition: if_ether.h:8
pseudo_bit_t reserved8[0x00007]
Definition: hermon.h:408
pseudo_bit_t v_mtu[0x00001]
Definition: hermon.h:363
pseudo_bit_t reserved23[0x00018]
Definition: hermon.h:314
unsigned int uint32_t
Definition: stdint.h:12
struct hermonprm_port_state_change_event port_state_change
Definition: hermon.h:540
pseudo_bit_t eth_link_speed[0x00004]
Definition: hermon.h:331
pseudo_bit_t reserved2[0x00002]
Definition: hermon.h:168
pseudo_bit_t wq_access_violation[0x00001]
Definition: hermon.h:205
pseudo_bit_t reserved10[0x00020]
Definition: hermon.h:286
struct hermon_port port[HERMON_MAX_PORTS]
Ports.
Definition: hermon.h:932
pseudo_bit_t offset[0x00008]
Definition: hermon.h:438
pseudo_bit_t reserved4[0x00006]
Definition: hermon.h:269
pseudo_bit_t reserved1[0x00010]
Definition: hermon.h:369
pseudo_bit_t linkspeed[0x00003]
Definition: hermon.h:441
pseudo_bit_t mac_31_0[0x00020]
Definition: hermon.h:347
#define HERMON_MAX_CQS
Maximum number of allocatable completion queues.
Definition: hermon.h:754
pseudo_bit_t reserved4[0x00010]
Definition: hermon.h:376
An Infiniband Queue Pair.
Definition: infiniband.h:157
struct hermonprm_mlx_send_wqe mlx
Definition: hermon.h:661
pseudo_bit_t reserved0[0x00012]
Definition: hermon.h:431
void * config
PCI configuration registers.
Definition: hermon.h:867
pseudo_bit_t reserved5[0x00006]
Definition: hermon.h:273
pseudo_bit_t reserved0[0x00008]
Definition: hermon.h:385
unsigned int toggle
Command toggle.
Definition: hermon.h:872
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition: hermon.h:508
pseudo_bit_t pptx[0x00001]
Definition: hermon.h:374
Hermon device capabilitiess.
Definition: hermon.h:569
pseudo_bit_t reserved4[0x00018]
Definition: hermon.h:395
pseudo_bit_t reserved3[0x00003]
Definition: hermon.h:251
unsigned long qpn_base
QPN base.
Definition: hermon.h:926
pseudo_bit_t guid0_l[0x00020]
Definition: hermon.h:261
void * doorbell
Doorbell register.
Definition: hermon.h:787
void(* state_change)(struct hermon *hermon, struct hermon_port *port, int link_up)
Port state changed.
Definition: hermon.h:823
size_t srqc_entry_size
SRQ context entry size.
Definition: hermon.h:583
pseudo_bit_t reserved[0x00004]
Definition: hermon.h:443
pseudo_bit_t mtu[0x00010]
Definition: hermon.h:368
pseudo_bit_t v[0x00001]
Definition: hermon.h:433
#define HERMON_BITMASK_SIZE(max_entries)
Size of a hermon resource bitmask.
Definition: hermon.h:800
pseudo_bit_t wavelength[0x00010]
Definition: hermon.h:353
pseudo_bit_t reserved0[0x00002]
Definition: hermon.h:237
struct hermon_icm_map icm_map[HERMON_ICM_NUM_REGIONS]
ICM map.
Definition: hermon.h:891
#define HERMON_MAX_MTTS
Maximum number of allocatable MTT entries.
Definition: hermon.h:640
pseudo_bit_t qn[0x00018]
Definition: hermon.h:173
pseudo_bit_t node_guid_l[0x00020]
Definition: hermon.h:265
pseudo_bit_t guid0_h[0x00020]
Definition: hermon.h:259
struct hermonprm_cq_db_record * doorbell
Doorbell record.
Definition: hermon.h:765
pseudo_bit_t mac_l[0x00020]
Definition: hermon.h:425
pseudo_bit_t mmc[0x00001]
Definition: hermon.h:247
union hermonprm_completion_entry * cqe
Completion queue entries.
Definition: hermon.h:759
Infiniband packet format.
unsigned int page_offset
Offset within page.
Definition: hermon.h:651
struct hermon_mtt mtt
MTT descriptor.
Definition: hermon.h:741
A Hermon port.
Definition: hermon.h:845
struct hermonprm_set_port_mac_table mac_table[128]
Definition: hermon.h:559
pseudo_bit_t reserved7[0x00020]
Definition: hermon.h:280
hermon_bitmask_t mtt_inuse[HERMON_BITMASK_SIZE(HERMON_MAX_MTTS)]
MTT entry in-use bitmask.
Definition: hermon.h:919
A Hermon receive work queue entry.
Definition: hermon.h:688
pseudo_bit_t hash[0x00010]
Definition: hermon.h:151
pseudo_bit_t capability_mask[0x00020]
Definition: hermon.h:253
struct hermonprm_ud_send_wqe ud
Definition: hermon.h:660
struct hermonprm_completion_queue_entry normal
Definition: hermon.h:534
pseudo_bit_t mc_promisc_mode[0x00002]
Definition: hermon.h:414
pseudo_bit_t eth[0x00001]
Definition: hermon.h:323
struct nvo_block nvo
Non-volatile option storage.
Definition: hermon.h:859
pseudo_bit_t reserved2[0x00010]
Definition: hermon.h:371
pseudo_bit_t reserved1[0x00004]
Definition: hermon.h:239
pseudo_bit_t vlan_miss_index[0x00007]
Definition: hermon.h:397
hermon_bitmask_t qp_inuse[HERMON_BITMASK_SIZE(HERMON_MAX_QPS)]
Queue pair in-use bitmask.
Definition: hermon.h:917
pseudo_bit_t reserved0[0x00018]
Definition: hermon.h:224
pseudo_bit_t reserved2[0x00004]
Definition: hermon.h:330
A management datagram.
Definition: ib_mad.h:610
pseudo_bit_t n_m[0x00004]
Definition: hermon.h:391
size_t dmpt_entry_size
DMPT entry size.
Definition: hermon.h:599
pseudo_bit_t path_migration_failed[0x00001]
Definition: hermon.h:198
pseudo_bit_t reserved2[0x00004]
Definition: hermon.h:248
pseudo_bit_t port_state_change[0x00001]
Definition: hermon.h:200
pseudo_bit_t intra_no_vlan[0x00001]
Definition: hermon.h:402
A Hermon device.
Definition: hermon.h:863
pseudo_bit_t path_migration_succeeded[0x00001]
Definition: hermon.h:192
pseudo_bit_t mp[0x00001]
Definition: hermon.h:245
A Hermon send work queue.
Definition: hermon.h:668
struct nvs_vpd_device nvsvpd
Non-volatile storage in PCI VPD.
Definition: hermon.h:929
A GPIO pin.
Definition: gpio.h:18
size_t cmpt_entry_size
CMPT entry size.
Definition: hermon.h:571
void * icm
ICM area.
Definition: hermon.h:902
A Hermon queue pair.
Definition: hermon.h:735
pseudo_bit_t base_qpn[0x00018]
Definition: hermon.h:384
unsigned long lkey
Unrestricted LKey.
Definition: hermon.h:912
pseudo_bit_t reserved1[0x0001e]
Definition: hermon.h:231
pseudo_bit_t update_ci[0x00018]
Definition: hermon.h:161
unsigned long next_idx
Next event queue entry index.
Definition: hermon.h:785
A Hermon MTT descriptor.
Definition: hermon.h:643
union ib_mad mad
Definition: hermon.h:552
struct hermonprm_set_port_ib ib
Definition: hermon.h:556
pseudo_bit_t reserved6[0x00020]
Definition: hermon.h:278
uint8_t raw[ETH_ALEN]
Definition: hermon.h:841
unsigned int reserved_uars
Number of reserved UARs.
Definition: hermon.h:601
uint8_t headers[IB_MAX_HEADER_SIZE]
Definition: hermon.h:514
pseudo_bit_t ib_port_width[0x00004]
Definition: hermon.h:329
pseudo_bit_t reserved1[0x00005]
Definition: hermon.h:324
pseudo_bit_t link_width_supported[0x00004]
Definition: hermon.h:312
struct hermonprm_set_port_vlan vlan
Definition: hermon.h:560
pseudo_bit_t n_v[0x00003]
Definition: hermon.h:389
unsigned int reserved_mrws
Number of reserved MRWs.
Definition: hermon.h:597
unsigned long eqn
Event queue number.
Definition: hermon.h:783
pseudo_bit_t promisc_qpn[0x00018]
Definition: hermon.h:407
pseudo_bit_t send_queue_drained[0x00001]
Definition: hermon.h:194
pseudo_bit_t a[0x00001]
Definition: hermon.h:179
Definition: hermon.h:155
size_t altc_entry_size
Alternate path context entry size.
Definition: hermon.h:577
uint8_t force_align[HERMON_RECV_WQE_ALIGN]
Definition: hermon.h:690
int(* register_dev)(struct hermon *hermon, struct hermon_port *port)
Register port.
Definition: hermon.h:815
pseudo_bit_t link_state[0x00001]
Definition: hermon.h:325
pseudo_bit_t log_max_pkey[0x00004]
Definition: hermon.h:327
unsigned int open_count
Device open request counter.
Definition: hermon.h:879
pseudo_bit_t def_mcast_qpn[0x00018]
Definition: hermon.h:411
#define HERMON_MAX_QPS
Maximum number of allocatable queue pairs.
Definition: hermon.h:721
unsigned long int dword
Definition: smc9000.h:40
#define IB_MAX_HEADER_SIZE
Maximum size required for IB headers.
Definition: ib_packet.h:156
pseudo_bit_t en_uc_promisc[0x00001]
Definition: hermon.h:409
pseudo_bit_t ib[0x00001]
Definition: hermon.h:322
size_t qpc_entry_size
QP context entry size.
Definition: hermon.h:575
unsigned int reserved_srqs
Number of reserved SRQs.
Definition: hermon.h:581
unsigned int num_wqes
Number of work queue entries, including headroom.
Definition: hermon.h:675
pseudo_bit_t reserved4[0x00004]
Definition: hermon.h:334
struct ib_global_route_header * grh
GRH buffers (if applicable)
Definition: hermon.h:700
pseudo_bit_t log_max_vlan[0x00004]
Definition: hermon.h:339
pseudo_bit_t communication_established[0x00001]
Definition: hermon.h:193
size_t grh_size
Size of GRH buffers.
Definition: hermon.h:702
A Hermon event queue.
Definition: hermon.h:775
pseudo_bit_t port[0x00008]
Definition: hermon.h:223
pseudo_bit_t reserved1[0x00001]
Definition: hermon.h:166
pseudo_bit_t reserved0[0x00008]
Definition: hermon.h:162