2013-12-30 12:20:25 +01:00
|
|
|
include 'kglobals.inc'
|
|
|
|
|
|
|
|
PG_UNMAP equ 0x000
|
|
|
|
PG_MAP equ 0x001
|
|
|
|
PG_WRITE equ 0x002
|
|
|
|
PG_SW equ 0x003
|
|
|
|
PG_USER equ 0x005
|
|
|
|
PG_UW equ 0x007
|
|
|
|
PG_NOCACHE equ 0x018
|
|
|
|
PG_LARGE equ 0x080
|
|
|
|
PG_GLOBAL equ 0x100
|
|
|
|
|
|
|
|
DRV_ENTRY equ 1
|
|
|
|
DRV_EXIT equ -1
|
|
|
|
|
|
|
|
struct LHEAD
|
|
|
|
next dd ? ;next object in list
|
|
|
|
prev dd ? ;prev object in list
|
|
|
|
ends
|
|
|
|
|
|
|
|
struct MUTEX
|
|
|
|
lhead LHEAD
|
|
|
|
count dd ?
|
|
|
|
ends
|
|
|
|
|
|
|
|
struct PCIDEV
|
|
|
|
bk dd ?
|
|
|
|
fd dd ?
|
|
|
|
vendor_device_id dd ?
|
|
|
|
class dd ?
|
|
|
|
devfn db ?
|
|
|
|
bus db ?
|
|
|
|
rb 2
|
|
|
|
owner dd ? ; pointer to SRV or 0
|
|
|
|
ends
|
|
|
|
|
2014-01-14 21:50:19 +01:00
|
|
|
struct IOCTL
|
|
|
|
handle dd ?
|
|
|
|
io_code dd ?
|
|
|
|
input dd ?
|
|
|
|
inp_size dd ?
|
|
|
|
output dd ?
|
|
|
|
out_size dd ?
|
|
|
|
ends
|
|
|
|
|
2013-12-30 12:20:25 +01:00
|
|
|
; The following macro assume that we are on uniprocessor machine.
|
|
|
|
; Serious work is needed for multiprocessor machines.
|
|
|
|
macro spin_lock_irqsave spinlock
|
|
|
|
{
|
|
|
|
pushf
|
|
|
|
cli
|
|
|
|
}
|
|
|
|
macro spin_unlock_irqrestore spinlock
|
|
|
|
{
|
|
|
|
popf
|
|
|
|
}
|
|
|
|
macro spin_lock_irq spinlock
|
|
|
|
{
|
|
|
|
cli
|
|
|
|
}
|
|
|
|
macro spin_unlock_irq spinlock
|
|
|
|
{
|
|
|
|
sti
|
|
|
|
}
|
|
|
|
|
|
|
|
; \begin{diamond}[29.09.2006]
|
|
|
|
; may be useful for kernel debugging
|
|
|
|
; example 1:
|
|
|
|
; dbgstr 'Hello, World!'
|
|
|
|
; example 2:
|
|
|
|
; dbgstr 'Hello, World!', save_flags
|
|
|
|
macro dbgstr string*, f
|
|
|
|
{
|
|
|
|
local a
|
|
|
|
iglobal_nested
|
|
|
|
a db 'K : ',string,13,10,0
|
|
|
|
endg_nested
|
|
|
|
if ~ f eq
|
|
|
|
pushfd
|
|
|
|
end if
|
|
|
|
push esi
|
|
|
|
mov esi, a
|
|
|
|
if defined SysMsgBoardStr._pe_import
|
|
|
|
invoke SysMsgBoardStr
|
|
|
|
else
|
|
|
|
call SysMsgBoardStr
|
|
|
|
end if
|
|
|
|
pop esi
|
|
|
|
if ~ f eq
|
|
|
|
popfd
|
|
|
|
end if
|
|
|
|
}
|
|
|
|
; \end{diamond}[29.09.2006]
|
|
|
|
|
|
|
|
; MOV Immediate.
|
|
|
|
; Useful for things like movi eax,10:
|
|
|
|
; shorter than regular mov, but slightly slower,
|
|
|
|
; do not use it in performance-critical places.
|
|
|
|
macro movi dst, imm
|
|
|
|
{
|
|
|
|
if imm >= -0x80 & imm <= 0x7F
|
|
|
|
push imm
|
|
|
|
pop dst
|
|
|
|
else
|
|
|
|
mov dst, imm
|
|
|
|
end if
|
|
|
|
}
|
|
|
|
|
|
|
|
macro call name
|
|
|
|
{
|
|
|
|
if name eqtype func & defined name#._pe_import
|
|
|
|
err Use invoke, not call/stdcall for PE imports!
|
|
|
|
end if
|
|
|
|
call name
|
|
|
|
}
|