Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4419 | clevermous | 1 | include 'kglobals.inc' |
2 | |||
3 | PG_UNMAP equ 0x000 |
||
4 | PG_MAP equ 0x001 |
||
5 | PG_WRITE equ 0x002 |
||
6 | PG_SW equ 0x003 |
||
7 | PG_USER equ 0x005 |
||
8 | PG_UW equ 0x007 |
||
9 | PG_NOCACHE equ 0x018 |
||
10 | PG_LARGE equ 0x080 |
||
11 | PG_GLOBAL equ 0x100 |
||
12 | |||
13 | DRV_ENTRY equ 1 |
||
14 | DRV_EXIT equ -1 |
||
15 | |||
16 | struct LHEAD |
||
17 | next dd ? ;next object in list |
||
18 | prev dd ? ;prev object in list |
||
19 | ends |
||
20 | |||
21 | struct MUTEX |
||
22 | lhead LHEAD |
||
23 | count dd ? |
||
24 | ends |
||
25 | |||
26 | struct PCIDEV |
||
27 | bk dd ? |
||
28 | fd dd ? |
||
29 | vendor_device_id dd ? |
||
30 | class dd ? |
||
31 | devfn db ? |
||
32 | bus db ? |
||
33 | rb 2 |
||
34 | owner dd ? ; pointer to SRV or 0 |
||
35 | ends |
||
36 | |||
37 | ; The following macro assume that we are on uniprocessor machine. |
||
38 | ; Serious work is needed for multiprocessor machines. |
||
39 | macro spin_lock_irqsave spinlock |
||
40 | { |
||
41 | pushf |
||
42 | cli |
||
43 | } |
||
44 | macro spin_unlock_irqrestore spinlock |
||
45 | { |
||
46 | popf |
||
47 | } |
||
48 | macro spin_lock_irq spinlock |
||
49 | { |
||
50 | cli |
||
51 | } |
||
52 | macro spin_unlock_irq spinlock |
||
53 | { |
||
54 | sti |
||
55 | } |
||
56 | |||
57 | ; \begin{diamond}[29.09.2006] |
||
58 | ; may be useful for kernel debugging |
||
59 | ; example 1: |
||
60 | ; dbgstr 'Hello, World!' |
||
61 | ; example 2: |
||
62 | ; dbgstr 'Hello, World!', save_flags |
||
63 | macro dbgstr string*, f |
||
64 | { |
||
65 | local a |
||
66 | iglobal_nested |
||
67 | a db 'K : ',string,13,10,0 |
||
68 | endg_nested |
||
69 | if ~ f eq |
||
70 | pushfd |
||
71 | end if |
||
72 | push esi |
||
73 | mov esi, a |
||
74 | if defined SysMsgBoardStr._pe_import |
||
75 | invoke SysMsgBoardStr |
||
76 | else |
||
77 | call SysMsgBoardStr |
||
78 | end if |
||
79 | pop esi |
||
80 | if ~ f eq |
||
81 | popfd |
||
82 | end if |
||
83 | } |
||
84 | ; \end{diamond}[29.09.2006] |
||
85 | |||
86 | ; MOV Immediate. |
||
87 | ; Useful for things like movi eax,10: |
||
88 | ; shorter than regular mov, but slightly slower, |
||
89 | ; do not use it in performance-critical places. |
||
90 | macro movi dst, imm |
||
91 | { |
||
92 | if imm >= -0x80 & imm <= 0x7F |
||
93 | push imm |
||
94 | pop dst |
||
95 | else |
||
96 | mov dst, imm |
||
97 | end if |
||
98 | } |
||
99 | |||
100 | macro call name |
||
101 | { |
||
102 | if name eqtype func & defined name#._pe_import |
||
103 | err Use invoke, not call/stdcall for PE imports! |
||
104 | end if |
||
105 | call name |
||
106 | }=> |