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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nicinterrupt.c

?? 3com 3c905網卡驅動硬件部分源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************************************************
*** Note: Copy rights resevered to Beijing Pacific Linkair Communications Co. 
***
*** File Name: Interrupt.cc
*** Purpose  : Interrupt Handlers dealing all kinds of interrup from NIC Cards
***
*** Author   : Guangzhao Tian
*** Modified : By Guangzhao Tian at 2000/9/7
***
**/

#include "NICMacro.h"
#include "NICWinReg.h"
#include "NICCommand.h"
#include "NICEeprom.h"
#include "NICData.h"
#include "NICHelper.h"
#include "NICExport.h"

#ifndef  IVEC_TO_INUM
#define IVEC_TO_INUM(intVec)    ((int) (intVec))
#endif
 
#ifndef  INUM_TO_IVEC
#define INUM_TO_IVEC(intNum)    ((VOIDFUNCPTR *) (intNum))
#endif

/**********Extern variables***********************/
extern NIC_INFORMATION  * pNic_Information;

/********************************************************
***  Just for test
**/
void Drv_ShowIntInfo(IN PNIC_INFORMATION pAdapter) 
{  

   DebugMsg("***************\n");

   DebugMsg(" Inttrupt Status Register Value : 0x%08X. \n",
                        NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,INTSTATUS_COMMAND_REGISTER) ); 
   
   NIC_COMMAND( (pAdapter->IoBaseAddress),
                   (USHORT)(COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_5) );

   DebugMsg(" Indication Enable Register Value : 0x%08X. \n",
                        NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,INDICATION_ENABLE_REGISTER) ); 

   DebugMsg(" Inttrupt Enable Register Value : 0x%08X. \n",
                        NIC_READ_PORT_USHORT(pAdapter->IoBaseAddress,INTERRUPT_ENABLE_REGISTER) ); 

   DebugMsg("***************\n");

}

/*************************************************************************
*** Hook the Interruptor Vector and Enable Interruptor
**/
NIC_STATUS Drv_InterruptHook(IN PNIC_INFORMATION pAdapter) 
{
   DebugMsg("\n************\nNow Hook the Interrupt Handler to Interruptor Vector...");

   NIC_MASK_ALL_INTERRUPT(pAdapter->IoBaseAddress) ;

   if(ERROR == NIC_INTTRUPT_Hook(pAdapter->InterruptVector, NIC_InterruptHandler,NULL) )
   {
     DebugMsg("\n Failure to Hook the Interrupt Hander to the INT Vector ! \n"); 
     return NIC_STATUS_FAILURE;
   }
   
   NIC_ENABLE_ALL_INTERRUPT_INDICATION(pAdapter->IoBaseAddress);

   NIC_UNMASK_ALL_INTERRUPT(pAdapter->IoBaseAddress);

   DebugMsg(" Done ! \n******\n");

   Drv_ShowIntInfo(pAdapter);

   NIC_INTTRUPT_ENABLE( pAdapter->InterruptVector);
 
   return NIC_STATUS_SUCCESS;
}

/****************************************************
***	This routine handles the interrupt, check each possible 
*** interrupt source to find who is calling, and switch to
*** the rountines.
**/

VOID NIC_InterruptHandler ()
{		
	USHORT intStatus = 0;
	UCHAR  nloopCount = 2;
	BOOLEAN countDownTimerEventCalled = FALSE; 
    int x;

   /* First of all disable the intrrupt, and Mask all the interrupts , 
           avoiding any interrupt to bore me

    NIC_INTTRUPT_DISABLE( pNic_Information->InterruptVector);  */

    NIC_MASK_ALL_INTERRUPT(pNic_Information->IoBaseAddress );

    DebugMsg("\n********\nWe get an Interruptor, let's do it ....\n");

	/* reading the IntStatus Registers to find who is boring*/
 	intStatus = NIC_READ_PORT_UCHAR( pNic_Information->IoBaseAddress,INTSTATUS_COMMAND_REGISTER);

	if (! (intStatus & INTSTATUS_INTERRUPT_LATCH) )
	{			
        DebugMsg("An Spurious Intterrupt occurs, Let's go sleep! \n");

        NIC_ACKNOWLEDGE_ALL_INTERRUPT(pNic_Information->IoBaseAddress);
       	NIC_UNMASK_ALL_INTERRUPT(pNic_Information->IoBaseAddress );

    /*    NIC_INTTRUPT_ENABLE( pNic_Information->InterruptVector); */
		return;
	}
	else 
	{
        DebugMsg(" Mask all Interrupts, and clear Interrrupt Bits ! \n");
        /*Clear the Interrpt Latch bits*/
        NIC_COMMAND(pNic_Information->IoBaseAddress, COMMAND_ACKNOWLEDGE_INTERRUPT | 
										            ACKNOWLEDGE_INTERRUPT_LATCH);
	}

	/* Read the interrupt status register. */
	intStatus=NIC_READ_PORT_USHORT(pNic_Information->IoBaseAddress,INTSTATUS_COMMAND_REGISTER);

    intStatus &= INTSTATUS_INTERRUPT_MASK;  /*to carve out the intrrupt relevant*/

	if (!intStatus)  /*Unkown case, maybe some thing wrong,let's go home*/
    {
        NIC_ACKNOWLEDGE_ALL_INTERRUPT(pNic_Information->IoBaseAddress);
        NIC_UNMASK_ALL_INTERRUPT(pNic_Information->IoBaseAddress );
    /*    NIC_INTTRUPT_ENABLE( pNic_Information->InterruptVector); */
		return;
    }  

    if (intStatus & INTSTATUS_HOST_ERROR)
	{	
       /*     NIC_IntHostError(pNic_Information);   */

          NIC_COMMAND_WAIT(pNic_Information,
			COMMAND_GLOBAL_RESET           | GLOBAL_RESET_MASK_NETWORK_RESET |
			GLOBAL_RESET_MASK_TP_AUI_RESET | GLOBAL_RESET_MASK_ENDEC_RESET   |
			GLOBAL_RESET_MASK_AISM_RESET   | GLOBAL_RESET_MASK_SMB_RESET     |
			GLOBAL_RESET_MASK_VCO_RESET    );
    
           Drv_ShowIntInfo(pNic_Information); 

          NIC_ENABLE_ALL_INTERRUPT_INDICATION(pNic_Information->IoBaseAddress);

    }

    if (intStatus & INTSTATUS_UPDATE_STATISTICS)	/* interrupt is cleared by reading  statistics.*/
	{	
	    NIC_IntUpdateStatistic(pNic_Information);
    }

	if (intStatus & INTSTATUS_UP_COMPLETE)
	{ 
		NIC_COMMAND( pNic_Information->IoBaseAddress ,COMMAND_ACKNOWLEDGE_INTERRUPT |
	                   	                    ACKNOWLEDGE_UP_COMPLETE);
    	NIC_IntUpComplete(pNic_Information);
    }

	if (intStatus & INTSTATUS_INTERRUPT_REQUESTED)
	{	
		NIC_COMMAND(pNic_Information->IoBaseAddress,COMMAND_ACKNOWLEDGE_INTERRUPT | 
				                 ACKNOWLEDGE_INTERRUPT_REQUESTED);

		NIC_IntCountDownTimer(pNic_Information);
			countDownTimerEventCalled = TRUE;
    }

	if (intStatus & INTSTATUS_TX_COMPLETE) 
	{	
		NIC_IntTxComplete(pNic_Information);
    }

    if ( intStatus & INTSTATUS_RX_COMPLETE )
    {
       DebugMsg(" I know that someone gives data to my Rx FIFO ! \n ");   
    }

    if (  (intStatus & INTSTATUS_LINK_EVENT) ||  (intStatus & INTSTATUS_DOWN_COMPLETE) )
	{	
		DebugMsg(" Other Interrupt we don't care.\n");
    }

    if (FALSE == countDownTimerEventCalled) 
	{	
		NIC_IntCountDownTimer(pNic_Information);
    		countDownTimerEventCalled = TRUE;
     }

    DebugMsg(" Now UnMask all interrupt! \n");

    NIC_ACKNOWLEDGE_ALL_INTERRUPT(pNic_Information->IoBaseAddress);
	NIC_UNMASK_ALL_INTERRUPT(pNic_Information->IoBaseAddress );

  /*  NIC_INTTRUPT_ENABLE( pNic_Information->InterruptVector); */
  
    DebugMsg("Interrupt be done ! \n *******************\n");

	return;
}

/*****************************************************************
***	This routine handles the host error,called by Interrupt Handler
*** to dealing the Host Error Event interrupt
**/
VOID NIC_IntHostError(IN PNIC_INFORMATION pAdapter)
{

/*	TASKQ	HostErrTask;
	HostErrTask = pAdapter->Resources.hostErr_task;

	Read the internal config. 
	NIC_COMMAND(pAdapter,COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_3);

	pAdapter->keepForGlobalReset = NIC_READ_PORT_ULONG(
								pAdapter, 
								INTERNAL_CONFIG_REGISTER); */

	DebugMsg(" \n PCI exeception,Adapter has to be globally resetted and restarted\n");

	/* Issue Global reset. I will mask the updown reset so that  I don't have to 
	   set the UpPoll, DownPoll, UpListPointer and DownListPointer. */

	NIC_COMMAND_WAIT(pAdapter,
			COMMAND_GLOBAL_RESET           | GLOBAL_RESET_MASK_NETWORK_RESET |
			GLOBAL_RESET_MASK_TP_AUI_RESET | GLOBAL_RESET_MASK_ENDEC_RESET   |
			GLOBAL_RESET_MASK_AISM_RESET   | GLOBAL_RESET_MASK_SMB_RESET     |
			GLOBAL_RESET_MASK_VCO_RESET    ); /* | GLOBAL_RESET_MASK_UP_DOWN_RESET ); */
    
    DebugMsg(" Now Card Resetting -- Done !\n");

	return;
}	


/***********************************************************
*** This routine handles the update statistics interrupt.
*** called by Interrupt handler.
**/
VOID NIC_IntUpdateStatistic(IN  NIC_INFORMATION * pAdapter)
{

	PNIC_STATISTICS pStatistics = &pAdapter->Statistics;

	USHORT retValueWord=0;
	UINT   retValueByte=0;

	USHORT rxPackets, txPackets, highPackets;
	USHORT rxBytes, txBytes, highBytes;

	/* Change the window. */
    DebugMsg(" Now Update Statistic Interuptor!\n");
	NIC_COMMAND (pAdapter->IoBaseAddress ,
		                   COMMAND_SELECT_REGISTER_WINDOW | REGISTER_WINDOW_6);

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress, CARRIER_LOST_REGISTER);
		pStatistics->TxCarrierLost += retValueByte;

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress , SQE_ERRORS_REGISTER);
		pStatistics->TxSQEErrors += retValueByte;

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress, MULTIPLE_COLLISIONS_REGISTER);
		pStatistics->TxMultipleCollisions += retValueByte;

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress, SINGLE_COLLISIONS_REGISTER);
		pStatistics->TxSingleCollisions += retValueByte;

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress, LATE_COLLISIONS_REGISTER);
		pStatistics->TxLateCollisions += retValueByte;

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress, RX_OVERRUNS_REGISTER);
		pStatistics->RxOverruns += retValueByte;

	retValueByte=NIC_READ_PORT_UCHAR(pAdapter->IoBaseAddress, FRAMES_DEFERRED_REGISTER);
		pStatistics->TxFramesDeferred += retValueByte;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天丁香久久| 国内精品嫩模私拍在线| 日韩av电影一区| 国产精品一区在线| 欧美日韩一区精品| 亚洲欧洲av色图| 韩国欧美一区二区| 欧美精品一二三四| 亚洲乱码中文字幕| 国产伦精品一区二区三区免费| 欧美综合久久久| 国产欧美视频在线观看| 另类调教123区| 欧美日韩高清在线| 亚洲免费大片在线观看| 成人av免费观看| 久久你懂得1024| 美日韩一区二区三区| 欧美日韩一区久久| 一区二区三区色| 色综合天天综合网国产成人综合天 | 久久精品国产澳门| 欧美日韩一二区| 亚洲自拍偷拍麻豆| 91福利视频网站| 一二三四区精品视频| 91原创在线视频| 亚洲色图一区二区三区| 99久久精品国产麻豆演员表| 国产女人水真多18毛片18精品视频| 激情综合亚洲精品| 精品少妇一区二区三区免费观看| 午夜免费欧美电影| 欧美一区二区日韩一区二区| 秋霞午夜av一区二区三区| 4438成人网| 蜜桃一区二区三区四区| 日韩欧美亚洲一区二区| 精品亚洲porn| 久久影院午夜片一区| 高清日韩电视剧大全免费| 国产精品美女久久久久久2018 | 精品福利一二区| 久久99热这里只有精品| 精品国产免费视频| 国产精选一区二区三区| 亚洲国产精品高清| 91麻豆国产在线观看| 亚洲成在线观看| 91麻豆精品国产无毒不卡在线观看 | 国产精品亚洲成人| 国产精品久久久久久久久免费相片| 国产91清纯白嫩初高中在线观看| 久久久久国产精品人| 99在线精品观看| 亚洲国产精品自拍| 欧美电影免费观看高清完整版在线观看| 蜜臀va亚洲va欧美va天堂| 久久久不卡网国产精品二区| 成人福利视频在线看| 亚洲自拍偷拍图区| 久久―日本道色综合久久| 99re视频精品| 青青草国产精品亚洲专区无| 久久久久久久免费视频了| 91麻豆.com| 久久成人免费电影| 一区二区三区产品免费精品久久75| 欧美日本在线一区| 国产精品资源在线| 亚洲亚洲精品在线观看| 2023国产一二三区日本精品2022| www..com久久爱| 日韩福利视频导航| 成人欧美一区二区三区黑人麻豆| 欧美日韩成人综合| a在线欧美一区| 麻豆专区一区二区三区四区五区| 中文字幕在线免费不卡| 欧美不卡视频一区| 91国偷自产一区二区三区观看| 久久精品国产99久久6| 亚洲一区二区影院| 国产精品私人影院| 精品999在线播放| 欧美挠脚心视频网站| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 99久久综合精品| 老司机一区二区| 亚洲国产人成综合网站| 欧美国产日本韩| 欧美成人a视频| 7777精品伊人久久久大香线蕉超级流畅| 国产精品1024久久| 久久99精品国产91久久来源| 亚洲一区在线观看免费| 最新热久久免费视频| 国产日产亚洲精品系列| 日韩欧美国产综合| 88在线观看91蜜桃国自产| 91麻豆成人久久精品二区三区| 国产1区2区3区精品美女| 国产综合成人久久大片91| 三级亚洲高清视频| 日韩经典中文字幕一区| 一区二区三区四区亚洲| 亚洲婷婷综合色高清在线| 国产三级精品三级| 久久精品人人爽人人爽| 亚洲精品一区二区三区蜜桃下载| 91精品国产一区二区三区| 欧美日韩成人激情| 欧美一区二区三区日韩| 69久久夜色精品国产69蝌蚪网 | 成人午夜在线视频| 丰满白嫩尤物一区二区| 国产精品一二三在| 成人免费视频一区| 成人av电影免费在线播放| 成人av免费在线播放| 成人不卡免费av| 99国产一区二区三精品乱码| 91污在线观看| 欧美在线免费播放| 91精品欧美久久久久久动漫| 欧美精品丝袜久久久中文字幕| 精品1区2区3区| 精品剧情v国产在线观看在线| 欧美mv和日韩mv的网站| 国产欧美一二三区| 亚洲激情综合网| 亚洲成人免费看| 免费欧美在线视频| 国产精品一二三区| 国产精品一卡二卡| 色妞www精品视频| 欧美少妇一区二区| 欧美成人a∨高清免费观看| 久久精品人人做人人爽人人| 国产精品第13页| 亚洲国产综合人成综合网站| 日韩高清在线一区| 国产高清在线观看免费不卡| 99精品久久只有精品| 欧美日韩国产美| 久久一日本道色综合| 成人欧美一区二区三区在线播放| 亚洲成人福利片| 国产成人在线看| 欧洲精品在线观看| 久久久精品国产免费观看同学| 久久影院视频免费| 亚洲一区二区三区激情| 美女爽到高潮91| www.成人在线| 日韩视频免费观看高清完整版在线观看 | 国产日韩欧美综合一区| 一区二区三区四区在线免费观看| 亚洲国产精品天堂| 国产高清久久久| 666欧美在线视频| 国产精品黄色在线观看| 日韩va欧美va亚洲va久久| 国产福利不卡视频| 欧美精品亚洲二区| 亚洲蜜臀av乱码久久精品| 久久精品理论片| 欧美自拍偷拍一区| 最新高清无码专区| 国产成人综合在线| 日韩一级在线观看| 亚洲小少妇裸体bbw| 不卡在线观看av| 久久婷婷国产综合精品青草| 亚洲一区二区三区不卡国产欧美| 高清在线观看日韩| 久久久99精品久久| 蜜臀久久久久久久| 欧美日韩成人激情| 伊人婷婷欧美激情| 97se亚洲国产综合自在线观| 精品国产免费人成电影在线观看四季| 亚洲国产精品久久一线不卡| 成人高清视频免费观看| 久久九九99视频| 韩国av一区二区三区| 日韩一区二区在线观看视频| 亚洲一二三四在线观看| 一本大道久久a久久综合婷婷 | 亚洲国产aⅴ成人精品无吗| 99久久久无码国产精品| 国产日本欧洲亚洲| 精品一区二区在线免费观看| 9191精品国产综合久久久久久| 亚洲午夜久久久久久久久电影网| 91免费在线看| 亚洲女人小视频在线观看| 97精品国产露脸对白| 中文字幕在线观看一区二区| 成人激情动漫在线观看|