Cs8900sw.h
资源名称:SMDK2440.rar [点击查看]
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:12k
源码类别:
Windows CE
开发平台:
Windows_Unix
- /*++
- THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
- ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- PARTICULAR PURPOSE.
- Copyright (c) 1998 Samsung Electronics.
- Module Name:
- cs8900sw.h
- Abstract:
- The main header for an Cirrus Logic CS8900 Miniport driver.
- Notes:
- --*/
- #ifndef _CS8900SFT_
- #define _CS8900SFT_
- #define DRIVER_MAJOR_VERSION 0x01
- #define DRIVER_MINOR_VERSION 0x00
- #define CS8900_NDIS_MAJOR_VERSION 5
- #define CS8900_NDIS_MINOR_VERSION 1
- #define MAXLOOP 0x8888
- //
- // This macro is used along with the flags to selectively
- // turn on debugging.
- //
- #if DBG
- #define IF_CS8900DEBUG(f) if (Ne2000DebugFlag & (f))
- extern ULONG Ne2000DebugFlag;
- #define CS8900_DEBUG_LOUD 0x00000001 // debugging info
- #define CS8900_DEBUG_VERY_LOUD 0x00000002 // excessive debugging info
- #define CS8900_DEBUG_LOG 0x00000004 // enable Ne2000Log
- #define CS8900_DEBUG_CHECK_DUP_SENDS 0x00000008 // check for duplicate sends
- #define CS8900_DEBUG_TRACK_PACKET_LENS 0x00000010 // track directed packet lens
- #define CS8900_DEBUG_WORKAROUND1 0x00000020 // drop DFR/DIS packets
- #define CS8900_DEBUG_CARD_BAD 0x00000040 // dump data if CARD_BAD
- #define CS8900_DEBUG_CARD_TESTS 0x00000080 // print reason for failing
- //
- // Macro for deciding whether to print a lot of debugging information.
- //
- #define IF_LOUD(A) IF_CS8900DEBUG( CS8900_DEBUG_LOUD ) { A }
- #define IF_VERY_LOUD(A) IF_CS8900DEBUG( CS8900_DEBUG_VERY_LOUD ) { A }
- //
- // Whether to use the Ne2000Log buffer to record a trace of the driver.
- //
- #define IF_LOG(A) IF_CS8900DEBUG( CS8900_DEBUG_LOG ) { A }
- extern VOID Ne2000Log(UCHAR);
- //
- // Whether to do loud init failure
- //
- #define IF_INIT(A) A
- //
- // Whether to do loud card test failures
- //
- #define IF_TEST(A) IF_CS8900DEBUG( CS8900_DEBUG_CARD_TESTS ) { A }
- //
- // Windows CE debug zones
- //
- #define ZONE_ERROR DEBUGZONE(0)
- #define ZONE_WARN DEBUGZONE(1)
- #define ZONE_FUNCTION DEBUGZONE(2)
- #define ZONE_INIT DEBUGZONE(3)
- #define ZONE_INTR DEBUGZONE(4)
- #define ZONE_RCV DEBUGZONE(5)
- #define ZONE_XMIT DEBUGZONE(6)
- #else
- //
- // This is not a debug build, so make everything quiet.
- //
- #define IF_LOUD(A)
- #define IF_VERY_LOUD(A)
- #define IF_LOG(A)
- #define IF_INIT(A)
- #define IF_TEST(A)
- #endif
- //
- // Create a macro for moving memory from place to place. Makes
- // the code more readable and portable in case we ever support
- // a shared memory CS8900 adapter.
- //
- #define CS8900_MOVE_MEM(dest,src,size) NdisMoveMemory(dest,src,size)
- //
- // The status of transmit buffers.
- //
- typedef enum {
- EMPTY = 0x00,
- FULL = 0x02
- } BUFFER_STATUS;
- //
- // Type of an interrupt.
- //
- typedef enum {
- RECEIVE = 0x01,
- TRANSMIT = 0x02,
- BUFOVERFLOW = 0x04,
- COUNTER = 0x08,
- UNKNOWN = 0x10
- } INTERRUPT_TYPE;
- //
- // Size of the ethernet header
- //
- #define CS8900_HEADER_SIZE 14
- //
- // Size of the ethernet address
- //
- #define CS8900_LENGTH_OF_ADDRESS 6
- //
- // Number of bytes allowed in a lookahead (max)
- //
- #define CS8900_MAX_LOOKAHEAD (1518 - CS8900_HEADER_SIZE)
- //
- // Maximum number of transmit buffers on the card.
- //
- //#define MAX_XMIT_BUFS 12
- //
- // Definition of a transmit buffer.
- //
- //typedef UINT XMIT_BUF;
- //
- // Number of 256-byte buffers in a transmit buffer.
- //
- #define BUFS_PER_TX 1
- //
- // Size of a single transmit buffer.
- //
- #define TX_BUF_SIZE (BUFS_PER_TX*256)
- //
- // This structure contains information about the driver
- // itself. There is only have one of these structures.
- //
- typedef struct _DRIVER_BLOCK {
- //
- // NDIS wrapper information.
- //
- NDIS_HANDLE NdisMacHandle; // returned from NdisRegisterMac
- NDIS_HANDLE NdisWrapperHandle; // returned from NdisInitializeWrapper
- //
- // Adapters registered for this Miniport driver.
- //
- struct _CS8900_ADAPTER * AdapterQueue;
- } DRIVER_BLOCK, * PDRIVER_BLOCK;
- //
- // This structure contains all the information about a single
- // adapter that this driver is controlling.
- //
- typedef struct _CS8900_ADAPTER {
- //
- // This is the handle given by the wrapper for calling ndis
- // functions.
- //
- NDIS_HANDLE MiniportAdapterHandle;
- //
- // Interrupt object.
- //
- NDIS_MINIPORT_INTERRUPT Interrupt;
- //
- // used by DriverBlock->AdapterQueue
- //
- struct _CS8900_ADAPTER * NextAdapter;
- //
- // This is a count of the number of receives that have been
- // indicated in a row. This is used to limit the number
- // of sequential receives so that one can periodically check
- // for transmit complete interrupts.
- //
- ULONG ReceivePacketCount;
- //
- // Configuration information
- //
- //
- // Physical address of the IoBaseAddress
- //
- PVOID IoBaseAddr;
- //
- // Interrupt number this adapter is using.
- //
- CHAR InterruptNumber;
- //
- // Number of multicast addresses that this adapter is to support.
- //
- UINT MulticastListMax;
- //
- // The type of bus that this adapter is running on. Either ISA or
- // MCA.
- //
- UCHAR BusType;
- //
- // InterruptType is the next interrupt that should be serviced.
- //
- UCHAR InterruptType;
- //
- // Type of CS8900 card.
- //
- UINT CardType;
- //
- // Address of the memory window.
- //
- ULONG AttributeMemoryAddress;
- ULONG AttributeMemorySize;
- //
- // Operational information.
- //
- //
- // Mapped address of the base io port.
- //
- ULONG IoPAddr;
- //
- // InterruptStatus tracks interrupt sources that still need to be serviced,
- // it is the logical OR of all card interrupts that have been received and not
- // processed and cleared. (see also INTERRUPT_TYPE definition in cs8900.h)
- //
- UCHAR InterruptStatus;
- //
- // The ethernet address currently in use.
- //
- UCHAR StationAddress[CS8900_LENGTH_OF_ADDRESS];
- //
- // The ethernet address that is burned into the adapter.
- //
- UCHAR PermanentAddress[CS8900_LENGTH_OF_ADDRESS];
- //
- // The current packet filter in use.
- //
- ULONG PacketFilter;
- //
- // Flag that is set when we are shutting down the interface
- //
- BOOLEAN ShuttingDown;
- //
- // Statistics used by Set/QueryInformation.
- //
- 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 CrcErrors; // CRC errors counted
- ULONG MissedPackets; // missed packet counted
- //
- // Reset information.
- //
- UCHAR NicMulticastRegs[8]; // contents of card multicast registers
- UCHAR NicReceiveConfig; // contents of NIC RCR
- UCHAR NicInterruptMask; // contents of NIC IMR
- //
- // The lookahead buffer size in use.
- //
- ULONG MaxLookAhead;
- //
- // CS8900 address of the beginning of the packet.
- //
- PUCHAR PacketHeaderLoc;
- //
- // Lookahead buffer
- //
- UCHAR Lookahead[CS8900_MAX_LOOKAHEAD + CS8900_HEADER_SIZE];
- //
- // List of multicast addresses in use.
- //
- CHAR Addresses[DEFAULT_MULTICASTLISTMAX][CS8900_LENGTH_OF_ADDRESS];
- } CS8900_ADAPTER, * PCS8900_ADAPTER;
- //
- // Given a MiniportContextHandle return the PCS8900_ADAPTER
- // it represents.
- //
- #define PCS8900_ADAPTER_FROM_CONTEXT_HANDLE(Handle)
- ((PCS8900_ADAPTER)(Handle))
- //
- // Given a pointer to a CS8900_ADAPTER return the
- // proper MiniportContextHandle.
- //
- #define CONTEXT_HANDLE_FROM_PCS8900_ADAPTER(Ptr)
- ((NDIS_HANDLE)(Ptr))
- //
- // Macros to extract high and low bytes of a word.
- //
- #define MSB(Value) ((UCHAR)((((ULONG)Value) >> 8) & 0xff))
- #define LSB(Value) ((UCHAR)(((ULONG)Value) & 0xff))
- //
- // What we map into the reserved section of a packet.
- // Cannot be more than 8 bytes (see ASSERT in cs8900.c).
- //
- typedef struct _MINIPORT_RESERVED {
- PNDIS_PACKET Next; // used to link in the queues (4 bytes)
- } MINIPORT_RESERVED, * PMINIPORT_RESERVED;
- //
- // Retrieve the MINIPORT_RESERVED structure from a packet.
- //
- #define RESERVED(Packet) ((PMINIPORT_RESERVED)((Packet)->MiniportReserved))
- //
- // Procedures which log errors.
- //
- typedef enum _CS8900_PROC_ID {
- cardReset,
- cardCopyDownPacket,
- cardCopyDownBuffer,
- cardCopyUp
- } CS8900_PROC_ID;
- //
- // Special error log codes.
- //
- #define CS8900_ERRMSG_CARD_SETUP (ULONG)0x01
- #define CS8900_ERRMSG_DATA_PORT_READY (ULONG)0x02
- #define CS8900_ERRMSG_HANDLE_XMIT_COMPLETE (ULONG)0x04
- //
- // Declarations for functions in cs8900.c.
- //
- NDIS_STATUS
- CS8900SetInformation(
- IN NDIS_HANDLE MiniportAdapterContext,
- IN NDIS_OID Oid,
- IN PVOID InformationBuffer,
- IN ULONG InformationBufferLength,
- OUT PULONG BytesRead,
- OUT PULONG BytesNeeded
- );
- VOID
- CS8900Shutdown(
- IN NDIS_HANDLE MiniportAdapterContext
- );
- VOID
- CS8900Halt(
- IN NDIS_HANDLE MiniportAdapterContext
- );
- NDIS_STATUS
- CS8900RegisterAdapter(
- IN PCS8900_ADAPTER Adapter,
- IN NDIS_HANDLE ConfigurationHandle,
- IN BOOLEAN ConfigError,
- IN ULONG ConfigErrorValue
- );
- NDIS_STATUS
- MiniportInitialize(
- OUT PNDIS_STATUS OpenErrorStatus,
- OUT PUINT SelectedMediumIndex,
- IN PNDIS_MEDIUM MediumArray,
- IN UINT MediumArraySize,
- IN NDIS_HANDLE MiniportAdapterHandle,
- IN NDIS_HANDLE ConfigurationHandle
- );
- NDIS_STATUS
- CS8900TransferData(
- OUT PNDIS_PACKET Packet,
- OUT PUINT BytesTransferred,
- IN NDIS_HANDLE MiniportAdapterContext,
- IN NDIS_HANDLE MiniportReceiveContext,
- IN UINT ByteOffset,
- IN UINT BytesToTransfer
- );
- NDIS_STATUS
- CS8900Send(
- IN NDIS_HANDLE MiniportAdapterContext,
- IN PNDIS_PACKET Packet,
- IN UINT Flags
- );
- NDIS_STATUS
- CS8900Reset(
- OUT PBOOLEAN AddressingReset,
- IN NDIS_HANDLE MiniportAdapterContext
- );
- NDIS_STATUS
- CS8900QueryInformation(
- IN NDIS_HANDLE MiniportAdapterContext,
- IN NDIS_OID Oid,
- IN PVOID InformationBuffer,
- IN ULONG InformationBufferLength,
- OUT PULONG BytesWritten,
- OUT PULONG BytesNeeded
- );
- VOID
- CS8900Halt(
- IN NDIS_HANDLE MiniportAdapterContext
- );
- VOID
- CS8900CancelSendPackets(
- IN NDIS_HANDLE hMiniportAdapterContext,
- IN PVOID pvCancelId
- );
- VOID
- CS8900DevicePnPEvent(
- IN NDIS_HANDLE hMiniportAdapterContext,
- IN NDIS_DEVICE_PNP_EVENT devicePnPEvent,
- IN PVOID pvInformationBuffer,
- IN ULONG ulInformationBufferLength
- );
- VOID
- CS8900AdapterShutdown(
- IN NDIS_HANDLE hMiniportAdapterContext
- );
- //
- // Interrup.c
- //
- void CS8900ReceiveEvent(PCS8900_ADAPTER Adapter, unsigned short RxEvent);
- //VOID
- //CS8900EnableInterrupt(
- // IN NDIS_HANDLE MiniportAdapterContext
- // );
- //VOID
- //CS8900DisableInterrupt(
- // IN NDIS_HANDLE MiniportAdapterContext
- // );
- VOID
- CS8900Isr(
- OUT PBOOLEAN InterruptRecognized,
- OUT PBOOLEAN QueueDpc,
- IN PVOID Context
- );
- VOID
- CS8900HandleInterrupt(
- IN NDIS_HANDLE MiniportAdapterContext
- );
- //
- // Declarations of functions in cs8900.c.
- //
- unsigned short
- CS8900ReadRegister(
- unsigned short offset
- );
- void
- CS8900WriteRegister(
- unsigned short offset,
- unsigned short data
- );
- BOOLEAN
- CS8900Initialize(
- IN PCS8900_ADAPTER Adapter
- );
- BOOLEAN
- CS8900ReadEthernetAddress(
- IN PCS8900_ADAPTER Adapter
- );
- unsigned short CS8900RequestTransmit
- (
- UINT PacketLength
- );
- void CS8900CopyTxFrame
- (
- PCHAR pPacket,
- UINT PacketLength
- );
- #endif // CS8900SFT