]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/scsi/zfcp_fsf.h
[S390] cio: handle ssch() return codes correctly.
[linux-2.6-omap-h63xx.git] / drivers / s390 / scsi / zfcp_fsf.h
index 099970b2700175f01bbbad8de08e96871f108a7e..bf94b4da0763c09e642a150cda24c725df963e89 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_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;
@@ -288,6 +287,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;
@@ -298,7 +309,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 {
@@ -311,23 +327,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 {
@@ -437,7 +449,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];