Subversion Repositories Kolibri OS

Rev

Rev 928 | Rev 1066 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
854 serge 1
 
890 serge 2
#define IMAGE_BASE  0xE0100000
3
#define LOAD_BASE   0x00100000
4
854 serge 5
 
897 serge 6
 
928 serge 7
897 serge 8
 
928 serge 9
897 serge 10
 
928 serge 11
897 serge 12
 
928 serge 13
#define sel_os_code     0x18
14
15
 
16
#define sel_app_data    0x2B
17
18
 
19
#define sel_srv_stack   0x39
20
21
 
22
 
854 serge 23
24
 
25
26
 
27
28
 
29
30
 
31
		panic_printf("Kernel panic in %s() at %s:%u: " format, __func__, \
32
		__FILE__, __LINE__, ##__VA_ARGS__);
33
34
 
35
		if (!(expr)) { \
36
			panic("assertion failed (%s), caller=%p\n", #expr, CALLER); \
37
		}
38
862 serge 39
 
40
41
 
854 serge 42
862 serge 43
 
854 serge 44
		panic_printf("Kernel panic: " format, ##__VA_ARGS__);
45
46
 
47
862 serge 48
 
49
50
 
888 serge 51
      if (!(expr)) {   \
52
         panic_printf("Kernel panic in %s() at %s:%u: " \
53
                      "assertion failed (%s)",__func__ ,__FILE__,__LINE__, \
54
                       #expr); \
55
      };
56
57
 
854 serge 58
59
 
60
 
61
{
62
  eflags_t tmp;
63
	asm volatile (
64
    "pushfl\n\t"
886 serge 65
    "popl %0\n\t"
66
		"cli\n"
854 serge 67
    : "=r" (tmp));
928 serge 68
  return tmp;
854 serge 69
}
70
71
 
72
{
73
	asm volatile (
74
    "pushl %0\n\t"
886 serge 75
    "popfl\n"
76
    : : "r" (efl)
854 serge 77
	);
78
}
79
859 serge 80
 
81
{
82
  count_t n;
83
    asm volatile (
928 serge 84
    "xorl %0, %0 \n\t"
85
                "bsr %1, %0"
886 serge 86
    :"=&r"(n) :"r"(arg) );
928 serge 87
	return n;
859 serge 88
}
89
90
 
91
{
92
  count_t n;
93
    asm volatile (
928 serge 94
    "xorl %0, %0 \n\t"
95
                "bsf %1, %0"
886 serge 96
    :"=&r" (n) :"r"(arg));
928 serge 97
	return n;
859 serge 98
}
99
100
 
101
{
102
    asm volatile (
928 serge 103
    "bts %0, %1 \n\t"
104
    ::"g"(data), "r"(val):"cc");
105
}
859 serge 106
107
 
889 serge 108
{
859 serge 109
    asm volatile (
928 serge 110
    "btr %0, %1 \n\t"
111
    ::"g"(data), "r"(val):"cc");
112
}
859 serge 113
889 serge 114
 
115
{
116
     void* retval;
117
     size_t tmp;
118
119
 
120
     "pushl %%eax           \n\t"
121
     "call _load_file@4     \n\t"
122
     :"=eax" (retval), "=ebx"(tmp)
123
     :"a" (path) );
124
125
 
126
        *size = tmp;
127
     return retval;
128
};
129
130
 
131
 
928 serge 132
  saved_box       BOX
133
  ipc_start       dd ?
134
  ipc_size    dd ?
135
  event_mask      dd ?
136
  debugger_slot   dd ?
137
          dd ?
138
  keyboard_mode   db ?
139
          db 3   dup(?)
140
  dir_table       dd ?
141
  dbg_event_mem   dd ?
142
  dbg_regs:
143
  dbg_regs.dr0    dd ?
144
  dbg_regs.dr1    dd ?
145
  dbg_regs.dr2    dd ?
146
  dbg_regs.dr3    dd ?
147
  dbg_regs.dr7    dd ?
148
  wnd_caption     dd ?
149
  wnd_clientbox   BOX
150
*/
151
152
 
889 serge 153
928 serge 154
 
155
 
156
{
157
    u32_t    edi;
158
    u32_t    esi;
159
    u32_t    ebp;
160
    u32_t    tmp;                    // esp
161
    u32_t    ebx;
162
    u32_t    edx;
163
    u32_t    ecx;
164
    u32_t    eax;
165
    addr_t   retaddr;
166
    addr_t   eip;
167
    u32_t    cs;
168
    u32_t    eflags;
169
    addr_t   esp;
170
    u32_t    ss;                    // 14*4
171
172
 
173
    u32_t    slot;                  // thread slot
174
175
 
176
177
 
178
179
 
180
    int      quantum_size;          // quantum size in ticks */
181
182
 
183
    u32_t    sys_time;              // sys time in ticks
184
185
 
186
187
 
188
#define EFL_IOPL1   0x1000
189
#define EFL_IOPL2   0x2000
190
#define EFL_IOPL3   0x3000
191
996 serge 192
 
193
{
194
  u32_t      handle;
195
  u32_t      io_code;
196
  void       *input;
197
  int        inp_size;
198
  void       *output;
199
  int        out_size;
200
}ioctl_t;
201
202
 
203
 
204
{
205
    u32_t code;
206
    union
207
    {
208
        struct                          /* window event    */
209
        {
210
            u32_t   win;                /* window handle   */
211
            u32_t   val1;
212
            u32_t   val2;
213
            u16_t   x;                  /* cursor x        */
214
            u16_t   y;                  /* cursor y        */
215
            u32_t   unused;
216
        }__attribute__ ((packed));
217
218
 
219
        {
220
            u32_t   sender;             /* service handler */
221
            u32_t   stream;             /* io stream id, if present  */
222
            addr_t  offset;
223
            size_t  size;
224
        };
225
226
 
227
        {
228
            u32_t   sender;
229
            u32_t   io_code;
230
            addr_t *input;
231
            size_t  inp_size;
232
            addr_t *output;
233
            size_t  out_size;
234
        };
235
    };
236
}event_t;
237