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
10FILE_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/* -------------- */
153} __attribute__ (( packed ));
154
159
163/* -------------- */
169} __attribute__ (( packed ));
170
175
181
184/* -------------- */
186} __attribute__ (( packed ));
187
213
219
222/* -------------- */
225} __attribute__ (( packed ));
226
229/* -------------- */
232} __attribute__ (( packed ));
233
241 pseudo_bit_t g0[0x00001];
242 pseudo_bit_t ng[0x00001];
244 pseudo_bit_t mg[0x00001];
245 pseudo_bit_t mp[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];
326/* -------------- */
335/* -------------- */
341/* -------------- */
343/* -------------- */
346/* -------------- */
348/* -------------- */
351/* -------------- */
354/* -------------- */
356/* -------------- */
358/* -------------- */
360} __attribute__ (( packed ));
361
367/* -------------- */
370/* -------------- */
375/* -------------- */
380/* -------------- */
381} __attribute__ (( packed ));
382
386/* -------------- */
393/* -------------- */
396/* -------------- */
403/* -------------- */
406/* -------------- */
410/* -------------- */
415/* -------------- */
417/* -------------- */
418} __attribute__ (( packed ));
419
423 pseudo_bit_t v[0x00001];
424/* -------------- */
426/* -------------- */
427} __attribute__ (( packed ));
428
433 pseudo_bit_t v[0x00001];
434/* -------------- */
435} __attribute__ (( packed ));
436
446
447/*
448 * Wrapper structures for hardware datatypes
449 *
450 */
451
452struct MLX_DECLARE_STRUCT ( hermonprm_completion_queue_context );
453struct MLX_DECLARE_STRUCT ( hermonprm_completion_queue_entry );
454struct MLX_DECLARE_STRUCT ( hermonprm_completion_with_error );
455struct MLX_DECLARE_STRUCT ( hermonprm_cq_db_record );
456struct MLX_DECLARE_STRUCT ( hermonprm_eqc );
457struct MLX_DECLARE_STRUCT ( hermonprm_event_db_register );
458struct MLX_DECLARE_STRUCT ( hermonprm_event_mask );
459struct MLX_DECLARE_STRUCT ( hermonprm_event_queue_entry );
460struct MLX_DECLARE_STRUCT ( hermonprm_hca_command_register );
461struct MLX_DECLARE_STRUCT ( hermonprm_init_hca );
462struct MLX_DECLARE_STRUCT ( hermonprm_mad_ifc );
463struct MLX_DECLARE_STRUCT ( hermonprm_mcg_entry );
464struct MLX_DECLARE_STRUCT ( hermonprm_mgm_hash );
465struct MLX_DECLARE_STRUCT ( hermonprm_mod_stat_cfg );
466struct MLX_DECLARE_STRUCT ( hermonprm_mod_stat_cfg_input_mod );
467struct MLX_DECLARE_STRUCT ( hermonprm_mpt );
468struct MLX_DECLARE_STRUCT ( hermonprm_mtt );
469struct MLX_DECLARE_STRUCT ( hermonprm_port_state_change_event );
470struct MLX_DECLARE_STRUCT ( hermonprm_port_mgmnt_change_event );
471struct MLX_DECLARE_STRUCT ( hermonprm_qp_db_record );
472struct MLX_DECLARE_STRUCT ( hermonprm_qp_ee_state_transitions );
473struct MLX_DECLARE_STRUCT ( hermonprm_query_dev_cap );
474struct MLX_DECLARE_STRUCT ( hermonprm_query_fw );
475struct MLX_DECLARE_STRUCT ( hermonprm_query_port_cap );
476struct MLX_DECLARE_STRUCT ( hermonprm_queue_pair_ee_context_entry );
477struct MLX_DECLARE_STRUCT ( hermonprm_scalar_parameter );
478struct MLX_DECLARE_STRUCT ( hermonprm_sense_port );
479struct MLX_DECLARE_STRUCT ( hermonprm_send_db_register );
480struct MLX_DECLARE_STRUCT ( hermonprm_set_port_ib );
481struct MLX_DECLARE_STRUCT ( hermonprm_set_port_general_context );
482struct MLX_DECLARE_STRUCT ( hermonprm_set_port_mac_table );
483struct MLX_DECLARE_STRUCT ( hermonprm_set_port_rqp_calc );
484struct MLX_DECLARE_STRUCT ( hermonprm_set_port_vlan );
485struct MLX_DECLARE_STRUCT ( hermonprm_ud_address_vector );
486struct MLX_DECLARE_STRUCT ( hermonprm_virtual_physical_mapping );
487struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ctrl_mlx );
488struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_ctrl_send );
489struct MLX_DECLARE_STRUCT ( hermonprm_wqe_segment_data_ptr );
490struct 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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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
804struct hermon;
805struct 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 */
843
844/** A Hermon port */
846 /** Infiniband device */
848 /** Network device */
850 /** Ethernet completion queue */
852 /** Ethernet queue pair */
854 /** Ethernet MAC */
856 /** Port type */
858 /** Non-volatile option storage */
860};
861
862/** A Hermon device */
863struct hermon {
864 /** PCI device */
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 */
875 /** Command output mailbox */
877
878 /** Device open request counter */
879 unsigned int open_count;
880
881 /** Firmware size */
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 */
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 */
u8 port
Port number.
Definition CIB_PRM.h:3
unsigned short uint16_t
Definition stdint.h:11
unsigned int uint32_t
Definition stdint.h:12
unsigned long long uint64_t
Definition stdint.h:13
unsigned char uint8_t
Definition stdint.h:10
IBM BladeCenter Open Fabric Manager (BOFM)
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define HERMON_RECV_WQE_ALIGN
Alignment of Hermon receive work queue entries.
Definition hermon.h:685
#define HERMON_MAX_PORTS
Definition hermon.h:26
#define HERMON_BITMASK_SIZE(max_entries)
Size of a hermon resource bitmask.
Definition hermon.h:800
hermon_queue_pair_state
Hermon queue pair state.
Definition hermon.h:727
@ HERMON_QP_ST_RST
Definition hermon.h:728
@ HERMON_QP_ST_INIT
Definition hermon.h:729
@ HERMON_QP_ST_RTR
Definition hermon.h:730
@ HERMON_QP_ST_RTS
Definition hermon.h:731
#define HERMON_MAX_SCATTER
Definition hermon.h:527
uint32_t hermon_bitmask_t
A Hermon resource bitmask.
Definition hermon.h:797
hermon_icm_map_regions
Discontiguous regions within Hermon ICM.
Definition hermon.h:620
@ HERMON_ICM_SRQ_CMPT
Definition hermon.h:622
@ HERMON_ICM_QP_CMPT
Definition hermon.h:621
@ HERMON_ICM_CQ_CMPT
Definition hermon.h:623
@ HERMON_ICM_OTHER
Definition hermon.h:625
@ HERMON_ICM_NUM_REGIONS
Definition hermon.h:626
@ HERMON_ICM_EQ_CMPT
Definition hermon.h:624
#define HERMON_MAX_CQS
Maximum number of allocatable completion queues.
Definition hermon.h:754
#define HERMON_MAX_GATHER
Definition hermon.h:503
#define HERMON_SEND_WQE_ALIGN
Alignment of Hermon send work queue entries.
Definition hermon.h:655
#define HERMON_MAX_MTTS
Maximum number of allocatable MTT entries.
Definition hermon.h:640
#define HERMON_MAX_QPS
Maximum number of allocatable queue pairs.
Definition hermon.h:721
Infiniband packet format.
#define IB_MAX_HEADER_SIZE
Maximum size required for IB headers.
Definition ib_packet.h:157
#define ETH_ALEN
Definition if_ether.h:9
#define __attribute__(x)
Definition compiler.h:10
Mellanox bit operations.
#define MLX_DECLARE_STRUCT(_structure)
Wrapper structure for pseudo_bit_t structures.
Definition mlx_bitops.h:44
Non-volatile stored options.
Non-Volatile Storage using Vital Product Data.
unsigned char pseudo_bit_t
Datatype used to represent a bit in the pseudo-structures.
Definition nx_bitops.h:37
A BOFM device.
Definition bofm.h:286
A Hermon completion queue.
Definition hermon.h:757
struct hermon_mtt mtt
MTT descriptor.
Definition hermon.h:763
union hermonprm_completion_entry * cqe
Completion queue entries.
Definition hermon.h:759
struct hermonprm_cq_db_record * doorbell
Doorbell record.
Definition hermon.h:765
size_t cqe_size
Size of completion queue.
Definition hermon.h:761
Hermon device capabilitiess.
Definition hermon.h:569
unsigned int num_ports
Number of ports.
Definition hermon.h:603
size_t dmpt_entry_size
DMPT entry size.
Definition hermon.h:599
size_t mtt_entry_size
MTT entry size.
Definition hermon.h:595
size_t altc_entry_size
Alternate path context entry size.
Definition hermon.h:577
size_t auxc_entry_size
Auxiliary context entry size.
Definition hermon.h:579
unsigned int reserved_mrws
Number of reserved MRWs.
Definition hermon.h:597
unsigned int reserved_mtts
Number of reserved MTTs.
Definition hermon.h:593
unsigned int reserved_eqs
Number of reserved EQs.
Definition hermon.h:589
int dpdp
Dual-port different protocol.
Definition hermon.h:605
unsigned int reserved_cqs
Number of reserved CQs.
Definition hermon.h:585
size_t cmpt_entry_size
CMPT entry size.
Definition hermon.h:571
size_t srqc_entry_size
SRQ context entry size.
Definition hermon.h:583
size_t eqc_entry_size
EQ context entry size.
Definition hermon.h:591
unsigned int reserved_qps
Number of reserved QPs.
Definition hermon.h:573
size_t qpc_entry_size
QP context entry size.
Definition hermon.h:575
size_t cqc_entry_size
CQ context entry size.
Definition hermon.h:587
unsigned int reserved_srqs
Number of reserved SRQs.
Definition hermon.h:581
unsigned int reserved_uars
Number of reserved UARs.
Definition hermon.h:601
A Hermon event queue.
Definition hermon.h:775
unsigned long eqn
Event queue number.
Definition hermon.h:783
size_t eqe_size
Size of event queue.
Definition hermon.h:779
union hermonprm_event_entry * eqe
Event queue entries.
Definition hermon.h:777
struct hermon_mtt mtt
MTT descriptor.
Definition hermon.h:781
unsigned long next_idx
Next event queue entry index.
Definition hermon.h:785
void * doorbell
Doorbell register.
Definition hermon.h:787
Hermon ICM memory map entry.
Definition hermon.h:612
size_t len
Length.
Definition hermon.h:616
uint64_t offset
Offset (virtual address within ICM)
Definition hermon.h:614
A Hermon MTT descriptor.
Definition hermon.h:643
unsigned int page_offset
Offset within page.
Definition hermon.h:651
unsigned int mtt_base_addr
MTT base address.
Definition hermon.h:649
unsigned int num_pages
Number of pages.
Definition hermon.h:647
unsigned int mtt_offset
MTT offset.
Definition hermon.h:645
A Hermon port type.
Definition hermon.h:808
int(* register_dev)(struct hermon *hermon, struct hermon_port *port)
Register port.
Definition hermon.h:815
void(* state_change)(struct hermon *hermon, struct hermon_port *port, int link_up)
Port state changed.
Definition hermon.h:823
void(* unregister_dev)(struct hermon *hermon, struct hermon_port *port)
Unregister port.
Definition hermon.h:831
A Hermon port.
Definition hermon.h:845
struct nvo_block nvo
Non-volatile option storage.
Definition hermon.h:859
struct ib_completion_queue * eth_cq
Ethernet completion queue.
Definition hermon.h:851
struct ib_queue_pair * eth_qp
Ethernet queue pair.
Definition hermon.h:853
struct ib_device * ibdev
Infiniband device.
Definition hermon.h:847
union hermon_port_mac eth_mac
Ethernet MAC.
Definition hermon.h:855
struct hermon_port_type * type
Port type.
Definition hermon.h:857
struct net_device * netdev
Network device.
Definition hermon.h:849
A Hermon queue pair.
Definition hermon.h:735
struct hermon_recv_work_queue recv
Receive work queue.
Definition hermon.h:745
size_t wqe_size
Size of work queue buffer.
Definition hermon.h:739
enum hermon_queue_pair_state state
Queue state.
Definition hermon.h:747
struct hermon_mtt mtt
MTT descriptor.
Definition hermon.h:741
struct hermon_send_work_queue send
Send work queue.
Definition hermon.h:743
void * wqe
Work queue buffer.
Definition hermon.h:737
A Hermon receive work queue.
Definition hermon.h:694
size_t grh_size
Size of GRH buffers.
Definition hermon.h:702
size_t wqe_size
Size of work queue.
Definition hermon.h:698
struct hermonprm_qp_db_record * doorbell
Doorbell record.
Definition hermon.h:704
struct ib_global_route_header * grh
GRH buffers (if applicable)
Definition hermon.h:700
union hermon_recv_wqe * wqe
Work queue entries.
Definition hermon.h:696
A Hermon send work queue.
Definition hermon.h:668
void * doorbell
Doorbell register.
Definition hermon.h:681
size_t wqe_size
Size of work queue.
Definition hermon.h:679
unsigned int num_wqes
Number of work queue entries, including headroom.
Definition hermon.h:675
union hermon_send_wqe * wqe
Work queue entries.
Definition hermon.h:677
A Hermon device.
Definition hermon.h:863
struct nvs_vpd_device nvsvpd
Non-volatile storage in PCI VPD.
Definition hermon.h:929
struct bofm_device bofm
BOFM device.
Definition hermon.h:935
size_t firmware_len
Firmware size.
Definition hermon.h:882
struct pci_device * pci
PCI device.
Definition hermon.h:865
hermon_bitmask_t qp_inuse[HERMON_BITMASK_SIZE(HERMON_MAX_QPS)]
Queue pair in-use bitmask.
Definition hermon.h:917
struct hermon_event_queue eq
Event queue.
Definition hermon.h:905
unsigned int open_count
Device open request counter.
Definition hermon.h:879
void * mailbox_in
Command input mailbox.
Definition hermon.h:874
void * config
PCI configuration registers.
Definition hermon.h:867
void * firmware_area
Firmware area in external memory.
Definition hermon.h:889
struct hermon_dev_cap cap
Device capabilities.
Definition hermon.h:922
unsigned long qpn_base
QPN base.
Definition hermon.h:926
unsigned int toggle
Command toggle.
Definition hermon.h:872
void * icm
ICM area.
Definition hermon.h:902
void * mailbox_out
Command output mailbox.
Definition hermon.h:876
struct hermon_icm_map icm_map[HERMON_ICM_NUM_REGIONS]
ICM map.
Definition hermon.h:891
struct hermon_port port[HERMON_MAX_PORTS]
Ports.
Definition hermon.h:932
size_t icm_len
ICM size.
Definition hermon.h:893
size_t icm_aux_len
ICM AUX size.
Definition hermon.h:895
hermon_bitmask_t cq_inuse[HERMON_BITMASK_SIZE(HERMON_MAX_CQS)]
Completion queue in-use bitmask.
Definition hermon.h:915
hermon_bitmask_t mtt_inuse[HERMON_BITMASK_SIZE(HERMON_MAX_MTTS)]
MTT entry in-use bitmask.
Definition hermon.h:919
unsigned long lkey
Unrestricted LKey.
Definition hermon.h:912
void * uar
PCI user Access Region.
Definition hermon.h:869
unsigned long last_poll
Last unsolicited link state poll.
Definition hermon.h:907
unsigned long special_qpn_base
Special QPN base.
Definition hermon.h:924
pseudo_bit_t reserved1[0x00001]
Definition hermon.h:166
pseudo_bit_t update_ci[0x00018]
Definition hermon.h:161
pseudo_bit_t reserved0[0x00008]
Definition hermon.h:162
pseudo_bit_t arm_ci[0x00018]
Definition hermon.h:164
pseudo_bit_t reserved2[0x00002]
Definition hermon.h:168
pseudo_bit_t cmd_sn[0x00002]
Definition hermon.h:167
pseudo_bit_t cmd[0x00003]
Definition hermon.h:165
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
pseudo_bit_t a[0x00001]
Definition hermon.h:179
pseudo_bit_t reserver[0x00007]
Definition hermon.h:178
pseudo_bit_t ci[0x00018]
Definition hermon.h:177
pseudo_bit_t communication_established[0x00001]
Definition hermon.h:193
pseudo_bit_t reserved0[0x00020]
Definition hermon.h:189
pseudo_bit_t internal_error[0x00001]
Definition hermon.h:199
pseudo_bit_t reserved2[0x00009]
Definition hermon.h:211
pseudo_bit_t srq_rq_limit[0x00001]
Definition hermon.h:208
pseudo_bit_t srq_catastrophe[0x00001]
Definition hermon.h:206
pseudo_bit_t wq_access_violation[0x00001]
Definition hermon.h:205
pseudo_bit_t completion[0x00001]
Definition hermon.h:191
pseudo_bit_t cq_error[0x00001]
Definition hermon.h:195
pseudo_bit_t command_done[0x00001]
Definition hermon.h:201
pseudo_bit_t reserved1[0x00004]
Definition hermon.h:203
pseudo_bit_t wq_catastrophe[0x00001]
Definition hermon.h:196
pseudo_bit_t gpio[0x00001]
Definition hermon.h:209
pseudo_bit_t clientreregister[0x00001]
Definition hermon.h:210
pseudo_bit_t wq_invalid_request[0x00001]
Definition hermon.h:204
pseudo_bit_t send_queue_drained[0x00001]
Definition hermon.h:194
pseudo_bit_t port_state_change[0x00001]
Definition hermon.h:200
pseudo_bit_t srq_last_wqe[0x00001]
Definition hermon.h:207
pseudo_bit_t path_migration_succeeded[0x00001]
Definition hermon.h:192
pseudo_bit_t fexch_error[0x00001]
Definition hermon.h:202
pseudo_bit_t qpc_catastrophe[0x00001]
Definition hermon.h:197
pseudo_bit_t path_migration_failed[0x00001]
Definition hermon.h:198
Definition hermon.h:155
struct hermonprm_mcg_qp_dw_st qp[8]
Definition hermon.h:157
struct hermonprm_mcg_hdr_st hdr
Definition hermon.h:156
pseudo_bit_t reserved0[0x00020]
Definition hermon.h:149
pseudo_bit_t hash[0x00010]
Definition hermon.h:151
pseudo_bit_t reserved1[0x00010]
Definition hermon.h:152
uint8_t headers[IB_MAX_HEADER_SIZE]
Definition hermon.h:514
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition hermon.h:513
struct hermonprm_wqe_segment_ctrl_mlx ctrl
Definition hermon.h:512
pseudo_bit_t autoneg[0x00001]
Definition hermon.h:442
pseudo_bit_t offset[0x00008]
Definition hermon.h:438
pseudo_bit_t portnum[0x00008]
Definition hermon.h:439
pseudo_bit_t setup_mode[0x00004]
Definition hermon.h:444
pseudo_bit_t xnum[0x00004]
Definition hermon.h:440
pseudo_bit_t linkspeed[0x00003]
Definition hermon.h:441
pseudo_bit_t reserved[0x00004]
Definition hermon.h:443
pseudo_bit_t port[0x00008]
Definition hermon.h:223
pseudo_bit_t reserved0[0x00018]
Definition hermon.h:224
pseudo_bit_t reserved[0x00020]
Definition hermon.h:221
pseudo_bit_t reserved[0x00020]
Definition hermon.h:215
struct hermonprm_port_state_change_st data
Definition hermon.h:217
pseudo_bit_t reserved3[0x00004]
Definition hermon.h:332
pseudo_bit_t transceiver_type[0x00008]
Definition hermon.h:350
pseudo_bit_t reserved10[0x000c0]
Definition hermon.h:359
pseudo_bit_t vendor_oui[0x00018]
Definition hermon.h:349
pseudo_bit_t eth[0x00001]
Definition hermon.h:323
pseudo_bit_t reserved0[0x00004]
Definition hermon.h:321
pseudo_bit_t reserved7[0x00020]
Definition hermon.h:342
pseudo_bit_t eth_mtu[0x00010]
Definition hermon.h:319
pseudo_bit_t reserved8[0x00010]
Definition hermon.h:345
pseudo_bit_t reserved6[0x00010]
Definition hermon.h:340
pseudo_bit_t reserved4[0x00004]
Definition hermon.h:334
pseudo_bit_t ib_link_speed[0x00004]
Definition hermon.h:333
pseudo_bit_t transceiver_code_lo[0x00020]
Definition hermon.h:357
pseudo_bit_t link_state[0x00001]
Definition hermon.h:325
pseudo_bit_t reserved5[0x00004]
Definition hermon.h:337
pseudo_bit_t log_max_mac[0x00004]
Definition hermon.h:338
pseudo_bit_t log_max_gid[0x00004]
Definition hermon.h:328
pseudo_bit_t ib_port_width[0x00004]
Definition hermon.h:329
pseudo_bit_t wavelength[0x00010]
Definition hermon.h:353
pseudo_bit_t transceiver_code_hi[0x00020]
Definition hermon.h:355
pseudo_bit_t mac_47_32[0x00010]
Definition hermon.h:344
pseudo_bit_t reserved9[0x00010]
Definition hermon.h:352
pseudo_bit_t reserved1[0x00005]
Definition hermon.h:324
pseudo_bit_t log_max_pkey[0x00004]
Definition hermon.h:327
pseudo_bit_t log_max_vlan[0x00004]
Definition hermon.h:339
pseudo_bit_t mac_31_0[0x00020]
Definition hermon.h:347
pseudo_bit_t ib_mtu[0x00004]
Definition hermon.h:320
pseudo_bit_t reserved2[0x00004]
Definition hermon.h:330
pseudo_bit_t ib[0x00001]
Definition hermon.h:322
pseudo_bit_t eth_link_speed[0x00004]
Definition hermon.h:331
pseudo_bit_t max_vl_ib[0x00004]
Definition hermon.h:336
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition hermon.h:518
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition hermon.h:519
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_SCATTER]
Definition hermon.h:530
pseudo_bit_t value[0x00020]
Definition hermon.h:185
pseudo_bit_t value_hi[0x00020]
Definition hermon.h:183
pseudo_bit_t reserved[0x00008]
Definition hermon.h:172
pseudo_bit_t qn[0x00018]
Definition hermon.h:173
pseudo_bit_t reserved0[0x00020]
Definition hermon.h:228
pseudo_bit_t port_type[0x00002]
Definition hermon.h:230
pseudo_bit_t reserved1[0x0001e]
Definition hermon.h:231
pseudo_bit_t pfcrx[0x00008]
Definition hermon.h:377
pseudo_bit_t v_pprx[0x00001]
Definition hermon.h:364
pseudo_bit_t reserved3[0x00007]
Definition hermon.h:373
pseudo_bit_t v_pptx[0x00001]
Definition hermon.h:365
pseudo_bit_t mtu[0x00010]
Definition hermon.h:368
pseudo_bit_t reserved0[0x0001d]
Definition hermon.h:366
pseudo_bit_t pprx[0x00001]
Definition hermon.h:379
pseudo_bit_t v_mtu[0x00001]
Definition hermon.h:363
pseudo_bit_t pptx[0x00001]
Definition hermon.h:374
pseudo_bit_t reserved5[0x00007]
Definition hermon.h:378
pseudo_bit_t reserved2[0x00010]
Definition hermon.h:371
pseudo_bit_t reserved1[0x00010]
Definition hermon.h:369
pseudo_bit_t reserved4[0x00010]
Definition hermon.h:376
pseudo_bit_t pfctx[0x00008]
Definition hermon.h:372
pseudo_bit_t guid0_l[0x00020]
Definition hermon.h:261
pseudo_bit_t reserved3[0x00003]
Definition hermon.h:251
pseudo_bit_t reserved11[0x00020]
Definition hermon.h:288
pseudo_bit_t reserved1[0x00004]
Definition hermon.h:239
pseudo_bit_t capability_mask[0x00020]
Definition hermon.h:253
pseudo_bit_t g0[0x00001]
Definition hermon.h:241
pseudo_bit_t sig[0x00001]
Definition hermon.h:243
pseudo_bit_t reserved0[0x00002]
Definition hermon.h:237
pseudo_bit_t reserved9[0x00020]
Definition hermon.h:284
pseudo_bit_t reserved7[0x00020]
Definition hermon.h:280
pseudo_bit_t max_gid[0x00010]
Definition hermon.h:275
pseudo_bit_t egress_sniff_qpn[0x00018]
Definition hermon.h:267
pseudo_bit_t reserved8[0x00020]
Definition hermon.h:282
pseudo_bit_t reserved18[0x00020]
Definition hermon.h:302
pseudo_bit_t mg[0x00001]
Definition hermon.h:244
pseudo_bit_t reserved20[0x00020]
Definition hermon.h:306
pseudo_bit_t ingress_sniff_qpn[0x00018]
Definition hermon.h:271
pseudo_bit_t node_guid_l[0x00020]
Definition hermon.h:265
pseudo_bit_t reserved6[0x00020]
Definition hermon.h:278
pseudo_bit_t system_image_guid_h[0x00020]
Definition hermon.h:255
pseudo_bit_t link_speed_supported[0x00004]
Definition hermon.h:313
pseudo_bit_t reserved4[0x00006]
Definition hermon.h:269
pseudo_bit_t mp[0x00001]
Definition hermon.h:245
pseudo_bit_t ng[0x00001]
Definition hermon.h:242
pseudo_bit_t reserved13[0x00020]
Definition hermon.h:292
pseudo_bit_t reserved10[0x00020]
Definition hermon.h:286
pseudo_bit_t vl_cap[0x00004]
Definition hermon.h:238
pseudo_bit_t reserved15[0x00020]
Definition hermon.h:296
pseudo_bit_t lws[0x00001]
Definition hermon.h:249
pseudo_bit_t system_image_guid_l[0x00020]
Definition hermon.h:257
pseudo_bit_t reserved17[0x00020]
Definition hermon.h:300
pseudo_bit_t reserved2[0x00004]
Definition hermon.h:248
pseudo_bit_t reserved19[0x00020]
Definition hermon.h:304
pseudo_bit_t egress_sniff_mode[0x00002]
Definition hermon.h:268
pseudo_bit_t reserved16[0x00020]
Definition hermon.h:298
pseudo_bit_t reserved12[0x00020]
Definition hermon.h:290
pseudo_bit_t rcm[0x00001]
Definition hermon.h:236
pseudo_bit_t mvc[0x00001]
Definition hermon.h:246
pseudo_bit_t mtu_cap[0x00004]
Definition hermon.h:240
pseudo_bit_t reserved14[0x00020]
Definition hermon.h:294
pseudo_bit_t reserved5[0x00006]
Definition hermon.h:273
pseudo_bit_t reserved21[0x00020]
Definition hermon.h:308
pseudo_bit_t rqk[0x00001]
Definition hermon.h:235
pseudo_bit_t node_guid_h[0x00020]
Definition hermon.h:263
pseudo_bit_t link_width_supported[0x00004]
Definition hermon.h:312
pseudo_bit_t mmc[0x00001]
Definition hermon.h:247
pseudo_bit_t reserved23[0x00018]
Definition hermon.h:314
pseudo_bit_t guid0_h[0x00020]
Definition hermon.h:259
pseudo_bit_t lss[0x00001]
Definition hermon.h:250
pseudo_bit_t ingress_sniff_mode[0x00002]
Definition hermon.h:272
pseudo_bit_t max_pkey[0x00010]
Definition hermon.h:276
pseudo_bit_t reserved22[0x00020]
Definition hermon.h:310
pseudo_bit_t reserved0[0x0000f]
Definition hermon.h:422
pseudo_bit_t mac_h[0x00010]
Definition hermon.h:421
pseudo_bit_t mac_l[0x00020]
Definition hermon.h:425
pseudo_bit_t v[0x00001]
Definition hermon.h:423
pseudo_bit_t no_vlan_prio[0x00003]
Definition hermon.h:404
pseudo_bit_t mc_by_vlan[0x00001]
Definition hermon.h:413
pseudo_bit_t intra_no_vlan[0x00001]
Definition hermon.h:402
pseudo_bit_t reserved2[0x00005]
Definition hermon.h:390
pseudo_bit_t reserved4[0x00018]
Definition hermon.h:395
pseudo_bit_t reserved0[0x00008]
Definition hermon.h:385
pseudo_bit_t vlan_miss_index[0x00007]
Definition hermon.h:397
pseudo_bit_t base_qpn[0x00018]
Definition hermon.h:384
pseudo_bit_t mc_promisc_mode[0x00002]
Definition hermon.h:414
pseudo_bit_t n_m[0x00004]
Definition hermon.h:391
pseudo_bit_t en_uc_promisc[0x00001]
Definition hermon.h:409
pseudo_bit_t intra_miss[0x00001]
Definition hermon.h:399
pseudo_bit_t promisc_qpn[0x00018]
Definition hermon.h:407
pseudo_bit_t reserved6[0x00008]
Definition hermon.h:401
pseudo_bit_t reserved1[0x00006]
Definition hermon.h:388
pseudo_bit_t n_p[0x00002]
Definition hermon.h:387
pseudo_bit_t mac_miss_index[0x00008]
Definition hermon.h:394
pseudo_bit_t def_mcast_qpn[0x00018]
Definition hermon.h:411
pseudo_bit_t no_vlan_index[0x00007]
Definition hermon.h:400
pseudo_bit_t reserved7[0x0001d]
Definition hermon.h:405
pseudo_bit_t reserved8[0x00007]
Definition hermon.h:408
pseudo_bit_t reserved10[0x00020]
Definition hermon.h:416
pseudo_bit_t reserved5[0x00008]
Definition hermon.h:398
pseudo_bit_t reserved3[0x0000c]
Definition hermon.h:392
pseudo_bit_t reserved9[0x00005]
Definition hermon.h:412
pseudo_bit_t n_v[0x00003]
Definition hermon.h:389
pseudo_bit_t intra[0x00001]
Definition hermon.h:432
pseudo_bit_t reserved0[0x00012]
Definition hermon.h:431
pseudo_bit_t v[0x00001]
Definition hermon.h:433
pseudo_bit_t vlan_id[0x0000c]
Definition hermon.h:430
struct hermonprm_wqe_segment_ud ud
Definition hermon.h:507
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition hermon.h:506
struct hermonprm_wqe_segment_data_ptr data[HERMON_MAX_GATHER]
Definition hermon.h:508
struct hermonprm_scalar_parameter reserved
Definition hermon.h:499
struct hermonprm_mtt mtt
Definition hermon.h:500
struct hermonprm_scalar_parameter mtt_base_addr
Definition hermon.h:498
An Infiniband Completion Queue.
Definition infiniband.h:225
An Infiniband device.
Definition infiniband.h:399
An Infiniband Global Route Header.
Definition ib_packet.h:90
An Infiniband Queue Pair.
Definition infiniband.h:158
A network device.
Definition netdevice.h:353
A block of non-volatile stored options.
Definition nvo.h:23
An NVS VPD device.
Definition nvsvpd.h:20
A PCI device.
Definition pci.h:211
A Hermon port Ethernet MAC address.
Definition hermon.h:836
uint32_t l
Definition hermon.h:839
uint16_t h
Definition hermon.h:838
struct hermon_port_mac::@244375120162033332130260300054006205305035277202 part
uint8_t raw[ETH_ALEN]
Definition hermon.h:841
A Hermon receive work queue entry.
Definition hermon.h:688
uint8_t force_align[HERMON_RECV_WQE_ALIGN]
Definition hermon.h:690
struct hermonprm_recv_wqe recv
Definition hermon.h:689
A Hermon send work queue entry.
Definition hermon.h:658
struct hermonprm_rc_send_wqe rc
Definition hermon.h:662
struct hermonprm_wqe_segment_ctrl_send ctrl
Definition hermon.h:659
struct hermonprm_ud_send_wqe ud
Definition hermon.h:660
struct hermonprm_mlx_send_wqe mlx
Definition hermon.h:661
uint8_t force_align[HERMON_SEND_WQE_ALIGN]
Definition hermon.h:664
struct hermonprm_eth_send_wqe eth
Definition hermon.h:663
Definition hermon.h:533
struct hermonprm_completion_with_error error
Definition hermon.h:535
struct hermonprm_completion_queue_entry normal
Definition hermon.h:534
struct hermonprm_event_db_register event
Definition hermon.h:546
struct hermonprm_send_db_register send
Definition hermon.h:545
Definition hermon.h:538
struct hermonprm_port_state_change_event port_state_change
Definition hermon.h:540
struct hermonprm_port_mgmnt_change_event port_mgmnt_change
Definition hermon.h:541
struct hermonprm_event_queue_entry generic
Definition hermon.h:539
struct hermonprm_mad_ifc ifc
Definition hermon.h:551
union ib_mad mad
Definition hermon.h:552
struct hermonprm_set_port_general_context general
Definition hermon.h:557
struct hermonprm_set_port_mac_table mac_table[128]
Definition hermon.h:559
struct hermonprm_set_port_rqp_calc rqp_calc
Definition hermon.h:558
struct hermonprm_set_port_ib ib
Definition hermon.h:556
struct hermonprm_set_port_vlan vlan
Definition hermon.h:560
A management datagram.
Definition ib_mad.h:611