/** * struct zfcp_fc_event - FC HBAAPI event for internal queueing from irq context * @code: Event code * @data: Event data * @list: list_head for zfcp_fc_events list
*/ struct zfcp_fc_event { enum fc_host_event_code code;
u32 data; struct list_head list;
};
/** * struct zfcp_fc_events - Infrastructure for posting FC events from irq context * @list: List for queueing of events from irq context to workqueue * @list_lock: Lock for event list * @work: work_struct for forwarding events in workqueue
*/ struct zfcp_fc_events { struct list_head list;
spinlock_t list_lock; struct work_struct work;
};
/** * struct zfcp_fc_gid_pn_req - container for ct header plus gid_pn request * @ct_hdr: FC GS common transport header * @gid_pn: GID_PN request
*/ struct zfcp_fc_gid_pn_req { struct fc_ct_hdr ct_hdr; struct fc_ns_gid_pn gid_pn;
} __packed;
/** * struct zfcp_fc_gid_pn_rsp - container for ct header plus gid_pn response * @ct_hdr: FC GS common transport header * @gid_pn: GID_PN response
*/ struct zfcp_fc_gid_pn_rsp { struct fc_ct_hdr ct_hdr; struct fc_gid_pn_resp gid_pn;
} __packed;
/** * struct zfcp_fc_gpn_ft - container for ct header plus gpn_ft request * @ct_hdr: FC GS common transport header * @gpn_ft: GPN_FT request
*/ struct zfcp_fc_gpn_ft_req { struct fc_ct_hdr ct_hdr; struct fc_ns_gid_ft gpn_ft;
} __packed;
/** * struct zfcp_fc_gspn_req - container for ct header plus GSPN_ID request * @ct_hdr: FC GS common transport header * @gspn: GSPN_ID request
*/ struct zfcp_fc_gspn_req { struct fc_ct_hdr ct_hdr; struct fc_gid_pn_resp gspn;
} __packed;
/** * struct zfcp_fc_gspn_rsp - container for ct header plus GSPN_ID response * @ct_hdr: FC GS common transport header * @gspn: GSPN_ID response * @name: The name string of the GSPN_ID response
*/ struct zfcp_fc_gspn_rsp { struct fc_ct_hdr ct_hdr; struct fc_gspn_resp gspn; char name[FC_SYMBOLIC_NAME_SIZE];
} __packed;
/** * struct zfcp_fc_rspn_req - container for ct header plus RSPN_ID request * @ct_hdr: FC GS common transport header * @rspn: RSPN_ID request * @name: The name string of the RSPN_ID request
*/ struct zfcp_fc_rspn_req { struct fc_ct_hdr ct_hdr; struct fc_ns_rspn rspn; char name[FC_SYMBOLIC_NAME_SIZE];
} __packed;
/** * struct zfcp_fc_req - Container for FC ELS and CT requests sent from zfcp * @ct_els: data required for issuing fsf command * @sg_req: scatterlist entry for request data, refers to embedded @u submember * @sg_rsp: scatterlist entry for response data, refers to embedded @u submember * @u: request and response specific data * @u.adisc: ADISC specific data * @u.adisc.req: ADISC request * @u.adisc.rsp: ADISC response * @u.gid_pn: GID_PN specific data * @u.gid_pn.req: GID_PN request * @u.gid_pn.rsp: GID_PN response * @u.gpn_ft: GPN_FT specific data * @u.gpn_ft.sg_rsp2: GPN_FT response, not embedded here, allocated elsewhere * @u.gpn_ft.req: GPN_FT request * @u.gspn: GSPN specific data * @u.gspn.req: GSPN request * @u.gspn.rsp: GSPN response * @u.rspn: RSPN specific data * @u.rspn.req: RSPN request * @u.rspn.rsp: RSPN response
*/ struct zfcp_fc_req { struct zfcp_fsf_ct_els ct_els; struct scatterlist sg_req; struct scatterlist sg_rsp; union { struct { struct fc_els_adisc req; struct fc_els_adisc rsp;
} adisc; struct { struct zfcp_fc_gid_pn_req req; struct zfcp_fc_gid_pn_rsp rsp;
} gid_pn; struct { struct scatterlist sg_rsp2[ZFCP_FC_GPN_FT_NUM_BUFS - 1]; struct zfcp_fc_gpn_ft_req req;
} gpn_ft; struct { struct zfcp_fc_gspn_req req; struct zfcp_fc_gspn_rsp rsp;
} gspn; struct { struct zfcp_fc_rspn_req req; struct fc_ct_hdr rsp;
} rspn;
} u;
};
/** * enum zfcp_fc_wka_status - FC WKA port status in zfcp * @ZFCP_FC_WKA_PORT_OFFLINE: Port is closed and not in use * @ZFCP_FC_WKA_PORT_CLOSING: The FSF "close port" request is pending * @ZFCP_FC_WKA_PORT_OPENING: The FSF "open port" request is pending * @ZFCP_FC_WKA_PORT_ONLINE: The port is open and the port handle is valid
*/ enum zfcp_fc_wka_status {
ZFCP_FC_WKA_PORT_OFFLINE,
ZFCP_FC_WKA_PORT_CLOSING,
ZFCP_FC_WKA_PORT_OPENING,
ZFCP_FC_WKA_PORT_ONLINE,
};
/** * struct zfcp_fc_wka_port - representation of well-known-address (WKA) FC port * @adapter: Pointer to adapter structure this WKA port belongs to * @opened: Wait for completion of open command * @closed: Wait for completion of close command * @status: Current status of WKA port * @refcount: Reference count to keep port open as long as it is in use * @d_id: FC destination id or well-known-address * @handle: FSF handle for the open WKA port * @mutex: Mutex used during opening/closing state changes * @work: For delaying the closing of the WKA port
*/ struct zfcp_fc_wka_port { struct zfcp_adapter *adapter;
wait_queue_head_t opened;
wait_queue_head_t closed; enum zfcp_fc_wka_status status;
atomic_t refcount;
u32 d_id;
u32 handle; struct mutex mutex; struct delayed_work work;
};
/** * struct zfcp_fc_wka_ports - Data structures for FC generic services * @ms: FC Management service * @ts: FC time service * @ds: FC directory service * @as: FC alias service
*/ struct zfcp_fc_wka_ports { struct zfcp_fc_wka_port ms; struct zfcp_fc_wka_port ts; struct zfcp_fc_wka_port ds; struct zfcp_fc_wka_port as;
};
/** * zfcp_fc_scsi_to_fcp - setup FCP command with data from scsi_cmnd * @fcp: fcp_cmnd to setup * @scsi: scsi_cmnd where to get LUN, task attributes/flags and CDB
*/ staticinline void zfcp_fc_scsi_to_fcp(struct fcp_cmnd *fcp, struct scsi_cmnd *scsi)
{
u32 datalen;
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.