]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/s390/include/asm/lowcore.h
[S390] Cleanup struct _lowcore usage and defines.
[karo-tx-linux.git] / arch / s390 / include / asm / lowcore.h
index a9eb6834d9211ff641e996a6da7ecb29970ea426..05527c040b7a7ceb1d517c3d3ca332ac1bc0573c 100644 (file)
 /*
- *  include/asm-s390/lowcore.h
- *
- *  S390 version
- *    Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Hartmut Penner (hp@de.ibm.com),
- *               Martin Schwidefsky (schwidefsky@de.ibm.com),
- *               Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
+ *    Copyright IBM Corp. 1999,2010
+ *    Author(s): Hartmut Penner <hp@de.ibm.com>,
+ *              Martin Schwidefsky <schwidefsky@de.ibm.com>,
+ *              Denis Joseph Barrow,
  */
 
 #ifndef _ASM_S390_LOWCORE_H
 #define _ASM_S390_LOWCORE_H
 
-#define __LC_IPL_PARMBLOCK_PTR         0x0014
-#define __LC_EXT_PARAMS                        0x0080
-#define __LC_CPU_ADDRESS               0x0084
-#define __LC_EXT_INT_CODE              0x0086
-
-#define __LC_SVC_ILC                   0x0088
-#define __LC_SVC_INT_CODE              0x008a
-#define __LC_PGM_ILC                   0x008c
-#define __LC_PGM_INT_CODE              0x008e
-
-#define __LC_PER_ATMID                 0x0096
-#define __LC_PER_ADDRESS               0x0098
-#define __LC_PER_ACCESS_ID             0x00a1
-#define __LC_AR_MODE_ID                        0x00a3
-
-#define __LC_SUBCHANNEL_ID             0x00b8
-#define __LC_SUBCHANNEL_NR             0x00ba
-#define __LC_IO_INT_PARM               0x00bc
-#define __LC_IO_INT_WORD               0x00c0
-#define __LC_STFL_FAC_LIST             0x00c8
-#define __LC_MCCK_CODE                 0x00e8
-
-#define __LC_DUMP_REIPL                        0x0e00
-
-#ifndef __s390x__
-#define __LC_RST_NEW_PSW               0x0000
-#define __LC_RST_OLD_PSW               0x0008
-#define __LC_EXT_OLD_PSW               0x0018
-#define __LC_SVC_OLD_PSW               0x0020
-#define __LC_PGM_OLD_PSW               0x0028
-#define __LC_MCK_OLD_PSW               0x0030
-#define __LC_IO_OLD_PSW                        0x0038
-#define __LC_EXT_NEW_PSW               0x0058
-#define __LC_SVC_NEW_PSW               0x0060
-#define __LC_PGM_NEW_PSW               0x0068
-#define __LC_MCK_NEW_PSW               0x0070
-#define __LC_IO_NEW_PSW                        0x0078
-#define __LC_SAVE_AREA                 0x0200
-#define __LC_RETURN_PSW                        0x0240
-#define __LC_RETURN_MCCK_PSW           0x0248
-#define __LC_SYNC_ENTER_TIMER          0x0250
-#define __LC_ASYNC_ENTER_TIMER         0x0258
-#define __LC_EXIT_TIMER                        0x0260
-#define __LC_USER_TIMER                        0x0268
-#define __LC_SYSTEM_TIMER              0x0270
-#define __LC_STEAL_TIMER               0x0278
-#define __LC_LAST_UPDATE_TIMER         0x0280
-#define __LC_LAST_UPDATE_CLOCK         0x0288
-#define __LC_CURRENT                   0x0290
-#define __LC_THREAD_INFO               0x0294
-#define __LC_KERNEL_STACK              0x0298
-#define __LC_ASYNC_STACK               0x029c
-#define __LC_PANIC_STACK               0x02a0
-#define __LC_KERNEL_ASCE               0x02a4
-#define __LC_USER_ASCE                 0x02a8
-#define __LC_USER_EXEC_ASCE            0x02ac
-#define __LC_CPUID                     0x02b0
-#define __LC_INT_CLOCK                 0x02c8
-#define __LC_MACHINE_FLAGS             0x02d8
-#define __LC_FTRACE_FUNC               0x02dc
-#define __LC_IRB                       0x0300
-#define __LC_PFAULT_INTPARM            0x0080
-#define __LC_CPU_TIMER_SAVE_AREA       0x00d8
-#define __LC_CLOCK_COMP_SAVE_AREA      0x00e0
-#define __LC_PSW_SAVE_AREA             0x0100
-#define __LC_PREFIX_SAVE_AREA          0x0108
-#define __LC_AREGS_SAVE_AREA           0x0120
-#define __LC_FPREGS_SAVE_AREA          0x0160
-#define __LC_GPREGS_SAVE_AREA          0x0180
-#define __LC_CREGS_SAVE_AREA           0x01c0
-#else /* __s390x__ */
-#define __LC_LAST_BREAK                        0x0110
-#define __LC_RST_OLD_PSW               0x0120
-#define __LC_EXT_OLD_PSW               0x0130
-#define __LC_SVC_OLD_PSW               0x0140
-#define __LC_PGM_OLD_PSW               0x0150
-#define __LC_MCK_OLD_PSW               0x0160
-#define __LC_IO_OLD_PSW                        0x0170
-#define __LC_RST_NEW_PSW               0x01a0
-#define __LC_EXT_NEW_PSW               0x01b0
-#define __LC_SVC_NEW_PSW               0x01c0
-#define __LC_PGM_NEW_PSW               0x01d0
-#define __LC_MCK_NEW_PSW               0x01e0
-#define __LC_IO_NEW_PSW                        0x01f0
-#define __LC_SAVE_AREA                 0x0200
-#define __LC_RETURN_PSW                        0x0280
-#define __LC_RETURN_MCCK_PSW           0x0290
-#define __LC_SYNC_ENTER_TIMER          0x02a0
-#define __LC_ASYNC_ENTER_TIMER         0x02a8
-#define __LC_EXIT_TIMER                        0x02b0
-#define __LC_USER_TIMER                        0x02b8
-#define __LC_SYSTEM_TIMER              0x02c0
-#define __LC_STEAL_TIMER               0x02c8
-#define __LC_LAST_UPDATE_TIMER         0x02d0
-#define __LC_LAST_UPDATE_CLOCK         0x02d8
-#define __LC_CURRENT                   0x02e0
-#define __LC_THREAD_INFO               0x02e8
-#define __LC_KERNEL_STACK              0x02f0
-#define __LC_ASYNC_STACK               0x02f8
-#define __LC_PANIC_STACK               0x0300
-#define __LC_KERNEL_ASCE               0x0308
-#define __LC_USER_ASCE                 0x0310
-#define __LC_USER_EXEC_ASCE            0x0318
-#define __LC_CPUID                     0x0320
-#define __LC_INT_CLOCK                 0x0340
-#define __LC_VDSO_PER_CPU              0x0350
-#define __LC_MACHINE_FLAGS             0x0358
-#define __LC_FTRACE_FUNC               0x0360
-#define __LC_IRB                       0x0380
-#define __LC_PASTE                     0x03c0
-#define __LC_PFAULT_INTPARM            0x11b8
-#define __LC_FPREGS_SAVE_AREA          0x1200
-#define __LC_GPREGS_SAVE_AREA          0x1280
-#define __LC_PSW_SAVE_AREA             0x1300
-#define __LC_PREFIX_SAVE_AREA          0x1318
-#define __LC_FP_CREG_SAVE_AREA         0x131c
-#define __LC_TODREG_SAVE_AREA          0x1324
-#define __LC_CPU_TIMER_SAVE_AREA       0x1328
-#define __LC_CLOCK_COMP_SAVE_AREA      0x1331
-#define __LC_AREGS_SAVE_AREA           0x1340
-#define __LC_CREGS_SAVE_AREA           0x1380
-#endif /* __s390x__ */
-
-#ifndef __ASSEMBLY__
-
-#include <asm/cpu.h>
-#include <asm/ptrace.h>
 #include <linux/types.h>
+#include <asm/ptrace.h>
+#include <asm/cpu.h>
 
 void restart_int_handler(void);
 void ext_int_handler(void);
@@ -149,6 +21,9 @@ void io_int_handler(void);
 
 #ifdef CONFIG_32BIT
 
+#define LC_ORDER 0
+#define LC_PAGES 1
+
 struct save_area {
        u32     ext_save;
        u64     timer;
@@ -161,46 +36,13 @@ struct save_area {
        u64     fp_regs[4];
        u32     gp_regs[16];
        u32     ctrl_regs[16];
-}  __attribute__((packed));
-
-#define SAVE_AREA_BASE offsetof(struct _lowcore, extended_save_area_addr)
-
-#else /* CONFIG_32BIT */
-
-struct save_area {
-       u64     fp_regs[16];
-       u64     gp_regs[16];
-       u8      psw[16];
-       u8      pad1[8];
-       u32     pref_reg;
-       u32     fp_ctrl_reg;
-       u8      pad2[4];
-       u32     tod_reg;
-       u64     timer;
-       u64     clk_cmp;
-       u8      pad3[8];
-       u32     acc_regs[16];
-       u64     ctrl_regs[16];
-}  __attribute__((packed));
+} __packed;
 
-#define SAVE_AREA_BASE offsetof(struct _lowcore, floating_pt_save_area)
-
-#endif /* CONFIG_32BIT */
-
-#ifndef __s390x__
-#define LC_ORDER 0
-#else
-#define LC_ORDER 1
-#endif
-
-#define LC_PAGES (1UL << LC_ORDER)
-
-struct _lowcore
-{
-#ifndef __s390x__
-       /* 0x0000 - 0x01ff: defined by architecture */
+struct _lowcore {
        psw_t   restart_psw;                    /* 0x0000 */
-       __u32   ccw2[4];                        /* 0x0008 */
+       psw_t   restart_old_psw;                /* 0x0008 */
+       __u8    pad_0x0010[0x0014-0x0010];      /* 0x0010 */
+       __u32   ipl_parmblock_ptr;              /* 0x0014 */
        psw_t   external_old_psw;               /* 0x0018 */
        psw_t   svc_old_psw;                    /* 0x0020 */
        psw_t   program_old_psw;                /* 0x0028 */
@@ -226,7 +68,9 @@ struct _lowcore
        __u32   monitor_code;                   /* 0x009c */
        __u8    exc_access_id;                  /* 0x00a0 */
        __u8    per_access_id;                  /* 0x00a1 */
-       __u8    pad_0x00a2[0x00b8-0x00a2];      /* 0x00a2 */
+       __u8    op_access_id;                   /* 0x00a2 */
+       __u8    ar_access_id;                   /* 0x00a3 */
+       __u8    pad_0x00a4[0x00b8-0x00a4];      /* 0x00a4 */
        __u16   subchannel_id;                  /* 0x00b8 */
        __u16   subchannel_nr;                  /* 0x00ba */
        __u32   io_int_parm;                    /* 0x00bc */
@@ -242,8 +86,9 @@ struct _lowcore
        __u32   external_damage_code;           /* 0x00f4 */
        __u32   failing_storage_address;        /* 0x00f8 */
        __u8    pad_0x00fc[0x0100-0x00fc];      /* 0x00fc */
-       __u32   st_status_fixed_logout[4];      /* 0x0100 */
-       __u8    pad_0x0110[0x0120-0x0110];      /* 0x0110 */
+       psw_t   psw_save_area;                  /* 0x0100 */
+       __u32   prefixreg_save_area;            /* 0x0108 */
+       __u8    pad_0x010c[0x0120-0x010c];      /* 0x010c */
 
        /* CPU register save area: defined by architecture */
        __u32   access_regs_save_area[16];      /* 0x0120 */
@@ -307,10 +152,32 @@ struct _lowcore
 
        /* Align to the top 1k of prefix area */
        __u8    pad_0x0e08[0x1000-0x0e08];      /* 0x0e08 */
-#else /* !__s390x__ */
-       /* 0x0000 - 0x01ff: defined by architecture */
-       __u32   ccw1[2];                        /* 0x0000 */
-       __u32   ccw2[4];                        /* 0x0008 */
+} __packed;
+
+#else /* CONFIG_32BIT */
+
+#define LC_ORDER 1
+#define LC_PAGES 2
+
+struct save_area {
+       u64     fp_regs[16];
+       u64     gp_regs[16];
+       u8      psw[16];
+       u8      pad1[8];
+       u32     pref_reg;
+       u32     fp_ctrl_reg;
+       u8      pad2[4];
+       u32     tod_reg;
+       u64     timer;
+       u64     clk_cmp;
+       u8      pad3[8];
+       u32     acc_regs[16];
+       u64     ctrl_regs[16];
+} __packed;
+
+struct _lowcore {
+       __u8    pad_0x0000[0x0014-0x0000];      /* 0x0000 */
+       __u32   ipl_parmblock_ptr;              /* 0x0014 */
        __u8    pad_0x0018[0x0080-0x0018];      /* 0x0018 */
        __u32   ext_params;                     /* 0x0080 */
        __u16   cpu_addr;                       /* 0x0084 */
@@ -341,7 +208,9 @@ struct _lowcore
        __u8    pad_0x00f0[0x00f4-0x00f0];      /* 0x00f0 */
        __u32   external_damage_code;           /* 0x00f4 */
        addr_t  failing_storage_address;        /* 0x00f8 */
-       __u8    pad_0x0100[0x0120-0x0100];      /* 0x0100 */
+       __u8    pad_0x0100[0x0110-0x0100];      /* 0x0100 */
+       __u64   breaking_event_addr;            /* 0x0110 */
+       __u8    pad_0x0118[0x0120-0x0118];      /* 0x0118 */
        psw_t   restart_old_psw;                /* 0x0120 */
        psw_t   external_old_psw;               /* 0x0130 */
        psw_t   svc_old_psw;                    /* 0x0140 */
@@ -422,7 +291,7 @@ struct _lowcore
        /* CPU register save area: defined by architecture */
        __u64   floating_pt_save_area[16];      /* 0x1200 */
        __u64   gpregs_save_area[16];           /* 0x1280 */
-       __u32   st_status_fixed_logout[4];      /* 0x1300 */
+       psw_t   psw_save_area;                  /* 0x1300 */
        __u8    pad_0x1310[0x1318-0x1310];      /* 0x1310 */
        __u32   prefixreg_save_area;            /* 0x1318 */
        __u32   fpt_creg_save_area;             /* 0x131c */
@@ -436,10 +305,12 @@ struct _lowcore
 
        /* align to the top of the prefix area */
        __u8    pad_0x1400[0x2000-0x1400];      /* 0x1400 */
-#endif /* !__s390x__ */
-} __attribute__((packed)); /* End structure*/
+} __packed;
+
+#endif /* CONFIG_32BIT */
 
 #define S390_lowcore (*((struct _lowcore *) 0))
+
 extern struct _lowcore *lowcore_ptr[];
 
 static inline void set_prefix(__u32 address)
@@ -455,6 +326,4 @@ static inline __u32 store_prefix(void)
        return address;
 }
 
-#endif
-
-#endif
+#endif /* _ASM_S390_LOWCORE_H */