Removed old netdrv.inc and pci.inc, replaced with newer, better versions.

git-svn-id: svn://kolibrios.org@5074 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr 2014-08-31 14:09:14 +00:00
parent 48b7151d43
commit bb295aca38
20 changed files with 316 additions and 598 deletions

View File

@ -105,7 +105,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
; Registers ; Registers
REG_POWER_MGMT_CTRL = 0x7c REG_POWER_MGMT_CTRL = 0x7c

View File

@ -52,7 +52,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
; Operational parameters that usually are not changed. ; Operational parameters that usually are not changed.

View File

@ -35,7 +35,7 @@ include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../proc32.inc' include '../proc32.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
struct device ETH_DEVICE struct device ETH_DEVICE

View File

@ -41,7 +41,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
REG_IDR0 = 0x00 REG_IDR0 = 0x00
REG_MAR0 = 0x08 ; multicast filter register 0 REG_MAR0 = 0x08 ; multicast filter register 0

View File

@ -39,7 +39,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
REG_MAC0 = 0x0 ; Ethernet hardware address REG_MAC0 = 0x0 ; Ethernet hardware address
REG_MAR0 = 0x8 ; Multicast filter REG_MAR0 = 0x8 ; Multicast filter

View File

@ -40,7 +40,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
;------------------------------------------- ;-------------------------------------------
; configuration registers ; configuration registers

View File

@ -50,7 +50,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
;************************************************************************** ;**************************************************************************
; forcedeth Register Definitions ; forcedeth Register Definitions

View File

@ -37,7 +37,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
; Register list ; Register list
REG_CTRL = 0x0000 ; Control Register REG_CTRL = 0x0000 ; Control Register

View File

@ -40,7 +40,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
; Serial EEPROM ; Serial EEPROM

View File

@ -35,7 +35,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
; for different PHY ; for different PHY

View File

@ -35,7 +35,7 @@ include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../proc32.inc' include '../proc32.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
PORT_AUI = 0x00 PORT_AUI = 0x00

View File

@ -58,7 +58,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
;************************************************************************** ;**************************************************************************

View File

@ -202,7 +202,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
struct device ETH_DEVICE struct device ETH_DEVICE

View File

@ -1,150 +1,130 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; GNU GENERAL PUBLIC LICENSE ;; ;; GNU GENERAL PUBLIC LICENSE ;;
;; Version 2, June 1991 ;; ;; Version 2, June 1991 ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This macro will prepend driver name to all debug output through DEBUGF macro ; This macro will prepend driver name to all debug output through DEBUGF macro
; The driver name is taken from my_service label ; The driver name is taken from my_service label
if defined my_service if defined my_service
macro DEBUGF _level,_format, [args] { macro DEBUGF _level,_format, [args] {
common DEBUGF _level, "%s: " # _format, my_service, args common DEBUGF _level, "%s: " # _format, my_service, args
} }
end if end if
include 'pci.inc' include 'pci.inc'
include 'mii.inc' include 'mii.inc'
; Kernel variables ; Kernel variables
PAGESIZE = 4096 PAGESIZE = 4096
; network driver types ; Network driver types
NET_TYPE_ETH = 1 NET_TYPE_ETH = 1
NET_TYPE_SLIP = 2 NET_TYPE_SLIP = 2
; link state ; Link state
ETH_LINK_DOWN = 0 ; Link is down ETH_LINK_DOWN = 0 ; Link is down
ETH_LINK_UNKOWN = 1b ; There could be an active link ETH_LINK_UNKNOWN= 1b ; There could be an active link
ETH_LINK_FD = 10b ; full duplex flag ETH_LINK_FD = 10b ; full duplex flag
ETH_LINK_10M = 100b ; 10 mbit ETH_LINK_10M = 100b ; 10 mbit
ETH_LINK_100M = 1000b ; 100 mbit ETH_LINK_100M = 1000b ; 100 mbit
ETH_LINK_1G = 10000b ; gigabit ETH_LINK_1G = 1100b ; gigabit
; Macro to easily set i/o addresses to access device.
LAST_IO = 0 ; In the beginning of a procedure (or ofter edx may have been destroyed),
macro set_io addr { ; always use set_io with offset 0 to reset the variables.
if addr = 0 LAST_IO = 0
mov edx, [device.io_addr]
else if addr = LAST_IO macro set_io baseaddr, offset {
else
add edx, addr - LAST_IO if offset = 0
end if mov edx, baseaddr
else if offset = LAST_IO
LAST_IO = addr else
} add edx, offset - LAST_IO
end if
macro allocate_and_clear dest, size, err {
LAST_IO = offset
; We need to allocate at least 8 pages, if we want a continuous memory in ram }
push edx
if (size < 8*4096) & (size > 4096) ; Macro to allocate a contiguous buffer in memory
stdcall KernelAlloc, 8*4096 ; And initialise it to all zeros
else
stdcall KernelAlloc, size ; This macro will destroy eax, ecx and edi !
end if
pop edx macro allocate_and_clear dest, size, err {
test eax, eax ; We need to allocate at least 8 pages, if we want a contiguous area in ram
jz err push edx
mov dest, eax ; Save the address to it into the device struct if (size < 8*4096) & (size > 4096)
mov edi, eax ; look at last part of code! invoke KernelAlloc, 8*4096
else
; Release the unused pages (if any) invoke KernelAlloc, size
if (size < 8*4096) & (size > 4096) end if
add eax, (size/4096+1)*4096 pop edx
mov ecx, 8-(size/4096+1)
push edx test eax, eax
call ReleasePages jz err
pop edx mov dest, eax
end if mov edi, eax ; look at last part of code!
; Clear the allocated buffer ; Release the unused pages (if any)
mov ecx, size/4 ; divide by 4 because of DWORD if (size < 8*4096) & (size > 4096)
xor eax, eax add eax, (size/4096+1)*4096
rep stosd mov ecx, 8-(size/4096+1)
push edx
if (size - size/4*4) invoke ReleasePages
mov ecx, size - size/4*4 pop edx
rep stosb end if
end if
; Clear the allocated buffer
} mov ecx, size/4 ; divide by 4 because of DWORD
xor eax, eax
rep stosd
if used null_op
align 4 if (size - size/4*4)
null_op: mov ecx, size - size/4*4
or eax, -1 rep stosb
ret end if
end if }
macro GetRealAddr { ; input and output is eax struct NET_DEVICE
push ax type dd ? ; Type field
call GetPgAddr mtu dd ? ; Maximal Transmission Unit
and word[esp], PAGESIZE - 1 name dd ? ; Ptr to 0 terminated string
or ax, word[esp]
inc esp unload dd ? ; Ptrs to driver functions
inc esp reset dd ? ;
transmit dd ? ;
}
bytes_tx dq ? ; Statistics, updated by the driver
macro NET_DEVICE { bytes_rx dq ? ;
packets_tx dd ? ;
.type dd ? ; Type field packets_rx dd ? ;
.mtu dd ? ; Maximal Transmission Unit
.name dd ? ; Ptr to 0 terminated string state dd ? ; link state (0 = no link)
hwacc dd ? ; bitmask stating enabled HW accelerations
.unload dd ? ; Ptrs to driver functions
.reset dd ? ; ends
.transmit dd ? ;
.bytes_tx dq ? ; Statistics, updated by the driver struct ETH_DEVICE NET_DEVICE
.bytes_rx dq ? ;
.packets_tx dd ? ; mac dp ?
.packets_rx dd ? ; dw ? ; qword alignment
.state dd ? ; link state (0 = no link) ends
.hwacc dd ? ; bitmask stating enabled HW accelerations
.end:
}
macro ETH_DEVICE {
NET_DEVICE
.mac dp ?
dw ? ; qword alignment
}
macro SLIP_DEVICE {
NET_DEVICE
}

View File

@ -1,130 +0,0 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;; GNU GENERAL PUBLIC LICENSE ;;
;; Version 2, June 1991 ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This macro will prepend driver name to all debug output through DEBUGF macro
; The driver name is taken from my_service label
if defined my_service
macro DEBUGF _level,_format, [args] {
common DEBUGF _level, "%s: " # _format, my_service, args
}
end if
include 'pci_pe.inc'
include 'mii.inc'
; Kernel variables
PAGESIZE = 4096
; Network driver types
NET_TYPE_ETH = 1
NET_TYPE_SLIP = 2
; Link state
ETH_LINK_DOWN = 0 ; Link is down
ETH_LINK_UNKNOWN= 1b ; There could be an active link
ETH_LINK_FD = 10b ; full duplex flag
ETH_LINK_10M = 100b ; 10 mbit
ETH_LINK_100M = 1000b ; 100 mbit
ETH_LINK_1G = 1100b ; gigabit
; Macro to easily set i/o addresses to access device.
; In the beginning of a procedure (or ofter edx may have been destroyed),
; always use set_io with offset 0 to reset the variables.
LAST_IO = 0
macro set_io baseaddr, offset {
if offset = 0
mov edx, baseaddr
else if offset = LAST_IO
else
add edx, offset - LAST_IO
end if
LAST_IO = offset
}
; Macro to allocate a contiguous buffer in memory
; And initialise it to all zeros
; This macro will destroy eax, ecx and edi !
macro allocate_and_clear dest, size, err {
; We need to allocate at least 8 pages, if we want a contiguous area in ram
push edx
if (size < 8*4096) & (size > 4096)
invoke KernelAlloc, 8*4096
else
invoke KernelAlloc, size
end if
pop edx
test eax, eax
jz err
mov dest, eax
mov edi, eax ; look at last part of code!
; Release the unused pages (if any)
if (size < 8*4096) & (size > 4096)
add eax, (size/4096+1)*4096
mov ecx, 8-(size/4096+1)
push edx
invoke ReleasePages
pop edx
end if
; Clear the allocated buffer
mov ecx, size/4 ; divide by 4 because of DWORD
xor eax, eax
rep stosd
if (size - size/4*4)
mov ecx, size - size/4*4
rep stosb
end if
}
struct NET_DEVICE
type dd ? ; Type field
mtu dd ? ; Maximal Transmission Unit
name dd ? ; Ptr to 0 terminated string
unload dd ? ; Ptrs to driver functions
reset dd ? ;
transmit dd ? ;
bytes_tx dq ? ; Statistics, updated by the driver
bytes_rx dq ? ;
packets_tx dd ? ;
packets_rx dd ? ;
state dd ? ; link state (0 = no link)
hwacc dd ? ; bitmask stating enabled HW accelerations
ends
struct ETH_DEVICE NET_DEVICE
mac dp ?
dw ? ; qword alignment
ends

View File

@ -1,132 +1,170 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; GNU GENERAL PUBLIC LICENSE ;; ;; GNU GENERAL PUBLIC LICENSE ;;
;; Version 2, June 1991 ;; ;; Version 2, June 1991 ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struct PCI_header
; PCI Bus defines
vendor_id dw ? ; 0x00
PCI_HEADER_TYPE = 0x0e ; 8 bit device_id dw ? ; 0x02
PCI_BASE_ADDRESS_0 = 0x10 ; 32 bit command dw ? ; 0x04
PCI_BASE_ADDRESS_1 = 0x14 ; 32 bits status dw ? ; 0x06
PCI_BASE_ADDRESS_2 = 0x18 ; 32 bits revision_id db ? ; 0x08
PCI_BASE_ADDRESS_3 = 0x1c ; 32 bits prog_if db ? ; 0x09
PCI_BASE_ADDRESS_4 = 0x20 ; 32 bits subclass db ? ; 0x0A
PCI_BASE_ADDRESS_5 = 0x24 ; 32 bits class_code db ? ; 0x0B
PCI_BASE_ADDRESS_SPACE_IO = 0x01 cache_line_size db ? ; 0x0C
PCI_BASE_ADDRESS_IO_MASK = 0xFFFFFFFC latency_timer db ? ; 0x0D
PCI_BASE_ADDRESS_MEM_MASK = 0xFFFFFFF0 header_type db ? ; 0x0E
bist db ? ; 0x0F
; PCI programming
ends
PCI_VENDOR_ID = 0x00 ; 16 bit
PCI_DEVICE_ID = 0x02 ; 16 bits struct PCI_header00 PCI_header
PCI_REG_COMMAND = 0x4 ; command register
PCI_REG_STATUS = 0x6 ; status register base_addr_0 dd ? ; 0x10
PCI_REVISION_ID = 0x08 ; 8 bits base_addr_1 dd ? ; 0x14
PCI_REG_LATENCY = 0xd ; latency timer register base_addr_2 dd ? ; 0x18
PCI_REG_CAP_PTR = 0x34 ; capabilities pointer base_addr_3 dd ? ; 0x1C
PCI_REG_IRQ = 0x3c base_addr_4 dd ? ; 0x20
PCI_REG_CAPABILITY_ID = 0x0 ; capapility ID in pm register block base_addr_5 dd ? ; 0x24
PCI_REG_PM_STATUS = 0x4 ; power management status register cardbus_cis_ptr dd ? ; 0x28
PCI_REG_PM_CTRL = 0x4 ; power management control register subsys_vendor dw ? ; 0x2C
PCI_BIT_PIO = 1 ; bit0: io space control subsys_id dw ? ; 0x2E
PCI_BIT_MMIO = 2 ; bit1: memory space control exp_rom_addr dd ? ; 0x30
PCI_BIT_MASTER = 4 ; bit2: device acts as a PCI master cap_ptr db ? ; 0x34
rb 7 ; reserved
interrupt_line db ? ; 0x3C
macro PCI_find_io { interrupt_pin db ? ; 0x3D
min_grant db ? ; 0x3E
local .check, .inc, .got max_latency db ? ; 0x3F
xor eax, eax ends
mov esi, PCI_BASE_ADDRESS_0
.check: struct PCI_header01 PCI_header
stdcall PciRead32, [device.pci_bus], [device.pci_dev], esi
base_addr_0 dd ? ; 0x10
test eax, PCI_BASE_ADDRESS_IO_MASK base_addr_1 dd ? ; 0x14
jz .inc prim_bus_nr db ? ; 0x18
sec_bus_nr db ? ; 0x19
test eax, PCI_BASE_ADDRESS_SPACE_IO sub_bus_nr db ? ; 0x1A
jz .inc sec_lat_tmr db ? ; 0x1B
io_base db ? ; 0x1C
and eax, PCI_BASE_ADDRESS_IO_MASK io_limit db ? ; 0x1D
jmp .got sec_status dw ? ; 0x1E
mem_base dw ? ; 0x20
.inc: mem_limit dw ? ; 0x22
add esi, 4 pref_mem_base dw ? ; 0x24
cmp esi, PCI_BASE_ADDRESS_5 pref_mem_limit dw ? ; 0x26
jbe .check pref_base_up dd ? ; 0x28
xor eax, eax pref_limit_up dd ? ; 0x2C
io_base_up dw ? ; 0x30
.got: io_limit_up dw ? ; 0x32
mov [device.io_addr], eax cap_ptr db ? ; 0x34
rb 3 ; reserved
} exp_rom_addr dd ? ; 0x38
interrupt_line db ? ; 0x3C
interrupt_pin db ? ; 0x3E
macro PCI_find_mmio32 { bridge_ctrl dw ? ; 0x3F
local .check, .inc, .got ends
mov esi, PCI_BASE_ADDRESS_0 struct PCI_header02 PCI_header
.check:
stdcall PciRead32, [device.pci_bus], [device.pci_dev], esi base_addr dd ? ; 0x10
cap_list_offs db ? ; 0x14
test eax, PCI_BASE_ADDRESS_SPACE_IO ; mmio address? rb 1 ; reserved
jnz .inc sec_stat dw ? ; 0x16
pci_bus_nr db ? ; 0x18
test eax, 100b ; 64 bit? cardbus_bus_nr db ? ; 0x19
jnz .inc sub_bus_nr db ? ; 0x1A
and eax, not 1111b cardbus_lat_tmr db ? ; 0x1B
jmp .got mbar_0 dd ? ; 0x1C
mlimit_0 dd ? ; 0x20
.inc: mbar_1 dd ? ; 0x24
add esi, 4 mlimit_1 dd ? ; 0x28
cmp esi, PCI_BASE_ADDRESS_5 iobar_0 dd ? ; 0x2C
jbe .check iolimit_0 dd ? ; 0x30
xor eax, eax iobar_1 dd ? ; 0x34
iolimit_1 dd ? ; 0x38
.got: interrupt_line db ? ; 0x3C
mov [device.mmio_addr], eax interrupt_pin db ? ; 0x3D
} bridge_ctrl dw ? ; 0x3E
subs_did dw ? ; 0x40
macro PCI_find_irq { subs_vid dw ? ; 0x42
legacy_bar dd ? ; 0x44
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REG_IRQ
mov [device.irq_line], al ends
} ; Base address bits
PCI_BASE_ADDRESS_SPACE_IO = 0x01
macro PCI_find_rev { PCI_BASE_ADDRESS_IO_MASK = 0xFFFFFFFC
PCI_BASE_ADDRESS_MEM_MASK = 0xFFFFFFF0
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REVISION_ID
mov [device.revision], al ; command bits
PCI_CMD_PIO = 0x01 ; bit0: io space control
} PCI_CMD_MMIO = 0x02 ; bit1: memory space control
PCI_CMD_MASTER = 0x04 ; bit2: device acts as a PCI master
macro PCI_make_bus_master bus, dev {
; status bits
stdcall PciRead32, [device.pci_bus], [device.pci_dev], PCI_REG_COMMAND PCI_STATUS_CAPA = 0x10 ; bit4: new capabilities available
or al, PCI_BIT_MASTER
stdcall PciWrite32, [device.pci_bus], [device.pci_dev], PCI_REG_COMMAND, eax
if used PCI_find_io
} proc PCI_find_io stdcall bus, dev
macro PCI_adjust_latency min { push esi
xor eax, eax
local .not mov esi, PCI_header00.base_addr_0
.check:
stdcall PciRead8, [device.pci_bus], [device.pci_dev], PCI_REG_LATENCY invoke PciRead32, [bus], [dev], esi
cmp al, min test eax, PCI_BASE_ADDRESS_IO_MASK
ja .not jz .inc
mov al, min test eax, PCI_BASE_ADDRESS_SPACE_IO
stdcall PciWrite8, [device.pci_bus], [device.pci_dev], PCI_REG_LATENCY, eax jz .inc
.not: and eax, PCI_BASE_ADDRESS_IO_MASK
pop esi
} ret
.inc:
add esi, 4
cmp esi, PCI_header00.base_addr_5
jbe .check
pop esi
xor eax, eax
ret
endp
end if
if used PCI_find_mmio32
proc PCI_find_mmio32 stdcall bus, dev
push esi
mov esi, PCI_header00.base_addr_0
.check:
invoke PciRead32, [bus], [dev], esi
test eax, PCI_BASE_ADDRESS_SPACE_IO ; mmio address?
jnz .inc
test eax, 100b ; 64 bit?
jnz .inc
and eax, not 1111b
pop esi
ret
.inc:
add esi, 4
cmp esi, PCI_header00.base_addr_5
jbe .check
xor eax, eax
pop esi
ret
endp
end if

View File

@ -1,170 +0,0 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;; GNU GENERAL PUBLIC LICENSE ;;
;; Version 2, June 1991 ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struct PCI_header
vendor_id dw ? ; 0x00
device_id dw ? ; 0x02
command dw ? ; 0x04
status dw ? ; 0x06
revision_id db ? ; 0x08
prog_if db ? ; 0x09
subclass db ? ; 0x0A
class_code db ? ; 0x0B
cache_line_size db ? ; 0x0C
latency_timer db ? ; 0x0D
header_type db ? ; 0x0E
bist db ? ; 0x0F
ends
struct PCI_header00 PCI_header
base_addr_0 dd ? ; 0x10
base_addr_1 dd ? ; 0x14
base_addr_2 dd ? ; 0x18
base_addr_3 dd ? ; 0x1C
base_addr_4 dd ? ; 0x20
base_addr_5 dd ? ; 0x24
cardbus_cis_ptr dd ? ; 0x28
subsys_vendor dw ? ; 0x2C
subsys_id dw ? ; 0x2E
exp_rom_addr dd ? ; 0x30
cap_ptr db ? ; 0x34
rb 7 ; reserved
interrupt_line db ? ; 0x3C
interrupt_pin db ? ; 0x3D
min_grant db ? ; 0x3E
max_latency db ? ; 0x3F
ends
struct PCI_header01 PCI_header
base_addr_0 dd ? ; 0x10
base_addr_1 dd ? ; 0x14
prim_bus_nr db ? ; 0x18
sec_bus_nr db ? ; 0x19
sub_bus_nr db ? ; 0x1A
sec_lat_tmr db ? ; 0x1B
io_base db ? ; 0x1C
io_limit db ? ; 0x1D
sec_status dw ? ; 0x1E
mem_base dw ? ; 0x20
mem_limit dw ? ; 0x22
pref_mem_base dw ? ; 0x24
pref_mem_limit dw ? ; 0x26
pref_base_up dd ? ; 0x28
pref_limit_up dd ? ; 0x2C
io_base_up dw ? ; 0x30
io_limit_up dw ? ; 0x32
cap_ptr db ? ; 0x34
rb 3 ; reserved
exp_rom_addr dd ? ; 0x38
interrupt_line db ? ; 0x3C
interrupt_pin db ? ; 0x3E
bridge_ctrl dw ? ; 0x3F
ends
struct PCI_header02 PCI_header
base_addr dd ? ; 0x10
cap_list_offs db ? ; 0x14
rb 1 ; reserved
sec_stat dw ? ; 0x16
pci_bus_nr db ? ; 0x18
cardbus_bus_nr db ? ; 0x19
sub_bus_nr db ? ; 0x1A
cardbus_lat_tmr db ? ; 0x1B
mbar_0 dd ? ; 0x1C
mlimit_0 dd ? ; 0x20
mbar_1 dd ? ; 0x24
mlimit_1 dd ? ; 0x28
iobar_0 dd ? ; 0x2C
iolimit_0 dd ? ; 0x30
iobar_1 dd ? ; 0x34
iolimit_1 dd ? ; 0x38
interrupt_line db ? ; 0x3C
interrupt_pin db ? ; 0x3D
bridge_ctrl dw ? ; 0x3E
subs_did dw ? ; 0x40
subs_vid dw ? ; 0x42
legacy_bar dd ? ; 0x44
ends
; Base address bits
PCI_BASE_ADDRESS_SPACE_IO = 0x01
PCI_BASE_ADDRESS_IO_MASK = 0xFFFFFFFC
PCI_BASE_ADDRESS_MEM_MASK = 0xFFFFFFF0
; command bits
PCI_CMD_PIO = 0x01 ; bit0: io space control
PCI_CMD_MMIO = 0x02 ; bit1: memory space control
PCI_CMD_MASTER = 0x04 ; bit2: device acts as a PCI master
; status bits
PCI_STATUS_CAPA = 0x10 ; bit4: new capabilities available
if used PCI_find_io
proc PCI_find_io stdcall bus, dev
push esi
xor eax, eax
mov esi, PCI_header00.base_addr_0
.check:
invoke PciRead32, [bus], [dev], esi
test eax, PCI_BASE_ADDRESS_IO_MASK
jz .inc
test eax, PCI_BASE_ADDRESS_SPACE_IO
jz .inc
and eax, PCI_BASE_ADDRESS_IO_MASK
pop esi
ret
.inc:
add esi, 4
cmp esi, PCI_header00.base_addr_5
jbe .check
pop esi
xor eax, eax
ret
endp
end if
if used PCI_find_mmio32
proc PCI_find_mmio32 stdcall bus, dev
push esi
mov esi, PCI_header00.base_addr_0
.check:
invoke PciRead32, [bus], [dev], esi
test eax, PCI_BASE_ADDRESS_SPACE_IO ; mmio address?
jnz .inc
test eax, 100b ; 64 bit?
jnz .inc
and eax, not 1111b
pop esi
ret
.inc:
add esi, 4
cmp esi, PCI_header00.base_addr_5
jbe .check
xor eax, eax
pop esi
ret
endp
end if

View File

@ -27,7 +27,7 @@ section '.flat' readable writable executable
include '../proc32.inc' include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../pci_pe.inc' include '../pci.inc'
;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;

View File

@ -32,7 +32,7 @@ include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../fdo.inc' include '../fdo.inc'
include '../netdrv_pe.inc' include '../netdrv.inc'
struct device ETH_DEVICE struct device ETH_DEVICE

View File

@ -34,7 +34,7 @@ section '.flat' readable writable executable
include '../proc32.inc' include '../proc32.inc'
include '../struct.inc' include '../struct.inc'
include '../macros.inc' include '../macros.inc'
include '../pci_pe.inc' include '../pci.inc'
include '../fdo.inc' include '../fdo.inc'
;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;