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

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

?? car6koid.cpp

?? WLAN在AR6000程序中的驅動代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

static MPOidInfo g_Car6kSupportedQueryOids[] =
{
	{ OID_CAR6K_GET_PNP_POWER, sizeof(ULONG) },
    { OID_CAR6K_RESUME_WLAN_STATE, sizeof(ULONG) },
	{ OID_CAR6K_FIRMWARE_VERSION, sizeof(ULONG) },
	{ 0,                             0 }
};

NDIS_STATUS
CAR6KMini::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 staus of the driver and/or its NIC.
//
{
	NDIS_STATUS                 Status = NDIS_STATUS_SUCCESS;

	// Check that OID is supported and buffer size is reasonable.
	Status = CheckOidRequest(&g_Car6kSupportedQueryOids[0], Oid, cbBuffer, pcbNeeded);
	if (NDIS_STATUS_INVALID_OID == Status)
	{
		// OID is not a supported CAR6K OID. Check to see if it is an 802_11 OID.
		Status = C802_11Miniport::QueryInformation(Oid, Buffer, cbBuffer, pcbWritten, pcbNeeded);
		goto done;
	}
	if (NDIS_STATUS_SUCCESS != Status)
		goto done;
	
	switch (Oid)
	{
		case OID_CAR6K_GET_PNP_POWER:
			Status = GetPnpPower((ULONG *)Buffer);
			break;

		case OID_CAR6K_RESUME_WLAN_STATE:
			Status = GetResumeWlanState((ULONG *)Buffer);
			break;

		case OID_CAR6K_FIRMWARE_VERSION:
			Status = GetFirmwareVersion((ULONG *)Buffer);
			break;

		default:
			Status = NDIS_STATUS_INVALID_OID;
			break;
	}
    
	if (NDIS_STATUS_SUCCESS == Status)
	{
		if (*pcbNeeded > cbBuffer)
			Status = NDIS_STATUS_INVALID_LENGTH;
		else
			*pcbWritten = *pcbNeeded;
	}
    
done:
	return Status;
}

static MPOidInfo g_Car6kSupportedSetOids[] =
{
	{ OID_CAR6K_802_11_AUTH_ALG, sizeof(ULONG) },
    { OID_CAR6K_RESUME_WLAN_STATE, sizeof(ULONG) },
	{ OID_CAR6K_BMI_DONE, 0 },
	{ OID_CAR6K_BMI_WRITE_MEMORY, sizeof(BMI_WRITE_MEMORY_PARAM) },
	{ OID_CAR6K_BMI_EXECUTE, sizeof(BMI_EXECUTE_PARAM) },
	{ OID_CAR6K_BMI_SET_APP_START, sizeof(BMI_SET_APP_START_PARAM) },
	{ OID_CAR6K_BMI_WRITE_SOC_REGISTER, sizeof(BMI_WRITE_SOC_REG_PARAM) },
	{ OID_CAR6K_BMI_READ_MEMORY, sizeof(BMI_READ_MEMORY_PARAM) },
	{ OID_CAR6K_BMI_READ_SOC_REGISTER, sizeof(BMI_READ_SOC_REG_PARAM) },
#ifdef HTC_RAW_INTERFACE
	{ OID_CAR6K_HTC_RAW_OPEN, 0 },
	{ OID_CAR6K_HTC_RAW_CLOSE, 0 },
	{ OID_CAR6K_HTC_RAW_READ, sizeof(HTC_RAW_READ_PARAM) },
	{ OID_CAR6K_HTC_RAW_WRITE, sizeof(HTC_RAW_WRITE_PARAM) },
#endif //HTC_RAW_INTERFACE

	{ 0, 0 }
};

NDIS_STATUS
CAR6KMini::SetInformation(
	IN  NDIS_OID Oid, 
	IN  PVOID    Buffer, 
	IN  ULONG    cbBuffer,
	OUT PULONG   pcbRead,
	OUT PULONG   pcbNeeded)
{
	NDIS_STATUS Status = NDIS_STATUS_SUCCESS;


	// Check that OID is supported and buffer size is reasonable.
	Status = CheckOidRequest(&g_Car6kSupportedSetOids[0], Oid, cbBuffer, pcbNeeded);
	if (NDIS_STATUS_INVALID_OID == Status)
	{
		// OID is not a supported CAR6K OID. Check to see if it is an 802_11 OID.
		Status = C802_11Miniport::SetInformation(Oid, Buffer, cbBuffer, pcbRead, pcbNeeded);
		goto done;
	}

	if (NDIS_STATUS_SUCCESS != Status)
		goto done;

	switch (Oid)
	{
		case OID_CAR6K_802_11_AUTH_ALG:
			Status = SetCAr6k802_11AuthAlg(*(ULONG *)Buffer);
			break;

		case OID_CAR6K_RESUME_WLAN_STATE:
			Status = SetResumeWlanState(*(ULONG *)Buffer);
			break;

		case OID_CAR6K_BMI_DONE:
			Status = SetCAr6kBmiDone(Buffer);
			break;
		
		case OID_CAR6K_BMI_READ_MEMORY:
			Status = SetCAr6kBmiReadMemory((BMI_READ_MEMORY_PARAM *)Buffer);
			break;

		case OID_CAR6K_BMI_WRITE_MEMORY:
			Status = SetCAr6kBmiWriteMemory((BMI_WRITE_MEMORY_PARAM *)Buffer);
			break;

		case OID_CAR6K_BMI_EXECUTE:
			Status = SetCAr6kBmiExecute((BMI_EXECUTE_PARAM *)Buffer);
			break;

		case OID_CAR6K_BMI_SET_APP_START:
			Status = SetCAr6kBmiSetAppStart((BMI_SET_APP_START_PARAM *)Buffer);
			break;

		case OID_CAR6K_BMI_READ_SOC_REGISTER:
			Status = SetCAr6kBmiReadSocRegister((BMI_READ_SOC_REG_PARAM *)Buffer);
			break;

		case OID_CAR6K_BMI_WRITE_SOC_REGISTER:
			Status = SetCAr6kBmiWriteSocRegister((BMI_WRITE_SOC_REG_PARAM *)Buffer);
			break;

#ifdef HTC_RAW_INTERFACE
		case OID_CAR6K_HTC_RAW_OPEN:
			Status = SetCAr6kHtcRawOpen();
			break;

		case OID_CAR6K_HTC_RAW_CLOSE:
			Status = SetCAr6kHtcRawClose();
			break;

		case OID_CAR6K_HTC_RAW_READ:
			Status = SetCAr6kHtcRawRead((HTC_RAW_READ_PARAM *)Buffer);
			break;

		case OID_CAR6K_HTC_RAW_WRITE:
			Status = SetCAr6kHtcRawWrite((HTC_RAW_WRITE_PARAM *)Buffer);
			break;
#endif //HTC_RAW_INTERFACE

		default:
			ASSERT(FALSE);
			Status = NDIS_STATUS_INVALID_OID;
			break;
	}

done:
	return Status;
}

///////////// OID_GEN Query Handlers ////////////////////


PNDIS_OID
CAR6KMini::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.
//
//  Returns a pointer to the next unused slot in pOidBuffer
//  after the oids have been added.
//
{
	PNDIS_OID   p_Car6kOidListStart;
	ULONG       OidListCount = 0;

	// First fill in base class supported OIDs
	p_Car6kOidListStart = C802_11Miniport::GetSupportedOidList(pOidBuffer, pMaxOidsToAddToBuffer, pTotalNumberOfSupportedOids);

	// Now append CAR6K OIDs
	AddOidsToList(&g_Car6kSupportedQueryOids[0], p_Car6kOidListStart, &OidListCount, pMaxOidsToAddToBuffer, pTotalNumberOfSupportedOids);
	AddOidsToList(&g_Car6kSupportedSetOids[0],   p_Car6kOidListStart, &OidListCount, pMaxOidsToAddToBuffer, pTotalNumberOfSupportedOids);

	return p_Car6kOidListStart + OidListCount;
}

ULONG
CAR6KMini::GetGenVendorDriverVersion()
{
	return ATH_SW_VER_MAJOR << 16 | ATH_SW_VER_MINOR;
}

ULONG
CAR6KMini::GetGenMacOptions()
// A bitmask that defines optional properties of the underlying driver or its NIC.
{
	return NDIS_MAC_OPTION_NO_LOOPBACK;
}

NDIS_HARDWARE_STATUS
CAR6KMini::GetGenHardwareStatus()
// The current hardware status of the underlying NIC 
{
	NDIS_HARDWARE_STATUS HardwareStatus;

	if (!m_WMIReady)
		HardwareStatus =  NdisHardwareStatusInitializing;
	else
		HardwareStatus = NdisHardwareStatusReady;

	return HardwareStatus;
}

NDIS_MEDIA_STATE
CAR6KMini::GetGenMediaConnectStatus()
// Whether the media is currently connected and able to Tx/Rx packets.
{
	NDIS_MEDIA_STATE MediaState;

	if (m_Connected)
		MediaState = NdisMediaStateConnected;
	else
		MediaState = NdisMediaStateDisconnected;

	return MediaState;
}

ULONG
CAR6KMini::GetGenLinkSpeed()
// Link speed in units of 100 bps.
{
	return m_BitrateKpbs * 10;
}

ULONG
CAR6KMini::GetGenTransmitBufferSpace()
// The amount of memory, in bytes, on the NIC that is available for buffering Tx data.
{
	return 1512 * 16;
}

ULONG
CAR6KMini::GetGenReceiveBufferSpace()
// The amount of memory, in bytes, on the NIC that is available for buffering Rx data.
{
	return 1512 * 16;
}

ULONG
CAR6KMini::GetGenTransmitBlockSize()
// Minimum amount of storage, in bytes, that a single packet
// occupies in the Tx buffer space of the NIC.
{
	return 1500;
}

ULONG
CAR6KMini::GetGenReceiveBlockSize()
// Minimum amount of storage, in bytes, that a single packet
// occupies in the Rx buffer space of the NIC.
{
	return 1500;
}

#define ATHEROS_IEEE_VENDOR_CODE	       0x00037F
#define ATHEROS_AR6001_NIC_CODE       0x00 // Placeholder

ULONG
CAR6KMini::GetGenVendorId()
// The OID_GEN_VENDOR_ID OID specifies a three-byte IEEE-registered vendor code,
// followed by a single byte that the vendor assigns to identify a particular NIC.
// Vendors without an IEEE registered code should use 0xFFFFFF for the vendor code.
{
	return (ATHEROS_IEEE_VENDOR_CODE << 8) | ATHEROS_AR6001_NIC_CODE;
}

const char *
CAR6KMini::GetGenVendorDescription()
// The OID_GEN_VENDOR_DESCRIPTION OID points to a zero-terminated string describing the NIC.
{
	return "Atheros AR6001 802.11 Network Adapter";
}

USHORT
CAR6KMini::GetGenDriverVersion()
// The NDIS version in use by the NIC driver.
// The high byte is the major version number; the low byte is the minor version number.
{
	return (m_NdisDriverMajorVersion << 8) | m_NdisDriverMinorVersion;
}

ULONG
CAR6KMini::GetSupportedPacketTypes()
// Return the types of packets supported by the miniport,
// used in conjuction with OID_GEN_CURRENT_PACKET_FILTER requests.
{
	return NDIS_PACKET_TYPE_ALL_MULTICAST
		 | NDIS_PACKET_TYPE_ALL_LOCAL
		 | NDIS_PACKET_TYPE_BROADCAST
		 | NDIS_PACKET_TYPE_DIRECTED
		 | NDIS_PACKET_TYPE_MULTICAST
		 ;
}

ULONG
CAR6KMini::GetGenXmitOk()
// Number of packets transmitted ok. 
{
	return 0;
}

ULONG
CAR6KMini::GetGenRcvOk()
// Number of packets received ok. 
{
	return 0;
}

ULONG
CAR6KMini::GetGenXmitError()
// Number of transmitted packets that had errors. 
{
	return 0;
}

ULONG
CAR6KMini::GetGenRcvError()
// Number of received packets that had FCS/framing errors. 
{
	return 0;
}

ULONG
CAR6KMini::GetGenRcvNoBuffer()
// Number of packets that could not be received because no buffer space was available. 
{
	return 0;
}

void
CAR6KMini::GetPnpCapabilities(
	OUT NDIS_PNP_CAPABILITIES *pCaps
	)
{
	// Wake on event not supported but power mgmt is supported
	PNDIS_PM_WAKE_UP_CAPABILITIES pWakeCaps = &pCaps->WakeUpCapabilities;
 
	pWakeCaps->MinMagicPacketWakeUp = NdisDeviceStateUnspecified;
	pWakeCaps->MinPatternWakeUp     = NdisDeviceStateUnspecified;
	pWakeCaps->MinLinkChangeWakeUp  = NdisDeviceStateUnspecified;
 

	return;
}
 
NDIS_STATUS
CAR6KMini::QueryPnpPower(
		IN NDIS_DEVICE_POWER_STATE *pDevPowerState
		)
{
	NDIS_STATUS Status;

	if (*pDevPowerState == NdisDeviceStateD3) {
		Status = NDIS_STATUS_SUCCESS;
	} else {
		Status = NDIS_STATUS_NOT_SUPPORTED;
	}

	return Status;
}

 
BYTE *
CAR6KMini::Get802_3PermanentAddress()
// The address of the NIC encoded in the hardware.
{
	return &m_PermanentAddress[0];
}

BYTE *
CAR6KMini::Get802_3CurrentAddress()
// The address the NIC is currently using.
{
	return &m_CurrentAddress[0];
}


ULONG
CAR6KMini::Get802_3MacOptions()
{
	return 0;
}

ULONG
CAR6KMini::Get802_3RcvErrorAlignment()
// Number of received packets that had alignment errors
{
	return 0;
}

ULONG
CAR6KMini::Get802_3XmitOneCollision()
// Number of transmitted packets that were transmitted after one collision
{
	// Since AR6K is a wireless NIC and not using the Ethernet physical layer
	// there are no collisions.
	return 0;
}

ULONG
CAR6KMini::Get802_3XmitMoreCollision()
// Number of transmitted packets that were transmitted after more than one collision
{
	// Since AR6K is a wireless NIC and not using the Ethernet physical layer
	// there are no collisions.
	return 0;
}

NDIS_STATUS
 CAR6KMini::SetPnpPower(
         IN NDIS_DEVICE_POWER_STATE *pDevPowerState
         )
{
	NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
	WCHAR       sysPwrStateName[32];
	DWORD       sysPwrState;
	DWORD       result;

	// Already in the requested power state
	if (m_PowerState == *pDevPowerState) {
		return NDIS_STATUS_SUCCESS;
	} 

#ifdef UNDER_CE
	// Don't call the Power Manager APIs directly.
	// Doing so assumes the PM is sysgen'ed into every image.
	typedef DWORD GetSystemPowerStateProto(LPWSTR, DWORD, PDWORD);
	GetSystemPowerStateProto *pfnGetSystemPowerState = NULL;
	
	HMODULE hCoreDll = (HMODULE) LoadLibrary(TEXT("coredll.dll"));
	if (NULL != hCoreDll) {
	    pfnGetSystemPowerState = (GetSystemPowerStateProto *)
	        GetProcAddress(hCoreDll, TEXT("GetSystemPowerState"));
	}

	if (NULL == pfnGetSystemPowerState) {
	    result = ERROR_SUCCESS;
	} else {
	    result = pfnGetSystemPowerState(sysPwrStateName, sizeof(sysPwrStateName) / sizeof(WCHAR), &sysPwrState);
	}
	
	if (NULL != hCoreDll) {
	    FreeLibrary(hCoreDll);
	}
#else /*!UNDER_CE*/
	result = GetSystemPowerState(sysPwrStateName, sizeof(sysPwrStateName) / sizeof(WCHAR), &sysPwrState);
#endif /*UNDER_CE*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品最新网址| 在线观看精品一区| 精品99一区二区| 全部av―极品视觉盛宴亚洲| 在线观看免费一区| 亚洲精品少妇30p| 色哟哟国产精品免费观看| 国产精品久久福利| 不卡电影免费在线播放一区| 国产三级欧美三级日产三级99| 久久99九九99精品| 久久这里只有精品视频网| 国内精品伊人久久久久av一坑| 日韩美女天天操| 精品影视av免费| 久久影院视频免费| 国产99久久久精品| 国产精品天美传媒| www.欧美色图| 亚洲欧洲精品天堂一级 | 亚洲日本va在线观看| 成人动漫av在线| 综合久久久久综合| 欧美在线视频全部完| 亚洲国产另类av| 欧美一区二区三区日韩视频| 免费在线观看一区| 欧美成人一区二区三区在线观看| 精品影院一区二区久久久| 久久久久久麻豆| 懂色av一区二区在线播放| 中文成人av在线| 色噜噜偷拍精品综合在线| 亚洲一区二区在线观看视频| 欧美精品黑人性xxxx| 美女视频第一区二区三区免费观看网站 | 粉嫩13p一区二区三区| 中文字幕欧美三区| 在线免费一区三区| 日韩va亚洲va欧美va久久| 欧美大片一区二区| 国产成人免费视频一区| 亚洲欧美成人一区二区三区| 欧美日韩国产首页| 精久久久久久久久久久| 国产精品蜜臀在线观看| 国产三级精品在线| 99精品一区二区| 亚洲成人高清在线| 久久久夜色精品亚洲| 91免费视频网址| 日韩黄色免费电影| 国产精品天干天干在线综合| 欧美性受xxxx黑人xyx| 激情久久五月天| 亚洲男同性视频| 欧美一区二区三区白人| 国产91在线观看丝袜| 亚洲一区二区精品3399| 精品国产乱码久久久久久老虎| 国产成人欧美日韩在线电影| 亚洲午夜久久久久久久久电影网| 精品99一区二区| 在线亚洲人成电影网站色www| 麻豆一区二区99久久久久| 国产精品传媒视频| 欧美一二三区在线观看| 福利91精品一区二区三区| 午夜精品aaa| 国产女主播一区| 欧美精选一区二区| 国产成人免费在线| 日韩va亚洲va欧美va久久| 国产精品久久久久久久久久久免费看| 欧美日韩国产精选| jiyouzz国产精品久久| 日本一不卡视频| 国产精品久久久99| 精品国产91乱码一区二区三区 | 91精品国产免费| 99精品在线免费| 激情丁香综合五月| 亚洲精品美国一| 久久精品亚洲精品国产欧美kt∨| 欧美在线免费观看亚洲| 国产黄色成人av| 日韩精品一级中文字幕精品视频免费观看 | 中文字幕日韩欧美一区二区三区| 日韩视频永久免费| 色婷婷久久综合| 国产成人免费视频精品含羞草妖精| 三级不卡在线观看| 亚洲精品国产一区二区三区四区在线| 亚洲精品一区二区三区影院| 欧美精品高清视频| 91亚洲精品久久久蜜桃| 国产精品一线二线三线精华| 五月激情综合网| 亚洲黄色尤物视频| 中文字幕二三区不卡| www国产亚洲精品久久麻豆| 欧美日韩免费电影| 在线亚洲一区二区| 99精品欧美一区| 国产成人av电影在线播放| 久久国产生活片100| 丝袜美腿成人在线| 亚洲一区二区三区美女| 亚洲视频你懂的| 欧美高清在线精品一区| 日韩精品一区二区三区蜜臀| 在线播放欧美女士性生活| 色悠悠亚洲一区二区| 99九九99九九九视频精品| 成人午夜碰碰视频| 91麻豆精品国产91| 欧美图片一区二区三区| 色视频一区二区| 色999日韩国产欧美一区二区| 成人久久18免费网站麻豆| 国产在线精品免费av| 老司机免费视频一区二区三区| 日韩国产在线一| 亚洲va欧美va人人爽| 亚洲va韩国va欧美va| 亚洲丶国产丶欧美一区二区三区| 亚洲影院免费观看| 亚洲综合在线视频| 一区二区三区国产精华| 一区二区三区不卡视频在线观看 | 亚洲国产欧美日韩另类综合| 一区二区三区在线视频免费| 亚洲人成网站影音先锋播放| 成人欧美一区二区三区黑人麻豆| 国产精品午夜久久| 17c精品麻豆一区二区免费| 亚洲欧洲精品一区二区精品久久久| 国产精品久久久久久久久果冻传媒 | 7777女厕盗摄久久久| 欧美久久久久免费| 91精品国产全国免费观看| 欧美久久久一区| 日韩三级在线观看| 欧美精品一区二区不卡| 久久久99精品久久| 国产精品久久久久久久第一福利| 亚洲色图在线播放| 亚洲韩国精品一区| 日韩国产欧美在线观看| 精品一区二区久久| 福利一区在线观看| 97久久人人超碰| 欧美性xxxxxxxx| 日韩欧美中文字幕制服| 久久久午夜精品| 国产精品久久午夜| 一区二区三区四区不卡在线 | 成人免费看片app下载| 91丝袜美腿高跟国产极品老师| 在线视频国内自拍亚洲视频| 欧美日韩高清一区二区| 日韩丝袜美女视频| 欧美韩国日本一区| 亚洲欧美另类在线| 丝袜美腿亚洲一区| 国产一区不卡在线| 99re8在线精品视频免费播放| 欧美视频在线观看一区二区| 91精品国产综合久久精品| 久久午夜色播影院免费高清| 国产精品电影一区二区三区| 亚洲午夜私人影院| 国模娜娜一区二区三区| 99久久精品一区二区| 9191久久久久久久久久久| 久久综合九色欧美综合狠狠| 日韩一区欧美一区| 日韩国产一区二| 高清av一区二区| 777精品伊人久久久久大香线蕉| 久久久久久久久97黄色工厂| 亚洲毛片av在线| 久久成人免费网| 91亚洲精品久久久蜜桃| 日韩一级免费一区| 国产精品乱子久久久久| 亚洲电影一级片| 国产91富婆露脸刺激对白 | 成人app网站| 91精品国产综合久久香蕉的特点| 日本怡春院一区二区| 国产成人av一区二区三区在线观看| 欧亚洲嫩模精品一区三区| wwww国产精品欧美| 亚洲一级电影视频| 国产suv精品一区二区883| 欧美视频第二页| 国产欧美日韩不卡免费| 午夜不卡av免费| 97久久精品人人爽人人爽蜜臀|