亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lan91c111_intr.c

?? 網(wǎng)絡(luò)芯片Lan91c111 驅(qū)動程序 for windows CE 4.2
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*
*    Copyright (c) Standard MicroSystems Corporation.  All Rights Reserved.
*
*				    LAN91C111 Driver for Windows CE .NET
*
*							 Revision History
*_______________________________________________________________________________
*     Author		  Date		Version		Description
*_______________________________________________________________________________
* Pramod Bhardwaj  6/18/2002	 0.1		Beta Release 
* Pramod Bhardwaj  1/22/2003     1.1		Removed some platform dependencies
* Pramod Bhardwaj  4/15/2003     2.0		Added support for alloc interrupt
*_______________________________________________________________________________
*
* Description:
*              Interrupt Service routines and other required functions for 
*  processing the interrupts.
*
*
*/
#include <Ndis.h>
#include <PKFuncs.h>
#include "LAN91C111_Adapter.h"
#include "LAN91C111_Proto.h"

#define SMSC_32BIT_RW 1

/*
Function Name : 	LAN91C111_MiniportISR
Description   :
This routine is invoked when an interrupt occurs.  If
the interrupting device is identified as ours, then the DPC
is scheduled to complete the processing.
Parameters    :
OUT PBOOLEAN     InterruptRecognized            Is it ours?
OUT PBOOLEAN     QueueMiniportHandleInterrupt   Run the DPC?
IN  NDIS_HANDLE  AdapterContext                 The Adapter structure.

  Return Value  :
  VOID
*/
VOID		LAN91C111_MiniportISR		(
										 PBOOLEAN    InterruptRecognized,
										 PBOOLEAN    QueueMiniportHandleInterrupt,
										 NDIS_HANDLE MiniportAdapterContext
										 )
{	
	USHORT	SavedBS;
	ULONG	IOBase;
	MINIPORT_ADAPTER *Adapter = (MINIPORT_ADAPTER *) MiniportAdapterContext;
	IOBase		= Adapter->IOBase;
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111:<==> Miniport ISR\r\n")));
	NdisRawReadPortUshort(Adapter->IOBase + BANK_SELECT, &SavedBS);
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,(USHORT) 2);
	NdisRawWritePortUshort(Adapter->IOBase + BANK2_INT_STS,0);
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT, SavedBS);
	*InterruptRecognized			  =
		*QueueMiniportHandleInterrupt = TRUE;
	return;
}


/*
Function Name : 	LAN91C111_MiniPortHandleInterrupt
Description   :    
This routine performs deferred processing for adapter
interrupts.  All pending interrupt conditions are
handled before exit.
Parameters    :
NDIS_HANDLE AdapterContext - Handle to the adapter structure

  Return Value  :
  VOID
*/

VOID		LAN91C111_MiniPortHandleInterrupt	(IN NDIS_HANDLE  AdapterContext)
{
	MINIPORT_ADAPTER *Adapter = (MINIPORT_ADAPTER *) AdapterContext;
	USHORT          SavedBSel,
        SavedPNR, 
        SavedPTR,
        temp;
	ULONG			IOBase,
		IntrPort;
	UCHAR			IntrSts;
	
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111:==> Miniport Handler\r\n")));
	IOBase		= Adapter->IOBase;
	IntrPort	= IOBase + BANK2_INT_STS;
	
	//Save the Bank Select..
	NdisRawReadPortUshort(IOBase + BANK_SELECT, &SavedBSel);
    NdisRawWritePortUshort(IOBase + BANK_SELECT, (USHORT) 2);
    NdisRawReadPortUshort(IOBase + BANK2_PNR, &SavedPNR);
    NdisRawReadPortUshort(IOBase + BANK2_PTR, &SavedPTR);
	
	while(1)
	{
		NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,(USHORT) 2);
		NdisRawReadPortUshort (IntrPort, &temp);
		IntrSts = LOBYTE(temp);
		if (Adapter->AllocIntPending)
			IntrSts &= (ENABLED_INTS | INT_ALLOC);
		else
			IntrSts &= ENABLED_INTS;
		
		if(!IntrSts) break;
		
		if (IntrSts & INT_RX_CMP)
			RCV_Interrupt_Handler(Adapter);
		
		if (IntrSts & INT_TX_CMP)
			TX_Interrupt_Handler(Adapter);
		
		if (IntrSts & INT_RX_OVRN)
			RX_OVRN_Interrupt_Handler(Adapter);
		
		if (IntrSts & INT_EPH_INT)
			EPH_Interrupt_Handler(Adapter);
		
		if (IntrSts & INT_ALLOC)
			ALLOC_Interrupt_Handler(Adapter);
		
		if (IntrSts & INT_MDINT)
			MD_Interrupt_Handler(Adapter);
	}
	
	//Restore the registers
    NdisRawWritePortUshort(IOBase + BANK_SELECT, 2);
    NdisRawWritePortUshort(IOBase + BANK2_PNR, SavedPNR);
    NdisRawWritePortUshort(IOBase + BANK2_PTR, SavedPTR);
    NdisRawWritePortUshort(IOBase + BANK_SELECT, SavedBSel);
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111:<== Miniport Handler\r\n")));
	return;
}

VOID		LAN91C111_MiniportEnableInterrupt				(NDIS_HANDLE MiniportAdapterContext)
{
	USHORT SavedBS;
	MINIPORT_ADAPTER    *Adapter = (MINIPORT_ADAPTER *) MiniportAdapterContext;
    
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: ==> MiniPort ENABLE Interrupt\r\n")));
	
	NdisRawReadPortUshort(Adapter->IOBase + BANK_SELECT, &SavedBS);
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,(USHORT) 2);
	NdisRawWritePortUshort(Adapter->IOBase + BANK2_INT_STS,(ENABLED_INTS << 8));
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT, SavedBS);
	
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: <== MiniPort ENABLE Interrupt\r\n")));
	return;
}


VOID		LAN91C111_MiniportDisableInterrupt			(NDIS_HANDLE MiniportAdapterContext)
{
	USHORT SavedBS;
	MINIPORT_ADAPTER    *Adapter = (MINIPORT_ADAPTER *) MiniportAdapterContext;
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: ==> MiniPort DISABLE Interrupt\r\n")));
	NdisRawReadPortUshort(Adapter->IOBase + BANK_SELECT, &SavedBS);
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,(USHORT) 2);
	NdisRawWritePortUshort(Adapter->IOBase + BANK2_INT_STS,0);
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT, SavedBS);
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: <== MiniPort DISABLE Interrupt\r\n")));
	return;
}


VOID			MD_Interrupt_Handler	(MINIPORT_ADAPTER *Adapter)
{
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: ==> MDINT Interrupt Handler\r\n")));
	
	//Acknowledge the interrupt
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,2);
	NdisRawWritePortUshort(Adapter->IOBase + BANK2_INT_STS,INT_MDINT);
	
	//Acknowledge the PHY interrupt
	ReadPhyRegister(Adapter->IOBase, 18);
	
	//Indicate to the change to the higher layer.
	if (Adapter->LinkStatus == MEDIA_CONNECTED)
	{
        NdisMIndicateStatus(Adapter->AdapterHandle,NDIS_STATUS_MEDIA_DISCONNECT,NULL,0);
		Adapter->LinkStatus = MEDIA_DISCONNECTED;
	}
	else
	{
		//Re-Negotiate the Link..
		EstablishLink(Adapter);
		//Setup Transmit Control Register
		Adapter->TCR = (USHORT)(TCR_TX_ENA | TCR_PAD_EN | TCR_MON_CSN);
		if (Adapter->Duplex == FULL_DUPLEX)
			Adapter->TCR |= TCR_SWFDUP;
		else
			Adapter->TCR &= (~TCR_SWFDUP);
		NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT, (USHORT) 0);
		NdisRawWritePortUshort(Adapter->IOBase + BANK0_TCR, Adapter->TCR);
		NdisMIndicateStatus(Adapter->AdapterHandle,NDIS_STATUS_MEDIA_CONNECT,NULL,0);
		Adapter->LinkStatus = MEDIA_CONNECTED;
	}
	NdisMIndicateStatusComplete(Adapter->AdapterHandle);
	
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111<== MDINT Interrupt\r\n")));
	return;
}

VOID		EPH_Interrupt_Handler		(MINIPORT_ADAPTER *Adapter)
{
	USHORT EPHStatus;
	USHORT temp, TempWord, PacketNumber;
	ULONG           IOBase;
    
    
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: ==> EPH Interrupt Handler\r\n")));
	IOBase = Adapter->IOBase;
	//Read the EPH Status register
	NdisRawWritePortUshort(IOBase + BANK_SELECT, (USHORT) 0);
	NdisRawReadPortUshort(IOBase + BANK0_STS, &EPHStatus);
	
	//Check for errors
	if (EPHStatus & TFS_LINKERROR)
	{
		//Acked by clearing the LE_ENABLE bit in the Control Register
		PrintDebugMsg(ZONE_INIT, (TEXT("LAN91C111: LINK_OK\r\n")));
	}
	if (EPHStatus & TFS_COUNTER)
	{
		//This is cleared by reading the ECR
		NdisRawReadPortUshort(IOBase + BANK0_CTR, &temp);
	}

	//Check if ths TXEnable bit has been cleared.
	//If cleared, indicates a critical TX error, so we will have to clear
	//the buffer space. Currently the buffer is free up. If required the 
	//packet can be requeued.
	NdisRawWritePortUshort(IOBase + BANK_SELECT,(USHORT)0);    
	NdisRawReadPortUshort(IOBase + BANK0_TCR, &TempWord);
	if (!(TempWord & TCR_TX_ENA))
	{
		//Error encountered in TX Clear the packet and set the TXENA
		NdisRawWritePortUshort(IOBase + BANK_SELECT,(USHORT)2);       
		//Read TXDONE Pkt# from FIFO Port Register
		NdisRawReadPortUshort(IOBase + BANK2_FIFOS, &PacketNumber);
		PacketNumber &= 0x007F;
		//Write to Packet Number Register
		NdisRawWritePortUshort(IOBase + BANK2_PNR,(USHORT) PacketNumber);
		NdisRawWritePortUshort(IOBase + BANK2_MMU_CMD,(USHORT) CMD_REL_SPEC);
		NdisRawReadPortUshort(IOBase + BANK2_MMU_CMD, (PUSHORT) &TempWord);
		while (TempWord & MMUCMD_BUSY)
			NdisRawReadPortUshort(IOBase + BANK2_MMU_CMD, (PUSHORT) &TempWord);
		NdisRawWritePortUshort(IOBase + BANK_SELECT,(USHORT)0);    
		NdisRawWritePortUshort(IOBase + BANK0_TCR, Adapter->TCR);		
	}
	
	//Renable the Transmitter..
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT, (USHORT) 0);
	NdisRawWritePortUshort(Adapter->IOBase + BANK0_TCR, Adapter->TCR);
	
	PrintDebugMsg(ZONE_INTR, (TEXT("LAN91C111: <== EPH Interrupt Handler\r\n")));
}


VOID		RX_OVRN_Interrupt_Handler	(MINIPORT_ADAPTER *Adapter)
{
	USHORT FIFO, MIR;
    PrintDebugMsg(ZONE_RX, (TEXT("LAN91C111: ==> RX OVRN Interrupt Handler\r\n")));
    
    //Ack the interrupt
    NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,2);
    NdisRawWritePortUshort(Adapter->IOBase + BANK2_INT_STS,INT_RX_OVRN);
    
    //Update the counter
    Adapter->Stat_RxOvrn++;
	NdisRawReadPortUshort(Adapter->IOBase + BANK2_FIFOS, &FIFO);
	NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,(USHORT) 0);
	NdisRawReadPortUshort(Adapter->IOBase + BANK0_MIR, &MIR);
	PrintDebugMsg(ZONE_RX, (TEXT("LAN91C111: MIR=%04X, FIFO=%04X\r\n"), MIR,FIFO));
	
    //Make sure the RCR is ok.
    NdisRawWritePortUshort(Adapter->IOBase + BANK_SELECT,(USHORT) 0);
    NdisRawWritePortUshort(Adapter->IOBase + BANK0_RCR, Adapter->RCR);
    
    PrintDebugMsg(ZONE_RX, (TEXT("LAN91C111: <== RX OVRN Interrupt Handler\r\n")));
    return;
}


VOID		ALLOC_Interrupt_Handler		(MINIPORT_ADAPTER *Adapter)
{
	USHORT			PacketNumber;
	MINIPORT_PACKET *Packet;
	PNDIS_PACKET	pNDISPacket;
	ULONG			IOBase;
	NDIS_STATUS		RetVal;

	
	PrintDebugMsg(ZONE_TX, (TEXT("LAN91C111: ==> Alloc Interrupt Handler\r\n")));
	
	IOBase = Adapter->IOBase;
	Adapter->AllocIntPending = FALSE;
	
	//Get the allocated packet
	NdisRawReadPortUshort(IOBase + BANK2_PNR,   (PUSHORT)&PacketNumber);
	PacketNumber = PacketNumber >> 8; //allocated packet number in higher byte
    
	//Write the allocated packet no. to PNR
	NdisRawWritePortUshort(IOBase + BANK2_PNR, PacketNumber);
	NdisStallExecution(1);
	
	if (Adapter->AllocPending.First)
	{
		//Send the packet in the Queue
		DequePacket(Adapter->AllocPending, Packet);		
		pNDISPacket = CONTAINING_RECORD(Packet,NDIS_PACKET,MiniportReserved[0]);
		LAN91C111_AdapterWriteData(Adapter, pNDISPacket, PacketNumber);
	}
	else
	{
		//Well there is nothing to send, so free this slot
		DebugBreak();
		NdisRawWritePortUshort(IOBase + BANK2_PNR, PacketNumber);
		NdisRawWritePortUshort(IOBase + BANK2_MMU_CMD,(USHORT) CMD_REL_SPEC);
	}

	//Now check if there are any other packets to send, in the AllocPending queue

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线成人av网站| 亚洲欧洲成人精品av97| 亚洲国产成人高清精品| 色综合久久久久综合| 亚洲日本成人在线观看| 欧洲精品一区二区三区在线观看| 亚洲综合色自拍一区| 欧美日韩极品在线观看一区| 免费在线观看不卡| 久久久久久毛片| 97久久超碰精品国产| 亚洲已满18点击进入久久| 欧美一区二区播放| 国产精品 日产精品 欧美精品| 国产精品福利一区二区三区| 一本大道久久a久久综合| 国产不卡免费视频| 日韩理论片一区二区| 欧美久久久久久久久久| 国产精品一区一区三区| 亚洲视频1区2区| 欧美精品 日韩| 国产精品一二三四区| 亚洲精品成人天堂一二三| 337p亚洲精品色噜噜狠狠| 国产成人av网站| 亚洲一区二区在线播放相泽| 久久午夜免费电影| 91国模大尺度私拍在线视频| 久久精品国产99久久6| 日韩理论片中文av| 欧美成人免费网站| 日本精品视频一区二区三区| 久久99在线观看| 夜夜嗨av一区二区三区中文字幕| 日韩精品在线一区二区| 色综合天天综合网国产成人综合天 | 国产精品九色蝌蚪自拍| 欧美日韩一区二区三区免费看| 久久精品72免费观看| 亚洲欧美乱综合| 久久毛片高清国产| 欧美精品日韩一区| 99久久婷婷国产| 久久精品国产亚洲5555| 亚洲高清免费观看高清完整版在线观看| 精品99久久久久久| 精品视频在线免费观看| 成人激情av网| 久草热8精品视频在线观看| 亚洲主播在线观看| 中文字幕五月欧美| 久久毛片高清国产| 欧美成人女星排名| 欧美日韩精品免费观看视频 | 99精品视频在线观看免费| 精品一区二区在线观看| 午夜私人影院久久久久| 中文字幕一区二区日韩精品绯色| 欧美成人a在线| 91精品国产综合久久婷婷香蕉 | 久久久精品天堂| 欧美一区二区三区视频免费| 欧美视频一区在线观看| 91同城在线观看| 99久免费精品视频在线观看 | 天天亚洲美女在线视频| 亚洲欧美一区二区三区久本道91| 国产欧美一区二区精品性色超碰 | 国产在线播放一区| 色婷婷综合五月| 成人av电影免费观看| 粉嫩嫩av羞羞动漫久久久 | 欧美高清精品3d| 欧美四级电影在线观看| 欧美视频中文字幕| 欧美日韩激情一区二区三区| 欧美亚洲动漫另类| 欧美视频在线一区二区三区| 欧美天天综合网| 欧美乱熟臀69xxxxxx| 欧美天堂一区二区三区| 欧美日韩色一区| 91精品在线免费| 日韩欧美一级片| 精品88久久久久88久久久| 精品国产乱码久久久久久夜甘婷婷 | 欧美激情综合五月色丁香 | 成人午夜视频在线观看| 成人国产视频在线观看| 91丨porny丨中文| 在线亚洲欧美专区二区| 欧美高清视频在线高清观看mv色露露十八| 欧美绝品在线观看成人午夜影视| 7777精品伊人久久久大香线蕉| 8x福利精品第一导航| 精品99一区二区三区| 亚洲国产高清在线观看视频| 亚洲视频一区在线| 日韩成人午夜精品| 国产一区二区三区久久悠悠色av| 国产iv一区二区三区| 色老汉一区二区三区| 8v天堂国产在线一区二区| 久久免费看少妇高潮| 日韩伦理免费电影| 日韩av电影免费观看高清完整版| 国内精品伊人久久久久影院对白| 国产丶欧美丶日本不卡视频| 91成人国产精品| 91麻豆精品91久久久久同性| 国产欧美日韩中文久久| 一区二区三区高清不卡| 国产综合色精品一区二区三区| 成人激情小说网站| 欧美在线观看视频一区二区| 日韩精品一区二区三区中文不卡| 国产精品污网站| 视频一区二区三区中文字幕| 国产一区二区美女诱惑| 精品视频一区 二区 三区| 久久无码av三级| 亚洲成人中文在线| 处破女av一区二区| 91麻豆精品国产| 亚洲欧美二区三区| 国产一区二区不卡| 欧美日韩一级视频| 中文字幕av在线一区二区三区| 午夜精品国产更新| 91色porny在线视频| 久久在线观看免费| 亚洲国产综合色| 成人国产电影网| 日韩精品在线一区| 五月婷婷久久综合| av日韩在线网站| 久久久久久久综合狠狠综合| 亚洲成人久久影院| 91美女蜜桃在线| 国产女主播在线一区二区| 秋霞av亚洲一区二区三| 在线精品视频免费播放| 精品一区二区三区免费视频| 欧美性视频一区二区三区| 亚洲欧洲日韩女同| 国产成人精品三级麻豆| 日韩欧美第一区| 日本不卡不码高清免费观看| 欧美系列一区二区| 亚洲男同性视频| 色综合久久精品| 亚洲欧洲日本在线| 不卡av在线网| 中文字幕久久午夜不卡| 激情文学综合插| 精品日韩欧美一区二区| 男男成人高潮片免费网站| 欧美男女性生活在线直播观看| 一区二区三区加勒比av| 色欧美日韩亚洲| 一区二区三区免费看视频| 91色九色蝌蚪| 玉米视频成人免费看| 日本伦理一区二区| 亚洲蜜桃精久久久久久久| 色综合久久综合网97色综合| 亚洲视频网在线直播| 99久久免费视频.com| 亚洲精品菠萝久久久久久久| 色综合久久中文字幕| 一区二区三区自拍| 91国偷自产一区二区开放时间 | 国产激情精品久久久第一区二区| 精品国产乱码久久久久久久 | 制服丝袜一区二区三区| 奇米色777欧美一区二区| 3d动漫精品啪啪一区二区竹菊| 91亚洲永久精品| 亚洲日本欧美天堂| 在线观看av一区| 亚洲妇熟xx妇色黄| 日韩欧美自拍偷拍| 国产老女人精品毛片久久| 国产喷白浆一区二区三区| 99久久亚洲一区二区三区青草| 亚洲日本va在线观看| 欧美视频在线一区二区三区 | 亚洲欧美另类图片小说| 欧美日韩一区二区在线视频| 日韩精品国产精品| 国产午夜精品一区二区三区视频| 成人a级免费电影| 一区二区三区在线播| 4438成人网| 成人不卡免费av| 亚洲一区二区三区美女| 精品精品国产高清一毛片一天堂| 国v精品久久久网| 亚洲成a人片综合在线|