forked from KolibriOS/kolibrios
Add chip type detection. Only QCA816x/7x supported so far.
git-svn-id: svn://kolibrios.org@7827 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
6db32f615c
commit
07efb9321b
@ -7,7 +7,10 @@
|
|||||||
;; ;;
|
;; ;;
|
||||||
;; based on alx driver from TI-OpenLink ;;
|
;; based on alx driver from TI-OpenLink ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; Written by hidnplayr (hidnplayr@gmail.com) ;;
|
;; Written by hidnplayr (hidnplayr@gmail.com) ;;
|
||||||
|
;; ;;
|
||||||
|
;; Thanks to: floppy121 for kindly providing me with the hardware ;;
|
||||||
|
;; that made the development of this driver possible. ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; GNU GENERAL PUBLIC LICENSE ;;
|
;; GNU GENERAL PUBLIC LICENSE ;;
|
||||||
;; Version 2, June 1991 ;;
|
;; Version 2, June 1991 ;;
|
||||||
@ -77,6 +80,8 @@ struct device ETH_DEVICE
|
|||||||
io_addr dd ?
|
io_addr dd ?
|
||||||
pci_bus dd ?
|
pci_bus dd ?
|
||||||
pci_dev dd ?
|
pci_dev dd ?
|
||||||
|
pci_vid dw ? ; Vendor ID
|
||||||
|
pci_did dw ? ; Device ID
|
||||||
irq_line dd ?
|
irq_line dd ?
|
||||||
pci_rev dd ?
|
pci_rev dd ?
|
||||||
chip_rev dd ?
|
chip_rev dd ?
|
||||||
@ -311,6 +316,25 @@ probe:
|
|||||||
and ax, not(PCI_CMD_INTX_DISABLE)
|
and ax, not(PCI_CMD_INTX_DISABLE)
|
||||||
invoke PciWrite16, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.command, eax
|
invoke PciWrite16, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.command, eax
|
||||||
|
|
||||||
|
; get device id
|
||||||
|
invoke PciRead16, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.device_id
|
||||||
|
mov [ebx + device.pci_did], ax
|
||||||
|
|
||||||
|
mov esi, chiplist
|
||||||
|
.loop:
|
||||||
|
cmp word[esi+2], ax
|
||||||
|
je .got_it
|
||||||
|
add esi, 8
|
||||||
|
cmp esi, chiplist + 6*8
|
||||||
|
jbe .loop
|
||||||
|
DEBUGF 2, "Unknown chip: 0x%x, continuing anyway\n", ax
|
||||||
|
jmp .done
|
||||||
|
.got_it:
|
||||||
|
mov eax, dword[esi+4]
|
||||||
|
mov [ebx + device.name], eax
|
||||||
|
DEBUGF 1, "Chip type = %s\n", eax
|
||||||
|
.done:
|
||||||
|
|
||||||
; get revision id.
|
; get revision id.
|
||||||
invoke PciRead8, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.revision_id
|
invoke PciRead8, [ebx + device.pci_bus], [ebx + device.pci_dev], PCI_header00.revision_id
|
||||||
and eax, 0xff
|
and eax, 0xff
|
||||||
@ -318,7 +342,7 @@ probe:
|
|||||||
shr al, ALX_PCI_REVID_SHIFT
|
shr al, ALX_PCI_REVID_SHIFT
|
||||||
mov [ebx + device.chip_rev], eax
|
mov [ebx + device.chip_rev], eax
|
||||||
|
|
||||||
DEBUGF 1,"revision: %u\n", al
|
DEBUGF 1,"Revision: %u\n", al
|
||||||
|
|
||||||
;;; call alx_reset_pcie
|
;;; call alx_reset_pcie
|
||||||
|
|
||||||
@ -545,6 +569,8 @@ alx_identify_hw:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
.einval:
|
.einval:
|
||||||
|
DEBUGF 1, "Invalid revision 0x%x\n", [ebx + device.chip_rev]
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
dec eax
|
dec eax
|
||||||
ret
|
ret
|
||||||
@ -923,6 +949,7 @@ alx_read_macaddr:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
.invalid:
|
.invalid:
|
||||||
|
DEBUGF 1, "Invalid MAC!\n"
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
inc eax
|
inc eax
|
||||||
ret
|
ret
|
||||||
@ -1406,7 +1433,7 @@ alx_configure_basic:
|
|||||||
or (ALX_RXQ0_IDT_TBL_SIZE_DEF shl ALX_RXQ0_IDT_TBL_SIZE_SHIFT) \
|
or (ALX_RXQ0_IDT_TBL_SIZE_DEF shl ALX_RXQ0_IDT_TBL_SIZE_SHIFT) \
|
||||||
or ALX_RXQ0_RSS_HSTYP_ALL or ALX_RXQ0_RSS_HASH_EN or ALX_RXQ0_IPV6_PARSE_EN
|
or ALX_RXQ0_RSS_HSTYP_ALL or ALX_RXQ0_RSS_HASH_EN or ALX_RXQ0_IPV6_PARSE_EN
|
||||||
|
|
||||||
test [ebx + device.pci_dev], 1 ;;; FIXME: is gigabit device?
|
test [ebx + device.pci_did], 1 ;;; FIXME: is gigabit device?
|
||||||
jz @f
|
jz @f
|
||||||
or eax, ALX_RXQ0_ASPM_THRESH_100M shl ALX_RXQ0_ASPM_THRESH_SHIFT
|
or eax, ALX_RXQ0_ASPM_THRESH_100M shl ALX_RXQ0_ASPM_THRESH_SHIFT
|
||||||
@@:
|
@@:
|
||||||
@ -1746,6 +1773,27 @@ include '../peimport.inc'
|
|||||||
|
|
||||||
my_service db 'AR81XX',0 ; max 16 chars include zero
|
my_service db 'AR81XX',0 ; max 16 chars include zero
|
||||||
|
|
||||||
|
|
||||||
|
chiplist:
|
||||||
|
dd (ALX_DEV_ID_AR8131 shl 16) or ALX_VEN_ID, ar8131_sz
|
||||||
|
dd (ALX_DEV_ID_AR8161 shl 16) or ALX_VEN_ID, ar8161_sz
|
||||||
|
dd (ALX_DEV_ID_AR8162 shl 16) or ALX_VEN_ID, ar8162_sz
|
||||||
|
dd (ALX_DEV_ID_AR8171 shl 16) or ALX_VEN_ID, ar8171_sz
|
||||||
|
dd (ALX_DEV_ID_AR8172 shl 16) or ALX_VEN_ID, ar8172_sz
|
||||||
|
dd (ALX_DEV_ID_E2200 shl 16) or ALX_VEN_ID, e2200_sz
|
||||||
|
dd (ALX_DEV_ID_E2400 shl 16) or ALX_VEN_ID, e2400_sz
|
||||||
|
dd (ALX_DEV_ID_E2500 shl 16) or ALX_VEN_ID, e2500_sz
|
||||||
|
dd 0
|
||||||
|
|
||||||
|
ar8131_sz db "AR8131", 0
|
||||||
|
ar8161_sz db "AR8161", 0
|
||||||
|
ar8162_sz db "AR8162", 0
|
||||||
|
ar8171_sz db "QCA8171", 0
|
||||||
|
ar8172_sz db "QCA8172", 0
|
||||||
|
e2200_sz db "Killer E2200", 0
|
||||||
|
e2400_sz db "Killer E2400", 0
|
||||||
|
e2500_sz db "Killer E2500", 0
|
||||||
|
|
||||||
include_debug_strings
|
include_debug_strings
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
ALX_VEN_ID = 0x1969
|
||||||
|
|
||||||
|
ALX_DEV_ID_AR8131 = 0x1063
|
||||||
ALX_DEV_ID_AR8161 = 0x1091
|
ALX_DEV_ID_AR8161 = 0x1091
|
||||||
ALX_DEV_ID_E2200 = 0xe091
|
ALX_DEV_ID_E2200 = 0xe091
|
||||||
ALX_DEV_ID_E2400 = 0xe0a1
|
ALX_DEV_ID_E2400 = 0xe0a1
|
||||||
|
Loading…
Reference in New Issue
Block a user