#include "qla_def.h"
#include "qla_edif.h"
#include <linux/kthread.h>
#include <linux/vmalloc.h>
#include <linux/delay.h>
#include <scsi/scsi_tcq.h>
static struct edif_sa_index_entry *qla_edif_sadb_find_sa_index_entry(uint16_t nport_handle,
struct list_head *sa_list);
static uint16_t qla_edif_sadb_get_sa_index(fc_port_t *fcport,
struct qla_sa_update_frame *sa_frame);
static int qla_edif_sadb_delete_sa_index(fc_port_t *fcport, uint16_t nport_handle,
uint16_t sa_index);
static int qla_pur_get_pending(scsi_qla_host_t *, fc_port_t *, struct bsg_job *);
struct edb_node { … };
static struct els_sub_cmd { … } sc_str[] = …;
const char *sc_to_str(uint16_t cmd)
{ … }
static struct edb_node *qla_edb_getnext(scsi_qla_host_t *vha)
{ … }
static void qla_edb_node_free(scsi_qla_host_t *vha, struct edb_node *node)
{ … }
static struct edif_list_entry *qla_edif_list_find_sa_index(fc_port_t *fcport,
uint16_t handle)
{ … }
static void qla2x00_sa_replace_iocb_timeout(struct timer_list *t)
{ … }
static int qla_edif_list_add_sa_update_index(fc_port_t *fcport,
uint16_t sa_index, uint16_t handle)
{ … }
static void qla_edif_list_delete_sa_index(fc_port_t *fcport, struct edif_list_entry *entry)
{ … }
int qla_post_sa_replace_work(struct scsi_qla_host *vha,
fc_port_t *fcport, uint16_t nport_handle, struct edif_sa_ctl *sa_ctl)
{ … }
static void
qla_edif_sa_ctl_init(scsi_qla_host_t *vha, struct fc_port *fcport)
{ … }
static int qla_bsg_check(scsi_qla_host_t *vha, struct bsg_job *bsg_job,
fc_port_t *fcport)
{ … }
fc_port_t *
qla2x00_find_fcport_by_pid(scsi_qla_host_t *vha, port_id_t *id)
{ … }
static bool
qla_edif_app_check(scsi_qla_host_t *vha, struct app_id appid)
{ … }
static void
qla_edif_free_sa_ctl(fc_port_t *fcport, struct edif_sa_ctl *sa_ctl,
int index)
{ … }
static void qla_edif_add_sa_index_to_freepool(fc_port_t *fcport, int dir,
uint16_t sa_index)
{ … }
static void __qla2x00_release_all_sadb(struct scsi_qla_host *vha,
struct fc_port *fcport, struct edif_sa_index_entry *entry,
int pdir)
{ … }
void qla2x00_release_all_sadb(struct scsi_qla_host *vha, struct fc_port *fcport)
{ … }
static int qla_delete_n2n_sess_and_wait(scsi_qla_host_t *vha)
{ … }
static int
qla_edif_app_start(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int
qla_edif_app_stop(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int
qla_edif_app_chk_sa_update(scsi_qla_host_t *vha, fc_port_t *fcport,
struct app_plogi_reply *appplogireply)
{ … }
static int
qla_edif_app_authok(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int
qla_edif_app_authfail(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int
qla_edif_app_getfcinfo(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int32_t
qla_edif_app_getstats(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int32_t
qla_edif_ack(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static int qla_edif_consume_dbell(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
static void __qla_edif_dbell_bsg_done(scsi_qla_host_t *vha, struct bsg_job *bsg_job,
u32 delay)
{ … }
static void qla_edif_dbell_bsg_done(scsi_qla_host_t *vha)
{ … }
static int
qla_edif_dbell_bsg(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
int32_t
qla_edif_app_mgmt(struct bsg_job *bsg_job)
{ … }
static struct edif_sa_ctl *
qla_edif_add_sa_ctl(fc_port_t *fcport, struct qla_sa_update_frame *sa_frame,
int dir)
{ … }
void
qla_edif_flush_sa_ctl_lists(fc_port_t *fcport)
{ … }
struct edif_sa_ctl *
qla_edif_find_sa_ctl_by_index(fc_port_t *fcport, int index, int dir)
{ … }
static int
qla24xx_check_sadb_avail_slot(struct bsg_job *bsg_job, fc_port_t *fcport,
struct qla_sa_update_frame *sa_frame)
{ … }
#define QLA_SA_UPDATE_FLAGS_RX_KEY …
#define QLA_SA_UPDATE_FLAGS_TX_KEY …
#define EDIF_MSLEEP_INTERVAL …
#define EDIF_RETRY_COUNT …
int
qla24xx_sadb_update(struct bsg_job *bsg_job)
{ … }
static void
qla_enode_free(scsi_qla_host_t *vha, struct enode *node)
{ … }
void
qla_enode_init(scsi_qla_host_t *vha)
{ … }
void
qla_enode_stop(scsi_qla_host_t *vha)
{ … }
static void qla_enode_clear(scsi_qla_host_t *vha, port_id_t portid)
{ … }
static struct enode *
qla_enode_alloc(scsi_qla_host_t *vha, uint32_t ntype)
{ … }
static void
qla_enode_add(scsi_qla_host_t *vha, struct enode *ptr)
{ … }
static struct enode *
qla_enode_find(scsi_qla_host_t *vha, uint32_t ntype, uint32_t p1, uint32_t p2)
{ … }
static int
qla_pur_get_pending(scsi_qla_host_t *vha, fc_port_t *fcport,
struct bsg_job *bsg_job)
{ … }
static int
qla_els_reject_iocb(scsi_qla_host_t *vha, struct qla_qpair *qp,
struct qla_els_pt_arg *a)
{ … }
void
qla_edb_init(scsi_qla_host_t *vha)
{ … }
static void qla_edb_clear(scsi_qla_host_t *vha, port_id_t portid)
{ … }
void
qla_edb_stop(scsi_qla_host_t *vha)
{ … }
static struct edb_node *
qla_edb_node_alloc(scsi_qla_host_t *vha, uint32_t ntype)
{ … }
static bool
qla_edb_node_add(scsi_qla_host_t *vha, struct edb_node *ptr)
{ … }
void
qla_edb_eventcreate(scsi_qla_host_t *vha, uint32_t dbtype,
uint32_t data, uint32_t data2, fc_port_t *sfcport)
{ … }
void
qla_edif_timer(scsi_qla_host_t *vha)
{ … }
static void qla_noop_sp_done(srb_t *sp, int res)
{ … }
int
qla24xx_issue_sa_replace_iocb(scsi_qla_host_t *vha, struct qla_work_evt *e)
{ … }
void qla24xx_sa_update_iocb(srb_t *sp, struct sa_update_28xx *sa_update_iocb)
{ … }
void
qla24xx_sa_replace_iocb(srb_t *sp, struct sa_update_28xx *sa_update_iocb)
{ … }
void qla24xx_auth_els(scsi_qla_host_t *vha, void **pkt, struct rsp_que **rsp)
{ … }
static uint16_t qla_edif_get_sa_index_from_freepool(fc_port_t *fcport, int dir)
{ … }
static struct edif_sa_index_entry *
qla_edif_sadb_find_sa_index_entry(uint16_t nport_handle,
struct list_head *sa_list)
{ … }
static int qla_edif_sadb_delete_sa_index(fc_port_t *fcport, uint16_t nport_handle,
uint16_t sa_index)
{ … }
void
qla28xx_sa_update_iocb_entry(scsi_qla_host_t *v, struct req_que *req,
struct sa_update_28xx *pkt)
{ … }
int
qla28xx_start_scsi_edif(srb_t *sp)
{ … }
void qla_edif_list_del(fc_port_t *fcport)
{ … }
static uint16_t qla_edif_sadb_get_sa_index(fc_port_t *fcport,
struct qla_sa_update_frame *sa_frame)
{ … }
void qla_edif_sadb_release(struct qla_hw_data *ha)
{ … }
int qla_edif_sadb_build_free_pool(struct qla_hw_data *ha)
{ … }
void qla_edif_sadb_release_free_pool(struct qla_hw_data *ha)
{ … }
static void __chk_edif_rx_sa_delete_pending(scsi_qla_host_t *vha,
fc_port_t *fcport, uint32_t handle, uint16_t sa_index)
{ … }
void qla_chk_edif_rx_sa_delete_pending(scsi_qla_host_t *vha,
srb_t *sp, struct sts_entry_24xx *sts24)
{ … }
void qlt_chk_edif_rx_sa_delete_pending(scsi_qla_host_t *vha, fc_port_t *fcport,
struct ctio7_from_24xx *pkt)
{ … }
static void qla_parse_auth_els_ctl(struct srb *sp)
{ … }
int qla_edif_process_els(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
{ … }
void qla_edif_sess_down(struct scsi_qla_host *vha, struct fc_port *sess)
{ … }
void qla_edif_clear_appdata(struct scsi_qla_host *vha, struct fc_port *fcport)
{ … }