[SCSI] zfcp: Redesign of the debug tracing for SAN records.
[pandora-kernel.git] / drivers / s390 / scsi / zfcp_dbf.h
index 04081b1..a3af6bd 100644 (file)
@@ -27,6 +27,7 @@
 #include "zfcp_fsf.h"
 #include "zfcp_def.h"
 
+#define ZFCP_DBF_TAG_LEN       7
 #define ZFCP_DBF_TAG_SIZE      4
 #define ZFCP_DBF_ID_SIZE       7
 
@@ -40,58 +41,101 @@ struct zfcp_dbf_dump {
        u8 data[];              /* dump data */
 } __attribute__ ((packed));
 
-struct zfcp_dbf_rec_record_thread {
-       u32 total;
+/**
+ * struct zfcp_dbf_rec_trigger - trace record for triggered recovery action
+ * @ready: number of ready recovery actions
+ * @running: number of running recovery actions
+ * @want: wanted recovery action
+ * @need: needed recovery action
+ */
+struct zfcp_dbf_rec_trigger {
        u32 ready;
        u32 running;
-};
-
-struct zfcp_dbf_rec_record_target {
-       u64 ref;
-       u32 status;
-       u32 d_id;
-       u64 wwpn;
-       u64 fcp_lun;
-       u32 erp_count;
-};
-
-struct zfcp_dbf_rec_record_trigger {
        u8 want;
        u8 need;
-       u32 as;
-       u32 ps;
-       u32 ls;
-       u64 ref;
-       u64 action;
-       u64 wwpn;
-       u64 fcp_lun;
-};
+} __packed;
 
-struct zfcp_dbf_rec_record_action {
-       u32 status;
-       u32 step;
-       u64 action;
-       u64 fsf_req;
+/**
+ * struct zfcp_dbf_rec_running - trace record for running recovery
+ * @fsf_req_id: request id for fsf requests
+ * @rec_status: status of the fsf request
+ * @rec_step: current step of the recovery action
+ * rec_count: recovery counter
+ */
+struct zfcp_dbf_rec_running {
+       u64 fsf_req_id;
+       u32 rec_status;
+       u16 rec_step;
+       u8 rec_action;
+       u8 rec_count;
+} __packed;
+
+/**
+ * enum zfcp_dbf_rec_id - recovery trace record id
+ * @ZFCP_DBF_REC_TRIG: triggered recovery identifier
+ * @ZFCP_DBF_REC_RUN: running recovery identifier
+ */
+enum zfcp_dbf_rec_id {
+       ZFCP_DBF_REC_TRIG       = 1,
+       ZFCP_DBF_REC_RUN        = 2,
 };
 
-struct zfcp_dbf_rec_record {
+/**
+ * struct zfcp_dbf_rec - trace record for error recovery actions
+ * @id: unique number of recovery record type
+ * @tag: identifier string specifying the location of initiation
+ * @lun: logical unit number
+ * @wwpn: word wide port number
+ * @d_id: destination ID
+ * @adapter_status: current status of the adapter
+ * @port_status: current status of the port
+ * @lun_status: current status of the lun
+ * @u.trig: structure zfcp_dbf_rec_trigger
+ * @u.run: structure zfcp_dbf_rec_running
+ */
+struct zfcp_dbf_rec {
        u8 id;
-       char id2[7];
+       char tag[ZFCP_DBF_TAG_LEN];
+       u64 lun;
+       u64 wwpn;
+       u32 d_id;
+       u32 adapter_status;
+       u32 port_status;
+       u32 lun_status;
        union {
-               struct zfcp_dbf_rec_record_action action;
-               struct zfcp_dbf_rec_record_thread thread;
-               struct zfcp_dbf_rec_record_target target;
-               struct zfcp_dbf_rec_record_trigger trigger;
+               struct zfcp_dbf_rec_trigger trig;
+               struct zfcp_dbf_rec_running run;
        } u;
-};
+} __packed;
 
-enum {
-       ZFCP_REC_DBF_ID_ACTION,
-       ZFCP_REC_DBF_ID_THREAD,
-       ZFCP_REC_DBF_ID_TARGET,
-       ZFCP_REC_DBF_ID_TRIGGER,
+/**
+ * enum zfcp_dbf_san_id - SAN trace record identifier
+ * @ZFCP_DBF_SAN_REQ: request trace record id
+ * @ZFCP_DBF_SAN_RES: response trace record id
+ * @ZFCP_DBF_SAN_ELS: extended link service record id
+ */
+enum zfcp_dbf_san_id {
+       ZFCP_DBF_SAN_REQ        = 1,
+       ZFCP_DBF_SAN_RES        = 2,
+       ZFCP_DBF_SAN_ELS        = 3,
 };
 
+/** struct zfcp_dbf_san - trace record for SAN requests and responses
+ * @id: unique number of recovery record type
+ * @tag: identifier string specifying the location of initiation
+ * @fsf_req_id: request id for fsf requests
+ * @payload: unformatted information related to request/response
+ * @d_id: destination id
+ */
+struct zfcp_dbf_san {
+       u8 id;
+       char tag[ZFCP_DBF_TAG_LEN];
+       u64 fsf_req_id;
+       u32 d_id;
+#define ZFCP_DBF_SAN_MAX_PAYLOAD (FC_CT_HDR_LEN + 32)
+       char payload[ZFCP_DBF_SAN_MAX_PAYLOAD];
+} __packed;
+
 struct zfcp_dbf_hba_record_response {
        u32 fsf_command;
        u64 fsf_reqid;
@@ -160,44 +204,6 @@ struct zfcp_dbf_hba_record {
        } u;
 } __attribute__ ((packed));
 
-struct zfcp_dbf_san_record_ct_request {
-       u16 cmd_req_code;
-       u8 revision;
-       u8 gs_type;
-       u8 gs_subtype;
-       u8 options;
-       u16 max_res_size;
-       u32 len;
-       u32 d_id;
-} __attribute__ ((packed));
-
-struct zfcp_dbf_san_record_ct_response {
-       u16 cmd_rsp_code;
-       u8 revision;
-       u8 reason_code;
-       u8 expl;
-       u8 vendor_unique;
-       u16 max_res_size;
-       u32 len;
-} __attribute__ ((packed));
-
-struct zfcp_dbf_san_record_els {
-       u32 d_id;
-} __attribute__ ((packed));
-
-struct zfcp_dbf_san_record {
-       u8 tag[ZFCP_DBF_TAG_SIZE];
-       u64 fsf_reqid;
-       u32 fsf_seqno;
-       union {
-               struct zfcp_dbf_san_record_ct_request ct_req;
-               struct zfcp_dbf_san_record_ct_response ct_resp;
-               struct zfcp_dbf_san_record_els els;
-       } u;
-} __attribute__ ((packed));
-
-#define ZFCP_DBF_SAN_MAX_PAYLOAD 1024
-
 struct zfcp_dbf_scsi_record {
        u8 tag[ZFCP_DBF_TAG_SIZE];
        u8 tag2[ZFCP_DBF_TAG_SIZE];
@@ -232,9 +238,9 @@ struct zfcp_dbf {
        spinlock_t                      hba_lock;
        spinlock_t                      san_lock;
        spinlock_t                      scsi_lock;
-       struct zfcp_dbf_rec_record      rec_buf;
+       struct zfcp_dbf_rec             rec_buf;
        struct zfcp_dbf_hba_record      hba_buf;
-       struct zfcp_dbf_san_record      san_buf;
+       struct zfcp_dbf_san             san_buf;
        struct zfcp_dbf_scsi_record     scsi_buf;
        struct zfcp_adapter             *adapter;
 };