diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-s390/Kbuild | 3 | ||||
| -rw-r--r-- | include/asm-s390/airq.h | 4 | ||||
| -rw-r--r-- | include/asm-s390/ccwdev.h | 12 | ||||
| -rw-r--r-- | include/asm-s390/chpid.h | 5 | ||||
| -rw-r--r-- | include/asm-s390/chsc.h | 127 | ||||
| -rw-r--r-- | include/asm-s390/cio.h | 114 | ||||
| -rw-r--r-- | include/asm-s390/elf.h | 51 | ||||
| -rw-r--r-- | include/asm-s390/etr.h | 45 | ||||
| -rw-r--r-- | include/asm-s390/fcx.h | 311 | ||||
| -rw-r--r-- | include/asm-s390/ipl.h | 17 | ||||
| -rw-r--r-- | include/asm-s390/isc.h | 25 | ||||
| -rw-r--r-- | include/asm-s390/itcw.h | 30 | ||||
| -rw-r--r-- | include/asm-s390/pgtable.h | 1 | ||||
| -rw-r--r-- | include/asm-s390/processor.h | 24 | ||||
| -rw-r--r-- | include/asm-s390/ptrace.h | 15 | ||||
| -rw-r--r-- | include/asm-s390/schid.h | 28 | ||||
| -rw-r--r-- | include/asm-s390/sclp.h | 4 | ||||
| -rw-r--r-- | include/asm-s390/setup.h | 12 | ||||
| -rw-r--r-- | include/asm-s390/sparsemem.h | 4 | ||||
| -rw-r--r-- | include/asm-s390/timer.h | 12 | ||||
| -rw-r--r-- | include/asm-s390/zcrypt.h | 2 | ||||
| -rw-r--r-- | include/linux/mod_devicetable.h | 9 |
22 files changed, 781 insertions, 74 deletions
diff --git a/include/asm-s390/Kbuild b/include/asm-s390/Kbuild index 13c9805349f1..09f312501eb5 100644 --- a/include/asm-s390/Kbuild +++ b/include/asm-s390/Kbuild | |||
| @@ -8,6 +8,9 @@ header-y += ucontext.h | |||
| 8 | header-y += vtoc.h | 8 | header-y += vtoc.h |
| 9 | header-y += zcrypt.h | 9 | header-y += zcrypt.h |
| 10 | header-y += kvm.h | 10 | header-y += kvm.h |
| 11 | header-y += schid.h | ||
| 12 | header-y += chsc.h | ||
| 11 | 13 | ||
| 12 | unifdef-y += cmb.h | 14 | unifdef-y += cmb.h |
| 13 | unifdef-y += debug.h | 15 | unifdef-y += debug.h |
| 16 | unifdef-y += chpid.h | ||
diff --git a/include/asm-s390/airq.h b/include/asm-s390/airq.h index 41d028cb52a4..1ac80d6b0588 100644 --- a/include/asm-s390/airq.h +++ b/include/asm-s390/airq.h | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | typedef void (*adapter_int_handler_t)(void *, void *); | 14 | typedef void (*adapter_int_handler_t)(void *, void *); |
| 15 | 15 | ||
| 16 | void *s390_register_adapter_interrupt(adapter_int_handler_t, void *); | 16 | void *s390_register_adapter_interrupt(adapter_int_handler_t, void *, u8); |
| 17 | void s390_unregister_adapter_interrupt(void *); | 17 | void s390_unregister_adapter_interrupt(void *, u8); |
| 18 | 18 | ||
| 19 | #endif /* _ASM_S390_AIRQ_H */ | 19 | #endif /* _ASM_S390_AIRQ_H */ |
diff --git a/include/asm-s390/ccwdev.h b/include/asm-s390/ccwdev.h index 066aa70518ce..ba007d8df941 100644 --- a/include/asm-s390/ccwdev.h +++ b/include/asm-s390/ccwdev.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | #include <linux/device.h> | 13 | #include <linux/device.h> |
| 14 | #include <linux/mod_devicetable.h> | 14 | #include <linux/mod_devicetable.h> |
| 15 | #include <asm/fcx.h> | ||
| 15 | 16 | ||
| 16 | /* structs from asm/cio.h */ | 17 | /* structs from asm/cio.h */ |
| 17 | struct irb; | 18 | struct irb; |
| @@ -157,6 +158,17 @@ extern int ccw_device_start_timeout_key(struct ccw_device *, struct ccw1 *, | |||
| 157 | extern int ccw_device_resume(struct ccw_device *); | 158 | extern int ccw_device_resume(struct ccw_device *); |
| 158 | extern int ccw_device_halt(struct ccw_device *, unsigned long); | 159 | extern int ccw_device_halt(struct ccw_device *, unsigned long); |
| 159 | extern int ccw_device_clear(struct ccw_device *, unsigned long); | 160 | extern int ccw_device_clear(struct ccw_device *, unsigned long); |
| 161 | int ccw_device_tm_start_key(struct ccw_device *cdev, struct tcw *tcw, | ||
| 162 | unsigned long intparm, u8 lpm, u8 key); | ||
| 163 | int ccw_device_tm_start_key(struct ccw_device *, struct tcw *, | ||
| 164 | unsigned long, u8, u8); | ||
| 165 | int ccw_device_tm_start_timeout_key(struct ccw_device *, struct tcw *, | ||
| 166 | unsigned long, u8, u8, int); | ||
| 167 | int ccw_device_tm_start(struct ccw_device *, struct tcw *, | ||
| 168 | unsigned long, u8); | ||
| 169 | int ccw_device_tm_start_timeout(struct ccw_device *, struct tcw *, | ||
| 170 | unsigned long, u8, int); | ||
| 171 | int ccw_device_tm_intrg(struct ccw_device *cdev); | ||
| 160 | 172 | ||
| 161 | extern int ccw_device_set_online(struct ccw_device *cdev); | 173 | extern int ccw_device_set_online(struct ccw_device *cdev); |
| 162 | extern int ccw_device_set_offline(struct ccw_device *cdev); | 174 | extern int ccw_device_set_offline(struct ccw_device *cdev); |
diff --git a/include/asm-s390/chpid.h b/include/asm-s390/chpid.h index b203336fd892..606844d0a5c3 100644 --- a/include/asm-s390/chpid.h +++ b/include/asm-s390/chpid.h | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | 10 | ||
| 11 | #include <linux/string.h> | 11 | #include <linux/string.h> |
| 12 | #include <asm/types.h> | 12 | #include <asm/types.h> |
| 13 | #include <asm/cio.h> | ||
| 14 | 13 | ||
| 15 | #define __MAX_CHPID 255 | 14 | #define __MAX_CHPID 255 |
| 16 | 15 | ||
| @@ -41,6 +40,9 @@ static inline void chp_id_next(struct chp_id *chpid) | |||
| 41 | } | 40 | } |
| 42 | } | 41 | } |
| 43 | 42 | ||
| 43 | #ifdef __KERNEL__ | ||
| 44 | #include <asm/cio.h> | ||
| 45 | |||
| 44 | static inline int chp_id_is_valid(struct chp_id *chpid) | 46 | static inline int chp_id_is_valid(struct chp_id *chpid) |
| 45 | { | 47 | { |
| 46 | return (chpid->cssid <= __MAX_CSSID); | 48 | return (chpid->cssid <= __MAX_CSSID); |
| @@ -49,5 +51,6 @@ static inline int chp_id_is_valid(struct chp_id *chpid) | |||
| 49 | 51 | ||
| 50 | #define chp_id_for_each(c) \ | 52 | #define chp_id_for_each(c) \ |
| 51 | for (chp_id_init(c); chp_id_is_valid(c); chp_id_next(c)) | 53 | for (chp_id_init(c); chp_id_is_valid(c); chp_id_next(c)) |
| 54 | #endif /* __KERNEL */ | ||
| 52 | 55 | ||
| 53 | #endif /* _ASM_S390_CHPID_H */ | 56 | #endif /* _ASM_S390_CHPID_H */ |
diff --git a/include/asm-s390/chsc.h b/include/asm-s390/chsc.h new file mode 100644 index 000000000000..d38d0cf62d4b --- /dev/null +++ b/include/asm-s390/chsc.h | |||
| @@ -0,0 +1,127 @@ | |||
| 1 | /* | ||
| 2 | * ioctl interface for /dev/chsc | ||
| 3 | * | ||
| 4 | * Copyright 2008 IBM Corp. | ||
| 5 | * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef _ASM_CHSC_H | ||
| 9 | #define _ASM_CHSC_H | ||
| 10 | |||
| 11 | #include <asm/chpid.h> | ||
| 12 | #include <asm/schid.h> | ||
| 13 | |||
| 14 | struct chsc_async_header { | ||
| 15 | __u16 length; | ||
| 16 | __u16 code; | ||
| 17 | __u32 cmd_dependend; | ||
| 18 | __u32 key : 4; | ||
| 19 | __u32 : 28; | ||
| 20 | struct subchannel_id sid; | ||
| 21 | } __attribute__ ((packed)); | ||
| 22 | |||
| 23 | struct chsc_async_area { | ||
| 24 | struct chsc_async_header header; | ||
| 25 | __u8 data[PAGE_SIZE - 16 /* size of chsc_async_header */]; | ||
| 26 | } __attribute__ ((packed)); | ||
| 27 | |||
| 28 | |||
| 29 | struct chsc_response_struct { | ||
| 30 | __u16 length; | ||
| 31 | __u16 code; | ||
| 32 | __u32 parms; | ||
| 33 | __u8 data[PAGE_SIZE - 8]; | ||
| 34 | } __attribute__ ((packed)); | ||
| 35 | |||
| 36 | struct chsc_chp_cd { | ||
| 37 | struct chp_id chpid; | ||
| 38 | int m; | ||
| 39 | int fmt; | ||
| 40 | struct chsc_response_struct cpcb; | ||
| 41 | }; | ||
| 42 | |||
| 43 | struct chsc_cu_cd { | ||
| 44 | __u16 cun; | ||
| 45 | __u8 cssid; | ||
| 46 | int m; | ||
| 47 | int fmt; | ||
| 48 | struct chsc_response_struct cucb; | ||
| 49 | }; | ||
| 50 | |||
| 51 | struct chsc_sch_cud { | ||
| 52 | struct subchannel_id schid; | ||
| 53 | int fmt; | ||
| 54 | struct chsc_response_struct scub; | ||
| 55 | }; | ||
| 56 | |||
| 57 | struct conf_id { | ||
| 58 | int m; | ||
| 59 | __u8 cssid; | ||
| 60 | __u8 ssid; | ||
| 61 | }; | ||
| 62 | |||
| 63 | struct chsc_conf_info { | ||
| 64 | struct conf_id id; | ||
| 65 | int fmt; | ||
| 66 | struct chsc_response_struct scid; | ||
| 67 | }; | ||
| 68 | |||
| 69 | struct ccl_parm_chpid { | ||
| 70 | int m; | ||
| 71 | struct chp_id chp; | ||
| 72 | }; | ||
| 73 | |||
| 74 | struct ccl_parm_cssids { | ||
| 75 | __u8 f_cssid; | ||
| 76 | __u8 l_cssid; | ||
| 77 | }; | ||
| 78 | |||
| 79 | struct chsc_comp_list { | ||
| 80 | struct { | ||
| 81 | enum { | ||
| 82 | CCL_CU_ON_CHP = 1, | ||
| 83 | CCL_CHP_TYPE_CAP = 2, | ||
| 84 | CCL_CSS_IMG = 4, | ||
| 85 | CCL_CSS_IMG_CONF_CHAR = 5, | ||
| 86 | CCL_IOP_CHP = 6, | ||
| 87 | } ctype; | ||
| 88 | int fmt; | ||
| 89 | struct ccl_parm_chpid chpid; | ||
| 90 | struct ccl_parm_cssids cssids; | ||
| 91 | } req; | ||
| 92 | struct chsc_response_struct sccl; | ||
| 93 | }; | ||
| 94 | |||
| 95 | struct chsc_dcal { | ||
| 96 | struct { | ||
| 97 | enum { | ||
| 98 | DCAL_CSS_IID_PN = 4, | ||
| 99 | } atype; | ||
| 100 | __u32 list_parm[2]; | ||
| 101 | int fmt; | ||
| 102 | } req; | ||
| 103 | struct chsc_response_struct sdcal; | ||
| 104 | }; | ||
| 105 | |||
| 106 | struct chsc_cpd_info { | ||
| 107 | struct chp_id chpid; | ||
| 108 | int m; | ||
| 109 | int fmt; | ||
| 110 | int rfmt; | ||
| 111 | int c; | ||
| 112 | struct chsc_response_struct chpdb; | ||
| 113 | }; | ||
| 114 | |||
| 115 | #define CHSC_IOCTL_MAGIC 'c' | ||
| 116 | |||
| 117 | #define CHSC_START _IOWR(CHSC_IOCTL_MAGIC, 0x81, struct chsc_async_area) | ||
| 118 | #define CHSC_INFO_CHANNEL_PATH _IOWR(CHSC_IOCTL_MAGIC, 0x82, \ | ||
| 119 | struct chsc_chp_cd) | ||
| 120 | #define CHSC_INFO_CU _IOWR(CHSC_IOCTL_MAGIC, 0x83, struct chsc_cu_cd) | ||
| 121 | #define CHSC_INFO_SCH_CU _IOWR(CHSC_IOCTL_MAGIC, 0x84, struct chsc_sch_cud) | ||
| 122 | #define CHSC_INFO_CI _IOWR(CHSC_IOCTL_MAGIC, 0x85, struct chsc_conf_info) | ||
| 123 | #define CHSC_INFO_CCL _IOWR(CHSC_IOCTL_MAGIC, 0x86, struct chsc_comp_list) | ||
| 124 | #define CHSC_INFO_CPD _IOWR(CHSC_IOCTL_MAGIC, 0x87, struct chsc_cpd_info) | ||
| 125 | #define CHSC_INFO_DCAL _IOWR(CHSC_IOCTL_MAGIC, 0x88, struct chsc_dcal) | ||
| 126 | |||
| 127 | #endif | ||
diff --git a/include/asm-s390/cio.h b/include/asm-s390/cio.h index 0818ecd30ca6..6dccb071aec3 100644 --- a/include/asm-s390/cio.h +++ b/include/asm-s390/cio.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | #define __MAX_CSSID 0 | 16 | #define __MAX_CSSID 0 |
| 17 | 17 | ||
| 18 | /** | 18 | /** |
| 19 | * struct scsw - subchannel status word | 19 | * struct cmd_scsw - command-mode subchannel status word |
| 20 | * @key: subchannel key | 20 | * @key: subchannel key |
| 21 | * @sctl: suspend control | 21 | * @sctl: suspend control |
| 22 | * @eswf: esw format | 22 | * @eswf: esw format |
| @@ -38,7 +38,7 @@ | |||
| 38 | * @cstat: subchannel status | 38 | * @cstat: subchannel status |
| 39 | * @count: residual count | 39 | * @count: residual count |
| 40 | */ | 40 | */ |
| 41 | struct scsw { | 41 | struct cmd_scsw { |
| 42 | __u32 key : 4; | 42 | __u32 key : 4; |
| 43 | __u32 sctl : 1; | 43 | __u32 sctl : 1; |
| 44 | __u32 eswf : 1; | 44 | __u32 eswf : 1; |
| @@ -61,6 +61,114 @@ struct scsw { | |||
| 61 | __u32 count : 16; | 61 | __u32 count : 16; |
| 62 | } __attribute__ ((packed)); | 62 | } __attribute__ ((packed)); |
| 63 | 63 | ||
| 64 | /** | ||
| 65 | * struct tm_scsw - transport-mode subchannel status word | ||
| 66 | * @key: subchannel key | ||
| 67 | * @eswf: esw format | ||
| 68 | * @cc: deferred condition code | ||
| 69 | * @fmt: format | ||
| 70 | * @x: IRB-format control | ||
| 71 | * @q: interrogate-complete | ||
| 72 | * @ectl: extended control | ||
| 73 | * @pno: path not operational | ||
| 74 | * @fctl: function control | ||
| 75 | * @actl: activity control | ||
| 76 | * @stctl: status control | ||
| 77 | * @tcw: TCW address | ||
| 78 | * @dstat: device status | ||
| 79 | * @cstat: subchannel status | ||
| 80 | * @fcxs: FCX status | ||
| 81 | * @schxs: subchannel-extended status | ||
| 82 | */ | ||
| 83 | struct tm_scsw { | ||
| 84 | u32 key:4; | ||
| 85 | u32 :1; | ||
| 86 | u32 eswf:1; | ||
| 87 | u32 cc:2; | ||
| 88 | u32 fmt:3; | ||
| 89 | u32 x:1; | ||
| 90 | u32 q:1; | ||
| 91 | u32 :1; | ||
| 92 | u32 ectl:1; | ||
| 93 | u32 pno:1; | ||
| 94 | u32 :1; | ||
| 95 | u32 fctl:3; | ||
| 96 | u32 actl:7; | ||
| 97 | u32 stctl:5; | ||
| 98 | u32 tcw; | ||
| 99 | u32 dstat:8; | ||
| 100 | u32 cstat:8; | ||
| 101 | u32 fcxs:8; | ||
| 102 | u32 schxs:8; | ||
| 103 | } __attribute__ ((packed)); | ||
| 104 | |||
| 105 | /** | ||
| 106 | * union scsw - subchannel status word | ||
| 107 | * @cmd: command-mode SCSW | ||
| 108 | * @tm: transport-mode SCSW | ||
| 109 | */ | ||
| 110 | union scsw { | ||
| 111 | struct cmd_scsw cmd; | ||
| 112 | struct tm_scsw tm; | ||
| 113 | } __attribute__ ((packed)); | ||
| 114 | |||
| 115 | int scsw_is_tm(union scsw *scsw); | ||
| 116 | u32 scsw_key(union scsw *scsw); | ||
| 117 | u32 scsw_eswf(union scsw *scsw); | ||
| 118 | u32 scsw_cc(union scsw *scsw); | ||
| 119 | u32 scsw_ectl(union scsw *scsw); | ||
| 120 | u32 scsw_pno(union scsw *scsw); | ||
| 121 | u32 scsw_fctl(union scsw *scsw); | ||
| 122 | u32 scsw_actl(union scsw *scsw); | ||
| 123 | u32 scsw_stctl(union scsw *scsw); | ||
| 124 | u32 scsw_dstat(union scsw *scsw); | ||
| 125 | u32 scsw_cstat(union scsw *scsw); | ||
| 126 | int scsw_is_solicited(union scsw *scsw); | ||
| 127 | int scsw_is_valid_key(union scsw *scsw); | ||
| 128 | int scsw_is_valid_eswf(union scsw *scsw); | ||
| 129 | int scsw_is_valid_cc(union scsw *scsw); | ||
| 130 | int scsw_is_valid_ectl(union scsw *scsw); | ||
| 131 | int scsw_is_valid_pno(union scsw *scsw); | ||
| 132 | int scsw_is_valid_fctl(union scsw *scsw); | ||
| 133 | int scsw_is_valid_actl(union scsw *scsw); | ||
| 134 | int scsw_is_valid_stctl(union scsw *scsw); | ||
| 135 | int scsw_is_valid_dstat(union scsw *scsw); | ||
| 136 | int scsw_is_valid_cstat(union scsw *scsw); | ||
| 137 | int scsw_cmd_is_valid_key(union scsw *scsw); | ||
| 138 | int scsw_cmd_is_valid_sctl(union scsw *scsw); | ||
| 139 | int scsw_cmd_is_valid_eswf(union scsw *scsw); | ||
| 140 | int scsw_cmd_is_valid_cc(union scsw *scsw); | ||
| 141 | int scsw_cmd_is_valid_fmt(union scsw *scsw); | ||
| 142 | int scsw_cmd_is_valid_pfch(union scsw *scsw); | ||
| 143 | int scsw_cmd_is_valid_isic(union scsw *scsw); | ||
| 144 | int scsw_cmd_is_valid_alcc(union scsw *scsw); | ||
| 145 | int scsw_cmd_is_valid_ssi(union scsw *scsw); | ||
| 146 | int scsw_cmd_is_valid_zcc(union scsw *scsw); | ||
| 147 | int scsw_cmd_is_valid_ectl(union scsw *scsw); | ||
| 148 | int scsw_cmd_is_valid_pno(union scsw *scsw); | ||
| 149 | int scsw_cmd_is_valid_fctl(union scsw *scsw); | ||
| 150 | int scsw_cmd_is_valid_actl(union scsw *scsw); | ||
| 151 | int scsw_cmd_is_valid_stctl(union scsw *scsw); | ||
| 152 | int scsw_cmd_is_valid_dstat(union scsw *scsw); | ||
| 153 | int scsw_cmd_is_valid_cstat(union scsw *scsw); | ||
| 154 | int scsw_cmd_is_solicited(union scsw *scsw); | ||
| 155 | int scsw_tm_is_valid_key(union scsw *scsw); | ||
| 156 | int scsw_tm_is_valid_eswf(union scsw *scsw); | ||
| 157 | int scsw_tm_is_valid_cc(union scsw *scsw); | ||
| 158 | int scsw_tm_is_valid_fmt(union scsw *scsw); | ||
| 159 | int scsw_tm_is_valid_x(union scsw *scsw); | ||
| 160 | int scsw_tm_is_valid_q(union scsw *scsw); | ||
| 161 | int scsw_tm_is_valid_ectl(union scsw *scsw); | ||
| 162 | int scsw_tm_is_valid_pno(union scsw *scsw); | ||
| 163 | int scsw_tm_is_valid_fctl(union scsw *scsw); | ||
| 164 | int scsw_tm_is_valid_actl(union scsw *scsw); | ||
| 165 | int scsw_tm_is_valid_stctl(union scsw *scsw); | ||
| 166 | int scsw_tm_is_valid_dstat(union scsw *scsw); | ||
| 167 | int scsw_tm_is_valid_cstat(union scsw *scsw); | ||
| 168 | int scsw_tm_is_valid_fcxs(union scsw *scsw); | ||
| 169 | int scsw_tm_is_valid_schxs(union scsw *scsw); | ||
| 170 | int scsw_tm_is_solicited(union scsw *scsw); | ||
| 171 | |||
| 64 | #define SCSW_FCTL_CLEAR_FUNC 0x1 | 172 | #define SCSW_FCTL_CLEAR_FUNC 0x1 |
| 65 | #define SCSW_FCTL_HALT_FUNC 0x2 | 173 | #define SCSW_FCTL_HALT_FUNC 0x2 |
| 66 | #define SCSW_FCTL_START_FUNC 0x4 | 174 | #define SCSW_FCTL_START_FUNC 0x4 |
| @@ -303,7 +411,7 @@ struct esw3 { | |||
| 303 | * if applicable). | 411 | * if applicable). |
| 304 | */ | 412 | */ |
| 305 | struct irb { | 413 | struct irb { |
| 306 | struct scsw scsw; | 414 | union scsw scsw; |
| 307 | union { | 415 | union { |
| 308 | struct esw0 esw0; | 416 | struct esw0 esw0; |
| 309 | struct esw1 esw1; | 417 | struct esw1 esw1; |
diff --git a/include/asm-s390/elf.h b/include/asm-s390/elf.h index b3ac262c4582..3cad56923815 100644 --- a/include/asm-s390/elf.h +++ b/include/asm-s390/elf.h | |||
| @@ -113,6 +113,9 @@ | |||
| 113 | typedef s390_fp_regs elf_fpregset_t; | 113 | typedef s390_fp_regs elf_fpregset_t; |
| 114 | typedef s390_regs elf_gregset_t; | 114 | typedef s390_regs elf_gregset_t; |
| 115 | 115 | ||
| 116 | typedef s390_fp_regs compat_elf_fpregset_t; | ||
| 117 | typedef s390_compat_regs compat_elf_gregset_t; | ||
| 118 | |||
| 116 | #include <linux/sched.h> /* for task_struct */ | 119 | #include <linux/sched.h> /* for task_struct */ |
| 117 | #include <asm/system.h> /* for save_access_regs */ | 120 | #include <asm/system.h> /* for save_access_regs */ |
| 118 | #include <asm/mmu_context.h> | 121 | #include <asm/mmu_context.h> |
| @@ -123,6 +126,10 @@ typedef s390_regs elf_gregset_t; | |||
| 123 | #define elf_check_arch(x) \ | 126 | #define elf_check_arch(x) \ |
| 124 | (((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \ | 127 | (((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \ |
| 125 | && (x)->e_ident[EI_CLASS] == ELF_CLASS) | 128 | && (x)->e_ident[EI_CLASS] == ELF_CLASS) |
| 129 | #define compat_elf_check_arch(x) \ | ||
| 130 | (((x)->e_machine == EM_S390 || (x)->e_machine == EM_S390_OLD) \ | ||
| 131 | && (x)->e_ident[EI_CLASS] == ELF_CLASS) | ||
| 132 | #define compat_start_thread start_thread31 | ||
| 126 | 133 | ||
| 127 | /* For SVR4/S390 the function pointer to be registered with `atexit` is | 134 | /* For SVR4/S390 the function pointer to be registered with `atexit` is |
| 128 | passed in R14. */ | 135 | passed in R14. */ |
| @@ -131,6 +138,7 @@ typedef s390_regs elf_gregset_t; | |||
| 131 | _r->gprs[14] = 0; \ | 138 | _r->gprs[14] = 0; \ |
| 132 | } while (0) | 139 | } while (0) |
| 133 | 140 | ||
| 141 | #define CORE_DUMP_USE_REGSET | ||
| 134 | #define USE_ELF_CORE_DUMP | 142 | #define USE_ELF_CORE_DUMP |
| 135 | #define ELF_EXEC_PAGESIZE 4096 | 143 | #define ELF_EXEC_PAGESIZE 4096 |
| 136 | 144 | ||
| @@ -140,44 +148,6 @@ typedef s390_regs elf_gregset_t; | |||
| 140 | that it will "exec", and that there is sufficient room for the brk. */ | 148 | that it will "exec", and that there is sufficient room for the brk. */ |
| 141 | #define ELF_ET_DYN_BASE (STACK_TOP / 3 * 2) | 149 | #define ELF_ET_DYN_BASE (STACK_TOP / 3 * 2) |
| 142 | 150 | ||
| 143 | /* Wow, the "main" arch needs arch dependent functions too.. :) */ | ||
| 144 | |||
| 145 | /* regs is struct pt_regs, pr_reg is elf_gregset_t (which is | ||
| 146 | now struct_user_regs, they are different) */ | ||
| 147 | |||
| 148 | static inline int dump_regs(struct pt_regs *ptregs, elf_gregset_t *regs) | ||
| 149 | { | ||
| 150 | memcpy(®s->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs)); | ||
| 151 | save_access_regs(regs->acrs); | ||
| 152 | regs->orig_gpr2 = ptregs->orig_gpr2; | ||
| 153 | return 1; | ||
| 154 | } | ||
| 155 | |||
| 156 | #define ELF_CORE_COPY_REGS(pr_reg, regs) dump_regs(regs, &pr_reg); | ||
| 157 | |||
| 158 | static inline int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) | ||
| 159 | { | ||
| 160 | struct pt_regs *ptregs = task_pt_regs(tsk); | ||
| 161 | memcpy(®s->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs)); | ||
| 162 | memcpy(regs->acrs, tsk->thread.acrs, sizeof(regs->acrs)); | ||
| 163 | regs->orig_gpr2 = ptregs->orig_gpr2; | ||
| 164 | return 1; | ||
| 165 | } | ||
| 166 | |||
| 167 | #define ELF_CORE_COPY_TASK_REGS(tsk, regs) dump_task_regs(tsk, regs) | ||
| 168 | |||
| 169 | static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs) | ||
| 170 | { | ||
| 171 | if (tsk == current) | ||
| 172 | save_fp_regs(fpregs); | ||
| 173 | else | ||
| 174 | memcpy(fpregs, &tsk->thread.fp_regs, sizeof(elf_fpregset_t)); | ||
| 175 | return 1; | ||
| 176 | } | ||
| 177 | |||
| 178 | #define ELF_CORE_COPY_FPREGS(tsk, fpregs) dump_task_fpu(tsk, fpregs) | ||
| 179 | |||
| 180 | |||
| 181 | /* This yields a mask that user programs can use to figure out what | 151 | /* This yields a mask that user programs can use to figure out what |
| 182 | instruction set this CPU supports. */ | 152 | instruction set this CPU supports. */ |
| 183 | 153 | ||
| @@ -204,7 +174,10 @@ do { \ | |||
| 204 | set_personality(PER_SVR4); \ | 174 | set_personality(PER_SVR4); \ |
| 205 | else if (current->personality != PER_LINUX32) \ | 175 | else if (current->personality != PER_LINUX32) \ |
| 206 | set_personality(PER_LINUX); \ | 176 | set_personality(PER_LINUX); \ |
| 207 | clear_thread_flag(TIF_31BIT); \ | 177 | if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ |
| 178 | set_thread_flag(TIF_31BIT); \ | ||
| 179 | else \ | ||
| 180 | clear_thread_flag(TIF_31BIT); \ | ||
| 208 | } while (0) | 181 | } while (0) |
| 209 | #endif /* __s390x__ */ | 182 | #endif /* __s390x__ */ |
| 210 | 183 | ||
diff --git a/include/asm-s390/etr.h b/include/asm-s390/etr.h index b498f19bb9a7..80ef58c61970 100644 --- a/include/asm-s390/etr.h +++ b/include/asm-s390/etr.h | |||
| @@ -122,7 +122,7 @@ struct etr_aib { | |||
| 122 | } __attribute__ ((packed,aligned(8))); | 122 | } __attribute__ ((packed,aligned(8))); |
| 123 | 123 | ||
| 124 | /* ETR interruption parameter */ | 124 | /* ETR interruption parameter */ |
| 125 | struct etr_interruption_parameter { | 125 | struct etr_irq_parm { |
| 126 | unsigned int _pad0 : 8; | 126 | unsigned int _pad0 : 8; |
| 127 | unsigned int pc0 : 1; /* port 0 state change */ | 127 | unsigned int pc0 : 1; /* port 0 state change */ |
| 128 | unsigned int pc1 : 1; /* port 1 state change */ | 128 | unsigned int pc1 : 1; /* port 1 state change */ |
| @@ -213,7 +213,46 @@ static inline int etr_ptff(void *ptff_block, unsigned int func) | |||
| 213 | #define ETR_PTFF_SGS 0x43 /* set gross steering rate */ | 213 | #define ETR_PTFF_SGS 0x43 /* set gross steering rate */ |
| 214 | 214 | ||
| 215 | /* Functions needed by the machine check handler */ | 215 | /* Functions needed by the machine check handler */ |
| 216 | extern void etr_switch_to_local(void); | 216 | void etr_switch_to_local(void); |
| 217 | extern void etr_sync_check(void); | 217 | void etr_sync_check(void); |
| 218 | |||
| 219 | /* STP interruption parameter */ | ||
| 220 | struct stp_irq_parm { | ||
| 221 | unsigned int _pad0 : 14; | ||
| 222 | unsigned int tsc : 1; /* Timing status change */ | ||
| 223 | unsigned int lac : 1; /* Link availability change */ | ||
| 224 | unsigned int tcpc : 1; /* Time control parameter change */ | ||
| 225 | unsigned int _pad2 : 15; | ||
| 226 | } __attribute__ ((packed)); | ||
| 227 | |||
| 228 | #define STP_OP_SYNC 1 | ||
| 229 | #define STP_OP_CTRL 3 | ||
| 230 | |||
| 231 | struct stp_sstpi { | ||
| 232 | unsigned int rsvd0; | ||
| 233 | unsigned int rsvd1 : 8; | ||
| 234 | unsigned int stratum : 8; | ||
| 235 | unsigned int vbits : 16; | ||
| 236 | unsigned int leaps : 16; | ||
| 237 | unsigned int tmd : 4; | ||
| 238 | unsigned int ctn : 4; | ||
| 239 | unsigned int rsvd2 : 3; | ||
| 240 | unsigned int c : 1; | ||
| 241 | unsigned int tst : 4; | ||
| 242 | unsigned int tzo : 16; | ||
| 243 | unsigned int dsto : 16; | ||
| 244 | unsigned int ctrl : 16; | ||
| 245 | unsigned int rsvd3 : 16; | ||
| 246 | unsigned int tto; | ||
| 247 | unsigned int rsvd4; | ||
| 248 | unsigned int ctnid[3]; | ||
| 249 | unsigned int rsvd5; | ||
| 250 | unsigned int todoff[4]; | ||
| 251 | unsigned int rsvd6[48]; | ||
| 252 | } __attribute__ ((packed)); | ||
| 253 | |||
| 254 | /* Functions needed by the machine check handler */ | ||
| 255 | void stp_sync_check(void); | ||
| 256 | void stp_island_check(void); | ||
| 218 | 257 | ||
| 219 | #endif /* __S390_ETR_H */ | 258 | #endif /* __S390_ETR_H */ |
diff --git a/include/asm-s390/fcx.h b/include/asm-s390/fcx.h new file mode 100644 index 000000000000..8be1f3a58042 --- /dev/null +++ b/include/asm-s390/fcx.h | |||
| @@ -0,0 +1,311 @@ | |||
| 1 | /* | ||
| 2 | * Functions for assembling fcx enabled I/O control blocks. | ||
| 3 | * | ||
| 4 | * Copyright IBM Corp. 2008 | ||
| 5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef _ASM_S390_FCX_H | ||
| 9 | #define _ASM_S390_FCX_H _ASM_S390_FCX_H | ||
| 10 | |||
| 11 | #include <linux/types.h> | ||
| 12 | |||
| 13 | #define TCW_FORMAT_DEFAULT 0 | ||
| 14 | #define TCW_TIDAW_FORMAT_DEFAULT 0 | ||
| 15 | #define TCW_FLAGS_INPUT_TIDA 1 << (23 - 5) | ||
| 16 | #define TCW_FLAGS_TCCB_TIDA 1 << (23 - 6) | ||
| 17 | #define TCW_FLAGS_OUTPUT_TIDA 1 << (23 - 7) | ||
| 18 | #define TCW_FLAGS_TIDAW_FORMAT(x) ((x) & 3) << (23 - 9) | ||
| 19 | #define TCW_FLAGS_GET_TIDAW_FORMAT(x) (((x) >> (23 - 9)) & 3) | ||
| 20 | |||
| 21 | /** | ||
| 22 | * struct tcw - Transport Control Word (TCW) | ||
| 23 | * @format: TCW format | ||
| 24 | * @flags: TCW flags | ||
| 25 | * @tccbl: Transport-Command-Control-Block Length | ||
| 26 | * @r: Read Operations | ||
| 27 | * @w: Write Operations | ||
| 28 | * @output: Output-Data Address | ||
| 29 | * @input: Input-Data Address | ||
| 30 | * @tsb: Transport-Status-Block Address | ||
| 31 | * @tccb: Transport-Command-Control-Block Address | ||
| 32 | * @output_count: Output Count | ||
| 33 | * @input_count: Input Count | ||
| 34 | * @intrg: Interrogate TCW Address | ||
| 35 | */ | ||
| 36 | struct tcw { | ||
| 37 | u32 format:2; | ||
| 38 | u32 :6; | ||
| 39 | u32 flags:24; | ||
| 40 | u32 :8; | ||
| 41 | u32 tccbl:6; | ||
| 42 | u32 r:1; | ||
| 43 | u32 w:1; | ||
| 44 | u32 :16; | ||
| 45 | u64 output; | ||
| 46 | u64 input; | ||
| 47 | u64 tsb; | ||
| 48 | u64 tccb; | ||
| 49 | u32 output_count; | ||
| 50 | u32 input_count; | ||
| 51 | u32 :32; | ||
| 52 | u32 :32; | ||
| 53 | u32 :32; | ||
| 54 | u32 intrg; | ||
| 55 | } __attribute__ ((packed, aligned(64))); | ||
| 56 | |||
| 57 | #define TIDAW_FLAGS_LAST 1 << (7 - 0) | ||
| 58 | #define TIDAW_FLAGS_SKIP 1 << (7 - 1) | ||
| 59 | #define TIDAW_FLAGS_DATA_INT 1 << (7 - 2) | ||
| 60 | #define TIDAW_FLAGS_TTIC 1 << (7 - 3) | ||
| 61 | #define TIDAW_FLAGS_INSERT_CBC 1 << (7 - 4) | ||
| 62 | |||
| 63 | /** | ||
| 64 | * struct tidaw - Transport-Indirect-Addressing Word (TIDAW) | ||
| 65 | * @flags: TIDAW flags. Can be an arithmetic OR of the following constants: | ||
| 66 | * %TIDAW_FLAGS_LAST, %TIDAW_FLAGS_SKIP, %TIDAW_FLAGS_DATA_INT, | ||
| 67 | * %TIDAW_FLAGS_TTIC, %TIDAW_FLAGS_INSERT_CBC | ||
| 68 | * @count: Count | ||
| 69 | * @addr: Address | ||
| 70 | */ | ||
| 71 | struct tidaw { | ||
| 72 | u32 flags:8; | ||
| 73 | u32 :24; | ||
| 74 | u32 count; | ||
| 75 | u64 addr; | ||
| 76 | } __attribute__ ((packed, aligned(16))); | ||
| 77 | |||
| 78 | /** | ||
| 79 | * struct tsa_iostat - I/O-Status Transport-Status Area (IO-Stat TSA) | ||
| 80 | * @dev_time: Device Time | ||
| 81 | * @def_time: Defer Time | ||
| 82 | * @queue_time: Queue Time | ||
| 83 | * @dev_busy_time: Device-Busy Time | ||
| 84 | * @dev_act_time: Device-Active-Only Time | ||
| 85 | * @sense: Sense Data (if present) | ||
| 86 | */ | ||
| 87 | struct tsa_iostat { | ||
| 88 | u32 dev_time; | ||
| 89 | u32 def_time; | ||
| 90 | u32 queue_time; | ||
| 91 | u32 dev_busy_time; | ||
| 92 | u32 dev_act_time; | ||
| 93 | u8 sense[32]; | ||
| 94 | } __attribute__ ((packed)); | ||
| 95 | |||
| 96 | /** | ||
| 97 | * struct tsa_ddpcs - Device-Detected-Program-Check Transport-Status Area (DDPC TSA) | ||
| 98 | * @rc: Reason Code | ||
| 99 | * @rcq: Reason Code Qualifier | ||
| 100 | * @sense: Sense Data (if present) | ||
| 101 | */ | ||
| 102 | struct tsa_ddpc { | ||
| 103 | u32 :24; | ||
| 104 | u32 rc:8; | ||
| 105 | u8 rcq[16]; | ||
| 106 | u8 sense[32]; | ||
| 107 | } __attribute__ ((packed)); | ||
| 108 | |||
| 109 | #define TSA_INTRG_FLAGS_CU_STATE_VALID 1 << (7 - 0) | ||
| 110 | #define TSA_INTRG_FLAGS_DEV_STATE_VALID 1 << (7 - 1) | ||
| 111 | #define TSA_INTRG_FLAGS_OP_STATE_VALID 1 << (7 - 2) | ||
| 112 | |||
| 113 | /** | ||
| 114 | * struct tsa_intrg - Interrogate Transport-Status Area (Intrg. TSA) | ||
| 115 | * @format: Format | ||
| 116 | * @flags: Flags. Can be an arithmetic OR of the following constants: | ||
| 117 | * %TSA_INTRG_FLAGS_CU_STATE_VALID, %TSA_INTRG_FLAGS_DEV_STATE_VALID, | ||
| 118 | * %TSA_INTRG_FLAGS_OP_STATE_VALID | ||
| 119 | * @cu_state: Controle-Unit State | ||
| 120 | * @dev_state: Device State | ||
| 121 | * @op_state: Operation State | ||
| 122 | * @sd_info: State-Dependent Information | ||
| 123 | * @dl_id: Device-Level Identifier | ||
| 124 | * @dd_data: Device-Dependent Data | ||
| 125 | */ | ||
| 126 | struct tsa_intrg { | ||
| 127 | u32 format:8; | ||
| 128 | u32 flags:8; | ||
| 129 | u32 cu_state:8; | ||
| 130 | u32 dev_state:8; | ||
| 131 | u32 op_state:8; | ||
| 132 | u32 :24; | ||
| 133 | u8 sd_info[12]; | ||
| 134 | u32 dl_id; | ||
| 135 | u8 dd_data[28]; | ||
| 136 | } __attribute__ ((packed)); | ||
| 137 | |||
| 138 | #define TSB_FORMAT_NONE 0 | ||
| 139 | #define TSB_FORMAT_IOSTAT 1 | ||
| 140 | #define TSB_FORMAT_DDPC 2 | ||
| 141 | #define TSB_FORMAT_INTRG 3 | ||
| 142 | |||
| 143 | #define TSB_FLAGS_DCW_OFFSET_VALID 1 << (7 - 0) | ||
| 144 | #define TSB_FLAGS_COUNT_VALID 1 << (7 - 1) | ||
| 145 | #define TSB_FLAGS_CACHE_MISS 1 << (7 - 2) | ||
| 146 | #define TSB_FLAGS_TIME_VALID 1 << (7 - 3) | ||
| 147 | #define TSB_FLAGS_FORMAT(x) ((x) & 7) | ||
| 148 | #define TSB_FORMAT(t) ((t)->flags & 7) | ||
| 149 | |||
| 150 | /** | ||
| 151 | * struct tsb - Transport-Status Block (TSB) | ||
| 152 | * @length: Length | ||
| 153 | * @flags: Flags. Can be an arithmetic OR of the following constants: | ||
| 154 | * %TSB_FLAGS_DCW_OFFSET_VALID, %TSB_FLAGS_COUNT_VALID, %TSB_FLAGS_CACHE_MISS, | ||
| 155 | * %TSB_FLAGS_TIME_VALID | ||
| 156 | * @dcw_offset: DCW Offset | ||
| 157 | * @count: Count | ||
| 158 | * @tsa: Transport-Status-Area | ||
| 159 | */ | ||
| 160 | struct tsb { | ||
| 161 | u32 length:8; | ||
| 162 | u32 flags:8; | ||
| 163 | u32 dcw_offset:16; | ||
| 164 | u32 count; | ||
| 165 | u32 :32; | ||
| 166 | union { | ||
| 167 | struct tsa_iostat iostat; | ||
| 168 | struct tsa_ddpc ddpc; | ||
| 169 | struct tsa_intrg intrg; | ||
| 170 | } __attribute__ ((packed)) tsa; | ||
| 171 | } __attribute__ ((packed, aligned(8))); | ||
| 172 | |||
| 173 | #define DCW_INTRG_FORMAT_DEFAULT 0 | ||
| 174 | |||
| 175 | #define DCW_INTRG_RC_UNSPECIFIED 0 | ||
| 176 | #define DCW_INTRG_RC_TIMEOUT 1 | ||
| 177 | |||
| 178 | #define DCW_INTRG_RCQ_UNSPECIFIED 0 | ||
| 179 | #define DCW_INTRG_RCQ_PRIMARY 1 | ||
| 180 | #define DCW_INTRG_RCQ_SECONDARY 2 | ||
| 181 | |||
| 182 | #define DCW_INTRG_FLAGS_MPM 1 < (7 - 0) | ||
| 183 | #define DCW_INTRG_FLAGS_PPR 1 < (7 - 1) | ||
| 184 | #define DCW_INTRG_FLAGS_CRIT 1 < (7 - 2) | ||
| 185 | |||
| 186 | /** | ||
| 187 | * struct dcw_intrg_data - Interrogate DCW data | ||
| 188 | * @format: Format. Should be %DCW_INTRG_FORMAT_DEFAULT | ||
| 189 | * @rc: Reason Code. Can be one of %DCW_INTRG_RC_UNSPECIFIED, | ||
| 190 | * %DCW_INTRG_RC_TIMEOUT | ||
| 191 | * @rcq: Reason Code Qualifier: Can be one of %DCW_INTRG_RCQ_UNSPECIFIED, | ||
| 192 | * %DCW_INTRG_RCQ_PRIMARY, %DCW_INTRG_RCQ_SECONDARY | ||
| 193 | * @lpm: Logical-Path Mask | ||
| 194 | * @pam: Path-Available Mask | ||
| 195 | * @pim: Path-Installed Mask | ||
| 196 | * @timeout: Timeout | ||
| 197 | * @flags: Flags. Can be an arithmetic OR of %DCW_INTRG_FLAGS_MPM, | ||
| 198 | * %DCW_INTRG_FLAGS_PPR, %DCW_INTRG_FLAGS_CRIT | ||
| 199 | * @time: Time | ||
| 200 | * @prog_id: Program Identifier | ||
| 201 | * @prog_data: Program-Dependent Data | ||
| 202 | */ | ||
| 203 | struct dcw_intrg_data { | ||
| 204 | u32 format:8; | ||
| 205 | u32 rc:8; | ||
| 206 | u32 rcq:8; | ||
| 207 | u32 lpm:8; | ||
| 208 | u32 pam:8; | ||
| 209 | u32 pim:8; | ||
| 210 | u32 timeout:16; | ||
| 211 | u32 flags:8; | ||
| 212 | u32 :24; | ||
| 213 | u32 :32; | ||
| 214 | u64 time; | ||
| 215 | u64 prog_id; | ||
| 216 | u8 prog_data[0]; | ||
| 217 | } __attribute__ ((packed)); | ||
| 218 | |||
| 219 | #define DCW_FLAGS_CC 1 << (7 - 1) | ||
| 220 | |||
| 221 | #define DCW_CMD_WRITE 0x01 | ||
| 222 | #define DCW_CMD_READ 0x02 | ||
| 223 | #define DCW_CMD_CONTROL 0x03 | ||
| 224 | #define DCW_CMD_SENSE 0x04 | ||
| 225 | #define DCW_CMD_SENSE_ID 0xe4 | ||
| 226 | #define DCW_CMD_INTRG 0x40 | ||
| 227 | |||
| 228 | /** | ||
| 229 | * struct dcw - Device-Command Word (DCW) | ||
| 230 | * @cmd: Command Code. Can be one of %DCW_CMD_WRITE, %DCW_CMD_READ, | ||
| 231 | * %DCW_CMD_CONTROL, %DCW_CMD_SENSE, %DCW_CMD_SENSE_ID, %DCW_CMD_INTRG | ||
| 232 | * @flags: Flags. Can be an arithmetic OR of %DCW_FLAGS_CC | ||
| 233 | * @cd_count: Control-Data Count | ||
| 234 | * @count: Count | ||
| 235 | * @cd: Control Data | ||
| 236 | */ | ||
| 237 | struct dcw { | ||
| 238 | u32 cmd:8; | ||
| 239 | u32 flags:8; | ||
| 240 | u32 :8; | ||
| 241 | u32 cd_count:8; | ||
| 242 | u32 count; | ||
| 243 | u8 cd[0]; | ||
| 244 | } __attribute__ ((packed)); | ||
| 245 | |||
| 246 | #define TCCB_FORMAT_DEFAULT 0x7f | ||
| 247 | #define TCCB_MAX_DCW 30 | ||
| 248 | #define TCCB_MAX_SIZE (sizeof(struct tccb_tcah) + \ | ||
| 249 | TCCB_MAX_DCW * sizeof(struct dcw) + \ | ||
| 250 | sizeof(struct tccb_tcat)) | ||
| 251 | #define TCCB_SAC_DEFAULT 0xf901 | ||
| 252 | #define TCCB_SAC_INTRG 0xf902 | ||
| 253 | |||
| 254 | /** | ||
| 255 | * struct tccb_tcah - Transport-Command-Area Header (TCAH) | ||
| 256 | * @format: Format. Should be %TCCB_FORMAT_DEFAULT | ||
| 257 | * @tcal: Transport-Command-Area Length | ||
| 258 | * @sac: Service-Action Code. Can be one of %TCCB_SAC_DEFAULT, %TCCB_SAC_INTRG | ||
| 259 | * @prio: Priority | ||
| 260 | */ | ||
| 261 | struct tccb_tcah { | ||
| 262 | u32 format:8; | ||
| 263 | u32 :24; | ||
| 264 | u32 :24; | ||
| 265 | u32 tcal:8; | ||
| 266 | u32 sac:16; | ||
| 267 | u32 :8; | ||
| 268 | u32 prio:8; | ||
| 269 | u32 :32; | ||
| 270 | } __attribute__ ((packed)); | ||
| 271 | |||
| 272 | /** | ||
| 273 | * struct tccb_tcat - Transport-Command-Area Trailer (TCAT) | ||
| 274 | * @count: Transport Count | ||
| 275 | */ | ||
| 276 | struct tccb_tcat { | ||
| 277 | u32 :32; | ||
| 278 | u32 count; | ||
| 279 | } __attribute__ ((packed)); | ||
| 280 | |||
| 281 | /** | ||
| 282 | * struct tccb - (partial) Transport-Command-Control Block (TCCB) | ||
| 283 | * @tcah: TCAH | ||
| 284 | * @tca: Transport-Command Area | ||
| 285 | */ | ||
| 286 | struct tccb { | ||
| 287 | struct tccb_tcah tcah; | ||
| 288 | u8 tca[0]; | ||
| 289 | } __attribute__ ((packed, aligned(8))); | ||
| 290 | |||
| 291 | struct tcw *tcw_get_intrg(struct tcw *tcw); | ||
| 292 | void *tcw_get_data(struct tcw *tcw); | ||
| 293 | struct tccb *tcw_get_tccb(struct tcw *tcw); | ||
| 294 | struct tsb *tcw_get_tsb(struct tcw *tcw); | ||
| 295 | |||
| 296 | void tcw_init(struct tcw *tcw, int r, int w); | ||
| 297 | void tcw_finalize(struct tcw *tcw, int num_tidaws); | ||
| 298 | |||
| 299 | void tcw_set_intrg(struct tcw *tcw, struct tcw *intrg_tcw); | ||
| 300 | void tcw_set_data(struct tcw *tcw, void *data, int use_tidal); | ||
| 301 | void tcw_set_tccb(struct tcw *tcw, struct tccb *tccb); | ||
| 302 | void tcw_set_tsb(struct tcw *tcw, struct tsb *tsb); | ||
| 303 | |||
| 304 | void tccb_init(struct tccb *tccb, size_t tccb_size, u32 sac); | ||
| 305 | void tsb_init(struct tsb *tsb); | ||
| 306 | struct dcw *tccb_add_dcw(struct tccb *tccb, size_t tccb_size, u8 cmd, u8 flags, | ||
| 307 | void *cd, u8 cd_count, u32 count); | ||
| 308 | struct tidaw *tcw_add_tidaw(struct tcw *tcw, int num_tidaws, u8 flags, | ||
| 309 | void *addr, u32 count); | ||
| 310 | |||
| 311 | #endif /* _ASM_S390_FCX_H */ | ||
diff --git a/include/asm-s390/ipl.h b/include/asm-s390/ipl.h index c1b2e50392bb..eaca6dff5405 100644 --- a/include/asm-s390/ipl.h +++ b/include/asm-s390/ipl.h | |||
| @@ -56,15 +56,19 @@ struct ipl_block_fcp { | |||
| 56 | u8 scp_data[]; | 56 | u8 scp_data[]; |
| 57 | } __attribute__((packed)); | 57 | } __attribute__((packed)); |
| 58 | 58 | ||
| 59 | #define DIAG308_VMPARM_SIZE 64 | ||
| 60 | |||
| 59 | struct ipl_block_ccw { | 61 | struct ipl_block_ccw { |
| 60 | u8 load_param[8]; | 62 | u8 load_parm[8]; |
| 61 | u8 reserved1[84]; | 63 | u8 reserved1[84]; |
| 62 | u8 reserved2[2]; | 64 | u8 reserved2[2]; |
| 63 | u16 devno; | 65 | u16 devno; |
| 64 | u8 vm_flags; | 66 | u8 vm_flags; |
| 65 | u8 reserved3[3]; | 67 | u8 reserved3[3]; |
| 66 | u32 vm_parm_len; | 68 | u32 vm_parm_len; |
| 67 | u8 reserved4[80]; | 69 | u8 nss_name[8]; |
| 70 | u8 vm_parm[DIAG308_VMPARM_SIZE]; | ||
| 71 | u8 reserved4[8]; | ||
| 68 | } __attribute__((packed)); | 72 | } __attribute__((packed)); |
| 69 | 73 | ||
| 70 | struct ipl_parameter_block { | 74 | struct ipl_parameter_block { |
| @@ -73,7 +77,7 @@ struct ipl_parameter_block { | |||
| 73 | struct ipl_block_fcp fcp; | 77 | struct ipl_block_fcp fcp; |
| 74 | struct ipl_block_ccw ccw; | 78 | struct ipl_block_ccw ccw; |
| 75 | } ipl_info; | 79 | } ipl_info; |
| 76 | } __attribute__((packed)); | 80 | } __attribute__((packed,aligned(4096))); |
| 77 | 81 | ||
| 78 | /* | 82 | /* |
| 79 | * IPL validity flags | 83 | * IPL validity flags |
| @@ -86,6 +90,8 @@ extern void do_reipl(void); | |||
| 86 | extern void do_halt(void); | 90 | extern void do_halt(void); |
| 87 | extern void do_poff(void); | 91 | extern void do_poff(void); |
| 88 | extern void ipl_save_parameters(void); | 92 | extern void ipl_save_parameters(void); |
| 93 | extern void ipl_update_parameters(void); | ||
| 94 | extern void get_ipl_vmparm(char *); | ||
| 89 | 95 | ||
| 90 | enum { | 96 | enum { |
| 91 | IPL_DEVNO_VALID = 1, | 97 | IPL_DEVNO_VALID = 1, |
| @@ -147,6 +153,11 @@ enum diag308_flags { | |||
| 147 | DIAG308_FLAGS_LP_VALID = 0x80, | 153 | DIAG308_FLAGS_LP_VALID = 0x80, |
| 148 | }; | 154 | }; |
| 149 | 155 | ||
| 156 | enum diag308_vm_flags { | ||
| 157 | DIAG308_VM_FLAGS_NSS_VALID = 0x80, | ||
| 158 | DIAG308_VM_FLAGS_VP_VALID = 0x40, | ||
| 159 | }; | ||
| 160 | |||
| 150 | enum diag308_rc { | 161 | enum diag308_rc { |
| 151 | DIAG308_RC_OK = 1, | 162 | DIAG308_RC_OK = 1, |
| 152 | }; | 163 | }; |
diff --git a/include/asm-s390/isc.h b/include/asm-s390/isc.h new file mode 100644 index 000000000000..34bb8916db4f --- /dev/null +++ b/include/asm-s390/isc.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef _ASM_S390_ISC_H | ||
| 2 | #define _ASM_S390_ISC_H | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * I/O interruption subclasses used by drivers. | ||
| 8 | * Please add all used iscs here so that it is possible to distribute | ||
| 9 | * isc usage between drivers. | ||
| 10 | * Reminder: 0 is highest priority, 7 lowest. | ||
| 11 | */ | ||
| 12 | #define MAX_ISC 7 | ||
| 13 | |||
| 14 | /* Regular I/O interrupts. */ | ||
| 15 | #define IO_SCH_ISC 3 /* regular I/O subchannels */ | ||
| 16 | #define CONSOLE_ISC 1 /* console I/O subchannel */ | ||
| 17 | #define CHSC_SCH_ISC 7 /* CHSC subchannels */ | ||
| 18 | /* Adapter interrupts. */ | ||
| 19 | #define QDIO_AIRQ_ISC IO_SCH_ISC /* I/O subchannel in qdio mode */ | ||
| 20 | |||
| 21 | /* Functions for registration of I/O interruption subclasses */ | ||
| 22 | void isc_register(unsigned int isc); | ||
| 23 | void isc_unregister(unsigned int isc); | ||
| 24 | |||
| 25 | #endif /* _ASM_S390_ISC_H */ | ||
diff --git a/include/asm-s390/itcw.h b/include/asm-s390/itcw.h new file mode 100644 index 000000000000..a9bc5c36b32a --- /dev/null +++ b/include/asm-s390/itcw.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* | ||
| 2 | * Functions for incremental construction of fcx enabled I/O control blocks. | ||
| 3 | * | ||
| 4 | * Copyright IBM Corp. 2008 | ||
| 5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef _ASM_S390_ITCW_H | ||
| 9 | #define _ASM_S390_ITCW_H _ASM_S390_ITCW_H | ||
| 10 | |||
| 11 | #include <linux/types.h> | ||
| 12 | #include <asm/fcx.h> | ||
| 13 | |||
| 14 | #define ITCW_OP_READ 0 | ||
| 15 | #define ITCW_OP_WRITE 1 | ||
| 16 | |||
| 17 | struct itcw; | ||
| 18 | |||
| 19 | struct tcw *itcw_get_tcw(struct itcw *itcw); | ||
| 20 | size_t itcw_calc_size(int intrg, int max_tidaws, int intrg_max_tidaws); | ||
| 21 | struct itcw *itcw_init(void *buffer, size_t size, int op, int intrg, | ||
| 22 | int max_tidaws, int intrg_max_tidaws); | ||
| 23 | struct dcw *itcw_add_dcw(struct itcw *itcw, u8 cmd, u8 flags, void *cd, | ||
| 24 | u8 cd_count, u32 count); | ||
| 25 | struct tidaw *itcw_add_tidaw(struct itcw *itcw, u8 flags, void *addr, | ||
| 26 | u32 count); | ||
| 27 | void itcw_set_data(struct itcw *itcw, void *addr, int use_tidal); | ||
| 28 | void itcw_finalize(struct itcw *itcw); | ||
| 29 | |||
| 30 | #endif /* _ASM_S390_ITCW_H */ | ||
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index bd0ea191dfa9..0bdb704ae051 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | * the S390 page table tree. | 29 | * the S390 page table tree. |
| 30 | */ | 30 | */ |
| 31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
| 32 | #include <linux/sched.h> | ||
| 32 | #include <linux/mm_types.h> | 33 | #include <linux/mm_types.h> |
| 33 | #include <asm/bitops.h> | 34 | #include <asm/bitops.h> |
| 34 | #include <asm/bug.h> | 35 | #include <asm/bug.h> |
diff --git a/include/asm-s390/processor.h b/include/asm-s390/processor.h index a00f79dd323b..4af80af2a88f 100644 --- a/include/asm-s390/processor.h +++ b/include/asm-s390/processor.h | |||
| @@ -143,11 +143,19 @@ struct stack_frame { | |||
| 143 | /* | 143 | /* |
| 144 | * Do necessary setup to start up a new thread. | 144 | * Do necessary setup to start up a new thread. |
| 145 | */ | 145 | */ |
| 146 | #define start_thread(regs, new_psw, new_stackp) do { \ | 146 | #define start_thread(regs, new_psw, new_stackp) do { \ |
| 147 | set_fs(USER_DS); \ | 147 | set_fs(USER_DS); \ |
| 148 | regs->psw.mask = psw_user_bits; \ | 148 | regs->psw.mask = psw_user_bits; \ |
| 149 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | 149 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ |
| 150 | regs->gprs[15] = new_stackp ; \ | 150 | regs->gprs[15] = new_stackp; \ |
| 151 | } while (0) | ||
| 152 | |||
| 153 | #define start_thread31(regs, new_psw, new_stackp) do { \ | ||
| 154 | set_fs(USER_DS); \ | ||
| 155 | regs->psw.mask = psw_user32_bits; \ | ||
| 156 | regs->psw.addr = new_psw | PSW_ADDR_AMODE; \ | ||
| 157 | regs->gprs[15] = new_stackp; \ | ||
| 158 | crst_table_downgrade(current->mm, 1UL << 31); \ | ||
| 151 | } while (0) | 159 | } while (0) |
| 152 | 160 | ||
| 153 | /* Forward declaration, a strange C thing */ | 161 | /* Forward declaration, a strange C thing */ |
| @@ -328,16 +336,6 @@ extern void (*s390_base_mcck_handler_fn)(void); | |||
| 328 | extern void (*s390_base_pgm_handler_fn)(void); | 336 | extern void (*s390_base_pgm_handler_fn)(void); |
| 329 | extern void (*s390_base_ext_handler_fn)(void); | 337 | extern void (*s390_base_ext_handler_fn)(void); |
| 330 | 338 | ||
| 331 | /* | ||
| 332 | * CPU idle notifier chain. | ||
| 333 | */ | ||
| 334 | #define S390_CPU_IDLE 0 | ||
| 335 | #define S390_CPU_NOT_IDLE 1 | ||
| 336 | |||
| 337 | struct notifier_block; | ||
| 338 | int register_idle_notifier(struct notifier_block *nb); | ||
| 339 | int unregister_idle_notifier(struct notifier_block *nb); | ||
| 340 | |||
| 341 | #define ARCH_LOW_ADDRESS_LIMIT 0x7fffffffUL | 339 | #define ARCH_LOW_ADDRESS_LIMIT 0x7fffffffUL |
| 342 | 340 | ||
| 343 | #endif | 341 | #endif |
diff --git a/include/asm-s390/ptrace.h b/include/asm-s390/ptrace.h index d7d4e2eb3e6f..af2c9ac28a07 100644 --- a/include/asm-s390/ptrace.h +++ b/include/asm-s390/ptrace.h | |||
| @@ -215,6 +215,12 @@ typedef struct | |||
| 215 | unsigned long addr; | 215 | unsigned long addr; |
| 216 | } __attribute__ ((aligned(8))) psw_t; | 216 | } __attribute__ ((aligned(8))) psw_t; |
| 217 | 217 | ||
| 218 | typedef struct | ||
| 219 | { | ||
| 220 | __u32 mask; | ||
| 221 | __u32 addr; | ||
| 222 | } __attribute__ ((aligned(8))) psw_compat_t; | ||
| 223 | |||
| 218 | #ifndef __s390x__ | 224 | #ifndef __s390x__ |
| 219 | 225 | ||
| 220 | #define PSW_MASK_PER 0x40000000UL | 226 | #define PSW_MASK_PER 0x40000000UL |
| @@ -292,6 +298,15 @@ typedef struct | |||
| 292 | unsigned long orig_gpr2; | 298 | unsigned long orig_gpr2; |
| 293 | } s390_regs; | 299 | } s390_regs; |
| 294 | 300 | ||
| 301 | typedef struct | ||
| 302 | { | ||
| 303 | psw_compat_t psw; | ||
| 304 | __u32 gprs[NUM_GPRS]; | ||
| 305 | __u32 acrs[NUM_ACRS]; | ||
| 306 | __u32 orig_gpr2; | ||
| 307 | } s390_compat_regs; | ||
| 308 | |||
| 309 | |||
| 295 | #ifdef __KERNEL__ | 310 | #ifdef __KERNEL__ |
| 296 | #include <asm/setup.h> | 311 | #include <asm/setup.h> |
| 297 | #include <asm/page.h> | 312 | #include <asm/page.h> |
diff --git a/include/asm-s390/schid.h b/include/asm-s390/schid.h new file mode 100644 index 000000000000..5017ffa78e04 --- /dev/null +++ b/include/asm-s390/schid.h | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | #ifndef ASM_SCHID_H | ||
| 2 | #define ASM_SCHID_H | ||
| 3 | |||
| 4 | struct subchannel_id { | ||
| 5 | __u32 cssid : 8; | ||
| 6 | __u32 : 4; | ||
| 7 | __u32 m : 1; | ||
| 8 | __u32 ssid : 2; | ||
| 9 | __u32 one : 1; | ||
| 10 | __u32 sch_no : 16; | ||
| 11 | } __attribute__ ((packed, aligned(4))); | ||
| 12 | |||
| 13 | |||
| 14 | /* Helper function for sane state of pre-allocated subchannel_id. */ | ||
| 15 | static inline void | ||
| 16 | init_subchannel_id(struct subchannel_id *schid) | ||
| 17 | { | ||
| 18 | memset(schid, 0, sizeof(struct subchannel_id)); | ||
| 19 | schid->one = 1; | ||
| 20 | } | ||
| 21 | |||
| 22 | static inline int | ||
| 23 | schid_equal(struct subchannel_id *schid1, struct subchannel_id *schid2) | ||
| 24 | { | ||
| 25 | return !memcmp(schid1, schid2, sizeof(struct subchannel_id)); | ||
| 26 | } | ||
| 27 | |||
| 28 | #endif /* ASM_SCHID_H */ | ||
diff --git a/include/asm-s390/sclp.h b/include/asm-s390/sclp.h index b5f2843013a3..fed7bee650a0 100644 --- a/include/asm-s390/sclp.h +++ b/include/asm-s390/sclp.h | |||
| @@ -45,9 +45,9 @@ struct sclp_cpu_info { | |||
| 45 | int sclp_get_cpu_info(struct sclp_cpu_info *info); | 45 | int sclp_get_cpu_info(struct sclp_cpu_info *info); |
| 46 | int sclp_cpu_configure(u8 cpu); | 46 | int sclp_cpu_configure(u8 cpu); |
| 47 | int sclp_cpu_deconfigure(u8 cpu); | 47 | int sclp_cpu_deconfigure(u8 cpu); |
| 48 | void sclp_read_info_early(void); | ||
| 49 | void sclp_facilities_detect(void); | 48 | void sclp_facilities_detect(void); |
| 50 | unsigned long long sclp_memory_detect(void); | 49 | unsigned long long sclp_get_rnmax(void); |
| 50 | unsigned long long sclp_get_rzm(void); | ||
| 51 | int sclp_sdias_blk_count(void); | 51 | int sclp_sdias_blk_count(void); |
| 52 | int sclp_sdias_copy(void *dest, int blk_num, int nr_blks); | 52 | int sclp_sdias_copy(void *dest, int blk_num, int nr_blks); |
| 53 | int sclp_chp_configure(struct chp_id chpid); | 53 | int sclp_chp_configure(struct chp_id chpid); |
diff --git a/include/asm-s390/setup.h b/include/asm-s390/setup.h index ba69674012a7..f09ee3f72977 100644 --- a/include/asm-s390/setup.h +++ b/include/asm-s390/setup.h | |||
| @@ -8,14 +8,16 @@ | |||
| 8 | #ifndef _ASM_S390_SETUP_H | 8 | #ifndef _ASM_S390_SETUP_H |
| 9 | #define _ASM_S390_SETUP_H | 9 | #define _ASM_S390_SETUP_H |
| 10 | 10 | ||
| 11 | #define COMMAND_LINE_SIZE 896 | 11 | #define COMMAND_LINE_SIZE 1024 |
| 12 | |||
| 13 | #define ARCH_COMMAND_LINE_SIZE 896 | ||
| 12 | 14 | ||
| 13 | #ifdef __KERNEL__ | 15 | #ifdef __KERNEL__ |
| 14 | 16 | ||
| 15 | #include <asm/types.h> | 17 | #include <asm/types.h> |
| 16 | 18 | ||
| 17 | #define PARMAREA 0x10400 | 19 | #define PARMAREA 0x10400 |
| 18 | #define MEMORY_CHUNKS 16 /* max 0x7fff */ | 20 | #define MEMORY_CHUNKS 256 |
| 19 | 21 | ||
| 20 | #ifndef __ASSEMBLY__ | 22 | #ifndef __ASSEMBLY__ |
| 21 | 23 | ||
| @@ -36,12 +38,14 @@ | |||
| 36 | struct mem_chunk { | 38 | struct mem_chunk { |
| 37 | unsigned long addr; | 39 | unsigned long addr; |
| 38 | unsigned long size; | 40 | unsigned long size; |
| 39 | unsigned long type; | 41 | int type; |
| 40 | }; | 42 | }; |
| 41 | 43 | ||
| 42 | extern struct mem_chunk memory_chunk[]; | 44 | extern struct mem_chunk memory_chunk[]; |
| 43 | extern unsigned long real_memory_size; | 45 | extern unsigned long real_memory_size; |
| 44 | 46 | ||
| 47 | void detect_memory_layout(struct mem_chunk chunk[]); | ||
| 48 | |||
| 45 | #ifdef CONFIG_S390_SWITCH_AMODE | 49 | #ifdef CONFIG_S390_SWITCH_AMODE |
| 46 | extern unsigned int switch_amode; | 50 | extern unsigned int switch_amode; |
| 47 | #else | 51 | #else |
| @@ -61,7 +65,6 @@ extern unsigned long machine_flags; | |||
| 61 | 65 | ||
| 62 | #define MACHINE_FLAG_VM (1UL << 0) | 66 | #define MACHINE_FLAG_VM (1UL << 0) |
| 63 | #define MACHINE_FLAG_IEEE (1UL << 1) | 67 | #define MACHINE_FLAG_IEEE (1UL << 1) |
| 64 | #define MACHINE_FLAG_P390 (1UL << 2) | ||
| 65 | #define MACHINE_FLAG_CSP (1UL << 3) | 68 | #define MACHINE_FLAG_CSP (1UL << 3) |
| 66 | #define MACHINE_FLAG_MVPG (1UL << 4) | 69 | #define MACHINE_FLAG_MVPG (1UL << 4) |
| 67 | #define MACHINE_FLAG_DIAG44 (1UL << 5) | 70 | #define MACHINE_FLAG_DIAG44 (1UL << 5) |
| @@ -97,7 +100,6 @@ extern unsigned long machine_flags; | |||
| 97 | #define MACHINE_HAS_PFMF (machine_flags & MACHINE_FLAG_PFMF) | 100 | #define MACHINE_HAS_PFMF (machine_flags & MACHINE_FLAG_PFMF) |
| 98 | #endif /* __s390x__ */ | 101 | #endif /* __s390x__ */ |
| 99 | 102 | ||
| 100 | #define MACHINE_HAS_SCLP (!MACHINE_IS_P390) | ||
| 101 | #define ZFCPDUMP_HSA_SIZE (32UL<<20) | 103 | #define ZFCPDUMP_HSA_SIZE (32UL<<20) |
| 102 | 104 | ||
| 103 | /* | 105 | /* |
diff --git a/include/asm-s390/sparsemem.h b/include/asm-s390/sparsemem.h index 06dfdab6c0e8..545d219e6a2d 100644 --- a/include/asm-s390/sparsemem.h +++ b/include/asm-s390/sparsemem.h | |||
| @@ -1,15 +1,15 @@ | |||
| 1 | #ifndef _ASM_S390_SPARSEMEM_H | 1 | #ifndef _ASM_S390_SPARSEMEM_H |
| 2 | #define _ASM_S390_SPARSEMEM_H | 2 | #define _ASM_S390_SPARSEMEM_H |
| 3 | 3 | ||
| 4 | #define SECTION_SIZE_BITS 25 | ||
| 5 | |||
| 6 | #ifdef CONFIG_64BIT | 4 | #ifdef CONFIG_64BIT |
| 7 | 5 | ||
| 6 | #define SECTION_SIZE_BITS 28 | ||
| 8 | #define MAX_PHYSADDR_BITS 42 | 7 | #define MAX_PHYSADDR_BITS 42 |
| 9 | #define MAX_PHYSMEM_BITS 42 | 8 | #define MAX_PHYSMEM_BITS 42 |
| 10 | 9 | ||
| 11 | #else | 10 | #else |
| 12 | 11 | ||
| 12 | #define SECTION_SIZE_BITS 25 | ||
| 13 | #define MAX_PHYSADDR_BITS 31 | 13 | #define MAX_PHYSADDR_BITS 31 |
| 14 | #define MAX_PHYSMEM_BITS 31 | 14 | #define MAX_PHYSMEM_BITS 31 |
| 15 | 15 | ||
diff --git a/include/asm-s390/timer.h b/include/asm-s390/timer.h index adb34860a543..d98d79e35cd6 100644 --- a/include/asm-s390/timer.h +++ b/include/asm-s390/timer.h | |||
| @@ -48,6 +48,18 @@ extern int del_virt_timer(struct vtimer_list *timer); | |||
| 48 | extern void init_cpu_vtimer(void); | 48 | extern void init_cpu_vtimer(void); |
| 49 | extern void vtime_init(void); | 49 | extern void vtime_init(void); |
| 50 | 50 | ||
| 51 | #ifdef CONFIG_VIRT_TIMER | ||
| 52 | |||
| 53 | extern void vtime_start_cpu_timer(void); | ||
| 54 | extern void vtime_stop_cpu_timer(void); | ||
| 55 | |||
| 56 | #else | ||
| 57 | |||
| 58 | static inline void vtime_start_cpu_timer(void) { } | ||
| 59 | static inline void vtime_stop_cpu_timer(void) { } | ||
| 60 | |||
| 61 | #endif /* CONFIG_VIRT_TIMER */ | ||
| 62 | |||
| 51 | #endif /* __KERNEL__ */ | 63 | #endif /* __KERNEL__ */ |
| 52 | 64 | ||
| 53 | #endif /* _ASM_S390_TIMER_H */ | 65 | #endif /* _ASM_S390_TIMER_H */ |
diff --git a/include/asm-s390/zcrypt.h b/include/asm-s390/zcrypt.h index f228f1b86877..00d3bbd44117 100644 --- a/include/asm-s390/zcrypt.h +++ b/include/asm-s390/zcrypt.h | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | #define ZCRYPT_VERSION 2 | 30 | #define ZCRYPT_VERSION 2 |
| 31 | #define ZCRYPT_RELEASE 1 | 31 | #define ZCRYPT_RELEASE 1 |
| 32 | #define ZCRYPT_VARIANT 0 | 32 | #define ZCRYPT_VARIANT 1 |
| 33 | 33 | ||
| 34 | #include <linux/ioctl.h> | 34 | #include <linux/ioctl.h> |
| 35 | #include <linux/compiler.h> | 35 | #include <linux/compiler.h> |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index 69b2342d5ebb..c4db5827963d 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -159,6 +159,15 @@ struct ap_device_id { | |||
| 159 | 159 | ||
| 160 | #define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01 | 160 | #define AP_DEVICE_ID_MATCH_DEVICE_TYPE 0x01 |
| 161 | 161 | ||
| 162 | /* s390 css bus devices (subchannels) */ | ||
| 163 | struct css_device_id { | ||
| 164 | __u8 match_flags; | ||
| 165 | __u8 type; /* subchannel type */ | ||
| 166 | __u16 pad2; | ||
| 167 | __u32 pad3; | ||
| 168 | kernel_ulong_t driver_data; | ||
| 169 | }; | ||
| 170 | |||
| 162 | #define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */ | 171 | #define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */ |
| 163 | /* to workaround crosscompile issues */ | 172 | /* to workaround crosscompile issues */ |
| 164 | 173 | ||
