📄 driver.h
字号:
/******************************************************************************** * * $Id: driver.h,v 2.0.4.2 2002/12/24 07:56:36 dvi175 Exp $ * * File: Driver.h * * Optimizations: * When build in RETAIL mode, the compiler options is set to /Oxs, * which means maximum opts.(x) and favor for code space(s). * Option Ox stands for Ogityb1 and Gs, for more detail information, * type CL/? at command your DOS command prompt. * * Copyright (c) 2000-2002 Davicom Inc. All rights reserved. * ********************************************************************************/ #ifndef __WINCE_DRIVER_H__#define __WINCE_DRIVER_H__#include "types.h"#include "common.h"#define PRJ_NDIS_MAJOR_VERSION 4#define PRJ_NDIS_MINOR_VERSION 0#ifndef VENDOR_DESC#define VENDOR_DESC "Davicom Semiconductor, Inc"#endif/******************************************************************************** * * Driver behaviors * ********************************************************************************///#define IMPL_SEND_INDICATION#define IMPL_STATISTICS#define IMPL_RESET#define IMPL_SHARED_TX#define SHARED_TX_LEVEL 2//#define IMPL_DEVICE_ISR/******************************************************************************** * * PCI MAP * ********************************************************************************/#define PCI_OFFSET_ID 0x00#define PCI_OFFSET_CMD 0x04#define PCI_OFFSET_STATUS 0x04#define PCI_OFFSET_REV 0x08#define PCI_OFFSET_MISC 0x0C#define PCI_OFFSET_IO_BASE 0x10#define PCI_OFFSET_MEM_BASE 0x14#define PCI_OFFSET_SUB_ID 0x2C#define PCI_OFFSET_INT 0x3C#define PCI_OFFSET_USR 0x40#define PCI_OFFSET_PMR 0x50/****************************************************************************************** * * Ethernet definitions * *******************************************************************************************/#define ETH_MAX_FRAME_SIZE 1514#define ETH_HEADER_SIZE 14#define ETH_ADDRESS_LENGTH 6#define ETH_CRC_SIZE 4#define MAX_MULTICAST_LIST 64#define DRIVER_BUFFER_SIZE 0x5F0/****************************************************************************************** * * NIC_DRIVER_OBJECT definition * *******************************************************************************************/typedef struct _CONFIG_PARAMETER{ U32 uId; U32 uDefValue; NDIS_STRING szName;} CONFIG_PARAMETER, *PCONFIG_PARAMETER;typedef enum { CID_CONNECTION_TYPE=0, CID_SLOT_NUMBER, CID_BUFFER_PHYSICAL_ADDRESS, CID_TXBUFFER_NUMBER, CID_RXBUFFER_NUMBER, CID_ADAPTER_NUMBER, CID_IO_BASE_ADDRESS, CID_IO_RANGE, CID_IRQ_NUMBER, // irq pin or line number CID_IRQ_LEVEL, // to raise irql level CID_IRQ_GEN_TYPE, // level sensitive(pci) or latched(isa) CID_IRQ_SHARED, // shared or not CID_INTERFACE_TYPE, // isa or pci device CID_BUS_MASTER, // is a bus master or not CID_INTERMEDIATE, // is a intermediate miniport CID_CHECK_FOR_HANG_PERIOD, // in seconds CID_CHIP_STEPPING, CID_NEED_IO_SPACE, CID_NEED_INTERRUPT, /* wireless settings */ CID_WLAN_NETWORK_TYPE, CID_SIZE} DEVICE_CID_TYPE;#if 0typedef struct _SYSTEM_PARAM{ U8 szClientName[MAX_ID_LEN]; U32 uIpAddress; U8 szBSSID[IEEE_ADDR_LEN]; U8 szSSID1[IEEE_ADDR_LEN]; U8 szSSID2[IEEE_ADDR_LEN]; int nNetworkType; /* 0: ad hoc, 1: infras */ int nPowerMode; /* D0..D2 */ int nWakeupDuration; /* in KuS */ int nBeaconInterval; /* in KuS */ int nPrivacy; /* 0: disable, 1: 48bit, 2: 128 bit */ int nAuthMethod; /* 0: Open, 1: Shared key */} SYSTEM_PARAM, *PSYSTEM_PARAM;typedef struct _TRANS_PARAM{ int nShortPreemble; /* 0: false, 1: true */ int nDataRate; /* 0: for auto, others: Mbps times 10 */ int nChannel; /* 0: for auto, 1..13 */ int nTransmitPower; /* in mW */ int nTxAntenna; /* 0: for both, 1: left, 2: right */ int nRxAntenna; /* 0: for both, 1: left, 2: right */ int nRTSThreshold; /* 0..2312 */ int nRTSRetries; /* 0..? */ int nFragmentThreshold; /* 256..2312 */ int nFragmentRetries; /* 0..? */ int nDateLength; /* test purpose, 1..2312 */ int nDebugCode; /* debug purpose only */ int nRSSICode; /* debug RSSI value */ int nTransmitCode; /* debug TX command */ int nReceiveCode; /* debug RX command */ U8 szTargetAddress[IEEE_ADDR_LEN]; int nTxTimeout; int nRxTimeout; } TRANS_PARAM, *PTRANS_PARAM;#endiftypedef enum { SID_HW_STATUS, SID_OP_MODE, SID_INT_MASK, SID_INT_GEN_MASK, SID_PORT_BASE_ADDRESS, SID_PHY_NUMBER, SID_MEDIA_SUPPORTED, SID_MEDIA_IN_USE, SID_MEDIA_CONNECTION_STATUS, SID_MAXIMUM_LOOKAHEAD, SID_MAXIMUM_FRAME_SIZE, SID_MAXIMUM_TOTAL_SIZE, SID_BUFFER_SIZE, SID_MAXIMUM_SEND_PACKETS, SID_LINK_SPEED, SID_GEN_MAC_OPTIONS, SID_802_3_PERMANENT_ADDRESS, SID_802_3_CURRENT_ADDRESS, SID_802_3_MAXIMUM_LIST_SIZE, SID_802_3_MULTICAST_LIST, SID_GEN_CURRENT_PACKET_FILTER, SID_GEN_TRANSMIT_BUFFER_SPACE, SID_GEN_RECEIVE_BUFFER_SPACE, SID_GEN_TRANSMIT_BLOCK_SIZE, SID_GEN_RECEIVE_BLOCK_SIZE, SID_GEN_VENDOR_ID, SID_GEN_VENDOR_DESCRIPTION, SID_GEN_CURRENT_LOOKAHEAD, SID_GEN_DRIVER_VERSION, SID_GEN_VENDOR_DRIVER_VERSION, SID_GEN_PROTOCOL_OPTIONS, SID_SIZE} DEVICE_SID_TYPE;typedef enum { TID_GEN_XMIT_OK, TID_GEN_RCV_OK, TID_GEN_XMIT_ERROR, TID_GEN_RCV_ERROR, TID_GEN_RCV_NO_BUFFER, TID_GEN_RCV_CRC_ERROR, TID_802_3_RCV_ERROR_ALIGNMENT, TID_802_3_RCV_OVERRUN, TID_802_3_XMIT_ONE_COLLISION, TID_802_3_XMIT_MORE_COLLISIONS, TID_802_3_XMIT_DEFERRED, TID_802_3_XMIT_MAX_COLLISIONS, TID_802_3_XMIT_UNDERRUN, TID_802_3_XMIT_HEARTBEAT_FAILURE, TID_802_3_XMIT_TIMES_CRS_LOST, TID_802_3_XMIT_LATE_COLLISIONS, TID_NIC_RXPS, TID_NIC_RXCI, TID_RX_FIFO_OVERFLOW, TID_RX_FIFO_OVERFLOW_OVERFLOW, TID_SIZE} DEVICE_TID_TYPE;typedef enum{ EID_MAC_ADDRESS, EID_VENDOR_ID, EID_PRODUCT_ID, EID_SIZE} DEVICE_EID_TYPE;typedef enum{ NIC_IND_TX_IDLE=0, AID_ERROR=0x8000, AID_LARGE_INCOME_PACKET,} NIC_IND_TYPE;typedef struct _DATA_BLOCK{ CQUEUE_GEN_HEADER Header; unsigned char Buffer[DRIVER_BUFFER_SIZE];} DATA_BLOCK, *PDATA_BLOCK;/****************************************************************************************** * * NIC_DRIVER_OBJECT definition * *******************************************************************************************/class NIC_DEVICE_OBJECT;class NIC_DRIVER_OBJECT{public: NIC_DRIVER_OBJECT(NDIS_HANDLE pHandle,NDIS_HANDLE pWrapper) { m_NdisHandle = pHandle; m_NdisWrapper = pWrapper; m_bSystemHang = 0; m_bOutofResources = 0; m_pLower = NULL; }; ~NIC_DRIVER_OBJECT() { };public: // routines that may throw exceptions virtual void EDriverInitialize( OUT PNDIS_STATUS OpenErrorStatus, OUT PUINT SelectedMediaIndex, IN PNDIS_MEDIUM MediaArray, IN UINT MediaArraySize); // routines that return void or error code virtual void DriverStart(void); virtual void DriverIndication(U32); virtual void DriverSendCompleted(PCQUEUE_GEN_HEADER); virtual void DriverReceiveIndication(int,PVOID,int); NDIS_HANDLE GetNdisHandle() { return m_NdisHandle; }; NDIS_HANDLE GetNdisWrapper() { return m_NdisWrapper; }; U32 GetRecentInterruptStatus() { return m_uRecentInterruptStatus; }; PVOID DriverBindAddress(U32,U32); // miniport driver callback virtual void DriverIsr( OUT PBOOLEAN InterruptRecognized, OUT PBOOLEAN QueueInterrupt); virtual VOID DriverInterruptHandler(void); virtual NDIS_STATUS DriverQueryInformation( IN NDIS_OID Oid, IN PVOID InfoBuffer, IN ULONG InfoBufferLength, OUT PULONG BytesWritten, OUT PULONG BytesNeeded); virtual NDIS_STATUS DriverSetInformation( IN NDIS_OID Oid, IN PVOID InfoBuffer, IN ULONG InfoBufferLength, OUT PULONG BytesRead, OUT PULONG BytesNeeded); virtual VOID DriverEnableInterrupt(void); virtual VOID DriverDisableInterrupt(void); virtual BOOL DriverCheckForHang(void); virtual VOID DriverHalt(void); virtual NDIS_STATUS DriverReset(OUT PBOOLEAN); virtual NDIS_STATUS DriverSend(IN PNDIS_PACKET,IN UINT); virtual int DriverIsOutOfResource(void) { return m_bOutofResources; }; public: int m_bSystemHang; int m_bOutofResources; NIC_DEVICE_OBJECT *m_pLower; U32 m_uRecentInterruptStatus; NDIS_HANDLE m_NdisHandle; NDIS_HANDLE m_NdisWrapper; CQueue m_TQueue; };/********************************************************************************* * * External functions * *********************************************************************************/extern "C"BOOL VirtualCopy ( LPVOID lpvDest, LPVOID lpvSrc, DWORD cbSize, DWORD fdwProtect );extern "C" NIC_DEVICE_OBJECT *DeviceEntry( NIC_DRIVER_OBJECT *pDriverObject, PVOID pVoid);#endif // of __PROJECT_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -