1 /*
2  * linux/arch/unicore32/kernel/asm-offsets.c
3  *
4  * Code specific to PKUnity SoC and UniCore ISA
5  *
6  * Copyright (C) 2001-2010 GUAN Xue-tao
7  *
8  * Generate definitions needed by assembly language modules.
9  * This code generates raw asm output which is post-processed to extract
10  * and format the required data.
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License version 2 as
14  * published by the Free Software Foundation.
15  */
16 #include <linux/sched.h>
17 #include <linux/mm.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/kbuild.h>
20 #include <linux/suspend.h>
21 #include <linux/thread_info.h>
22 #include <asm/memory.h>
23 #include <asm/suspend.h>
24 
25 /*
26  * GCC 3.0, 3.1: general bad code generation.
27  * GCC 3.2.0: incorrect function argument offset calculation.
28  * GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c
29  *	(http://gcc.gnu.org/PR8896) and incorrect structure
30  *		initialisation in fs/jffs2/erase.c
31  */
32 #if (__GNUC__ < 4)
33 #error Your compiler should upgrade to uc4
34 #error	Known good compilers: 4.2.2
35 #endif
36 
main(void)37 int main(void)
38 {
39 	DEFINE(TSK_ACTIVE_MM,	offsetof(struct task_struct, active_mm));
40 	BLANK();
41 	DEFINE(TI_FLAGS,	offsetof(struct thread_info, flags));
42 	DEFINE(TI_PREEMPT,	offsetof(struct thread_info, preempt_count));
43 	DEFINE(TI_ADDR_LIMIT,	offsetof(struct thread_info, addr_limit));
44 	DEFINE(TI_TASK,		offsetof(struct thread_info, task));
45 	DEFINE(TI_CPU,		offsetof(struct thread_info, cpu));
46 	DEFINE(TI_CPU_SAVE,	offsetof(struct thread_info, cpu_context));
47 	DEFINE(TI_USED_CP,	offsetof(struct thread_info, used_cp));
48 #ifdef CONFIG_UNICORE_FPU_F64
49 	DEFINE(TI_FPSTATE,	offsetof(struct thread_info, fpstate));
50 #endif
51 	BLANK();
52 	DEFINE(S_R0,		offsetof(struct pt_regs, UCreg_00));
53 	DEFINE(S_R1,		offsetof(struct pt_regs, UCreg_01));
54 	DEFINE(S_R2,		offsetof(struct pt_regs, UCreg_02));
55 	DEFINE(S_R3,		offsetof(struct pt_regs, UCreg_03));
56 	DEFINE(S_R4,		offsetof(struct pt_regs, UCreg_04));
57 	DEFINE(S_R5,		offsetof(struct pt_regs, UCreg_05));
58 	DEFINE(S_R6,		offsetof(struct pt_regs, UCreg_06));
59 	DEFINE(S_R7,		offsetof(struct pt_regs, UCreg_07));
60 	DEFINE(S_R8,		offsetof(struct pt_regs, UCreg_08));
61 	DEFINE(S_R9,		offsetof(struct pt_regs, UCreg_09));
62 	DEFINE(S_R10,		offsetof(struct pt_regs, UCreg_10));
63 	DEFINE(S_R11,		offsetof(struct pt_regs, UCreg_11));
64 	DEFINE(S_R12,		offsetof(struct pt_regs, UCreg_12));
65 	DEFINE(S_R13,		offsetof(struct pt_regs, UCreg_13));
66 	DEFINE(S_R14,		offsetof(struct pt_regs, UCreg_14));
67 	DEFINE(S_R15,		offsetof(struct pt_regs, UCreg_15));
68 	DEFINE(S_R16,		offsetof(struct pt_regs, UCreg_16));
69 	DEFINE(S_R17,		offsetof(struct pt_regs, UCreg_17));
70 	DEFINE(S_R18,		offsetof(struct pt_regs, UCreg_18));
71 	DEFINE(S_R19,		offsetof(struct pt_regs, UCreg_19));
72 	DEFINE(S_R20,		offsetof(struct pt_regs, UCreg_20));
73 	DEFINE(S_R21,		offsetof(struct pt_regs, UCreg_21));
74 	DEFINE(S_R22,		offsetof(struct pt_regs, UCreg_22));
75 	DEFINE(S_R23,		offsetof(struct pt_regs, UCreg_23));
76 	DEFINE(S_R24,		offsetof(struct pt_regs, UCreg_24));
77 	DEFINE(S_R25,		offsetof(struct pt_regs, UCreg_25));
78 	DEFINE(S_R26,		offsetof(struct pt_regs, UCreg_26));
79 	DEFINE(S_FP,		offsetof(struct pt_regs, UCreg_fp));
80 	DEFINE(S_IP,		offsetof(struct pt_regs, UCreg_ip));
81 	DEFINE(S_SP,		offsetof(struct pt_regs, UCreg_sp));
82 	DEFINE(S_LR,		offsetof(struct pt_regs, UCreg_lr));
83 	DEFINE(S_PC,		offsetof(struct pt_regs, UCreg_pc));
84 	DEFINE(S_PSR,		offsetof(struct pt_regs, UCreg_asr));
85 	DEFINE(S_OLD_R0,	offsetof(struct pt_regs, UCreg_ORIG_00));
86 	DEFINE(S_FRAME_SIZE,	sizeof(struct pt_regs));
87 	BLANK();
88 	DEFINE(VMA_VM_MM,	offsetof(struct vm_area_struct, vm_mm));
89 	DEFINE(VMA_VM_FLAGS,	offsetof(struct vm_area_struct, vm_flags));
90 	BLANK();
91 	DEFINE(VM_EXEC,		VM_EXEC);
92 	BLANK();
93 	DEFINE(PAGE_SZ,		PAGE_SIZE);
94 	BLANK();
95 	DEFINE(SYS_ERROR0,	0x9f0000);
96 	BLANK();
97 	DEFINE(PBE_ADDRESS,		offsetof(struct pbe, address));
98 	DEFINE(PBE_ORIN_ADDRESS,	offsetof(struct pbe, orig_address));
99 	DEFINE(PBE_NEXT,		offsetof(struct pbe, next));
100 	DEFINE(SWSUSP_CPU,		offsetof(struct swsusp_arch_regs, \
101 							cpu_context));
102 #ifdef	CONFIG_UNICORE_FPU_F64
103 	DEFINE(SWSUSP_FPSTATE,		offsetof(struct swsusp_arch_regs, \
104 							fpstate));
105 #endif
106 	BLANK();
107 	DEFINE(DMA_BIDIRECTIONAL,	DMA_BIDIRECTIONAL);
108 	DEFINE(DMA_TO_DEVICE,		DMA_TO_DEVICE);
109 	DEFINE(DMA_FROM_DEVICE,		DMA_FROM_DEVICE);
110 	return 0;
111 }
112