Compare commits

...
10 Commits
3 changed files with 175 additions and 0 deletions

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include 'devices.inc'
VEN_STRIDE = 8
; Returns pointer to the device id stored in data
; clears and returns value in esi
proc PCI_find_dev stdcall ven_id, dev_id
push edx
xor esi, esi
mov esi, ven1_array
cmp [ven_id], VirtVendorID1
jz .next_device_id
mov esi, ven2_array
cmp [ven_id], VirtVendorID2
jnz .not_found ;unknown vendor id
.next_device_id:
mov edx, [esi] ;fewer memory accesses
test edx, edx
jz .not_found ;end of array
add esi, VEN_STRIDE
cmp edx, [dev_id]
jnz .next_device_id
;Found device
sub esi, VEN_STRIDE ;The loop adds it an one time extra
pop edx
ret
.not_found:
pop edx
xor esi, esi
ret
endp
; Follow convention: {id, msg}
align 4
ven1_array dd idDevNetwork,msgDevNetwork
dd idDevBlock,msgDevBlock
dd idDevBalloon,msgDevBallon
dd idDevConsole,msgDevConsole
dd 0,0
ven2_array dd idDevNVME,msgDevNVME
dd 0,0
+27
View File
@@ -0,0 +1,27 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VirtVendorID1 = 0x1af4
VirtVendorID2 = 0x1b36
; Device description strings
align 4
idDevNetwork = 0x1000
idDevBlock = 0x1001
idDevBalloon = 0x1002
idDevConsole = 0x1003
idDevNVME = 0x0010
align 4
msgDevNetwork db "Network",0
msgDevBlock db "Block",0
msgDevBallon db "Balloon",0
msgDevConsole db "Console",0
msgDevNVME db "NVME",0
+87
View File
@@ -0,0 +1,87 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
format PE DLL native 0.05
entry START
DEBUG equ 1
__DEBUG__ equ 1
__DEBUG_LEVEL__ equ 1
section '.flat' code readable writable executable
include '../proc32.inc'
include '../struct.inc'
include '../macros.inc'
include '../peimport.inc'
include '../fdo.inc'
include 'device_table.inc'
proc START c, state:dword, cmdline:dword
cmp [state], 1
jne .exit
.entry:
push esi
mov esi, msgInit
invoke SysMsgBoardStr
call detect
pop esi
.exit:
mov eax, 1
ret
endp
proc detect
push ebx
invoke GetPCIList
mov ebx, eax
.next_dev:
mov eax, [eax+PCIDEV.fd]
cmp eax, ebx
jz .finish
mov esi, msgVirtIO
mov edx, [eax+PCIDEV.vendor_device_id]
mov ecx, edx
shr ecx, 16 ;cx upper half - device id, dx lower half - vendor id
;prepare regs for find dev proc
movzx edx, dx
stdcall PCI_find_dev, edx, ecx
test esi, esi
jz .notVirt
add esi, 4
DEBUGF 1, "I: VirtIO Driver %x:%x -> %s\n", dx, cx, [esi]
.notVirt:
jmp .next_dev
.finish:
xor eax, eax
pop ebx
inc eax
ret
endp
align 4
msgInit db 'I: detecting VirtIO drivers',13,10,0
msgVirtIO db 'VirtIO driver',0
align 4
data fixups
end data
include_debug_strings