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


Quelle  efct_lio.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.
 */


#ifndef __EFCT_LIO_H__
#define __EFCT_LIO_H__

#include "efct_scsi.h"
#include <target/target_core_base.h>

#define efct_lio_io_printf(io, fmt, ...)   \
 efc_log_debug(io->efct,     \
  "[%s] [%04x][i:%04x t:%04x h:%04x]" fmt,\
  io->node->display_name, io->instance_index, \
  io->init_task_tag, io->tgt_task_tag, io->hw_tag,\
  ##__VA_ARGS__)

#define efct_lio_tmfio_printf(io, fmt, ...)   \
 efc_log_debug(io->efct,     \
  "[%s] [%04x][i:%04x t:%04x h:%04x][f:%02x]" fmt,\
  io->node->display_name, io->instance_index, \
  io->init_task_tag, io->tgt_task_tag, io->hw_tag,\
  io->tgt_io.tmf,  ##__VA_ARGS__)

#define efct_set_lio_io_state(io, value) (io->tgt_io.state |= value)

struct efct_lio_wq_data {
 struct efct  *efct;
 void   *ptr;
 struct work_struct work;
};

/* Target private efct structure */
struct efct_scsi_tgt {
 u32   max_sge;
 u32   max_sgl;

 /*
 * Variables used to send task set full. We are using a high watermark
 * method to send task set full. We will reserve a fixed number of IOs
 * per initiator plus a fudge factor. Once we reach this number,
 * then the target will start sending task set full/busy responses.
 */

 atomic_t  initiator_count;
 atomic_t  ios_in_use;
 atomic_t  io_high_watermark;

 atomic_t  watermark_hit;
 int   watermark_min;
 int   watermark_max;

 struct efct_lio_nport *lio_nport;
 struct efct_lio_tpg *tpg;

 struct list_head vport_list;
 /* Protects vport list*/
 spinlock_t  efct_lio_lock;

 u64   wwnn;
};

struct efct_scsi_tgt_nport {
 struct efct_lio_nport *lio_nport;
};

struct efct_node {
 struct list_head list_entry;
 struct kref  ref;
 void   (*release)(struct kref *arg);
 struct efct  *efct;
 struct efc_node  *node;
 struct se_session *session;
 spinlock_t  active_ios_lock;
 struct list_head active_ios;
 char   display_name[EFC_NAME_LENGTH];
 u32   port_fc_id;
 u32   node_fc_id;
 u32   vpi;
 u32   rpi;
 u32   abort_cnt;
};

#define EFCT_LIO_STATE_SCSI_RECV_CMD  (1 << 0)
#define EFCT_LIO_STATE_TGT_SUBMIT_CMD  (1 << 1)
#define EFCT_LIO_STATE_TFO_QUEUE_DATA_IN (1 << 2)
#define EFCT_LIO_STATE_TFO_WRITE_PENDING (1 << 3)
#define EFCT_LIO_STATE_TGT_EXECUTE_CMD  (1 << 4)
#define EFCT_LIO_STATE_SCSI_SEND_RD_DATA (1 << 5)
#define EFCT_LIO_STATE_TFO_CHK_STOP_FREE (1 << 6)
#define EFCT_LIO_STATE_SCSI_DATA_DONE  (1 << 7)
#define EFCT_LIO_STATE_TFO_QUEUE_STATUS  (1 << 8)
#define EFCT_LIO_STATE_SCSI_SEND_RSP  (1 << 9)
#define EFCT_LIO_STATE_SCSI_RSP_DONE  (1 << 10)
#define EFCT_LIO_STATE_TGT_GENERIC_FREE  (1 << 11)
#define EFCT_LIO_STATE_SCSI_RECV_TMF  (1 << 12)
#define EFCT_LIO_STATE_TGT_SUBMIT_TMR  (1 << 13)
#define EFCT_LIO_STATE_TFO_WRITE_PEND_STATUS (1 << 14)
#define EFCT_LIO_STATE_TGT_GENERIC_REQ_FAILURE  (1 << 15)

#define EFCT_LIO_STATE_TFO_ABORTED_TASK  (1 << 29)
#define EFCT_LIO_STATE_TFO_RELEASE_CMD  (1 << 30)
#define EFCT_LIO_STATE_SCSI_CMPL_CMD  (1u << 31)

struct efct_scsi_tgt_io {
 struct se_cmd  cmd;
 unsigned char  sense_buffer[TRANSPORT_SENSE_BUFFER];
 enum dma_data_direction ddir;
 int   task_attr;
 u64   lun;

 u32   state;
 u8   tmf;
 struct efct_io  *io_to_abort;
 u32   seg_map_cnt;
 u32   seg_cnt;
 u32   cur_seg;
 enum efct_scsi_io_status err;
 bool   aborting;
 bool   rsp_sent;
 u32   transferred_len;
};

/* Handler return codes */
enum {
 SCSI_HANDLER_DATAPHASE_STARTED = 1,
 SCSI_HANDLER_RESP_STARTED,
 SCSI_HANDLER_VALIDATED_DATAPHASE_STARTED,
 SCSI_CMD_NOT_SUPPORTED,
};

#define WWN_NAME_LEN  32
struct efct_lio_vport {
 u64   wwpn;
 u64   npiv_wwpn;
 u64   npiv_wwnn;
 unsigned char  wwpn_str[WWN_NAME_LEN];
 struct se_wwn  vport_wwn;
 struct efct_lio_tpg *tpg;
 struct efct  *efct;
 struct Scsi_Host *shost;
 struct fc_vport  *fc_vport;
 atomic_t  enable;
};

struct efct_lio_nport {
 u64   wwpn;
 unsigned char  wwpn_str[WWN_NAME_LEN];
 struct se_wwn  nport_wwn;
 struct efct_lio_tpg *tpg;
 struct efct  *efct;
 atomic_t  enable;
};

struct efct_lio_tpg_attrib {
 u32   generate_node_acls;
 u32   cache_dynamic_acls;
 u32   demo_mode_write_protect;
 u32   prod_mode_write_protect;
 u32   demo_mode_login_only;
 bool   session_deletion_wait;
};

struct efct_lio_tpg {
 struct se_portal_group tpg;
 struct efct_lio_nport *nport;
 struct efct_lio_vport *vport;
 struct efct_lio_tpg_attrib tpg_attrib;
 unsigned short  tpgt;
 bool   enabled;
};

struct efct_lio_nacl {
 u64   nport_wwnn;
 char   nport_name[WWN_NAME_LEN];
 struct se_session *session;
 struct se_node_acl se_node_acl;
};

struct efct_lio_vport_list_t {
 struct list_head list_entry;
 struct efct_lio_vport *lio_vport;
};

int efct_scsi_tgt_driver_init(void);
int efct_scsi_tgt_driver_exit(void);

#endif /*__EFCT_LIO_H__ */

Messung V0.5
C=97 H=100 G=98

¤ Dauer der Verarbeitung: 0.11 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