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

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

?? ssx31bsa.c

?? 海思KEY驅(qū)動(dòng)
?? C
字號(hào):

#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/errno.h>

#include <linux/slab.h>
#include <linux/delay.h>


#include "../def.h"
#include "SSX31BDrv.h"
#include "SSX31BSA.h"
#include "../SSX31.h"

extern ULONG four_bytes_align_en(ULONG ulBusAddr, ULONG ulVirAddr);

ULONG SSX31B_SendSA(SSX31BDRV_CTRL *  pDrvCtrl, dma_addr_t p_CardSA_dma_phys, ULONG ulsaid)
{

    ULONG ulSaID, ulTemp, ulRes, i;
    LONG  lIntMask;
    SSX31B_BASIC_BD * pCurSaBD = NULL;
    ULONG ulTmt = 0;
    ulRes = ERR;


    ulSaID = ulsaid;

    SplImp(&lIntMask);


    if (pDrvCtrl->ulCurrSaBdReadPtr == ((pDrvCtrl->ulCurrSaBdWritePtr + 1) & (SSX31B_SA_BDQUEUE_LEN - 1)))
    {
        PRINT("BD Queue full:BD Read:%d write %d\r\n",
            pDrvCtrl->ulCurrSaBdReadPtr,
            pDrvCtrl->ulCurrSaBdWritePtr);
        return ulRes;
    }

    pCurSaBD = &((SSX31B_BASIC_BD *)(pDrvCtrl->ulSaBDMemBase))[pDrvCtrl->ulCurrSaBdWritePtr];


    pCurSaBD->ulOpCode = SSX31B_OPER_SA_UPDATE;
//    pCurSaBD->ulInputContext = virt_to_bus ((ULONG)p_CardSA);
    pCurSaBD->ulInputContext = (ULONG)p_CardSA_dma_phys;
	
    pCurSaBD->ulInputLength =  32*4;
    pCurSaBD->ulOutputContext = ulSaID;
    

    pDrvCtrl->ulCurrSaBdWritePtr = (pDrvCtrl->ulCurrSaBdWritePtr + 1) & (SSX31B_SA_BDQUEUE_LEN - 1);
    PciWrite32(SSX31B_REG_BQWP1, pDrvCtrl->ulCurrSaBdWritePtr);

    pDrvCtrl->ulFreeSaBDs --;

    SplX(lIntMask);

    ulTmt = (DMA1_TIMEOUT_DMA1)*100 + 100000;

    for (i = 0; i < ulTmt; i ++)
    {
        UsDelay(10);


        PciRead32(SSX31B_REG_BQRP1, &pDrvCtrl->ulCurrSaBdReadPtr);
        

        PciRead32(SSX31B_REG_RQWP1, &pDrvCtrl->ulCurrSaRdWritePtr);


        if (pDrvCtrl->ulCurrSaRdWritePtr == pDrvCtrl->ulCurrSaRdReadPtr)
        {
            continue;
        }
        else
        {

            pDrvCtrl->ulCurrSaRdReadPtr = (pDrvCtrl->ulCurrSaRdReadPtr + 1) & (SSX31B_SA_RDQUEUE_LEN - 1);  



            if (pDrvCtrl->ulCurrSaRdWritePtr == pDrvCtrl->ulCurrSaRdReadPtr)
            {

                PciWrite32(SSX31B_REG_RQRP1, pDrvCtrl->ulCurrSaRdReadPtr); 

               pDrvCtrl->ulFreeSaBDs ++;
               pDrvCtrl->ulTmtSADone ++;

                ulRes = OK;
                break;
            }

        }

    }

    if (i >= ulTmt)
    {
#ifdef HI_DBG    
    	PRINT ("\r\nnot finish");
#endif	
	ulRes = ERR;
    }


    return ulRes;
}


ULONG SSX31B_GetSA(SSX31BDRV_CTRL *  pDrvCtrl, ULONG ulsaid, dma_addr_t pucSA_dma_phys)
{
    ULONG ulSaID, ulRes, i;
    LONG  lIntMask;
    SSX31B_BASIC_BD * pCurSaBD = NULL;
    SSX31B_BASIC_RD * pCurSaRD = NULL;
    
    ulRes = ERR;
    ULONG ulTmt = 0;

    ulSaID = ulsaid;

    SplImp(&lIntMask);


    if (pDrvCtrl->ulCurrSaBdReadPtr == ((pDrvCtrl->ulCurrSaBdWritePtr + 1) & (SSX31B_SA_BDQUEUE_LEN - 1)))
    {
        PRINT("BD Queue full:BD Read:%d write %d\r\n",
            pDrvCtrl->ulCurrSaBdReadPtr,
            pDrvCtrl->ulCurrSaBdWritePtr);
        return ulRes;
    }

    pCurSaBD = &((SSX31B_BASIC_BD *)(pDrvCtrl->ulSaBDMemBase))[pDrvCtrl->ulCurrSaBdWritePtr];


    pCurSaBD->ulOpCode = SSX31B_OPER_SA_GET;
//    pCurSaBD->ulOutputContext = virt_to_bus ((ULONG)pucSA);
    pCurSaBD->ulOutputContext = (ULONG)pucSA_dma_phys;
    pCurSaBD->ulInputContext = ulSaID;
    pCurSaBD->ulInputLength = 1;



    pDrvCtrl->ulCurrSaBdWritePtr = (pDrvCtrl->ulCurrSaBdWritePtr + 1) & (SSX31B_SA_BDQUEUE_LEN - 1);
    PciWrite32(SSX31B_REG_BQWP1, pDrvCtrl->ulCurrSaBdWritePtr);

    pDrvCtrl->ulFreeSaBDs --;

    SplX(lIntMask);

    ulTmt = (DMA1_TIMEOUT_DMA1)*100 + 100000;

    for (i = 0; i < ulTmt; i ++)
    {
        UsDelay(10);


        PciRead32(SSX31B_REG_BQRP1, &pDrvCtrl->ulCurrSaBdReadPtr);
        

        PciRead32(SSX31B_REG_RQWP1, &pDrvCtrl->ulCurrSaRdWritePtr);


        if (pDrvCtrl->ulCurrSaRdWritePtr == pDrvCtrl->ulCurrSaRdReadPtr)
        {
            continue;
        }
        else
        {
            pCurSaRD = &((SSX31B_BASIC_RD*)(pDrvCtrl->ulSaRDMemBase))[pDrvCtrl->ulCurrSaRdReadPtr];

            if ((pCurSaRD->ulStatus & DMA1_ERR_MASK) == MDA1_STATUS_OK)
            {
               
            }
            else
            {
                PRINT("\r\nSSX31B Get SA failed");
            }
        

            pDrvCtrl->ulCurrSaRdReadPtr = (pDrvCtrl->ulCurrSaRdReadPtr + 1) & (SSX31B_SA_RDQUEUE_LEN - 1);  



            if (pDrvCtrl->ulCurrSaRdWritePtr == pDrvCtrl->ulCurrSaRdReadPtr)
            {

                PciWrite32(SSX31B_REG_RQRP1, pDrvCtrl->ulCurrSaRdReadPtr); 

                pDrvCtrl->ulFreeSaBDs ++;

                pDrvCtrl->ulTmtSADone ++;

                ulRes = OK;
                break;
            }

        }

    }


    if (i >= ulTmt)
    {
#ifdef HI_DBG    
    	PRINT ("\r\nnot finish");
#endif	
	ulRes = ERR;
    }

    return ulRes;
}

ULONG SSX31B_PhyUpdateSA(ULONG ulPhyLink, UCHAR* pstCardSA, dma_addr_t pstCardSA_dma_phys, ULONG ulSaNum)
{
    SSX31BDRV_CTRL * pDrvCtrl = (SSX31BDRV_CTRL *)ulPhyLink;
  

    if ( ERR== SSX31B_SendSA(pDrvCtrl, pstCardSA_dma_phys, ulSaNum))
    {
        PRINT("IPSec_SendSA2Secp: IPSec_SendSA() fail");
        return ERR;
    }
    //PRINT ( "SSX31B_SendSA OK!" );

#ifdef HI_DBG
    {
            int i,diff;
     	    ULONG *szSA ;
			
	   ULONG pucSA_dma_phys;
//	    UCHAR szBuf1[160] = {0};
//	    UCHAR* szBuf = (UCHAR*) szBuf1;	    
            UCHAR *pucSA = (UCHAR *)consistent_alloc(GFP_KERNEL|GFP_DMA,PAGE_SIZE,&pucSA_dma_phys); 
            memset(pucSA,0,160);
	diff= four_bytes_align_en( pucSA_dma_phys, (ULONG)pucSA) - (ULONG)pucSA;
	    
    	if ( ERR == SSX31B_GetSA(pDrvCtrl, ulSaNum, (ULONG)pucSA_dma_phys+diff) )
    	{
	        PRINT("\r\nIPSec_SendSA2Secp: IPSec_GetSA() fail");
	      consistent_free((void *)pucSA,PAGE_SIZE,(dma_addr_t)pucSA_dma_phys);
	        return ERR;
    	}
		
    	if (memcmp (pstCardSA, pucSA+diff, 32*4) == 0 )
    	{
    		//PRINT("\r\nIPSEC SA [%d] Update Success!",ulSaNum);
    	}
    	else
    	{
    		PRINT("\r\nIPSEC SA Update fail!");

            PRINT("\r\nSA writed:");
    		szSA = (ULONG*)pstCardSA;
	        for(i = 0; i < 32; i+=4)
	        {
	            PRINT("\r\n0x%08x 0x%08x 0x%08x 0x%08x", 
	            	szSA[i], szSA[i+1], szSA[i+2], szSA[i+3] );
	        }
		
            PRINT("\r\nSA read:");
            szSA = (ULONG *)(pucSA+diff);
            for(i = 0; i < 32; i+=4)
            {
	            PRINT("\r\n0x%08x 0x%08x 0x%08x 0x%08x",
                	szSA[i], szSA[i+1], szSA[i+2], szSA[i+3] );
            }
    		
    	}
      consistent_free((void *)pucSA,PAGE_SIZE,(dma_addr_t)pucSA_dma_phys);
    		
    }
#endif
    return OK;
    
}
/****************************************************** RNG ************************************************/
/****************************************************** RNG ************************************************/
/****************************************************** RNG ************************************************/
/*
pucData  4 bytes aligned
pucData  ucLenDWNeed dwords long
*/
ULONG SSX31B_GetRng(ULONG ulPhyLink, ULONG ucLenDWNeed, UCHAR* pucData, UCHAR* pucLenDW)
{
	
    SSX31BDRV_CTRL *  pDrvCtrl = (SSX31BDRV_CTRL *)ulPhyLink;
    LONG  lIntMask;
    SSX31B_BASIC_BD * pCurBD = NULL;
    SSX31B_BASIC_RD * pCurRD = NULL;
    ULONG ulCnt = 0;
    ULONG i;
    ULONG ulTmt = 0;
    UCHAR ucRes = ERR;
    
    
    SplImp(&lIntMask);
    
    PciRead32(SSX31B_REG_RNG_STAT, &ulCnt);
    
    i = 0;
    while (ulCnt < 100)
    {
    	if (i >= 1000)
	{
		return ERR;
	}
    	
    	udelay(10);
	PciRead32(SSX31B_REG_RNG_STAT, &ulCnt);
	
	i++;
    }
    
    if ( ulCnt < ucLenDWNeed )
    {
    	*pucLenDW = (UCHAR)ulCnt;
    }
    else
    {
    	*pucLenDW = ucLenDWNeed;
    }
    
    if ( pDrvCtrl->ulCurrSaBdReadPtr == ((pDrvCtrl->ulCurrSaBdWritePtr + 1) & (SSX31B_SA_BDQUEUE_LEN - 1)) )
    {
#ifdef HI_DBG    
        PRINT("Queue full:BD Read:%d write %d\r\n",
            pDrvCtrl->ulCurrSaBdReadPtr,
            pDrvCtrl->ulCurrSaBdWritePtr );
#endif	    
	    
        return ERR;
    }

    pCurBD = &((SSX31B_BASIC_BD *)(pDrvCtrl->ulSaBDMemBase))[pDrvCtrl->ulCurrSaBdWritePtr];


    pCurBD->ulInputContext  = 0;  
    pCurBD->ulInputNum = 0;
    pCurBD->ulInputLength= (*pucLenDW)*4;
    pCurBD->ulGatherEnable &= ~CD_GATHER_ENABLE;    


    pCurBD->ulOutputContext = virt_to_bus ( (ULONG)pucData );
    /* pCurBD->ulOutLen1 = ulCnt; */
    pCurBD->ulOutputNum  = 0;
    pCurBD->ulScatterEnable &= ~CD_SCATTER_ENABLE;


    pCurBD->ulOpCode = SSX31B_OPER_RANDOM_GET;
    pCurBD->ulFlag = 0;
    

   
    pDrvCtrl->ulCurrSaBdWritePtr = (pDrvCtrl->ulCurrSaBdWritePtr + 1) & (SSX31B_SA_BDQUEUE_LEN - 1);
    PciWrite32(SSX31B_REG_BQWP1, pDrvCtrl->ulCurrSaBdWritePtr);

    pDrvCtrl->ulFreeSaBDs --;

    SplX(lIntMask);    

    ulTmt = (DMA1_TIMEOUT_DMA1 & 0xffff)*100 + 100000;

    for (i = 0; i < ulTmt; i ++)
    {
        UsDelay(10);


        PciRead32(SSX31B_REG_BQRP1, &pDrvCtrl->ulCurrSaBdReadPtr);
        

        PciRead32(SSX31B_REG_RQWP1, &pDrvCtrl->ulCurrSaRdWritePtr);


        if (pDrvCtrl->ulCurrSaRdWritePtr == pDrvCtrl->ulCurrSaRdReadPtr)
        {
            continue;
        }
        else
        {
            pCurRD = &((SSX31B_BASIC_RD*)(pDrvCtrl->ulSaRDMemBase))[pDrvCtrl->ulCurrSaRdReadPtr];

            if ((pCurRD->ulStatus & DMA1_ERR_MASK) == MDA1_STATUS_OK)
            {
               ucRes = OK;   
            }
            else
            {
#ifdef HI_DBG	    
                PRINT("\r\nSSX31B Get RNG failed. RD status %04x", pCurRD->ulStatus);
#endif		
		ucRes = ERR;
            }
        
            pDrvCtrl->ulCurrSaRdReadPtr = (pDrvCtrl->ulCurrSaRdReadPtr + 1) & (SSX31B_SA_RDQUEUE_LEN - 1); 


	    if (pDrvCtrl->ulCurrSaRdWritePtr == pDrvCtrl->ulCurrSaRdReadPtr)
            {

                PciWrite32(SSX31B_REG_RQRP1, pDrvCtrl->ulCurrSaRdReadPtr);
                pDrvCtrl->ulFreeSaBDs ++;

                break;
            }

        }

    }
    if (i >= ulTmt)
    {
#ifdef HI_DBG    
    	PRINT ("\r\nnot finish");
#endif	
	ucRes = ERR;
    }


    return ucRes;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产影片| 欧美日韩亚洲另类| www.日韩在线| 在线视频欧美精品| 欧美大肚乱孕交hd孕妇| 777奇米成人网| 久久久亚洲国产美女国产盗摄 | 91精品国产色综合久久不卡蜜臀| 欧美日韩精品系列| 久久久久久免费毛片精品| 国产精品久久毛片| 亚洲va中文字幕| 国产精品中文有码| 色乱码一区二区三区88| 日韩欧美视频一区| 久久精品视频免费| 丝袜亚洲另类欧美| 欧美亚男人的天堂| 亚洲色图欧洲色图婷婷| 丁香婷婷综合色啪| 国产欧美一区二区三区鸳鸯浴| 日本三级亚洲精品| 欧美色偷偷大香| 亚洲精品乱码久久久久| 99re66热这里只有精品3直播 | 在线免费观看日本一区| 中文字幕国产一区| 国产精品综合av一区二区国产馆| 日韩一区二区三区观看| 日韩电影一区二区三区| 欧美美女一区二区三区| 亚洲图片自拍偷拍| 欧美日韩精品一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 91麻豆6部合集magnet| 久久99国内精品| 在线成人免费观看| 日韩精品成人一区二区在线| 欧美日本不卡视频| 奇米色一区二区| 欧美不卡一区二区三区| 黄一区二区三区| 国产亚洲精品资源在线26u| 国产伦理精品不卡| 中文字幕日韩一区二区| 色老综合老女人久久久| 性做久久久久久| 精品美女一区二区| 国产精华液一区二区三区| 国产精品天美传媒沈樵| 91免费观看视频| 天堂在线亚洲视频| 欧美精品一区二区精品网| 国产成人av电影在线观看| 国产精品不卡在线观看| 在线欧美日韩精品| 麻豆一区二区三区| 亚洲国产精品二十页| 色av一区二区| 免费亚洲电影在线| 国产精品婷婷午夜在线观看| 在线视频国内一区二区| 免费xxxx性欧美18vr| 国产欧美日本一区二区三区| 色哟哟亚洲精品| 久久国产免费看| 亚洲视频一二三| 日韩欧美在线不卡| 99精品国产视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品亲子伦对白| 色偷偷一区二区三区| 久久9热精品视频| 亚洲女同女同女同女同女同69| 91精品国产综合久久婷婷香蕉| 成人在线视频一区二区| 日韩国产在线一| 综合网在线视频| 精品国产三级电影在线观看| 色婷婷综合中文久久一本| 激情综合网激情| 亚洲午夜免费视频| 国产精品少妇自拍| 欧美xxxxxxxx| 欧美性受xxxx黑人xyx性爽| 国产成人av资源| 免费看欧美女人艹b| 一区二区三区免费在线观看| 久久久久久久av麻豆果冻| 欧美日韩一区久久| 91视频观看免费| 国产91精品入口| 狂野欧美性猛交blacked| 一区二区三区小说| 国产精品国产精品国产专区不蜜| 日韩西西人体444www| 一本色道a无线码一区v| 成人精品视频一区| 精品一区二区三区不卡| 日韩电影一区二区三区四区| 亚洲免费观看在线视频| 欧美高清在线视频| 久久精品这里都是精品| 91精品国产乱码久久蜜臀| 欧美色倩网站大全免费| 91无套直看片红桃| 成人国产亚洲欧美成人综合网| 麻豆精品蜜桃视频网站| 日本成人在线电影网| 亚洲成av人片在www色猫咪| 亚洲精品视频在线看| 日韩理论电影院| 亚洲欧美日韩中文播放 | 国产精品夫妻自拍| 国产亚洲污的网站| 视频精品一区二区| 亚洲电影在线播放| 亚洲成人综合视频| 日韩精品一区第一页| 青青青伊人色综合久久| 日韩极品在线观看| 另类小说一区二区三区| 久草在线在线精品观看| 韩日av一区二区| 国产大片一区二区| 99精品在线免费| 色婷婷国产精品综合在线观看| 91热门视频在线观看| 色94色欧美sute亚洲13| 欧美三级在线看| 日韩一区二区免费在线电影 | 欧美日韩在线播放| 欧美乱妇一区二区三区不卡视频| 欧美一区二视频| 精品国产一区二区三区久久久蜜月| 精品国产一区二区亚洲人成毛片| 精品国内二区三区| 国产精品天美传媒| 亚洲五码中文字幕| 老汉av免费一区二区三区| 国产精品中文字幕日韩精品| 99热在这里有精品免费| 欧洲一区在线电影| 日韩欧美国产1| 中文字幕一区二区不卡| 亚洲成人综合网站| 国产中文字幕精品| 91年精品国产| 欧美xxxxx裸体时装秀| 综合色天天鬼久久鬼色| 日韩av电影天堂| 不卡区在线中文字幕| 欧美午夜影院一区| 久久网站最新地址| 一区二区三区在线影院| 激情综合五月天| 欧美性色欧美a在线播放| ww久久中文字幕| 一区二区三区国产| 国产精品一级在线| 欧美高清精品3d| 欧美国产欧美亚州国产日韩mv天天看完整 | 精品99久久久久久| 亚洲综合一区二区三区| 国产精品1024| 日韩一区和二区| 伊人色综合久久天天| 国产自产高清不卡| 777午夜精品视频在线播放| 一色屋精品亚洲香蕉网站| 麻豆国产精品777777在线| 91亚洲男人天堂| 久久久99免费| 美女在线观看视频一区二区| 99久久99久久精品免费观看| 欧美videofree性高清杂交| 亚洲尤物在线视频观看| 成人精品免费看| 久久色在线视频| 麻豆一区二区99久久久久| 欧美色男人天堂| 亚洲主播在线播放| 91在线观看一区二区| 久久久91精品国产一区二区精品| 香蕉加勒比综合久久 | 国产精品一级在线| 日韩欧美国产综合| 成人福利在线看| 久久美女高清视频| 久久激五月天综合精品| 777午夜精品免费视频| 亚洲高清在线精品| 欧美色倩网站大全免费| 伊人开心综合网| 一本色道久久综合精品竹菊| 亚洲欧洲99久久| 91美女片黄在线观看| 成人欧美一区二区三区1314| 成人爱爱电影网址| 亚洲色图在线看|