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

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

?? ssx31asa.c

?? 海思KEY驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:

#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 "SSX31ASA.h"
#include "SSX31ADrv.h"

/****************************************************** SA ************************************************/
/****************************************************** SA ************************************************/
/****************************************************** SA ************************************************/
ULONG SSX31A_SendSA(SSX31ADRV_CTRL *  pDrvCtrl, UCHAR * p_CardSA, ULONG ulSaID)
{

    ULONG ulRes, i;
    LONG  lIntMask;
    PEBD_DESC * pCurSaBD = NULL;
    PERD_DESC * pCurSaRD = NULL;
    ULONG ulTmt = 0;

    ulRes = ERR;


    SplImp(&lIntMask);


    if (pDrvCtrl->ulCurrDMA1BdReadPtr == ((pDrvCtrl->ulCurrDMA1BdWritePtr + 1) & (SSX31A_DMA1_BDQUEUE_LEN - 1))) 
    {
#ifdef HI_DBG    
        PRINT("BD Queue full:BD Read:%d write %d\r\n",
            pDrvCtrl->ulCurrDMA1BdReadPtr,
            pDrvCtrl->ulCurrDMA1BdWritePtr);
#endif	    
        return ulRes;
    }

    pCurSaBD = &((PEBD_DESC *)(pDrvCtrl->ulDMA1BDMemBase))[pDrvCtrl->ulCurrDMA1BdWritePtr];


    pCurSaBD->ulOpCode = BD_OPCODE_SA_UPDATE;
    pCurSaBD->ulInputContext = virt_to_bus ((ULONG)p_CardSA);
    pCurSaBD->ulInputLength = 160;
    pCurSaBD->ulOutputContext = ulSaID;
    

    pDrvCtrl->ulCurrDMA1BdWritePtr = (pDrvCtrl->ulCurrDMA1BdWritePtr + 1) & (SSX31A_DMA1_BDQUEUE_LEN - 1);
    PciWrite32(SSX31A_BQWP1_RW, pDrvCtrl->ulCurrDMA1BdWritePtr);

    pDrvCtrl->ulFreeDMA1BDs --;

    SplX(lIntMask);


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

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


        PciRead32(SSX31A_BQRP1_RW, &pDrvCtrl->ulCurrDMA1BdReadPtr);
        

        PciRead32(SSX31A_RQWP1_RW, &pDrvCtrl->ulCurrDMA1RdWritePtr);


        if (pDrvCtrl->ulCurrDMA1RdWritePtr == pDrvCtrl->ulCurrDMA1RdReadPtr)
        {
            continue;
        }
        else
        {

            pCurSaRD = &((PERD_DESC*)(pDrvCtrl->ulDMA1RDMemBase))[pDrvCtrl->ulCurrDMA1RdReadPtr];

            if ((pCurSaRD->ulStatus & MASK_RD_STATUS_ERRCODE) == RD_STATUS_RDVALID)
            {
 			ulRes = OK;
               
            }
            else
            {
#ifdef HI_DBG	    
                PRINT("\r\nSSX31A send SA failed. RD status %04x", pCurSaRD->ulStatus);
#endif		
			ulRes = ERR;
            }

            pDrvCtrl->ulCurrDMA1RdReadPtr = (pDrvCtrl->ulCurrDMA1RdReadPtr + 1) & (SSX31A_DMA1_RDQUEUE_LEN - 1);  



            if (pDrvCtrl->ulCurrDMA1RdWritePtr == pDrvCtrl->ulCurrDMA1RdReadPtr)
            {

                PciWrite32(SSX31A_RQRP1_RW, pDrvCtrl->ulCurrDMA1RdReadPtr); 

               pDrvCtrl->ulFreeDMA1BDs ++;

                ulRes = OK;
                break;
            }

        }

    }

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


    return ulRes;
}



ULONG SSX31A_GetSA(SSX31ADRV_CTRL *  pDrvCtrl, ULONG ulsaid, UCHAR * pucSA)
{
    ULONG ulSaID, ulTemp, ulRes, i;
    LONG  lIntMask;
    PEBD_DESC * pCurSaBD = NULL;
    PERD_DESC * pCurSaRD = NULL;
    ULONG ulTmt = 0;
    
    ulRes = ERR;

    ulSaID = ulsaid;

    SplImp(&lIntMask);

    if (pDrvCtrl->ulCurrDMA1BdReadPtr == ((pDrvCtrl->ulCurrDMA1BdWritePtr + 1) & (SSX31A_DMA1_BDQUEUE_LEN - 1))) 
    {
#ifdef HI_DBG    
        PRINT("BD Queue full:BD Read:%d write %d\r\n",
            pDrvCtrl->ulCurrDMA1BdReadPtr,
            pDrvCtrl->ulCurrDMA1BdWritePtr);
#endif	    
        return ulRes;
    }

    pCurSaBD = &((PEBD_DESC *)(pDrvCtrl->ulDMA1BDMemBase))[pDrvCtrl->ulCurrDMA1BdWritePtr];

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

    pDrvCtrl->ulCurrDMA1BdWritePtr = (pDrvCtrl->ulCurrDMA1BdWritePtr + 1) & (SSX31A_DMA1_BDQUEUE_LEN - 1);
    PciWrite32(SSX31A_BQWP1_RW, pDrvCtrl->ulCurrDMA1BdWritePtr);

    pDrvCtrl->ulFreeDMA1BDs --;

    SplX(lIntMask);

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

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


        PciRead32(SSX31A_BQRP1_RW, &pDrvCtrl->ulCurrDMA1BdReadPtr);
        

        PciRead32(SSX31A_RQWP1_RW, &pDrvCtrl->ulCurrDMA1RdWritePtr);


        if (pDrvCtrl->ulCurrDMA1RdWritePtr == pDrvCtrl->ulCurrDMA1RdReadPtr)
        {
            continue;
        }
        else
        {
            pCurSaRD = &((PERD_DESC*)(pDrvCtrl->ulDMA1RDMemBase))[pDrvCtrl->ulCurrDMA1RdReadPtr];

            if ((pCurSaRD->ulStatus & MASK_RD_STATUS_ERRCODE) == RD_STATUS_RDVALID)
            {
 		ulRes = OK;
               
            }
            else
            {
#ifdef HI_DBG	    
                PRINT("\r\nSSX31A Get SA failed. RD status %04x", pCurSaRD->ulStatus);
#endif		
		ulRes = ERR;
            }
        
            
            pDrvCtrl->ulCurrDMA1RdReadPtr = (pDrvCtrl->ulCurrDMA1RdReadPtr + 1) & (SSX31A_DMA1_RDQUEUE_LEN - 1);  


            
            if (pDrvCtrl->ulCurrDMA1RdWritePtr == pDrvCtrl->ulCurrDMA1RdReadPtr)
            {
            
                PciWrite32(SSX31A_RQRP1_RW, pDrvCtrl->ulCurrDMA1RdReadPtr); 

                pDrvCtrl->ulFreeDMA1BDs ++;


                ulRes = OK;
                break;
            }

        }

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

ULONG SSX31A_PhyUpdateSA(ULONG ulPhyLink, UCHAR * SA,  ULONG ulSaNum)
{
    SSX31ADRV_CTRL * pDrvCtrl = (SSX31ADRV_CTRL *)ulPhyLink;
   

 

    if ( ERR== SSX31A_SendSA(pDrvCtrl, SA, ulSaNum))
    {
#ifdef HI_DBG    
        PRINT("\nSSX31A send SA fail");
#endif	
        return ERR;
    }

#ifdef HI_DBG
    {
            int i;
     	    ULONG *szSA ;
			
	    UCHAR* pucSA;
	    UCHAR szBuf[160+4] = {0};
	    pucSA =  (UCHAR*)four_bytes_align ((ULONG)szBuf);
	    
    	if ( ERR == SSX31A_GetSA(pDrvCtrl, ulSaNum, pucSA) )
    	{
	        PRINT("\r\nSSX31A get SA fail");
	        return ERR;
    	}
		
    	if (memcmp (SA, pucSA, 160) == 0 )
    	{
    		PRINT("\r\nSSX31 SA Update Success!");
    	}
    	else
    	{
    		PRINT("\r\nSSX31 SA Update fail!");

            PRINT("\r\nSA writed:");
    		szSA = (ULONG*)SA;
	        for(i = 0; i < 40; 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;
            for(i = 0; i < 40; i+=4)
            {
	            PRINT("\r\n0x%08x 0x%08x 0x%08x 0x%08x",
                	szSA[i], szSA[i+1], szSA[i+2], szSA[i+3] );
            }
    		
    	}
    		
    }
#endif
    return OK;
    
}

/****************************************************** RNG ************************************************/
/****************************************************** RNG ************************************************/
/****************************************************** RNG ************************************************/
/*
pucData  4 bytes aligned
pucData  ucLenDWNeed dwords long
*/
ULONG SSX31A_GetRng(ULONG ulPhyLink, UCHAR ucLenDWNeed, UCHAR* pucData, UCHAR* pucLenDW)
{
	
    SSX31ADRV_CTRL *  pDrvCtrl = (SSX31ADRV_CTRL *)ulPhyLink;
    LONG  lIntMask;
    PEBD_DESC * pCurBD = NULL;
    PERD_DESC * pCurRD = NULL;
    ULONG ulCnt = 0;
    ULONG i;
    ULONG ulTmt = 0;
    UCHAR ucRes = ERR;
    
    
    SplImp(&lIntMask);
    
    PciRead32(SSX31A_RNG_STAT_R, &ulCnt);
    
    if ( ulCnt < ucLenDWNeed )
    {
    	*pucLenDW = (UCHAR)ulCnt;
    }
    else
    {
    	*pucLenDW = ucLenDWNeed;
    }
    
    if ( pDrvCtrl->ulCurrDMA1BdReadPtr == ((pDrvCtrl->ulCurrDMA1BdWritePtr + 1) & (SSX31A_DMA1_BDQUEUE_LEN - 1)) )
    {
#ifdef HI_DBG    
        PRINT("Queue full:BD Read:%d write %d\r\n",
            pDrvCtrl->ulCurrDMA1BdReadPtr,
            pDrvCtrl->ulCurrDMA1BdWritePtr );
#endif	    
	    
        return ERR;
    }

    pCurBD = &((PEBD_DESC *)(pDrvCtrl->ulDMA1BDMemBase))[pDrvCtrl->ulCurrDMA1BdWritePtr];


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


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


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

   
    pDrvCtrl->ulCurrDMA1BdWritePtr = (pDrvCtrl->ulCurrDMA1BdWritePtr + 1) & (SSX31A_DMA1_BDQUEUE_LEN - 1);
    PciWrite32(SSX31A_BQWP1_RW, pDrvCtrl->ulCurrDMA1BdWritePtr);

    pDrvCtrl->ulFreeDMA1BDs --;

    SplX(lIntMask);    

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

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


        PciRead32(SSX31A_BQRP1_RW, &pDrvCtrl->ulCurrDMA1BdReadPtr);

        PciRead32(SSX31A_RQWP1_RW, &pDrvCtrl->ulCurrDMA1RdWritePtr);


        if (pDrvCtrl->ulCurrDMA1RdWritePtr == pDrvCtrl->ulCurrDMA1RdReadPtr)
        {
            continue;
        }
        else
        {
            pCurRD = &((PERD_DESC*)(pDrvCtrl->ulDMA1RDMemBase))[pDrvCtrl->ulCurrDMA1RdReadPtr];

            if ((pCurRD->ulStatus & MASK_RD_STATUS_ERRCODE) == RD_STATUS_RDVALID)
            {
               ucRes = OK;   
            }
            else
            {
#ifdef HI_DBG	    
                PRINT("\r\nSSX31A Get RNG failed. RD status %04x", pCurRD->ulStatus);
#endif		
		ucRes = ERR;
            }
        
            pDrvCtrl->ulCurrDMA1RdReadPtr = (pDrvCtrl->ulCurrDMA1RdReadPtr + 1) & (SSX31A_DMA1_RDQUEUE_LEN - 1);  


            if (pDrvCtrl->ulCurrDMA1RdWritePtr == pDrvCtrl->ulCurrDMA1RdReadPtr)
            {
                PciWrite32(SSX31A_RQRP1_RW, pDrvCtrl->ulCurrDMA1RdReadPtr); 

                pDrvCtrl->ulFreeDMA1BDs ++;

                break;
            }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产视频一区| 成人在线一区二区三区| 国内精品嫩模私拍在线| 国产高清精品在线| 欧美剧情电影在线观看完整版免费励志电影 | 高清不卡在线观看av| 91丨九色丨黑人外教| 精品国产青草久久久久福利| 亚洲精品中文字幕乱码三区 | 国产米奇在线777精品观看| 一本大道久久a久久精二百| 久久一区二区三区四区| 亚洲午夜在线电影| av成人免费在线观看| 精品国产一区二区三区av性色| 一区二区三区四区av| 成人免费毛片嘿嘿连载视频| 精品国产乱码久久久久久蜜臀 | 久久精品国产99久久6| 欧洲国产伦久久久久久久| 国产精品久久看| 国产综合久久久久影院| 91精品国产综合久久久久久漫画 | 欧美亚洲国产怡红院影院| 中文字幕在线免费不卡| 国产jizzjizz一区二区| 久久久精品综合| 国产在线精品一区二区不卡了 | 欧美专区日韩专区| 亚洲日穴在线视频| 91在线看国产| 亚洲日韩欧美一区二区在线| 5566中文字幕一区二区电影| 午夜欧美视频在线观看| 欧美午夜在线一二页| 亚洲国产一二三| 欧美日韩不卡一区二区| 亚洲h在线观看| 欧美一区中文字幕| 日韩国产一二三区| 欧美哺乳videos| 国精产品一区一区三区mba视频| 久久综合久久鬼色中文字| 国产综合成人久久大片91| 国产三级精品在线| av激情成人网| 亚洲愉拍自拍另类高清精品| 欧美日韩在线三区| 久久国产精品色婷婷| 久久精品一区四区| 成人午夜电影网站| 一区二区三区在线视频播放| 777亚洲妇女| 国产麻豆日韩欧美久久| 国产精品久久网站| 精品视频在线免费看| 久久成人av少妇免费| 欧美国产综合一区二区| 91黄色免费网站| 欧美a级一区二区| 国产女同互慰高潮91漫画| 色婷婷精品久久二区二区蜜臀av| 五月天一区二区三区| 久久久久国产精品免费免费搜索| www.亚洲在线| 日韩电影一二三区| 亚洲国产精品精华液2区45| 欧美性xxxxxxxx| 国产一区 二区| 亚洲综合久久av| 久久久五月婷婷| 欧美日韩视频在线观看一区二区三区| 久久精品久久久精品美女| 亚洲欧洲日韩av| 精品久久五月天| 欧美综合视频在线观看| 国产麻豆视频一区二区| 亚洲电影激情视频网站| 中文字幕精品一区二区三区精品| 欧美三级在线视频| 不卡区在线中文字幕| 美女脱光内衣内裤视频久久网站| 亚洲欧洲精品一区二区三区| 日韩一区二区在线播放| 在线影院国内精品| 国产成人一级电影| 蜜臀av一区二区| 亚洲国产中文字幕在线视频综合 | 欧美人与禽zozo性伦| 国产不卡在线播放| 蜜臀va亚洲va欧美va天堂| 一区二区三区欧美在线观看| 国产女人aaa级久久久级| 日韩精品一区二区三区四区视频| 欧美在线观看视频一区二区| 成年人网站91| 国产成人av电影在线| 久久精品二区亚洲w码| 丝袜亚洲精品中文字幕一区| 尤物在线观看一区| 18成人在线视频| 国产色91在线| 久久久国际精品| 久久五月婷婷丁香社区| 日韩欧美一级二级三级久久久| 欧美日韩一级视频| 日本电影欧美片| 色噜噜狠狠色综合中国| 91视视频在线观看入口直接观看www | 久久99深爱久久99精品| 午夜久久电影网| 亚洲第一精品在线| 亚洲一二三级电影| 亚洲免费在线观看视频| 日韩毛片一二三区| 亚洲欧美一区二区三区久本道91 | 成人av第一页| 99综合电影在线视频| 成人不卡免费av| 91亚洲午夜精品久久久久久| 97国产一区二区| 色先锋久久av资源部| 欧美色倩网站大全免费| 欧美色手机在线观看| 3d成人动漫网站| 精品人在线二区三区| 久久久久久久久99精品| 欧美国产一区二区| **欧美大码日韩| 亚洲小少妇裸体bbw| 日本视频中文字幕一区二区三区| 免费久久99精品国产| 久久er精品视频| 国产不卡一区视频| 一本色道久久综合亚洲91| 欧美色爱综合网| 日韩久久久精品| 国产精品视频线看| 亚洲一区二区黄色| 美女mm1313爽爽久久久蜜臀| 国产成人自拍在线| 色婷婷精品久久二区二区蜜臀av| 欧美日韩精品是欧美日韩精品| 日韩免费电影网站| 亚洲国产电影在线观看| 亚洲激情图片一区| 另类调教123区| 99免费精品在线观看| 欧美人妇做爰xxxⅹ性高电影 | 国产精品成人免费精品自在线观看| 久久超碰97中文字幕| 国产成人亚洲综合a∨婷婷图片 | 成人一级黄色片| 欧美午夜精品久久久| 亚洲精品一区二区三区精华液 | 久久在线观看免费| 亚洲色图视频免费播放| 看电影不卡的网站| 色悠久久久久综合欧美99| 日韩一二三四区| 亚洲精品视频免费看| 极品少妇xxxx精品少妇偷拍| 91热门视频在线观看| 精品久久人人做人人爱| 一区二区三区中文字幕| 国产乱人伦偷精品视频不卡| 欧美性做爰猛烈叫床潮| 国产欧美日韩另类视频免费观看| 亚洲成人午夜电影| 成人av先锋影音| 精品国产sm最大网站免费看| 亚洲一级二级三级在线免费观看| 国产成人午夜视频| 日韩午夜av一区| 亚洲一区二区三区免费视频| 国产成人精品aa毛片| 日韩一区二区三区四区五区六区| 亚洲精品久久久蜜桃| 国产精品18久久久| 日韩欧美精品在线| 午夜精品久久久久久久久| 色综合久久久久久久| 国产精品色噜噜| 国产福利精品一区| 欧美电影免费观看高清完整版 | 老司机免费视频一区二区| 在线看国产日韩| 亚洲人成在线播放网站岛国| 丁香另类激情小说| 久久无码av三级| 国产乱码一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 亚洲成人av一区二区| 久久久午夜电影| 国产综合色产在线精品| 精品日韩一区二区| 激情五月婷婷综合网| 精品久久久久久久人人人人传媒| 裸体一区二区三区| 日韩一区二区在线观看|