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

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

?? gspx-pxa.c

?? Wince BSP 下的Wifi 驅動 基于PXA270 CPU
?? C
?? 第 1 頁 / 共 5 頁
字號:

void	pxa_gspi_deinit(PSSP_HARDWARE_CONTEXT	pDC)
{
	PSSP_HARDWARE_CONTEXT	pHC = (PSSP_HARDWARE_CONTEXT)pDC;
	EnterCriticalSection(&pHC->SSPCrit); 

	CloseHandle(pHC->waitqueue);
	gspx_power_down(pHC);
	ssp_deinit_hw(pHC);
	
	LeaveCriticalSection(&pHC->SSPCrit); 
	DeleteCriticalSection(&(pHC->SSPCrit));

	if (LocalFree(pHC))
	{
		DEBUGMSG(ZONE_ERROR, (TEXT("pxa_gspi_deinit: free pHC error!\n")));
	}

	return;
}


BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			DEBUGREGISTER(hModule);
            DEBUG_INIT();
		    DEBUGMSG(ZONE_INIT, (TEXT("GSPX DllMain: DLL_PROCESS_ATTACH\n")));
		    DEBUGMSG(ZONE_INIT, (TEXT("Build date: ")TEXT(__DATE__)TEXT(" ")TEXT(__TIME__)TEXT("\n")));
		    DisableThreadLibraryCalls((HMODULE) hModule);
			break;
        case DLL_THREAD_ATTACH:
			break;
		case DLL_THREAD_DETACH:
			break;
		case DLL_PROCESS_DETACH:
		    DEBUGMSG(ZONE_INIT, (TEXT("GSPX DllMain: DLL_PROCESS_DETACH\n")));
            DEBUG_HALT();
			break;
    }
    return TRUE;
}

int gspx_read_intstate(PVOID hDC)
{
	PSSP_HARDWARE_CONTEXT	pHC;
	DWORD			gplr, gedr;
	DWORD			resval;

	if (hDC == NULL) {
		resval = 0;
		goto funcfinal;
	}
	pHC = (PSSP_HARDWARE_CONTEXT) hDC;

	gedr = pHC->pGPIORegs->GEDR0;
	gplr = pHC->pGPIORegs->GPLR0;
	GSPIMSG(1, (L"(GPLR0, GEDR): (%08xh, %08xh) \n", gplr, gedr));
	resval = (gplr >> SSP_INTR)&1;
funcfinal:
	return resval;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_read_reg8
// Description:
// Parameters:
// Return:
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_read_reg8(PVOID hDC, WORD reg, BYTE *data)
{
	GSPI_STATUS status;	
	WORD	regdata;
	status = ssp_read_register(hDC, &regdata, reg);
	///ssp_read_data_direct(ssphc, &regdata, reg, 1, g_spi_dummy_clk_reg);
	*data = (BYTE)regdata;
	return (status == GSPI_SUCCESS);
}

#endif

/*******************************************************************************
	Customer Section:
 
	gspx_ section: user customizes following functions
 
	fucntions are used by outside the controller
 *******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
// Function: gspx_init
// Description:
//     Initializes a GSPI host controller so that the other required API 
//     functions can be implemented. The initialization typically includes 
//     memory mapping, interrupt, GPIO pin initialization, etc
// Parameters:
//     None
// Return:
//	   Pointer to the OEM defined GSPI host device context on success, and 
//     NULL on failure. The returned device context is passed back to the DLL 
//     in subsequent calls to the DLL.
///////////////////////////////////////////////////////////////////////////////
PVOID gspx_init(VOID)
{
	PVOID handle;

    DEBUGMSG(ZONE_FUNC, (TEXT("GSPX_init(): PXA270\n")));
	handle = pxa_gspi_Init();
	///crlo:verion-check ++
	if (handle== 0) {
		handle = NULL;
		goto funcFinal;
	}
	///crlo:verion-check --
//###xlin moveed to gspx_set_callback pxa_gspi_register_isr(handle, pSpiParam, (ISRFUNC)SPINdisInterruptCallback);
	///crlo:verion-check ++
funcFinal:
	return handle;
	///crlo:verion-check --
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_deinit
// Description:
//     Deinitializes the GSPI controller initialized by gspx_init(). This 
//     typically includes unmapping memories, unallocating interrupt, freeing 
//     critical sections, and other resources allocated by the DLL. 
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
// Return:
//	   None
///////////////////////////////////////////////////////////////////////////////
//BOOL pxa_gspi_Deinit(PVOID hDC)
VOID gspx_deinit(PVOID hDC)
{
	BOOL	result = TRUE;
	PSSP_HARDWARE_CONTEXT	pHC = (PSSP_HARDWARE_CONTEXT)hDC;

  	DEBUGMSG(ZONE_FUNC, (TEXT("GSPX_deinit(): PXA270\n")));
	//ENTERFUNC();
	if (pHC == NULL) {
		GSPIMSG(ERRMSG, (TEXT("Allocate SSP_HARDWARE_CONTEXT FAILED")));
		result = FALSE;
		goto funcFinal;
	}
	pxa_gspi_deinit(pHC);
funcFinal:
	GSPIMSG(PROGFLOW, (TEXT("Exit %s (%xh) \n"), TEXT(__FUNCTION__), result));
	return; //result;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_set_ist_callback
// Description:
//     The WLAN calls this function to setup a callback to process the WLAN 
//     interrupts
// Parameters:
//     pHC     - Pointer to the device context returned by gspx_init().
//     cb      - Pointer to the callback function in the WLAN driver.
//     context - The WLAN driver supplied context data which is passed back
//               as the function parameter
// Return:
//     The ID of the system interrupt allocated by gspx_init()
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_set_ist_callback(PVOID pHC, PVOID cb, PVOID context)
{
	pxa_gspi_register_isr(pHC, context, cb);
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_get_clock_rate
// Description:
//     Gets the current GSPI host controller clock speed
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
// Return:
//     The host controller clock speed in Hz
///////////////////////////////////////////////////////////////////////////////
UINT32 gspx_get_clock_rate(PVOID pHC)
{
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_set_clock_rate
// Description:
//     Sets the GSPI host controller's clock speed. If the controller does not
//     support the exact speed requested, the speed shall be set to the next 
//     lower speed supported.
// Parameters:
//     pHC  - Pointer to the device context returned by gspx_init().
//     rate - Clock rate to set to in Hz.
// Return:
//     TRUE on success, and FALSE on failure.     
///////////////////////////////////////////////////////////////////////////////
BOOL  gspx_set_clock_rate(PVOID pHC, UINT32 rate)
{
	if(rate != GSPI_BUS_CLK_RATE)
		return FALSE;
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_set_clocking_edge
// Description:
//     Sets the host to use rising or falling edge to clock data in.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
//     rise_fall - 1 for rising edge, and 0 for falling edge
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL  gspx_set_clocking_edge(PVOID pHC, BOOL raise_fall)
{
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_set_read_delay
// Description:
//     Sets register read delay in number of clocks
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
//     reg - Read Register delay in multiple of 16 clocks.
//     io  - Port Register delay in multiple of 16 clocks.
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_set_read_delay(PVOID pHC, UINT16 reg, UINT16 io)
{
	g_spi_dummy_clk_reg  = reg;
	g_spi_dummy_clk_data = io;
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_reset_module
// Description:
//     Resets the WLAN module by resting the RESET pin on the WLAN module.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
// Return:
//     None
///////////////////////////////////////////////////////////////////////////////
VOID gspx_reset_module(PVOID pHC)
{
	PSSP_HARDWARE_CONTEXT pContext = (PSSP_HARDWARE_CONTEXT) pHC;
    DEBUGMSG(ZONE_FUNC, (TEXT("+gspx_reset_module()\n")));
	EnterCriticalSection(&pContext->SSPCrit);  //JKU
	set_GPIO_signal(pContext->pGPIORegs, SSP_RST, SIG_UP);
	udelay(pContext->pOSTRegs, 5000);
	set_GPIO_signal(pContext->pGPIORegs, SSP_RST, SIG_DOWN);  //JKU: pin 11 to reset
	udelay(pContext->pOSTRegs, 5000);
	set_GPIO_signal(pContext->pGPIORegs, SSP_RST, SIG_UP);
	udelay(pContext->pOSTRegs, 10000);
	LeaveCriticalSection(&pContext->SSPCrit);  //JKU
    DEBUGMSG(ZONE_FUNC, (TEXT("-gspx_reset_module()\n")));
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_read_reg16
// Description:
//     Reads a 16-bit value from a single register.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
//     reg - Register address to read from.
//     data - A 16-bit value read from the register.
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL  gspx_read_reg16(PVOID pHC, UINT16 reg, UINT16 *data)
{
	GSPI_STATUS status;	
	status = ssp_read_register(pHC, data, reg);
	return (status == GSPI_SUCCESS);
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_write_reg16
// Description:
//     Writes to a single register a 16-bit value.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
//     reg - Register address to write to.
//     data - A 16-bit value to write.
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_write_reg16(PVOID pHC, UINT16 regaddr, UINT16 regdata)
{
	GSPI_STATUS status;
	WORD word = regdata;
	status = ssp_write_register(pHC, regaddr, &word);
	return (status == GSPI_SUCCESS);
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_read_reg32
// Description:
//      Reads a 32-bit value from a single register.
// Parameters:
//      pHC - Pointer to the device context returned by gspx_init().
//      reg - Register address to read from.
//      data - A 32-bit value read from the register.
// Return:
//      TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_read_reg32(PVOID pHC, UINT16 reg, UINT32 *data)
{
	GSPI_STATUS status;	
	WORD	*regaddr = (WORD	*)reg;
	WORD	*regdatPt = (WORD*)data;

	status = ssp_read_register(pHC, regdatPt, (WORD)regaddr);
	status = ssp_read_register(pHC, (regdatPt+1), (WORD)(regaddr+1));
	return (status == GSPI_SUCCESS);
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_write_reg32
// Description:
//     Writes to a single register a 32-bit value.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
//     reg - Register address to write to.
//     data - A 32-bit value to write
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL  gspx_write_reg32(PVOID pHC, UINT16 reg, UINT32 data)
{
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_read_mem
// Description:
//     Reads a buffer from the port on the WLAN module.
// Parameters:
//     pHC   - Pointer to the device context returned by gspx_init().
//     reg   - Address to read from.
//     nword - Number of 16-bit values to read.
//     datPt - Caller supplied buffer for storing the data read.
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_read_mem(PVOID pHC,UINT16 reg, UINT16 nword, UINT16* datPt)
{
	GSPI_STATUS status;	
	status = ssp_read_data(pHC, datPt, reg, nword);
	return (status == GSPI_SUCCESS);
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_write_mem
// Description:
//     Writes a buffer to the port on the WLAN module.
// Parameters:
//     pHC   - Pointer to the device context returned by gspx_init().
//     reg   - Address to write to.
//     nword - Number of 16-bit values to write.
//     datPt - Pointer to the data buffer to write.
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL gspx_write_mem(PVOID pHC, UINT16 regaddr, UINT16 nword, UINT16* datPt)
{
	GSPI_STATUS status;
	status = ssp_write_data(pHC,datPt,regaddr,nword);
	return (status == GSPI_SUCCESS);
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_power_up
// Description:
//     Power up the WLAN module.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL  gspx_power_up(PVOID pHC)
{
	PSSP_HARDWARE_CONTEXT pContext = (PSSP_HARDWARE_CONTEXT) pHC;
	set_GPIO_signal(pContext->pGPIORegs, SSP_RST, SIG_UP);
	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
// Function: gspx_power_down
// Description:
//     Power down the WLAN module.
// Parameters:
//     pHC - Pointer to the device context returned by gspx_init().
// Return:
//     TRUE on success, and FALSE on failure.
///////////////////////////////////////////////////////////////////////////////
BOOL  gspx_power_down(PVOID pHC)
{
	PSSP_HARDWARE_CONTEXT pContext = (PSSP_HARDWARE_CONTEXT) pHC;
	set_GPIO_signal(pContext->pGPIORegs, SSP_RST, SIG_DOWN);
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品1区2区| 午夜精品在线视频一区| 欧美一级电影网站| 99在线视频精品| 成人福利视频在线| 国内精品嫩模私拍在线| 经典三级视频一区| 狠狠色丁香婷综合久久| 韩国av一区二区| 懂色av一区二区在线播放| 国产91丝袜在线播放| 国产91精品一区二区| 99久久精品国产一区二区三区| 成人国产在线观看| 欧美综合在线视频| 在线观看av一区二区| 欧美主播一区二区三区| 欧美人xxxx| 久久久国际精品| 国产精品九色蝌蚪自拍| 亚洲一区二区三区四区在线免费观看| 三级影片在线观看欧美日韩一区二区| 免费在线观看成人| 国产麻豆91精品| 91亚洲国产成人精品一区二区三| 欧美性大战久久久久久久| 日韩三级伦理片妻子的秘密按摩| 欧美国产视频在线| 午夜精品国产更新| 狠狠色丁香婷综合久久| 成人性视频网站| 欧美性色黄大片| 久久久久久久综合日本| 亚洲女人****多毛耸耸8| 99riav一区二区三区| 成人爱爱电影网址| 3d成人动漫网站| 欧美国产一区视频在线观看| 一区二区三区毛片| 国产在线国偷精品产拍免费yy | 成人免费福利片| 欧美亚洲国产一区二区三区| 久久亚洲精品国产精品紫薇| 一区二区免费在线播放| 国产一区不卡视频| 欧美日本一区二区在线观看| 国产色一区二区| 久久国内精品视频| 在线免费精品视频| 国产精品久久久久aaaa| 精久久久久久久久久久| 欧美高清你懂得| 一区二区成人在线| 日本va欧美va精品发布| 国产高清亚洲一区| 在线播放国产精品二区一二区四区| 欧美电影免费观看高清完整版在线观看 | 亚洲色图清纯唯美| 亚洲成人www| 91丨porny丨国产入口| 久久免费午夜影院| 韩日av一区二区| 日韩一区国产二区欧美三区| 综合欧美亚洲日本| 久久99国内精品| 91麻豆精品国产91久久久资源速度| 国产精品视频第一区| 国产精品888| 国产亚洲自拍一区| 国产精品一区在线| 国产精品私房写真福利视频| 国模少妇一区二区三区| 26uuuu精品一区二区| 久久精品99国产精品日本| 欧美一卡二卡在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美精品精品一区| 蜜桃久久久久久| 久久久亚洲精品一区二区三区| 亚洲一区二区在线免费看| 在线观看区一区二| 午夜婷婷国产麻豆精品| 欧美性色黄大片| 日韩和欧美一区二区三区| 91麻豆精品国产91久久久久久久久| 丝袜亚洲另类欧美| 欧美精品一区二区三区视频| 国产v综合v亚洲欧| 亚洲欧美日韩系列| 一本大道久久a久久精二百| 一区二区三区中文免费| 91精品国产综合久久精品| 精品一区二区在线看| 国产日韩欧美一区二区三区综合| 成年人国产精品| 一区二区三区久久| 日韩欧美在线1卡| 国产99久久久国产精品潘金| 日韩理论片在线| 欧美精选午夜久久久乱码6080| 图片区小说区国产精品视频| 精品国产亚洲在线| 91浏览器在线视频| 青青国产91久久久久久| 国产精品初高中害羞小美女文| 欧美高清dvd| 国模娜娜一区二区三区| 亚洲色图19p| 精品乱人伦一区二区三区| av激情综合网| 久久黄色级2电影| 亚洲精品菠萝久久久久久久| 26uuu精品一区二区三区四区在线| 成人免费高清视频| 日韩精品91亚洲二区在线观看| 26uuu另类欧美亚洲曰本| 欧美性猛交xxxx乱大交退制版| 韩国v欧美v亚洲v日本v| 性欧美大战久久久久久久久| 国产精选一区二区三区| 欧美美女激情18p| 精品一区二区三区久久| 亚洲桃色在线一区| 精品国产123| 91黄色免费看| 国产69精品久久久久777| 日韩—二三区免费观看av| 日韩激情一二三区| 中文字幕国产一区| 久久久一区二区三区捆绑**| 亚洲精品在线观| 欧美精品乱码久久久久久按摩| 91老司机福利 在线| 国产一区二区三区蝌蚪| 亚洲风情在线资源站| 人人超碰91尤物精品国产| 国产精品久久久久久久久晋中 | 日韩一区二区三区视频在线| 色综合天天综合色综合av| 国产精品66部| 国产精品一区二区在线播放 | 亚洲国产欧美日韩另类综合| 国产精品嫩草影院av蜜臀| 久久蜜桃av一区二区天堂| 日韩精品一区在线观看| 在线综合+亚洲+欧美中文字幕| 欧美亚洲一区二区在线观看| 欧美日韩亚洲高清一区二区| 日本不卡视频一二三区| 亚洲人123区| 国产日韩成人精品| 国产亚洲精品免费| 欧美激情一区在线| 久久免费看少妇高潮| 精品国产污网站| 久久麻豆一区二区| 国产欧美日韩精品一区| 国产亚洲综合av| 国产精品乱码人人做人人爱 | 91小视频在线观看| 色天使色偷偷av一区二区| 91原创在线视频| 欧美亚洲精品一区| 欧美麻豆精品久久久久久| 91精品国产aⅴ一区二区| 日韩欧美一区电影| 国产日韩欧美一区二区三区乱码| 国产日韩欧美激情| 亚洲三级电影网站| 欧美日韩亚洲丝袜制服| 色8久久精品久久久久久蜜| 在线观看av一区二区| 91精品国产综合久久久久久久| 欧美电影免费观看完整版| 国产婷婷一区二区| 亚洲综合免费观看高清完整版 | 色播五月激情综合网| 欧美日韩国产影片| 欧美成va人片在线观看| 久久久久久久久久电影| 亚洲男同性视频| 久久精品免费看| 成人av在线播放网站| 69av一区二区三区| 国产视频在线观看一区二区三区 | 亚洲成人中文在线| 免费的成人av| 成人app软件下载大全免费| 欧美一a一片一级一片| 久久综合成人精品亚洲另类欧美| 亚洲欧美综合色| 久久久精品人体av艺术| 最新热久久免费视频| 麻豆91在线播放免费| 99久久国产综合精品色伊| 日韩午夜激情免费电影| 亚洲日本成人在线观看| 天堂va蜜桃一区二区三区 | 亚洲综合久久久久| 国产大片一区二区|