Dont try to scan multiple functions on a single function device.

git-svn-id: svn://kolibrios.org@5166 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr 2014-11-04 15:52:56 +00:00
parent c28f6e1a01
commit 7077d8211a

View File

@ -224,10 +224,9 @@ Start_Enum:
mcall 62 ; get ID's mcall 62 ; get ID's
cmp ax, 0 ; Vendor ID should not be 0 or 0xFFFF cmp ax, 0 ; Vendor ID should not be 0 or 0xFFFF
je nextDev ; check next device if nothing exists here je .nextDev ; check next device if nothing exists here
cmp ax, 0xffff ; cmp ax, 0xffff ;
je nextDev ; je .nextDev ;
mov [PCI_Vendor], ax ; There is a device here, save the ID's mov [PCI_Vendor], ax ; There is a device here, save the ID's
shr eax, 16 ; shr eax, 16 ;
@ -238,50 +237,57 @@ Start_Enum:
mov cl, 0x08 ; Register to read (Get Revision) mov cl, 0x08 ; Register to read (Get Revision)
mcall 62 ; Read it mcall 62 ; Read it
mov [PCI_Rev], al ; Save it mov [PCI_Rev], al ; Save it
mov cl, 0x0b ; Register to read (Get class) mov cl, 0x0b ; Register to read (Get class)
mcall 62 ; Read it mcall 62 ; Read it
mov [PCI_Class], al ; Save it mov [PCI_Class], al ; Save it
mov cl, 0x0a ; Register to read (Get Subclass) mov cl, 0x0a ; Register to read (Get Subclass)
mcall 62 ; Read it mcall 62 ; Read it
mov [PCI_SubClass], al ; Save it mov [PCI_SubClass], al ; Save it
mov cl, 0x09 ; Register to read (Get Interface) mov cl, 0x09 ; Register to read (Get Interface)
mcall 62 ; Read it mcall 62 ; Read it
mov [PCI_Interface], al ; Save it mov [PCI_Interface], al ; Save it
mov cl, 0x3c ; Register to read (Get IRQ) mov cl, 0x3c ; Register to read (Get IRQ)
@@: mcall 62 ; Read it mcall 62 ; Read it
mov [PCI_IRQ], al ; Save it mov [PCI_IRQ], al ; Save it
; Could it be a network card?
cmp [PCI_Class], 2 ; network controller cmp [PCI_Class], 2 ; network controller
je @f je .found
cmp [PCI_Class], 6 ; bridge type device cmp [PCI_Class], 6 ; bridge type device
jne nextDev jne .nextDev
cmp [PCI_SubClass], 0x80 ; PCI-other bridge (for nvidia chipset) cmp [PCI_SubClass], 0x80 ; PCI-other bridge (for nvidia chipset)
jne nextDev jne .nextDev
cmp [PCI_Vendor], 0x10DE ; nvidia cmp [PCI_Vendor], 0x10DE ; nvidia
jne nextDev jne .nextDev
@@:
cmp byte[param], 0 .found:
cmp byte[param], 0 ; Load network driver immediately?
jne load_and_start jne load_and_start
call Print_New_Device ; print device info to screen
.nextDev:
test [V_Dev], 7
jnz .nextFn
; Is this a multifunction device?
mov bl, 4 ; Read config byte
mov bh, [V_Bus] ; Bus #
mov ch, [V_Dev] ; Device # on bus
mov cl, 0x0e mov cl, 0x0e
mcall 62 mcall 62
push eax
call Print_New_Device ; print device info to screen
pop eax
test al, al test al, al
js nextDev js .nextFn
nextdev2:
test [V_Dev], 7
jnz nextDev
; Not a multifunction device, go to the next device
or [V_Dev], 7 or [V_Dev], 7
nextDev: .nextFn:
inc [V_Dev] ; lower 3 bits are the function number inc [V_Dev] ; lower 3 bits are the function number
jnz Start_Enum ; jump until we reach zero jnz Start_Enum ; jump until we reach zero
@ -321,7 +327,7 @@ load_and_start:
.next: .next:
cmp byte[param], 'A' cmp byte[param], 'A'
je nextdev2 je Start_Enum.nextDev
jmp exit jmp exit