summaryrefslogtreecommitdiffstats
path: root/include/asm-s390/irqextras390.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-s390/irqextras390.h')
-rw-r--r--include/asm-s390/irqextras390.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/include/asm-s390/irqextras390.h b/include/asm-s390/irqextras390.h
new file mode 100644
index 000000000..0ca2f718a
--- /dev/null
+++ b/include/asm-s390/irqextras390.h
@@ -0,0 +1,151 @@
+/*
+ * include/asm-s390/irqextras390.h
+ *
+ * S390 version
+ * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
+ * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
+ */
+
+#ifndef __irqextras390_h
+#define __irqextras390_h
+
+/*
+ irqextras390.h by D.J. Barrow
+ if you are a bitfield fan & are paranoid that ansi dosen't
+ give hard definitions about the size of an int or long you might
+ prefer these definitions as an alternative.
+
+*/
+
+#include <linux/types.h>
+
+typedef struct
+{
+ unsigned key:4;
+ unsigned s:1;
+ unsigned l:1;
+ unsigned cc:2;
+ unsigned f:1;
+ unsigned p:1;
+ unsigned i:1;
+ unsigned a:1;
+ unsigned u:1;
+ unsigned z:1;
+ unsigned e:1;
+ unsigned n:1;
+ unsigned zero:1;
+
+ unsigned fc_start:1;
+ unsigned fc_halt:1;
+ unsigned fc_clear:1;
+
+ unsigned ac_resume_pending:1;
+ unsigned ac_start_pending:1;
+ unsigned ac_halt_pending:1;
+ unsigned ac_clear_pending:1;
+ unsigned ac_subchannel_active:1;
+ unsigned ac_device_active:1;
+ unsigned ac_suspended:1;
+
+ unsigned sc_alert:1;
+ unsigned sc_intermediate:1;
+ unsigned sc_primary:1;
+ unsigned sc_seconary:1;
+ unsigned sc_status_pending:1;
+
+ __u32 ccw_address;
+
+ unsigned dev_status_attention:1;
+ unsigned dev_status_modifier:1;
+ unsigned dev_status_control_unit_end:1;
+ unsigned dev_status_busy:1;
+ unsigned dev_status_channel_end:1;
+ unsigned dev_status_device_end:1;
+ unsigned dev_status_unit_check:1;
+ unsigned dev_status_unit_exception:1;
+
+ unsigned sch_status_program_cont_int:1;
+ unsigned sch_status_incorrect_length:1;
+ unsigned sch_status_program_check:1;
+ unsigned sch_status_protection_check:1;
+ unsigned sch_status_channel_data_check:1;
+ unsigned sch_status_channel_control_check:1;
+ unsigned sch_status_interface_control_check:1;
+ unsigned sch_status_chaining_check:1;
+
+ __u16 byte_count;
+} scsw_bits_t __attribute__((packed));
+
+typedef struct
+{
+ __u32 flags;
+ __u32 ccw_address;
+ __u8 dev_status;
+ __u8 sch_status;
+ __u16 byte_count;
+} scsw_words_t __attribute__((packed));
+
+typedef struct
+{
+ __u8 cmd_code;
+
+ unsigned cd:1;
+ unsigned cc:1;
+ unsigned sli:1;
+ unsigned skip:1;
+ unsigned pci:1;
+ unsigned ida:1;
+ unsigned s:1;
+ unsigned res1:1;
+
+ __u16 count;
+
+ void *ccw_data_address;
+} ccw1_bits_t __attribute__((packed,aligned(8)));
+
+typedef struct
+{
+ __u32 interruption_parm;
+ unsigned key:4;
+ unsigned s:1;
+ unsigned res1:3;
+ unsigned f:1;
+ unsigned p:1;
+ unsigned i:1;
+ unsigned a:1;
+ unsigned u:1;
+ __u8 lpm;
+ unsigned l:1;
+ unsigned res2:7;
+ ccw1_bits_t *ccw_program_address;
+} orb_bits_t __attribute__((packed));
+
+void fixchannelprogram(orb_bits_t *orbptr);
+void fixccws(ccw1_bits_t *ccwptr);
+enum
+{
+ ccw_write=0x1,
+ ccw_read=0x2,
+ ccw_read_backward=0xc,
+ ccw_control=0x3,
+ ccw_sense=0x4,
+ ccw_sense_id=0xe4,
+ ccw_transfer_in_channel0=0x8,
+ ccw_transfer_in_channel1=0x8,
+ ccw_set_x_mode=0xc3, // according to uli's lan notes
+ ccw_nop=0x3 // according to uli's notes again
+ // n.b. ccw_control clashes with this
+ // so I presume its a special case of
+ // control
+};
+
+
+
+#endif
+
+
+
+
+
+
+