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

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

?? le1veisr.c

?? Zalink50114----TDMoIP芯片驅(qū)動源碼
?? C
字號:
/* le1veIsr.c - LE1VE (TDMoIP) interrupt service routine  file
*
* Copyright     2004-2007 ZTE, Inc.
* author:       ZhengQishan
* date:         2004.03
*
* modification history
*------------------------------
*
*/
#include "le1veLib.h"
#include "zl5011x.h"
#include "zl5011xAddrmap.h"
#include "zl5011xAdmMap.h"
#include "zl5011xPacMap.h"
#include "zl5011xInterrupts.h"
#include "zl5011xPac.h"
#include "le1veFpgaLib.h"
#include "zl5011xRdWr.h"
#include "zl5011xDpr.h"

extern void Ros_PortStateSend(int unit,int lport,int state);
extern int                   SysCtrlUpFlag ;

LOCAL int le1veFeiPhyIntHandleFlag = 0;

#define    LE1VE_ETHERNET_PHY_LED_STATUS 0x7c40
#define    CPLD_INT_STAUS_REG       0x7c18 
#define    CPLD_INT_CONTROL_REG     0x7c1c 

#define    LE1VE_FPGA_INT			0x01
#define    LE1VE_FRAME_INT          0x02
#define    LE1VE_ETHERNET_PHY_INT   0x04
#define    LE1VE_ZL5011X_CPU_INT0   0x08
#define    LE1VE_ZL5011X_CPU_INT1   0x10

#if 0
LOCAL void zl5011xInt1Handler(zl5011xParamsS * pZl5011xParamss);
#endif

extern zl5011xParamsS *le1ve_Zl5011xParams[];
extern void lce1fPm4354IntHandle(int slotNum);
void zl5011xQueueUpIntHandler(zl5011xParamsS *pZl5011xParams, zl5011xIsrSourcesE intSource);

void le1veFeiPhyIntHandle(int slot);

LOCAL void le1ve_CpldAllIntEnable(int slot)
{
    UINT32 value;
    volatile UINT32 *pBaseAddr;
	
    /*Disable CPLD的中斷*/
    pBaseAddr = (volatile UINT32 *)(IF_CARD_CPU_REG_BASE(slot) + CPLD_INT_CONTROL_REG);
    value = Drv_Swap32(*pBaseAddr);
    *pBaseAddr = Drv_Swap32(value & ( ~(LE1VE_FRAME_INT  |LE1VE_ETHERNET_PHY_INT | LE1VE_ZL5011X_CPU_INT0 | LE1VE_ZL5011X_CPU_INT1) ));
}

LOCAL void le1ve_CpldIntEnable(int slot,  UINT32 mask)
{
    UINT32 value;
    volatile UINT32 *pBaseAddr;
	
    /*Disable CPLD的中斷*/
    pBaseAddr = (volatile UINT32 *)(IF_CARD_CPU_REG_BASE(slot) + CPLD_INT_CONTROL_REG);
    value = Drv_Swap32(*pBaseAddr);
    *pBaseAddr = Drv_Swap32(value & ( ~(mask) ));
}

LOCAL void le1ve_CpldAllIntDisable(int slot)
{
    UINT32 value;
    volatile UINT32 *pBaseAddr;
	
    /*使能CPLD的中斷*/
    pBaseAddr = (volatile UINT32 *)(IF_CARD_CPU_REG_BASE(slot) + CPLD_INT_CONTROL_REG);
    value = Drv_Swap32(*pBaseAddr);
    *pBaseAddr = Drv_Swap32(value | ( (LE1VE_FRAME_INT |LE1VE_ETHERNET_PHY_INT  | LE1VE_ZL5011X_CPU_INT0 | LE1VE_ZL5011X_CPU_INT1) ));
}


LOCAL void le1veIntHandle(zl5011xParamsS * pZl5011xParamss)
{
    int slot;
    char intValue, value;
    volatile char *pBaseAddr;

    slot = pZl5011xParamss->slotNum;

    /*Disable Interrupt*/
    le1ve_CpldAllIntDisable(slot);
	
    pBaseAddr = (volatile char *)(IF_CARD_CPU_REG_BASE(slot) + CPLD_INT_STAUS_REG);
	intValue = *pBaseAddr;

    /*logMsg("CPLD int status: 0x%x\n", intValue ,2,3,4,5,6);*/
    if (0 == (intValue & LE1VE_FRAME_INT))
    	lce1fPm4354IntHandle(slot);
	
    if (0 == (intValue & LE1VE_ZL5011X_CPU_INT0))
    {
    	 ZL5011X_REG_READ(slot, ZL5011X_ADM_MOD_CONSTAT, (UINT32 *)&value);
    	 ZL5011X_REG_WRITE(slot, ZL5011X_ADM_MOD_CONSTAT, (value & (~ZL5011X_ENABLE_INT_0)) );
    }
	
    if (0 == (intValue & LE1VE_ZL5011X_CPU_INT1))
    {
        zl5011xIsrApiHandler();
    	/*zl5011xInt1Handler(pZl5011xParamss);*/
    }
	
    if ((0 == (intValue & LE1VE_ETHERNET_PHY_INT))  && (le1veFeiPhyIntHandleFlag == 0) )
    {
        if (OK == fwdJobAdd((FUNCPTR)le1veFeiPhyIntHandle, slot, 0, 0,0,0))
        {
		le1veFeiPhyIntHandleFlag = 1;
		le1ve_CpldIntEnable(slot, LE1VE_ETHERNET_PHY_INT);
        }
    }

    /*Enable Framer Interrupt*/
    le1ve_CpldIntEnable(slot, LE1VE_FRAME_INT);
}


void le1veFeiPhyLineStatus(int slot, UINT8 *pStatus)
{
    UINT8 *pBaseAddr;
    UINT8 value;
    
    pBaseAddr = (unsigned char *)(IF_CARD_CPU_REG_BASE(slot) + LE1VE_ETHERNET_PHY_LED_STATUS);
    value = *pBaseAddr;

    if (0 == (value & 0x2)) /*LINK UP */
    {
        *pStatus = 0x10;
    }	
    else  /*LINK Down*/
    {
        *pStatus = 0;
    }
}
#if 0
/*add by shf to init zl5011x int
  在zl5011x中有兩種中斷api和app.app中斷處理過程可以由用戶實現(xiàn),本版本中沒有
  實現(xiàn)。api中斷用于rtp統(tǒng)計,CET處理,需要被初始化,由于我們硬件上將中斷信號
  連接到了cpld,需要偽中斷處理。
  我們在接口板初始化的進入處,一次初始化。以后對每一個e1ve,t1ve板使用adddevice
  添加數(shù)據(jù)結(jié)構(gòu)
  修改了zl5011x中斷初始化和中斷刪除兩個函數(shù)*/
STATUS le1vezl5011xIntInit(int slot)
{
    zl5011xParamsS *pzl5011xParams;
    zl5011xIsrInitialiseS isrInitialise;
    zlStatusE status = ZL5011X_OK;
    if(le1ve_Zl5011xParams[slot-1] == NULL)
        return ZL5011X_ERROR;
    pzl5011xParams = le1ve_Zl5011xParams[slot-1];
    /* initialise the ISR's */
    if (status == ZL5011X_OK)
    {
       status = zl5011xIsrInitialiseStructInit(pzl5011xParams, &isrInitialise);
       /*使用我們自己的中斷,只打開api中斷,*/
       isrInitialise.apiPhysIntr =FAKE_INT;/*不真正的連接中斷*/
      
       if (status == ZL5011X_OK)
       {
          /*中斷初始化過程被修改,用假中斷號,并未真正連接*/
          status = zl5011xIsrInitialise(pzl5011xParams, &isrInitialise);
          printf("le1vezl5011xIntInit %d\n",status);

       }
    }
    return status;
}
#endif
void le1veFeiPhyIntHandle(int slot)
{
    UINT8 *pBaseAddr;
    UINT8 value;
    int linkState;
    
    /*過濾中斷*/
    taskDelay(1);
    pBaseAddr = (UINT8 *)(IF_CARD_CPU_REG_BASE(slot) + LE1VE_ETHERNET_PHY_LED_STATUS);
    value = *pBaseAddr;

    if (0 == (value & 0x2)) /*LINK UP */
    {
        linkState = 1;
    }
    else  /*LINK Down*/
    {
        linkState = 0;
    }
    if ( SysCtrlUpFlag == 1)
    {
    	Ros_PortStateSend(slot, 5, linkState);
    }

    le1veFeiPhyIntHandleFlag = 0;

   /* Enable Ethernet Phy interrupt */
   le1ve_CpldIntEnable(slot, LE1VE_ETHERNET_PHY_INT);
}
/*
int 0 - phy int 
int 1 - api int
*/
#if 0
LOCAL void zl5011xInt1Handler(zl5011xParamsS * pZl5011xParamss)
{
    int portNum;
    zlStatusE status = ZL5011X_OK;
    Uint32T temp, index= 0;
    Uint32T admIntrStatus= 0;
    Uint32T intContext= 0;
    Uint32T rollOverFlags= 0;
    zl5011xInterruptQueueDataS intr;

#ifdef _DEBUG
   Uint32T tempTraceFnFilter;
   Uint32T tempTraceCtxtFnFilter;
   Uint32T tempTraceCtxtFilter;

   if (zl5011xTraceIsrEnable == ZL5011X_FALSE)
   {
      /* disable the trace during the interrupt handler */
      tempTraceFnFilter = zl5011xTraceFnFilter;
      tempTraceCtxtFnFilter = zl5011xTraceCtxtFnFilter;
      tempTraceCtxtFilter = zl5011xTraceCtxtFilter;

      zl5011xTraceFnFilter = 0;
      zl5011xTraceCtxtFnFilter = 0;
      zl5011xTraceCtxtFilter = 0;
   }
#endif

   ZL5011X_TRACE(ZL5011X_ISR_FN_ID, "zl5011xIsrApiHandler:", 0,0,0,0,0,0);

	(void)zl5011xAdmGetInterruptStatus(pZl5011xParamss, &admIntrStatus);

	/* mask out any interrupts that are not for this interrupt pin */
	admIntrStatus &= pZl5011xParamss->interruptMasks.admMasks[ZL5011X_INTERRUPT_ONE];
	
	/* check if the PAC interrupt is active */
	if ((admIntrStatus & (ZL5011X_1BIT_MASK << ZL5011X_WAN_CLK_INTERRUPT)) != 0)
	{
		(void)zl5011xPacGetStatus(pZl5011xParamss, &temp);


        #if 0
		if ((temp & (ZL5011X_1BIT_MASK << ZL5011X_PAC_ASYNC_INT)) != 0)
		{
			if (zl5011xCetMsgQid != NULL)
			{
				(void)zl5011xHandleCetIntr(zl5011xParams);
			}
		}
		#endif
		if ((temp & ~(ZL5011X_1BIT_MASK << ZL5011X_PAC_ASYNC_INT)) != 0)
		{
			intr.interruptSource = ZL5011X_WAN_CLK_INTERRUPT;
			intr.activeInterrupts = temp & ~(ZL5011X_1BIT_MASK << ZL5011X_PAC_ASYNC_INT);

			/* call the user's function -  zl5011xDprHandler */
			fwdJobAdd ((FUNCPTR)zl5011xQueueUpIntHandler, (int)pZl5011xParamss, (int)intr.interruptSource, 0, 0, 0);
			/*(void)zl5011xIsrQueueUpInterrupts(pZl5011xParamss, &intr);*/
		}

		/* if the slew rate interrupt is enabled then need to mask it out, since it may
		be set again immediately. The other interrupts are status changes, so only
		need to reset the interrupt */

		if ((temp & (ZL5011X_1BIT_MASK << ZL5011X_DPLL_SLEW_RATE_INT)) != 0)
		{
			(void)zl5011xPacDisableInterrupts(pZl5011xParamss, ZL5011X_1BIT_MASK << ZL5011X_DPLL_SLEW_RATE_INT);
		}

		/* Now clear any interrupts that were active */
		(void)zl5011xPacClearInterrupts(pZl5011xParamss, temp);
	}

    /* check RTP counter interrupt */
    if ((admIntrStatus & (ZL5011X_1BIT_MASK << ZL5011X_RTP_STATS_INTERRUPT)) != 0)
    {
        /* find out which context it is for */
        status = zl5011xRtpGetInterruptStatus(pZl5011xParamss,
        &intContext, &rollOverFlags);

        if (status ==ZL5011X_OK)
        {
            status = zl5011xRtpUpdateStatistics(pZl5011xParamss, intContext, rollOverFlags);
        }
    }

    /* check MAC interrupt */
    if ((admIntrStatus & (ZL5011X_1BIT_MASK << ZL5011X_MAC_IF_INTERRUPT)) != 0)
    {
        /* test which port */
        for( portNum= 0; portNum < pZl5011xParamss->devLimits.lanNumLanPorts; portNum++)
        {
            (void)zl5011xPkiUpdateCounters(pZl5011xParamss, portNum);
        }

        /* check if a PCS int is active */
        intr.interruptSource = ZL5011X_MAC_IF_INTERRUPT;
        (void)zl5011xPkiGetPcsStatus(pZl5011xParamss, &(intr.activeInterrupts));

        if (intr.activeInterrupts != 0)
        {
            /* only send a message if an interrupt is set */
            (void)zl5011xIsrQueueUpInterrupts(pZl5011xParamss, &intr);
        }
    }

    /* clear interrupts in this device */
    (void)zl5011xAdmClearInterruptSource( pZl5011xParamss, admIntrStatus);



#ifdef _DEBUG
   if (zl5011xTraceIsrEnable == ZL5011X_FALSE)
   {
      /* restore the trace variables now that the interrupt has finished */
      zl5011xTraceFnFilter = tempTraceFnFilter;
      zl5011xTraceCtxtFnFilter = tempTraceCtxtFnFilter;
      zl5011xTraceCtxtFilter = tempTraceCtxtFilter;
   }
#endif
}
#endif

void le1veIntConnect(int slot)
{   
    b_cintConnect(slot - 1, (VOIDFUNCPTR)le1veIntHandle, (int)le1ve_Zl5011xParams[slot - 1]);
    b_cintEnable(slot -1);
    
    /*使能CPLD的中斷*/
    le1ve_CpldAllIntEnable(slot);
}

#if 0
void zl5011xQueueUpIntHandler(zl5011xParamsS *pZl5011xParams, zl5011xIsrSourcesE intSource)
{
    ;
}
#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久免费精品| 欧美视频日韩视频在线观看| 99久久伊人精品| 欧美一级夜夜爽| 亚洲精品成人悠悠色影视| 麻豆91精品91久久久的内涵| 91色porny蝌蚪| 国产欧美一区二区三区在线老狼| 午夜久久久影院| 91在线视频播放地址| 欧美刺激脚交jootjob| 亚洲电影一区二区| 91在线视频观看| 亚洲国产精品v| 国产一区二区在线电影| 欧美一区在线视频| 亚洲成人精品影院| 91在线精品一区二区| 国产精品污网站| 国产精品香蕉一区二区三区| 精品久久人人做人人爰| 美女免费视频一区| 欧美疯狂做受xxxx富婆| 午夜久久福利影院| 在线视频一区二区三| 亚洲女人小视频在线观看| 成人免费av资源| 中文字幕免费在线观看视频一区| 国产不卡在线播放| 久久日韩粉嫩一区二区三区| 久久精品国产成人一区二区三区| 91精品国产综合久久精品| 性做久久久久久| 在线91免费看| 裸体在线国模精品偷拍| 久久嫩草精品久久久精品| 国产久卡久卡久卡久卡视频精品| 久久综合久久久久88| 久久国产人妖系列| 精品国产制服丝袜高跟| 国产很黄免费观看久久| 国产欧美日韩精品在线| 91蝌蚪porny九色| 一卡二卡三卡日韩欧美| 3d成人h动漫网站入口| 精品一区二区三区免费| 2020国产精品久久精品美国| 国产成人综合网| 亚洲欧洲综合另类| 欧美高清精品3d| 国产伦精品一区二区三区在线观看| 久久久久久日产精品| www.欧美色图| 亚洲第一电影网| 欧美成人video| 成人动漫视频在线| 一片黄亚洲嫩模| 精品国产99国产精品| 成人av在线资源网| 亚洲国产精品久久人人爱蜜臀| 日韩一区二区免费在线观看| 国产不卡一区视频| 亚洲一区二区三区美女| 精品动漫一区二区三区在线观看| 成人免费视频一区二区| 亚洲成人精品在线观看| www久久精品| 色综合天天天天做夜夜夜夜做| 偷窥少妇高潮呻吟av久久免费| 久久综合色一综合色88| 欧美在线观看一二区| 久久精品国产99久久6| 最新国产成人在线观看| 精品国产精品网麻豆系列| 91猫先生在线| 国产一区二区精品久久99| 亚洲一区二区三区美女| 欧美激情在线看| 欧美一区二区三区在线观看视频| 国产成人综合精品三级| 青青草精品视频| 亚洲激情校园春色| 国产午夜亚洲精品羞羞网站| 欧美人成免费网站| 91免费国产在线观看| 国产一区二区视频在线播放| 亚洲国产一区视频| 18欧美乱大交hd1984| 久久网这里都是精品| 7777精品伊人久久久大香线蕉的| 99这里只有精品| 国产精品亚洲专一区二区三区| 日精品一区二区三区| 亚洲精品日韩综合观看成人91| 精品粉嫩超白一线天av| 日韩三级中文字幕| 欧美日韩高清一区二区| 欧美在线免费观看亚洲| 97se亚洲国产综合自在线观| 国产成人在线免费| 国产在线精品一区二区| 亚洲成人高清在线| 亚洲国产精品久久人人爱蜜臀| 亚洲美女免费在线| 国产精品看片你懂得| 中文字幕二三区不卡| 欧美精品一区二区蜜臀亚洲| 91精品国产综合久久福利软件 | 91麻豆精品国产| 欧美在线观看你懂的| 91色乱码一区二区三区| 99国产精品久久久久久久久久久 | 久久99国产精品麻豆| 日本欧美一区二区三区乱码| 午夜激情久久久| 偷拍与自拍一区| 免费在线观看视频一区| 日韩电影免费在线看| 日本sm残虐另类| 久久爱www久久做| 狠狠色丁香久久婷婷综| 国产精品一区2区| 成人激情av网| 91在线国产福利| 在线观看区一区二| 欧美日韩高清一区二区| 欧美一级国产精品| 久久久不卡网国产精品二区| 国产精品视频第一区| 亚洲人成网站影音先锋播放| 亚洲国产成人tv| 另类小说欧美激情| 国产精品1区2区3区| 99久久综合国产精品| 日本高清不卡aⅴ免费网站| 欧美精三区欧美精三区| 日韩欧美一级片| 国产日产欧美一区| 一区二区三区中文字幕电影 | 亚洲精品成人少妇| 丝袜a∨在线一区二区三区不卡| 日本成人在线一区| 国产精品一区专区| 91国偷自产一区二区三区成为亚洲经典 | 亚洲激情第一区| 日韩精品五月天| 国产激情精品久久久第一区二区| 日本乱码高清不卡字幕| 欧美一区二区在线播放| 国产精品丝袜一区| 五月天亚洲精品| 成人一区二区三区视频在线观看| 欧美伊人久久大香线蕉综合69| 在线播放亚洲一区| 国产精品素人视频| 免费在线欧美视频| 91亚洲精品一区二区乱码| 欧美一区永久视频免费观看| 国产精品免费视频网站| 奇米色一区二区| 色哟哟一区二区在线观看| 欧美α欧美αv大片| 一区二区在线观看视频在线观看| 久久超级碰视频| 欧美午夜片在线看| 中文字幕免费观看一区| 免费欧美在线视频| 在线欧美一区二区| 国产性做久久久久久| 麻豆专区一区二区三区四区五区| 97精品国产露脸对白| 日本一区二区三区在线不卡| 日本在线不卡视频| 一本久久精品一区二区| 中文无字幕一区二区三区| 免费观看日韩av| 欧美午夜不卡在线观看免费| 国产精品入口麻豆九色| 国产一区二区美女诱惑| 日韩免费高清av| 日韩**一区毛片| 777精品伊人久久久久大香线蕉| 一区二区三区电影在线播| 不卡视频免费播放| 国产免费成人在线视频| 极品尤物av久久免费看| 欧美肥妇bbw| 亚洲chinese男男1069| 91蝌蚪porny| 亚洲欧美国产毛片在线| av午夜精品一区二区三区| 亚洲国产精品ⅴa在线观看| 大胆欧美人体老妇| 国产欧美精品一区| 国产高清精品网站| 国产午夜精品美女毛片视频| 国产乱国产乱300精品| 亚洲国产经典视频| 成人三级伦理片| 中文字幕亚洲成人|