]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/scsi/zfcp_fsf.h
[SCSI] zfcp: fix erp list usage without using locks
[linux-2.6-omap-h63xx.git] / drivers / s390 / scsi / zfcp_fsf.h
index 8cce5cc11d50c23e0df383ad08d65ee5ab67136f..fd3a88777ac8ea200aacb81bbfe72fb9792d86df 100644 (file)
@@ -1,27 +1,16 @@
 /*
- * This file is part of the zfcp device driver for
- * FCP adapters for IBM System z9 and zSeries.
+ * zfcp device driver
  *
- * (C) Copyright IBM Corp. 2002, 2006
+ * Interface to the FSF support functions.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Copyright IBM Corporation 2002, 2008
  */
 
 #ifndef FSF_H
 #define FSF_H
 
+#include <linux/pfn.h>
+
 #define FSF_QTCB_CURRENT_VERSION               0x00000001
 
 /* FSF commands */
 #define FSF_MAXIMUM_NUMBER_OF_LUNS_EXCEEDED    0x00000041
 #define FSF_ELS_COMMAND_REJECTED               0x00000050
 #define FSF_GENERIC_COMMAND_REJECTED           0x00000051
-#define FSF_OPERATION_PARTIALLY_SUCCESSFUL     0x00000052
-#define FSF_AUTHORIZATION_FAILURE              0x00000053
-#define FSF_CFDC_ERROR_DETECTED                        0x00000054
-#define FSF_CONTROL_FILE_UPDATE_ERROR          0x00000055
-#define FSF_CONTROL_FILE_TOO_LARGE             0x00000056
-#define FSF_ACCESS_CONFLICT_DETECTED           0x00000057
-#define FSF_CONFLICTS_OVERRULED                        0x00000058
 #define FSF_PORT_BOXED                         0x00000059
 #define FSF_LUN_BOXED                          0x0000005A
 #define FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE    0x0000005B
@@ -96,9 +78,7 @@
 #define FSF_REQUEST_SIZE_TOO_LARGE             0x00000061
 #define FSF_RESPONSE_SIZE_TOO_LARGE            0x00000062
 #define FSF_SBAL_MISMATCH                      0x00000063
-#define FSF_OPEN_PORT_WITHOUT_PRLI             0x00000064
 #define FSF_ADAPTER_STATUS_AVAILABLE           0x000000AD
-#define FSF_FCP_RSP_AVAILABLE                  0x000000AF
 #define FSF_UNKNOWN_COMMAND                    0x000000E2
 #define FSF_UNKNOWN_OP_SUBTYPE                  0x000000E3
 #define FSF_INVALID_COMMAND_OPTION              0x000000E5
 #define FSF_SQ_RETRY_IF_POSSIBLE               0x02
 #define FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED      0x03
 #define FSF_SQ_INVOKE_LINK_TEST_PROCEDURE      0x04
-#define FSF_SQ_ULP_PROGRAMMING_ERROR           0x05
 #define FSF_SQ_COMMAND_ABORTED                 0x06
 #define FSF_SQ_NO_RETRY_POSSIBLE               0x07
 
-/* FSF status qualifier for CFDC commands */
-#define FSF_SQ_CFDC_HARDENED_ON_SE             0x00000000
-#define FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE     0x00000001
-#define FSF_SQ_CFDC_COULD_NOT_HARDEN_ON_SE2    0x00000002
-/* CFDC subtable codes */
-#define FSF_SQ_CFDC_SUBTABLE_OS                        0x0001
-#define FSF_SQ_CFDC_SUBTABLE_PORT_WWPN         0x0002
-#define FSF_SQ_CFDC_SUBTABLE_PORT_DID          0x0003
-#define FSF_SQ_CFDC_SUBTABLE_LUN               0x0004
-
 /* FSF status qualifier (most significant 4 bytes), local link down */
 #define FSF_PSQ_LINK_NO_LIGHT                  0x00000004
 #define FSF_PSQ_LINK_WRAP_PLUG                 0x00000008
 #define FSF_STATUS_READ_LINK_UP                0x00000006
 #define FSF_STATUS_READ_NOTIFICATION_LOST      0x00000009
 #define FSF_STATUS_READ_CFDC_UPDATED           0x0000000A
-#define FSF_STATUS_READ_CFDC_HARDENED          0x0000000B
 #define FSF_STATUS_READ_FEATURE_UPDATE_ALERT   0x0000000C
 
 /* status subtypes in status read buffer */
 
 /* status subtypes for unsolicited status notification lost */
 #define FSF_STATUS_READ_SUB_INCOMING_ELS       0x00000001
-#define FSF_STATUS_READ_SUB_SENSE_DATA         0x00000002
-#define FSF_STATUS_READ_SUB_LINK_STATUS                0x00000004
-#define FSF_STATUS_READ_SUB_PORT_CLOSED                0x00000008
-#define FSF_STATUS_READ_SUB_BIT_ERROR_THRESHOLD        0x00000010
 #define FSF_STATUS_READ_SUB_ACT_UPDATED                0x00000020
-#define FSF_STATUS_READ_SUB_ACT_HARDENED       0x00000040
-#define FSF_STATUS_READ_SUB_FEATURE_UPDATE_ALERT 0x00000080
-
-/* status subtypes for CFDC */
-#define FSF_STATUS_READ_SUB_CFDC_HARDENED_ON_SE        0x00000002
-#define FSF_STATUS_READ_SUB_CFDC_HARDENED_ON_SE2 0x0000000F
 
 /* topologie that is detected by the adapter */
-#define FSF_TOPO_ERROR                         0x00000000
 #define FSF_TOPO_P2P                           0x00000001
 #define FSF_TOPO_FABRIC                                0x00000002
 #define FSF_TOPO_AL                            0x00000003
 /* data direction for FCP commands */
 #define FSF_DATADIR_WRITE                      0x00000001
 #define FSF_DATADIR_READ                       0x00000002
-#define FSF_DATADIR_READ_WRITE                 0x00000003
 #define FSF_DATADIR_CMND                       0x00000004
 
 /* fc service class */
-#define FSF_CLASS_1                            0x00000001
-#define FSF_CLASS_2                            0x00000002
 #define FSF_CLASS_3                            0x00000003
 
 /* SBAL chaining */
 #define FSF_MAX_SBALS_PER_REQ                  36
-#define FSF_MAX_SBALS_PER_ELS_REQ              2
 
 /* logging space behind QTCB */
 #define FSF_QTCB_LOG_SIZE                      1024
 #define FSF_FEATURE_LUN_SHARING                        0x00000004
 #define FSF_FEATURE_NOTIFICATION_LOST          0x00000008
 #define FSF_FEATURE_HBAAPI_MANAGEMENT           0x00000010
-#define FSF_FEATURE_ELS_CT_CHAINED_SBALS        0x00000020
 #define FSF_FEATURE_UPDATE_ALERT               0x00000100
+#define FSF_FEATURE_MEASUREMENT_DATA           0x00000200
 
 /* host connection features */
 #define FSF_FEATURE_NPIV_MODE                  0x00000001
-#define FSF_FEATURE_VM_ASSIGNED_WWPN           0x00000002
 
 /* option */
 #define FSF_OPEN_LUN_SUPPRESS_BOXING           0x00000001
-#define FSF_OPEN_LUN_REPLICATE_SENSE           0x00000002
-
-/* adapter types */
-#define FSF_ADAPTER_TYPE_FICON                  0x00000001
-#define FSF_ADAPTER_TYPE_FICON_EXPRESS          0x00000002
-
-/* port types */
-#define FSF_HBA_PORTTYPE_UNKNOWN               0x00000001
-#define FSF_HBA_PORTTYPE_NOTPRESENT            0x00000003
-#define FSF_HBA_PORTTYPE_NPORT                 0x00000005
-#define FSF_HBA_PORTTYPE_PTP                   0x00000021
-/* following are not defined and used by FSF Spec
-   but are additionally defined by FC-HBA */
-#define FSF_HBA_PORTTYPE_OTHER                 0x00000002
-#define FSF_HBA_PORTTYPE_NOTPRESENT            0x00000003
-#define FSF_HBA_PORTTYPE_NLPORT                        0x00000006
-#define FSF_HBA_PORTTYPE_FLPORT                        0x00000007
-#define FSF_HBA_PORTTYPE_FPORT                 0x00000008
-#define FSF_HBA_PORTTYPE_LPORT                 0x00000020
-
-/* port states */
-#define FSF_HBA_PORTSTATE_UNKNOWN              0x00000001
-#define FSF_HBA_PORTSTATE_ONLINE               0x00000002
-#define FSF_HBA_PORTSTATE_OFFLINE              0x00000003
-#define FSF_HBA_PORTSTATE_LINKDOWN             0x00000006
-#define FSF_HBA_PORTSTATE_ERROR                        0x00000007
-
-/* IO states of adapter */
-#define FSF_IOSTAT_NPORT_RJT                   0x00000004
-#define FSF_IOSTAT_FABRIC_RJT                  0x00000005
-#define FSF_IOSTAT_LS_RJT                      0x00000009
 
 /* open LUN access flags*/
-#define FSF_UNIT_ACCESS_OPEN_LUN_ALLOWED       0x01000000
 #define FSF_UNIT_ACCESS_EXCLUSIVE              0x02000000
 #define FSF_UNIT_ACCESS_OUTBOUND_TRANSFER      0x10000000
 
+/* FSF interface for CFDC */
+#define ZFCP_CFDC_MAX_SIZE             127 * 1024
+#define ZFCP_CFDC_PAGES                PFN_UP(ZFCP_CFDC_MAX_SIZE)
+
+struct zfcp_fsf_cfdc {
+       struct scatterlist sg[ZFCP_CFDC_PAGES];
+       u32 command;
+       u32 option;
+};
+
 struct fsf_queue_designator {
        u8  cssid;
        u8  chpid;
@@ -265,11 +195,6 @@ struct fsf_queue_designator {
        u32 res1;
 } __attribute__ ((packed));
 
-struct fsf_port_closed_payload {
-       struct fsf_queue_designator queue_designator;
-       u32                         port_handle;
-} __attribute__ ((packed));
-
 struct fsf_bit_error_payload {
        u32 res1;
        u32 link_failure_error_count;
@@ -287,6 +212,18 @@ struct fsf_bit_error_payload {
        u32 current_transmit_b2b_credit;
 } __attribute__ ((packed));
 
+struct fsf_link_down_info {
+       u32 error_code;
+       u32 res1;
+       u8 res2[2];
+       u8 primary_status;
+       u8 ioerr_code;
+       u8 action_code;
+       u8 reason_code;
+       u8 explanation_code;
+       u8 vendor_specific_code;
+} __attribute__ ((packed));
+
 struct fsf_status_read_buffer {
        u32 status_type;
        u32 status_subtype;
@@ -297,7 +234,12 @@ struct fsf_status_read_buffer {
        u32 class;
        u64 fcp_lun;
        u8  res3[24];
-       u8  payload[FSF_STATUS_READ_PAYLOAD_SIZE];
+       union {
+               u8  data[FSF_STATUS_READ_PAYLOAD_SIZE];
+               u32 word[FSF_STATUS_READ_PAYLOAD_SIZE/sizeof(u32)];
+               struct fsf_link_down_info link_down_info;
+               struct fsf_bit_error_payload bit_error;
+       } payload;
 } __attribute__ ((packed));
 
 struct fsf_qual_version_error {
@@ -310,23 +252,19 @@ struct fsf_qual_sequence_error {
        u32 res1[3];
 } __attribute__ ((packed));
 
-struct fsf_link_down_info {
-       u32 error_code;
-       u32 res1;
-       u8 res2[2];
-       u8 primary_status;
-       u8 ioerr_code;
-       u8 action_code;
-       u8 reason_code;
-       u8 explanation_code;
-       u8 vendor_specific_code;
+struct fsf_qual_latency_info {
+       u32 channel_lat;
+       u32 fabric_lat;
+       u8 res1[8];
 } __attribute__ ((packed));
 
 union fsf_prot_status_qual {
+       u32 word[FSF_PROT_STATUS_QUAL_SIZE / sizeof(u32)];
        u64 doubleword[FSF_PROT_STATUS_QUAL_SIZE / sizeof(u64)];
        struct fsf_qual_version_error   version_error;
        struct fsf_qual_sequence_error  sequence_error;
        struct fsf_link_down_info link_down_info;
+       struct fsf_qual_latency_info latency_info;
 } __attribute__ ((packed));
 
 struct fsf_qtcb_prefix {
@@ -340,6 +278,15 @@ struct fsf_qtcb_prefix {
        u8  res1[20];
 } __attribute__ ((packed));
 
+struct fsf_statistics_info {
+       u64 input_req;
+       u64 output_req;
+       u64 control_req;
+       u64 input_mb;
+       u64 output_mb;
+       u64 seconds_act;
+} __attribute__ ((packed));
+
 union fsf_status_qual {
        u8  byte[FSF_STATUS_QUALIFIER_SIZE];
        u16 halfword[FSF_STATUS_QUALIFIER_SIZE / sizeof (u16)];
@@ -427,7 +374,9 @@ struct fsf_qtcb_bottom_config {
        u32 fc_link_speed;
        u32 adapter_type;
        u32 peer_d_id;
-       u8 res2[12];
+       u8 res1[2];
+       u16 timer_interval;
+       u8 res2[8];
        u32 s_id;
        struct fsf_nport_serv_param nport_serv_param;
        u8 reserved_nport_serv_param[16];
@@ -436,7 +385,8 @@ struct fsf_qtcb_bottom_config {
        u32 hardware_version;
        u8 serial_number[32];
        struct fsf_nport_serv_param plogi_payload;
-       u8 res4[160];
+       struct fsf_statistics_info stat_info;
+       u8 res4[112];
 } __attribute__ ((packed));
 
 struct fsf_qtcb_bottom_port {
@@ -469,7 +419,10 @@ struct fsf_qtcb_bottom_port {
        u64 control_requests;
        u64 input_mb;           /* where 1 MByte == 1.000.000 Bytes */
        u64 output_mb;          /* where 1 MByte == 1.000.000 Bytes */
-       u8 res2[256];
+       u8 cp_util;
+       u8 cb_util;
+       u8 a_util;
+       u8 res2[253];
 } __attribute__ ((packed));
 
 union fsf_qtcb_bottom {