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

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

?? ser2440_hw.c

?? 包含了大量文件
?? C
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
	}

	RETAILMSG(DEBUGMODE, (TEXT("-SL_ClearRTS, 0x%X\r\n"), pHead));
#endif	
}

//
// @doc OEM
// @func VOID | SL_SetRTS | This routine sets RTS.
// 
// @rdesc None.
//
VOID
SL_SetRTS(PVOID   pHead)			// @parm PVOID returned by HWinit.
{
#if 0
	PS2440_UART_INFO   pHWHead   = (PS2440_UART_INFO)pHead;

	RETAILMSG(0, (TEXT("+SL_SetRTS, 0x%X\r\n"), pHead));
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try
	{
		SETREG(pHWHead, rUMCON, SER2440_RTS);
	}

	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		// Just exit
	}

	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetRTS, 0x%X\r\n"), pHead));
#else
	PS2440_UART_INFO   pHWHead   = (PS2440_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_SetRTS, 0x%X\r\n"), pHead));

	if ( !pHWHead->UseIrDA )
	{
#if USE_AFC
		// by .0212.
		*(pHWHead->rRTSport) &= ~(1<<(pHWHead->RtsPortNum));
#else
		EnterCriticalSection(&(pHWHead->RegCritSec));
		try
		{
			SETREG(pHWHead, rUMCON, SER2440_RTS);
		}

		except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
			EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
		{
			// Just exit
		}

		LeaveCriticalSection(&(pHWHead->RegCritSec));
#endif
	}
	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetRTS, 0x%X\r\n"), pHead));
#endif	
}

//
// @doc OEM
// @func VOID | SL_ClearBreak | This routine clears break.
// 
// @rdesc None.
// 
VOID
SL_ClearBreak(PVOID   pHead)			// @parm PVOID returned by HWinit.
{
	PS2440_UART_INFO   pHWHead   = (PS2440_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE,  (TEXT("SL_ClearBreak:\r\n"))); 
	// S2440 does not need to clear break signal, for cleared by automatic.
}

//
// @doc OEM
// @func VOID | SL_SetBreak | This routine sets break.
// 
// @rdesc None.
//
VOID
SL_SetBreak(PVOID   pHead)			// @parm PVOID returned by HWinit.
{
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;

	RETAILMSG(DEBUGMODE, (TEXT("+SL_SetBreak, 0x%X\r\n"), pHead));
	EnterCriticalSection(&(pHWHead->RegCritSec));
	try
	{
		SETREG(pHWHead,rUCON,BS_SEND);
	}

	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		// Just exit
	}

	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetBreak, 0x%X\r\n"), pHead));
}

//
// SetBaudRate
//
// Internal function.  The only real reason for splitting this out
// is so that we can call it from PowerOn and still allow SL_SetBaud
// to do debug messages, acquire critical sections, etc.
//
BOOL
SetBaudRate(PVOID   pHead, ULONG   BaudRate)
{
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;

	ClearPendingInts( pHWHead );

	RETAILMSG(1, (TEXT("SetBaudRate -> %d\r\n"), BaudRate));

	if ( (pHWHead->s2440SerReg->rUCON & CS_MASK) == CS_PCLK )
	{
//		if ( BaudRate == 115200 || BaudRate == 38400 )
//			OUTREG(pHWHead,rUBRDIV,( (int)(S2440PCLK/16.0/BaudRate)));
//		else
			OUTREG(pHWHead,rUBRDIV,( (int)(S2440PCLK/16.0/BaudRate) -1 ));
	}
	else		// if  ( (pHWHead2->s2440SerReg->rUCON & CS_MASK) == CS_UCLK )
		OUTREG(pHWHead,rUBRDIV,( (int)(S2440UCLK/16.0/BaudRate) -1 ));

	return( TRUE );
}

//
// @doc OEM
// @func BOOL | SL_SetBaudRate |
//  This routine sets the baud rate of the device.
//
// @rdesc None.
//
BOOL
SL_SetBaudRate(
              PVOID   pHead,    // @parm     PVOID returned by HWInit
              ULONG   BaudRate    // @parm     ULONG representing decimal baud rate.
              )
{
	BOOL fRet;
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;

	RETAILMSG (DEBUGMODE, (TEXT("+SL_SetbaudRate 0x%X, %d\r\n"), pHead, BaudRate));

	try
	{
		// Enter critical section before calling function, since
		// we can't make sys calls inside SetBaudRate
		EnterCriticalSection(&(pHWHead->RegCritSec));
		fRet = SetBaudRate(pHead, BaudRate);
		LeaveCriticalSection(&(pHWHead->RegCritSec));
	}
	
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		return( FALSE );
	}

	if ( fRet )
	{
		pHWHead->dcb.BaudRate = BaudRate;

		RETAILMSG(DEBUGMODE, (TEXT("-SL_SetbaudRate 0x%X (%d Baud)\r\n"), pHead, BaudRate));
		return( TRUE );
	}
	else
	{
		RETAILMSG(DEBUGMODE, (TEXT("-SL_SetbaudRate - Error setting %d, failing to %d\r\n"), BaudRate, pHWHead->dcb.BaudRate));
		return( FALSE );
	}
}

//
// @doc OEM
// @func BOOL | SL_SetByteSize |
//  This routine sets the WordSize of the device.
//
// @rdesc None.
//
BOOL
SL_SetByteSize(
              PVOID   pHead,        // @parm     PVOID returned by HWInit
              ULONG   ByteSize    // @parm     ULONG ByteSize field from DCB.
              )
{
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;
	UINT32 lcr;
	BOOL bRet;

	RETAILMSG(DEBUGMODE,(TEXT("+SL_SetByteSize 0x%X, 0x%X\r\n"), pHead, ByteSize));

	bRet = TRUE;

	EnterCriticalSection(&(pHWHead->RegCritSec));

	try {      
		lcr = (UINT32)INREG(pHWHead,rULCON);
		lcr &= ~SER2440_DATABIT_MASK;

		switch ( ByteSize )
		{
			case 5:
				lcr |= 0;//SERIAL_5_DATA;
				break;
			case 6:
				lcr |= 1;//SERIAL_6_DATA;
				break;
			case 7:
				lcr |= 2;//SERIAL_7_DATA;
				break;
			case 8:
				lcr |= 3;//SERIAL_8_DATA;
				break;
			default:
				bRet = FALSE;
				break;
		}

		if (bRet)
		{
			OUTREG(pHWHead,rULCON,lcr); 
		}
	}

	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		bRet = FALSE;
	}

	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE,(TEXT("-SL_SetByteSize 0x%X\r\n"), pHead));

	return(bRet);
}

//
// @doc OEM
// @func BOOL | SL_SetParity |
//  This routine sets the parity of the device.
//
// @rdesc None.
//
BOOL
SL_SetParity(
            PVOID   pHead,    // @parm     PVOID returned by HWInit
            ULONG   Parity    // @parm     ULONG parity field from DCB.
            )
{
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;

	UINT32 lcr;
	BOOL bRet;

	RETAILMSG(DEBUGMODE,(TEXT("+SL_SetParity 0x%X, 0x%X\r\n"), pHead, Parity));

	bRet = TRUE;

	EnterCriticalSection(&(pHWHead->RegCritSec));

	try
	{
		lcr = (UINT32)INREG(pHWHead,rULCON);      
		lcr &= ~SER2440_PARITY_MASK;

		switch ( Parity )
		{
			case ODDPARITY:
				lcr |= 0x20;//SERIAL_ODD_PARITY;
				break;

			case EVENPARITY:
				lcr |= 0x28;//SERIAL_EVEN_PARITY;
				break;

			case MARKPARITY:
				lcr |= 0x30;//SERIAL_MARK_PARITY;
				break;

			case SPACEPARITY:
				lcr |= 0x38;//SERIAL_SPACE_PARITY;
				break;

			case NOPARITY:
				lcr |= 0;//SERIAL_NONE_PARITY;
				break;
			
			default:
				bRet = FALSE;
				break;
		}
		if (bRet)
		{
			OUTREG(pHWHead,rULCON,lcr) ;
		}
	}

	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		bRet = FALSE;
	}

	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE, (TEXT("-SL_SetParity 0x%X\r\n"), pHead));

	return(bRet);
}
//
// @doc OEM
// @func VOID | SL_SetStopBits |
//  This routine sets the Stop Bits for the device.
//
// @rdesc None.
//
BOOL
SL_SetStopBits(
              PVOID   pHead,      // @parm     PVOID returned by HWInit
              ULONG   StopBits  // @parm     ULONG StopBits field from DCB.
              )
{
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;

	UINT32 lcr;
	BOOL bRet;

	RETAILMSG (DEBUGMODE,(TEXT("+SL_SetStopBits 0x%X, 0x%X\r\n"), pHead, StopBits));

	bRet = TRUE;

	EnterCriticalSection(&(pHWHead->RegCritSec));

	try
	{
		lcr = INREG(pHWHead,rULCON);
		lcr &= ~SER2440_STOPBIT_MASK;

		// Note that 1.5 stop bits only works if the word size
		// is 5 bits.  Any other xmit word size will cause the
		// 1.5 stop bit setting to generate 2 stop bits.        
		switch ( StopBits )
		{
			case ONESTOPBIT :
				lcr |= 0;//SERIAL_1_STOP ;
				break;
			
			case ONE5STOPBITS :
				//lcr |= SERIAL_1_5_STOP ;
				//break;
			
			case TWOSTOPBITS :
				lcr |= 4;//SERIAL_2_STOP ;
				break;
			
			default:
				bRet = FALSE;
				break;
		}

		if (bRet)
		{
			OUTREG(pHWHead,rULCON,lcr);
		}
	}
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		bRet = FALSE;
	}

	LeaveCriticalSection(&(pHWHead->RegCritSec));

	RETAILMSG(DEBUGMODE,(TEXT("-SL_SetStopBits 0x%X\r\n"), pHead));

	return(bRet);
}

//
// @doc OEM
// @func ULONG | SL_GetRxBufferSize | This function returns
// the size of the hardware buffer passed to the interrupt
// initialize function.  It would be used only for devices
// which share a buffer between the MDD/PDD and an ISR.
//
// 
// @rdesc This routine always returns 0 for 16550 UARTS.
// 
ULONG
SL_GetRxBufferSize(PVOID pHead)
{
	RETAILMSG(DEBUGMODE, (TEXT("SL_GetRxBufferSize \r\n")));
	return(0);
}

//
// @doc OEM
// @func PVOID | SC_GetRxStart | This routine returns the start of the hardware
// receive buffer.  See SL_GetRxBufferSize.
// 
// @rdesc The return value is a pointer to the start of the device receive buffer.
// 
PVOID
SL_GetRxStart(PVOID   pHead)			// @parm PVOID returned by SC_init.
{
	RETAILMSG(DEBUGMODE, (TEXT("SL_GetRxStart \r\n")));
	return(NULL);
}

//
// @doc OEM
// @func ULONG | SL_GetInterruptType | This function is called
//   by the MDD whenever an interrupt occurs.  The return code
//   is then checked by the MDD to determine which of the four
//   interrupt handling routines are to be called.
// 
// @rdesc This routine returns a bitmask indicating which interrupts
//   are currently pending.
// 
INTERRUPT_TYPE
SL_GetInterruptType(PVOID pHead)			// Pointer to hardware head
{
	PS2440_UART_INFO    pHWHead = (PS2440_UART_INFO)pHead;
	INTERRUPT_TYPE interrupts;
	ULONG IntPndVal=0;
	ULONG IntSubPndVal=0;

	try
	{
		IntPndVal = *(pHWHead->UART_INTSRCPND);
		IntSubPndVal = *(pHWHead->UART_INTSUBSRCPND);
	}
	
	except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
		EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
	{
		RETAILMSG(DEBUGMODE, (TEXT("ACCESS VIOLATION ERROR \r\n")));
		IntPndVal = SER2440_INT_INVALID; // simulate no interrupt
	}

	RETAILMSG(DEBUGMODE, (TEXT("SL_GetInterruptType : 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X\r\n"),
		*(pHWHead->UART_INTMASK),
		*(pHWHead->UART_INTSUBMASK),
		*(pHWHead->UART_INTSRCPND),
		*(pHWHead->UART_INTSUBSRCPND),
		~(*(pHWHead->UART_INTSUBMASK)) & *(pHWHead->UART_INTSUBSRCPND),
		pHWHead->fSW_EnTxINT));

	if ( IntPndVal & (pHWHead->bINT) )
	{
		if ( IntSubPndVal == SER2440_INT_INVALID )
		{      
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: SER2440_INT_INVALID\r\n")));
			interrupts = INTR_NONE;
		}
		else if(IntSubPndVal & (pHWHead->bErrINT) )
		{
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_LINE\r\n")));
			interrupts = INTR_LINE;  // Error status
		}
		else if((IntSubPndVal & (pHWHead->bTxINT)) && pHWHead->fSW_EnTxINT )
		{
			RETAILMSG (DEBUGMODE, (TEXT("SL_GetInterruptType: INTR_TX\r\n")));

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久免费相片 | 久久久蜜臀国产一区二区| 国产福利一区二区| 亚洲精品视频自拍| 欧美精品一区二区三区在线播放| 不卡在线视频中文字幕| 日本最新不卡在线| 亚洲毛片av在线| 2021久久国产精品不只是精品| 日本道精品一区二区三区 | 天堂av在线一区| 国产精品美女久久久久av爽李琼| 欧美精品三级在线观看| 成人国产精品视频| 久久99精品国产| 香蕉成人啪国产精品视频综合网 | 欧美日韩精品欧美日韩精品一| 国产精品一区二区三区99| 日韩电影一二三区| 亚洲中国最大av网站| 亚洲欧洲精品天堂一级| 久久综合九色综合久久久精品综合| 欧美日韩成人综合在线一区二区| av在线不卡电影| 国产黄色精品视频| 国产在线一区观看| 美日韩一区二区| 青草av.久久免费一区| 亚洲国产精品麻豆| 亚洲精品大片www| 国产精品成人免费在线| 国产午夜精品美女毛片视频| 精品日韩99亚洲| 欧美电影免费观看高清完整版在线 | 欧美国产一区二区| 精品sm在线观看| 精品国产免费一区二区三区四区| 日韩亚洲欧美在线| 欧美一区二区日韩一区二区| 91精品婷婷国产综合久久竹菊| 欧美丝袜自拍制服另类| 欧美日韩高清在线| 欧美精品欧美精品系列| 这里只有精品电影| 欧美一卡二卡三卡| 欧美videos中文字幕| 亚洲精品一区二区三区蜜桃下载| 精品成人一区二区| 欧美激情一区二区三区| 国产精品三级视频| 亚洲欧美日韩国产一区二区三区 | 中文字幕精品一区二区精品绿巨人| 2020国产成人综合网| 国产欧美视频在线观看| 国产精品天天看| 亚洲精品成人少妇| 亚洲va在线va天堂| 免费观看在线色综合| 黄色成人免费在线| 成人黄色一级视频| 色婷婷综合激情| 欧美精品自拍偷拍动漫精品| 日韩午夜激情视频| 国产丝袜美腿一区二区三区| 自拍av一区二区三区| 亚洲国产精品影院| 精品亚洲国内自在自线福利| 成人免费观看男女羞羞视频| 日本精品视频一区二区三区| 欧美肥大bbwbbw高潮| 久久综合色之久久综合| 亚洲视频一区二区在线| 日本伊人色综合网| 国产精品99久| 欧美视频一区在线| 久久影院午夜论| 亚洲免费高清视频在线| 麻豆成人久久精品二区三区红 | 日本午夜一区二区| 国产精品影视在线| 欧美在线一区二区| xfplay精品久久| 亚洲摸摸操操av| 久久国产精品无码网站| 91在线小视频| 日韩美女一区二区三区| 综合久久久久久| 久久国产视频网| 色吊一区二区三区| www日韩大片| 亚洲一卡二卡三卡四卡| 国产精品原创巨作av| 欧美日韩不卡一区| 国产精品传媒视频| 国产一区二区三区不卡在线观看 | 337p亚洲精品色噜噜狠狠| 欧美激情综合在线| 日本一区中文字幕| 日本高清不卡视频| 日本一区二区视频在线| 免费久久99精品国产| 色偷偷成人一区二区三区91| 久久久精品2019中文字幕之3| 亚洲午夜电影在线观看| 福利一区二区在线观看| 在线播放一区二区三区| 亚洲激情av在线| 成a人片国产精品| 精品国产乱码久久久久久1区2区| 亚洲国产精品综合小说图片区| 成人一区二区三区| 久久综合成人精品亚洲另类欧美 | 爽好久久久欧美精品| 91浏览器打开| 国产精品久久久久久久久晋中 | 91同城在线观看| 日本一区二区三区国色天香| 久久精品国产秦先生| 欧美精品日韩一区| 午夜久久久影院| 欧美性xxxxxxxx| 亚洲狼人国产精品| 99re66热这里只有精品3直播| 久久精品人人做| 久久精品国产秦先生| 日韩视频一区二区在线观看| 日韩精品一级二级 | 精品久久久久久无| 免费的国产精品| 91精品国产欧美一区二区| 亚洲成av人片观看| 欧美日韩免费观看一区三区| 亚洲国产wwwccc36天堂| 欧美三级资源在线| 偷拍亚洲欧洲综合| 精品无人码麻豆乱码1区2区| 欧美日韩一区高清| 一区二区三区在线观看欧美 | 国产乱码精品一区二区三| 欧美一级欧美三级| 日本麻豆一区二区三区视频| 制服丝袜亚洲网站| 蜜臀久久久99精品久久久久久| 欧美精品丝袜久久久中文字幕| 亚洲国产另类精品专区| 56国语精品自产拍在线观看| 日本aⅴ免费视频一区二区三区| 欧美一二三四区在线| 免费的国产精品| 国产亚洲精品福利| 91精品国产综合久久精品性色| 亚洲图片有声小说| 欧美美女喷水视频| 精油按摩中文字幕久久| 久久精品网站免费观看| bt欧美亚洲午夜电影天堂| 亚洲欧美色图小说| 欧美日韩精品一区二区在线播放| 国产99久久久国产精品潘金网站| 3d动漫精品啪啪1区2区免费| 久久精品国产99国产| 国产欧美一区二区精品性色| 99久久综合国产精品| 一区二区三区资源| 日韩视频一区二区在线观看| 国产精品中文字幕日韩精品| 国产精品夫妻自拍| 欧美午夜视频网站| 久久精品国产99久久6| 成人免费在线视频观看| 精品视频一区三区九区| 国产在线精品一区二区夜色 | 国产精品久久久久久久浪潮网站| 色屁屁一区二区| 蜜臀av在线播放一区二区三区| 国产欧美精品一区二区三区四区 | 精品日韩在线一区| 成人福利视频在线看| 午夜精品国产更新| 国产性天天综合网| 欧美中文字幕亚洲一区二区va在线| 捆绑调教一区二区三区| 国产精品电影一区二区三区| 欧美精品在线观看播放| 丁香网亚洲国际| 亚洲va欧美va人人爽| 成人免费福利片| 久久综合九色欧美综合狠狠| 99久久伊人网影院| 青娱乐精品视频| 综合电影一区二区三区| 日韩视频一区在线观看| 欧美最猛黑人xxxxx猛交| 国产大片一区二区| 日本一不卡视频| 一区二区三区四区av| 久久久精品中文字幕麻豆发布| 欧美日韩免费观看一区二区三区| 国产丶欧美丶日本不卡视频| 日韩中文字幕区一区有砖一区|