iPXE
|
Mellanox Hermon Infiniband HCA driver. More...
#include <stdint.h>
#include <ipxe/uaccess.h>
#include <ipxe/ib_packet.h>
#include <ipxe/bofm.h>
#include <ipxe/nvsvpd.h>
#include <ipxe/nvo.h>
#include "mlx_bitops.h"
#include "MT25408_PRM.h"
Go to the source code of this file.
Macros | |
#define | HERMON_MAX_PORTS 2 |
#define | HERMON_PORT_BASE 1 |
#define | HERMON_PCI_CONFIG_BAR PCI_BASE_ADDRESS_0 |
#define | HERMON_PCI_CONFIG_BAR_SIZE 0x100000 |
#define | HERMON_PCI_UAR_BAR PCI_BASE_ADDRESS_2 |
#define | HERMON_RESET_OFFSET 0x0f0010 |
#define | HERMON_RESET_MAGIC 0x01000001UL |
#define | HERMON_RESET_MAX_WAIT_MS 1000 |
#define | HERMON_OPCODE_NOP 0x00 |
#define | HERMON_OPCODE_SEND 0x0a |
#define | HERMON_OPCODE_RECV_ERROR 0xfe |
#define | HERMON_OPCODE_SEND_ERROR 0xff |
#define | HERMON_HCR_QUERY_DEV_CAP 0x0003 |
#define | HERMON_HCR_QUERY_FW 0x0004 |
#define | HERMON_HCR_INIT_HCA 0x0007 |
#define | HERMON_HCR_CLOSE_HCA 0x0008 |
#define | HERMON_HCR_INIT_PORT 0x0009 |
#define | HERMON_HCR_CLOSE_PORT 0x000a |
#define | HERMON_HCR_SET_PORT 0x000c |
#define | HERMON_HCR_SW2HW_MPT 0x000d |
#define | HERMON_HCR_HW2SW_MPT 0x000f |
#define | HERMON_HCR_WRITE_MTT 0x0011 |
#define | HERMON_HCR_MAP_EQ 0x0012 |
#define | HERMON_HCR_SW2HW_EQ 0x0013 |
#define | HERMON_HCR_HW2SW_EQ 0x0014 |
#define | HERMON_HCR_QUERY_EQ 0x0015 |
#define | HERMON_HCR_SW2HW_CQ 0x0016 |
#define | HERMON_HCR_HW2SW_CQ 0x0017 |
#define | HERMON_HCR_QUERY_CQ 0x0018 |
#define | HERMON_HCR_RST2INIT_QP 0x0019 |
#define | HERMON_HCR_INIT2RTR_QP 0x001a |
#define | HERMON_HCR_RTR2RTS_QP 0x001b |
#define | HERMON_HCR_RTS2RTS_QP 0x001c |
#define | HERMON_HCR_2RST_QP 0x0021 |
#define | HERMON_HCR_QUERY_QP 0x0022 |
#define | HERMON_HCR_CONF_SPECIAL_QP 0x0023 |
#define | HERMON_HCR_MAD_IFC 0x0024 |
#define | HERMON_HCR_READ_MCG 0x0025 |
#define | HERMON_HCR_WRITE_MCG 0x0026 |
#define | HERMON_HCR_MGID_HASH 0x0027 |
#define | HERMON_HCR_MOD_STAT_CFG 0x0034 |
#define | HERMON_HCR_QUERY_PORT 0x0043 |
#define | HERMON_HCR_SENSE_PORT 0x004d |
#define | HERMON_HCR_RUN_FW 0x0ff6 |
#define | HERMON_HCR_DISABLE_LAM 0x0ff7 |
#define | HERMON_HCR_ENABLE_LAM 0x0ff8 |
#define | HERMON_HCR_UNMAP_ICM 0x0ff9 |
#define | HERMON_HCR_MAP_ICM 0x0ffa |
#define | HERMON_HCR_UNMAP_ICM_AUX 0x0ffb |
#define | HERMON_HCR_MAP_ICM_AUX 0x0ffc |
#define | HERMON_HCR_SET_ICM_SIZE 0x0ffd |
#define | HERMON_HCR_UNMAP_FA 0x0ffe |
#define | HERMON_HCR_MAP_FA 0x0fff |
#define | HERMON_ST_RC 0x00 |
#define | HERMON_ST_UD 0x03 |
#define | HERMON_ST_MLX 0x07 |
#define | HERMON_PORT_TYPE_UNKNOWN 0 |
#define | HERMON_PORT_TYPE_IB 1 |
#define | HERMON_PORT_TYPE_ETH 2 |
#define | HERMON_MTU_2048 0x04 |
#define | HERMON_MTU_ETH 0x07 |
#define | HERMON_INVALID_LKEY 0x00000100UL |
#define | HERMON_PAGE_SIZE ( ( size_t ) 4096 ) |
#define | HERMON_DB_POST_SND_OFFSET 0x14 |
#define | HERMON_DB_EQ_OFFSET(_eqn) ( 0x800 + HERMON_PAGE_SIZE * ( (_eqn) / 4 ) + 0x08 * ( (_eqn) % 4 ) ) |
#define | HERMON_QP_OPT_PARAM_PM_STATE 0x00000400UL |
#define | HERMON_QP_OPT_PARAM_QKEY 0x00000020UL |
#define | HERMON_QP_OPT_PARAM_ALT_PATH 0x00000001UL |
#define | HERMON_MAP_EQ ( 0UL << 31 ) |
#define | HERMON_UNMAP_EQ ( 1UL << 31 ) |
#define | HERMON_SET_PORT_GENERAL_PARAM 0x0000 |
#define | HERMON_SET_PORT_RECEIVE_QP 0x0100 |
#define | HERMON_SET_PORT_MAC_TABLE 0x0200 |
#define | HERMON_SET_PORT_VLAN_TABLE 0x0300 |
#define | HERMON_SET_PORT_PRIORITY_TABLE 0x0400 |
#define | HERMON_SET_PORT_GID_TABLE 0x0500 |
#define | HERMON_EV_PORT_STATE_CHANGE 0x09 |
#define | HERMON_EV_PORT_MGMNT_CHANGE 0x1d |
#define | HERMON_SCHED_QP0 0x3f |
#define | HERMON_SCHED_DEFAULT 0x83 |
#define | HERMON_LOG_MULTICAST_HASH_SIZE 7 |
#define | HERMON_PM_STATE_ARMED 0x00 |
#define | HERMON_PM_STATE_REARM 0x01 |
#define | HERMON_PM_STATE_MIGRATED 0x03 |
#define | HERMON_RETRY_MAX 0x07 |
#define | HERMON_MOD_STAT_CFG_SET 0x01 |
#define | HERMON_MOD_STAT_CFG_QUERY 0x03 |
#define | HERMON_VPD_FIELD(port) PCI_VPD_FIELD ( PCI_VPD_TAG_RW, 'V', ( '5' + (port) - 1 ) ) |
#define | HERMON_MAX_GATHER 2 |
#define | HERMON_MAX_SCATTER 2 |
#define | HERMON_CMPT_MAX_ENTRIES ( 1 << 24 ) |
Number of cMPT entries of each type. More... | |
#define | HERMON_UAR_NON_EQ_PAGE 128 |
UAR page for doorbell accesses. More... | |
#define | HERMON_MAX_MTTS 64 |
Maximum number of allocatable MTT entries. More... | |
#define | HERMON_SEND_WQE_ALIGN 128 |
Alignment of Hermon send work queue entries. More... | |
#define | HERMON_RECV_WQE_ALIGN 16 |
Alignment of Hermon receive work queue entries. More... | |
#define | HERMON_NUM_SPECIAL_QPS 8 |
Number of special queue pairs. More... | |
#define | HERMON_RSVD_SPECIAL_QPS ( ( HERMON_NUM_SPECIAL_QPS << 1 ) - 1 ) |
Number of queue pairs reserved for the "special QP" block. More... | |
#define | HERMON_MAX_QPS 8 |
Maximum number of allocatable queue pairs. More... | |
#define | HERMON_QPN_RANDOM_MASK 0xfff000 |
Queue pair number randomisation mask. More... | |
#define | HERMON_MAX_CQS 8 |
Maximum number of allocatable completion queues. More... | |
#define | HERMON_MAX_EQS 8 |
Maximum number of allocatable event queues. More... | |
#define | HERMON_NUM_EQES 8 |
Number of event queue entries. More... | |
#define | HERMON_BITMASK_SIZE(max_entries) |
Size of a hermon resource bitmask. More... | |
#define | HERMON_GLOBAL_PD 0x123456 |
Global protection domain. More... | |
#define | HERMON_MKEY_PREFIX 0x77000000UL |
Memory key prefix. More... | |
#define | HERMON_LINK_POLL_INTERVAL ( TICKS_PER_SEC / 2 ) |
Link poll interval. More... | |
#define | HERMON_HCR_BASE 0x80680 |
#define | HERMON_HCR_REG(x) ( HERMON_HCR_BASE + 4 * (x) ) |
#define | HERMON_HCR_MAX_WAIT_MS 10000 |
#define | HERMON_MBOX_ALIGN 4096 |
#define | HERMON_MBOX_SIZE 1024 |
#define | HERMON_HCR_IN_MBOX 0x00001000UL |
#define | HERMON_HCR_OUT_MBOX 0x00002000UL |
#define | HERMON_HCR_OPCODE(_command) ( (_command) & 0xfff ) |
#define | HERMON_HCR_IN_LEN(_command) ( ( (_command) >> 12 ) & 0x7fc ) |
#define | HERMON_HCR_OUT_LEN(_command) ( ( (_command) >> 21 ) & 0x7fc ) |
#define | HERMON_HCR_INOUT_CMD(_opcode, _in_mbox, _in_len, _out_mbox, _out_len) |
Build HCR command from component parts. More... | |
#define | HERMON_HCR_IN_CMD(_opcode, _in_mbox, _in_len) HERMON_HCR_INOUT_CMD ( _opcode, _in_mbox, _in_len, 0, 0 ) |
#define | HERMON_HCR_OUT_CMD(_opcode, _out_mbox, _out_len) HERMON_HCR_INOUT_CMD ( _opcode, 0, 0, _out_mbox, _out_len ) |
#define | HERMON_HCR_VOID_CMD(_opcode) HERMON_HCR_INOUT_CMD ( _opcode, 0, 0, 0, 0 ) |
Typedefs | |
typedef uint32_t | hermon_bitmask_t |
A Hermon resource bitmask. More... | |
Enumerations | |
enum | hermon_icm_map_regions { HERMON_ICM_QP_CMPT = 0, HERMON_ICM_SRQ_CMPT, HERMON_ICM_CQ_CMPT, HERMON_ICM_EQ_CMPT, HERMON_ICM_OTHER, HERMON_ICM_NUM_REGIONS } |
Discontiguous regions within Hermon ICM. More... | |
enum | hermon_queue_pair_state { HERMON_QP_ST_RST = 0, HERMON_QP_ST_INIT, HERMON_QP_ST_RTR, HERMON_QP_ST_RTS } |
Hermon queue pair state. More... | |
Functions | |
FILE_LICENCE (GPL2_OR_LATER) | |
struct | MLX_DECLARE_STRUCT (hermonprm_completion_queue_context) |
struct | MLX_DECLARE_STRUCT (hermonprm_completion_queue_entry) |
struct | MLX_DECLARE_STRUCT (hermonprm_completion_with_error) |
struct | MLX_DECLARE_STRUCT (hermonprm_cq_db_record) |
struct | MLX_DECLARE_STRUCT (hermonprm_eqc) |
struct | MLX_DECLARE_STRUCT (hermonprm_event_db_register) |
struct | MLX_DECLARE_STRUCT (hermonprm_event_mask) |
struct | MLX_DECLARE_STRUCT (hermonprm_event_queue_entry) |
struct | MLX_DECLARE_STRUCT (hermonprm_hca_command_register) |
struct | MLX_DECLARE_STRUCT (hermonprm_init_hca) |
struct | MLX_DECLARE_STRUCT (hermonprm_mad_ifc) |
struct | MLX_DECLARE_STRUCT (hermonprm_mcg_entry) |
struct | MLX_DECLARE_STRUCT (hermonprm_mgm_hash) |
struct | MLX_DECLARE_STRUCT (hermonprm_mod_stat_cfg) |
struct | MLX_DECLARE_STRUCT (hermonprm_mod_stat_cfg_input_mod) |
struct | MLX_DECLARE_STRUCT (hermonprm_mpt) |
struct | MLX_DECLARE_STRUCT (hermonprm_mtt) |
struct | MLX_DECLARE_STRUCT (hermonprm_port_state_change_event) |
struct | MLX_DECLARE_STRUCT (hermonprm_port_mgmnt_change_event) |
struct | MLX_DECLARE_STRUCT (hermonprm_qp_db_record) |
struct | MLX_DECLARE_STRUCT (hermonprm_qp_ee_state_transitions) |
struct | MLX_DECLARE_STRUCT (hermonprm_query_dev_cap) |
struct | MLX_DECLARE_STRUCT (hermonprm_query_fw) |
struct | MLX_DECLARE_STRUCT (hermonprm_query_port_cap) |
struct | MLX_DECLARE_STRUCT (hermonprm_queue_pair_ee_context_entry) |
struct | MLX_DECLARE_STRUCT (hermonprm_scalar_parameter) |
struct | MLX_DECLARE_STRUCT (hermonprm_sense_port) |
struct | MLX_DECLARE_STRUCT (hermonprm_send_db_register) |
struct | MLX_DECLARE_STRUCT (hermonprm_set_port_ib) |
struct | MLX_DECLARE_STRUCT (hermonprm_set_port_general_context) |
struct | MLX_DECLARE_STRUCT (hermonprm_set_port_mac_table) |
struct | MLX_DECLARE_STRUCT (hermonprm_set_port_rqp_calc) |
struct | MLX_DECLARE_STRUCT (hermonprm_set_port_vlan) |
struct | MLX_DECLARE_STRUCT (hermonprm_ud_address_vector) |
struct | MLX_DECLARE_STRUCT (hermonprm_virtual_physical_mapping) |
struct | MLX_DECLARE_STRUCT (hermonprm_wqe_segment_ctrl_mlx) |
struct | MLX_DECLARE_STRUCT (hermonprm_wqe_segment_ctrl_send) |
struct | MLX_DECLARE_STRUCT (hermonprm_wqe_segment_data_ptr) |
struct | MLX_DECLARE_STRUCT (hermonprm_wqe_segment_ud) |
Mellanox Hermon Infiniband HCA driver.
Definition in file hermon.h.
#define HERMON_PCI_CONFIG_BAR PCI_BASE_ADDRESS_0 |
#define HERMON_PCI_UAR_BAR PCI_BASE_ADDRESS_2 |
#define HERMON_DB_EQ_OFFSET | ( | _eqn | ) | ( 0x800 + HERMON_PAGE_SIZE * ( (_eqn) / 4 ) + 0x08 * ( (_eqn) % 4 ) ) |
#define HERMON_VPD_FIELD | ( | port | ) | PCI_VPD_FIELD ( PCI_VPD_TAG_RW, 'V', ( '5' + (port) - 1 ) ) |
#define HERMON_CMPT_MAX_ENTRIES ( 1 << 24 ) |
#define HERMON_UAR_NON_EQ_PAGE 128 |
#define HERMON_MAX_MTTS 64 |
#define HERMON_SEND_WQE_ALIGN 128 |
#define HERMON_RECV_WQE_ALIGN 16 |
#define HERMON_NUM_SPECIAL_QPS 8 |
#define HERMON_RSVD_SPECIAL_QPS ( ( HERMON_NUM_SPECIAL_QPS << 1 ) - 1 ) |
#define HERMON_MAX_QPS 8 |
#define HERMON_QPN_RANDOM_MASK 0xfff000 |
#define HERMON_MAX_CQS 8 |
#define HERMON_MAX_EQS 8 |
#define HERMON_NUM_EQES 8 |
#define HERMON_BITMASK_SIZE | ( | max_entries | ) |
Size of a hermon resource bitmask.
#define HERMON_GLOBAL_PD 0x123456 |
#define HERMON_LINK_POLL_INTERVAL ( TICKS_PER_SEC / 2 ) |
#define HERMON_HCR_REG | ( | x | ) | ( HERMON_HCR_BASE + 4 * (x) ) |
#define HERMON_HCR_OPCODE | ( | _command | ) | ( (_command) & 0xfff ) |
#define HERMON_HCR_IN_LEN | ( | _command | ) | ( ( (_command) >> 12 ) & 0x7fc ) |
#define HERMON_HCR_OUT_LEN | ( | _command | ) | ( ( (_command) >> 21 ) & 0x7fc ) |
#define HERMON_HCR_INOUT_CMD | ( | _opcode, | |
_in_mbox, | |||
_in_len, | |||
_out_mbox, | |||
_out_len | |||
) |
Build HCR command from component parts.
#define HERMON_HCR_IN_CMD | ( | _opcode, | |
_in_mbox, | |||
_in_len | |||
) | HERMON_HCR_INOUT_CMD ( _opcode, _in_mbox, _in_len, 0, 0 ) |
#define HERMON_HCR_OUT_CMD | ( | _opcode, | |
_out_mbox, | |||
_out_len | |||
) | HERMON_HCR_INOUT_CMD ( _opcode, 0, 0, _out_mbox, _out_len ) |
#define HERMON_HCR_VOID_CMD | ( | _opcode | ) | HERMON_HCR_INOUT_CMD ( _opcode, 0, 0, 0, 0 ) |
typedef uint32_t hermon_bitmask_t |
Discontiguous regions within Hermon ICM.
Enumerator | |
---|---|
HERMON_ICM_QP_CMPT | |
HERMON_ICM_SRQ_CMPT | |
HERMON_ICM_CQ_CMPT | |
HERMON_ICM_EQ_CMPT | |
HERMON_ICM_OTHER | |
HERMON_ICM_NUM_REGIONS |
Definition at line 621 of file hermon.h.
Hermon queue pair state.
Enumerator | |
---|---|
HERMON_QP_ST_RST | |
HERMON_QP_ST_INIT | |
HERMON_QP_ST_RTR | |
HERMON_QP_ST_RTS |
FILE_LICENCE | ( | GPL2_OR_LATER | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_completion_queue_context | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_completion_queue_entry | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_completion_with_error | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_cq_db_record | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_eqc | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_event_db_register | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_event_mask | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_event_queue_entry | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_hca_command_register | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_init_hca | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mad_ifc | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mcg_entry | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mgm_hash | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mod_stat_cfg | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mod_stat_cfg_input_mod | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mpt | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_mtt | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_port_state_change_event | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_port_mgmnt_change_event | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_qp_db_record | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_qp_ee_state_transitions | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_query_dev_cap | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_query_fw | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_query_port_cap | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_queue_pair_ee_context_entry | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_scalar_parameter | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_sense_port | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_send_db_register | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_set_port_ib | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_set_port_general_context | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_set_port_mac_table | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_set_port_rqp_calc | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_set_port_vlan | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_ud_address_vector | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_virtual_physical_mapping | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_wqe_segment_ctrl_mlx | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_wqe_segment_ctrl_send | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_wqe_segment_data_ptr | ) |
struct MLX_DECLARE_STRUCT | ( | hermonprm_wqe_segment_ud | ) |