Linux-2.6.12-rc2

Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.

Let it rip!
diff --git a/include/asm-s390/cio.h b/include/asm-s390/cio.h
new file mode 100644
index 0000000..089cf56
--- /dev/null
+++ b/include/asm-s390/cio.h
@@ -0,0 +1,281 @@
+/*
+ *  include/asm-s390/cio.h
+ *  include/asm-s390x/cio.h
+ *
+ * Common interface for I/O on S/390
+ */
+#ifndef _ASM_S390_CIO_H_
+#define _ASM_S390_CIO_H_
+
+#include <linux/spinlock.h>
+#include <asm/types.h>
+
+#ifdef __KERNEL__
+
+#define LPM_ANYPATH 0xff
+
+/*
+ * subchannel status word
+ */
+struct scsw {
+	__u32 key  : 4;		/* subchannel key */
+	__u32 sctl : 1; 	/* suspend control */
+	__u32 eswf : 1; 	/* ESW format */
+	__u32 cc   : 2; 	/* deferred condition code */
+	__u32 fmt  : 1; 	/* format */
+	__u32 pfch : 1; 	/* prefetch */
+	__u32 isic : 1; 	/* initial-status interruption control */
+	__u32 alcc : 1; 	/* address-limit checking control */
+	__u32 ssi  : 1; 	/* supress-suspended interruption */
+	__u32 zcc  : 1; 	/* zero condition code */
+	__u32 ectl : 1; 	/* extended control */
+	__u32 pno  : 1;	    	/* path not operational */
+	__u32 res  : 1;	    	/* reserved */
+	__u32 fctl : 3;	    	/* function control */
+	__u32 actl : 7;	    	/* activity control */
+	__u32 stctl : 5;    	/* status control */
+	__u32 cpa;	    	/* channel program address */
+	__u32 dstat : 8;    	/* device status */
+	__u32 cstat : 8;    	/* subchannel status */
+	__u32 count : 16;   	/* residual count */
+} __attribute__ ((packed));
+
+#define SCSW_FCTL_CLEAR_FUNC	 0x1
+#define SCSW_FCTL_HALT_FUNC	 0x2
+#define SCSW_FCTL_START_FUNC	 0x4
+
+#define SCSW_ACTL_SUSPENDED	 0x1
+#define SCSW_ACTL_DEVACT	 0x2
+#define SCSW_ACTL_SCHACT	 0x4
+#define SCSW_ACTL_CLEAR_PEND	 0x8
+#define SCSW_ACTL_HALT_PEND	 0x10
+#define SCSW_ACTL_START_PEND	 0x20
+#define SCSW_ACTL_RESUME_PEND	 0x40
+
+#define SCSW_STCTL_STATUS_PEND	 0x1
+#define SCSW_STCTL_SEC_STATUS	 0x2
+#define SCSW_STCTL_PRIM_STATUS	 0x4
+#define SCSW_STCTL_INTER_STATUS	 0x8
+#define SCSW_STCTL_ALERT_STATUS	 0x10
+
+#define DEV_STAT_ATTENTION	 0x80
+#define DEV_STAT_STAT_MOD	 0x40
+#define DEV_STAT_CU_END		 0x20
+#define DEV_STAT_BUSY		 0x10
+#define DEV_STAT_CHN_END	 0x08
+#define DEV_STAT_DEV_END	 0x04
+#define DEV_STAT_UNIT_CHECK	 0x02
+#define DEV_STAT_UNIT_EXCEP	 0x01
+
+#define SCHN_STAT_PCI		 0x80
+#define SCHN_STAT_INCORR_LEN	 0x40
+#define SCHN_STAT_PROG_CHECK	 0x20
+#define SCHN_STAT_PROT_CHECK	 0x10
+#define SCHN_STAT_CHN_DATA_CHK	 0x08
+#define SCHN_STAT_CHN_CTRL_CHK	 0x04
+#define SCHN_STAT_INTF_CTRL_CHK	 0x02
+#define SCHN_STAT_CHAIN_CHECK	 0x01
+
+/*
+ * architectured values for first sense byte
+ */
+#define SNS0_CMD_REJECT		0x80
+#define SNS_CMD_REJECT		SNS0_CMD_REJEC
+#define SNS0_INTERVENTION_REQ	0x40
+#define SNS0_BUS_OUT_CHECK	0x20
+#define SNS0_EQUIPMENT_CHECK	0x10
+#define SNS0_DATA_CHECK		0x08
+#define SNS0_OVERRUN		0x04
+#define SNS0_INCOMPL_DOMAIN	0x01
+
+/*
+ * architectured values for second sense byte
+ */
+#define SNS1_PERM_ERR		0x80
+#define SNS1_INV_TRACK_FORMAT	0x40
+#define SNS1_EOC		0x20
+#define SNS1_MESSAGE_TO_OPER	0x10
+#define SNS1_NO_REC_FOUND	0x08
+#define SNS1_FILE_PROTECTED	0x04
+#define SNS1_WRITE_INHIBITED	0x02
+#define SNS1_INPRECISE_END	0x01
+
+/*
+ * architectured values for third sense byte
+ */
+#define SNS2_REQ_INH_WRITE	0x80
+#define SNS2_CORRECTABLE	0x40
+#define SNS2_FIRST_LOG_ERR	0x20
+#define SNS2_ENV_DATA_PRESENT	0x10
+#define SNS2_INPRECISE_END	0x04
+
+struct ccw1 {
+	__u8  cmd_code;		/* command code */
+	__u8  flags;   		/* flags, like IDA addressing, etc. */
+	__u16 count;   		/* byte count */
+	__u32 cda;     		/* data address */
+} __attribute__ ((packed,aligned(8)));
+
+#define CCW_FLAG_DC		0x80
+#define CCW_FLAG_CC		0x40
+#define CCW_FLAG_SLI		0x20
+#define CCW_FLAG_SKIP		0x10
+#define CCW_FLAG_PCI		0x08
+#define CCW_FLAG_IDA		0x04
+#define CCW_FLAG_SUSPEND	0x02
+
+#define CCW_CMD_READ_IPL	0x02
+#define CCW_CMD_NOOP		0x03
+#define CCW_CMD_BASIC_SENSE	0x04
+#define CCW_CMD_TIC		0x08
+#define CCW_CMD_STLCK           0x14
+#define CCW_CMD_SENSE_PGID	0x34
+#define CCW_CMD_SUSPEND_RECONN	0x5B
+#define CCW_CMD_RDC		0x64
+#define CCW_CMD_RELEASE		0x94
+#define CCW_CMD_SET_PGID	0xAF
+#define CCW_CMD_SENSE_ID	0xE4
+#define CCW_CMD_DCTL		0xF3
+
+#define SENSE_MAX_COUNT		0x20
+
+struct erw {
+	__u32 res0  : 3;  	/* reserved */
+	__u32 auth  : 1;	/* Authorization check */
+	__u32 pvrf  : 1;  	/* path-verification-required flag */
+	__u32 cpt   : 1;  	/* channel-path timeout */
+	__u32 fsavf : 1;  	/* Failing storage address validity flag */
+	__u32 cons  : 1;  	/* concurrent-sense */
+	__u32 scavf : 1;	/* Secondary ccw address validity flag */
+	__u32 fsaf  : 1;	/* Failing storage address format */
+	__u32 scnt  : 6;  	/* sense count if cons == 1 */
+	__u32 res16 : 16; 	/* reserved */
+} __attribute__ ((packed));
+
+/*
+ * subchannel logout area
+ */
+struct sublog {
+	__u32 res0  : 1;  	/* reserved */
+	__u32 esf   : 7;  	/* extended status flags */
+	__u32 lpum  : 8;  	/* last path used mask */
+	__u32 arep  : 1;  	/* ancillary report */
+	__u32 fvf   : 5;  	/* field-validity flags */
+	__u32 sacc  : 2;  	/* storage access code */
+	__u32 termc : 2;  	/* termination code */
+	__u32 devsc : 1;  	/* device-status check */
+	__u32 serr  : 1;  	/* secondary error */
+	__u32 ioerr : 1;  	/* i/o-error alert */
+	__u32 seqc  : 3;  	/* sequence code */
+} __attribute__ ((packed));
+
+/*
+ * Format 0 Extended Status Word (ESW)
+ */
+struct esw0 {
+	struct sublog sublog;	/* subchannel logout */
+	struct erw erw;	    	/* extended report word */
+	__u32  faddr[2];    	/* failing storage address */
+	__u32  saddr;  		/* secondary ccw address */
+} __attribute__ ((packed));
+
+/*
+ * Format 1 Extended Status Word (ESW)
+ */
+struct esw1 {
+	__u8  zero0;		/* reserved zeros */
+	__u8  lpum;		/* last path used mask */
+	__u16 zero16;		/* reserved zeros */
+	struct erw erw;		/* extended report word */
+	__u32 zeros[3]; 	/* 2 fullwords of zeros */
+} __attribute__ ((packed));
+
+/*
+ * Format 2 Extended Status Word (ESW)
+ */
+struct esw2 {
+	__u8  zero0;		/* reserved zeros */
+	__u8  lpum;		/* last path used mask */
+	__u16 dcti;		/* device-connect-time interval */
+	struct erw erw;		/* extended report word */
+	__u32 zeros[3]; 	/* 2 fullwords of zeros */
+} __attribute__ ((packed));
+
+/*
+ * Format 3 Extended Status Word (ESW)
+ */
+struct esw3 {
+	__u8  zero0;		/* reserved zeros */
+	__u8  lpum;		/* last path used mask */
+	__u16 res;		/* reserved */
+	struct erw erw;		/* extended report word */
+	__u32 zeros[3]; 	/* 2 fullwords of zeros */
+} __attribute__ ((packed));
+
+/*
+ * interruption response block
+ */
+struct irb {
+	struct scsw scsw;	/* subchannel status word */
+	union {			/* extended status word, 4 formats */
+		struct esw0 esw0;
+		struct esw1 esw1;
+		struct esw2 esw2;
+		struct esw3 esw3;
+	} esw;
+	__u8   ecw[32];		/* extended control word */
+} __attribute__ ((packed,aligned(4)));
+
+/*
+ * command information word  (CIW) layout
+ */
+struct ciw {
+	__u32 et       :  2; 	/* entry type */
+	__u32 reserved :  2; 	/* reserved */
+	__u32 ct       :  4; 	/* command type */
+	__u32 cmd      :  8; 	/* command */
+	__u32 count    : 16; 	/* coun */
+} __attribute__ ((packed));
+
+#define CIW_TYPE_RCD	0x0    	/* read configuration data */
+#define CIW_TYPE_SII	0x1    	/* set interface identifier */
+#define CIW_TYPE_RNI	0x2    	/* read node identifier */
+
+/*
+ * Flags used as input parameters for do_IO()
+ */
+#define DOIO_ALLOW_SUSPEND	 0x0001 /* allow for channel prog. suspend */
+#define DOIO_DENY_PREFETCH	 0x0002 /* don't allow for CCW prefetch */
+#define DOIO_SUPPRESS_INTER	 0x0004 /* suppress intermediate inter. */
+					/* ... for suspended CCWs */
+/* Device or subchannel gone. */
+#define CIO_GONE       0x0001
+/* No path to device. */
+#define CIO_NO_PATH    0x0002
+/* Device has appeared. */
+#define CIO_OPER       0x0004
+/* Sick revalidation of device. */
+#define CIO_REVALIDATE 0x0008
+
+struct diag210 {
+	__u16 vrdcdvno : 16;   /* device number (input) */
+	__u16 vrdclen  : 16;   /* data block length (input) */
+	__u32 vrdcvcla : 8;    /* virtual device class (output) */
+	__u32 vrdcvtyp : 8;    /* virtual device type (output) */
+	__u32 vrdcvsta : 8;    /* virtual device status (output) */
+	__u32 vrdcvfla : 8;    /* virtual device flags (output) */
+	__u32 vrdcrccl : 8;    /* real device class (output) */
+	__u32 vrdccrty : 8;    /* real device type (output) */
+	__u32 vrdccrmd : 8;    /* real device model (output) */
+	__u32 vrdccrft : 8;    /* real device feature (output) */
+} __attribute__ ((packed,aligned(4)));
+
+extern int diag210(struct diag210 *addr);
+
+extern void wait_cons_dev(void);
+
+extern void clear_all_subchannels(void);
+
+#endif
+
+#endif