~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise-security

« back to all changes in this revision

Viewing changes to arch/hexagon/include/asm/registers.h

  • Committer: Package Import Robot
  • Author(s): Paolo Pisati, Paolo Pisati
  • Date: 2011-12-06 15:56:07 UTC
  • Revision ID: package-import@ubuntu.com-20111206155607-pcf44kv5fmhk564f
Tags: 3.2.0-1401.1
[ Paolo Pisati ]

* Rebased on top of Ubuntu-3.2.0-3.8
* Tilt-tracking @ ef2487af4bb15bdd0689631774b5a5e3a59f74e2
* Delete debian.ti-omap4/control, it shoudln't be tracked
* Fix architecture spelling (s/armel/armhf/)
* [Config] Update configs following 3.2 import
* [Config] Fix compilation: disable CODA and ARCH_OMAP3
* [Config] Fix compilation: disable Ethernet Faraday
* Update series to precise

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Register definitions for the Hexagon architecture
 
3
 *
 
4
 * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License version 2 and
 
8
 * only version 2 as published by the Free Software Foundation.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program; if not, write to the Free Software
 
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
18
 * 02110-1301, USA.
 
19
 */
 
20
 
 
21
#ifndef _ASM_REGISTERS_H
 
22
#define _ASM_REGISTERS_H
 
23
 
 
24
#define SP r29
 
25
 
 
26
#ifndef __ASSEMBLY__
 
27
 
 
28
/*  See kernel/entry.S for further documentation.  */
 
29
 
 
30
/*
 
31
 * Entry code copies the event record out of guest registers into
 
32
 * this structure (which is on the stack).
 
33
 */
 
34
 
 
35
struct hvm_event_record {
 
36
        unsigned long vmel;     /* Event Linkage (return address) */
 
37
        unsigned long vmest;    /* Event context - pre-event SSR values */
 
38
        unsigned long vmpsp;    /* Previous stack pointer */
 
39
        unsigned long vmbadva;  /* Bad virtual address for addressing events */
 
40
};
 
41
 
 
42
struct pt_regs {
 
43
        long restart_r0;        /* R0 checkpoint for syscall restart */
 
44
        long syscall_nr;        /* Only used in system calls */
 
45
        union {
 
46
                struct {
 
47
                        unsigned long usr;
 
48
                        unsigned long preds;
 
49
                };
 
50
                long long int predsusr;
 
51
        };
 
52
        union {
 
53
                struct {
 
54
                        unsigned long m0;
 
55
                        unsigned long m1;
 
56
                };
 
57
                long long int m1m0;
 
58
        };
 
59
        union {
 
60
                struct {
 
61
                        unsigned long sa1;
 
62
                        unsigned long lc1;
 
63
                };
 
64
                long long int lc1sa1;
 
65
        };
 
66
        union {
 
67
                struct {
 
68
                        unsigned long sa0;
 
69
                        unsigned long lc0;
 
70
                };
 
71
                long long int lc0sa0;
 
72
        };
 
73
        union {
 
74
                struct {
 
75
                        unsigned long gp;
 
76
                        unsigned long ugp;
 
77
                };
 
78
                long long int ugpgp;
 
79
        };
 
80
        /*
 
81
        * Be extremely careful with rearranging these, if at all.  Some code
 
82
        * assumes the 32 registers exist exactly like this in memory;
 
83
        * e.g. kernel/ptrace.c
 
84
        * e.g. kernel/signal.c (restore_sigcontext)
 
85
        */
 
86
        union {
 
87
                struct {
 
88
                        unsigned long r00;
 
89
                        unsigned long r01;
 
90
                };
 
91
                long long int r0100;
 
92
        };
 
93
        union {
 
94
                struct {
 
95
                        unsigned long r02;
 
96
                        unsigned long r03;
 
97
                };
 
98
                long long int r0302;
 
99
        };
 
100
        union {
 
101
                struct {
 
102
                        unsigned long r04;
 
103
                        unsigned long r05;
 
104
                };
 
105
                long long int r0504;
 
106
        };
 
107
        union {
 
108
                struct {
 
109
                        unsigned long r06;
 
110
                        unsigned long r07;
 
111
                };
 
112
                long long int r0706;
 
113
        };
 
114
        union {
 
115
                struct {
 
116
                        unsigned long r08;
 
117
                        unsigned long r09;
 
118
                };
 
119
                long long int r0908;
 
120
        };
 
121
        union {
 
122
               struct {
 
123
                        unsigned long r10;
 
124
                        unsigned long r11;
 
125
               };
 
126
               long long int r1110;
 
127
        };
 
128
        union {
 
129
               struct {
 
130
                        unsigned long r12;
 
131
                        unsigned long r13;
 
132
               };
 
133
               long long int r1312;
 
134
        };
 
135
        union {
 
136
               struct {
 
137
                        unsigned long r14;
 
138
                        unsigned long r15;
 
139
               };
 
140
               long long int r1514;
 
141
        };
 
142
        union {
 
143
                struct {
 
144
                        unsigned long r16;
 
145
                        unsigned long r17;
 
146
                };
 
147
                long long int r1716;
 
148
        };
 
149
        union {
 
150
                struct {
 
151
                        unsigned long r18;
 
152
                        unsigned long r19;
 
153
                };
 
154
                long long int r1918;
 
155
        };
 
156
        union {
 
157
                struct {
 
158
                        unsigned long r20;
 
159
                        unsigned long r21;
 
160
                };
 
161
                long long int r2120;
 
162
        };
 
163
        union {
 
164
                struct {
 
165
                        unsigned long r22;
 
166
                        unsigned long r23;
 
167
                };
 
168
                long long int r2322;
 
169
        };
 
170
        union {
 
171
                struct {
 
172
                        unsigned long r24;
 
173
                        unsigned long r25;
 
174
                };
 
175
                long long int r2524;
 
176
        };
 
177
        union {
 
178
                struct {
 
179
                        unsigned long r26;
 
180
                        unsigned long r27;
 
181
                };
 
182
                long long int r2726;
 
183
        };
 
184
        union {
 
185
                struct {
 
186
                        unsigned long r28;
 
187
                        unsigned long r29;
 
188
               };
 
189
               long long int r2928;
 
190
        };
 
191
        union {
 
192
                struct {
 
193
                        unsigned long r30;
 
194
                        unsigned long r31;
 
195
                };
 
196
                long long int r3130;
 
197
        };
 
198
        /* VM dispatch pushes event record onto stack - we can build on it */
 
199
        struct hvm_event_record hvmer;
 
200
};
 
201
 
 
202
/* Defines to conveniently access the values  */
 
203
 
 
204
/*
 
205
 * As of the VM spec 0.5, these registers are now set/retrieved via a
 
206
 * VM call.  On the in-bound side, we just fetch the values
 
207
 * at the entry points and stuff them into the old record in pt_regs.
 
208
 * However, on the outbound side, probably at VM rte, we set the
 
209
 * registers back.
 
210
 */
 
211
 
 
212
#define pt_elr(regs) ((regs)->hvmer.vmel)
 
213
#define pt_set_elr(regs, val) ((regs)->hvmer.vmel = (val))
 
214
#define pt_cause(regs) ((regs)->hvmer.vmest & (HVM_VMEST_CAUSE_MSK))
 
215
#define user_mode(regs) \
 
216
        (((regs)->hvmer.vmest & (HVM_VMEST_UM_MSK << HVM_VMEST_UM_SFT)) != 0)
 
217
#define ints_enabled(regs) \
 
218
        (((regs)->hvmer.vmest & (HVM_VMEST_IE_MSK << HVM_VMEST_IE_SFT)) != 0)
 
219
#define pt_psp(regs) ((regs)->hvmer.vmpsp)
 
220
#define pt_badva(regs) ((regs)->hvmer.vmbadva)
 
221
 
 
222
#define pt_set_rte_sp(regs, sp) do {\
 
223
        pt_psp(regs) = (sp);\
 
224
        (regs)->SP = (unsigned long) &((regs)->hvmer);\
 
225
        } while (0)
 
226
 
 
227
#define pt_set_kmode(regs) \
 
228
        (regs)->hvmer.vmest = (HVM_VMEST_IE_MSK << HVM_VMEST_IE_SFT)
 
229
 
 
230
#define pt_set_usermode(regs) \
 
231
        (regs)->hvmer.vmest = (HVM_VMEST_UM_MSK << HVM_VMEST_UM_SFT) \
 
232
                            | (HVM_VMEST_IE_MSK << HVM_VMEST_IE_SFT)
 
233
 
 
234
#endif  /*  ifndef __ASSEMBLY  */
 
235
 
 
236
#endif