Emulex Logo
OneCoreā„¢ Storage SDK Release 11.2
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sli4_fc.c File Reference
#include "ocs_os.h"
#include "sli4_fc.h"

Go to the source code of this file.

Detailed Description

Implementation of Fibre Channel SLI-4 functions.

Definition in file sli4_fc.c.

Data Structures

struct  sli4_tcm_parity_event_t
 

Functions

int32_t sli_cmd_fcoe_wq_create (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *qmem, uint16_t cq_id, uint16_t ulp)
 Write an FCOE_WQ_CREATE command. More...
 
int32_t sli_cmd_fcoe_wq_create_v1 (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *qmem, uint16_t cq_id, uint16_t ignored)
 Write an FCOE_WQ_CREATE_V1 command. More...
 
int32_t sli_cmd_fcoe_wq_destroy (sli4_t *sli4, void *buf, size_t size, uint16_t wq_id)
 Write an FCOE_WQ_DESTROY command. More...
 
int32_t sli_cmd_fcoe_post_sgl_pages (sli4_t *sli4, void *buf, size_t size, uint16_t xri, uint32_t xri_count, ocs_dma_t *page0[], ocs_dma_t *page1[], ocs_dma_t *dma)
 Write an FCOE_POST_SGL_PAGES command. More...
 
int32_t sli_cmd_fcoe_rq_create (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *qmem, uint16_t cq_id, uint16_t ulp, uint16_t buffer_size)
 Write an FCOE_RQ_CREATE command. More...
 
int32_t sli_cmd_fcoe_rq_create_v1 (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *qmem, uint16_t cq_id, uint16_t ulp, uint16_t buffer_size)
 Write an FCOE_RQ_CREATE_V1 command. More...
 
int32_t sli_cmd_fcoe_rq_destroy (sli4_t *sli4, void *buf, size_t size, uint16_t rq_id)
 Write an FCOE_RQ_DESTROY command. More...
 
int32_t sli_cmd_fcoe_read_fcf_table (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *dma, uint16_t index)
 Write an FCOE_READ_FCF_TABLE command. More...
 
int32_t sli_cmd_fcoe_post_hdr_templates (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *dma, uint16_t rpi, ocs_dma_t *payload_dma)
 Write an FCOE_POST_HDR_TEMPLATES command. More...
 
int32_t sli_cmd_fcoe_rediscover_fcf (sli4_t *sli4, void *buf, size_t size, uint16_t index)
 
int32_t sli_abort_wqe (sli4_t *sli4, void *buf, size_t size, sli4_abort_type_e type, uint32_t send_abts, uint32_t ids, uint32_t mask, uint16_t tag, uint16_t cq_id)
 Write an ABORT_WQE work queue entry. More...
 
int32_t sli_els_request64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint8_t req_type, uint32_t req_len, uint32_t max_rsp_len, uint8_t timeout, uint16_t xri, uint16_t tag, uint16_t cq_id, ocs_remote_node_t *rnode)
 Write an ELS_REQUEST64_WQE work queue entry. More...
 
int32_t sli_fcp_icmnd64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint16_t xri, uint16_t tag, uint16_t cq_id, uint32_t rpi, ocs_remote_node_t *rnode, uint8_t timeout)
 Write an FCP_ICMND64_WQE work queue entry. More...
 
int32_t sli_fcp_iread64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t first_data_sge, uint32_t xfer_len, uint16_t xri, uint16_t tag, uint16_t cq_id, uint32_t rpi, ocs_remote_node_t *rnode, uint8_t dif, uint8_t bs, uint8_t timeout)
 Write an FCP_IREAD64_WQE work queue entry. More...
 
int32_t sli_fcp_iwrite64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t first_data_sge, uint32_t xfer_len, uint32_t first_burst, uint16_t xri, uint16_t tag, uint16_t cq_id, uint32_t rpi, ocs_remote_node_t *rnode, uint8_t dif, uint8_t bs, uint8_t timeout)
 Write an FCP_IWRITE64_WQE work queue entry. More...
 
int32_t sli_fcp_treceive64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t first_data_sge, uint32_t relative_off, uint32_t xfer_len, uint16_t xri, uint16_t tag, uint16_t cq_id, uint16_t xid, uint32_t rpi, ocs_remote_node_t *rnode, uint32_t flags, uint8_t dif, uint8_t bs, uint8_t csctl, uint32_t app_id, uint8_t timer)
 Write an FCP_TRECEIVE64_WQE work queue entry. More...
 
int32_t sli_fcp_cont_treceive64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t first_data_sge, uint32_t relative_off, uint32_t xfer_len, uint16_t xri, uint16_t sec_xri, uint16_t tag, uint16_t cq_id, uint16_t xid, uint32_t rpi, ocs_remote_node_t *rnode, uint32_t flags, uint8_t dif, uint8_t bs, uint8_t csctl, uint32_t app_id, uint8_t timer)
 Write an FCP_CONT_TRECEIVE64_WQE work queue entry. More...
 
int32_t sli_fcp_trsp64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t rsp_len, uint16_t xri, uint16_t tag, uint16_t cq_id, uint16_t xid, uint32_t rpi, ocs_remote_node_t *rnode, uint32_t flags, uint8_t csctl, uint8_t port_owned, uint32_t app_id)
 Write an FCP_TRSP64_WQE work queue entry. More...
 
int32_t sli_fcp_tsend64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t first_data_sge, uint32_t relative_off, uint32_t xfer_len, uint16_t xri, uint16_t tag, uint16_t cq_id, uint16_t xid, uint32_t rpi, ocs_remote_node_t *rnode, uint32_t flags, uint8_t dif, uint8_t bs, uint8_t csctl, uint32_t app_id)
 Write an FCP_TSEND64_WQE work queue entry. More...
 
int32_t sli_gen_request64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *sgl, uint32_t req_len, uint32_t max_rsp_len, uint8_t timeout, uint16_t xri, uint16_t tag, uint16_t cq_id, ocs_remote_node_t *rnode, uint8_t r_ctl, uint8_t type, uint8_t df_ctl)
 Write a GEN_REQUEST64 work queue entry. More...
 
int32_t sli_send_frame_wqe (sli4_t *sli4, void *buf, size_t size, uint8_t sof, uint8_t eof, uint32_t *hdr, ocs_dma_t *payload, uint32_t req_len, uint8_t timeout, uint16_t xri, uint16_t req_tag)
 Write a SEND_FRAME work queue entry. More...
 
int32_t sli_xmit_sequence64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *payload, uint32_t payload_len, uint8_t timeout, uint16_t ox_id, uint16_t xri, uint16_t tag, ocs_remote_node_t *rnode, uint8_t r_ctl, uint8_t type, uint8_t df_ctl)
 Write a XMIT_SEQUENCE64 work queue entry. More...
 
int32_t sli_requeue_xri_wqe (sli4_t *sli4, void *buf, size_t size, uint16_t xri, uint16_t tag, uint16_t cq_id)
 Write a REQUEUE_XRI_WQE work queue entry. More...
 
int32_t sli_xmit_bcast64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *payload, uint32_t payload_len, uint8_t timeout, uint16_t xri, uint16_t tag, uint16_t cq_id, ocs_remote_node_t *rnode, uint8_t r_ctl, uint8_t type, uint8_t df_ctl)
 
int32_t sli_xmit_bls_rsp64_wqe (sli4_t *sli4, void *buf, size_t size, sli_bls_payload_t *payload, uint16_t xri, uint16_t tag, uint16_t cq_id, ocs_remote_node_t *rnode, uint32_t s_id)
 Write an XMIT_BLS_RSP64_WQE work queue entry. More...
 
int32_t sli_xmit_els_rsp64_wqe (sli4_t *sli4, void *buf, size_t size, ocs_dma_t *rsp, uint32_t rsp_len, uint16_t xri, uint16_t tag, uint16_t cq_id, uint16_t ox_id, ocs_remote_node_t *rnode, uint32_t flags, uint32_t s_id)
 Write a XMIT_ELS_RSP64_WQE work queue entry. More...
 
int32_t sli_fc_process_link_state (sli4_t *sli4, void *acqe)
 Process an asynchronous Link State event entry. More...
 
static void sli_fc_log_link_state (sli4_t *sli4, uint8_t state)
 
static void sli_fc_report_link_state (sli4_t *sli4, sli4_port_event_acqe_t *pe_acqe)
 
int32_t sli_fc_process_sli_port_event (sli4_t *sli4, void *acqe)
 Process an asynchronous sli port event. More...
 
static uint32_t sli_fc_decode_port_speed (uint32_t speed_code)
 
static int32_t sli_fc_process_fc_link_attention (sli4_t *sli4, sli4_link_attention_t *link_attn, sli4_link_event_t *event)
 
static void sli_fc_report_trunk_links (sli4_t *sli4, uint8_t ports_active, char *active_ports_str, size_t max_str_len)
 
static void sli_fc_process_trunk_link_attention (sli4_t *sli4, sli4_link_attention_t *link_attn)
 
int32_t sli_fc_process_link_attention (sli4_t *sli4, void *acqe)
 Process an asynchronous Link Attention event entry. More...
 
int32_t sli_fc_cqe_parse (sli4_t *sli4, sli4_queue_t *cq, uint8_t *cqe, sli4_qentry_e *etype, uint16_t *r_id)
 Parse an FC/FCoE work queue CQ entry. More...
 
uint32_t sli_fc_response_length (sli4_t *sli4, uint8_t *cqe)
 Return the ELS/CT response length. More...
 
uint32_t sli_fc_io_length (sli4_t *sli4, uint8_t *cqe)
 Return the FCP IO length. More...
 
int32_t sli_fc_els_did (sli4_t *sli4, uint8_t *cqe, uint32_t *d_id)
 Retrieve the D_ID from the completion. More...
 
uint32_t sli_fc_ext_status (sli4_t *sli4, uint8_t *cqe)
 
int32_t sli_fc_rqe_rqid_and_index (sli4_t *sli4, uint8_t *cqe, uint16_t *rq_id, uint32_t *index)
 Retrieve the RQ index from the completion. More...
 
int32_t sli_fc_process_fcoe (sli4_t *sli4, void *acqe)
 Process an asynchronous FCoE event entry. More...
 
int32_t sli_fc_rq_alloc (sli4_t *sli4, sli4_queue_t *q, uint32_t n_entries, uint32_t buffer_size, sli4_queue_t *cq, uint16_t ulp, uint8_t is_hdr)
 Allocate a receive queue. More...
 
int32_t sli_fc_rq_set_alloc (sli4_t *sli4, uint32_t num_rq_pairs, sli4_queue_t *qs[], uint32_t base_cq_id, uint32_t n_entries, uint32_t header_buffer_size, uint32_t payload_buffer_size, uint16_t ulp)
 Allocate a receive queue set. More...
 
uint32_t sli_fc_get_rpi_requirements (sli4_t *sli4, uint32_t n_rpi)
 Get the RPI resource requirements. More...
 
const char * sli_fc_get_status_string (uint32_t status)
 Return a text string corresponding to a CQE status value. More...
 

Variables

const char * SLI_QNAME []
 
const sli4_reg_t regmap [SLI4_REG_MAX][SLI4_MAX_IF_TYPES]
 Define the mapping of registers to their BAR and offset. More...
 

Function Details

int32_t sli_cmd_fcoe_rediscover_fcf ( sli4_t *  sli4,
void *  buf,
size_t  size,
uint16_t  index 
)

Definition at line 637 of file sli4_fc.c.

static uint32_t sli_fc_decode_port_speed ( uint32_t  speed_code)
static

Definition at line 2326 of file sli4_fc.c.

uint32_t sli_fc_ext_status ( sli4_t *  sli4,
uint8_t *  cqe 
)

Definition at line 2726 of file sli4_fc.c.

static void sli_fc_log_link_state ( sli4_t *  sli4,
uint8_t  state 
)
static

Definition at line 2238 of file sli4_fc.c.

static int32_t sli_fc_process_fc_link_attention ( sli4_t *  sli4,
sli4_link_attention_t *  link_attn,
sli4_link_event_t *  event 
)
static

Definition at line 2356 of file sli4_fc.c.

static void sli_fc_process_trunk_link_attention ( sli4_t *  sli4,
sli4_link_attention_t *  link_attn 
)
static

Definition at line 2428 of file sli4_fc.c.

static void sli_fc_report_link_state ( sli4_t *  sli4,
sli4_port_event_acqe_t *  pe_acqe 
)
static

Definition at line 2260 of file sli4_fc.c.

static void sli_fc_report_trunk_links ( sli4_t *  sli4,
uint8_t  ports_active,
char *  active_ports_str,
size_t  max_str_len 
)
static

Definition at line 2402 of file sli4_fc.c.

int32_t sli_xmit_bcast64_wqe ( sli4_t *  sli4,
void *  buf,
size_t  size,
ocs_dma_t *  payload,
uint32_t  payload_len,
uint8_t  timeout,
uint16_t  xri,
uint16_t  tag,
uint16_t  cq_id,
ocs_remote_node_t *  rnode,
uint8_t  r_ctl,
uint8_t  type,
uint8_t  df_ctl 
)

Definition at line 1903 of file sli4_fc.c.

Variable Details

Define the mapping of registers to their BAR and offset.

Description
Although SLI-4 specification defines a common set of registers, their locations (both BAR and offset) depend on the interface type. This array maps a register enum to an array of BAR/offset pairs indexed by the interface type. For example, to access the bootstrap mailbox register on an interface type 0 device, code can refer to the offset using regmap[SLI4_REG_BMBX][0].offset.

Note: A value of UINT32_MAX for either the register set (rset) or offset (off) indicates an invalid mapping.

Definition at line 126 of file sli4.c.

const char* SLI_QNAME[]

Definition at line 104 of file sli4.c.