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

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

?? sc2410_usb_ser.c

?? usb device driver for samsung2410
?? C
?? 第 1 頁 / 共 4 頁
字號:
					    NULL,
					    (LPBYTE)(&pHWHead->dwIOLen), 
					    &dwDataSize);
	}

	RegCloseKey (hKey);

	if (regError != ERROR_SUCCESS) 
	{
		DEBUGMSG(1,(TEXT("Failed to get serial registry values, Error 0x%X\r\n"),
																		regError));
		return (FALSE);
	}

	DEBUGMSG(1,(TEXT("SerInit - Devindex %d, IRQ %d, IOB %X, IOLen %X \r\n"),
					pHWHead->dwDevIndex,
					pHWHead->dwIRQ,
					pHWHead->dwIOBase,
					pHWHead->dwIOLen));

	return (TRUE); 
}



/*************************************************************************
 @doc OEM 
 @func PVOID | SerInit | Initializes device identified by argument.
 *  This routine sets information controlled by the user
 *  such as Line control and baud rate. It can also initialize events and
 *  interrupts, thereby indirectly managing initializing hardware buffers.
 *  Exported only to driver, called only once per process.
 *
 @rdesc The return value is a PVOID to be passed back into the HW
 dependent layer when HW functions are called.
 ************************************************************************/
static
PVOID SerInit( ULONG   Identifier, // @parm Device identifier.
               PVOID   pMddHead,   // @parm First argument to mdd callbacks.
	       PHWOBJ  pHWObj )    // @parm Pointer to our own HW OBJ for this device

{
	PSER_INFO pHWHead;
	PHYSICAL_ADDRESS PhysicalAddress = {0,0};
	ULONG WaitReturn; //Jonathan01_0915
        
        if(hUSBAcInIntr) //edyeh1108
      	    hUSBAcInIntr = CreateEvent(NULL, FALSE, FALSE,TEXT("PNA500:AC-IN Event")); 

        
        //Jonathan01_0915 start	
        if(!pDriverGlobals)
        {
           pDriverGlobals = (PDRIVER_GLOBALS) VirtualAllocCopy(DRIVER_GLOBALS_PHYSICAL_MEMORY_SIZE,(char *)TEXT("BLKLGT: DRIVER_GLOBALS"), (PVOID)DRIVER_GLOBALS_PHYSICAL_MEMORY_START);
           if(!pDriverGlobals)
	   {
		    return(NULL);
           }
        }
    
        if(!s2410IOP)
        {
            s2410IOP = (volatile IOPreg *) VirtualAllocCopy(0x400,(char *)TEXT("IOP: GPIO_BASE_VIRTUAL"), (PVOID)IOP_BASE);
            if(!s2410IOP)
	           {
	           	if (pDriverGlobals)
                    VirtualFree((PVOID)pDriverGlobals, 0, MEM_RELEASE);
	       	    return(NULL);
            }
        } 
   
        if(!s2410CLKPW)
        {
        	s2410CLKPW = (volatile CLKPWRreg *) VirtualAllocCopy(0x1000,(char *)TEXT("IOP: CLKPW_BASE_VIRTUAL"), (PVOID)CLKPWR_BASE);
        	if(!s2410CLKPW)
        	{
        		if(pDriverGlobals)
        			VirtualFree((PVOID)pDriverGlobals, 0, MEM_RELEASE);
        
        		if(s2410IOP)
        			VirtualFree((PVOID)s2410IOP, 0, MEM_RELEASE);
        
        		return NULL;
        	}
        } 
        //Jonathan01_0915 end	

#ifdef DEBUG
	dpCurSettings.ulZoneMask = 0;
#endif

	DEBUGMSG (1, (TEXT("++SerInit %X\r\n"), pMddHead ));
	RETAILMSG(1,(TEXT("::: SerInit Start\r\n")));
	
	//Jonathan01_0915 start
	s2410IOP->rGPGUP  |= (0x1 << 8);
        s2410IOP->rGPGCON &= ~(0x3 << 16); //USB_ID
    
        s2410IOP->rGPGUP  |= (0x1 << 1);
        s2410IOP->rGPGCON &= ~(0x3 << 2);  //AC_IN
    
        //USB_EN
        s2410IOP->rGPJDAT &= ~(0x1 << 9); //turn off USB_EN
	
	//edyeh1015, Init in Uboot codes.
	//edyeh1015 //s2410IOP->rGPJUP  |=  (0x1 << 9); //the pull up function is disabled
	//edyeh1015 //s2410IOP->rGPJCON &= ~(0x3 << 18);//Output
        //edyeh1015 //s2410IOP->rGPJCON |= (0x1 << 18);
        
        
        pDriverGlobals->misc.InitUSBClient = 1; 
        //Jonathan01_0915 end
        
	// Allocate for our main data structure and one of it's fields.
	pHWHead = (PSER_INFO)LocalAlloc( LPTR, sizeof(SER_INFO) );
	if ( !pHWHead )
		goto ALLOCFAILED;

	if (!Ser_GetRegistryData(pHWHead, (LPCTSTR)Identifier)) 
	{
		DEBUGMSG (1,(TEXT("SerInit - Unable to read registry data. Failing Init !!! \r\n")));
		goto ALLOCFAILED;
	}

	// Create our interrupt event.
	pHWHead->hSerialEvent = CreateEvent(0,FALSE,FALSE,NULL);

	// Initialize our critical sections
	InitializeCriticalSection(&(pHWHead->TransmitCritSec));
	InitializeCriticalSection(&(pHWHead->HwRegCritSec));

	SerUSBInternalMapRegisterAddresses(pHWHead);
	if(!InitUsbdDriverGlobals())  //:-)
		goto ALLOCFAILED;
	if(!UsbdAllocateVm())  //:-)
		goto ALLOCFAILED;
	

	pHWHead->pMddHead		= pMddHead;
	pHWHead->cOpenCount		= 0;
	pHWHead->pHWObj			= pHWObj;
	pHWHead->wSOFStableCnt	= 0; 				
    
	// Set up our Comm Properties data    
	pHWHead->CommProp.wPacketLength      = 0xffff;
	pHWHead->CommProp.wPacketVersion     = 0xffff;
	pHWHead->CommProp.dwServiceMask      = SP_SERIALCOMM;
	pHWHead->CommProp.dwReserved1        = 0;
	pHWHead->CommProp.dwMaxTxQueue       = 64;
	pHWHead->CommProp.dwMaxRxQueue       = 64;
	pHWHead->CommProp.dwMaxBaud          = BAUD_115200;
	pHWHead->CommProp.dwProvSubType      = PST_RS232;
	pHWHead->CommProp.dwProvCapabilities =  PCF_RLSD | 
						PCF_SETXCHAR |
						PCF_INTTIMEOUTS |
						PCF_SPECIALCHARS |
						PCF_TOTALTIMEOUTS |
						PCF_XONXOFF;
	pHWHead->CommProp.dwSettableBaud      =	BAUD_075 | BAUD_110 | BAUD_150 | 
						BAUD_300 | BAUD_600 |
						BAUD_1200 | BAUD_1800 | 
						BAUD_2400 | BAUD_4800 |
						BAUD_7200 | BAUD_9600 | BAUD_14400 |
						BAUD_19200 | BAUD_38400 | 
						BAUD_56K | BAUD_128K |
						BAUD_115200 | BAUD_57600 | BAUD_USER;
	pHWHead->CommProp.dwSettableParams    =	SP_BAUD | SP_RLSD ;
	pHWHead->CommProp.wSettableData       =	DATABITS_8;
	pHWHead->CommProp.wSettableStopParity =	STOPBITS_10 | STOPBITS_20 |
						PARITY_NONE | PARITY_ODD | 
						PARITY_EVEN | PARITY_SPACE |
						PARITY_MARK;

	pHWHead->fIRMode  = FALSE;   // Select wired by default

        pHWHead->State = IDLE;
    
	// Here is where we do any actual init for the hardware.  In the case of
	// USB function, we mostly just validate the hardware and then enable
 	// interrupts.  When we detect the presence of the bus, GetIntr will take
	// care of identify us to the host and kicking things off.

	SC2410_USB_Init(pHWHead);
	
	//Jonathan01_0915 start
        pDriverGlobals->misc.USBCableEvent =0;
        pHWHead->ModemStatus &= ~MS_RLSD_ON;
        EvaluateEventFlag(pHWHead->pMddHead, EV_RLSD);
       
        //make a delay
        WaitReturn = WaitForSingleObject(pHWHead->hSerialEvent, 0x00000600L);
       
        if(!(s2410IOP->rGPGDAT & (0x1 << 1)) && (s2410IOP->rGPGDAT & (0x1 << 8)))
        {	
             s2410IOP->rGPJDAT |= (0x1 << 9); //turn on USB_EN
                
             s2410CLKPW->rCLKCON |= (0x1<<7);
             pDriverGlobals->misc.USBCableEvent =1;
             pDriverGlobals->misc.InitUSBClient = 0; 
             RETAILMSG(1,(TEXT("::: SerInit -- USB IN \r\n"))); 
        } 
        else //NO USB IN
        {      
             s2410IOP->rGPJDAT &= ~(0x1 << 9); //turn off USB_EN
                   
             s2410CLKPW->rCLKCON &= ~(0x1<<7);
                       
             RETAILMSG(1,(TEXT("::: SerInit -- NO USB IN \r\n")));     	
        }
	//Jonathan01_0915 end			

	DEBUGMSG (1, (TEXT("--SerInit - %X\r\n"), pHWHead ));
	RETAILMSG(1,(TEXT("::: SerInit end\r\n")));

	return (pHWHead);

ALLOCFAILED:
	// Unmap any memory areas that we may have mapped.
	if ( pHWHead->pUSBCtrlAddr)
		VirtualFree((PVOID)pHWHead->pUSBCtrlAddr, 0, MEM_RELEASE);

	if ( pHWHead->pIrqCtrlAddr)
		VirtualFree((PVOID)pHWHead->pIrqCtrlAddr, 0, MEM_RELEASE);

	if ( pHWHead->pCLKPWR)
		VirtualFree((PVOID)pHWHead->pCLKPWR, 0, MEM_RELEASE);

	LocalFree(pHWHead);

	// Free any critical sections we have allocated
	DeleteCriticalSection(&(pHWHead->TransmitCritSec));
	DeleteCriticalSection(&(pHWHead->HwRegCritSec));

	// And free the context data structure
	LocalFree(pHWHead);

	DEBUGMSG (1,(TEXT("--SerInit - %X\r\n"), pHWHead ));
	//RETAILMSG(1,(TEXT("::: SerInit end\r\n")));

	return (NULL);
}

/*************************************************************************
 @doc OEM 
 @func PVOID | SerPostInit | Performs final hardware initialization.
 ************************************************************************/
static
BOOL SerPostInit(PVOID   pHead)   // @parm PVOID returned by SerInit.
{
	PSER_INFO pHWHead = (PSER_INFO)pHead;

	DEBUGMSG(1, (TEXT("+++SerPostInit\r\n")));

	// We use a PDD specific thread, rather than the default thread provided
	// by the MDD.
	StartEventThread( pHWHead );

	// Enable interrupts after thread is started - DAL
	// ....
	
	return TRUE;
}

/*************************************************************************
 @doc OEM 
 @func PVOID | SerDeinit | Deinitializes device identified by argument.
 *  This routine frees any memory allocated by SerInit.
 ************************************************************************/
static
BOOL SerDeinit(PVOID   pHead)   // @parm PVOID returned by SerInit.
{
	PSER_INFO pHWHead = (PSER_INFO)pHead;

	DEBUGMSG(1, (TEXT("+SerDeinit\r\n")));

	// Disable interrupts
	// ...

	if ( !pHWHead )
		return (FALSE);

	// Make sure device is closed before doing DeInit
	if ( pHWHead->cOpenCount )
		SerClose( pHead );

	if ( pHWHead->pUSBCtrlAddr)
		VirtualFree((PVOID)pHWHead->pUSBCtrlAddr, 0, MEM_RELEASE);

	if ( pHWHead->pIrqCtrlAddr)
		VirtualFree((PVOID)pHWHead->pIrqCtrlAddr, 0, MEM_RELEASE);

	if ( pHWHead->pCLKPWR)
		VirtualFree((PVOID)pHWHead->pCLKPWR, 0, MEM_RELEASE);

	UsbdDeallocateVm(); //:-)

	// Free any critical sections we have allocated
	DeleteCriticalSection(&(pHWHead->TransmitCritSec));
	DeleteCriticalSection(&(pHWHead->HwRegCritSec));

	// Free the HWObj allocated in GetSerialObject
	LocalFree(pHWHead->pHWObj);

	LocalFree(pHWHead);

	DEBUGMSG(1, (TEXT("-SerDeinit\r\n")));

	return (TRUE);
}

/*************************************************************************
 @doc OEM
 @func BOOL | SerOpen | This routine is called when the port is opened.
 *  Not exported to users, only to driver.
 *
 @rdesc Returns TRUE if successful, FALSEotherwise.
 ************************************************************************/
static
BOOL SerOpen(PVOID   pHead) /*@parm PVOID returned by Serinit. */
{
	PSER_INFO pHWHead = (PSER_INFO)pHead;

	DEBUGMSG(1,
			(TEXT("SerOpen+\r\n")));
	NKDbgPrintfW(L"SerOpen++\r\n");//jocky0308
	// Disallow multiple simultaneous opens
	if (pHWHead->cOpenCount)
		return (FALSE);
    
	pHWHead->cOpenCount++;

#ifdef POLL_FOR_DISCONNECT
	// Yuck.  We want to poll for detaches when the device is open.
	// But right now, the IST is in a wait infinite.  Spoof an interrupt
	// to let him know we have been opened and he needs to start polling.
	SetEvent(pHWHead->hSerialEvent);
#endif

	return (TRUE);
}

/*************************************************************************
 @doc OEM
 @func ULONG | SerClose | This routine closes the device identified by the 
 *  PVOID returned by SerInit.
 *  Not exported to users, only to driver.
 *
 @rdesc The return value is 0.
 ************************************************************************/
static
ULONG SerClose(PVOID   pHead)   // @parm PVOID returned by SerInit.
{
	PSER_INFO pHWHead = (PSER_INFO)pHead;

	DEBUGMSG (1, (TEXT("++SerClose\r\n")));

	if (pHWHead->cOpenCount) 
	{
		DEBUGMSG (1, (TEXT("SerClose, closing device\r\n")));
		pHWHead->cOpenCount--;

#ifdef TODO
		// Do we need something similar on USB???
		// while we are still transmitting, sleep.
		uTries = 0;

		while ( ((pHWHead->ser16550.IER = READ_PORT_UCHAR(pHWHead->ser16550.pIER)) 
					& SERIAL_IER_THR) &&	// indicates TX in progress
					(uTries++ < 100) &&     // safety net
								// indicates FIFO not yet empty
					!(pHWHead->ser16550.LSR & SERIAL_LSR_TEMT)) 
		{

				DEBUGMSG(1, (TEXT("SerClose, TX in progress, IER 0x%X, LSR 0x%X\r\n"),
						*pHWHead->ser16550.pIER, pHWHead->ser16550.LSR));
				Sleep(10);
		}
#endif

		// TODO - When the device is closed, should power it down or somehow try to
		// let the desktop know that we aren't doing anything with any data that it
		// might be sending our way..
    
		// Mask interrupts? - No, we wont see any more traffic - MBE.
		//pHWHead->pIrqCtrlAddr->icmr.sp0 = 0;
	}

	DEBUGMSG(1,(TEXT("--SerClose\r\n")));

	return (0);
}

/*************************************************************************
 @doc OEM
 @func ULONG | SerRxIntr | This routine gets several characters from the 
	hardware receive buffer and puts them in a buffer provided via the se-
	cond argument. It returns the number of bytes lost to overrun.

 @rdesc The return value indicates the number of overruns detected.
	The actual number of dropped characters may be higher.
**************************************************************************/
static
ULONG SerRxIntr(PVOID pHead,                // @parm Pointer to hardware head
		PUCHAR pRxBuffer,           // @parm Pointer to receive buffer
		ULONG *pBufflen )           // @parm In = max bytes to read, out = bytes read
{
	PSER_INFO   pHWHead			 = (PSER_INFO)pHead;
	ULONG       RetVal			 = 0;
	ULONG       TargetRoom			 = *pBufflen;
	BOOL        fRXFlag			 = FALSE;
	BOOL        fReplaceparityErrors = FALSE;
	BOOL        fNull;
	UCHAR       cEvtChar;
	PUCHAR      pRxOrig			 = pRxBuffer;

	DEBUGMSG(1, (TEXT("++SerRxIntr %d\r\n"), *pBufflen));

	cEvtChar = pHWHead->dcb.EvtChar;
	fNull	 = pHWHead->dcb.fNull;

	if( pHWHead->dcb.fErrorChar && pHWHead->dcb.fParity )
		fReplaceparityErrors = TRUE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久66| www国产成人免费观看视频 深夜成人网| 欧美三片在线视频观看| 久久综合九色综合久久久精品综合| 亚洲啪啪综合av一区二区三区| 久久精品国产一区二区三区免费看| 成人av免费在线观看| 91精品国产品国语在线不卡| 日韩一区有码在线| 国产一区二三区好的| 制服视频三区第一页精品| 中文字幕亚洲视频| 精品一区二区免费看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲精品在线观看网站| 午夜不卡av在线| 色中色一区二区| 国产精品国产三级国产有无不卡 | 成人免费观看男女羞羞视频| 日韩欧美国产系列| 日韩国产欧美三级| 欧美性极品少妇| 亚洲一区二区欧美激情| 色综合婷婷久久| 全国精品久久少妇| 在线欧美日韩国产| 亚洲美女免费视频| 色诱视频网站一区| 亚洲欧美日韩在线不卡| 92国产精品观看| 一区在线观看免费| 99久久综合精品| 欧美国产成人在线| 国产成人综合网站| 国产精品久久久久精k8 | 久久精品国产成人一区二区三区| 欧美日韩国产小视频| 日韩成人av影视| 日韩一级大片在线观看| 精品亚洲国内自在自线福利| 日韩欧美国产系列| 国产成人综合亚洲91猫咪| 亚洲国产精品成人综合色在线婷婷 | 国产一区二区中文字幕| 久久精品一二三| 成人国产电影网| 亚洲免费观看在线观看| 欧美色涩在线第一页| 日日夜夜免费精品视频| 日韩欧美久久久| 国产久卡久卡久卡久卡视频精品| 久久久久久久久久久久电影 | 国产拍揄自揄精品视频麻豆| 成人国产精品免费网站| 亚洲一区二区三区中文字幕| 欧美日韩在线亚洲一区蜜芽| 免费观看久久久4p| 日本一区二区成人在线| 91精品91久久久中77777| 丝袜美腿亚洲综合| 国产三区在线成人av| eeuss鲁片一区二区三区在线观看| 国产精品久久网站| 欧美一级xxx| 成人午夜短视频| 五月婷婷另类国产| 久久久精品欧美丰满| 色域天天综合网| 久久99久久久欧美国产| 亚洲免费在线观看视频| 久久亚洲二区三区| 欧美亚洲禁片免费| 国产剧情av麻豆香蕉精品| 一区二区日韩av| 26uuu色噜噜精品一区二区| 99riav久久精品riav| 蜜臀91精品一区二区三区| 1区2区3区精品视频| 日韩欧美在线网站| 欧美视频你懂的| 国产一区二区不卡在线| 午夜婷婷国产麻豆精品| 国产精品美女久久福利网站| 制服丝袜在线91| 91美女片黄在线观看91美女| 久久av中文字幕片| 亚洲成人动漫在线观看| 中文字幕一区二区三中文字幕| 日韩免费一区二区三区在线播放| 色999日韩国产欧美一区二区| 国产一区二区美女| 日韩精品一卡二卡三卡四卡无卡| 亚洲人亚洲人成电影网站色| 国产午夜亚洲精品羞羞网站| 91精品国模一区二区三区| 色悠久久久久综合欧美99| 国产精品一区二区果冻传媒| 免费看欧美女人艹b| 午夜日韩在线观看| 一区二区三区四区精品在线视频 | 日韩美一区二区三区| 欧美日韩色综合| 欧美在线一二三四区| 色偷偷一区二区三区| 99久久精品国产网站| av成人免费在线| www.成人网.com| 成人av电影免费在线播放| 国产成人8x视频一区二区| 狠狠色伊人亚洲综合成人| 日韩国产高清影视| 水野朝阳av一区二区三区| 亚洲国产另类av| 午夜精品成人在线| 视频一区二区三区中文字幕| 图片区小说区区亚洲影院| 亚洲高清一区二区三区| 午夜精品免费在线观看| 五月激情六月综合| 麻豆专区一区二区三区四区五区| 亚洲成av人片观看| 午夜精品久久久久久久99樱桃| 日韩制服丝袜av| 裸体健美xxxx欧美裸体表演| 激情综合色丁香一区二区| 久久99国产精品免费网站| 精品一区二区三区欧美| 国产乱子轮精品视频| 成人av免费在线播放| 成人97人人超碰人人99| 91福利在线看| 91精品国产入口| 国产亚洲精品福利| √…a在线天堂一区| 亚洲在线免费播放| 91在线精品秘密一区二区| 色香蕉久久蜜桃| 7777精品伊人久久久大香线蕉经典版下载 | 婷婷国产在线综合| 久久国产乱子精品免费女| 国产高清精品网站| 在线观看日韩高清av| 日韩欧美国产精品| 国产精品久久久久久久久免费相片 | 国产精品国产三级国产| 亚洲国产视频网站| 国产精品一区二区不卡| 91论坛在线播放| 欧美一区二区三区免费观看视频 | 99riav久久精品riav| 51午夜精品国产| 日本一二三不卡| 婷婷综合久久一区二区三区| 国产成人精品免费网站| 欧美少妇性性性| 久久午夜老司机| 亚洲成国产人片在线观看| 岛国av在线一区| 91精品国产综合久久久久久漫画| 国产欧美综合在线| 日本va欧美va精品发布| av不卡在线观看| 日韩精品一区二区三区在线观看| 亚洲国产岛国毛片在线| 奇米色777欧美一区二区| 91免费观看国产| 久久久久久9999| 青青草视频一区| 91久久国产综合久久| 国产欧美日韩综合精品一区二区 | 亚洲一区二区综合| 成人黄色小视频在线观看| 日韩三级视频在线看| 亚洲国产人成综合网站| aaa欧美大片| 久久理论电影网| 麻豆精品一二三| 91精品久久久久久久99蜜桃| 一区二区三区欧美亚洲| 成人少妇影院yyyy| 久久久国产精品不卡| 免费在线观看日韩欧美| 欧美自拍偷拍一区| 亚洲色图一区二区| 懂色av中文一区二区三区| 精品欧美黑人一区二区三区| 亚洲曰韩产成在线| 91麻豆高清视频| 中文在线免费一区三区高中清不卡 | av福利精品导航| 国产女主播一区| 国产不卡视频在线观看| 国产欧美日韩在线看| 国产麻豆91精品| 国产日韩视频一区二区三区| 国产福利电影一区二区三区| 国产日产欧美精品一区二区三区| 国产成人免费视频| 久久精品一区二区三区四区| 国产精品综合视频|