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

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

?? ar6000_sdio.c

?? WLAN在AR6000程序中的驅動代碼
?? C
字號:
//------------------------------------------------------------------------------
// <copyright file="ar6000_sdio.c" company="Atheros">
//    Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
//    Copyright (c) 2006 Atheros Corporation.  All rights reserved.
//
//    The use and distribution terms for this software are covered by the
//    Microsoft Limited Permissive License (Ms-LPL) 
//    http://www.microsoft.com/resources/sharedsource/licensingbasics/limitedpermissivelicense.mspx 
//    which can be found in the file MS-LPL.txt at the root of this distribution.
//    By using this software in any fashion, you are agreeing to be bound by
//    the terms of this license.
//
//    You must not remove this notice, or any other, from this software.
// </copyright>
// 
// <summary>
//    Windows CE Wifi Driver for AR-6000
// </summary>
//------------------------------------------------------------------------------
//==============================================================================
// Driver entry points for SDIO
//
// Author(s): ="Atheros"
//==============================================================================

#include <windows.h>
#include <types.h>

#include "SDCard.h"
#include "Sdcardddk.h"
#include <ceddk.h>
#include <ndis.h>

#include "athtypes.h"
#include "ar6000_sdio.h"

static SD_FUNCTION  sdFunction;
static SD_DEVICE_HANDLE  hClientHandle = NULL;
A_UINT32 sdio1bitmode = 0;
A_UINT32 sdiobusspeedlow = 0;

SD_API_STATUS 
SDIORegisterFunction (SD_FUNCTION *pFunction)
{
	sdFunction = *pFunction;
	if (hClientHandle == NULL) {
		return SD_API_STATUS_UNSUCCESSFUL;
	}

	if (sdFunction.pProbe(hClientHandle) == FALSE) {
		return SD_API_STATUS_UNSUCCESSFUL;
	}

	return SD_API_STATUS_SUCCESS;
}

SD_API_STATUS 
SDIOUnregisterFunction(SD_FUNCTION *pFunction)
{
	sdFunction.pRemove(hClientHandle);
	memset(&sdFunction, 0, sizeof(sdFunction));
	return SD_API_STATUS_SUCCESS;
}

///////////////////////////////////////////////////////////////////////////////
//  DllEntry - the main dll entry point
//  Input:  hInstance - the instance that is attaching
//          Reason - the reason for attaching
//          pReserved - not much
//  Output: 
//  Return: always returns TRUE
//  Notes:  this is only used to initialize the zones
///////////////////////////////////////////////////////////////////////////////
extern 
BOOL WINAPI DllEntry(HINSTANCE hInstance, ULONG Reason, LPVOID pReserved)
{
    BOOL fRet = TRUE;
    
    if ( Reason == DLL_PROCESS_ATTACH ) {
		DEBUGREGISTER(hInstance);
        if (!SDInitializeCardLib()) {
            fRet = FALSE;
        }
    }
    else if ( Reason == DLL_PROCESS_DETACH ) {
        SDDeinitializeCardLib();
    }

    return fRet;
}

///////////////////////////////////////////////////////////////////////////////
//  DRG_Deinit - the deinit entry point for the memory driver
//  Input:  hDeviceContext - the context returned from SMC_Init
//  Output:
//  Return: always returns TRUE 
//  Notes: 
///////////////////////////////////////////////////////////////////////////////
extern 
BOOL WINAPI DRG_Deinit(DWORD hDeviceContext)
{
	NDIS_STATUS   ndisStatus;

    HIF_DEBUG_PRINTF(ATH_LOG_TRC, "DRG_Deinit : Enter\n");
	NdisDeregisterAdapter(&ndisStatus, L"AR6K_SD1");
	if (ndisStatus != NDIS_STATUS_SUCCESS) {
		HIF_DEBUG_PRINTF(ATH_LOG_ERR, 
			"NdisDeRegisterAdapter Failed : 0x%x\n", ndisStatus);
	}
    HIF_DEBUG_PRINTF(ATH_LOG_TRC, "DRG_DeInit : Exit\n");
    return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
//  SlotEventCallBack - slot event callback for fast-path events
//  Input:  hDevice - device handle
//          pContext - device specific context that was registered
//          SlotEventType - slot event type
//          pData - Slot event data (can be NULL)
//          DataLength - length of slot event data (can be 0)
//  Output:
//  Return: 
//  Notes:  
//
//      If this callback is registered the client driver can be notified of
//      slot events (such as device removal) using a fast path mechanism.  This
//      is useful if a driver must be notified of device removal 
//      before its XXX_Deinit is called.  
//
//      This callback can be called at a high thread priority and should only
//      set flags or set events.  This callback must not perform any
//      bus requests or call any apis that can perform bus requests.
///////////////////////////////////////////////////////////////////////////////
VOID SlotEventCallBack(SD_DEVICE_HANDLE    hDevice,
                       PVOID               pContext,                      
                       SD_SLOT_EVENT_TYPE  SlotEventType,         
                       PVOID               pData,                      
                       DWORD               DataLength)
{
        HIF_DEBUG_PRINTF(ATH_LOG_TRC, "SlotEventCallBack : Enter\n");
        HIF_DEBUG_PRINTF(ATH_LOG_TRC, "SlotEventCallBack : Exit\n");
	return;
}

BOOL
createRegKeyValues()
{
	DWORD	Status;
	HKEY	hKey;    
	DWORD	dwDisp;
	DWORD	dwVal;
	
    HIF_DEBUG_PRINTF(ATH_LOG_TRC, "CreateRegKeyValues: Enter \n");

	Status = RegCreateKeyEx(
	             HKEY_LOCAL_MACHINE,
	             TEXT("Comm\\AR6K_SD1\\Parms"),
	             0,
	             NULL,
	             REG_OPTION_NON_VOLATILE,
	             0,
	             NULL,
	             &hKey,
	             &dwDisp);
	
	if (Status != ERROR_SUCCESS) {
        HIF_DEBUG_PRINTF(ATH_LOG_ERR, "CreateRegKeyValues: Error in creating reg key Parms \n");
	    return FALSE;
	}
	
	dwVal = 0;    
	
    Status = RegSetValueEx(
                    hKey,
	                TEXT("BusNumber"),
	                0,
	                REG_DWORD, 
	                (PBYTE)&dwVal,
	                sizeof(DWORD));
	
	if (Status != ERROR_SUCCESS) {
        HIF_DEBUG_PRINTF(ATH_LOG_ERR, "CreateRegKeyValues: Error in creating reg key BusNumber \n");
	    return FALSE;
	}
	
	Status = RegSetValueEx(
                    hKey,
	                TEXT("BusType"),
	                0,
	                REG_DWORD, 
	                (PBYTE)&dwVal,
	                sizeof(DWORD));
	
	if (Status != ERROR_SUCCESS) {
        HIF_DEBUG_PRINTF(ATH_LOG_ERR, "CreateRegKeyValues: Error in creating reg key BusType \n");
	    return FALSE;
	}
	
	RegCloseKey(hKey);
    
    HIF_DEBUG_PRINTF(ATH_LOG_TRC, "CreateRegKeyValues: Exit \n");
	
	return TRUE;
}   // AddKeyValues


DWORD
NdisRegisterAdapterThread(PVOID Context)
{
	NDIS_STATUS   ndisStatus;

	HIF_DEBUG_PRINTF(ATH_LOG_TRC, "NdisRegisterAdapterThread : Enter\n");
	NdisRegisterAdapter(&ndisStatus, L"AR6K_SD", L"AR6K_SD1");
	if (ndisStatus != NDIS_STATUS_SUCCESS) {
		HIF_DEBUG_PRINTF(ATH_LOG_ERR, "NdisRegisterAdapter Failed : 0x%x\n", ndisStatus);
	}
	return ndisStatus;
}

///////////////////////////////////////////////////////////////////////////////
//  DRG_Init - the init entry point for the memory driver
//  Input:  dwContext - the context for this init
//  Output: 
//  Return: non-zero context
//  Notes: 
///////////////////////////////////////////////////////////////////////////////
extern 
DWORD WINAPI DRG_Init(DWORD dwContext)
{
	PWCHAR*                         pRegPath = NULL;
    SDCARD_CLIENT_REGISTRATION_INFO ClientInfo;     // client into
    SD_API_STATUS                   Status;         // intermediate status
	HANDLE                          hThread;

    HIF_DEBUG_PRINTF(ATH_LOG_TRC, "AR6K_SDIO: +DRG_Init\n");

    // get the device handle from the bus driver
    hClientHandle = SDGetDeviceHandle(dwContext, pRegPath);
    if (NULL == hClientHandle) {
        HIF_DEBUG_PRINTF(ATH_LOG_ERR, "-DRG_Init: Failed to get client handle \n");
        return 0;
    }

    memset(&ClientInfo, 0, sizeof(ClientInfo));

    // set client options and register as a client device
    _tcscpy(ClientInfo.ClientName, TEXT("Atheros AR6K SDIO Wifi Card"));

    // set the callback
    ClientInfo.pSlotEventCallBack = SlotEventCallBack;

    Status = SDRegisterClient(hClientHandle, 
                              NULL, 
                              &ClientInfo);

    if (!SD_API_SUCCESS(Status)) {
        HIF_DEBUG_PRINTF(ATH_LOG_ERR, "-DRG_Init: Failed to register client : 0x%08X \n",
			            Status);
        return 0;
    }

    if (!createRegKeyValues()) {
        HIF_DEBUG_PRINTF(ATH_LOG_ERR, "-DRG_Init: Failed to create ndis registryentries \n");
        return 0;
    }

	// Perform NDIS register adapter on a separate thread to avoid
	// blocking the SDIO bus driver
	hThread = CreateThread(NULL, 0, 
		NdisRegisterAdapterThread, NULL, 0, NULL);
	CeSetThreadPriority(hThread, 200);
	CloseHandle(hThread);
	
	HIF_DEBUG_PRINTF(ATH_LOG_TRC, "DRG_Init : Exit\n");
	return 1;
}

///////////////////////////////////////////////////////////////////////////////
//  
//  Notes:  PLEASE DO NOT REMOVE THE FOLLOWING FUNCTIONS. THOUGH THEY WILL NEVER
//          BE USED, STREAMS BASED DRIVER MUST EXPORT THESE FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
extern 
BOOL WINAPI DRG_IOControl(
    DWORD   Handle,
    DWORD   IoctlCode,
    PBYTE   pInBuf,
    DWORD   InBufSize,
    PBYTE   pOutBuf,
    DWORD   OutBufSize,
    PDWORD  pBytesReturned
)
{
	return FALSE;
}

extern 
DWORD WINAPI DRG_Open(
    DWORD hDeviceContext,
    DWORD AccessCode,
    DWORD ShareMode)
{
    DEBUGMSG(SDCARD_ZONE_FUNC, (TEXT("AR6K_SDIO: +-DRG_Open\n")));
    return hDeviceContext;
}

extern 
BOOL WINAPI DRG_Close(DWORD hOpenContext)
{
    DEBUGMSG(SDCARD_ZONE_FUNC, (TEXT("AR6K SDIO: +-DRG_Close\n")));
    return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成va人在线观看| 麻豆极品一区二区三区| 性做久久久久久久免费看| 久久精品99国产精品| 99国内精品久久| 欧美刺激午夜性久久久久久久| 欧美激情艳妇裸体舞| 日韩电影在线一区二区三区| 成人午夜精品在线| 91精品国产91热久久久做人人 | 91精品婷婷国产综合久久竹菊| 精品sm在线观看| 亚洲成在线观看| 高清在线观看日韩| 日韩欧美视频一区| 亚洲成人av资源| 91香蕉视频mp4| 久久久久国产免费免费| 亚洲aⅴ怡春院| 色系网站成人免费| 中文字幕不卡一区| 国产麻豆精品一区二区| 在线不卡中文字幕播放| 亚洲自拍与偷拍| 成人国产在线观看| 久久色中文字幕| 久久精品国产亚洲aⅴ| 欧美日韩视频一区二区| 亚洲男同性恋视频| 99久久综合国产精品| 亚洲国产成人午夜在线一区| 国模大尺度一区二区三区| 日韩午夜av一区| 日韩电影在线免费看| 欧美日韩国产三级| 亚洲福中文字幕伊人影院| 色综合久久综合网欧美综合网 | 三级久久三级久久| 91激情五月电影| 一区二区三区在线视频观看| voyeur盗摄精品| 中文字幕在线一区免费| 成人精品国产福利| 中文字幕一区av| 97国产精品videossex| 综合久久综合久久| 91视视频在线观看入口直接观看www| 久久久精品免费网站| 国产成人av网站| 欧美激情在线免费观看| 国产盗摄精品一区二区三区在线 | 久久蜜桃av一区二区天堂| 精品一区二区免费在线观看| 日韩欧美国产电影| 国产风韵犹存在线视精品| 国产农村妇女精品| 97精品久久久午夜一区二区三区| 亚洲蜜臀av乱码久久精品 | 国产三级精品三级| www.激情成人| 亚洲一线二线三线视频| 91麻豆精品国产91久久久使用方法| 日韩国产一区二| 欧美成人乱码一区二区三区| 国产精品一区二区视频| 国产精品超碰97尤物18| 欧美视频日韩视频在线观看| 午夜精品一区二区三区三上悠亚| 日韩一区二区三区视频在线观看| 韩国毛片一区二区三区| 成人免费在线视频观看| 欧美精品色一区二区三区| 国产麻豆视频一区二区| 亚洲日本在线a| 日韩亚洲欧美一区| 99久久精品99国产精品 | 国产精品色婷婷| 欧美久久一区二区| 粉嫩一区二区三区性色av| 亚洲与欧洲av电影| 久久精品一区二区三区不卡| 欧洲精品一区二区| 精东粉嫩av免费一区二区三区 | 精品久久久久久亚洲综合网 | 香蕉av福利精品导航| 精品国产亚洲一区二区三区在线观看 | 日本vs亚洲vs韩国一区三区二区| 欧美激情一区二区三区不卡| 欧美日韩一本到| 顶级嫩模精品视频在线看| 午夜伦欧美伦电影理论片| 国产亚洲精品资源在线26u| 欧美撒尿777hd撒尿| 国产91在线看| 久久精品国产99| 亚洲一区二区四区蜜桃| 欧美激情一区二区三区| 欧美电视剧在线观看完整版| 在线精品视频免费播放| 国产成人免费视频| 精品一区二区三区在线观看| 亚洲一级二级在线| 国产精品国产a级| 久久久亚洲欧洲日产国码αv| 欧美日韩一级二级| 日本久久一区二区| 福利一区在线观看| 国产精品一区二区在线播放 | www激情久久| 欧美欧美欧美欧美首页| 色综合天天性综合| 成人性生交大片免费| 久久99国产精品麻豆| 日韩av中文在线观看| 午夜影视日本亚洲欧洲精品| 亚洲精品va在线观看| 成人欧美一区二区三区在线播放| 日本一区二区视频在线观看| 欧美精品一区二区三区高清aⅴ| 欧美日本在线播放| 欧美图片一区二区三区| 色婷婷久久一区二区三区麻豆| 不卡一二三区首页| 成人18视频日本| 成人精品在线视频观看| 成人一区二区三区中文字幕| 丁香桃色午夜亚洲一区二区三区| 国产一区二区调教| 国产精品一二三四| 丁香婷婷综合五月| 99国产精品久| 色综合久久久久久久久久久| 91年精品国产| 日本精品视频一区二区三区| 色播五月激情综合网| 色综合久久综合网97色综合| 欧美午夜电影一区| 欧美精品1区2区| 精品人在线二区三区| 2021久久国产精品不只是精品| 欧美精品一区二区三区高清aⅴ | 国产精品亲子乱子伦xxxx裸| 中文字幕成人av| 亚洲欧美日韩在线不卡| 亚洲精品水蜜桃| 三级在线观看一区二区| 精品在线一区二区| av欧美精品.com| 欧洲av一区二区嗯嗯嗯啊| 欧美日本国产视频| 久久日韩精品一区二区五区| 国产精品护士白丝一区av| 一区二区三区欧美| 免费成人在线网站| 99国产精品99久久久久久| 欧美日韩成人在线| 久久精品一区二区三区不卡牛牛 | 精品福利二区三区| 中文成人综合网| 日韩精品电影在线观看| 国产福利91精品| 欧美性欧美巨大黑白大战| 欧美成人一级视频| 亚洲人成亚洲人成在线观看图片 | 亚洲r级在线视频| 国产在线播放一区二区三区| 成人动漫中文字幕| 91精品国产欧美一区二区18| 国产精品嫩草影院com| 日韩中文字幕亚洲一区二区va在线| 国产成人av一区二区三区在线观看| 欧美视频精品在线观看| 久久久99久久| 午夜精品爽啪视频| 波多野结衣一区二区三区| 欧美一区二区免费| 亚洲欧美日韩在线不卡| 国产在线播放一区三区四| 欧美日韩精品一区二区在线播放| 国产日本一区二区| 日韩电影免费在线| 91福利小视频| 国产精品久久久久久久岛一牛影视 | 国产在线一区观看| 欧美日韩国产高清一区二区三区 | 欧美日韩精品福利| 国产精品久久久久四虎| 久久激情五月婷婷| 欧美精品久久99久久在免费线| 国产精品初高中害羞小美女文| 狠狠色综合日日| 日韩欧美的一区二区| 天天av天天翘天天综合网色鬼国产| 99riav久久精品riav| 欧美激情中文字幕一区二区| 国产精品自在欧美一区| 精品国产1区2区3区| 久久精品99久久久| 日韩免费福利电影在线观看| 污片在线观看一区二区|