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

📄 3c90x.h

📁 3c90x网卡的驱动(Linux环境下的)
💻 H
📖 第 1 页 / 共 4 页
字号:
#define NIC_MAXIMUM_RECEIVE_COUNT	0x80

#define LINK_SPEED_100			100000000L
#define LINK_SPEED_10			10000000L

#define ETH_ADDR_SIZE		6
#define ETH_MULTICAST_BIT	1

typedef struct _ETH_ADDR {
	UCHAR	Addr[ETH_ADDR_SIZE];
} ETH_ADDR, *PETH_ADDR;

typedef struct _NIC_RESOURCES {

	ULONG ReceiveCount;
	ULONG SendCount;
	ULONG SharedMemorySize;
	PUCHAR SharedMemoryVirtual;
	TIMER Timer;
	TASKQ hostErr_task;
    ULONG TimerInterval;
	ULONG DownPollRate;

} NIC_RESOURCES, *PNIC_RESOURCES;

//
// Statistics maintained by the driver.
//


typedef struct _NIC_STATISTICS {

	//
	// Transmit statistics.
	//
	ULONG TxFramesOk;
	ULONG TxBytesOk;
	ULONG TxFramesDeferred;
	ULONG TxSingleCollisions;
	ULONG TxMultipleCollisions;
	ULONG TxLateCollisions;
	ULONG TxCarrierLost;

	ULONG TxMaximumCollisions;
	ULONG TxSQEErrors;
	ULONG TxHWErrors;
	ULONG TxJabberError; 
	ULONG TxUnknownError;

	ULONG TxLastPackets;
	ULONG TxLastCollisions;
	ULONG TxLastDeferred;

	//
	// Receive statistics.
	//
	ULONG RxFramesOk;
	ULONG RxBytesOk;

	ULONG RxOverruns;
	ULONG RxBadSSD;
	ULONG RxAlignmentError;
	ULONG RxBadCRCError;
	ULONG RxOversizeError;

	ULONG RxNoBuffer;

	ULONG RxLastPackets;
	ULONG UpdateInterval;

	//
	// Multicasts statistics
	//
	ULONG Rx_MulticastPkts;

} NIC_STATISTICS, *PNIC_STATISTICS;
//
// Memory allocation
//
#define NIC_IO_PORT_REGISTERED			0x00000001
#define NIC_INTERRUPT_REGISTERED		0x00000002
#define NIC_SHARED_MEMORY_ALLOCATED		0x00000004
#define WAIT_TIMER_REGISTERED			0x00000008
#define NIC_TIMER_REGISTERED			0x00000010

#define MAXIMUM_TEST_BUFFERS			1
//
// This queue maintains the pending packets.
// 
typedef struct _PACKET_PENDING_QUEUE {

    PSKB Head;
    PSKB Tail;

} PACKET_PENDING_QUEUE;

typedef enum _NIC_WAIT_CASES {

    	CHECK_UPLOAD_STATUS,
    	CHECK_DOWNLOAD_STATUS,
		CHECK_DC_CONVERTER,
		CHECK_PHY_STATUS,
		CHECK_TRANSMIT_IN_PROGRESS,
		CHECK_DOWNLOAD_SELFDIRECTED,
		AUTONEG_TEST_PACKET,
		CHECK_DMA_CONTROL,
		CHECK_CARRIER_SENSE,
		NONE
} NIC_WAIT_CASES;


typedef struct _NIC_INFORMATION {

	ULONG IoBaseAddress;
	UCHAR DeviceName[8];
	UCHAR PermanentAddress[6];
    UCHAR StationAddress[6];
	ULONG ResourcesReserved;
	NIC_PCI_INFORMATION PCI;

	PUPD_LIST_ENTRY HeadUPDVirtual;
    	PDPD_LIST_ENTRY HeadDPDVirtual;
	PDPD_LIST_ENTRY TailDPDVirtual;

    	ULONG TestDPDVirtual[MAXIMUM_TEST_BUFFERS];
	ULONG TestDPDPhysical[MAXIMUM_TEST_BUFFERS];
	ULONG TestBufferVirtual[MAXIMUM_TEST_BUFFERS];
	ULONG TestBufferPhysical[MAXIMUM_TEST_BUFFERS];

	NIC_RESOURCES Resources;
	NIC_STATISTICS Statistics;
	ENET_STATISTICS EnetStatistics;
	NIC_HARDWARE_INFORMATION Hardware;
	ULONG BytesInDPDQueue;
	PDEVICE NextDevice;
	PDEVICE Device;
	BOOLEAN InTimer;
    BOOLEAN DelayStart;
	INT Index;
	PACKET_PENDING_QUEUE PendingQueue;
   	ULONG TxPendingQueueCount;
#if LINUX_VERSION_CODE >= 0x20200
	spinlock_t SpinLock_m;
	spinlock_t SpinLock_misc;
	spinlock_t SpinLock_send;
	spinlock_t SpinLock_int;
#endif
	BOOLEAN DPDRingFull;
	BOOLEAN DeviceGivenByOS;

	ULONG keepForGlobalReset;	
	NIC_WAIT_CASES WaitCases;

} NIC_INFORMATION, *PNIC_INFORMATION;







#ifndef LOBYTE
#define LOBYTE(_w) ((UCHAR)((_w) & 0xFF))
#endif

#ifndef HIBYTE
#define HIBYTE(_w) (((USHORT)(_w)) >> 8)
#endif


#ifndef LOWORD
#define LOWORD(_d) ((USHORT)((_d) & 0xFFFF))
#endif

#ifndef HIWORD
#define HIWORD(_d) (((ULONG)(_d)) >> 16)
#endif


#define NIC_READ_PORT_UCHAR(pAdapter, Register) \
	inb(pAdapter->IoBaseAddress + Register)

#define NIC_READ_PORT_USHORT(pAdapter, Register) \
	inw(pAdapter->IoBaseAddress + Register)
 
#define NIC_READ_PORT_ULONG(pAdapter, Register) \
	inl(pAdapter->IoBaseAddress + Register)

#define NIC_WRITE_PORT_UCHAR(pAdapter, Register, Value) \
	outb(Value, pAdapter->IoBaseAddress + Register)

#define NIC_WRITE_PORT_USHORT(pAdapter, Register, Value) \
	outw(Value, pAdapter->IoBaseAddress + Register)
 
#define NIC_WRITE_PORT_ULONG(pAdapter, Register, Value) \
	outl(Value, pAdapter->IoBaseAddress + Register)

#define NIC_COMMAND(pAdapter, Command) \
	NIC_WRITE_PORT_USHORT(pAdapter, INTSTATUS_COMMAND_REGISTER, Command)

#define NIC_MASK_ALL_INTERRUPT(pAdapter) { \
	NIC_COMMAND( \
        	pAdapter, \
		COMMAND_SET_INTERRUPT_ENABLE | DISABLE_ALL_INTERRUPT \
		); \
	NIC_READ_PORT_USHORT(pAdapter, INTSTATUS_COMMAND_REGISTER); \
}

#define NIC_UNMASK_ALL_INTERRUPT(pAdapter){ \
	NIC_COMMAND( \
		pAdapter, \
		COMMAND_SET_INTERRUPT_ENABLE | ENABLE_ALL_INTERRUPT \
	); \
	NIC_READ_PORT_USHORT(pAdapter, INTSTATUS_COMMAND_REGISTER); \
}

                
#define NIC_ACKNOWLEDGE_ALL_INTERRUPT(pAdapter) \
	NIC_COMMAND( \
		pAdapter, \
		COMMAND_ACKNOWLEDGE_INTERRUPT | ACKNOWLEDGE_ALL_INTERRUPT \
		)

#define NIC_ENABLE_ALL_INTERRUPT_INDICATION(pAdapter) \
	NIC_COMMAND( \
		pAdapter, \
		COMMAND_SET_INDICATION_ENABLE | ENABLE_ALL_INTERRUPT \
		)

#define NIC_DISABLE_ALL_INTERRUPT_INDICATION(pAdapter) \
	NIC_COMMAND( \
		pAdapter, \
		COMMAND_SET_INDICATION_ENABLE | DISABLE_ALL_INTERRUPT \
		)

#define COMPARE_MACS(pAddr1, pAddr2) \
	( *((PULONG)((PUCHAR)(pAddr1)+2)) == *((PULONG)((PUCHAR)(pAddr2)+2)) && \
	  *((PULONG)(pAddr1)) == *((PULONG)(pAddr2))) 

#define NIC_DELAY(A)		udelay(A)

#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define MAX(A, B) ((A) > (B) ? (A) : (B))


#ifdef DEBUG
extern ULONG debug;
#endif

#define DEBUG_INITIALIZE	0x00000001
#define DEBUG_FUNCTION		0x00000002
#define DEBUG_IOCTL		0x00000004
#define DEBUG_GET_STATISTICS	0x00000008
#define DEBUG_SEND		0x00000010
#define DEBUG_RECEIVE		0x00000020
#define DEBUG_INTERRUPT		0x00000040
#define DEBUG_ERROR		0x80000000

#ifdef DEBUG

#define DBGPRINT_INITIALIZE(A) if (debug & DEBUG_INITIALIZE) printk A
#define DBGPRINT_FUNCTION(A) if (debug & DEBUG_FUNCTION) printk A
#define DBGPRINT_SEND(A) if (debug & DEBUG_SEND) printk A
#define DBGPRINT_RECEIVE(A) if (debug & DEBUG_RECEIVE) printk A
#define DBGPRINT_INTERRUPT(A) if (debug & DEBUG_INTERRUPT) printk A
#define DBGPRINT_GET_STATISTICS(A) \
	if (debug & DEBUG_GET_STATISTICS) printk A
#define DBGPRINT_IOCTL(A) if (debug & DEBUG_IOCTL) printk A
#define DBGPRINT_ERROR(A) printk A
#define DBGPRINT_INIT(A) printk A

#else

#define DBGPRINT_INITIALIZE(A)
#define DBGPRINT_FUNCTION(A)
#define DBGPRINT_SEND(A)
#define DBGPRINT_RECEIVE(A)
#define DBGPRINT_INTERRUPT(A)
#define DBGPRINT_GET_STATISTICS(A)
#define DBGPRINT_QUERY(A)
#define DBGPRINT_SET(A)
#define DBGPRINT_IOCTL(A)
#define DBGPRINT_ERROR(A)
#define DBGPRINT_INIT(A)

#endif

#define LOG_LABEL(A, B)
#define ASSERT(A)


extern TIMER WaitTimer;
extern BOOLEAN InWaitTimer;
extern BOOLEAN DCConverterEnabledState_g;
extern ULONG TimeOutCount;
extern USHORT MediaStatus_g;
extern BOOLEAN PhyResponding_g;
extern USHORT PhyStatus_g;
extern ULONG DownListPointer_g;
extern ULONG UpListPointer_g;
extern ULONG portValue_g;
extern ULONG dmaControl_g;

extern PCHAR ProductName;
extern ULONG tc90x_SendCount[];
extern ULONG tc90x_ReceiveCount[];
extern ULONG tc90x_Index;
extern UCHAR BroadcastAddr[];

#ifdef DEBUG
extern ULONG debug;
#endif

extern INT switchdelay[];
extern INT media_select[];
extern INT full_duplex[];
extern INT downpoll[];
extern INT flowcontrol[];
//
//-------------------------- NIC.C Definitions --------------------------
//

NIC_STATUS
tc90xbc_ScanDevices(
	IN PDEVICE Device
	);

NIC_STATUS 
tc90x_FillDeviceStructure(
	IN PNIC_INFORMATION Adapter
	);

INT
NICOpen(
	IN PDEVICE Device
	);

INT
NICClose(
	IN PDEVICE Device
	);

//
//-------------------------- INIT.C Definitions --------------------------
//

VOID
tc90x_FreeAdapterResources(
	IN PNIC_INFORMATION Adapter
	);

NIC_STATUS
tc90x_RegisterAdapter(
	IN PNIC_INFORMATION Adapter
	);

NIC_STATUS
tc90x_GetAdapterProperties(
	IN PNIC_INFORMATION Adapter
    	);

NIC_STATUS
tc90x_BasicInitializeAdapter(
	IN PNIC_INFORMATION Adapter
	);

NIC_STATUS
tc90x_AllocateSharedMemory(
	IN PNIC_INFORMATION Adapter
    	);

NIC_STATUS 
tc90x_TestAdapter(
	IN PNIC_INFORMATION Adapter
	);

NIC_STATUS
tc90x_StartAdapter(
	IN PNIC_INFORMATION Adapter
    	);

VOID
ReStartAdapter(
	//IN PNIC_INFORMATION Adapter
	PVOID Adapter
    	);

//-------------------------- SEND.C Definitions --------------------------
//

INT
NICSendPacket(
	IN PSKB SocketBuffer,
	IN PDEVICE Device
	);

VOID
tc90x_TxCompleteEvent(
	IN PNIC_INFORMATION Adapter
	);

NIC_STATUS
tc90x_ResetAndEnableTransmitter(
	IN PNIC_INFORMATION Adapter
    	);


VOID
tc90x_CleanupSendLogic(
	IN PDEVICE Device
    	);



//
//-------------------------- REQUEST.C Definitions --------------------------
//


INT
NICIoctl(
	IN PDEVICE Device,
	IN PIFREQ Request,
	IN INT command
	);

VOID
NICSetReceiveMode(
	IN PDEVICE Device
	);

PENET_STATISTICS
NICGetStatistics(
	IN PDEVICE Device
	);
VOID
NICSetMulticastList(
	IN PDEVICE Device,
	IN INT NumberOfAddresses,
	PVOID AddressList
	);


USHORT
tc90x_HashAddress(
	IN PUCHAR Address
    	);


NIC_STATUS
tc90x_SetMulticastAddresses(
	IN PNIC_INFORMATION Adapter
    	);


VOID
tc90x_InitializeHashFilter(
	IN PNIC_INFORMATION Adapter
	);


//
//-------------------------- WORK.C Definitions -------------------
//

VOID
tc90x_FlowControl(
	IN PNIC_INFORMATION Adapter
	);


VOID
tc90x_HurricaneEarlyRevision(
	IN PNIC_INFORMATION Adapter
	);


NIC_STATUS 
tc90x_SoftwareWork(
	IN PNIC_INFORMATION Adapter
	);


/*NIC_STATUS
RxResetAndWork(
	IN PNIC_INFORMATION Adapter
	);*/
//
//-------------------------- AUTOSELECT.C Definitions -------------------
//

VOID 
tc90x_MainAutoSelectionRoutine(
	IN PNIC_INFORMATION Adapter,
	IN USHORT Options
	);

BOOLEAN 
tc90x_CheckDCConverter (
	IN PNIC_INFORMATION Adapter,
	IN BOOLEAN EnabledState
	);


VOID
tc90x_SetupConnector(    
	IN PNIC_INFORMATION Adapter,
 	IN CONNECTOR_TYPE NewConnector,
  	OUT PCONNECTOR_TYPE OldConnector 
  	) ;


BOOLEAN
tc90x_TryMII(    
	IN PNIC_INFORMATION Adapter,
  	IN USHORT MediaOptions 
  	);

BOOLEAN
tc90x_TryLinkBeat(   
	IN PNIC_INFORMATION Adapter,
	IN CONNECTOR_TYPE NewConnector
	);


BOOLEAN
DownloadSelfDirected(  
	IN PNIC_INFORMATION Adapter
	) ;

BOOLEAN
CheckTransmitInProgress(
	IN PNIC_INFORMATION Adapter
	);


BOOLEAN
TestPacket(    
	IN PNIC_INFORMATION Adapter
	);

BOOLEAN
GetLinkSpeed(  
	IN PNIC_INFORMATION Adapter,
	OUT PBOOLEAN handles100Mbitptr 
	) ;

//
// --------------------- EEPROM.C definitions -------------------
//

NIC_STATUS

⌨️ 快捷键说明

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