Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3204 → Rev 3205

/kernel/branches/net/drivers/3c59x.asm
342,9 → 342,10
.prev_dpd dd ?
 
.io_addr dd ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
rb 3 ; alignment
 
.prev_tx_frame dd ?
.ver_id db ?
438,8 → 439,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
454,8 → 458,11
mov ax , [eax+1] ;
.nextdevice2:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice2
 
481,16 → 488,16
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl , [eax+1]
mov [device.pci_bus], cl
mov cl , [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 1,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:4
578,14 → 585,12
 
DEBUGF 1,"Probing 3com card\n"
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
; wake up the card
call wake_up
 
movzx ecx, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciRead32, ecx ,edx ,0 ; get device/vendor id
stdcall PciRead32, [device.pci_bus], [device.pci_dev], 0 ; get device/vendor id
 
DEBUGF 1,"Vendor id: 0x%x\n", ax
 
618,9 → 623,7
jz .not_vortex
 
mov eax, 11111000b ; 248 = max latency
movzx ecx, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciWrite32, ecx, edx, PCI_REG_LATENCY, eax
stdcall PciWrite32, [device.pci_bus], [device.pci_dev], PCI_REG_LATENCY, eax
 
.not_vortex:
; set RX/TX functions
1803,15 → 1806,13
 
; wake up - we directly do it by programming PCI
; check if the device is power management capable
movzx ecx, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciRead32, ecx, edx, PCI_REG_STATUS
stdcall PciRead32, [device.pci_bus], [device.pci_dev], PCI_REG_STATUS
 
test al, 10000b ; is there "new capabilities" linked list?
jz .device_awake
 
; search for power management register
stdcall PciRead16, ecx, edx, PCI_REG_CAP_PTR
stdcall PciRead16, [device.pci_bus], [device.pci_dev], PCI_REG_CAP_PTR
cmp al, 0x3f
jbe .device_awake
 
1818,7 → 1819,7
; traverse the list
movzx esi, al
.pm_loop:
stdcall PciRead32, ecx, edx, esi
stdcall PciRead32, [device.pci_bus], [device.pci_dev], esi
 
cmp al , 1
je .set_pm_state
1833,11 → 1834,11
.set_pm_state:
 
add esi, PCI_REG_PM_CTRL
stdcall PciRead32, ecx, edx, esi
stdcall PciRead32, [device.pci_bus], [device.pci_dev], esi
test al, 3
jz .device_awake
and al, not 11b ; set state to D0
stdcall PciWrite32, ecx, edx, esi, eax
stdcall PciWrite32, [device.pci_bus], [device.pci_dev], esi, eax
 
.device_awake:
DEBUGF 1,"Device is awake\n"
/kernel/branches/net/drivers/R6040.asm
192,11 → 192,11
.mcr1 dw ?
.switch_sig dw ?
 
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
 
rb 1 ; dword alignment
rb 3 ; dword alignment
 
.tx_ring: rb (((x_head.sizeof*TX_RING_SIZE)+32) and 0xfffffff0)
.rx_ring: rb (((x_head.sizeof*RX_RING_SIZE)+32) and 0xfffffff0)
285,8 → 285,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
310,18 → 313,18
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl , [eax+1]
mov [device.pci_bus], cl
mov cl , [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 1,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:4
416,7 → 419,7
probe:
DEBUGF 2,"Probing R6040 device\n"
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
; If PHY status change register is still set to zero
; it means the bootloader didn't initialize it
/kernel/branches/net/drivers/RTL8029.asm
40,8 → 40,8
 
.io_addr dd ?
.irq_line db ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
 
.flags db ?
.vendor db ?
238,8 → 238,11
mov ax, [eax+1] ; get the pci bus and device numbers
.nextdevice:
mov ebx, [esi]
cmp ax, word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
247,18 → 250,18
call create_new_struct
 
mov eax, [IOCTL.input]
mov cl, [eax+1]
mov [device.pci_bus], cl
mov cl, [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
jmp .hook
 
/kernel/branches/net/drivers/RTL8139.asm
208,8 → 208,8
.io_addr dd ?
 
.curr_tx_desc db ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
.hw_ver_id db ?
 
298,8 → 298,11
mov ax , [eax+1] ; get the pci bus and device numbers
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
323,18 → 326,18
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl, [eax+1]
mov [device.pci_bus], cl
mov cl, [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 2, "Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:4
422,7 → 425,7
probe:
DEBUGF 2, "Probing %s device\n", my_service
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
; get chip version
 
/kernel/branches/net/drivers/RTL8169.asm
253,8 → 253,8
ETH_DEVICE
 
.io_addr dd ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
 
rb 256-(($ - device) and 255) ; align 256
442,8 → 442,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
467,20 → 470,19
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl , [eax+1]
mov [device.pci_bus], cl
mov cl , [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
mov eax, [device.io_addr]
mov [tpc.mmio_addr], eax
PCI_find_io
mov [tpc.mmio_addr], eax ; CHECKME
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 2,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:8
542,7 → 544,7
 
DEBUGF 1,"init_board\n"
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
; Soft reset the chip
set_io 0
/kernel/branches/net/drivers/bus/pci.inc
40,18 → 40,14
PCI_BIT_MASTER = 4 ; bit2: device acts as a PCI master
 
 
macro find_io bus, dev, io {
macro PCI_find_io {
 
local .check, .inc, .got
 
xor eax, eax
mov esi, PCI_BASE_ADDRESS_0
movzx ecx, bus
movzx edx, dev
.check:
push ecx edx
stdcall PciRead32, ecx ,edx ,esi
pop edx ecx
stdcall PciRead32, [device.pci_bus], [device.pci_dev], esi
 
test eax, PCI_BASE_ADDRESS_IO_MASK
jz .inc
69,18 → 65,18
xor eax, eax
 
.got:
mov io, eax
mov [device.io_addr], eax
 
}
 
 
macro find_mmio32 bus, dev, io {
macro PCI_find_mmio32 {
 
local .check, .inc, .got
 
mov esi, PCI_BASE_ADDRESS_0
.check:
stdcall PciRead32, bus, dev, esi
stdcall PciRead32, [device.pci_bus], [device.pci_dev], esi
 
test eax, PCI_BASE_ADDRESS_SPACE_IO ; mmio address?
jnz .inc
97,54 → 93,40
xor eax, eax
 
.got:
mov io, eax
mov [device.mmio_addr], eax
}
 
macro find_irq bus, dev, irq {
macro PCI_find_irq {
 
push eax edx ecx
movzx ecx, bus
movzx edx, dev
stdcall PciRead8, ecx, edx, PCI_REG_IRQ
mov irq, al
pop ecx edx eax
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REG_IRQ
mov [device.irq_line], al
 
}
 
macro find_rev bus, dev, rev {
macro PCI_find_rev {
 
push eax edx ecx
movzx ecx, bus
movzx edx, dev
stdcall PciRead8, ecx ,edx ,0x8
mov rev, al
pop ecx edx eax
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REVISION_ID
mov [device.revision], al
 
}
 
macro make_bus_master bus, dev {
macro PCI_make_bus_master bus, dev {
 
movzx ecx, bus
movzx edx, dev
push ecx edx
stdcall PciRead32, ecx ,edx, PCI_REG_COMMAND
pop edx ecx
stdcall PciRead32, [device.pci_bus], [device.pci_dev], PCI_REG_COMMAND
or al, PCI_BIT_MASTER
stdcall PciWrite32, ecx, edx, PCI_REG_COMMAND, eax
stdcall PciWrite32, [device.pci_bus], [device.pci_dev], PCI_REG_COMMAND, eax
 
}
 
macro adjust_latency bus, dev, min {
macro PCI_adjust_latency min {
 
movzx ecx, bus
movzx edx, dev
push ecx edx
stdcall PciRead8, ecx ,edx, PCI_REG_LATENCY
pop edx ecx
local .not
 
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REG_LATENCY
cmp al, min
ja @f
ja .not
mov al, min
stdcall PciWrite8, ecx, edx, PCI_REG_LATENCY, eax
@@:
stdcall PciWrite8, [device.pci_bus], [device.pci_dev], PCI_REG_LATENCY, eax
.not:
 
}
/kernel/branches/net/drivers/dec21x4x.asm
57,9 → 57,10
.rx_crt_des dd ? ; Rx current descriptor
 
.io_addr dd ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
rb 3 ; alignment
 
.size = $ - device
 
384,8 → 385,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
414,18 → 418,18
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl, [eax+1]
mov [device.pci_bus], cl
mov cl, [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 2,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:8
525,11 → 529,9
 
DEBUGF 2,"Probing dec21x4x device: "
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
movzx eax, [device.pci_bus]
movzx ecx, [device.pci_dev]
stdcall PciRead32, eax ,ecx ,0 ; get device/vendor id
stdcall PciRead32, [device.pci_bus], [device.pci_dev], 0 ; get device/vendor id
DEBUGF 1,"Vendor id: 0x%x\n", ax
 
cmp ax, 0x1011
552,10 → 554,8
 
; wake up the 21143
 
movzx ecx, [device.pci_bus]
movzx edx, [device.pci_dev]
xor eax, eax
stdcall PciWrite32, ecx, edx, 0x40, eax
stdcall PciWrite32, [device.pci_bus], [device.pci_dev], 0x40, eax
 
 
.supported_device:
/kernel/branches/net/drivers/i8254x.asm
389,7 → 389,7
 
; Now, it's time to find the base mmio addres of the PCI device
 
find_mmio32 [device.pci_bus], [device.pci_dev], [device.mmio_addr]
PCI_find_mmio32
 
; Create virtual mapping of the physical memory
 
401,7 → 401,7
 
; We've found the mmio address, find IRQ now
 
find_irq byte [device.pci_bus], byte [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 1,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.mmio_addr]:8
484,7 → 484,7
 
DEBUGF 1,"Probe\n"
 
make_bus_master byte [device.pci_bus], byte [device.pci_dev]
PCI_make_bus_master
 
; TODO: validate the device
 
/kernel/branches/net/drivers/mtd80x.asm
276,8 → 276,8
.rx_desc rb NUM_RX_DESC*mtd_desc.size
 
.io_addr dd ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
.dev_id dw ?
 
386,8 → 386,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
411,18 → 414,18
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl , [eax+1]
mov [device.pci_bus], cl
mov cl , [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 2,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:8
513,11 → 516,9
 
DEBUGF 2,"Probing mtd80x device\n"
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
movzx eax, [device.pci_bus]
movzx ecx, [device.pci_dev]
stdcall PciRead32, eax ,ecx ,0
stdcall PciRead32, [device.pci_bus], [device.pci_dev], 0
 
cmp ax , 0x1516
jne .notfound
/kernel/branches/net/drivers/pcnet32.asm
316,8 → 316,8
 
.io_addr dd ?
.irq_line db ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
 
.read_csr dd ?
.write_csr dd ?
426,8 → 426,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
451,18 → 454,18
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl, [eax+1]
mov [device.pci_bus], cl
mov cl, [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 1,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:4
697,7 → 700,7
mov [device.ltint],1
.L11:
 
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
mov [device.options], PORT_ASEL
mov [device.mode_], MODE_RXD + MODE_TXD ; disable receive and transmit
/kernel/branches/net/drivers/rhine.asm
489,8 → 489,8
ETH_DEVICE
 
.io_addr dd ?
.pci_dev db ?
.pci_bus db ?
.pci_dev dd ?
.pci_bus dd ?
.revision db ?
.irq_line db ?
.chip_id dw ?
614,8 → 614,11
mov ax , [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
 
639,18 → 642,18
; save the pci bus and device numbers
 
mov eax, [IOCTL.input]
mov cl , [eax+1]
mov [device.pci_bus], cl
mov cl , [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
 
; Now, it's time to find the base io addres of the PCI device
 
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
 
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
DEBUGF 1,"Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:4
718,16 → 721,14
DEBUGF 1, "Probing card at 0x%x\n", eax
 
; make the card a bus master
make_bus_master [device.pci_bus], [device.pci_dev]
PCI_make_bus_master
 
; get device id
movzx ecx, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciRead16, ecx, edx, PCI_DEVICE_ID
stdcall PciRead16, [device.pci_bus], [device.pci_dev], PCI_DEVICE_ID
mov [device.chip_id], ax
 
; get revision id.
find_rev [device.pci_bus], [device.pci_dev], [device.revision]
PCI_find_rev
 
movzx eax, [device.revision]
DEBUGF 1, "Card revision = 0x%x\n", eax
808,11 → 809,9
out dx, al
 
; turn on bit2 in PCI configuration register 0x53 , only for 3065
movzx ecx, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciRead8, ecx, edx, PCI_REG_MODE3
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REG_MODE3
or al, MODE3_MIION
stdcall PciWrite8, ecx, edx, PCI_REG_MODE3, eax
stdcall PciWrite8, [device.pci_bus], [device.pci_dev], PCI_REG_MODE3, eax
.not_vt3065:
 
; back off algorithm, disable the right-most 4-bit off CFGD
/kernel/branches/net/drivers/sis900.asm
213,8 → 213,8
ETH_DEVICE
 
.io_addr dd ?
.pci_bus db ?
.pci_dev db ?
.pci_bus dd ?
.pci_dev dd ?
.irq_line db ?
.cur_rx db ?
.cur_tx db ?
221,6 → 221,7
.last_tx db ?
.pci_revision db ?
.table_entries db ?
rb 2 ; alignment
 
.txd rd (4 * NUM_TX_DESC)
.rxd rd (4 * NUM_RX_DESC)
305,8 → 306,11
mov ax, [eax+1] ;
.nextdevice:
mov ebx, [esi]
cmp ax, word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
cmp al, byte[device.pci_bus]
jne @f
cmp ah, byte[device.pci_dev]
je .find_devicenum ; Device is already loaded, let's find it's device number
@@:
add esi, 4
loop .nextdevice
; 4e. This device doesn't have its own eth_device structure yet, let's create one
319,10 → 323,10
allocate_and_clear ebx, device.size, .fail
; 4i. Save PCI coordinates
mov eax, [IOCTL.input]
mov cl, [eax+1]
mov [device.pci_bus], cl
mov cl, [eax+2]
mov [device.pci_dev], cl
movzx ecx, byte[eax+1]
mov [device.pci_bus], ecx
movzx ecx, byte[eax+2]
mov [device.pci_dev], ecx
; 4j. Fill in the direct call addresses into the struct.
; Note that get_MAC pointer is filled in initialization by probe.
mov [device.reset], reset
335,10 → 339,10
; TODO: implement check if bus and dev exist on this machine
 
; Now, it's time to find the base io addres of the PCI device
find_io [device.pci_bus], [device.pci_dev], [device.io_addr]
PCI_find_io
 
; We've found the io address, find IRQ now
find_irq [device.pci_bus], [device.pci_dev], [device.irq_line]
PCI_find_irq
 
; 4m. Add new device to the list (required for int_handler).
mov eax, [devices]
414,17 → 418,14
DEBUGF 1, "Probe\n"
 
; wake up device CHECKME
movzx eax, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciWrite8, eax, edx, 0x40, 0
stdcall PciWrite8, [device.pci_bus], [device.pci_dev], 0x40, 0
 
make_bus_master [device.pci_bus], [device.pci_dev]
adjust_latency [device.pci_bus], [device.pci_dev], 64
PCI_make_bus_master
 
PCI_adjust_latency 64
 
; Get Card Revision
movzx eax, [device.pci_bus]
movzx edx, [device.pci_dev]
stdcall PciRead8, eax, edx, 0x08
stdcall PciRead8, [device.pci_bus], [device.pci_dev], 0x08
mov [device.pci_revision], al ; save the revision for later use
 
; Look up through the specific_table