Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  efct_io.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2021 Broadcom. All Rights Reserved. The term
 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
 */


#if !defined(__EFCT_IO_H__)
#define __EFCT_IO_H__

#include "efct_lio.h"

#define EFCT_LOG_ENABLE_IO_ERRORS(efct)  \
  (((efct) != NULL) ? (((efct)->logmask & (1U << 6)) != 0) : 0)

#define io_error_log(io, fmt, ...)  \
 do { \
  if (EFCT_LOG_ENABLE_IO_ERRORS(io->efct)) \
   efc_log_warn(io->efct, fmt, ##__VA_ARGS__); \
 } while (0)

#define SCSI_CMD_BUF_LENGTH 48
#define SCSI_RSP_BUF_LENGTH (FCP_RESP_WITH_EXT + SCSI_SENSE_BUFFERSIZE)
#define EFCT_NUM_SCSI_IOS 8192

enum efct_io_type {
 EFCT_IO_TYPE_IO = 0,
 EFCT_IO_TYPE_ELS,
 EFCT_IO_TYPE_CT,
 EFCT_IO_TYPE_CT_RESP,
 EFCT_IO_TYPE_BLS_RESP,
 EFCT_IO_TYPE_ABORT,

 EFCT_IO_TYPE_MAX,
};

enum efct_els_state {
 EFCT_ELS_REQUEST = 0,
 EFCT_ELS_REQUEST_DELAYED,
 EFCT_ELS_REQUEST_DELAY_ABORT,
 EFCT_ELS_REQ_ABORT,
 EFCT_ELS_REQ_ABORTED,
 EFCT_ELS_ABORT_IO_COMPL,
};

/**
 * Scsi target IO object
 * @efct: pointer back to efct
 * @instance_index: unique instance index value
 * @io: IO display name
 * @node: pointer to node
 * @list_entry: io list entry
 * @io_pending_link: io pending list entry
 * @ref: reference counter
 * @release: release callback function
 * @init_task_tag: initiator task tag (OX_ID) for back-end and SCSI logging
 * @tgt_task_tag: target task tag (RX_ID) for back-end and SCSI logging
 * @hw_tag: HW layer unique IO id
 * @tag: unique IO identifier
 * @sgl: SGL
 * @sgl_allocated: Number of allocated SGEs
 * @sgl_count: Number of SGEs in this SGL
 * @tgt_io: backend target private IO data
 * @exp_xfer_len: expected data transfer length, based on FC header
 * @hw_priv: Declarations private to HW/SLI
 * @io_type: indicates what this struct efct_io structure is used for
 * @hio: hw io object
 * @transferred: Number of bytes transferred
 * @auto_resp: set if auto_trsp was set
 * @low_latency: set if low latency request
 * @wq_steering: selected WQ steering request
 * @wq_class: selected WQ class if steering is class
 * @xfer_req: transfer size for current request
 * @scsi_tgt_cb: target callback function
 * @scsi_tgt_cb_arg: target callback function argument
 * @abort_cb: abort callback function
 * @abort_cb_arg: abort callback function argument
 * @bls_cb: BLS callback function
 * @bls_cb_arg: BLS callback function argument
 * @tmf_cmd: TMF command being processed
 * @abort_rx_id: rx_id from the ABTS that initiated the command abort
 * @cmd_tgt: True if this is a Target command
 * @send_abts: when aborting, indicates ABTS is to be sent
 * @cmd_ini: True if this is an Initiator command
 * @seq_init: True if local node has sequence initiative
 * @iparam: iparams for hw io send call
 * @hio_type: HW IO type
 * @wire_len: wire length
 * @hw_cb: saved HW callback
 * @io_to_abort: for abort handling, pointer to IO to abort
 * @rspbuf: SCSI Response buffer
 * @timeout: Timeout value in seconds for this IO
 * @cs_ctl: CS_CTL priority for this IO
 * @io_free: Is io object in freelist
 * @app_id: application id
 */

struct efct_io {
 struct efct  *efct;
 u32   instance_index;
 const char  *display_name;
 struct efct_node *node;

 struct list_head list_entry;
 struct list_head io_pending_link;
 struct kref  ref;
 void (*release)(struct kref *arg);
 u32   init_task_tag;
 u32   tgt_task_tag;
 u32   hw_tag;
 u32   tag;
 struct efct_scsi_sgl *sgl;
 u32   sgl_allocated;
 u32   sgl_count;
 struct efct_scsi_tgt_io tgt_io;
 u32   exp_xfer_len;

 void   *hw_priv;

 enum efct_io_type io_type;
 struct efct_hw_io *hio;
 size_t   transferred;

 bool   auto_resp;
 bool   low_latency;
 u8   wq_steering;
 u8   wq_class;
 u64   xfer_req;
 efct_scsi_io_cb_t scsi_tgt_cb;
 void   *scsi_tgt_cb_arg;
 efct_scsi_io_cb_t abort_cb;
 void   *abort_cb_arg;
 efct_scsi_io_cb_t bls_cb;
 void   *bls_cb_arg;
 enum efct_scsi_tmf_cmd tmf_cmd;
 u16   abort_rx_id;

 bool   cmd_tgt;
 bool   send_abts;
 bool   cmd_ini;
 bool   seq_init;
 union efct_hw_io_param_u iparam;
 enum efct_hw_io_type hio_type;
 u64   wire_len;
 void   *hw_cb;

 struct efct_io  *io_to_abort;

 struct efc_dma  rspbuf;
 u32   timeout;
 u8   cs_ctl;
 u8   io_free;
 u32   app_id;
};

struct efct_io_cb_arg {
 int status;
 int ext_status;
 void *app;
};

struct efct_io_pool *
efct_io_pool_create(struct efct *efct, u32 num_sgl);
int
efct_io_pool_free(struct efct_io_pool *io_pool);
u32
efct_io_pool_allocated(struct efct_io_pool *io_pool);

struct efct_io *
efct_io_pool_io_alloc(struct efct_io_pool *io_pool);
void
efct_io_pool_io_free(struct efct_io_pool *io_pool, struct efct_io *io);
struct efct_io *
efct_io_find_tgt_io(struct efct *efct, struct efct_node *node,
      u16 ox_id, u16 rx_id);
#endif /* __EFCT_IO_H__ */

Messung V0.5
C=98 H=93 G=95

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge