123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Marvell Fibre Channel HBA Driver
- * Copyright (c) 2021 Marvell
- */
- #ifndef __QLA_EDIF_H
- #define __QLA_EDIF_H
- struct qla_scsi_host;
- #define EDIF_APP_ID 0x73730001
- #define EDIF_MAX_INDEX 2048
- struct edif_sa_ctl {
- struct list_head next;
- uint16_t del_index;
- uint16_t index;
- uint16_t slot;
- uint16_t flags;
- #define EDIF_SA_CTL_FLG_REPL BIT_0
- #define EDIF_SA_CTL_FLG_DEL BIT_1
- #define EDIF_SA_CTL_FLG_CLEANUP_DEL BIT_4
- // Invalidate Index bit and mirrors QLA_SA_UPDATE_FLAGS_DELETE
- unsigned long state;
- #define EDIF_SA_CTL_USED 1 /* Active Sa update */
- #define EDIF_SA_CTL_PEND 2 /* Waiting for slot */
- #define EDIF_SA_CTL_REPL 3 /* Active Replace and Delete */
- #define EDIF_SA_CTL_DEL 4 /* Delete Pending */
- struct fc_port *fcport;
- struct bsg_job *bsg_job;
- struct qla_sa_update_frame sa_frame;
- };
- enum enode_flags_t {
- ENODE_ACTIVE = 0x1,
- };
- struct pur_core {
- enum enode_flags_t enode_flags;
- spinlock_t pur_lock;
- struct list_head head;
- };
- enum db_flags_t {
- EDB_ACTIVE = BIT_0,
- };
- #define DBELL_ACTIVE(_v) (_v->e_dbell.db_flags & EDB_ACTIVE)
- #define DBELL_INACTIVE(_v) (!(_v->e_dbell.db_flags & EDB_ACTIVE))
- struct edif_dbell {
- enum db_flags_t db_flags;
- spinlock_t db_lock;
- struct list_head head;
- struct bsg_job *dbell_bsg_job;
- unsigned long bsg_expire;
- };
- #define SA_UPDATE_IOCB_TYPE 0x71 /* Security Association Update IOCB entry */
- struct sa_update_28xx {
- uint8_t entry_type; /* Entry type. */
- uint8_t entry_count; /* Entry count. */
- uint8_t sys_define; /* System Defined. */
- uint8_t entry_status; /* Entry Status. */
- uint32_t handle; /* IOCB System handle. */
- union {
- __le16 nport_handle; /* in: N_PORT handle. */
- __le16 comp_sts; /* out: completion status */
- #define CS_PORT_EDIF_UNAVAIL 0x28
- #define CS_PORT_EDIF_LOGOUT 0x29
- #define CS_PORT_EDIF_SUPP_NOT_RDY 0x64
- #define CS_PORT_EDIF_INV_REQ 0x66
- } u;
- uint8_t vp_index;
- uint8_t reserved_1;
- uint8_t port_id[3];
- uint8_t flags;
- #define SA_FLAG_INVALIDATE BIT_0
- #define SA_FLAG_TX BIT_1 // 1=tx, 0=rx
- uint8_t sa_key[32]; /* 256 bit key */
- __le32 salt;
- __le32 spi;
- uint8_t sa_control;
- #define SA_CNTL_ENC_FCSP (1 << 3)
- #define SA_CNTL_ENC_OPD (2 << 3)
- #define SA_CNTL_ENC_MSK (3 << 3) // mask bits 4,3
- #define SA_CNTL_AES_GMAC (1 << 2)
- #define SA_CNTL_KEY256 (2 << 0)
- #define SA_CNTL_KEY128 0
- uint8_t reserved_2;
- __le16 sa_index; // reserve: bit 11-15
- __le16 old_sa_info;
- __le16 new_sa_info;
- };
- #define NUM_ENTRIES 256
- #define PUR_GET 1
- struct dinfo {
- int nodecnt;
- int lstate;
- };
- struct pur_ninfo {
- port_id_t pur_sid;
- port_id_t pur_did;
- uint8_t vp_idx;
- short pur_bytes_rcvd;
- unsigned short pur_nphdl;
- unsigned int pur_rx_xchg_address;
- };
- struct purexevent {
- struct pur_ninfo pur_info;
- unsigned char *msgp;
- u32 msgp_len;
- };
- #define N_UNDEF 0
- #define N_PUREX 1
- struct enode {
- struct list_head list;
- struct dinfo dinfo;
- uint32_t ntype;
- union {
- struct purexevent purexinfo;
- } u;
- };
- #define RX_ELS_SIZE (roundup(sizeof(struct enode) + ELS_MAX_PAYLOAD, SMP_CACHE_BYTES))
- #define EDIF_SESSION_DOWN(_s) \
- (qla_ini_mode_enabled(_s->vha) && (_s->disc_state == DSC_DELETE_PEND || \
- _s->disc_state == DSC_DELETED || \
- !_s->edif.app_sess_online))
- #define EDIF_NEGOTIATION_PENDING(_fcport) \
- (DBELL_ACTIVE(_fcport->vha) && \
- (_fcport->disc_state == DSC_LOGIN_AUTH_PEND))
- #define EDIF_SESS_DELETE(_s) \
- (qla_ini_mode_enabled(_s->vha) && (_s->disc_state == DSC_DELETE_PEND || \
- _s->disc_state == DSC_DELETED))
- #endif /* __QLA_EDIF_H */
|