STAGING: octeon-ethernet: Use proper phy addresses for Movidis hardware.
[safe/jmp/linux-2.6] / drivers / s390 / scsi / zfcp_fsf.h
index 39475db..b3de682 100644 (file)
@@ -1,40 +1,19 @@
-/* 
- * 
- * linux/drivers/s390/scsi/zfcp_fsf.h
- * 
- * FCP adapter driver for IBM eServer zSeries 
- * 
- * (C) Copyright IBM Corp. 2002, 2004
+/*
+ * zfcp device driver
  *
- * Author(s): Martin Peschke <mpeschke@de.ibm.com> 
- *            Raimund Schroeder <raimund.schroeder@de.ibm.com> 
- *            Aron Zeh
- *            Wolfgang Taphorn
- *            Stefan Bader <stefan.bader@de.ibm.com> 
- *            Heiko Carstens <heiko.carstens@de.ibm.com>
- *            Andreas Herrmann <aherrman@de.ibm.com>
- *            Volker Sameske <sameske@de.ibm.com>
- * 
- * 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. 
+ * Interface to the FSF support functions.
+ *
+ * Copyright IBM Corporation 2002, 2009
  */
 
 #ifndef FSF_H
 #define FSF_H
 
-#define FSF_QTCB_VERSION1                      0x00000001
-#define FSF_QTCB_CURRENT_VERSION               FSF_QTCB_VERSION1
+#include <linux/pfn.h>
+#include <linux/scatterlist.h>
+#include <scsi/libfc.h>
+
+#define FSF_QTCB_CURRENT_VERSION               0x00000001
 
 /* FSF commands */
 #define        FSF_QTCB_FCP_CMND                       0x00000001
@@ -64,7 +43,7 @@
 #define FSF_CFDC_OPTION_FULL_ACCESS            0x00000002
 #define FSF_CFDC_OPTION_RESTRICTED_ACCESS      0x00000004
 
-/* FSF protocol stati */
+/* FSF protocol states */
 #define FSF_PROT_GOOD                          0x00000001
 #define FSF_PROT_QTCB_VERSION_ERROR            0x00000010
 #define FSF_PROT_SEQ_NUMB_ERROR                        0x00000020
@@ -76,7 +55,7 @@
 #define FSF_PROT_REEST_QUEUE                    0x00000800
 #define FSF_PROT_ERROR_STATE                   0x01000000
 
-/* FSF stati */
+/* FSF states */
 #define FSF_GOOD                               0x00000000
 #define FSF_PORT_ALREADY_OPEN                  0x00000001
 #define FSF_LUN_ALREADY_OPEN                   0x00000002
 #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
 #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 */
-#define FSF_STATUS_READ_SUB_CLOSE_PHYS_PORT    0x00000001
-#define FSF_STATUS_READ_SUB_ERROR_PORT         0x00000002
-
 /* status subtypes for link down */
 #define FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK   0x00000000
 #define FSF_STATUS_READ_SUB_FDISC_FAILED       0x00000001
 
 /* 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
-#define FSF_TOPO_FABRIC_VIRT                   0x00000004
 
 /* 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_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
 
-struct fsf_queue_designator;
-struct fsf_status_read_buffer;
-struct fsf_port_closed_payload;
-struct fsf_bit_error_payload;
-union  fsf_prot_status_qual;
-struct fsf_qual_version_error;
-struct fsf_qual_sequence_error;
-struct fsf_qtcb_prefix;
-struct fsf_qtcb_header;
-struct fsf_qtcb_bottom_config;
-struct fsf_qtcb_bottom_support;
-struct fsf_qtcb_bottom_io;
-union  fsf_qtcb_bottom;
+/* 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;
@@ -292,11 +194,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;
@@ -314,17 +211,35 @@ 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;
        u32 length;
        u32 res1;
        struct fsf_queue_designator queue_designator;
-       u32 d_id;
+       u8 res2;
+       u8 d_id[3];
        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 {
@@ -337,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 {
@@ -367,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)];
@@ -391,21 +311,7 @@ struct fsf_qtcb_header {
        u8  res4[16];
 } __attribute__ ((packed));
 
-struct fsf_nport_serv_param {
-       u8  common_serv_param[16];
-       u64 wwpn;
-       u64 wwnn;
-       u8  class1_serv_param[16];
-       u8  class2_serv_param[16];
-       u8  class3_serv_param[16];
-       u8  class4_serv_param[16];
-       u8  vendor_version_level[16];
-} __attribute__ ((packed));
-
-struct fsf_plogi {
-       u32    code;
-       struct fsf_nport_serv_param serv_param;
-} __attribute__ ((packed));
+#define FSF_PLOGI_MIN_LEN      112
 
 #define FSF_FCP_CMND_SIZE      288
 #define FSF_FCP_RSP_SIZE       128
@@ -423,8 +329,8 @@ struct fsf_qtcb_bottom_io {
 
 struct fsf_qtcb_bottom_support {
        u32 operation_subtype;
-       u8  res1[12];
-       u32 d_id;
+       u8  res1[13];
+       u8 d_id[3];
        u32 option;
        u64 fcp_lun;
        u64 res2;
@@ -453,17 +359,20 @@ struct fsf_qtcb_bottom_config {
        u32 fc_topology;
        u32 fc_link_speed;
        u32 adapter_type;
-       u32 peer_d_id;
-       u8 res2[12];
-       u32 s_id;
-       struct fsf_nport_serv_param nport_serv_param;
-       u8 reserved_nport_serv_param[16];
+       u8 res0;
+       u8 peer_d_id[3];
+       u8 res1[2];
+       u16 timer_interval;
+       u8 res2[9];
+       u8 s_id[3];
+       u8 nport_serv_param[128];
        u8 res3[8];
        u32 adapter_ports;
        u32 hardware_version;
        u8 serial_number[32];
-       struct fsf_nport_serv_param plogi_payload;
-       u8 res4[160];
+       u8 plogi_payload[112];
+       struct fsf_statistics_info stat_info;
+       u8 res4[112];
 } __attribute__ ((packed));
 
 struct fsf_qtcb_bottom_port {
@@ -496,7 +405,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 {
@@ -513,4 +425,34 @@ struct fsf_qtcb {
        u8 log[FSF_QTCB_LOG_SIZE];
 } __attribute__ ((packed));
 
+struct zfcp_blk_drv_data {
+#define ZFCP_BLK_DRV_DATA_MAGIC                        0x1
+       u32 magic;
+#define ZFCP_BLK_LAT_VALID                     0x1
+#define ZFCP_BLK_REQ_ERROR                     0x2
+       u16 flags;
+       u8 inb_usage;
+       u8 outb_usage;
+       u64 channel_lat;
+       u64 fabric_lat;
+} __attribute__ ((packed));
+
+/**
+ * struct zfcp_fsf_ct_els - zfcp data for ct or els request
+ * @req: scatter-gather list for request
+ * @resp: scatter-gather list for response
+ * @handler: handler function (called for response to the request)
+ * @handler_data: data passed to handler function
+ * @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)
+ * @status: used to pass error status to calling function
+ */
+struct zfcp_fsf_ct_els {
+       struct scatterlist *req;
+       struct scatterlist *resp;
+       void (*handler)(void *);
+       void *handler_data;
+       struct zfcp_port *port;
+       int status;
+};
+
 #endif                         /* FSF_H */