s390: add eadm related structures
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Tue, 28 Aug 2012 14:44:51 +0000 (16:44 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 26 Sep 2012 13:44:57 +0000 (15:44 +0200)
Add structures to be used by the eadm subchannel driver.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/cio.h
arch/s390/include/asm/eadm.h [new file with mode: 0644]
arch/s390/include/asm/scsw.h
drivers/s390/cio/orb.h

index 77043aa44d67184549ae93d948acb13cea0bd678..55bde6035216f35c5dc265b14366471cc1ce2b33 100644 (file)
@@ -79,6 +79,18 @@ struct erw {
        __u32 res16 : 16;
 } __attribute__ ((packed));
 
+/**
+ * struct erw_eadm - EADM Subchannel extended report word
+ * @b: aob error
+ * @r: arsb error
+ */
+struct erw_eadm {
+       __u32 : 16;
+       __u32 b : 1;
+       __u32 r : 1;
+       __u32  : 14;
+} __packed;
+
 /**
  * struct sublog - subchannel logout area
  * @res0: reserved
@@ -169,10 +181,23 @@ struct esw3 {
        __u32 zeros[3];
 } __attribute__ ((packed));
 
+/**
+ * struct esw_eadm - EADM Subchannel Extended Status Word (ESW)
+ * @sublog: subchannel logout
+ * @erw: extended report word
+ */
+struct esw_eadm {
+       __u32 sublog;
+       struct erw_eadm erw;
+       __u32 : 32;
+       __u32 : 32;
+       __u32 : 32;
+} __packed;
+
 /**
  * struct irb - interruption response block
  * @scsw: subchannel status word
- * @esw: extened status word, 4 formats
+ * @esw: extened status word
  * @ecw: extended control word
  *
  * The irb that is handed to the device driver when an interrupt occurs. For
@@ -191,6 +216,7 @@ struct irb {
                struct esw1 esw1;
                struct esw2 esw2;
                struct esw3 esw3;
+               struct esw_eadm eadm;
        } esw;
        __u8   ecw[32];
 } __attribute__ ((packed,aligned(4)));
diff --git a/arch/s390/include/asm/eadm.h b/arch/s390/include/asm/eadm.h
new file mode 100644 (file)
index 0000000..4a65803
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef _ASM_S390_EADM_H
+#define _ASM_S390_EADM_H
+
+#include <linux/types.h>
+
+struct arqb {
+       u64 data;
+       u16 fmt:4;
+       u16:12;
+       u16 cmd_code;
+       u16:16;
+       u16 msb_count;
+       u32 reserved[12];
+} __packed;
+
+#define ARQB_CMD_MOVE  1
+
+struct arsb {
+       u16 fmt:4;
+       u32:28;
+       u8 ef;
+       u8:8;
+       u8 ecbi;
+       u8:8;
+       u8 fvf;
+       u16:16;
+       u8 eqc;
+       u32:32;
+       u64 fail_msb;
+       u64 fail_aidaw;
+       u64 fail_ms;
+       u64 fail_scm;
+       u32 reserved[4];
+} __packed;
+
+struct msb {
+       u8 fmt:4;
+       u8 oc:4;
+       u8 flags;
+       u16:12;
+       u16 bs:4;
+       u32 blk_count;
+       u64 data_addr;
+       u64 scm_addr;
+       u64:64;
+} __packed;
+
+struct aidaw {
+       u8 flags;
+       u32 :24;
+       u32 :32;
+       u64 data_addr;
+} __packed;
+
+#define MSB_OC_CLEAR   0
+#define MSB_OC_READ    1
+#define MSB_OC_WRITE   2
+#define MSB_OC_RELEASE 3
+
+#define MSB_FLAG_BNM   0x80
+#define MSB_FLAG_IDA   0x40
+
+#define MSB_BS_4K      0
+#define MSB_BS_1M      1
+
+#define AOB_NR_MSB     124
+
+struct aob {
+       struct arqb request;
+       struct arsb response;
+       struct msb msb[AOB_NR_MSB];
+} __packed __aligned(PAGE_SIZE);
+
+#endif /* _ASM_S390_EADM_H */
index 8096bfe67424d0f46ab8f7edf52faa242c463b91..4af99cdaddf50436f13cb8fe4633a17acbca57b0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  Helper functions for scsw access.
  *
- *    Copyright IBM Corp. 2008, 2009
+ *    Copyright IBM Corp. 2008, 2012
  *    Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
  */
 
@@ -99,15 +99,47 @@ struct tm_scsw {
        u32 schxs:8;
 } __attribute__ ((packed));
 
+/**
+ * struct eadm_scsw - subchannel status word for eadm subchannels
+ * @key: subchannel key
+ * @eswf: esw format
+ * @cc: deferred condition code
+ * @ectl: extended control
+ * @fctl: function control
+ * @actl: activity control
+ * @stctl: status control
+ * @aob: AOB address
+ * @dstat: device status
+ * @cstat: subchannel status
+ */
+struct eadm_scsw {
+       u32 key:4;
+       u32:1;
+       u32 eswf:1;
+       u32 cc:2;
+       u32:6;
+       u32 ectl:1;
+       u32:2;
+       u32 fctl:3;
+       u32 actl:7;
+       u32 stctl:5;
+       u32 aob;
+       u32 dstat:8;
+       u32 cstat:8;
+       u32:16;
+} __packed;
+
 /**
  * union scsw - subchannel status word
  * @cmd: command-mode SCSW
  * @tm: transport-mode SCSW
+ * @eadm: eadm SCSW
  */
 union scsw {
        struct cmd_scsw cmd;
        struct tm_scsw tm;
-} __attribute__ ((packed));
+       struct eadm_scsw eadm;
+} __packed;
 
 #define SCSW_FCTL_CLEAR_FUNC    0x1
 #define SCSW_FCTL_HALT_FUNC     0x2
index 45a9865c2b36c9a9d70875082aa3925f5ab25bc7..7a640530e7f56f8a9bd93ff34d97a4f6cb2ccc01 100644 (file)
@@ -59,9 +59,33 @@ struct tm_orb {
        u32:32;
 }  __packed __aligned(4);
 
+/*
+ * eadm operation request block
+ */
+struct eadm_orb {
+       u32 intparm;
+       u32 key:4;
+       u32:4;
+       u32 compat1:1;
+       u32 compat2:1;
+       u32:21;
+       u32 x:1;
+       u32 aob;
+       u32 css_prio:8;
+       u32:8;
+       u32 scm_prio:8;
+       u32:8;
+       u32:29;
+       u32 fmt:3;
+       u32:32;
+       u32:32;
+       u32:32;
+}  __packed __aligned(4);
+
 union orb {
        struct cmd_orb cmd;
        struct tm_orb tm;
+       struct eadm_orb eadm;
 }  __packed __aligned(4);
 
 #endif /* S390_ORB_H */