s390: add eadm related structures

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>
This commit is contained in:
Sebastian Ott 2012-08-28 16:44:51 +02:00 committed by Martin Schwidefsky
parent 382b736635
commit d2fc439b99
4 changed files with 159 additions and 3 deletions

View 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)));

View File

@ -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 */

View 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

View 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 */