#include <linux/types.h>
#include <asm/byteorder.h>
#include <asm/param.h>
#include <linux/delay.h>
#include <linux/dma-mapping.h>
#include <linux/etherdevice.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/log2.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/stddef.h>
#include <linux/string.h>
#include <linux/workqueue.h>
#include <linux/errno.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/qed/qed_iscsi_if.h>
#include "qed.h"
#include "qed_cxt.h"
#include "qed_dev_api.h"
#include "qed_hsi.h"
#include "qed_hw.h"
#include "qed_int.h"
#include "qed_iro_hsi.h"
#include "qed_iscsi.h"
#include "qed_ll2.h"
#include "qed_mcp.h"
#include "qed_sp.h"
#include "qed_sriov.h"
#include "qed_reg_addr.h"
struct qed_iscsi_conn { … };
static int qed_iscsi_async_event(struct qed_hwfn *p_hwfn, u8 fw_event_code,
__le16 echo, union event_ring_data *data,
u8 fw_return_code)
{ … }
static int
qed_sp_iscsi_func_start(struct qed_hwfn *p_hwfn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr,
void *event_context, iscsi_event_cb_t async_event_cb)
{ … }
static int qed_sp_iscsi_conn_offload(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr)
{ … }
static int qed_sp_iscsi_conn_update(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr)
{ … }
static int
qed_sp_iscsi_mac_update(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr)
{ … }
static int qed_sp_iscsi_conn_terminate(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr)
{ … }
static int qed_sp_iscsi_conn_clear_sq(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr)
{ … }
static int qed_sp_iscsi_func_stop(struct qed_hwfn *p_hwfn,
enum spq_mode comp_mode,
struct qed_spq_comp_cb *p_comp_addr)
{ … }
static void __iomem *qed_iscsi_get_db_addr(struct qed_hwfn *p_hwfn, u32 cid)
{ … }
static void __iomem *qed_iscsi_get_primary_bdq_prod(struct qed_hwfn *p_hwfn,
u8 bdq_id)
{ … }
static void __iomem *qed_iscsi_get_secondary_bdq_prod(struct qed_hwfn *p_hwfn,
u8 bdq_id)
{ … }
static int qed_iscsi_setup_connection(struct qed_iscsi_conn *p_conn)
{ … }
static int qed_iscsi_allocate_connection(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn **p_out_conn)
{ … }
static int qed_iscsi_acquire_connection(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_in_conn,
struct qed_iscsi_conn **p_out_conn)
{ … }
static void qed_iscsi_release_connection(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn)
{ … }
static void qed_iscsi_free_connection(struct qed_hwfn *p_hwfn,
struct qed_iscsi_conn *p_conn)
{ … }
int qed_iscsi_alloc(struct qed_hwfn *p_hwfn)
{ … }
void qed_iscsi_setup(struct qed_hwfn *p_hwfn)
{ … }
void qed_iscsi_free(struct qed_hwfn *p_hwfn)
{ … }
static void _qed_iscsi_get_tstats(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt,
struct qed_iscsi_stats *p_stats)
{ … }
static void _qed_iscsi_get_mstats(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt,
struct qed_iscsi_stats *p_stats)
{ … }
static void _qed_iscsi_get_ustats(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt,
struct qed_iscsi_stats *p_stats)
{ … }
static void _qed_iscsi_get_xstats(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt,
struct qed_iscsi_stats *p_stats)
{ … }
static void _qed_iscsi_get_ystats(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt,
struct qed_iscsi_stats *p_stats)
{ … }
static void _qed_iscsi_get_pstats(struct qed_hwfn *p_hwfn,
struct qed_ptt *p_ptt,
struct qed_iscsi_stats *p_stats)
{ … }
static int qed_iscsi_get_stats(struct qed_hwfn *p_hwfn,
struct qed_iscsi_stats *stats,
bool is_atomic)
{ … }
struct qed_hash_iscsi_con { … };
static int qed_fill_iscsi_dev_info(struct qed_dev *cdev,
struct qed_dev_iscsi_info *info)
{ … }
static void qed_register_iscsi_ops(struct qed_dev *cdev,
struct qed_iscsi_cb_ops *ops, void *cookie)
{ … }
static struct qed_hash_iscsi_con *qed_iscsi_get_hash(struct qed_dev *cdev,
u32 handle)
{ … }
static int qed_iscsi_stop(struct qed_dev *cdev)
{ … }
static int qed_iscsi_start(struct qed_dev *cdev,
struct qed_iscsi_tid *tasks,
void *event_context,
iscsi_event_cb_t async_event_cb)
{ … }
static int qed_iscsi_acquire_conn(struct qed_dev *cdev,
u32 *handle,
u32 *fw_cid, void __iomem **p_doorbell)
{ … }
static int qed_iscsi_release_conn(struct qed_dev *cdev, u32 handle)
{ … }
static int qed_iscsi_offload_conn(struct qed_dev *cdev,
u32 handle,
struct qed_iscsi_params_offload *conn_info)
{ … }
static int qed_iscsi_update_conn(struct qed_dev *cdev,
u32 handle,
struct qed_iscsi_params_update *conn_info)
{ … }
static int qed_iscsi_clear_conn_sq(struct qed_dev *cdev, u32 handle)
{ … }
static int qed_iscsi_destroy_conn(struct qed_dev *cdev,
u32 handle, u8 abrt_conn)
{ … }
static int qed_iscsi_stats_context(struct qed_dev *cdev,
struct qed_iscsi_stats *stats,
bool is_atomic)
{ … }
static int qed_iscsi_stats(struct qed_dev *cdev, struct qed_iscsi_stats *stats)
{ … }
static int qed_iscsi_change_mac(struct qed_dev *cdev,
u32 handle, const u8 *mac)
{ … }
void qed_get_protocol_stats_iscsi(struct qed_dev *cdev,
struct qed_mcp_iscsi_stats *stats,
bool is_atomic)
{ … }
static const struct qed_iscsi_ops qed_iscsi_ops_pass = …;
const struct qed_iscsi_ops *qed_get_iscsi_ops(void)
{ … }
EXPORT_SYMBOL(…);
void qed_put_iscsi_ops(void)
{ … }
EXPORT_SYMBOL(…);