|
Packit |
961e70 |
/*
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
This file is provided under a dual BSD/GPLv2 license. When using or
|
|
Packit |
961e70 |
redistributing this file, you may do so under either license.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
GPL LICENSE SUMMARY
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Copyright(c) 2017 Intel Corporation.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
This program is free software; you can redistribute it and/or modify
|
|
Packit |
961e70 |
it under the terms of version 2 of the GNU General Public License as
|
|
Packit |
961e70 |
published by the Free Software Foundation.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
This program is distributed in the hope that it will be useful, but
|
|
Packit |
961e70 |
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
961e70 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
961e70 |
General Public License for more details.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Contact Information:
|
|
Packit |
961e70 |
Intel Corporation, www.intel.com
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
BSD LICENSE
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Copyright(c) 2017 Intel Corporation.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
961e70 |
modification, are permitted provided that the following conditions
|
|
Packit |
961e70 |
are met:
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
* Redistributions of source code must retain the above copyright
|
|
Packit |
961e70 |
notice, this list of conditions and the following disclaimer.
|
|
Packit |
961e70 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
961e70 |
notice, this list of conditions and the following disclaimer in
|
|
Packit |
961e70 |
the documentation and/or other materials provided with the
|
|
Packit |
961e70 |
distribution.
|
|
Packit |
961e70 |
* Neither the name of Intel Corporation nor the names of its
|
|
Packit |
961e70 |
contributors may be used to endorse or promote products derived
|
|
Packit |
961e70 |
from this software without specific prior written permission.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
Packit |
961e70 |
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
Packit |
961e70 |
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
Packit |
961e70 |
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
Packit |
961e70 |
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
Packit |
961e70 |
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
Packit |
961e70 |
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
Packit |
961e70 |
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
Packit |
961e70 |
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
Packit |
961e70 |
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
961e70 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#ifndef __PSM2_HAL_H__
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define __PSM2_HAL_H__
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#include "psm_user.h"
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Forward declaration of PSM structs: */
|
|
Packit |
961e70 |
struct ips_subcontext_ureg;
|
|
Packit |
961e70 |
struct ips_recvhdrq_event;
|
|
Packit |
961e70 |
struct ips_writehdrq;
|
|
Packit |
961e70 |
struct ips_flow;
|
|
Packit |
961e70 |
struct ips_scb;
|
|
Packit |
961e70 |
struct ips_tid_session_list_tag;
|
|
Packit |
961e70 |
struct ips_epinfo;
|
|
Packit |
961e70 |
struct ips_message_header;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Declare types: */
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
PSM_HAL_INSTANCE_ANY_GEN = 0,
|
|
Packit |
961e70 |
PSM_HAL_INSTANCE_GEN1 = 1,
|
|
Packit |
961e70 |
PSM_HAL_INSTANCE_GEN2 = 2,
|
|
Packit |
961e70 |
PSM_HAL_INSTANCE_GEN3 = 3,
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#ifdef PSM2_MOCK_TESTING
|
|
Packit |
961e70 |
PSM_HAL_INSTANCE_MOCK = 99,
|
|
Packit |
961e70 |
#endif
|
|
Packit |
961e70 |
} psmi_hal_instance_type;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
/* Operation was successful. No error occurred. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_OK = 0,
|
|
Packit |
961e70 |
/* The operation can not be done unless HAL is initialized first. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_NOT_INITIALIZED = 1,
|
|
Packit |
961e70 |
/* No HAL INSTANCE has been registered. Initialization is impossible. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_NO_HI_REGISTERED = 2,
|
|
Packit |
961e70 |
/* Initialization failure. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_INIT_FAILED = 3,
|
|
Packit |
961e70 |
/* Can't open device file. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_CANNOT_OPEN_DEVICE = 4,
|
|
Packit |
961e70 |
/* Can't open context. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_CANNOT_OPEN_CONTEXT = 5,
|
|
Packit |
961e70 |
/* Context is not open. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_CONTEXT_IS_NOT_OPEN = 6,
|
|
Packit |
961e70 |
/* General error. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_GENERAL_ERROR = 7,
|
|
Packit |
961e70 |
/* Not implemented. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_NOT_IMPLEMENTED = 8,
|
|
Packit |
961e70 |
/* Internal error. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_INTERNAL_ERROR = 9,
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* HAL instances should not return errors less than the value
|
|
Packit |
961e70 |
PSM_HAL_ERROR_RESERVED_BY_HAL_API. These errors are reserved by
|
|
Packit |
961e70 |
the HAL API layer. */
|
|
Packit |
961e70 |
PSM_HAL_ERROR_RESERVED_BY_HAL_API = 1000,
|
|
Packit |
961e70 |
} psmi_hal_errors;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
PSM_HAL_HW_STATUS_INITTED = (1UL << 0),
|
|
Packit |
961e70 |
PSM_HAL_HW_STATUS_CHIP_PRESENT = (1UL << 1),
|
|
Packit |
961e70 |
PSM_HAL_HW_STATUS_IB_READY = (1UL << 2),
|
|
Packit |
961e70 |
PSM_HAL_HW_STATUS_IB_CONF = (1UL << 3),
|
|
Packit |
961e70 |
PSM_HAL_HW_STATUS_HWERROR = (1UL << 4)
|
|
Packit |
961e70 |
} psmi_hal_hw_status;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
PSM_HAL_HFI_EVENT_FROZEN = (1UL << 0),
|
|
Packit |
961e70 |
PSM_HAL_HFI_EVENT_LINKDOWN = (1UL << 1),
|
|
Packit |
961e70 |
PSM_HAL_HFI_EVENT_LID_CHANGE = (1UL << 2),
|
|
Packit |
961e70 |
PSM_HAL_HFI_EVENT_LMC_CHANGE = (1UL << 3),
|
|
Packit |
961e70 |
PSM_HAL_HFI_EVENT_SL2VL_CHANGE = (1UL << 4),
|
|
Packit |
961e70 |
PSM_HAL_HFI_EVENT_TID_MMU_NOTIFY = (1UL << 5)
|
|
Packit |
961e70 |
} psmi_hal_hfi_events;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* The following enum constants correspond to the bits in the
|
|
Packit |
961e70 |
cap_mask member of the psmi_hal_params_t. */
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
PSM_HAL_CAP_SDMA = (1UL << 0),
|
|
Packit |
961e70 |
PSM_HAL_CAP_SDMA_AHG = (1UL << 1),
|
|
Packit |
961e70 |
PSM_HAL_CAP_EXTENDED_PSN = (1UL << 2),
|
|
Packit |
961e70 |
PSM_HAL_CAP_HDRSUPP = (1UL << 3),
|
|
Packit |
961e70 |
PSM_HAL_CAP_USE_SDMA_HEAD = (1UL << 4),
|
|
Packit |
961e70 |
PSM_HAL_CAP_MULTI_PKT_EGR = (1UL << 5),
|
|
Packit |
961e70 |
PSM_HAL_CAP_NODROP_RHQ_FULL = (1UL << 6),
|
|
Packit |
961e70 |
PSM_HAL_CAP_NODROP_EGR_FULL = (1UL << 7),
|
|
Packit |
961e70 |
PSM_HAL_CAP_TID_UNMAP = (1UL << 8),
|
|
Packit |
961e70 |
PSM_HAL_CAP_PRINT_UNIMPL = (1UL << 9),
|
|
Packit |
961e70 |
PSM_HAL_CAP_ALLOW_PERM_JKEY = (1UL << 10),
|
|
Packit |
961e70 |
PSM_HAL_CAP_NO_INTEGRITY = (1UL << 11),
|
|
Packit |
961e70 |
PSM_HAL_CAP_PKEY_CHECK = (1UL << 12),
|
|
Packit |
961e70 |
PSM_HAL_CAP_STATIC_RATE_CTRL = (1UL << 13),
|
|
Packit |
961e70 |
PSM_HAL_CAP_SDMA_HEAD_CHECK = (1UL << 14),
|
|
Packit |
961e70 |
PSM_HAL_CAP_EARLY_CREDIT_RETURN = (1UL << 15),
|
|
Packit |
961e70 |
PSM_HAL_CAP_GPUDIRECT_OT = (1UL << 16),
|
|
Packit |
961e70 |
PSM_HAL_CAP_DMA_HSUPP_FOR_32B_MSGS = (1UL << 17),
|
|
Packit |
961e70 |
PSM_HAL_CAP_RSM_FECN_SUPP = (1UL << 18),
|
|
Packit |
961e70 |
PSM_HAL_CAP_MERGED_TID_CTRLS = (1UL << 19),
|
|
Packit |
961e70 |
PSM_HAL_CAP_NON_DW_MULTIPLE_MSG_SIZE = (1UL << 20),
|
|
Packit |
961e70 |
} psmi_hal_capability_bits;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* The following enum constants correspond to the bits in the
|
|
Packit |
961e70 |
sw_status member of the psmi_hal_params_t. */
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
/* Request to start rx thread. */
|
|
Packit |
961e70 |
PSM_HAL_PSMI_RUNTIME_RTS_RX_THREAD = (1UL << 0),
|
|
Packit |
961e70 |
/* Rx thread is started. */
|
|
Packit |
961e70 |
PSM_HAL_PSMI_RUNTIME_RX_THREAD_STARTED = (1UL << 1),
|
|
Packit |
961e70 |
PSM_HAL_PSMI_RUNTIME_INTR_ENABLED = (1UL << 2),
|
|
Packit |
961e70 |
/* Header suppression is enabled: */
|
|
Packit |
961e70 |
PSM_HAL_HDRSUPP_ENABLED = (1UL << 3),
|
|
Packit Service |
7ed5cc |
PSM_HAL_PARAMS_VALID_NUM_UNITS = (1UL << 4),
|
|
Packit Service |
7ed5cc |
PSM_HAL_PARAMS_VALID_NUM_PORTS = (1UL << 5),
|
|
Packit Service |
7ed5cc |
PSM_HAL_PARAMS_VALID_DEFAULT_PKEY = (1UL << 6),
|
|
Packit Service |
7ed5cc |
|
|
Packit |
961e70 |
} psmi_hal_sw_status;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* The _psmi_hal_params structure stores values that remain constant for the entire life of
|
|
Packit |
961e70 |
the process and this structure resides in the hal instance structure (below).
|
|
Packit |
961e70 |
The values are settled after the context is opened. */
|
|
Packit |
961e70 |
typedef struct _psmi_hal_params
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
uint32_t cap_mask;
|
|
Packit |
961e70 |
uint32_t sw_status;
|
|
Packit Service |
7ed5cc |
/* start cached members */
|
|
Packit Service |
7ed5cc |
uint16_t num_units;
|
|
Packit Service |
7ed5cc |
uint16_t num_ports;
|
|
Packit |
961e70 |
uint16_t default_pkey;
|
|
Packit Service |
7ed5cc |
int8_t *unit_active,*unit_active_valid;
|
|
Packit Service |
7ed5cc |
int8_t *port_active,*port_active_valid;
|
|
Packit Service |
7ed5cc |
uint16_t *num_contexts,*num_contexts_valid;
|
|
Packit Service |
7ed5cc |
uint16_t *num_free_contexts,*num_free_contexts_valid;
|
|
Packit |
961e70 |
} psmi_hal_params_t;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* HAL assumes that the rx hdr q and the egr buff q are circular lists
|
|
Packit |
961e70 |
with two important indexes:
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
head - software takes from this side of the circular list
|
|
Packit |
961e70 |
tail - hardware deposits new content here
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
The indexes advance in the list 0, 1, 2, 3, ... until they reach the value:
|
|
Packit |
961e70 |
(number_of_entries_in_the_q-1), then the next value they take is 0. And,
|
|
Packit |
961e70 |
so, that is why these are called circular lists.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
When the head idx == tail idx, that represents an empty circular list.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
A completely full circular list is when:
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
head_idx == (tail_idx + 1) % number_of_entries_in_the_q
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Both indexes will always be in the range: 0 <= index < number_of_entries_in_the_q
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
After software receives the packet in the slot corresponding to the head idx,
|
|
Packit |
961e70 |
and processes it completely, software will signal to the hardware that the slot
|
|
Packit |
961e70 |
is available for re-use by retiring it - see api below for details.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Note that these are simplified assumptions for the benefit of the hardware independent
|
|
Packit |
961e70 |
layer of PSM. The actual implementation details are hidden in the hal instances.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Note that subcontexts have a collection of head / tail indexes for their use.
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
So, HAL supports the use of the following circular lists dealing with the
|
|
Packit |
961e70 |
following entities:
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
1. Rx Hdr q - corresponding to hardware (software modifies head index, hardware modifies tail index).
|
|
Packit |
961e70 |
2. Rx egr q - corresponding to hardware (software modifies head index, hardware modifies tail index).
|
|
Packit |
961e70 |
3. Rx Hdr q - corresponding to a subcontext (software modifies both head and tail indexes).
|
|
Packit |
961e70 |
4. Rx egr q - corresponding to a subcontext (software modifies both head and tail indexes).
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
Declare a type to indicate a circular list index:
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
typedef uint32_t psmi_hal_cl_idx;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
PSM_HAL_CL_Q_RX_HDR_Q = 0, /* HW context for the rx hdr q. */
|
|
Packit |
961e70 |
PSM_HAL_CL_Q_RX_EGR_Q = 1, /* HW context for the rx eager q. */
|
|
Packit |
961e70 |
/* Start of subcontexts (This is subcontext 0) */
|
|
Packit |
961e70 |
PSM_HAL_CL_Q_RX_HDR_Q_SC_0 = 2, /* Subcontext 0's rx hdr q. */
|
|
Packit |
961e70 |
PSM_HAL_CL_Q_RX_EGR_Q_SC_0 = 3, /* Subcontext 0's rx eager q. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Following SC 0's CL_Q's are the circular list q for subcontexts 1-7,
|
|
Packit |
961e70 |
two per subcontext. Even values are the rx hdr q for the subcontext
|
|
Packit |
961e70 |
Odd value are for the eager q. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Given a subcontext number (0-7), return the CL_Q for the RX HDR_Q: */
|
|
Packit |
961e70 |
#define PSM_HAL_GET_SC_CL_Q_RX_HDR_Q(SC) ((SC)*2 + PSM_HAL_CL_Q_RX_HDR_Q_SC_0)
|
|
Packit |
961e70 |
/* Given a subcontext number (0-7), return the CL_Q for the RX EGR_Q: */
|
|
Packit |
961e70 |
#define PSM_HAL_GET_SC_CL_Q_RX_EGR_Q(SC) ((SC)*2 + PSM_HAL_CL_Q_RX_EGR_Q_SC_0)
|
|
Packit |
961e70 |
} psmi_hal_cl_q;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSM_HAL_MAX_SHARED_CTXTS 8
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSM_HAL_ALG_ACROSS 0
|
|
Packit |
961e70 |
#define PSM_HAL_ALG_WITHIN 1
|
|
Packit |
961e70 |
#define PSM_HAL_ALG_ACROSS_ALL 2
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
PSM_HAL_EXP = 0,
|
|
Packit |
961e70 |
PSM_HAL_EGR = 1,
|
|
Packit |
961e70 |
} psmi_hal_set_sdma_req_type;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSM_HAL_SDMA_REQ_VERSION_MASK 0xF
|
|
Packit |
961e70 |
#define PSM_HAL_SDMA_REQ_VERSION_SHIFT 0x0
|
|
Packit |
961e70 |
#define PSM_HAL_SDMA_REQ_OPCODE_MASK 0xF
|
|
Packit |
961e70 |
#define PSM_HAL_SDMA_REQ_OPCODE_SHIFT 0x4
|
|
Packit |
961e70 |
#define PSM_HAL_SDMA_REQ_IOVCNT_MASK 0xFF
|
|
Packit |
961e70 |
#define PSM_HAL_SDMA_REQ_IOVCNT_SHIFT 0x8
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#ifdef PSM_CUDA
|
|
Packit |
961e70 |
#define PSM_HAL_BUF_GPU_MEM 1
|
|
Packit |
961e70 |
#endif
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
struct psm_hal_sdma_req_info {
|
|
Packit |
961e70 |
/*
|
|
Packit |
961e70 |
* bits 0-3 - version (currently used only for GPU direct)
|
|
Packit |
961e70 |
* 1 - user space is NOT using flags field
|
|
Packit |
961e70 |
* 2 - user space is using flags field
|
|
Packit |
961e70 |
* bits 4-7 - opcode (enum sdma_req_opcode)
|
|
Packit |
961e70 |
* bits 8-15 - io vector count
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
__u16 ctrl;
|
|
Packit |
961e70 |
/*
|
|
Packit |
961e70 |
* Number of fragments contained in this request.
|
|
Packit |
961e70 |
* User-space has already computed how many
|
|
Packit |
961e70 |
* fragment-sized packet the user buffer will be
|
|
Packit |
961e70 |
* split into.
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
__u16 npkts;
|
|
Packit |
961e70 |
/*
|
|
Packit |
961e70 |
* Size of each fragment the user buffer will be
|
|
Packit |
961e70 |
* split into.
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
__u16 fragsize;
|
|
Packit |
961e70 |
/*
|
|
Packit |
961e70 |
* Index of the slot in the SDMA completion ring
|
|
Packit |
961e70 |
* this request should be using. User-space is
|
|
Packit |
961e70 |
* in charge of managing its own ring.
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
__u16 comp_idx;
|
|
Packit |
961e70 |
#ifdef PSM_CUDA
|
|
Packit |
961e70 |
/*
|
|
Packit |
961e70 |
* Buffer flags for this request. See HFI1_BUF_*
|
|
Packit |
961e70 |
*/
|
|
Packit |
961e70 |
__u16 flags;
|
|
Packit |
961e70 |
/* The extra bytes for the PSM_CUDA version of the sdma req info
|
|
Packit |
961e70 |
* struct is the size of the flags member. */
|
|
Packit |
961e70 |
#define PSM_HAL_CUDA_SDMA_REQ_INFO_EXTRA sizeof(__u16)
|
|
Packit |
961e70 |
#endif
|
|
Packit |
961e70 |
} __attribute__((packed));
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum {
|
|
Packit |
961e70 |
PSM_HAL_SDMA_RING_AVAILABLE = 0,
|
|
Packit |
961e70 |
PSM_HAL_SDMA_RING_QUEUED = 1,
|
|
Packit |
961e70 |
PSM_HAL_SDMA_RING_COMPLETE = 2,
|
|
Packit |
961e70 |
PSM_HAL_SDMA_RING_ERROR = 3,
|
|
Packit |
961e70 |
} psmi_hal_sdma_ring_slot_status;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef uint64_t psmi_hal_raw_rhf_t;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef struct psmi_hal_rhf_
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
/* The first entity in rhf is the decomposed rhf.
|
|
Packit |
961e70 |
Each HAL instance, in hfp_get_receive_event(), will decompose the raw rhf
|
|
Packit |
961e70 |
obtained from the hardware and deposit the data into this common
|
|
Packit |
961e70 |
decomposed rhf, so the upper layers of psm can find the data in one
|
|
Packit |
961e70 |
uniform place. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
uint64_t decomposed_rhf;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* The second entry is the raw rhf that comes from the h/w.
|
|
Packit |
961e70 |
The upper layers of psm should not use the raw rhf, instead use the
|
|
Packit |
961e70 |
decomposed rhf above. The raw rhf is intended for use by the HAL
|
|
Packit |
961e70 |
instance only. */
|
|
Packit |
961e70 |
uint64_t raw_rhf;
|
|
Packit |
961e70 |
} psmi_hal_rhf_t;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_ICRC_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_ICRC_SHFTC 63
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_RSRV_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_RSRV_SHFTC 62
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_ECC_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_ECC_SHFTC 61
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_LEN_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_LEN_SHFTC 60
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TID_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TID_SHFTC 59
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TFGEN_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TFGEN_SHFTC 58
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TFSEQ_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TFSEQ_SHFTC 57
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_RTE_NBITS 3
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_RTE_SHFTC 56
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_DC_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_DC_SHFTC 55
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_DCUN_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_DCUN_SHFTC 54
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_KHDRLEN_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_KHDRLEN_SHFTC 53
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ALL_ERR_FLAGS_NBITS (PSMI_HAL_RHF_ERR_ICRC_NBITS + PSMI_HAL_RHF_ERR_RSRV_NBITS \
|
|
Packit |
961e70 |
+ PSMI_HAL_RHF_ERR_ECC_NBITS \
|
|
Packit |
961e70 |
+ PSMI_HAL_RHF_ERR_LEN_NBITS + PSMI_HAL_RHF_ERR_TID_NBITS \
|
|
Packit |
961e70 |
+ PSMI_HAL_RHF_ERR_TFGEN_NBITS + PSMI_HAL_RHF_ERR_TFSEQ_NBITS \
|
|
Packit |
961e70 |
+ PSMI_HAL_RHF_ERR_RTE_NBITS + PSMI_HAL_RHF_ERR_DC_NBITS \
|
|
Packit |
961e70 |
+ PSMI_HAL_RHF_ERR_DCUN_NBITS + PSMI_HAL_RHF_ERR_KHDRLEN_NBITS)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ALL_ERR_FLAGS_SHFTC 53
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_EGR_BUFF_OFF_NBITS 12
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_EGR_BUFF_OFF_SHFTC 32
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_SEQ_NBITS 4
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_SEQ_SHFTC 28
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_EGR_BUFF_IDX_NBITS 11
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_EGR_BUFF_IDX_SHFTC 16
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_USE_EGR_BUFF_NBITS 1
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_USE_EGR_BUFF_SHFTC 15
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_RX_TYPE_NBITS 3
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_RX_TYPE_SHFTC 12
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_PKT_LEN_NBITS 12
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_PKT_LEN_SHFTC 0
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum {
|
|
Packit |
961e70 |
PSM_HAL_RHF_RX_TYPE_EXPECTED = 0,
|
|
Packit |
961e70 |
PSM_HAL_RHF_RX_TYPE_EAGER = 1,
|
|
Packit |
961e70 |
PSM_HAL_RHF_RX_TYPE_NON_KD = 2,
|
|
Packit |
961e70 |
PSM_HAL_RHF_RX_TYPE_ERROR = 3
|
|
Packit |
961e70 |
} psmi_hal_rhf_rx_type;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
struct psm_hal_pbc {
|
|
Packit |
961e70 |
__u32 pbc0;
|
|
Packit |
961e70 |
__u16 PbcStaticRateControlCnt;
|
|
Packit |
961e70 |
__u16 fill1;
|
|
Packit |
961e70 |
};
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
typedef enum {
|
|
Packit |
961e70 |
PSMI_HAL_POLL_TYPE_URGENT = 1
|
|
Packit |
961e70 |
} psmi_hal_poll_type;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Forward declaration of incomplete struct type _psmi_hal_instance and
|
|
Packit |
961e70 |
* psmi_hal_instance_t typedef: */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
struct _psmi_hal_instance;
|
|
Packit |
961e70 |
typedef struct _psmi_hal_instance psmi_hal_instance_t;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
struct _psmi_hal_instance
|
|
Packit |
961e70 |
{
|
|
Packit |
961e70 |
SLIST_ENTRY(_psmi_hal_instance) next_hi;
|
|
Packit |
961e70 |
psmi_hal_instance_type type;
|
|
Packit |
961e70 |
const char *description;
|
|
Packit |
961e70 |
const char *hfi_name;
|
|
Packit |
961e70 |
const char *hfi_sys_class_path;
|
|
Packit |
961e70 |
/* The params member should be read-only for HIC, and
|
|
Packit |
961e70 |
written only by the HAL instance. */
|
|
Packit |
961e70 |
psmi_hal_params_t params;
|
|
Packit |
961e70 |
/* Initialize the HAL INSTANCE. */
|
|
Packit |
961e70 |
int (*hfp_initialize)(psmi_hal_instance_t *);
|
|
Packit |
961e70 |
/* Finalize the HAL INSTANCE. */
|
|
Packit Service |
7ed5cc |
int (*hfp_finalize_)(void);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Returns the number of hfi units installed on ths host:
|
|
Packit |
961e70 |
NOTE: hfp_get_num_units is a function that must
|
|
Packit |
961e70 |
be callable before the hal instance is initialized. */
|
|
Packit Service |
7ed5cc |
int (*hfp_get_num_units)(void);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Returns the number of ports on each hfi unit installed.
|
|
Packit |
961e70 |
on ths host.
|
|
Packit |
961e70 |
NOTE: hfp_get_num_ports is a function that must
|
|
Packit |
961e70 |
be callable before the hal instance is initialized. */
|
|
Packit |
961e70 |
int (*hfp_get_num_ports)(void);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Returns the default pkey:
|
|
Packit |
961e70 |
NOTE: hfp_get_default_pkey is a function that must
|
|
Packit |
961e70 |
be callable before the hal instance is initialized. */
|
|
Packit |
961e70 |
int (*hfp_get_default_pkey)(void);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Given a unit number, returns 1 if any port on the unit is active.
|
|
Packit |
961e70 |
returns 0 if no port on the unit is active.
|
|
Packit |
961e70 |
returns -1 when an error occurred.
|
|
Packit |
961e70 |
NOTE: hfp_get_unit_active is a function that must
|
|
Packit |
961e70 |
be callable before the hal instance is initialized. */
|
|
Packit |
961e70 |
int (*hfp_get_unit_active)(int unit);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_get_port_active)(int unit,int port);
|
|
Packit |
961e70 |
/* NOTE: hfp_get_num_contexts is a function that must
|
|
Packit |
961e70 |
be callable before the hal instance is initialized. */
|
|
Packit |
961e70 |
int (*hfp_get_num_contexts)(int unit);
|
|
Packit |
961e70 |
/* NOTE: hfp_get_num_free_contexts is a function that must
|
|
Packit |
961e70 |
be callable before the hal instance is initialized. */
|
|
Packit |
961e70 |
int (*hfp_get_num_free_contexts)(int unit);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Context open includes opening the device file, and get hw params. */
|
|
Packit |
961e70 |
int (*hfp_context_open)(int unit,
|
|
Packit |
961e70 |
int port,
|
|
Packit |
961e70 |
uint64_t open_timeout,
|
|
Packit |
961e70 |
psm2_ep_t ep,
|
|
Packit |
961e70 |
psm2_uuid_t const job_key,
|
|
Packit |
961e70 |
psmi_context_t *psm_ctxt,
|
|
Packit |
961e70 |
uint32_t cap_mask,
|
|
Packit |
961e70 |
unsigned retryCnt);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Close the context, including the device file. */
|
|
Packit |
961e70 |
int (*hfp_close_context)(psmi_hal_hw_context *);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Given a unit, port and index, return an error, or the corresponding pkey for
|
|
Packit |
961e70 |
the index as programmed by the SM */
|
|
Packit |
961e70 |
/* Returns an int, so -1 indicates an error. */
|
|
Packit |
961e70 |
int (*hfp_get_port_index2pkey)(int unit, int port, int index);
|
|
Packit |
961e70 |
int (*hfp_get_cc_settings_bin)(int unit, int port, char *ccabuf, size_t len_ccabuf);
|
|
Packit |
961e70 |
int (*hfp_get_cc_table_bin)(int unit, int port, uint16_t **cctp);
|
|
Packit |
961e70 |
int (*hfp_get_port_lmc)(int unit, int port);
|
|
Packit |
961e70 |
int (*hfp_get_port_rate)(int unit, int port);
|
|
Packit |
961e70 |
int (*hfp_get_port_sl2sc)(int unit, int port,int sl);
|
|
Packit Service |
7ed5cc |
int (*hfp_get_sc2vl_map)(struct ips_proto *proto);
|
|
Packit |
961e70 |
int (*hfp_set_pkey)(psmi_hal_hw_context, uint16_t);
|
|
Packit |
961e70 |
int (*hfp_poll_type)(uint16_t poll_type, psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_port_lid)(int unit, int port);
|
|
Packit |
961e70 |
int (*hfp_get_port_gid)(int unit, int port, uint64_t *hi, uint64_t *lo);
|
|
Packit |
961e70 |
int (*hfp_free_tid)(psmi_hal_hw_context, uint64_t tidlist, uint32_t tidcnt);
|
|
Packit |
961e70 |
int (*hfp_get_tidcache_invalidation)(psmi_hal_hw_context, uint64_t tidlist, uint32_t *tidcnt);
|
|
Packit |
961e70 |
int (*hfp_update_tid)(psmi_hal_hw_context, uint64_t vaddr, uint32_t *length,
|
|
Packit |
961e70 |
uint64_t tidlist, uint32_t *tidcnt,
|
|
Packit |
961e70 |
uint16_t flags);
|
|
Packit |
961e70 |
/* Initiate a DMA. Intrinsically specifies a DMA slot to use. */
|
|
Packit |
961e70 |
int (*hfp_writev)(const struct iovec *iov, int iovcnt, struct ips_epinfo *, psmi_hal_hw_context);
|
|
Packit |
961e70 |
/* Updates PSM from h/w on DMA completions: */
|
|
Packit |
961e70 |
int (*hfp_get_sdma_ring_slot_status)(int slotIdx, psmi_hal_sdma_ring_slot_status *, uint32_t *errorCode, psmi_hal_hw_context);
|
|
Packit |
961e70 |
/* Returns > 0 if the specified slots is available. 0 if not available
|
|
Packit |
961e70 |
and a negative value if an error occurred. */
|
|
Packit |
961e70 |
int (*hfp_dma_slot_available)(int slotidx, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Start of receive packet functions. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Getter for cl q head indexes: */
|
|
Packit |
961e70 |
psmi_hal_cl_idx (*hfp_get_cl_q_head_index)(psmi_hal_cl_q,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Getter for cl q tail indexes: */
|
|
Packit |
961e70 |
psmi_hal_cl_idx (*hfp_get_cl_q_tail_index)(psmi_hal_cl_q,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Setter for cl q head indexes: */
|
|
Packit |
961e70 |
void (*hfp_set_cl_q_head_index)(psmi_hal_cl_idx,
|
|
Packit |
961e70 |
psmi_hal_cl_q,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Setter for cl q tail indexes: */
|
|
Packit |
961e70 |
void (*hfp_set_cl_q_tail_index)(psmi_hal_cl_idx,
|
|
Packit |
961e70 |
psmi_hal_cl_q,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Indicate whether the cl q is empty.
|
|
Packit |
961e70 |
When this returns > 0 the cl q is empty.
|
|
Packit |
961e70 |
When this returns == 0, the cl q is NOT empty (there are packets in the
|
|
Packit |
961e70 |
circular list that are available to receive).
|
|
Packit |
961e70 |
When this returns < 0, an error occurred.
|
|
Packit |
961e70 |
the parameter should correspond to the head index of the
|
|
Packit |
961e70 |
cl q circular list. */
|
|
Packit |
961e70 |
int (*hfp_cl_q_empty)(psmi_hal_cl_idx head_idx,
|
|
Packit |
961e70 |
psmi_hal_cl_q,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Receive the raw rhf, decompose it, and then receive the ips_message_hdr. */
|
|
Packit |
961e70 |
int (*hfp_get_receive_event)(psmi_hal_cl_idx head_idx, psmi_hal_hw_context,
|
|
Packit |
961e70 |
struct ips_recvhdrq_event *);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Deliver an eager buffer given the index.
|
|
Packit |
961e70 |
If the index does not refer to a current egr buffer, hfp_get_egr_buff() returns
|
|
Packit |
961e70 |
NULL. */
|
|
Packit |
961e70 |
void *(*hfp_get_egr_buff)(psmi_hal_cl_idx, psmi_hal_cl_q, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Retire the given head idx of the header q, and change *head_idx to point to the next
|
|
Packit |
961e70 |
entry, lastly set *empty to indicate whether the headerq is empty at the new
|
|
Packit |
961e70 |
head_idx. */
|
|
Packit |
961e70 |
int (*hfp_retire_hdr_q_entry)(psmi_hal_cl_idx *head_idx, psmi_hal_cl_q, psmi_hal_hw_context,
|
|
Packit |
961e70 |
uint32_t elemsz, uint32_t elemlast,
|
|
Packit |
961e70 |
int *emptyp);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Returns expected sequence number for RHF. */
|
|
Packit |
961e70 |
int (*hfp_get_rhf_expected_sequence_number)(unsigned int *, psmi_hal_cl_q, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Sets expected sequence number for RHF. */
|
|
Packit |
961e70 |
int (*hfp_set_rhf_expected_sequence_number)(unsigned int, psmi_hal_cl_q, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Checks sequence number from RHF. Returns PSM_HAL_ERROR_OK if the sequence number is good
|
|
Packit |
961e70 |
returns something else if the sequence number is bad. */
|
|
Packit |
961e70 |
int (*hfp_check_rhf_sequence_number)(unsigned int);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Set PBC struct that lies within the extended memory region of SCB */
|
|
Packit |
961e70 |
int (*hfp_set_pbc)(struct ips_proto *proto, struct ips_flow *flow,
|
|
Packit |
961e70 |
uint32_t isCtrlMsg, struct psm_hal_pbc *dest, uint32_t hdrlen,
|
|
Packit |
961e70 |
uint32_t paylen);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Start of tid flow functions. */
|
|
Packit |
961e70 |
int (*hfp_set_tf_valid)(uint32_t, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_set_entry)(uint32_t flowid, uint32_t genval,
|
|
Packit |
961e70 |
uint32_t seqnum, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_reset)(psmi_hal_hw_context, uint32_t flowid, uint32_t genval,
|
|
Packit |
961e70 |
uint32_t seqnum);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get)(uint32_t flowid, uint64_t *ptf, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* hfp_tidflow_get_hw is identical to hfp_tidflow_get(), but guarantees to get
|
|
Packit |
961e70 |
its information fron h/w, and not from cached values, but may be significantly
|
|
Packit |
961e70 |
slower than hfp_tidflow_get(), so should be used for debug only. */
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_hw)(uint32_t flowid, uint64_t *ptf, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_seqnum)(uint64_t val, uint32_t *pseqn);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_genval)(uint64_t val, uint32_t *pgv);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_check_update_pkt_seq)(void *vpprotoexp
|
|
Packit |
961e70 |
/* actually a:
|
|
Packit |
961e70 |
struct ips_protoexp *protoexp */,
|
|
Packit |
961e70 |
psmi_seqnum_t sequence_num,
|
|
Packit |
961e70 |
void *vptidrecvc
|
|
Packit |
961e70 |
/* actually a:
|
|
Packit |
961e70 |
struct ips_tid_recv_desc *tidrecvc */,
|
|
Packit |
961e70 |
struct ips_message_header *p_hdr,
|
|
Packit |
961e70 |
void (*ips_protoexp_do_tf_generr)
|
|
Packit |
961e70 |
(void *vpprotoexp
|
|
Packit |
961e70 |
/* actually a:
|
|
Packit |
961e70 |
struct ips_protoexp *protoexp */,
|
|
Packit |
961e70 |
void *vptidrecvc
|
|
Packit |
961e70 |
/* actually a:
|
|
Packit |
961e70 |
struct ips_tid_recv_desc *tidrecvc */,
|
|
Packit |
961e70 |
struct ips_message_header *p_hdr),
|
|
Packit |
961e70 |
void (*ips_protoexp_do_tf_seqerr)
|
|
Packit |
961e70 |
(void *vpprotoexp
|
|
Packit |
961e70 |
/* actually a:
|
|
Packit |
961e70 |
struct ips_protoexp *protoexp */,
|
|
Packit |
961e70 |
void *vptidrecvc
|
|
Packit |
961e70 |
/* actually a:
|
|
Packit |
961e70 |
struct ips_tid_recv_desc *tidrecvc */,
|
|
Packit |
961e70 |
struct ips_message_header *p_hdr)
|
|
Packit |
961e70 |
);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_flowvalid)(uint64_t val, uint32_t *pfv);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_enabled)(uint64_t val, uint32_t *penabled);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_keep_after_seqerr)(uint64_t val, uint32_t *pkase);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_keep_on_generr)(uint64_t val, uint32_t *pkoge);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_keep_payload_on_generr)(uint64_t val, uint32_t *pkpoge);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* For hfp_tidflow_get_seqmismatch and hfp_tidflow_get_genmismatch, if
|
|
Packit |
961e70 |
val was obtained from hfp_tidflow_get_hw(), then these will be valid
|
|
Packit |
961e70 |
but, if val was obtained from hfp_tidflow_get(), then these will
|
|
Packit |
961e70 |
always return 0. */
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_seqmismatch)(uint64_t val, uint32_t *psmm);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_tidflow_get_genmismatch)(uint64_t val, uint32_t *pgmm);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* End of tid flow functions. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* End of receive functions. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_forward_packet_to_subcontext)(struct ips_writehdrq *writeq,
|
|
Packit |
961e70 |
struct ips_recvhdrq_event *rcv_ev,
|
|
Packit |
961e70 |
uint32_t subcontext,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_subcontext_ureg_get)(ptl_t *ptl,
|
|
Packit |
961e70 |
struct ips_subcontext_ureg **uregp,
|
|
Packit |
961e70 |
psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_get_hfi_event_bits) (uint64_t *event_bits, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_ack_hfi_event) (uint64_t ack_bits, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_hfi_reset_context) (psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
uint64_t (*hfp_get_hw_status) (psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_get_hw_status_freezemsg) (volatile char** msg, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
uint16_t (*hfp_get_user_major_bldtime_version) (void);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
uint16_t (*hfp_get_user_minor_bldtime_version) (void);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
uint16_t (*hfp_get_user_major_runtime_version) (psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
uint16_t (*hfp_get_user_minor_runtime_version) (psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_set_pio_size)(uint32_t, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_set_effective_mtu)(uint32_t, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_spio_init)(const psmi_context_t *context,
|
|
Packit |
961e70 |
struct ptl *ptl, void **ctrl);
|
|
Packit |
961e70 |
int (*hfp_spio_fini)(void **ctrl, psmi_hal_hw_context);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_spio_transfer_frame)(struct ips_proto *proto,
|
|
Packit |
961e70 |
struct ips_flow *flow, struct psm_hal_pbc *pbc,
|
|
Packit |
961e70 |
uint32_t *payload, uint32_t length,
|
|
Packit |
961e70 |
uint32_t isCtrlMsg, uint32_t cksum_valid,
|
|
Packit |
961e70 |
uint32_t cksum, psmi_hal_hw_context
|
|
Packit |
961e70 |
#ifdef PSM_CUDA
|
|
Packit |
961e70 |
, uint32_t is_cuda_payload
|
|
Packit |
961e70 |
#endif
|
|
Packit |
961e70 |
);
|
|
Packit |
961e70 |
int (*hfp_spio_process_events)(const struct ptl *ptl);
|
|
Packit |
961e70 |
int (*hfp_get_node_id)(int unit, int *nodep);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
int (*hfp_get_bthqp)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_context)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
uint64_t (*hfp_get_gid_lo)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
uint64_t (*hfp_get_gid_hi)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_hfi_type)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_jkey)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_lid)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_pio_size)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_port_num)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_rx_egr_tid_cnt)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_rx_hdr_q_cnt)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_rx_hdr_q_ent_size)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_sdma_req_size)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_sdma_ring_size)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_subctxt)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_subctxt_cnt)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_tid_exp_cnt)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_unit_id)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_fd)(psmi_hal_hw_context);
|
|
Packit |
961e70 |
int (*hfp_get_pio_stall_cnt)(psmi_hal_hw_context, uint64_t **);
|
|
Packit |
961e70 |
};
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* This is the current psmi_hal_instance, or, NULL if not initialized.
|
|
Packit |
961e70 |
The HIC should not modify the contents of the HAL instance directly. */
|
|
Packit |
961e70 |
extern psmi_hal_instance_t *psmi_hal_current_hal_instance;
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Declare functions called by the HAL INSTANCES. */
|
|
Packit |
961e70 |
void psmi_hal_register_instance(psmi_hal_instance_t *);
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Declare functions that are called by the HIC: */
|
|
Packit |
961e70 |
/* All of these functions return a negative int value to
|
|
Packit |
961e70 |
indicate failure, or >= 0 for success. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
/* Chooses one of the the psmi_hal_instances that have been
|
|
Packit |
961e70 |
registered and then initializes it.
|
|
Packit |
961e70 |
Returns: -PSM_HAL_ERROR_NOT_REGISTERED_HI if no HAL
|
|
Packit |
961e70 |
INSTANCES are registered, or PSM_HAL_ERROR_INIT_FAILED when
|
|
Packit |
961e70 |
another failure has occured during initialization. */
|
|
Packit |
961e70 |
int psmi_hal_initialize(void);
|
|
Packit |
961e70 |
|
|
Packit Service |
7ed5cc |
int psmi_hal_finalize(void);
|
|
Packit |
961e70 |
|
|
Packit Service |
7ed5cc |
#include "psm2_hal_inlines_d.h"
|
|
Packit |
961e70 |
|
|
Packit Service |
7ed5cc |
enum psmi_hal_pre_init_cache_func_krnls
|
|
Packit Service |
7ed5cc |
{
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_num_units,
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_num_ports,
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_unit_active,
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_port_active,
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_num_contexts,
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_num_free_contexts,
|
|
Packit Service |
7ed5cc |
psmi_hal_pre_init_cache_func_get_default_pkey,
|
|
Packit Service |
7ed5cc |
};
|
|
Packit |
961e70 |
|
|
Packit Service |
7ed5cc |
int psmi_hal_pre_init_cache_func(enum psmi_hal_pre_init_cache_func_krnls k, ...);
|
|
Packit Service |
7ed5cc |
|
|
Packit Service |
7ed5cc |
#define PSMI_HAL_DISPATCH_PI(KERNEL,...) ( psmi_hal_pre_init_cache_func(psmi_hal_pre_init_cache_func_ ## KERNEL , ##__VA_ARGS__ ) )
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#if PSMI_HAL_INST_CNT == 1
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSMI_HAL_DISPATCH(KERNEL,...) ( PSMI_HAL_CAT_INL_SYM(KERNEL) ( __VA_ARGS__ ) )
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#else
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSMI_HAL_DISPATCH(KERNEL,...) ( psmi_hal_current_hal_instance->hfp_ ## KERNEL ( __VA_ARGS__ ))
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#endif
|
|
Packit |
961e70 |
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_num_units_(...) PSMI_HAL_DISPATCH_PI(get_num_units,##__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_num_ports_(...) PSMI_HAL_DISPATCH_PI(get_num_ports,##__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_unit_active(...) PSMI_HAL_DISPATCH_PI(get_unit_active,__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_port_active(...) PSMI_HAL_DISPATCH_PI(get_port_active,__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_num_contexts(...) PSMI_HAL_DISPATCH_PI(get_num_contexts,__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_num_free_contexts(...) PSMI_HAL_DISPATCH_PI(get_num_free_contexts,__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_default_pkey(...) PSMI_HAL_DISPATCH_PI(get_default_pkey,##__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_context_open(...) PSMI_HAL_DISPATCH(context_open,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_close_context(...) PSMI_HAL_DISPATCH(close_context,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_index2pkey(...) PSMI_HAL_DISPATCH(get_port_index2pkey,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_cc_settings_bin(...) PSMI_HAL_DISPATCH(get_cc_settings_bin,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_cc_table_bin(...) PSMI_HAL_DISPATCH(get_cc_table_bin,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_lmc(...) PSMI_HAL_DISPATCH(get_port_lmc,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_rate(...) PSMI_HAL_DISPATCH(get_port_rate,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_sl2sc(...) PSMI_HAL_DISPATCH(get_port_sl2sc,__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_get_sc2vl_map(...) PSMI_HAL_DISPATCH(get_sc2vl_map, __VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_pkey(...) PSMI_HAL_DISPATCH(set_pkey,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_poll_type(...) PSMI_HAL_DISPATCH(poll_type,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_lid(...) PSMI_HAL_DISPATCH(get_port_lid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_gid(...) PSMI_HAL_DISPATCH(get_port_gid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_free_tid(...) PSMI_HAL_DISPATCH(free_tid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_tidcache_invalidation(...) PSMI_HAL_DISPATCH(get_tidcache_invalidation,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_update_tid(...) PSMI_HAL_DISPATCH(update_tid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_writev(...) PSMI_HAL_DISPATCH(writev,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_dma_slot_available(...) PSMI_HAL_DISPATCH(dma_slot_available,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_sdma_ring_slot_status(...) PSMI_HAL_DISPATCH(get_sdma_ring_slot_status,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_cl_q_head_index(...) PSMI_HAL_DISPATCH(get_cl_q_head_index,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_cl_q_tail_index(...) PSMI_HAL_DISPATCH(get_cl_q_tail_index,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_cl_q_head_index(...) PSMI_HAL_DISPATCH(set_cl_q_head_index,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_cl_q_tail_index(...) PSMI_HAL_DISPATCH(set_cl_q_tail_index,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_cl_q_empty(...) PSMI_HAL_DISPATCH(cl_q_empty,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_receive_event(...) PSMI_HAL_DISPATCH(get_receive_event,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_egr_buff(...) PSMI_HAL_DISPATCH(get_egr_buff,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_retire_hdr_q_entry(...) PSMI_HAL_DISPATCH(retire_hdr_q_entry,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_rhf_expected_sequence_number(...) PSMI_HAL_DISPATCH(get_rhf_expected_sequence_number,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_rhf_expected_sequence_number(...) PSMI_HAL_DISPATCH(set_rhf_expected_sequence_number,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_check_rhf_sequence_number(...) PSMI_HAL_DISPATCH(check_rhf_sequence_number,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_pbc(...) PSMI_HAL_DISPATCH(set_pbc,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_set_entry(...) PSMI_HAL_DISPATCH(tidflow_set_entry,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_reset(...) PSMI_HAL_DISPATCH(tidflow_reset,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get(...) PSMI_HAL_DISPATCH(tidflow_get,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_hw(...) PSMI_HAL_DISPATCH(tidflow_get_hw,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_seqnum(...) PSMI_HAL_DISPATCH(tidflow_get_seqnum,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_genval(...) PSMI_HAL_DISPATCH(tidflow_get_genval,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_check_update_pkt_seq(...) PSMI_HAL_DISPATCH(tidflow_check_update_pkt_seq,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_flowvalid(...) PSMI_HAL_DISPATCH(tidflow_get_flowvalid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_enabled(...) PSMI_HAL_DISPATCH(tidflow_get_enabled,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_keep_after_seqerr(...) PSMI_HAL_DISPATCH(tidflow_get_keep_after_seqerr,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_keep_on_generr(...) PSMI_HAL_DISPATCH(tidflow_get_keep_on_generr,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_keep_payload_on_generr(...) PSMI_HAL_DISPATCH(tidflow_get_keep_payload_on_generr,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_seqmismatch(...) PSMI_HAL_DISPATCH(tidflow_get_seqmismatch,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_tidflow_get_genmismatch(...) PSMI_HAL_DISPATCH(tidflow_get_genmismatch,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_forward_packet_to_subcontext(...) PSMI_HAL_DISPATCH(forward_packet_to_subcontext,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_subcontext_ureg_get(...) PSMI_HAL_DISPATCH(subcontext_ureg_get,__VA_ARGS__)
|
|
Packit Service |
7ed5cc |
#define psmi_hal_finalize_(...) PSMI_HAL_DISPATCH(finalize_,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_hfi_event_bits(...) PSMI_HAL_DISPATCH(get_hfi_event_bits,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_ack_hfi_event(...) PSMI_HAL_DISPATCH(ack_hfi_event,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_hfi_reset_context(...) PSMI_HAL_DISPATCH(hfi_reset_context,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_hw_status(...) PSMI_HAL_DISPATCH(get_hw_status,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_hw_status_freezemsg(...) PSMI_HAL_DISPATCH(get_hw_status_freezemsg,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_user_major_bldtime_version(...) PSMI_HAL_DISPATCH(get_user_major_bldtime_version,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_user_minor_bldtime_version(...) PSMI_HAL_DISPATCH(get_user_minor_bldtime_version,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_user_major_runtime_version(...) PSMI_HAL_DISPATCH(get_user_major_runtime_version,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_user_minor_runtime_version(...) PSMI_HAL_DISPATCH(get_user_minor_runtime_version,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_pio_size(...) PSMI_HAL_DISPATCH(set_pio_size,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_effective_mtu(...) PSMI_HAL_DISPATCH(set_effective_mtu,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_set_tf_valid(...) PSMI_HAL_DISPATCH(set_tf_valid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_spio_init(...) PSMI_HAL_DISPATCH(spio_init,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_spio_fini(...) PSMI_HAL_DISPATCH(spio_fini,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_spio_transfer_frame(...) PSMI_HAL_DISPATCH(spio_transfer_frame,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_spio_process_events(...) PSMI_HAL_DISPATCH(spio_process_events,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_node_id(...) PSMI_HAL_DISPATCH(get_node_id,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_bthqp(...) PSMI_HAL_DISPATCH(get_bthqp,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_context(...) PSMI_HAL_DISPATCH(get_context,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_gid_lo(...) PSMI_HAL_DISPATCH(get_gid_lo,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_gid_hi(...) PSMI_HAL_DISPATCH(get_gid_hi,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_hfi_type(...) PSMI_HAL_DISPATCH(get_hfi_type,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_jkey(...) PSMI_HAL_DISPATCH(get_jkey,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_lid(...) PSMI_HAL_DISPATCH(get_lid,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_pio_size(...) PSMI_HAL_DISPATCH(get_pio_size,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_port_num(...) PSMI_HAL_DISPATCH(get_port_num,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_rx_egr_tid_cnt(...) PSMI_HAL_DISPATCH(get_rx_egr_tid_cnt,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_rx_hdr_q_cnt(...) PSMI_HAL_DISPATCH(get_rx_hdr_q_cnt,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_rx_hdr_q_ent_size(...) PSMI_HAL_DISPATCH(get_rx_hdr_q_ent_size,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_sdma_req_size(...) PSMI_HAL_DISPATCH(get_sdma_req_size,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_sdma_ring_size(...) PSMI_HAL_DISPATCH(get_sdma_ring_size,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_subctxt(...) PSMI_HAL_DISPATCH(get_subctxt,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_subctxt_cnt(...) PSMI_HAL_DISPATCH(get_subctxt_cnt,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_tid_exp_cnt(...) PSMI_HAL_DISPATCH(get_tid_exp_cnt,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_unit_id(...) PSMI_HAL_DISPATCH(get_unit_id,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_fd(...) PSMI_HAL_DISPATCH(get_fd,__VA_ARGS__)
|
|
Packit |
961e70 |
#define psmi_hal_get_pio_stall_cnt(...) PSMI_HAL_DISPATCH(get_pio_stall_cnt,__VA_ARGS__)
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSMI_HAL_NBITS_TO_MASK(NBITS) ((uint64_t)((1 << NBITS)-1))
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_UNPACK(A,NAME) ((uint32_t)((A.decomposed_rhf >> \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ ## NAME ## _SHFTC \
|
|
Packit |
961e70 |
) & PSMI_HAL_NBITS_TO_MASK( \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ ## NAME ## _NBITS)))
|
|
Packit |
961e70 |
/* define constants for the decomposed rhf error masks.
|
|
Packit |
961e70 |
Note how each of these are shifted by the ALL_ERR_FLAGS shift count. */
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_MASK_64(NAME) ((uint64_t)(((PSMI_HAL_NBITS_TO_MASK( \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ERR_ ## NAME ## _NBITS) << \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ERR_ ## NAME ## _SHFTC ))))
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_MASK_32(NAME) ((uint32_t)(PSMI_HAL_RHF_ERR_MASK_64(NAME) >> \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ALL_ERR_FLAGS_SHFTC))
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_ICRC PSMI_HAL_RHF_ERR_MASK_32(ICRC)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_ECC PSMI_HAL_RHF_ERR_MASK_32(ECC)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_LEN PSMI_HAL_RHF_ERR_MASK_32(LEN)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TID PSMI_HAL_RHF_ERR_MASK_32(TID)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TFGEN PSMI_HAL_RHF_ERR_MASK_32(TFGEN)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_TFSEQ PSMI_HAL_RHF_ERR_MASK_32(TFSEQ)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_RTE PSMI_HAL_RHF_ERR_MASK_32(RTE)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_DC PSMI_HAL_RHF_ERR_MASK_32(DC)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_DCUN PSMI_HAL_RHF_ERR_MASK_32(DCUN)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_ERR_KHDRLEN PSMI_HAL_RHF_ERR_MASK_32(KHDRLEN)
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_use_egr_buff(A) PSMI_HAL_RHF_UNPACK(A,USE_EGR_BUFF)
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_egr_buff_index(A) PSMI_HAL_RHF_UNPACK(A,EGR_BUFF_IDX)
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_egr_buff_offset(A) PSMI_HAL_RHF_UNPACK(A,EGR_BUFF_OFF)
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_packet_length(A) (PSMI_HAL_RHF_UNPACK(A,PKT_LEN)<<2)
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_all_err_flags(A) PSMI_HAL_RHF_UNPACK(A,ALL_ERR_FLAGS)
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_seq(A) PSMI_HAL_RHF_UNPACK(A,SEQ)
|
|
Packit |
961e70 |
#define psmi_hal_rhf_get_rx_type(A) PSMI_HAL_RHF_UNPACK(A,RX_TYPE)
|
|
Packit |
961e70 |
#define PSMI_HAL_RHF_PACK(NAME,VALUE) ((uint64_t)((((uint64_t)(VALUE)) & \
|
|
Packit |
961e70 |
PSMI_HAL_NBITS_TO_MASK( \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ ## NAME ## _NBITS \
|
|
Packit |
961e70 |
)) << ( \
|
|
Packit |
961e70 |
PSMI_HAL_RHF_ ## NAME ## _SHFTC )))
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define psmi_hal_get_hal_instance_type() psmi_hal_current_hal_instance->type
|
|
Packit |
961e70 |
#define psmi_hal_get_hal_instance_description() psmi_hal_current_hal_instance->description
|
|
Packit |
961e70 |
#define psmi_hal_get_hfi_name() psmi_hal_current_hal_instance->hfi_name
|
|
Packit |
961e70 |
#define psmi_hal_get_num_units() psmi_hal_current_hal_instance->params.num_units
|
|
Packit |
961e70 |
#define psmi_hal_get_num_ports() psmi_hal_current_hal_instance->params.num_ports
|
|
Packit |
961e70 |
#define psmi_hal_get_cap_mask() psmi_hal_current_hal_instance->params.cap_mask
|
|
Packit |
961e70 |
#define psmi_hal_set_cap_mask(NEW_MASK) (psmi_hal_current_hal_instance->params.cap_mask = (NEW_MASK))
|
|
Packit |
961e70 |
#define psmi_hal_add_cap(CAP) (psmi_hal_current_hal_instance->params.cap_mask |= (CAP))
|
|
Packit |
961e70 |
#define psmi_hal_sub_cap(CAP) (psmi_hal_current_hal_instance->params.cap_mask &= (~(CAP)))
|
|
Packit |
961e70 |
#define psmi_hal_has_cap(CAP) ((psmi_hal_get_cap_mask() & (CAP)) == (CAP))
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#define psmi_hal_get_sw_status() psmi_hal_current_hal_instance->params.sw_status
|
|
Packit |
961e70 |
#define psmi_hal_set_sw_status(NEW_STATUS) (psmi_hal_current_hal_instance->params.sw_status = (NEW_STATUS))
|
|
Packit |
961e70 |
#define psmi_hal_add_sw_status(STATUS) (psmi_hal_current_hal_instance->params.sw_status |= (STATUS))
|
|
Packit |
961e70 |
#define psmi_hal_sub_sw_status(STATUS) (psmi_hal_current_hal_instance->params.sw_status &= (~(STATUS)))
|
|
Packit |
961e70 |
#define psmi_hal_has_sw_status(STATUS) ((psmi_hal_get_sw_status() & (STATUS)) == (STATUS))
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#include "psm2_hal_inlines_i.h"
|
|
Packit |
961e70 |
|
|
Packit |
961e70 |
#endif /* #ifndef __PSM2_HAL_H__ */
|