~galfy/helenos/bird-port-mainline

« back to all changes in this revision

Viewing changes to kernel/arch/ia64/include/context.h

  • Committer: Martin Decky
  • Date: 2009-08-04 11:19:19 UTC
  • Revision ID: martin@uranus.dsrg.hide.ms.mff.cuni.cz-20090804111919-evyclddlr3v5lhmp
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2005 Jakub Jermar
 
3
 * All rights reserved.
 
4
 *
 
5
 * Redistribution and use in source and binary forms, with or without
 
6
 * modification, are permitted provided that the following conditions
 
7
 * are met:
 
8
 *
 
9
 * - Redistributions of source code must retain the above copyright
 
10
 *   notice, this list of conditions and the following disclaimer.
 
11
 * - Redistributions in binary form must reproduce the above copyright
 
12
 *   notice, this list of conditions and the following disclaimer in the
 
13
 *   documentation and/or other materials provided with the distribution.
 
14
 * - The name of the author may not be used to endorse or promote products
 
15
 *   derived from this software without specific prior written permission.
 
16
 *
 
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 
19
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 
20
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 
22
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
27
 */
 
28
 
 
29
/** @addtogroup ia64    
 
30
 * @{
 
31
 */
 
32
/** @file
 
33
 */
 
34
 
 
35
#ifndef KERN_ia64_CONTEXT_H_
 
36
#define KERN_ia64_CONTEXT_H_
 
37
 
 
38
#include <arch/types.h>
 
39
#include <arch/register.h>
 
40
#include <align.h>
 
41
#include <arch/stack.h>
 
42
 
 
43
/*
 
44
 * context_save_arch() and context_restore_arch() are both leaf procedures.
 
45
 * No need to allocate scratch area.
 
46
 *
 
47
 * One item is put onto the stack to support get_stack_base().
 
48
 */
 
49
#define SP_DELTA        (0 + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT))
 
50
 
 
51
#ifdef context_set
 
52
#undef context_set
 
53
#endif
 
54
 
 
55
/* RSE stack starts at the bottom of memory stack. */
 
56
#define context_set(c, _pc, stack, size)                                                                \
 
57
        do {                                                                                            \
 
58
                (c)->pc = (uintptr_t) _pc;                                                              \
 
59
                (c)->bsp = ((uintptr_t) stack) + ALIGN_UP((size), REGISTER_STACK_ALIGNMENT);            \
 
60
                (c)->ar_pfs &= PFM_MASK;                                                                \
 
61
                (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size), STACK_ALIGNMENT) - SP_DELTA;           \
 
62
        } while (0);
 
63
 
 
64
/*
 
65
 * Only save registers that must be preserved across
 
66
 * function calls.
 
67
 */
 
68
typedef struct {
 
69
 
 
70
        /*
 
71
         * Application registers
 
72
         */
 
73
        uint64_t ar_pfs;
 
74
        uint64_t ar_unat_caller;
 
75
        uint64_t ar_unat_callee;
 
76
        uint64_t ar_rsc;
 
77
        uintptr_t bsp;          /* ar_bsp */
 
78
        uint64_t ar_rnat;
 
79
        uint64_t ar_lc;
 
80
 
 
81
        /*
 
82
         * General registers
 
83
         */
 
84
        uint64_t r1;
 
85
        uint64_t r4;
 
86
        uint64_t r5;
 
87
        uint64_t r6;
 
88
        uint64_t r7;
 
89
        uintptr_t sp;           /* r12 */
 
90
        uint64_t r13;
 
91
        
 
92
        /*
 
93
         * Branch registers
 
94
         */
 
95
        uintptr_t pc;           /* b0 */
 
96
        uint64_t b1;
 
97
        uint64_t b2;
 
98
        uint64_t b3;
 
99
        uint64_t b4;
 
100
        uint64_t b5;
 
101
 
 
102
        /*
 
103
         * Predicate registers
 
104
         */
 
105
        uint64_t pr;
 
106
 
 
107
        uint128_t f2 __attribute__ ((aligned(16)));
 
108
        uint128_t f3;
 
109
        uint128_t f4;
 
110
        uint128_t f5;
 
111
 
 
112
        uint128_t f16;
 
113
        uint128_t f17;
 
114
        uint128_t f18;
 
115
        uint128_t f19;
 
116
        uint128_t f20;
 
117
        uint128_t f21;
 
118
        uint128_t f22;
 
119
        uint128_t f23;
 
120
        uint128_t f24;
 
121
        uint128_t f25;
 
122
        uint128_t f26;
 
123
        uint128_t f27;
 
124
        uint128_t f28;
 
125
        uint128_t f29;
 
126
        uint128_t f30;
 
127
        uint128_t f31;
 
128
        
 
129
        ipl_t ipl;
 
130
} context_t;
 
131
 
 
132
#endif
 
133
 
 
134
/** @}
 
135
 */