linux/drivers/scsi/fnic/fnic.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright 2008 Cisco Systems, Inc.  All rights reserved.
 * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
 */
#ifndef _FNIC_H_
#define _FNIC_H_

#include <linux/interrupt.h>
#include <linux/netdevice.h>
#include <linux/workqueue.h>
#include <linux/bitops.h>
#include <scsi/libfc.h>
#include <scsi/libfcoe.h>
#include "fnic_io.h"
#include "fnic_res.h"
#include "fnic_trace.h"
#include "fnic_stats.h"
#include "vnic_dev.h"
#include "vnic_wq.h"
#include "vnic_rq.h"
#include "vnic_cq.h"
#include "vnic_wq_copy.h"
#include "vnic_intr.h"
#include "vnic_stats.h"
#include "vnic_scsi.h"

#define DRV_NAME
#define DRV_DESCRIPTION
#define DRV_VERSION
#define PFX
#define DFX

#define DESC_CLEAN_LOW_WATERMARK
#define FNIC_UCSM_DFLT_THROTTLE_CNT_BLD
#define FNIC_MIN_IO_REQ
#define FNIC_MAX_IO_REQ
#define FNIC_DFLT_IO_REQ
#define FNIC_DFLT_QUEUE_DEPTH
#define FNIC_STATS_RATE_LIMIT

/*
 * Tag bits used for special requests.
 */
#define FNIC_TAG_ABORT
#define FNIC_TAG_DEV_RST
#define FNIC_TAG_MASK
#define FNIC_NO_TAG

/*
 * Command flags to identify the type of command and for other future
 * use.
 */
#define FNIC_NO_FLAGS
#define FNIC_IO_INITIALIZED
#define FNIC_IO_ISSUED
#define FNIC_IO_DONE
#define FNIC_IO_REQ_NULL
#define FNIC_IO_ABTS_PENDING
#define FNIC_IO_ABORTED
#define FNIC_IO_ABTS_ISSUED
#define FNIC_IO_TERM_ISSUED
#define FNIC_IO_INTERNAL_TERM_ISSUED
#define FNIC_IO_ABT_TERM_DONE
#define FNIC_IO_ABT_TERM_REQ_NULL
#define FNIC_IO_ABT_TERM_TIMED_OUT
#define FNIC_DEVICE_RESET
#define FNIC_DEV_RST_ISSUED
#define FNIC_DEV_RST_TIMED_OUT
#define FNIC_DEV_RST_ABTS_ISSUED
#define FNIC_DEV_RST_TERM_ISSUED
#define FNIC_DEV_RST_DONE
#define FNIC_DEV_RST_REQ_NULL
#define FNIC_DEV_RST_ABTS_DONE
#define FNIC_DEV_RST_TERM_DONE
#define FNIC_DEV_RST_ABTS_PENDING

/*
 * fnic private data per SCSI command.
 * These fields are locked by the hashed io_req_lock.
 */
struct fnic_cmd_priv {};

static inline struct fnic_cmd_priv *fnic_priv(struct scsi_cmnd *cmd)
{}

static inline u64 fnic_flags_and_state(struct scsi_cmnd *cmd)
{}

#define FCPIO_INVALID_CODE

#define FNIC_LUN_RESET_TIMEOUT
#define FNIC_HOST_RESET_TIMEOUT
#define FNIC_RMDEVICE_TIMEOUT
#define FNIC_HOST_RESET_SETTLE_TIME
#define FNIC_ABT_TERM_DELAY_TIMEOUT

#define FNIC_MAX_FCP_TARGET
#define FNIC_PCI_OFFSET
/**
 * state_flags to identify host state along along with fnic's state
 **/
#define __FNIC_FLAGS_FWRESET
#define __FNIC_FLAGS_BLOCK_IO

#define FNIC_FLAGS_NONE
#define FNIC_FLAGS_FWRESET

#define FNIC_FLAGS_IO_BLOCKED

#define fnic_set_state_flags(fnicp, st_flags)

#define fnic_clear_state_flags(fnicp, st_flags)

extern unsigned int fnic_log_level;
extern unsigned int io_completions;

#define FNIC_MAIN_LOGGING
#define FNIC_FCS_LOGGING
#define FNIC_SCSI_LOGGING
#define FNIC_ISR_LOGGING

#define FNIC_CHECK_LOGGING(LEVEL, CMD)

#define FNIC_MAIN_DBG(kern_level, host, fnic_num, fmt, args...)

#define FNIC_FCS_DBG(kern_level, host, fnic_num, fmt, args...)

#define FNIC_SCSI_DBG(kern_level, host, fnic_num, fmt, args...)

#define FNIC_ISR_DBG(kern_level, host, fnic_num, fmt, args...)

#define FNIC_MAIN_NOTE(kern_level, host, fmt, args...)

#define FNIC_WQ_COPY_MAX
#define FNIC_WQ_MAX
#define FNIC_RQ_MAX
#define FNIC_CQ_MAX
#define FNIC_DFLT_IO_COMPLETIONS

#define FNIC_MQ_CQ_INDEX

extern const char *fnic_state_str[];

enum fnic_intx_intr_index {};

enum fnic_msix_intr_index {};

struct fnic_msix_entry {};

enum fnic_state {};

struct mempool;

enum fnic_evt {};

struct fnic_event {};

struct fnic_cpy_wq {};

/* Per-instance private data structure */
struct fnic {};

static inline struct fnic *fnic_from_ctlr(struct fcoe_ctlr *fip)
{}

extern struct workqueue_struct *fnic_event_queue;
extern struct workqueue_struct *fnic_fip_queue;
extern const struct attribute_group *fnic_host_groups[];

void fnic_clear_intr_mode(struct fnic *fnic);
int fnic_set_intr_mode(struct fnic *fnic);
int fnic_set_intr_mode_msix(struct fnic *fnic);
void fnic_free_intr(struct fnic *fnic);
int fnic_request_intr(struct fnic *fnic);

int fnic_send(struct fc_lport *, struct fc_frame *);
void fnic_free_wq_buf(struct vnic_wq *wq, struct vnic_wq_buf *buf);
void fnic_handle_frame(struct work_struct *work);
void fnic_handle_link(struct work_struct *work);
void fnic_handle_event(struct work_struct *work);
int fnic_rq_cmpl_handler(struct fnic *fnic, int);
int fnic_alloc_rq_frame(struct vnic_rq *rq);
void fnic_free_rq_buf(struct vnic_rq *rq, struct vnic_rq_buf *buf);
void fnic_flush_tx(struct work_struct *work);
void fnic_eth_send(struct fcoe_ctlr *, struct sk_buff *skb);
void fnic_set_port_id(struct fc_lport *, u32, struct fc_frame *);
void fnic_update_mac(struct fc_lport *, u8 *new);
void fnic_update_mac_locked(struct fnic *, u8 *new);

int fnic_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
int fnic_abort_cmd(struct scsi_cmnd *);
int fnic_device_reset(struct scsi_cmnd *);
int fnic_host_reset(struct scsi_cmnd *);
int fnic_reset(struct Scsi_Host *);
void fnic_scsi_cleanup(struct fc_lport *);
void fnic_scsi_abort_io(struct fc_lport *);
void fnic_empty_scsi_cleanup(struct fc_lport *);
void fnic_exch_mgr_reset(struct fc_lport *, u32, u32);
int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do, unsigned int cq_index);
int fnic_wq_cmpl_handler(struct fnic *fnic, int);
int fnic_flogi_reg_handler(struct fnic *fnic, u32);
void fnic_wq_copy_cleanup_handler(struct vnic_wq_copy *wq,
				  struct fcpio_host_req *desc);
int fnic_fw_reset_handler(struct fnic *fnic);
void fnic_terminate_rport_io(struct fc_rport *);
const char *fnic_state_to_str(unsigned int state);
void fnic_mq_map_queues_cpus(struct Scsi_Host *host);
void fnic_log_q_error(struct fnic *fnic);
void fnic_handle_link_event(struct fnic *fnic);

int fnic_is_abts_pending(struct fnic *, struct scsi_cmnd *);

void fnic_handle_fip_frame(struct work_struct *work);
void fnic_handle_fip_event(struct fnic *fnic);
void fnic_fcoe_reset_vlans(struct fnic *fnic);
void fnic_fcoe_evlist_free(struct fnic *fnic);
extern void fnic_handle_fip_timer(struct fnic *fnic);

static inline int
fnic_chk_state_flags_locked(struct fnic *fnic, unsigned long st_flags)
{}
void __fnic_set_state_flags(struct fnic *, unsigned long, unsigned long);
void fnic_dump_fchost_stats(struct Scsi_Host *, struct fc_host_statistics *);
#endif /* _FNIC_H_ */