⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs8900a.h

📁 Freescale IMX31 ADS CS8900a Head file, it is very important
💻 H
📖 第 1 页 / 共 2 页
字号:
#define TX_ERR_NO_BUFFER        0x0001
#define TX_ERR_TOO_BIG          0x0002
#define TX_ERR_TOO_MANY_FRAGS   0x0004
#define TX_ERR_SQE_ERROR        0x0008
#define TX_ERR_JABBER           0x0010
#define TX_ERR_LOCK_FAIL        0x0020
#define TX_ERR_EXCESS_COLL      0x0100
#define TX_ERR_UNDERRUN         0x0200
#define TX_ERR_OUT_OF_WIN       0x0400
#define TX_ERR_LOSS_CRS         0x1000
#define TX_ERR_FRAME_ABORT      0x2000


// Receive Errors

#define RX_ERR_CRC_ERROR        0x0001
#define RX_ERR_EXTRA_DATA       0x0002
#define RX_ERR_RUNT             0x0004
#define RX_ERR_FRAMING          0x0008
#define RX_ERR_OVERRUN          0x0010
#define RX_ERR_RX_ERR           0x0020
#define RX_ERR_RX_MISS          0x0100
#define RX_ERR_DRIBBLE          0x0200
#define RX_ERR_TOO_MANY_FRAGS   0x0400
#define RX_ERR_NO_BUFFER        0x0800


#define ETHER_ADDR_SIZE             6   // Size of Ethernet address
#define ETHER_HDR_SIZE              14  // Size of ethernet header
#define ETH_MIN_PACKET              60
#define ETH_MAX_PACKET              1514
#define MCAST_LIST_SIZE             32
#define ETH_MIN_FRAME               16

// No DMA, I/O operation
// Interrupt number on the CS8900
// ZEUS: INTRQ0(pin 32) wired to interrupt 2
#define CS8900_INTERRUPT_NUM    0

#define CS8900_PacketPage_Signature         0x3000
#define CS8900_PacketPage_Signature_Mask    0xF000


#define BUF_RECEIVE_128_BYTES_ENABLE        0x0800
#define BUF_RX_DEST_MATCH_ENABLE            0x8000

#define BUF_DEFAULT_CONFIGURATION           BUF_CFG_RDY4TX_IE |\
                                            BUF_EVENT_RX_MISS |\
                                            BUF_CFG_TX_UNDR_IE |\
                                            BUF_CFG_MISOFLO_IE



// Receive Control bits for Register 5 (pg 55)
#define  RX_DEFAULT_CONFIGURATION             RX_CTL_RX_OK_A |\
                                              RX_CTL_IND_A


// Line Control bits for Register 13 (pg 63)
#define  LCR_RX_ON                            0x0040
#define  LCR_TX_ON                            0x0080
#define  LCR_AUI_ONLY                         0x0100
#define  LCR_AUTO_AUI_10BASET                 0x0200
#define  LCR_NWAY_ENABLE                      0x0400
#define  LCR_MODIFIED_BACKOFF                 0x0800
#define  LCR_AUTO_CORRECT_POLARITY            0x1000
#define  LCR_LOW_RX_SQUELCH                   0x4000
#define  LCR_NWAY_PULSES                      0x8000
#define  LCR_WAKE_ENABLE                      0x8000

// Line Status bits for Register 14 (pg 64)
#define LSR_LINKOK                            0x0080
#define LSR_10BT                              0x0200
#define LSR_AUI                               0x0100
#define LSR_POLARITYOK                        0x1000

// EEPROM related stuff

#define EEPROM_WRITE_COMMAND                  0x0100


// 
#define IRQ_IE                                0x8000
#define AUTO_INCREMENT_EN                     0x8000

#define TX_EVENT_COLL_SHIFT                   0x000B

#ifdef DEBUG
// Debug zone bit positions
#define ZONEID_INIT           0
#define ZONEID_DEINIT         1

#define ZONEID_INFO           12
#define ZONEID_FUNCTION       13
#define ZONEID_WARN           14
#define ZONEID_ERROR          15

// Debug zone masks
#define ZONEMASK_INIT         (1<<ZONEID_INIT)
#define ZONEMASK_DEINIT     (1<<ZONEID_DEINIT)

#define ZONEMASK_INFO         (1<<ZONEID_INFO)
#define ZONEMASK_FUNCTION (1<<ZONEID_FUNCTION)
#define ZONEMASK_WARN        (1<<ZONEID_WARN)
#define ZONEMASK_ERROR        (1<<ZONEID_ERROR)

// Debug zone args to DEBUGMSG
//#define ZONE_INIT                 DEBUGZONE(ZONEID_INIT)
//#define ZONE_DEINIT               DEBUGZONE(ZONEID_DEINIT)


//#define ZONE_INFO                 DEBUGZONE(ZONEID_INFO)
//#define ZONE_FUNCTION             DEBUGZONE(ZONEID_FUNCTION)
//#define ZONE_WARN                 DEBUGZONE(ZONEID_WARN)
//#define ZONE_ERROR                DEBUGZONE(ZONEID_ERROR)

#define ZONE_INIT                   FALSE
#define ZONE_DEINIT                 FALSE

#define ZONE_INFO                   FALSE
#define ZONE_FUNCTION               FALSE
#define ZONE_WARN                   FALSE
#define ZONE_ERROR                  FALSE
#endif

typedef struct 
{
     REG16 CS8900_RX_TX_DATA_0;
     REG16 CS8900_RX_TX_DATA_1;
     REG16 CS8900_TX_CMD;
     REG16 CS8900_TX_LENGTH;
     REG16 CS8900_ISQ;
     REG16 CS8900_PAGE_POINTER;
     REG16 CS8900_PAGE_DATA_0;
     REG16 CS8900_PAGE_DATA_1;
} BSP_CS8900_REG, *PBSP_CS8900_REG;

//
// What we map into the reserved section of a packet.
// Cannot be more than 8 bytes 
//
typedef struct _MINIPORT_RESERVED {
    PNDIS_PACKET Next;    
} MINIPORT_RESERVED, * PMINIPORT_RESERVED;

//
// Retrieve the MINIPORT_RESERVED structure from a packet.
// 
#define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->MiniportReserved))


//------------------------------------------------------------------------------
// ENUMERATIONS AND STRUCTURES 

#ifdef __cplusplus
extern "C" {
#endif

// CS8900A Configuration

typedef struct cs8900
{
   NDIS_HANDLE ndisAdapterHandle;
      
  
   // This structure holds information about our ISR.
   // It is used to synchronize with the ISR.
   
   NDIS_MINIPORT_INTERRUPT interruptObj;
   BOOLEAN intEnabled;
   DWORD intLine;

   PVOID  vIOBaseAddress;
   UCHAR  CurrentAddress[ETHER_ADDR_SIZE];
   UCHAR  PermanentAddress[ETHER_ADDR_SIZE];
   UCHAR  MediaType;
   UCHAR  DuplexMode;
   UCHAR  TxMaxCount;
   UCHAR  RxMaxCount;
   WORD   LookAheadSize;
   WORD   ChipType;
   WORD   ChipRevsion;
   NDIS_HARDWARE_STATUS CurrentState;
   NDIS_MEDIA_STATE MediaState;
   ULONG    PacketFilter;
   ULONG    CurrentLookAhead;
   
   ULONG FramesXmitGood;               // Good Frames Transmitted
   ULONG FramesRcvGood;                // Good Frames Received
   ULONG FramesXmitBad;                // Bad Frames Transmitted
   ULONG FramesXmitOneCollision;       // Frames Transmitted with one collision
   ULONG FramesXmitManyCollisions;     // Frames Transmitted with > 1 collision
   ULONG FrameAlignmentErrors;         // FAE errors counted
   ULONG RcvCRCErrors;                 // CRC errors counted
   ULONG MissedPackets;                // missed packet counted
   ULONG RcvErrors;
   ULONG XmitMaxCollisions;
   ULONG RcvOverrun;
   ULONG XmitUnderrun;
   ULONG RcvExtraDataErrors;        // for receive packet longer than 1518bytes
   ULONG RcvShortDataErrors;        // for receive packet shorter than 64bytes
   
   DWORD     SerialNumber;  // Adapter Serial number from EEPROM
   CHAR  McastList[MCAST_LIST_SIZE][ETHER_ADDR_SIZE];
   ULONG NumMulticastAddressesInUse;
   WORD TransmitInProgress;
    //
    // The first packet we have pending.
    //
    PNDIS_PACKET HeadPacket;

    //
    // The tail of the pending queue.
    //
    PNDIS_PACKET TailPacket;

    WORD StartTX;
    WORD TransmitBidPending;
    WORD ReceiveCompleteNotifyFlag;
    UCHAR ReceiveBuffer[ETH_MAX_PACKET];
    ULONG ReceivePacketSize;

}cs8900_t, *pCs8900_t;


//------------------------------------------------------------------------------
//  FUNCTION PROTOTYPES

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);

static NDIS_STATUS Cs8900aInitialize(
    OUT PNDIS_STATUS OpenErrorStatus,
    OUT PUINT SelectedMediumIndex,
    IN PNDIS_MEDIUM MediumArray,
    IN UINT MediumArraySize,
    IN NDIS_HANDLE MiniportAdapterHandle,
    IN NDIS_HANDLE WrapperConfigurationContext);


VOID Cs8900aDisableInterrupt(IN  NDIS_HANDLE MiniportAdapterContext );

VOID Cs8900aEnableInterrupt(IN  NDIS_HANDLE MiniportAdapterContext);

VOID Cs8900aHalt(IN NDIS_HANDLE MiniportAdapterContext);

VOID Cs8900aHandleInterrupt(IN NDIS_HANDLE MiniportAdapterContext);

VOID Cs8900aIsr(
    OUT PBOOLEAN InterruptRecognized,
    OUT PBOOLEAN QueueDpc,
    IN  PVOID Context
    );

NDIS_STATUS
Cs8900aQueryInformation(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_OID Oid,
    IN PVOID InformationBuffer,
    IN ULONG InformationBufferLength,
    OUT PULONG BytesWritten,
    OUT PULONG BytesNeeded
    );

NDIS_STATUS
Cs8900aReset(
    OUT PBOOLEAN AddressingReset,
    IN NDIS_HANDLE MiniportAdapterContext
    );

NDIS_STATUS
Cs8900aSend(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN PNDIS_PACKET Packet,
    IN UINT SendFlags
    );

NDIS_STATUS
Cs8900aTransferData(
    OUT PNDIS_PACKET  Packet,
    OUT PUINT  BytesTransferred,
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_HANDLE MiniportReceiveContext,
    IN UINT  ByteOffset,
    IN UINT  BytesToTransfer
    );

NDIS_STATUS
Cs8900aSetInformation(
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_OID Oid,
    IN PVOID InformationBuffer,
    IN ULONG InformationBufferLength,
    OUT PULONG BytesRead,
    OUT PULONG BytesNeeded
    );

BOOLEAN Cs8900aCheckForHang(IN NDIS_HANDLE MiniportAdapterContext);

void Cs8900aShutdown(IN NDIS_HANDLE MiniportAdapterContext);

WORD CheckForChip(pCs8900_t pEthernet);

WORD CheckReadyForTransmit(pCs8900_t pEthernet);

WORD InitializeChip(pCs8900_t pEthernet);

WORD ReadCs8900Register(WORD RegisterOffset);

void WriteCs8900Register(WORD RegisterOffset, WORD Value);

WORD cs8900aReadFromEEPROM (pCs8900_t pEthernet, WORD EEPROMAddress);

void InterruptChip(pCs8900_t pEthernet, WORD Action);

NDIS_STATUS  UpdateMediaConnectStatus(pCs8900_t pEthernet, NDIS_STATUS CurStatus);

void SetFilterType(pCs8900_t pEthernet);

UCHAR CalculateHashValue(UCHAR *pAddr);

void AddMultiCast(pCs8900_t pEthernet, UCHAR *pAddr);

void DeleteMultiCast(pCs8900_t pEthernet, UCHAR *pAddr);

void ReadMultiCastTable(pCs8900_t pEthernet, WORD *pHashTable);

void WriteMultiCastTable(pCs8900_t pEthernet, WORD *pHashTable);

void SetAllMultiCastTable(pCs8900_t pEthernet);

void ClearAllMultiCast(pCs8900_t pEthernet);

void TransferPacketToChip(pCs8900_t pEthernet);

void ProcessBufferInterrupts( pCs8900_t pEthernet, WORD InterruptEvent );

void ProcessReceiveInterrupts( pCs8900_t pEthernet, WORD InterruptEvent );

void ProcessTransmitInterrupts( pCs8900_t pEthernet, WORD InterruptEvent );


//------------------------------------------------------------------------------
// EXTERN DECLARATIONS

#ifdef __cplusplus
}
#endif

//------------------------------------------------------------------------------
// CLASS DEFINITIONS



#endif //  _SRC_DRIVERS_CS8900_CS8900A_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -