?? smsc100fdcommon.h
字號:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//
// SMSC100FD Bank 0 Register Space
//
#define TCR 0 // Transmit Control Register
#define TCR_ENABLE 0x0001 // If this is 1, the transmitter is enabled
#define TCR_LOOP 0x0002 // Internal loopback mode
#define TCR_FORCOL 0x0004 // Force Collision
#define TCR_PAD_ENABLE 0x0080 // Pad short packets to 64 bytes
#define TCR_NOCRC 0x0100 // No CRC appended
#define TCR_MON_CNS 0x0400 // Monitor the carrier status
#define TCR_FDUPLX 0x0800 // Full Duplex
#define TCR_STP_SQET 0x1000 // Signal quality errors stop the transmitter
#define TCR_EPH_LOOP 0x2000 // EPH loopback mode
#define TCR_SWFDUP 0x8000 // Switched Full Duplex Mode
#define TX_STATUS 2 // Transmit status (also known as the Ethernet Status)
#define TS_SUCCESS 0x0001 // Transmission successful
#define TS_SINGLE 0x0002 // Single Collision
#define TS_MULTIPLE 0x0004 // Multiple Collisions
#define TS_LTX_MULTI 0x0008 // Last packet transmitted was a multicast packet
#define TS_16COL 0x0010 // 16 collisions, transmitter disabled
#define TS_SQET 0x0020 // Signal qualite error test
#define TS_LTX_BROAD 0x0040 // Last packet transmitted was a broadcast packet
#define TS_DEFER 0x0080 // Transmission deferred
#define TS_LATCOL 0x0200 // Late Collision detected
#define TS_LOSTCAR 0x0400 // Lost carrier
#define TS_EXCESSIVE 0x0800 // Excessive deferral
#define TS_ROLLOVER 0x1000 // Counter Rollover
#define ES_RXOVERRUN 0x2000 // Receiver overrun
#define ES_LINK_OK 0x4000 // Link integrity OK
#define ES_TXOVERRUN 0x8000 // Transmitter overrun
#define RCR 4 // Receive Control Register
#define RCR_ABORT 0x0001 // Receive frame aborted
#define RCR_PROMISC 0x0002 // Promiscuous mode enable
#define RCR_ALMUL 0x0004 // Receive all multicast packets
#define RCR_ENABLE 0x0100 // Receiver enable
#define RCR_STRIP_CRC 0x0200 // Strips CRC enable
#define RCR_ABORT_ENABLE 0x2000 // Abort on collision enable
#define RCR_FILTER 0x4000 // Filter Carrier enable
#define RCR_SOFTRESET 0x8000 // Software Reset
#define COUNTER 6 // Counter Register
#define MIR 8 // Memory Information Register
#define MCR 10 // Memory Control Register
#define BANK_SELECT 14 // Bank Select Register (mirrored in every bank)
//
// SMSC100FD Bank 1 Register Space
//
#define CONFIG 0 // Configuration Register
#define CFG_ONE_1 0x0001 // Always 1
#define CFG_INT0 0x0002 // Interrupt select 0
#define CFG_INT1 0x0004 // Interrupt select 1
#define CFG_ONE_2 0x0010 // Always 1
#define CFG_ONE_3 0x0020 // Always 1
#define CFG_ONE_4 0x0080 // Always 1
#define CFG_AUI_SELECT 0x0100 // AUI Select
#define CFG_FULL_STEP 0x0400 // Full Step Select
#define CFG_NOWAIT 0x1000 // No additional wait states
#define CFG_ONE_5 0x2000 // Always 1
#define CFG_MII_SELECT 0x8000 // MII interface select
#define BASE 2 // Base Address Register
#define ADDR0 4 // MAC Address 0 and 1
#define ADDR1 6 // MAC Address 2 and 3
#define ADDR2 8 // MAC Address 4 and 5
#define GENERAL 10 // General purpose register
#define CONTROL 12 // Control Register
#define CTL_STORE 0x0001 // Store to EEPROM
#define CTL_RELOAD 0x0002 // Read from EEPROM
#define CTL_EEPROM 0x0004 // EEPROM Select
#define CTL_ONE_1 0x0010 // Always 1
#define CTL_TE_ENABLE 0x0020 // Transmit Error enable
#define CTL_CR_ENABLE 0x0040 // Counter rollover enable
#define CTL_LE_ENABLE 0x0080 // Link Error enable
#define CTL_ONE_2 0x0100 // Always 1
#define CTL_AUTO_RELEASE 0x0800 // Auto Release memory
#define CTL_RCV_BAD 0x4000 // Receive bad CRC packets
//
// SMSC100FD Bank 2 Register Space
//
#define MMU_CMD 0 // MMU Command Register
#define MC_BUSY 1 // MMU is busy
#define MC_NOP 0x00 // MMU No Operation Command
#define MC_ALLOC 0x20 // MMU Allocate Memory Command
#define MC_RESET 0x40 // MMU Reset Command
#define MC_REMOVE 0x60 // MMU Remove Current RX Packet Command
#define MC_RELEASE 0x80 // MMU Remove and Release Current RX Packet Command
#define MC_FREEPKT 0xA0 // MMU Release Packet in PNR Command
#define MC_ENQUEUE 0xC0 // MMU Enqueue the Transmit Packet Command
#define PNR_ARR 2 // Packet Number Register and Allocated Result Register
#define FIFO_PORTS 4 // FIFO Ports register
#define FP_RXEMPTY 0x8000 // Receive FIFO Empty status
#define FP_TXEMPTY 0x0080 // Transmit FIFO Empty status
#define POINTER 6 // Pointer Register
#define PTR_NOT_EMPTY 0x0800 // Write Data FIFO is not empty
#define PTR_ETEN 0x1000 // Early Transmit Underrun Detection
#define PTR_READ 0x2000 // Read operation follows
#define PTR_AUTOINC 0x4000 // Auto increment pointer after data accesses
#define PTR_RCV 0x8000 // Receive data area
#define DATA_1 8 // Data Transfer Register
#define DATA_2 10 // Data transfer Register
#define INTERRUPT_REGISTER 12 // Interrupt Control Register (Status, Ack, and Mask)
#define IS_RCV_INT 0x0001 // Receive Interrupt
#define IS_TX_INT 0x0002 // Transmit Complete Interrupt
#define IS_TXEMPTY_INT 0x0004 // Transmit FIFO Empty Interrupt
#define IS_ALLOC_INT 0x0008 // MMU Allocation Complete Interrupt
#define IS_OVRN_INT 0x0010 // Receive Overrun Interrupt
#define IS_EPH_INT 0x0020 // EPH Interrupt
#define IS_ERCV_INT 0x0040 // Early Receive Interrupt
#define IS_RX_DISC_INT 0x0080 // Receive Discard Rollover Interrupt
#define IM_RCV_INT 0x0100 // Receive Interrupt
#define IM_TX_INT 0x0200 // Transmit Complete Interrupt
#define IM_TX_EMPTY_INT 0x0400 // Transmit FIFO Empty Interrupt
#define IM_ALLOC_INT 0x0800 // MMU Allocation Complete Interrupt
#define IM_RX_OVRN_INT 0x1000 // Receive Overrun Interrupt
#define IM_EPH_INT 0x2000 // EPH Interrupt
#define IM_ERCV_INT 0x4000 // Early Receive Interrupt
#define IM_RX_DISC_INT 0x8000 // Receive Discard Rollover Interrupt
//
// SMSC100FD Bank 3 Register Space
//
#define MULTICAST1 0 // Multicast Bits
#define MULTICAST2 2 // Multicast Bits
#define MULTICAST3 4 // Multicast Bits
#define MULTICAST4 6 // Multicast Bits
#define MGMT 8 // Management Register
#define MGMT_MDO 0x0001 // MII Data Out
#define MGMT_MDI 0x0002 // MII Data In
#define MGMT_MCLK 0x0004 // MII Clock
#define MGMT_MDOE 0x0008 // MII Data Out Enable
#define REVISION 10 // Chip Revision Register
//
// Receive Frame status word
//
#define RS_ALGNERR 0x8000 // Byte alignment error
#define RS_BROADCAST 0x4000 // Broadcast frame
#define RS_BADCRC 0x2000 // Bad CRC
#define RS_ODDFRAME 0x1000 // Odd number of bytes
#define RS_TOOLONG 0x0800 // Mammoth packet
#define RS_TOOSHORT 0x0400 // Runt packet
#define RS_MULTICAST 0x0001 // Multicast packet
//
// Receive Frame Control word
//
#define RC_ODDFRAME 0x2000 // Odd number of bytes
//
// Transmit Frame Control word
//
#define TC_APPENDCRC 0x1000 // Append CRC
#define TC_ODDFRAME 0x2000 // Odd number of bytes
//
// These values are written to the bank select register to change banks.
//
#define BANK0 0x3300 // Bank 0
#define BANK1 0x3301 // Bank 1
#define BANK2 0x3302 // Bank 2
#define BANK3 0x3303 // Bank 3
//
// Select the register bank.
//
//#define SelectBank(Bank) WriteWord (BANK_SELECT, Bank)
//
// EEPROM definitions
//
#define EEPROM_ADDRESSES 64
//
// PHY definitions
//
#define PHY_ADDRESSES 32
//
// Bits related to the MII interface
//
#define PHY_ADDRESS 0 // 8130 address
#define MIIREG_READ ((ULONGLONG)0xffffffff60000000L)
#define MIIREG_WRITE ((ULONGLONG)0xffffffff50020000L)
#define MIIREG_INDEX_BIT 18
#define MIIREG_INDEX_MASK ((ULONGLONG)0x1f << MIIREG_INDEX_BIT)
#define MIIREG_PHYADDR_BIT 23
#define MIIREG_PHYADDR_MASK ((ULONGLONG)0x1f << MIIREG_PHYADDR_BIT)
#define MIIREG_CONTENT_MASK ((ULONGLONG)0x000000000000ffffL)
#define MIIREG_NEXTBIT_MASK ((ULONGLONG)0x8000000000000000L)
#define MIIREG_NEXTBIT_BIT 63
//
// Registers in the PHY
//
#define PHY_CONTROL 0
#define PHY_STATUS 1
#define PHY_ID0 2
#define PHY_ID1 3
#define PHY_ANADVERTISE 4
#define PHY_ANPARTNER 5
#define PHY_ANEXPANSION 6
#define PHY_INTERRUPTACK 21 // Interrupt Acknowledge
//
// Bits in the PHY_CONTROL register
//
#define PHY_CTRL_RESET 0x8000
#define PHY_CTRL_LOOPBACK 0x4000
#define PHY_CTRL_SPEED 0x2000
#define PHY_CTRL_ANENABLE 0x1000
#define PHY_CTRL_PWRDWN 0x0800
#define PHY_CTRL_ISOLATION 0x0400
#define PHY_CTRL_ANRESTART 0x0200
#define PHY_CTRL_DUPLEX 0x0100
//
// Bits in the PHY_STATUS register
//
#define PHY_STAT_LINK 0x0004
#define PHY_STAT_ANCOMPLETE 0x0020
//
// Bits in the PHY_ANADVERTISE register
//
#define PHY_ANA_100FDX 0x0100
#define PHY_ANA_100HDX 0x0080
#define PHY_ANA_10FDX 0x0040
#define PHY_ANA_10HDX 0x0020
// This is the format for the ethernet frame that is transmitted on the wire
#pragma pack (push, 1)
typedef struct _EthernetFrameHeader
{
UINT16 wDestMAC[3];
UINT16 wSrcMAC[3];
UINT16 wFrameType;
// Then the data
// After the data is a 4 byte CRC
} EthernetFrameHeader;
#pragma pack (pop)
//
// Layout of the EEPROM contents
// NOTE: The layout is designed to create the proper address offset into the EEPROM.
//
#pragma pack (push, 1)
typedef struct _SMSC100FDEEPROM
{
UCHAR ucConfigReg; // Contents of CONFIG register after reset
UCHAR ucBaseReg; // Contents of BASE register after reset
UCHAR ucReserved0[2+4*7]; // Reserved
UCHAR ucMacAddress[3]; // MAC address
UCHAR ucIp[2]; // IP address
UCHAR ucSubnetMask[2]; // Subnet Mask
UCHAR ucReserved1[64-38]; // Reserved
} SMSC100FDEEPROM, *PSMSC100FDEEPROM;
#pragma pack (pop)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -