?? 3c59x.inc
字號:
;; Copyright (c) 2004, Endre Kozma <endre.kozma@axelero.hu>;; All rights reserved.;;;; Redistribution and use in source and binary forms, with or without;; modification, are permitted provided that the following conditions are;; met:;;;; 1. Redistributions of source code must retain the above copyright notice,;; this list of conditions and the following disclaimer.;;;; 2. Redistributions in binary form must reproduce the above copyright;; notice, this list of conditions and the following disclaimer in the;; documentation and/or other materials provided with the distribution.;;;; 3. The name of the author may not be used to endorse or promote products;; derived from this software without specific prior written permission.;;;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES;; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.;; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,;; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF;; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; 3C59X.INC ;;;; ;;;; Ethernet driver for Menuet OS ;;;; ;;;; Driver for 3Com fast etherlink 3c59x and ;;;; etherlink XL 3c900 and 3c905 cards ;;;; References: ;;;; www.3Com.com - data sheets ;;;; DP83840A.pdf - ethernet physical layer ;;;; 3c59x.c - linux driver ;;;; ethernet driver template by Mike Hibbett ;;;; ;;;; Credits ;;;; Mike Hibbett, ;;;; who kindly supplied me with a 3Com905C-TX-M card ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; History;; =======;; $Log: 3C59X.INC,v $;; Revision 1.3 2004/07/11 12:21:12 kozma;; Support of vortex chips (3c59x) added.;; Support of 3c920 and 3c982 added.;; Corrections.;;;; Revision 1.2 2004/06/12 19:40:20 kozma;; Function e3c59x_set_available_media added in order to set;; the default media in case auto detection finds no valid link.;; Incorrect mii check removed (3c900 Cyclone works now).;; Cleanups.;;;; Revision 1.1 2004/06/12 18:27:15 kozma;; Initial revision;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; comment the next line out if you don't want debug info printed; on the debug board. This option adds a lot of bytes to the driver; so it's worth to comment it out.; E3C59X_DEBUG equ 1; forcing full duplex mode makes sense at some cards and link types E3C59X_FORCE_FD equ 1macro virt_to_dma reg{if defined E3C59X_LINUX sub reg, [virt_addr] add reg, [dma_addr]end if}macro dma_to_virt reg{if defined E3C59X_LINUX sub reg, [dma_addr] add reg, [virt_addr]end if}macro zero_to_virt reg{if defined E3C59X_LINUX add reg, [virt_addr]end if}macro virt_to_zero reg{if defined E3C59X_LINUX sub reg, [virt_addr]end if}macro zero_to_dma reg{if defined E3C59X_LINUX add reg, [dma_addr]end if}macro dma_to_zero reg{if defined E3C59X_LINUX sub reg, [dma_addr]end if}macro strtbl name, [string]{common label name dwordforward local label dd labelforward label db string, 0}; Ethernet frame symbols ETH_ALEN equ 6 ETH_HLEN equ (2*ETH_ALEN+2) ETH_ZLEN equ 60 ; 60 + 4bytes auto payload for ; mininmum 64bytes frame length; PCI programming PCI_REG_COMMAND equ 0x4 ; command register PCI_REG_STATUS equ 0x6 ; status register PCI_REG_LATENCY equ 0xd ; latency timer register PCI_REG_CAP_PTR equ 0x34 ; capabilities pointer PCI_REG_CAPABILITY_ID equ 0x0 ; capapility ID in pm register block PCI_REG_PM_STATUS equ 0x4 ; power management status register PCI_REG_PM_CTRL equ 0x4 ; power management control register PCI_BIT_PIO equ 0 ; bit0: io space control PCI_BIT_MMIO equ 1 ; bit1: memory space control PCI_BIT_MASTER equ 2 ; bit2: device acts as a PCI master; Registers E3C59X_REG_POWER_MGMT_CTRL equ 0x7c E3C59X_REG_UP_LIST_PTR equ 0x38 E3C59X_REG_UP_PKT_STATUS equ 0x30 E3C59X_REG_TX_FREE_THRESH equ 0x2f E3C59X_REG_DN_LIST_PTR equ 0x24 E3C59X_REG_DMA_CTRL equ 0x20 E3C59X_REG_TX_STATUS equ 0x1b E3C59X_REG_RX_STATUS equ 0x18 E3C59X_REG_TX_DATA equ 0x10; Common window registers E3C59X_REG_INT_STATUS equ 0xe E3C59X_REG_COMMAND equ 0xe; Register window 7 E3C59X_REG_MASTER_STATUS equ 0xc E3C59X_REG_POWER_MGMT_EVENT equ 0xc E3C59X_REG_MASTER_LEN equ 0x6 E3C59X_REG_VLAN_ETHER_TYPE equ 0x4 E3C59X_REG_VLAN_MASK equ 0x0 E3C59X_REG_MASTER_ADDRESS equ 0x0; Register window 6 E3C59X_REG_BYTES_XMITTED_OK equ 0xc E3C59X_REG_BYTES_RCVD_OK equ 0xa E3C59X_REG_UPPER_FRAMES_OK equ 0x9 E3C59X_REG_FRAMES_DEFERRED equ 0x8 E3C59X_REG_FRAMES_RCVD_OK equ 0x7 E3C59X_REG_FRAMES_XMITTED_OK equ 0x6 E3C59X_REG_RX_OVERRUNS equ 0x5 E3C59X_REG_LATE_COLLISIONS equ 0x4 E3C59X_REG_SINGLE_COLLISIONS equ 0x3 E3C59X_REG_MULTIPLE_COLLISIONS equ 0x2 E3C59X_REG_SQE_ERRORS equ 0x1 E3C59X_REG_CARRIER_LOST equ 0x0; Register window 5 E3C59X_REG_INDICATION_ENABLE equ 0xc E3C59X_REG_INTERRUPT_ENABLE equ 0xa E3C59X_REG_TX_RECLAIM_THRESH equ 0x9 E3C59X_REG_RX_FILTER equ 0x8 E3C59X_REG_RX_EARLY_THRESH equ 0x6 E3C59X_REG_TX_START_THRESH equ 0x0; Register window 4 E3C59X_REG_UPPER_BYTES_OK equ 0xe E3C59X_REG_BAD_SSD equ 0xc E3C59X_REG_MEDIA_STATUS equ 0xa E3C59X_REG_PHYSICAL_MGMT equ 0x8 E3C59X_REG_NETWORK_DIAGNOSTIC equ 0x6 E3C59X_REG_FIFO_DIAGNOSTIC equ 0x4 E3C59X_REG_VCO_DIAGNOSTIC equ 0x2 ; may not supported; Bits in register window 4 E3C59X_BIT_AUTOSELECT equ 24; Register window 3 E3C59X_REG_TX_FREE equ 0xc E3C59X_REG_RX_FREE equ 0xa E3C59X_REG_MEDIA_OPTIONS equ 0x8 E3C59X_REG_MAC_CONTROL equ 0x6 E3C59X_REG_MAX_PKT_SIZE equ 0x4 E3C59X_REG_INTERNAL_CONFIG equ 0x0; Register window 2 E3C59X_REG_RESET_OPTIONS equ 0xc E3C59X_REG_STATION_MASK_HI equ 0xa E3C59X_REG_STATION_MASK_MID equ 0x8 E3C59X_REG_STATION_MASK_LO equ 0x6 E3C59X_REG_STATION_ADDRESS_HI equ 0x4 E3C59X_REG_STATION_ADDRESS_MID equ 0x2 E3C59X_REG_STATION_ADDRESS_LO equ 0x0; Register window 1 E3C59X_REG_TRIGGER_BITS equ 0xc E3C59X_REG_SOS_BITS equ 0xa E3C59X_REG_WAKE_ON_TIMER equ 0x8 E3C59X_REG_SMB_RXBYTES equ 0x7 E3C59X_REG_SMB_DIAG equ 0x5 E3C59X_REG_SMB_ARB equ 0x4 E3C59X_REG_SMB_STATUS equ 0x2 E3C59X_REG_SMB_ADDRESS equ 0x1 E3C59X_REG_SMB_FIFO_DATA equ 0x0; Register window 0 E3C59X_REG_EEPROM_DATA equ 0xc E3C59X_REG_EEPROM_COMMAND equ 0xa E3C59X_REG_BIOS_ROM_DATA equ 0x8 E3C59X_REG_BIOS_ROM_ADDR equ 0x4; Physical management bits E3C59X_BIT_MGMT_DIR equ 2 ; drive with the data written in mgmtData E3C59X_BIT_MGMT_DATA equ 1 ; MII management data bit E3C59X_BIT_MGMT_CLK equ 0 ; MII management clock; MII commands E3C59X_MII_CMD_MASK equ (1111b shl 10) E3C59X_MII_CMD_READ equ (0110b shl 10) E3C59X_MII_CMD_WRITE equ (0101b shl 10); MII registers E3C59X_REG_MII_BMCR equ 0 ; basic mode control register E3C59X_REG_MII_BMSR equ 1 ; basic mode status register E3C59X_REG_MII_ANAR equ 4 ; auto negotiation advertisement register E3C59X_REG_MII_ANLPAR equ 5 ; auto negotiation link partner ability register E3C59X_REG_MII_ANER equ 6 ; auto negotiation expansion register; MII bits E3C59X_BIT_MII_AUTONEG_COMPLETE equ 5 ; auto-negotiation complete E3C59X_BIT_MII_PREAMBLE_SUPPRESSION equ 6; eeprom bits and commands E3C59X_EEPROM_CMD_READ equ 0x80 E3C59X_EEPROM_BIT_BUSY equ 15; eeprom registers E3C59X_EEPROM_REG_OEM_NODE_ADDR equ 0xa E3C59X_EEPROM_REG_CAPABILITIES equ 0x10; Commands for command register E3C59X_SELECT_REGISTER_WINDOW equ (1 shl 11) IS_VORTEX equ 0x1 IS_BOOMERANG equ 0x2 IS_CYCLONE equ 0x4 IS_TORNADO equ 0x8 EEPROM_8BIT equ 0x10 HAS_PWR_CTRL equ 0x20 HAS_MII equ 0x40 HAS_NWAY equ 0x80 HAS_CB_FNS equ 0x100 INVERT_MII_PWR equ 0x200 INVERT_LED_PWR equ 0x400 MAX_COLLISION_RESET equ 0x800 EEPROM_OFFSET equ 0x1000 HAS_HWCKSM equ 0x2000 EXTRA_PREAMBLE equ 0x4000 align 4e3c59x_hw_versions: dw 0x5900, IS_VORTEX ; 3c590 Vortex 10Mbps dw 0x5920, IS_VORTEX ; 3c592 EISA 10Mbps Demon/Vortex dw 0x5970, IS_VORTEX ; 3c597 EISA Fast Demon/Vortex dw 0x5950, IS_VORTEX ; 3c595 Vortex 100baseTx dw 0x5951, IS_VORTEX ; 3c595 Vortex 100baseT4 dw 0x5952, IS_VORTEX ; 3c595 Vortex 100base-MII dw 0x9000, IS_BOOMERANG ; 3c900 Boomerang 10baseT dw 0x9001, IS_BOOMERANG ; 3c900 Boomerang 10Mbps Combo dw 0x9004, IS_CYCLONE or HAS_NWAY or HAS_HWCKSM ; 3c900 Cyclone 10Mbps TPO dw 0x9005, IS_CYCLONE or HAS_HWCKSM ; 3c900 Cyclone 10Mbps Combo dw 0x9006, IS_CYCLONE or HAS_HWCKSM ; 3c900 Cyclone 10Mbps TPC dw 0x900A, IS_CYCLONE or HAS_HWCKSM ; 3c900B-FL Cyclone 10base-FL dw 0x9050, IS_BOOMERANG or HAS_MII ; 3c905 Boomerang 100baseTx dw 0x9051, IS_BOOMERANG or HAS_MII ; 3c905 Boomerang 100baseT4 dw 0x9055, IS_CYCLONE or HAS_NWAY or HAS_HWCKSM or EXTRA_PREAMBLE ; 3c905B Cyclone 100baseTx dw 0x9058, IS_CYCLONE or HAS_NWAY or HAS_HWCKSM ; 3c905B Cyclone 10/100/BNC dw 0x905A, IS_CYCLONE or HAS_HWCKSM ; 3c905B-FX Cyclone 100baseFx dw 0x9200, IS_TORNADO or HAS_NWAY or HAS_HWCKSM ; 3c905C Tornado dw 0x9800, IS_CYCLONE or HAS_NWAY or HAS_HWCKSM ; 3c980 Cyclone dw 0x9805, IS_TORNADO or HAS_NWAY or HAS_HWCKSM ; 3c982 Dual Port Server Cyclone dw 0x7646, IS_CYCLONE or HAS_NWAY or HAS_HWCKSM ; 3cSOHO100-TX Hurricane dw 0x5055, IS_CYCLONE or EEPROM_8BIT or HAS_HWCKSM ; 3c555 Laptop Hurricane dw 0x6055, IS_TORNADO or HAS_NWAY or EEPROM_8BIT or HAS_CB_FNS \ or INVERT_MII_PWR or HAS_HWCKSM ; 3c556 Laptop Tornado dw 0x6056, IS_TORNADO or HAS_NWAY or EEPROM_OFFSET or HAS_CB_FNS \ or INVERT_MII_PWR or HAS_HWCKSM ; 3c556B Laptop Hurricane dw 0x5b57, IS_BOOMERANG or HAS_MII or EEPROM_8BIT ; 3c575 [Megahertz] 10/100 LAN CardBus dw 0x5057, IS_BOOMERANG or HAS_MII or EEPROM_8BIT ; 3c575 Boomerang CardBus dw 0x5157, IS_CYCLONE or HAS_NWAY or HAS_CB_FNS or EEPROM_8BIT \ or INVERT_LED_PWR or HAS_HWCKSM ; 3CCFE575BT Cyclone CardBus dw 0x5257, IS_TORNADO or HAS_NWAY or HAS_CB_FNS or EEPROM_8BIT or INVERT_MII_PWR \ or MAX_COLLISION_RESET or HAS_HWCKSM ; 3CCFE575CT Tornado CardBus dw 0x6560, IS_CYCLONE or HAS_NWAY or HAS_CB_FNS or EEPROM_8BIT or INVERT_MII_PWR \ or INVERT_LED_PWR or HAS_HWCKSM ; 3CCFE656 Cyclone CardBus dw 0x6562, IS_CYCLONE or HAS_NWAY or HAS_CB_FNS or EEPROM_8BIT or INVERT_MII_PWR \ or INVERT_LED_PWR or HAS_HWCKSM ; 3CCFEM656B Cyclone+Winmodem CardBus dw 0x6564, IS_TORNADO or HAS_NWAY or HAS_CB_FNS or EEPROM_8BIT or INVERT_MII_PWR \ or MAX_COLLISION_RESET or HAS_HWCKSM ; 3CXFEM656C Tornado+Winmodem CardBus dw 0x4500, IS_TORNADO or HAS_NWAY or HAS_HWCKSM ; 3c450 HomePNA Tornado dw 0x9201, IS_TORNADO or HAS_NWAY or HAS_HWCKSM ; 3c920 Tornado dw 0x1201, IS_TORNADO or HAS_HWCKSM or HAS_NWAY ; 3c982 Hydra Dual Port A dw 0x1202, IS_TORNADO or HAS_HWCKSM or HAS_NWAY ; 3c982 Hydra Dual Port B dw 0x9056, IS_CYCLONE or HAS_NWAY or HAS_HWCKSM or EXTRA_PREAMBLE ; 3c905B-T4 dw 0x9210, IS_TORNADO or HAS_NWAY or HAS_HWCKSM ; 3c920B-EMB-WNM TornadoE3C59X_HW_VERSIONS_SIZE= $-e3c59x_hw_versions; RX/TX buffers sizes E3C59X_MAX_ETH_PKT_SIZE equ 1536 ; max packet size E3C59X_NUM_RX_DESC equ 4 ; a power of 2 number E3C59X_NUM_TX_DESC equ 4 ; a power of 2 number E3C59X_RX_BUFFER_SIZE equ (E3C59X_MAX_ETH_FRAME_SIZE*E3C59X_NUM_RX_DESC) E3C59X_TX_BUFFER_SIZE equ (E3C59X_MAX_ETH_FRAME_SIZE*E3C59X_NUM_TX_DESC); Download Packet Descriptor E3C59X_DPD_DN_NEXT_PTR equ 0 E3C59X_DPD_FRAME_START_HDR equ 4 E3C59X_DPD_DN_FRAG_ADDR equ 8 ; for packet data E3C59X_DPD_DN_FRAG_LEN equ 12 ; for packet data E3C59X_DPD_SIZE equ 16 ; a power of 2 number; Upload Packet Descriptor E3C59X_UPD_UP_NEXT_PTR equ 0 E3C59X_UPD_PKT_STATUS equ 4 E3C59X_UPD_UP_FRAG_ADDR equ 8 ; for packet data E3C59X_UPD_UP_FRAG_LEN equ 12 ; for packet data E3C59X_UPD_SIZE equ 16; RX/TX buffersif defined E3C59X_LINUX E3C59X_MAX_ETH_FRAME_SIZE = 160 ; size of ethernet frame + bytes alignment e3c59x_rx_buff = 0else E3C59X_MAX_ETH_FRAME_SIZE = 1520 ; size of ethernet frame + bytes alignment e3c59x_rx_buff = eth_data_startend if e3c59x_tx_buff = e3c59x_rx_buff+E3C59X_RX_BUFFER_SIZE e3c59x_dpd_buff = e3c59x_tx_buff+E3C59X_TX_BUFFER_SIZE e3c59x_upd_buff = e3c59x_dpd_buff+(E3C59X_DPD_SIZE*E3C59X_NUM_TX_DESC)e3c59x_curr_upd: dd 0e3c59x_prev_dpd: dd 0e3c59x_prev_tx_frame: dd 0e3c59x_transmit_function: dd 0e3c59x_receive_function: dd 0e3c59x_ver_id: db 17e3c59x_full_bus_master: db 0e3c59x_has_hwcksm: db 0e3c59x_preamble: db 0e3c59x_dn_list_ptr_cleared: db 0e3c59x_self_directed_packet: rb 6if defined E3C59X_DEBUGe3c59x_hw_type_str: db "Detected hardware type : ", 0e3c59x_device_str: db "Device ID : 0x"e3c59x_device_id_str: db "ffff", 13, 10, 0e3c59x_vendor_str: db "Vendor ID : 0x"e3c59x_vendor_id_str: db "ffff", 13, 10, 0e3c59x_io_info_str: db "IO address : 0x"e3c59x_io_addr_str: db "ffff", 13, 10, 0e3c59x_mac_info_str: db "MAC address : "e3c59x_mac_addr_str: db "ff:ff:ff:ff:ff:ff", 13, 10, 0e3c59x_boomerang_str: db " (boomerang)", 13, 10, 0e3c59x_vortex_str: db " (vortex)", 13, 10, 0e3c59x_link_type_str: db "Established link type : ", 0e3c59x_new_line_str: db 13, 10, 0e3c59x_link_type: dd 0e3c59x_charset: db '0123456789abcdef'strtbl e3c59x_link_str, \ "No valid link type detected", \ "10BASE-T half duplex", \ "10BASE-T full-duplex", \ "100BASE-TX half duplex", \ "100BASE-TX full duplex", \ "100BASE-T4", \ "100BASE-FX", \ "10Mbps AUI", \ "10Mbps COAX (BNC)", \ "miiDevice - not supported"strtbl e3c59x_hw_str, \ "3c590 Vortex 10Mbps", \
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -