forked from KolibriOS/kolibrios
Bugfix for #4467
git-svn-id: svn://kolibrios.org@4470 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f514bd90e1
commit
b21956c356
@ -403,16 +403,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -423,10 +423,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types of this hardware dont exist
|
jne .fail ; other types of this hardware dont exist
|
||||||
|
|
||||||
@ -437,7 +437,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
jz .maybeboomerang
|
jz .maybeboomerang
|
||||||
|
|
||||||
mov esi, VORTEX_LIST
|
mov esi, VORTEX_LIST
|
||||||
mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax , [eax+1] ;
|
mov ax , [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -456,7 +456,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
mov esi, BOOMERANG_LIST
|
mov esi, BOOMERANG_LIST
|
||||||
mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice2:
|
.nextdevice2:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -487,7 +487,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -260,16 +260,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -280,10 +280,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax , [eax+1] ;
|
mov ax , [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -323,7 +323,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -192,16 +192,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
;---------------
|
;---------------
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F ;---------------
|
jne @F ;---------------
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -214,14 +214,14 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
DEBUGF 1, "Checking if device is already listed..\n"
|
DEBUGF 1, "Checking if device is already listed..\n"
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3
|
cmp [edx + IOCTL.inp_size], 3
|
||||||
jb .fail
|
jb .fail
|
||||||
cmp byte [eax], 1
|
cmp byte [eax], 1
|
||||||
je .pci
|
je .pci
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 4
|
cmp [edx + IOCTL.inp_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
cmp byte [eax], 0
|
cmp byte [eax], 0
|
||||||
je .isa
|
je .isa
|
||||||
@ -251,7 +251,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
.firstdevice_pci:
|
.firstdevice_pci:
|
||||||
call create_new_struct
|
call create_new_struct
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
@ -290,7 +290,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
.firstdevice_isa:
|
.firstdevice_isa:
|
||||||
call create_new_struct
|
call create_new_struct
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, word [eax+1]
|
movzx ecx, word [eax+1]
|
||||||
mov [device.io_addr], ecx
|
mov [device.io_addr], ecx
|
||||||
mov cl, [eax+3]
|
mov cl, [eax+3]
|
||||||
|
@ -267,16 +267,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -287,10 +287,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -329,7 +329,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -406,16 +406,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -426,10 +426,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -440,7 +440,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -469,7 +469,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -79,7 +79,7 @@ proc START stdcall, state:dword
|
|||||||
|
|
||||||
.entry:
|
.entry:
|
||||||
|
|
||||||
DEBUGF 2,"Loading %s driver\n", my_service
|
DEBUGF 2,"Loading driver\n"
|
||||||
stdcall RegService, my_service, service_proc
|
stdcall RegService, my_service, service_proc
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -104,16 +104,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -124,10 +124,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -167,7 +167,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte [eax+1]
|
movzx ecx, byte [eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte [eax+2]
|
movzx ecx, byte [eax+2]
|
||||||
|
@ -348,16 +348,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -368,10 +368,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -416,7 +416,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -456,7 +456,7 @@ proc START stdcall, state:dword
|
|||||||
cmp [state], 1
|
cmp [state], 1
|
||||||
jne .exit
|
jne .exit
|
||||||
|
|
||||||
DEBUGF 2,"Loading %s driver\n", my_service
|
DEBUGF 2,"Loading driver\n"
|
||||||
stdcall RegService, my_service, service_proc
|
stdcall RegService, my_service, service_proc
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -478,16 +478,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -498,10 +498,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -512,7 +512,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1]
|
mov ax, [eax+1]
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -541,7 +541,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte [eax+1]
|
movzx ecx, byte [eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte [eax+2]
|
movzx ecx, byte [eax+2]
|
||||||
@ -1798,7 +1798,7 @@ read_mac:
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
align 4
|
align 4
|
||||||
transmit:
|
transmit:
|
||||||
DEBUGF 2,"\nTransmitting packet, buffer:%x, size:%u\n", [esp+4], [esp+8]
|
DEBUGF 2,"Transmitting packet, buffer:%x, size:%u\n", [esp+4], [esp+8]
|
||||||
mov eax, [esp+4]
|
mov eax, [esp+4]
|
||||||
DEBUGF 2,"To: %x-%x-%x-%x-%x-%x From: %x-%x-%x-%x-%x-%x Type:%x%x\n",\
|
DEBUGF 2,"To: %x-%x-%x-%x-%x-%x From: %x-%x-%x-%x-%x-%x Type:%x%x\n",\
|
||||||
[eax+00]:2,[eax+01]:2,[eax+02]:2,[eax+03]:2,[eax+04]:2,[eax+05]:2,\
|
[eax+00]:2,[eax+01]:2,[eax+02]:2,[eax+03]:2,[eax+04]:2,[eax+05]:2,\
|
||||||
@ -1859,7 +1859,7 @@ int_handler:
|
|||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
DEBUGF 2,"\n%s INT\n", my_service
|
DEBUGF 2,"INT\n"
|
||||||
|
|
||||||
;-------------------------------------------
|
;-------------------------------------------
|
||||||
; Find pointer of device wich made IRQ occur
|
; Find pointer of device wich made IRQ occur
|
||||||
|
@ -316,16 +316,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -336,10 +336,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -379,7 +379,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte [eax+1]
|
movzx ecx, byte [eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte [eax+2]
|
movzx ecx, byte [eax+2]
|
||||||
|
@ -219,16 +219,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -239,10 +239,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax , [eax+1] ;
|
mov ax , [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -282,7 +282,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -327,7 +327,7 @@ proc START stdcall, state:dword
|
|||||||
|
|
||||||
.entry:
|
.entry:
|
||||||
|
|
||||||
DEBUGF 2,"Loading %s driver\n", my_service
|
DEBUGF 2,"Loading driver\n"
|
||||||
stdcall RegService, my_service, service_proc
|
stdcall RegService, my_service, service_proc
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -350,16 +350,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -370,10 +370,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -384,7 +384,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -413,7 +413,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
@ -514,7 +514,7 @@ ret
|
|||||||
align 4
|
align 4
|
||||||
probe:
|
probe:
|
||||||
|
|
||||||
DEBUGF 2,"Probing mtd80x device\n"
|
DEBUGF 2,"Probing device\n"
|
||||||
|
|
||||||
PCI_make_bus_master
|
PCI_make_bus_master
|
||||||
|
|
||||||
@ -635,7 +635,7 @@ probe:
|
|||||||
align 4
|
align 4
|
||||||
reset:
|
reset:
|
||||||
|
|
||||||
DEBUGF 1,"Resetting mtd80x\n"
|
DEBUGF 1,"Resetting\n"
|
||||||
|
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; insert irq handler on given irq
|
; insert irq handler on given irq
|
||||||
@ -645,7 +645,7 @@ reset:
|
|||||||
stdcall AttachIntHandler, eax, int_handler, dword 0
|
stdcall AttachIntHandler, eax, int_handler, dword 0
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz @f
|
jnz @f
|
||||||
DEBUGF 1,"\nCould not attach int handler!\n"
|
DEBUGF 1,"Could not attach int handler!\n"
|
||||||
; or eax, -1
|
; or eax, -1
|
||||||
; ret
|
; ret
|
||||||
@@:
|
@@:
|
||||||
@ -1105,7 +1105,7 @@ int_handler:
|
|||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
DEBUGF 1,"\n%s int\n", my_service
|
DEBUGF 1,"int\n"
|
||||||
|
|
||||||
; find pointer of device wich made IRQ occur
|
; find pointer of device wich made IRQ occur
|
||||||
|
|
||||||
@ -1134,7 +1134,7 @@ int_handler:
|
|||||||
|
|
||||||
.got_it:
|
.got_it:
|
||||||
|
|
||||||
DEBUGF 1,"Device: %x Status: %x ", ebx, ax
|
DEBUGF 1,"Device: %x Status: %x\n", ebx, ax
|
||||||
|
|
||||||
test ax, RI ; receive interrupt
|
test ax, RI ; receive interrupt
|
||||||
jz .no_rx
|
jz .no_rx
|
||||||
|
@ -396,16 +396,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -416,10 +416,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -430,7 +430,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
mov esi, device_list
|
mov esi, device_list
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -459,7 +459,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
@ -555,7 +555,7 @@ proc START stdcall, state:dword
|
|||||||
|
|
||||||
.entry:
|
.entry:
|
||||||
|
|
||||||
DEBUGF 2,"Loading %s driver\n", my_service
|
DEBUGF 2,"Loading driver\n"
|
||||||
stdcall RegService, my_service, service_proc
|
stdcall RegService, my_service, service_proc
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -578,16 +578,16 @@ align 4
|
|||||||
proc service_proc stdcall, ioctl:dword
|
proc service_proc stdcall, ioctl:dword
|
||||||
|
|
||||||
mov edx, [ioctl]
|
mov edx, [ioctl]
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
|
|
||||||
cmp eax, 0 ;SRV_GETVERSION
|
cmp eax, 0 ;SRV_GETVERSION
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -598,10 +598,10 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
cmp eax, 1 ;SRV_HOOK
|
cmp eax, 1 ;SRV_HOOK
|
||||||
jne .fail
|
jne .fail
|
||||||
|
|
||||||
cmp [IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
cmp [edx + IOCTL.inp_size], 3 ; Data input must be at least 3 bytes
|
||||||
jb .fail
|
jb .fail
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
cmp byte [eax], 1 ; 1 means device number and bus number (pci) are given
|
||||||
jne .fail ; other types arent supported for this card yet
|
jne .fail ; other types arent supported for this card yet
|
||||||
|
|
||||||
@ -612,7 +612,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -641,7 +641,7 @@ proc service_proc stdcall, ioctl:dword
|
|||||||
|
|
||||||
; save the pci bus and device numbers
|
; save the pci bus and device numbers
|
||||||
|
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
@ -1381,8 +1381,6 @@ macro IOSYNC
|
|||||||
align 4
|
align 4
|
||||||
read_mac:
|
read_mac:
|
||||||
|
|
||||||
DEBUGF 1, "Ethernet Address: "
|
|
||||||
|
|
||||||
lea edi, [device.mac]
|
lea edi, [device.mac]
|
||||||
set_io 0
|
set_io 0
|
||||||
set_io byPAR0
|
set_io byPAR0
|
||||||
@ -1390,11 +1388,13 @@ read_mac:
|
|||||||
.next:
|
.next:
|
||||||
in al, dx
|
in al, dx
|
||||||
stosb
|
stosb
|
||||||
DEBUGF 1, "-%x", al
|
|
||||||
inc edx
|
inc edx
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz .next
|
jnz .next
|
||||||
DEBUGF 1, "\n"
|
|
||||||
|
DEBUGF 1,"MAC = %x-%x-%x-%x-%x-%x\n", \
|
||||||
|
[device.mac+0]:2,[device.mac+1]:2,[device.mac+2]:2,[device.mac+3]:2,[device.mac+4]:2,[device.mac+5]:2
|
||||||
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -1410,7 +1410,7 @@ read_mac:
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
align 4
|
align 4
|
||||||
transmit:
|
transmit:
|
||||||
DEBUGF 1,"\nTransmitting packet, buffer:%x, size:%u\n", [esp+4], [esp+8]
|
DEBUGF 1,"Transmitting packet, buffer:%x, size:%u\n", [esp+4], [esp+8]
|
||||||
mov eax, [esp+4]
|
mov eax, [esp+4]
|
||||||
DEBUGF 1,"To: %x-%x-%x-%x-%x-%x From: %x-%x-%x-%x-%x-%x Type:%x%x\n",\
|
DEBUGF 1,"To: %x-%x-%x-%x-%x-%x From: %x-%x-%x-%x-%x-%x Type:%x%x\n",\
|
||||||
[eax+00]:2,[eax+01]:2,[eax+02]:2,[eax+03]:2,[eax+04]:2,[eax+05]:2,\
|
[eax+00]:2,[eax+01]:2,[eax+02]:2,[eax+03]:2,[eax+04]:2,[eax+05]:2,\
|
||||||
@ -1485,7 +1485,7 @@ int_handler:
|
|||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
DEBUGF 1,"\n%s int ", my_service
|
DEBUGF 1,"INT\n"
|
||||||
|
|
||||||
; Find pointer of device wich made IRQ occur
|
; Find pointer of device wich made IRQ occur
|
||||||
|
|
||||||
|
@ -267,15 +267,15 @@ service_proc:
|
|||||||
; pointer to IOCTL structure.
|
; pointer to IOCTL structure.
|
||||||
mov edx, [esp+4] ; edx -> IOCTL
|
mov edx, [esp+4] ; edx -> IOCTL
|
||||||
; 2. Get request code and select a handler for the code.
|
; 2. Get request code and select a handler for the code.
|
||||||
mov eax, [IOCTL.io_code]
|
mov eax, [edx + IOCTL.io_code]
|
||||||
test eax, eax ; check for SRV_GETVERSION
|
test eax, eax ; check for SRV_GETVERSION
|
||||||
jnz @f
|
jnz @f
|
||||||
; 3. This is SRV_GETVERSION request, no input, 4 bytes output, API_VERSION.
|
; 3. This is SRV_GETVERSION request, no input, 4 bytes output, API_VERSION.
|
||||||
; 3a. Output size must be at least 4 bytes.
|
; 3a. Output size must be at least 4 bytes.
|
||||||
cmp [IOCTL.out_size], 4
|
cmp [edx + IOCTL.out_size], 4
|
||||||
jb .fail
|
jb .fail
|
||||||
; 3b. Write result to the output buffer.
|
; 3b. Write result to the output buffer.
|
||||||
mov eax, [IOCTL.output]
|
mov eax, [edx + IOCTL.output]
|
||||||
mov [eax], dword API_VERSION
|
mov [eax], dword API_VERSION
|
||||||
; 3c. Return success.
|
; 3c. Return success.
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -286,10 +286,10 @@ service_proc:
|
|||||||
; 4. This is SRV_HOOK request, input defines the device to hook, no output.
|
; 4. This is SRV_HOOK request, input defines the device to hook, no output.
|
||||||
; 4a. The driver works only with PCI devices,
|
; 4a. The driver works only with PCI devices,
|
||||||
; so input must be at least 3 bytes long.
|
; so input must be at least 3 bytes long.
|
||||||
cmp [IOCTL.inp_size], 3
|
cmp [edx + IOCTL.inp_size], 3
|
||||||
jb .fail
|
jb .fail
|
||||||
; 4b. First byte of input is bus type, 1 stands for PCI.
|
; 4b. First byte of input is bus type, 1 stands for PCI.
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
cmp byte [eax], 1
|
cmp byte [eax], 1
|
||||||
jne .fail
|
jne .fail
|
||||||
; 4c. Second and third bytes of the input define the device: bus and dev.
|
; 4c. Second and third bytes of the input define the device: bus and dev.
|
||||||
@ -303,7 +303,7 @@ service_proc:
|
|||||||
test ecx, ecx
|
test ecx, ecx
|
||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [edx + IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax, [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
@ -323,7 +323,7 @@ service_proc:
|
|||||||
; 4h. Zero the structure.
|
; 4h. Zero the structure.
|
||||||
allocate_and_clear ebx, device.size, .fail
|
allocate_and_clear ebx, device.size, .fail
|
||||||
; 4i. Save PCI coordinates
|
; 4i. Save PCI coordinates
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [edx + IOCTL.input]
|
||||||
movzx ecx, byte[eax+1]
|
movzx ecx, byte[eax+1]
|
||||||
mov [device.pci_bus], ecx
|
mov [device.pci_bus], ecx
|
||||||
movzx ecx, byte[eax+2]
|
movzx ecx, byte[eax+2]
|
||||||
|
Loading…
Reference in New Issue
Block a user