Subversion Repositories Kolibri OS

Rev

Rev 9047 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
8858 rgimad 3
;; Copyright (C) KolibriOS team 2004-2021. All rights reserved. ;;
2288 clevermous 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
$Revision: 9048 $
9
 
10
 
7136 dunkaist 11
dpl0    =  10010000b      ; data read       dpl0
12
drw0    =  10010010b      ; data read/write dpl0
13
drw3    =  11110010b      ; data read/write dpl3
14
cpl0    =  10011010b      ; code read dpl0
15
cpl3    =  11111010b      ; code read dpl3
2288 clevermous 16
 
7136 dunkaist 17
D32     =  01000000b      ; 32bit segment
18
G32     =  10000000b      ; page gran
2288 clevermous 19
 
9036 Boppan 20
;;;;;;;;;;; task manager errors ;;;;;;;;;;
2288 clevermous 21
 
9038 Boppan 22
TASKMAN_ERROR_OUT_OF_MEMORY      = 30 ; 0x1E
23
TASKMAN_ERROR_NOT_A_EXECUTABLE   = 31 ; 0x1F
24
TASKMAN_ERROR_TOO_MANY_PROCESSES = 32 ; 0x20
9036 Boppan 25
 
2288 clevermous 26
;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;;
27
 
7136 dunkaist 28
CPU_386        = 3
29
CPU_486        = 4
30
CPU_PENTIUM    = 5
31
CPU_P6         = 6
32
CPU_PENTIUM4   = 0x0F
2288 clevermous 33
 
7136 dunkaist 34
CAPS_FPU       =    00 ;on-chip x87 floating point unit
35
CAPS_VME       =    01 ;virtual-mode enhancements
36
CAPS_DE        =    02 ;debugging extensions
37
CAPS_PSE       =    03 ;page-size extensions
38
CAPS_TSC       =    04 ;time stamp counter
39
CAPS_MSR       =    05 ;model-specific registers
40
CAPS_PAE       =    06 ;physical-address extensions
41
CAPS_MCE       =    07 ;machine check exception
42
CAPS_CX8       =    08 ;CMPXCHG8B instruction
43
CAPS_APIC      =    09 ;on-chip advanced programmable
44
                       ;interrupt controller
45
;                   10 ;unused
46
CAPS_SEP       =    11 ;SYSENTER and SYSEXIT instructions
47
CAPS_MTRR      =    12 ;memory-type range registers
48
CAPS_PGE       =    13 ;page global extension
49
CAPS_MCA       =    14 ;machine check architecture
50
CAPS_CMOV      =    15 ;conditional move instructions
51
CAPS_PAT       =    16 ;page attribute table
2288 clevermous 52
 
7136 dunkaist 53
CAPS_PSE36     =    17 ;page-size extensions
54
CAPS_PSN       =    18 ;processor serial number
55
CAPS_CLFLUSH   =    19 ;CLFUSH instruction
2288 clevermous 56
 
7136 dunkaist 57
CAPS_DS        =    21 ;debug store
58
CAPS_ACPI      =    22 ;thermal monitor and software
59
                       ;controlled clock supported
60
CAPS_MMX       =    23 ;MMX instructions
61
CAPS_FXSR      =    24 ;FXSAVE and FXRSTOR instructions
62
CAPS_SSE       =    25 ;SSE instructions
63
CAPS_SSE2      =    26 ;SSE2 instructions
64
CAPS_SS        =    27 ;self-snoop
65
CAPS_HTT       =    28 ;hyper-threading technology
66
CAPS_TM        =    29 ;thermal monitor supported
67
CAPS_IA64      =    30 ;IA64 capabilities
68
CAPS_PBE       =    31 ;pending break enable
2288 clevermous 69
 
70
;ecx
7136 dunkaist 71
CAPS_SSE3      =    32 ;SSE3 instructions
72
;                   33
73
;                   34
74
CAPS_MONITOR   =    35 ;MONITOR/MWAIT instructions
75
CAPS_DS_CPL    =    36 ;
76
CAPS_VMX       =    37 ;virtual mode extensions
77
;                   38 ;
78
CAPS_EST       =    39 ;enhansed speed step
79
CAPS_TM2       =    40 ;thermal monitor2 supported
80
;                   41
81
CAPS_CID       =    42 ;
82
;                   43
83
;                   44
84
CAPS_CX16      =    45 ;CMPXCHG16B instruction
85
CAPS_xTPR      =    46 ;
86
CAPS_XSAVE     =    32 + 26 ; XSAVE and XRSTOR instructions
87
CAPS_OSXSAVE   =    32 + 27
7124 dunkaist 88
; A value of 1 indicates that the OS has set CR4.OSXSAVE[bit 18] to enable
89
; XSETBV/XGETBV instructions to access XCR0 and to support processor extended
90
; state management using XSAVE/XRSTOR.
7136 dunkaist 91
CAPS_AVX       =    32 + 28 ; not AVX2
2288 clevermous 92
;
93
;reserved
94
;
95
;ext edx /ecx
7136 dunkaist 96
CAPS_SYSCAL    =    64 ;
97
CAPS_XD        =    65 ;execution disable
98
CAPS_FFXSR     =    66 ;
99
CAPS_RDTSCP    =    67 ;
100
CAPS_X64       =    68 ;
101
CAPS_3DNOW     =    69 ;
102
CAPS_3DNOWEXT  =    70 ;
103
CAPS_LAHF      =    71 ;
104
CAPS_CMP_LEG   =    72 ;
105
CAPS_SVM       =    73 ;secure virual machine
106
CAPS_ALTMOVCR8 =    74 ;
2288 clevermous 107
 
108
; CPU MSR names
7136 dunkaist 109
MSR_SYSENTER_CS         =     0x174
110
MSR_SYSENTER_ESP        =     0x175
111
MSR_SYSENTER_EIP        =     0x176
112
MSR_CR_PAT              =     0x277
113
MSR_MTRR_DEF_TYPE       =     0x2FF
5360 serge 114
 
7136 dunkaist 115
MSR_AMD_EFER            =     0xC0000080      ; Extended Feature Enable Register
116
MSR_AMD_STAR            =     0xC0000081      ; SYSCALL/SYSRET Target Address Register
2288 clevermous 117
 
7136 dunkaist 118
CR0_PE         =    0x00000001   ;protected mode
119
CR0_MP         =    0x00000002   ;monitor fpu
120
CR0_EM         =    0x00000004   ;fpu emulation
121
CR0_TS         =    0x00000008   ;task switch
122
CR0_ET         =    0x00000010   ;extension type hardcoded to 1
123
CR0_NE         =    0x00000020   ;numeric error
124
CR0_WP         =    0x00010000   ;write protect
125
CR0_AM         =    0x00040000   ;alignment check
126
CR0_NW         =    0x20000000   ;not write-through
127
CR0_CD         =    0x40000000   ;cache disable
128
CR0_PG         =    0x80000000   ;paging
2288 clevermous 129
 
130
 
7136 dunkaist 131
CR4_VME        =    0x000001
132
CR4_PVI        =    0x000002
133
CR4_TSD        =    0x000004
134
CR4_DE         =    0x000008
135
CR4_PSE        =    0x000010
136
CR4_PAE        =    0x000020
137
CR4_MCE        =    0x000040
138
CR4_PGE        =    0x000080
139
CR4_PCE        =    0x000100
140
CR4_OSFXSR     =    0x000200
141
CR4_OSXMMEXPT  =    0x000400
142
CR4_OSXSAVE    =    0x040000
2288 clevermous 143
 
7136 dunkaist 144
XCR0_FPU_MMX   =    0x0001
145
XCR0_SSE       =    0x0002
146
XCR0_AVX       =    0x0004
147
XCR0_MPX       =    0x0018
148
XCR0_AVX512    =    0x00e0
2288 clevermous 149
 
7136 dunkaist 150
MXCSR_IE       =    0x0001
151
MXCSR_DE       =    0x0002
152
MXCSR_ZE       =    0x0004
153
MXCSR_OE       =    0x0008
154
MXCSR_UE       =    0x0010
155
MXCSR_PE       =    0x0020
156
MXCSR_DAZ      =    0x0040
157
MXCSR_IM       =    0x0080
158
MXCSR_DM       =    0x0100
159
MXCSR_ZM       =    0x0200
160
MXCSR_OM       =    0x0400
161
MXCSR_UM       =    0x0800
162
MXCSR_PM       =    0x1000
163
MXCSR_FZ       =    0x8000
2288 clevermous 164
 
7136 dunkaist 165
MXCSR_INIT     = MXCSR_IM + MXCSR_DM + MXCSR_ZM + MXCSR_OM + MXCSR_UM + MXCSR_PM
7124 dunkaist 166
 
7136 dunkaist 167
EFLAGS_CF      =    0x000001  ; carry flag
168
EFLAGS_PF      =    0x000004  ; parity flag
169
EFLAGS_AF      =    0x000010  ; auxiliary flag
170
EFLAGS_ZF      =    0x000040  ; zero flag
171
EFLAGS_SF      =    0x000080  ; sign flag
172
EFLAGS_TF      =    0x000100  ; trap flag
173
EFLAGS_IF      =    0x000200  ; interrupt flag
174
EFLAGS_DF      =    0x000400  ; direction flag
175
EFLAGS_OF      =    0x000800  ; overflow flag
176
EFLAGS_IOPL    =    0x003000  ; i/o priviledge level
177
EFLAGS_NT      =    0x004000  ; nested task flag
178
EFLAGS_RF      =    0x010000  ; resume flag
179
EFLAGS_VM      =    0x020000  ; virtual 8086 mode flag
180
EFLAGS_AC      =    0x040000  ; alignment check flag
181
EFLAGS_VIF     =    0x080000  ; virtual interrupt flag
182
EFLAGS_VIP     =    0x100000  ; virtual interrupt pending
183
EFLAGS_ID      =    0x200000  ; id flag
7126 dunkaist 184
 
7136 dunkaist 185
IRQ_PIC        =    0
186
IRQ_APIC       =    1
2288 clevermous 187
 
2381 hidnplayr 188
struct  TSS
189
        _back       rw 2
190
        _esp0       rd 1
191
        _ss0        rw 2
192
        _esp1       rd 1
193
        _ss1        rw 2
194
        _esp2       rd 1
195
        _ss2        rw 2
196
        _cr3        rd 1
197
        _eip        rd 1
198
        _eflags     rd 1
199
        _eax        rd 1
200
        _ecx        rd 1
201
        _edx        rd 1
202
        _ebx        rd 1
203
        _esp        rd 1
204
        _ebp        rd 1
205
        _esi        rd 1
206
        _edi        rd 1
207
        _es         rw 2
208
        _cs         rw 2
209
        _ss         rw 2
210
        _ds         rw 2
211
        _fs         rw 2
212
        _gs         rw 2
213
        _ldt        rw 2
214
        _trap       rw 1
215
        _io         rw 1
216
                    rb 24
217
        _io_map_0   rb 4096
218
        _io_map_1   rb 4096
219
ends
2288 clevermous 220
 
7136 dunkaist 221
DRIVE_DATA_SIZE     = 16
3627 Serge 222
 
7136 dunkaist 223
OS_BASE             = 0x80000000
2288 clevermous 224
 
7136 dunkaist 225
window_data         = OS_BASE + 0x0001000
2288 clevermous 226
 
8851 rgimad 227
TASK_TABLE          = OS_BASE + 0x0003000
8869 rgimad 228
;CURRENT_TASK        = OS_BASE + 0x0003000
8866 rgimad 229
;TASK_COUNT          = OS_BASE + 0x0003004
7136 dunkaist 230
TASK_BASE           = OS_BASE + 0x0003010
231
TASK_DATA           = OS_BASE + 0x0003020
8867 rgimad 232
;TASK_EVENT          = OS_BASE + 0x0003020
2288 clevermous 233
 
7136 dunkaist 234
CDDataBuf           = OS_BASE + 0x0005000
3732 Serge 235
 
236
;unused                 0x6000 - 0x8fff
237
 
7136 dunkaist 238
BOOT_VARS           = 0x9000
3732 Serge 239
 
7136 dunkaist 240
idts                = OS_BASE + 0x000B100
241
WIN_STACK           = OS_BASE + 0x000C000
242
WIN_POS             = OS_BASE + 0x000C400
243
FDD_BUFF            = OS_BASE + 0x000D000     ;512
2288 clevermous 244
 
7136 dunkaist 245
WIN_TEMP_XY         = OS_BASE + 0x000F300
246
KEY_COUNT           = OS_BASE + 0x000F400
247
KEY_BUFF            = OS_BASE + 0x000F401 ; 120*2 + 2*2 = 244 bytes, actually 255 bytes
2288 clevermous 248
 
7136 dunkaist 249
BTN_COUNT           = OS_BASE + 0x000F500
250
BTN_BUFF            = OS_BASE + 0x000F501
2288 clevermous 251
 
252
 
7136 dunkaist 253
BTN_ADDR            = OS_BASE + 0x000FE88
254
MEM_AMOUNT          = OS_BASE + 0x000FE8C
2288 clevermous 255
 
7136 dunkaist 256
SYS_SHUTDOWN        = OS_BASE + 0x000FF00
2288 clevermous 257
 
2513 mario79 258
 
8085 dunkaist 259
TMP_STACK_TOP       = 0x007CC00
2288 clevermous 260
 
8085 dunkaist 261
sys_proc            = OS_BASE + 0x007E000
2288 clevermous 262
 
7136 dunkaist 263
SLOT_BASE           = OS_BASE + 0x0080000
2288 clevermous 264
 
7136 dunkaist 265
VGABasePtr          = OS_BASE + 0x00A0000
2288 clevermous 266
 
7136 dunkaist 267
virtual at            OS_BASE + 0x05FFF80
2288 clevermous 268
  tss  TSS
269
end virtual
270
 
7136 dunkaist 271
HEAP_BASE           = OS_BASE + 0x0800000
272
HEAP_MIN_SIZE       = 0x01000000
2288 clevermous 273
 
7136 dunkaist 274
page_tabs           = 0xFDC00000
275
app_page_tabs       = 0xFDC00000
276
kernel_tabs         = page_tabs + (OS_BASE shr 10)   ;0xFDE00000
277
master_tab          = page_tabs + (page_tabs shr 10) ;0xFDFF70000
2288 clevermous 278
 
7136 dunkaist 279
LFB_BASE            = 0xFE000000
2288 clevermous 280
 
281
 
7136 dunkaist 282
new_app_base        = 0;
2288 clevermous 283
 
8869 rgimad 284
twdw                = TASK_TABLE - window_data
2288 clevermous 285
 
7136 dunkaist 286
std_application_base_address   = new_app_base
287
RING0_STACK_SIZE    = 0x2000
2288 clevermous 288
 
7136 dunkaist 289
REG_SS              = RING0_STACK_SIZE -  4
290
REG_APP_ESP         = RING0_STACK_SIZE -  8
291
REG_EFLAGS          = RING0_STACK_SIZE - 12
292
REG_CS              = RING0_STACK_SIZE - 16
293
REG_EIP             = RING0_STACK_SIZE - 20
294
REG_EAX             = RING0_STACK_SIZE - 24
295
REG_ECX             = RING0_STACK_SIZE - 28
296
REG_EDX             = RING0_STACK_SIZE - 32
297
REG_EBX             = RING0_STACK_SIZE - 36
298
REG_ESP             = RING0_STACK_SIZE - 40  ;RING0_STACK_SIZE-20
299
REG_EBP             = RING0_STACK_SIZE - 44
300
REG_ESI             = RING0_STACK_SIZE - 48
301
REG_EDI             = RING0_STACK_SIZE - 52
302
REG_RET             = RING0_STACK_SIZE - 56  ;irq0.return
2288 clevermous 303
 
304
 
7136 dunkaist 305
PAGE_SIZE           = 4096
5130 serge 306
 
7136 dunkaist 307
PG_UNMAP            = 0x000
308
PG_READ             = 0x001
309
PG_WRITE            = 0x002
310
PG_USER             = 0x004
311
PG_PCD              = 0x008
312
PG_PWT              = 0x010
313
PG_ACCESSED         = 0x020
314
PG_DIRTY            = 0x040
315
PG_PAT              = 0x080
316
PG_GLOBAL           = 0x100
317
PG_SHARED           = 0x200
2288 clevermous 318
 
7136 dunkaist 319
PG_SWR              = 0x003 ; PG_WRITE + PG_READ
320
PG_UR               = 0x005 ; PG_USER + PG_READ
321
PG_UWR              = 0x007 ; PG_USER + PG_WRITE + PG_READ
322
PG_NOCACHE          = 0x018 ; PG_PCD + PG_PWT
5356 serge 323
 
7136 dunkaist 324
PDE_LARGE           = 0x080
5356 serge 325
 
7136 dunkaist 326
MEM_WB              = 6     ; write-back memory
327
MEM_WC              = 1     ; write combined memory
328
MEM_UC              = 0     ; uncached memory
5360 serge 329
 
7136 dunkaist 330
PAT_WB              = 0x000
331
PAT_WC              = 0x008
332
PAT_UCM             = 0x010
333
PAT_UC              = 0x018
5360 serge 334
 
7136 dunkaist 335
PAT_TYPE_UC         = 0
336
PAT_TYPE_WC         = 1
337
PAT_TYPE_WB         = 6
338
PAT_TYPE_UCM        = 7
5360 serge 339
 
7136 dunkaist 340
PAT_VALUE           = 0x00070106; (UC<<24)|(UCM<<16)|(WC<<8)|WB
7122 dunkaist 341
 
7136 dunkaist 342
MAX_MEMMAP_BLOCKS   = 32
2288 clevermous 343
 
7136 dunkaist 344
EVENT_REDRAW       = 0x00000001
345
EVENT_KEY          = 0x00000002
346
EVENT_BUTTON       = 0x00000004
347
EVENT_BACKGROUND   = 0x00000010
348
EVENT_MOUSE        = 0x00000020
349
EVENT_IPC          = 0x00000040
350
EVENT_NETWORK      = 0x00000080
351
EVENT_DEBUG        = 0x00000100
352
EVENT_NETWORK2     = 0x00000200
353
EVENT_EXTENDED     = 0x00000400
2288 clevermous 354
 
7136 dunkaist 355
EV_INTR            = 1
6079 serge 356
 
7136 dunkaist 357
STDIN_FILENO       = 0
358
STDOUT_FILENO      = 1
359
STDERR_FILENO      = 2
6244 serge 360
 
7136 dunkaist 361
SYSTEM_SHUTDOWN    = 2
362
SYSTEM_REBOOT      = 3
363
SYSTEM_RESTART     = 4
6790 0CodErr 364
 
7136 dunkaist 365
BLIT_CLIENT_RELATIVE = 0x20000000
366
 
6079 serge 367
struct SYSCALL_STACK
368
        _eip            dd ?
369
        _edi            dd ?    ;  +4
370
        _esi            dd ?    ;  +8
371
        _ebp            dd ?    ; +12
372
        _esp            dd ?    ; +16
373
        _ebx            dd ?    ; +20
374
        _edx            dd ?    ; +24
375
        _ecx            dd ?    ; +28
376
        _eax            dd ?    ; +32
2384 hidnplayr 377
ends
2288 clevermous 378
 
6079 serge 379
struct  LHEAD
380
        next            dd ?   ;next object in list
381
        prev            dd ?   ;prev object in list
382
ends
2288 clevermous 383
 
6079 serge 384
struct  MUTEX_WAITER
385
        list    LHEAD
386
        task    dd ?
387
        type    dd ?
388
ends
389
 
390
struct  MUTEX
391
        wait_list       LHEAD
392
        count           dd ?
393
ends
394
 
395
struct  RWSEM
396
        wait_list       LHEAD
397
        count           dd ?
398
ends
399
 
400
struct  FUTEX
401
        list            LHEAD
402
        magic           dd ?
403
        handle          dd ?
404
        destroy         dd ?
405
 
406
        wait_list       LHEAD
407
        pointer         dd ?
408
        flags           dd ?
409
ends
410
 
7136 dunkaist 411
FUTEX_INIT      = 0
412
FUTEX_DESTROY   = 1
413
FUTEX_WAIT      = 2
414
FUTEX_WAKE      = 3
6079 serge 415
 
6926 serge 416
struct  FILED
417
        list            LHEAD
418
        magic           rd 1
419
        handle          rd 1
420
        destroy         rd 1
6929 serge 421
        mode            rd 1
6926 serge 422
        file            rd 1
423
ends
424
 
425
struct  PIPE
426
        pipe_ops        rd 1
427
        buffer          rd 1
428
        readers         rd 1
429
        writers         rd 1
430
 
431
        pipe_lock       MUTEX
432
        count           rd 1
433
 
434
        read_end        rd 1
435
        write_end       rd 1
436
        rlist           LHEAD
437
        wlist           LHEAD
438
ends
439
 
6079 serge 440
struct  PROC
441
        list            LHEAD
442
        thr_list        LHEAD
9048 Boppan 443
        smap_list       LHEAD
6079 serge 444
        heap_lock       MUTEX
445
        heap_base       rd 1
446
        heap_top        rd 1
447
        mem_used        rd 1
448
        pdt_0_phys      rd 1
449
        pdt_1_phys      rd 1
450
        io_map_0        rd 1
451
        io_map_1        rd 1
452
 
453
        ht_lock         rd 1
6802 pathoswith 454
        ht_free         rd 1                ;htab[0] stdin
455
        ht_next         rd 1                ;htab[1] stdout
456
        htab            rd 1024-PROC.htab/4 ;htab[2] stderr
6079 serge 457
        pdt_0           rd 1024
458
ends
459
 
460
struct  DBG_REGS
461
        dr0             dd ?
462
        dr1             dd ?
463
        dr2             dd ?
464
        dr3             dd ?
465
        dr7             dd ?
466
ends
467
 
468
struct  POINT
469
        x       dd ?
470
        y       dd ?
471
ends
472
 
473
struct  RECT
474
        left    dd ?
475
        top     dd ?
476
        right   dd ?
477
        bottom  dd ?
478
ends
479
 
480
struct  BOX
481
        left    dd ?
482
        top     dd ?
483
        width   dd ?
484
        height  dd ?
485
ends
486
 
8874 rgimad 487
; Fields, marked as R now not used, but will be used soon,
488
; when legacy TASKDATA structure will be deleted
6079 serge 489
struct  APPDATA
490
        app_name        rb 11
491
                        rb 5
492
 
493
        list            LHEAD           ;+16
494
        process         dd ?            ;+24
495
        fpu_state       dd ?            ;+28
496
        exc_handler     dd ?            ;+32
497
        except_mask     dd ?            ;+36
498
        pl0_stack       dd ?            ;+40
499
        cursor          dd ?            ;+44
500
        fd_ev           dd ?            ;+48
501
        bk_ev           dd ?            ;+52
502
        fd_obj          dd ?            ;+56
503
        bk_obj          dd ?            ;+60
504
        saved_esp       dd ?            ;+64
505
        io_map          rd 2            ;+68
506
        dbg_state       dd ?            ;+76
507
        cur_dir         dd ?            ;+80
508
        wait_timeout    dd ?            ;+84
509
        saved_esp0      dd ?            ;+88
510
        wait_begin      dd ?            ;+92   +++
511
        wait_test       dd ?            ;+96   +++
512
        wait_param      dd ?            ;+100  +++
513
        tls_base        dd ?            ;+104
8874 rgimad 514
        event_mask      dd ?            ;+108  ; R stores event types allowed for task
515
        tid             dd ?            ;+112  ; R thread id
6079 serge 516
        draw_bgr_x      dd ?            ;+116
517
        draw_bgr_y      dd ?            ;+120
8874 rgimad 518
        state           db ?            ;+124  ; R thread state
8869 rgimad 519
                        db ?            ;+125
520
                        dw ?            ;+126
6079 serge 521
        wnd_shape       dd ?            ;+128
522
        wnd_shape_scale dd ?            ;+132
8874 rgimad 523
        mem_start       dd ?            ;+136  ; R
524
        counter_sum     dd ?            ;+140  ; R
6079 serge 525
        saved_box       BOX             ;+144
526
        ipc_start       dd ?            ;+160
527
        ipc_size        dd ?            ;+164
8874 rgimad 528
        occurred_events dd ?            ;+168  ; mask which accumulates occurred events
6079 serge 529
        debugger_slot   dd ?            ;+172
530
        terminate_protection dd ?       ;+176
531
        keyboard_mode   db ?            ;+180
6802 pathoswith 532
        captionEncoding db ?
533
                        rb 2
6318 serge 534
        exec_params     dd ?            ;+184
6079 serge 535
        dbg_event_mem   dd ?            ;+188
536
        dbg_regs        DBG_REGS        ;+192
537
        wnd_caption     dd ?            ;+212
538
        wnd_clientbox   BOX             ;+216
539
        priority        dd ?            ;+232
540
        in_schedule     LHEAD           ;+236
8874 rgimad 541
        counter_add     dd ?            ;+244  ; R
542
        cpu_usage       dd ?            ;+248  ; R
8869 rgimad 543
                        dd ?            ;+252
6079 serge 544
ends
545
 
8093 dunkaist 546
assert sizeof.APPDATA = 256
547
 
7136 dunkaist 548
APP_OBJ_OFFSET  = 48
549
APP_EV_OFFSET   = 40
6079 serge 550
 
8869 rgimad 551
; Note: in future TASKDATA will be merged into APPDATA
6079 serge 552
struct  TASKDATA
8869 rgimad 553
        event_mask      dd ? ;+0 mask which stores event types allowed for task
554
        pid             dd ? ;+4
555
                        dw ? ;+8
556
        state           db ? ;+10
557
                        db ? ;+11
558
                        dw ? ;+12
559
        wnd_number      db ? ;+14
560
                        db ? ;+15
561
        mem_start       dd ? ;+16
562
        counter_sum     dd ? ;+20
563
        counter_add     dd ? ;+24
564
        cpu_usage       dd ? ;+28
6079 serge 565
ends
566
 
8874 rgimad 567
; Thread states:
6079 serge 568
TSTATE_RUNNING        = 0
569
TSTATE_RUN_SUSPENDED  = 1
570
TSTATE_WAIT_SUSPENDED = 2
571
TSTATE_ZOMBIE         = 3
572
TSTATE_TERMINATING    = 4
573
TSTATE_WAITING        = 5
574
TSTATE_FREE           = 9
575
 
8874 rgimad 576
; Window constants:
6079 serge 577
WSTATE_NORMAL    = 00000000b
578
WSTATE_MAXIMIZED = 00000001b
579
WSTATE_MINIMIZED = 00000010b
580
WSTATE_ROLLEDUP  = 00000100b
581
 
582
WSTATE_REDRAW    = 00000001b
583
WSTATE_WNDDRAWN  = 00000010b
584
 
585
WSTYLE_HASCAPTION     = 00010000b
586
WSTYLE_CLIENTRELATIVE = 00100000b
587
 
588
ZPOS_DESKTOP            = -2
589
ZPOS_ALWAYS_BACK        = -1
590
ZPOS_NORMAL             = 0
591
ZPOS_ALWAYS_TOP         = 1     ;ZPOS_ALWAYS_TOP is always last and has max number!
8874 rgimad 592
 
593
; Window structure:
6079 serge 594
struct  WDATA
595
        box             BOX
596
        cl_workarea     dd ?
597
        cl_titlebar     dd ?
598
        cl_frames       dd ?
599
        z_modif         db ?
600
        fl_wstate       db ?
601
        fl_wdrawn       db ?
602
        fl_redraw       db ?
603
ends
604
 
605
label WDATA.fl_wstyle byte at WDATA.cl_workarea + 3
606
 
8858 rgimad 607
assert sizeof.WDATA = 32
6079 serge 608
 
2384 hidnplayr 609
struct  SYS_VARS
610
        bpp             dd ?
611
        scanline        dd ?
612
        vesa_mode       dd ?
613
        x_res           dd ?
614
        y_res           dd ?
615
ends
2288 clevermous 616
 
2384 hidnplayr 617
struct  APPOBJ                  ; common object header
618
        magic           dd ?    ;
619
        destroy         dd ?    ; internal destructor
620
        fd              dd ?    ; next object in list
621
        bk              dd ?    ; prev object in list
622
        pid             dd ?    ; owner id
623
ends
2288 clevermous 624
 
2384 hidnplayr 625
struct  CURSOR          APPOBJ
626
        base            dd ?   ;allocated memory
627
        hot_x           dd ?   ;hotspot coords
628
        hot_y           dd ?
2288 clevermous 629
 
2384 hidnplayr 630
        list_next       dd ?   ;next cursor in cursor list
631
        list_prev       dd ?   ;prev cursor in cursor list
632
        dev_obj         dd ?   ;device depended data
633
ends
2288 clevermous 634
 
635
 
2384 hidnplayr 636
struct  EVENT           APPOBJ
637
        id              dd ?   ;event uid
638
        state           dd ?   ;internal flags
639
        code            dd ?
640
                        rd 5
641
ends
2288 clevermous 642
 
643
 
2384 hidnplayr 644
struct  SMEM
645
        bk              dd ?
646
        fd              dd ?    ;+4
647
        base            dd ?    ;+8
648
        size            dd ?    ;+12
649
        access          dd ?    ;+16
650
        refcount        dd ?    ;+20
651
        name            rb 32   ;+24
652
ends
2288 clevermous 653
 
9048 Boppan 654
struct  SMAP
655
        fd              dd ?   ;next in mmapped list
656
        bk              dd ?   ;prev in mmapped list
2384 hidnplayr 657
        base            dd ?   ;mapped base
658
        size            dd ?   ;mapped size
9048 Boppan 659
        type            dd ?   ;SMAP_TYPE_SMEM or SMAP_TYPE_PE
660
        parent          dd ?   ;SMEM or PEDESCR
2384 hidnplayr 661
ends
9048 Boppan 662
SMAP_TYPE_SMEM = 1
663
SMAP_TYPE_PE = 2
2288 clevermous 664
 
7132 dunkaist 665
struct DQ
666
        lo dd ?
667
        hi dd ?
668
ends
2288 clevermous 669
 
7132 dunkaist 670
struct e820entry
671
        addr DQ ?
672
        size DQ ?
673
        type dd ?
674
ends
2288 clevermous 675
 
8091 dunkaist 676
RD_LOAD_FROM_FLOPPY = 1
677
RD_LOAD_FROM_HD     = 2
678
RD_LOAD_FROM_MEMORY = 3
679
RD_LOAD_FROM_FORMAT = 4
680
RD_LOAD_FROM_NONE   = 5
8089 dunkaist 681
 
7132 dunkaist 682
struct  boot_data
683
        bpp             db ?    ; bits per pixel
684
        pitch           dw ?    ; scanline length
685
                        db ?
2384 hidnplayr 686
                        dd ?
7132 dunkaist 687
        vesa_mode       dw ?
688
        x_res           dw ?
689
        y_res           dw ?
690
                        dw ?
2384 hidnplayr 691
                        dd ?
7132 dunkaist 692
        bank_switch     dd ?    ; Vesa 1.2 pm bank switch
693
        lfb             dd ?    ; Vesa 2.0 LFB address
694
        mtrr            db ?    ; 0 or 1: enable MTRR graphics acceleration
8217 dunkaist 695
        launcher_start  db ?    ; 0 or 1: start the first app (right now it's
696
                                ; LAUNCHER) after kernel is loaded
7132 dunkaist 697
        debug_print     db ?    ; if nonzero, duplicates debug output to the screen
698
        dma             db ?    ; DMA write: 1=yes, 2=no
699
        pci_data        rb 8
700
                        rb 8
701
        shutdown_type   db ?    ; see sysfn 18.9
702
                        rb 15
703
        apm_entry       dd ?    ; entry point of APM BIOS
704
        apm_version     dw ?    ; BCD
705
        apm_flags       dw ?
706
                        rb 8
707
        apm_code_32     dw ?
708
        apm_code_16     dw ?
709
        apm_data_16     dw ?
8089 dunkaist 710
        rd_load_from    db ?    ; Device to load ramdisk from, RD_LOAD_FROM_*
7132 dunkaist 711
                        db ?
712
        kernel_restart  dw ?
8089 dunkaist 713
        sys_disk        dw ?    ; Device to mount on /sys/, see loader_doc.txt for details
7132 dunkaist 714
        acpi_rsdp       dd ?
8092 dunkaist 715
        syspath         rb 0x17
716
        devicesdat_data dd ?
717
        devicesdat_size dd ?
7132 dunkaist 718
        bios_hd_cnt     db ?    ; number of BIOS hard disks
719
        bios_hd         rb 0x80 ; BIOS hard disks
720
        memmap_block_cnt dd ?   ; available physical memory map: number of blocks
721
        memmap_blocks   e820entry
722
                        rb sizeof.e820entry * (MAX_MEMMAP_BLOCKS - 1)
2384 hidnplayr 723
ends
2288 clevermous 724
 
7132 dunkaist 725
virtual at BOOT_VARS
726
        BOOT_LO boot_data
727
end virtual
728
virtual at OS_BASE + BOOT_VARS
729
        BOOT boot_data
730
end virtual
731
 
7522 dunkaist 732
MAX_SCREEN_WIDTH  = 3840
733
MAX_SCREEN_HEIGHT = 2160
734
 
5351 serge 735
struct  display_t
736
        x               dd ?
737
        y               dd ?
738
        width           dd ?
739
        height          dd ?
740
        bits_per_pixel  dd ?
741
        vrefresh        dd ?
6263 serge 742
        current_lfb     dd ?
5351 serge 743
        lfb_pitch       dd ?
744
 
745
        win_map_lock    RWSEM
746
        win_map         dd ?
747
        win_map_pitch   dd ?
748
        win_map_size    dd ?
749
 
750
        modes           dd ?
751
        ddev            dd ?
752
        connector       dd ?
753
        crtc            dd ?
754
 
755
        cr_list.next    dd ?
756
        cr_list.prev    dd ?
757
 
758
        cursor          dd ?
759
 
760
        init_cursor     dd ?
761
        select_cursor   dd ?
762
        show_cursor     dd ?
763
        move_cursor     dd ?
764
        restore_cursor  dd ?
765
        disable_mouse   dd ?
766
        mask_seqno      dd ?
767
        check_mouse     dd ?
768
        check_m_pixel   dd ?
769
 
770
        bytes_per_pixel dd ?
771
ends
772
 
6079 serge 773
struct  DISPMODE
774
        width   dw ?
775
        height  dw ?
776
        bpp     dw ?
777
        freq    dw ?
778
ends
5351 serge 779
 
6079 serge 780
 
3393 clevermous 781
struct  PCIDEV
782
        bk              dd ?
783
        fd              dd ?
784
        vendor_device_id dd ?
785
        class           dd ?
786
        devfn           db ?
787
        bus             db ?
4418 clevermous 788
                        rb 2
789
        owner           dd ? ; pointer to SRV or 0
3393 clevermous 790
ends
791
 
9048 Boppan 792
struct  PEDESCR
793
        bk              dd ?
794
        fd              dd ?
795
        size            dd ?    ; in pages
796
        timestamp       dq ?
797
        refcount        dd ?
798
        defaultbase     dd ?
799
        name            dd ?
800
        entry           dd ?
801
        stacksize       dd ?
802
        page_array_lock MUTEX
803
; After those fields the array follows, one dword per every of [size] pages.
804
; The value of every field has 3 parts:
805
; - upper 20 bits are page number or zero;
806
; - next 4 bits are access rights shareable/executable/readable/writable
807
;   in the same order as IMAGE_SCN_MEM_xxx shifted appropriately;
808
; - lower 8 bits are reference counter.
809
; The exact meaning depends on page type.
810
; * For a page with data in non-shareable section
811
;   which has at least one unmodified copy:
812
;   - upper 20 bits are page number for unmodified copy,
813
;   - reference counter = number of unmodified copies is nonzero up to 0xFF.
814
;   If reference counter reaches 0xFF, it becomes locked at this value.
815
;   If reference counter reaches zero, the last copy changes ownership
816
;   to the last process,
817
;   and the page is converted to the following state.
818
; * For a page with data in non-shareable section
819
;   with no unmodified copies:
820
;   - all fields are reset to zero.
821
;   The original content is lost; map_pe_usermode would reload from file.
822
; * For a page with zeroes in non-shareable section:
823
;   - upper 20 bits are zero,
824
;   - lower 8 bits are 0xFF.
825
; * For a page in shareable section with data or with zeroes:
826
;   - upper 20 bits are page number for all copies,
827
;   - lower 8 bits are reference counter from 1 to 0xFF.
828
;   Reference counter does not actually matter here,
829
;   it equals [refcount] unless 0xFF was once reached,
830
;   but is kept for consistency.
831
ends
832
 
833
struct  SHARED_LOCKED_PAGE
834
        fd              dd ?
835
        bk              dd ?
836
        address         dd ?
837
        parent          dd ?
838
        offs            dd ?
839
ends
840
 
6079 serge 841
struct  IDE_DATA
842
        ProgrammingInterface dd ?
843
        Interrupt            dw ?
844
        RegsBaseAddres       dw ?
845
        BAR0_val             dw ?
846
        BAR1_val             dw ?
847
        BAR2_val             dw ?
848
        BAR3_val             dw ?
849
        dma_hdd_channel_1    db ?
850
        dma_hdd_channel_2    db ?
6816 dunkaist 851
        pcidev               dd ?       ; pointer to corresponding PCIDEV structure
6079 serge 852
ends
853
 
854
struct  IDE_CACHE
855
        pointer              dd ?
856
        size                 dd ?   ; not use
857
        data_pointer         dd ?
858
        system_data_size     dd ?   ; not use
859
        appl_data_size       dd ?   ; not use
860
        system_data          dd ?
861
        appl_data            dd ?
862
        system_sad_size      dd ?
863
        appl_sad_size        dd ?
864
        search_start         dd ?
865
        appl_search_start    dd ?
866
ends
867
 
868
struct  IDE_DEVICE
869
        UDMA_possible_modes  db ?
870
        UDMA_set_mode        db ?
871
ends
872
 
3395 clevermous 873
; The following macro assume that we are on uniprocessor machine.
874
; Serious work is needed for multiprocessor machines.
875
macro spin_lock_irqsave spinlock
876
{
877
        pushf
878
        cli
879
}
880
macro spin_unlock_irqrestore spinlock
881
{
882
        popf
883
}
884
macro spin_lock_irq spinlock
885
{
886
        cli
887
}
888
macro spin_unlock_irq spinlock
889
{
890
        sti
891
}
892
 
2384 hidnplayr 893
struct  MEM_STATE
894
        mutex           MUTEX
895
        smallmap        dd ?
896
        treemap         dd ?
897
        topsize         dd ?
898
        top             dd ?
899
        smallbins       rd 4*32
900
        treebins        rd 32
901
ends
2288 clevermous 902
 
2384 hidnplayr 903
struct  PG_DATA
904
        mem_amount      dd ?
905
        vesa_mem        dd ?
906
        pages_count     dd ?
907
        pages_free      dd ?
908
        pages_faults    dd ?
909
        pagemap_size    dd ?
910
        kernel_pages    dd ?
911
        kernel_tables   dd ?
912
        sys_page_dir    dd ?
913
        mutex           MUTEX
914
ends
2288 clevermous 915
 
2384 hidnplayr 916
struct  SRV
917
        srv_name        rb 16    ;ASCIIZ string
918
        magic           dd ?     ;+0x10 ;'SRV '
919
        size            dd ?     ;+0x14 ;size of structure SRV
920
        fd              dd ?     ;+0x18 ;next SRV descriptor
921
        bk              dd ?     ;+0x1C ;prev SRV descriptor
922
        base            dd ?     ;+0x20 ;service base address
923
        entry           dd ?     ;+0x24 ;service START function
924
        srv_proc        dd ?     ;+0x28 ;user mode service handler
925
        srv_proc_ex     dd ?     ;+0x2C ;kernel mode service handler
926
ends
2288 clevermous 927
 
3520 clevermous 928
struct USBSRV
929
        srv             SRV
930
        usb_func        dd ?
931
ends
932
 
933
struct USBFUNC
934
        strucsize       dd ?
935
        add_device      dd ?
936
        device_disconnect dd ?
937
ends
938
 
7136 dunkaist 939
DRV_ENTRY    =  1
940
DRV_EXIT     = -1
2288 clevermous 941
 
2384 hidnplayr 942
struct  COFF_HEADER
943
        machine         dw ?
944
        nSections       dw ?
945
        DataTime        dd ?
946
        pSymTable       dd ?
947
        nSymbols        dd ?
948
        optHeader       dw ?
949
        flags           dw ?
950
ends
2288 clevermous 951
 
2384 hidnplayr 952
struct  COFF_SECTION
953
        Name            rb 8
954
        VirtualSize     dd ?
955
        VirtualAddress  dd ?
956
        SizeOfRawData   dd ?
957
        PtrRawData      dd ?
958
        PtrReloc        dd ?
959
        PtrLinenumbers  dd ?
960
        NumReloc        dw ?
961
        NumLinenum      dw ?
962
        Characteristics dd ?
963
ends
9048 Boppan 964
IMAGE_SCN_MEM_SHARED  = 10000000h
965
IMAGE_SCN_MEM_EXECUTE = 20000000h
966
IMAGE_SCN_MEM_READ    = 40000000h
967
IMAGE_SCN_MEM_WRITE   = 80000000h
2288 clevermous 968
 
9048 Boppan 969
struct  STRIPPED_PE_SECTION
970
        Name            rb 8
971
        VirtualSize     dd ?
972
        VirtualAddress  dd ?
973
        SizeOfRawData   dd ?
974
        PtrRawData      dd ?
975
        Characteristics dd ?
976
ends
977
 
2384 hidnplayr 978
struct  COFF_RELOC
979
        VirtualAddress  dd ?
980
        SymIndex        dd ?
981
        Type            dw ?
982
ends
2288 clevermous 983
 
2384 hidnplayr 984
struct  COFF_SYM
985
        Name            rb 8
986
        Value           dd ?
987
        SectionNumber   dw ?
988
        Type            dw ?
989
        StorageClass    db ?
990
        NumAuxSymbols   db ?
991
ends
2288 clevermous 992
 
5039 clevermous 993
struct  STRIPPED_PE_HEADER
994
        Signature           dw ?
995
        Characteristics     dw ?
996
        AddressOfEntryPoint dd ?
997
        ImageBase           dd ?
998
        SectionAlignmentLog db ?
999
        FileAlignmentLog    db ?
1000
        MajorOSVersion      db ?
1001
        MinorOSVersion      db ?
1002
        SizeOfImage         dd ?
1003
        SizeOfStackReserve  dd ?
1004
        SizeOfHeapReserve   dd ?
1005
        SizeOfHeaders       dd ?
1006
        Subsystem           db ?
1007
        NumberOfRvaAndSizes db ?
1008
        NumberOfSections    dw ?
1009
ends
1010
STRIPPED_PE_SIGNATURE = 0x4503 ; 'PE' xor 'S'
1011
SPE_DIRECTORY_IMPORT    = 0
1012
SPE_DIRECTORY_EXPORT    = 1
1013
SPE_DIRECTORY_BASERELOC = 2
1014
 
9048 Boppan 1015
struct IMAGE_DATA_DIRECTORY
1016
        VirtualAddress dd  ?
1017
        isize          dd  ?
1018
ends
1019
 
1020
struct IMAGE_OPTIONAL_HEADER32
1021
        Magic                   dw  ?
1022
        MajorLinkerVersion      db  ?
1023
        MinorLinkerVersion      db  ?
1024
        SizeOfCode              dd  ?
1025
        SizeOfInitializedData   dd  ?
1026
        SizeOfUninitializedData dd  ?
1027
        AddressOfEntryPoint     dd  ?
1028
        BaseOfCode              dd  ?
1029
        BaseOfData              dd  ?
1030
        ImageBase               dd  ?
1031
        SectionAlignment        dd  ?
1032
        FileAlignment           dd  ?
1033
        MajorOperatingSystemVersion     dw  ?
1034
        MinorOperatingSystemVersion     dw  ?
1035
        MajorImageVersion       dw  ?
1036
        MinorImageVersion       dw  ?
1037
        MajorSubsystemVersion   dw  ?
1038
        MinorSubsystemVersion   dw  ?
1039
        Win32VersionValue       dd  ?
1040
        SizeOfImage             dd  ?
1041
        SizeOfHeaders           dd  ?
1042
        CheckSum                dd  ?
1043
        Subsystem               dw  ?
1044
        DllCharacteristics      dw  ?
1045
        SizeOfStackReserve      dd  ?
1046
        SizeOfStackCommit       dd  ?
1047
        SizeOfHeapReserve       dd  ?
1048
        SizeOfHeapCommit        dd  ?
1049
        LoaderFlags             dd  ?
1050
        NumberOfDirectories     dd  ?
1051
        DataDirectory           IMAGE_DATA_DIRECTORY ?
1052
        Directories             rb  sizeof.IMAGE_DATA_DIRECTORY*15
1053
ends
1054
 
1055
struct IMAGE_FILE_HEADER
1056
        Machine                 dw ?
1057
        NumberOfSections        dw ?
1058
        TimeDateStamp           dd ?
1059
        PointerToSymbolTable    dd ?
1060
        NumberOfSymbols         dd ?
1061
        SizeOfOptionalHeader    dw ?
1062
        Characteristics         dw ?
1063
ends
1064
 
1065
struct IMAGE_NT_HEADERS
1066
        Signature       dd ?
1067
        FileHeader      IMAGE_FILE_HEADER
1068
        OptionalHeader  IMAGE_OPTIONAL_HEADER32
1069
ends
1070
 
2384 hidnplayr 1071
struct  IOCTL
1072
        handle          dd ?
1073
        io_code         dd ?
1074
        input           dd ?
1075
        inp_size        dd ?
1076
        output          dd ?
1077
        out_size        dd ?
1078
ends
2288 clevermous 1079
 
2384 hidnplayr 1080
struct  IRQH
1081
        list            LHEAD
1082
        handler         dd ?   ;handler roututine
1083
        data            dd ?   ;user-specific data
3506 clevermous 1084
        num_ints        dd ?   ;how many times handled
2414 Serge 1085
ends
7122 dunkaist 1086