Subversion Repositories Kolibri OS

Rev

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