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

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

?? cmini.cpp

?? WLAN在AR6000程序中的驅(qū)動(dòng)代碼
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//------------------------------------------------------------------------------
// <copyright file="cmini.cpp" company="Atheros and Microsoft">
//    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>
//------------------------------------------------------------------------------
//==============================================================================
// NDIS Miniport class.
//
// Author(s): ="Atheros and Microsoft"
//==============================================================================

#include <windows.h>
#include <ndis.h>
#include "cmini.hpp"
#include "osapi.h"

CMiniport::CMiniport()
{
	m_MiniportAdapterHandle = NULL;

	NdisAllocateSpinLock(&m_Lock);
}

CMiniport::~CMiniport()
{
	NdisFreeSpinLock(&m_Lock);
}

NDIS_STATUS
CMiniport::Initialize(
	IN NDIS_HANDLE MiniportAdapterHandle,
	IN NDIS_HANDLE pConfigHandle)
//
//  Initialize is a required function that sets up a NIC for network I/O
//  operations, claims all hardware resources necessary to the NIC, and
//  allocates resources the driver needs to carry out network I/O operations.
//
{
	m_MiniportAdapterHandle = MiniportAdapterHandle;

	return NDIS_STATUS_SUCCESS;
}

void
CMiniport::Halt()
//
//  Halt is a required function that deallocates resources (e.g. those
//  allocated by Initialize) when the NIC is removed and halts the NIC.
//
{
}

BOOLEAN
CMiniport::CheckForHang()
//
//  CheckForHang is an optional function that reports the state of
//  the NIC or monitors the responsiveness of the underlying driver.
//
//  CheckForHang returns TRUE if the driver determines that the NIC
//  is not operating.
//
{
	// Never hangs
	return FALSE;
}

NDIS_STATUS
CMiniport::Reset(
	OUT PBOOLEAN pAddressingReset)
{
	// No hardware or data to reset
	return NDIS_STATUS_SUCCESS;
}

static const NDIS_PHYSICAL_ADDRESS g_HighestAcceptableAddress = {-1, -1};

PVOID
CMiniport::MemoryAllocate(
	IN UINT cbMemory)
//
//  Allocate a block of memory Length bytes long.
//
{
	PVOID       pMemory = NULL;
	NDIS_STATUS Status;

	Status = NdisAllocateMemory(&pMemory, cbMemory, 0, g_HighestAcceptableAddress);
    if (Status == NDIS_STATUS_FAILURE) {
	    NDIS_DEBUG_PRINTF(ATH_LOG_ERR, "AR6K: ERROR - NdisAllocateMemory for %d bytes failed error = %x\n", cbMemory, Status);
    }

	return pMemory;
}

void
CMiniport::MemoryFree(
	IN PVOID pMemory)
//
//  Free a block of memory allocated by MemoryAllocate.
//
{
	NdisFreeMemory(pMemory, 0, 0);
}

//
// Set of _GEN Oids supported for Query operations:
//
static MPOidInfo g_GenSupportedQueryOids[] =
{
	{ OID_GEN_VENDOR_DRIVER_VERSION, sizeof(ULONG) },
	{ OID_GEN_MAC_OPTIONS,           sizeof(ULONG) },
	{ OID_GEN_SUPPORTED_LIST,        0 },
	{ OID_GEN_HARDWARE_STATUS,       sizeof(NDIS_HARDWARE_STATUS) },
	{ OID_GEN_MEDIA_SUPPORTED,       sizeof(NDIS_MEDIUM) },
	{ OID_GEN_MEDIA_IN_USE,          sizeof(NDIS_MEDIUM) },
	{ OID_GEN_PHYSICAL_MEDIUM,       sizeof(NDIS_MEDIUM) },
	{ OID_GEN_MEDIA_CONNECT_STATUS,  sizeof(ULONG) },
	{ OID_GEN_MAXIMUM_LOOKAHEAD,     sizeof(ULONG) },
	{ OID_GEN_CURRENT_LOOKAHEAD,     sizeof(ULONG) },
	{ OID_GEN_MAXIMUM_FRAME_SIZE,    sizeof(ULONG) },
	{ OID_GEN_MAXIMUM_TOTAL_SIZE,    sizeof(ULONG) },
	{ OID_GEN_LINK_SPEED,            sizeof(ULONG) },
	{ OID_GEN_TRANSMIT_BUFFER_SPACE, sizeof(ULONG) },
	{ OID_GEN_RECEIVE_BUFFER_SPACE,  sizeof(ULONG) },
	{ OID_GEN_TRANSMIT_BLOCK_SIZE,   sizeof(ULONG) },
	{ OID_GEN_RECEIVE_BLOCK_SIZE,    sizeof(ULONG) },
	{ OID_GEN_VENDOR_ID,             sizeof(ULONG) },
	{ OID_GEN_VENDOR_DESCRIPTION,    0 },
	{ OID_GEN_DRIVER_VERSION,        sizeof(USHORT) },
	{ OID_GEN_CURRENT_PACKET_FILTER, sizeof(ULONG) },
	{ OID_GEN_MAXIMUM_SEND_PACKETS,  sizeof(ULONG) },
	{ OID_GEN_XMIT_OK,               sizeof(ULONG) },
	{ OID_GEN_RCV_OK,                sizeof(ULONG) },
	{ OID_GEN_XMIT_ERROR,            sizeof(ULONG) },
	{ OID_GEN_RCV_ERROR,             sizeof(ULONG) },
	{ OID_GEN_RCV_NO_BUFFER,         sizeof(ULONG) },
	{ OID_GEN_MEDIA_CAPABILITIES,    sizeof(ULONG) },
	{ OID_PNP_CAPABILITIES,          sizeof(NDIS_PNP_CAPABILITIES) },
	{ OID_PNP_QUERY_POWER,           0 },
	{ 0,                             0 }
};

//
// Set of _GEN Oids supported for Set operations:
//
static MPOidInfo g_GenSupportedSetOids[] =
{
	{ OID_GEN_CURRENT_PACKET_FILTER, sizeof(ULONG) },
	{ OID_GEN_CURRENT_LOOKAHEAD,     sizeof(ULONG) },
	{ OID_GEN_PROTOCOL_OPTIONS,      sizeof(ULONG) },
	{ OID_PNP_SET_POWER,             sizeof(NDIS_DEVICE_POWER_STATE) },
	{ 0,                             0 }
};

NDIS_STATUS
CMiniport::CheckOidRequest(
	IN     MPOidInfo               *pOidInfo,
	IN     NDIS_OID                 Oid,
	IN     ULONG                    BufferLength,
	OUT    PULONG                   BytesNeeded)
//
//  Check to see that an OID request:
//		1. Is for a supported OID, and
//		2. That the provided buffer is not smaller than the minimum required space
//
{
	NDIS_STATUS    Status = NDIS_STATUS_INVALID_OID;

	for ( ; 0 != pOidInfo->Oid; pOidInfo++)
	{
		if (Oid == pOidInfo->Oid)
		{
			// Match found
			*BytesNeeded = pOidInfo->MinBufferSize;
			if (BufferLength < pOidInfo->MinBufferSize)
			{
				// The supplied buffer is not big enough
				Status = NDIS_STATUS_BUFFER_TOO_SHORT;
			}
			else
			{
				// Oid is supported, buffer size is ok.
				Status = NDIS_STATUS_SUCCESS;
			}
			break;
		}
	}

	return Status;
}

void
CMiniport::AddOidsToList(
	IN     MPOidInfo               *pOidInfo,
	IN OUT PNDIS_OID                pCurrentList,
	IN OUT PULONG                   pCurrentListCount,
	IN OUT PULONG                   pOidSlotsAvailable,
	IN OUT PULONG                   TotalOidCount)
//
//  Add the oids from the specified MPOidInfo to the array,
//  if they don't already appear in the array.
//
{
	ULONG     CurrentListCount = *pCurrentListCount;
	PNDIS_OID pEndList = pCurrentList + CurrentListCount;

	//
	// Iterate through the set of Oids in pOidInfo
	//
	for ( ; 0 != pOidInfo->Oid; pOidInfo++)
	{
		//
		// Check to see if the Oid is already in our list
		//
		for (ULONG i = 0; i < CurrentListCount; i++)
		{
			if (pOidInfo->Oid == pCurrentList[i])
			{
				// This Oid is already in the list, skip it
				break;
			}
        }
		if (i == CurrentListCount)
		{
			// Reached the end of the list without finding the oid,
			// thus it is new and needs to be added to the list
			*TotalOidCount += 1;
			if (*pOidSlotsAvailable)
			{
				*pEndList++ = pOidInfo->Oid;
				*pOidSlotsAvailable -= 1;
			}
		}
	}

	// Set the number of OIDs now in the list
	*pCurrentListCount = pEndList - pCurrentList;
}

PNDIS_OID
CMiniport::GetSupportedOidList(
	OUT     PNDIS_OID  pOidBuffer, 
	IN  OUT PULONG     pMaxOidsToAddToBuffer,
	IN  OUT PULONG     pTotalNumberOfSupportedOids)
//
//  Add the OIDs supported by the driver to pOidBuffer, but
//  do not add more than MaxOidsToAddToBuffer.
//
//  TotalNumberOfSupportedOids is set to the number of Oids
//  that the driver supports.
//
{
	PNDIS_OID   pOidList = pOidBuffer;
	ULONG       OidListCount = 0;

	AddOidsToList(&g_GenSupportedQueryOids[0], pOidList, &OidListCount, pMaxOidsToAddToBuffer, pTotalNumberOfSupportedOids);
	AddOidsToList(&g_GenSupportedSetOids[0],   pOidList, &OidListCount, pMaxOidsToAddToBuffer, pTotalNumberOfSupportedOids);

	return pOidList + OidListCount;
}

NDIS_STATUS
CMiniport::QueryInformation(
	IN  NDIS_OID Oid, 
	OUT PVOID    Buffer, 
	IN  ULONG    cbBuffer,
	OUT PULONG   pcbWritten,
	OUT PULONG   pcbNeeded)
//
// QueryInformation is a required function that returns information
// about the capabilities and status of the driver and/or its NIC.
//
{
	NDIS_STATUS             Status = NDIS_STATUS_SUCCESS;
	ULONG                   GenericULong;
	ULONG                   GenericUShort;
	NDIS_HARDWARE_STATUS    HardwareStatus;
	NDIS_MEDIUM             Medium;
	NDIS_PHYSICAL_MEDIUM	PhysicalMedium;
	NDIS_PNP_CAPABILITIES   PnpCaps;
	PVOID                   MoveSource = (PVOID)&GenericULong;
	ULONG                   MoveBytes = sizeof(GenericULong);

	// Check that OID is supported and buffer size is reasonable.
	Status = CheckOidRequest(&g_GenSupportedQueryOids[0], Oid, cbBuffer, pcbNeeded);
	if (NDIS_STATUS_SUCCESS != Status)
		goto done;

	switch (Oid)
	{
		case OID_GEN_VENDOR_DRIVER_VERSION:		
			GenericULong = GetGenVendorDriverVersion();
			break;

		case OID_GEN_MAC_OPTIONS:
			// A bitmask that defines optional properties of the underlying driver or its NIC.
			GenericULong = GetGenMacOptions();
			break;

		case OID_GEN_SUPPORTED_LIST:
			// An array of OIDs for objects that the underlying driver or its NIC supports.
			{
				ULONG TotalNumberOfSupportedOids = 0;
				ULONG MaxOidsToAddToBuffer = cbBuffer / sizeof(NDIS_OID);
                ULONG i,j;
                NDIS_OID temp;
                NDIS_OID *pOids;

				MoveBytes = 0;
				*pcbWritten = 0;
                pOids = (NDIS_OID *)Buffer;
				// Build list of supported OIDs
				GetSupportedOidList(pOids, &MaxOidsToAddToBuffer, &TotalNumberOfSupportedOids);
				*pcbNeeded = TotalNumberOfSupportedOids * sizeof(NDIS_OID);
				if (*pcbNeeded <= cbBuffer) {
                    // Sort the list 
                    for (i=0;i<TotalNumberOfSupportedOids;i++) {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论片在线| 91精品久久久久久蜜臀| 国产精品资源在线看| 美日韩黄色大片| 日韩高清国产一区在线| 一区二区三区日韩欧美精品| 中文字幕一区二区三区精华液 | 欧洲精品视频在线观看| 色猫猫国产区一区二在线视频| av高清久久久| 色八戒一区二区三区| 99久久亚洲一区二区三区青草| 成人av资源在线观看| 99视频热这里只有精品免费| 91在线码无精品| 91网上在线视频| 色哟哟国产精品| 欧美日韩中文字幕一区二区| 欧美日韩www| 欧美成人bangbros| 久久久久一区二区三区四区| 国产精品蜜臀在线观看| 亚洲欧美日韩系列| 日韩国产高清在线| 麻豆精品一区二区av白丝在线| 精品一区二区三区香蕉蜜桃| 成人18视频日本| 欧美影院一区二区三区| 精品国产伦一区二区三区观看体验 | 亚洲精品一二三四区| 亚洲精品国产品国语在线app| 偷拍自拍另类欧美| 狠狠色2019综合网| 99国产一区二区三精品乱码| 欧美视频三区在线播放| 国产喷白浆一区二区三区| 欧美国产日韩一二三区| 亚洲一卡二卡三卡四卡五卡| 老司机午夜精品| 91一区二区三区在线观看| 欧美肥妇free| 国产欧美一区二区精品久导航| 亚洲欧美日韩中文字幕一区二区三区| 亚洲成va人在线观看| 国产成人精品综合在线观看 | 在线欧美日韩精品| 精品日韩在线一区| 自拍偷拍亚洲综合| 麻豆成人av在线| av毛片久久久久**hd| 欧美岛国在线观看| 综合久久久久久| 蜜臂av日日欢夜夜爽一区| 色伊人久久综合中文字幕| 精品日韩一区二区| 亚洲伊人色欲综合网| 国产精品亚洲午夜一区二区三区 | 99热精品一区二区| 欧美一区二区三区免费视频| 成人欧美一区二区三区| 麻豆精品在线观看| 91精品办公室少妇高潮对白| 精品福利视频一区二区三区| 亚洲亚洲精品在线观看| 成人动漫一区二区三区| 欧美一区二区免费视频| 一区二区在线观看免费| 福利视频网站一区二区三区| 日韩一区二区在线观看视频播放| 亚洲日本一区二区三区| 国产老妇另类xxxxx| 欧美男生操女生| 夜夜爽夜夜爽精品视频| 国产91在线观看丝袜| 日韩三级视频中文字幕| 亚洲一区二区精品视频| 91在线视频免费91| 国产精品人妖ts系列视频| 久久不见久久见中文字幕免费| 欧美三级韩国三级日本三斤| 一区视频在线播放| 成人av手机在线观看| 欧美xxxx在线观看| 日韩二区在线观看| 欧美日韩成人综合天天影院 | 美女诱惑一区二区| 精品视频在线视频| 一区二区三区美女视频| 成人精品电影在线观看| 久久久精品影视| 激情综合色播激情啊| 欧美一级精品在线| 日本午夜一本久久久综合| 欧洲精品视频在线观看| 一区二区三区在线免费| 色婷婷亚洲一区二区三区| 1000部国产精品成人观看| 99re视频这里只有精品| 国产精品不卡在线| 99re成人精品视频| 日本欧美肥老太交大片| 欧美精品 国产精品| 日韩不卡手机在线v区| 欧美一区二区三区小说| 奇米精品一区二区三区四区| 欧美一二三区精品| 美女视频黄 久久| 精品美女一区二区| 国产精品一区一区| 国产欧美一区二区精品性| 成人av第一页| 夜夜嗨av一区二区三区网页| 欧美日韩中字一区| 美女在线视频一区| 久久久精品影视| 波多野结衣在线一区| 亚洲天堂中文字幕| 欧美中文字幕一区| 日韩精品视频网站| 欧美大胆人体bbbb| 国产精品资源网站| 亚洲色图视频免费播放| 欧美伊人精品成人久久综合97| 亚洲777理论| 精品国产一区a| 成人午夜视频在线| 亚洲综合色噜噜狠狠| 欧美丰满一区二区免费视频| 国产一区二区三区日韩| 国产精品美女久久久久久2018| 色天使久久综合网天天| 五月婷婷久久丁香| 精品理论电影在线观看| 成a人片国产精品| 亚洲动漫第一页| 久久综合色综合88| 91污在线观看| 免费的成人av| 中文天堂在线一区| 色一区在线观看| 麻豆精品新av中文字幕| 中文字幕免费不卡| 欧美三级视频在线观看| 国内精品视频一区二区三区八戒| 中文字幕一区二区三区乱码在线| 欧美日韩精品高清| 国产精品一卡二卡在线观看| 亚洲一区日韩精品中文字幕| 久久这里都是精品| 在线观看成人免费视频| 欧美日韩一区二区在线观看视频| 国产欧美一区二区在线| 国产精品福利一区| 亚洲精品ww久久久久久p站| 免费成人美女在线观看.| 色综合中文综合网| 日本成人在线电影网| 亚洲高清一区二区三区| 欧洲人成人精品| 欧美视频在线观看一区二区| 欧美一区二区三区四区视频| 日韩免费观看高清完整版| 久久嫩草精品久久久精品| 久久久久国产精品麻豆ai换脸| 中文字幕一区二区三区蜜月 | 久久精品av麻豆的观看方式| 91精品国产欧美一区二区成人| 国产做a爰片久久毛片| 天天色综合成人网| 亚洲国产高清不卡| 精品久久久网站| 日本韩国欧美一区二区三区| 国产一区二区三区免费看| 首页亚洲欧美制服丝腿| 国产精品国产自产拍在线| 精品久久国产字幕高潮| 欧美日韩国产综合一区二区三区| 99久久精品免费看| 国产成人福利片| 精品系列免费在线观看| 日本不卡一二三| 亚洲成人精品一区二区| 亚洲精品欧美激情| 欧美国产日韩a欧美在线观看| 精品国产一区久久| 欧美一级xxx| 欧美一区二区三区精品| 欧美精品欧美精品系列| 欧美性感一区二区三区| 色综合av在线| 色综合中文综合网| 日韩av电影天堂| 亚洲综合精品久久| 亚洲美女一区二区三区| 中文字幕不卡的av| 久久久久久久国产精品影院| 精品国产免费一区二区三区香蕉| 日韩一区二区三| 欧美一区二区三区视频| 制服.丝袜.亚洲.中文.综合|