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

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

?? rtusb_io.c

?? 臺灣RALink公司的 rt2570無線 802.11g 網卡的 驅動的源代碼 ,支持linux2.4以上的 內河
?? C
?? 第 1 頁 / 共 2 頁
字號:
	{
		RTUSBReadMACRegister(pAdapter, PHY_CSR10, (PUSHORT)&PhyCsr10);
		if (!(PhyCsr10.field.Busy))
			break;
		i++;
	}
	while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS)));

	if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS)))
	{
		DBGPRINT_RAW(RT_DEBUG_ERROR, "Retry count exhausted or device removed!!!\n");
		return STATUS_UNSUCCESSFUL;
	}

	RTUSBWriteMACRegister(pAdapter, PHY_CSR9, (USHORT)(Value & 0x0000ffff));
	
	PhyCsr10.value = (USHORT)(Value >> 16);
	RTUSBWriteMACRegister(pAdapter, PHY_CSR10, PhyCsr10.value);
	
	return STATUS_SUCCESS;
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
NTSTATUS	RTUSBReadEEPROM(
	IN	PRT2570ADAPTER	pAdapter,
	IN	USHORT			Offset,
	OUT	PUCHAR			pData,
	IN	USHORT			length)
{
	NTSTATUS	Status;
	
	Status = RTUSB_VendorRequest(
		pAdapter,
		0,
		DEVICE_VENDOR_REQUEST_IN,
		0x9,
		0,
		Offset,
		pData,
		length);
	
	return Status;
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
NTSTATUS	RTUSBWriteEEPROM(
	IN	PRT2570ADAPTER	pAdapter,
	IN	USHORT			Offset,
	IN	PUCHAR			pData,
	IN	USHORT			length)
{
	NTSTATUS	Status;
	
	Status = RTUSB_VendorRequest(
		pAdapter,
		0,
		DEVICE_VENDOR_REQUEST_OUT,
		0x8,
		0,
		Offset,
		pData,
		length);
	
	return Status;
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
VOID	RTUSBDequeueCmd(
	IN	PCmdQ		cmdq,
	OUT	PCmdQElmt	*pcmdqelmt)
{
	*pcmdqelmt = cmdq->head;
	
	if (*pcmdqelmt != NULL)
	{
		cmdq->head = cmdq->head->next;
		cmdq->size--;
		if (cmdq->size == 0)
			cmdq->tail = NULL;
	}
}
/*
	  usb_control_msg - Builds a control urb, sends it off and waits for completion
	  @dev: pointer to the usb device to send the message to
	  @pipe: endpoint "pipe" to send the message to
	  @request: USB message request value
	  @requesttype: USB message request type value
	  @value: USB message value
	  @index: USB message index value
	  @data: pointer to the data to send
	  @size: length in bytes of the data to send
	  @timeout: time in jiffies to wait for the message to complete before
			  timing out (if 0 the wait is forever)
	  Context: !in_interrupt ()

	  This function sends a simple control message to a specified endpoint
	  and waits for the message to complete, or timeout.
	  If successful, it returns the number of bytes transferred, otherwise a negative error number.

	 Don't use this function from within an interrupt context, like a
	  bottom half handler.	If you need an asynchronous message, or need to send
	  a message from within interrupt context, use usb_submit_urb()
	  If a thread in your driver uses this call, make sure your disconnect()
	  method can wait for it to complete.  Since you don't have a handle on
	  the URB used, you can't cancel the request.
  
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
INT	RTUSB_VendorRequest(
	IN	PRT2570ADAPTER	pAdapter,
	IN	ULONG			TransferFlags,
	IN	UCHAR			RequestType,
	IN	UCHAR			Request,
	IN	USHORT			Value,
	IN	USHORT			Index,
	IN	PVOID			TransferBuffer,
	IN	ULONG			TransferBufferLength)
{
	int ret;

	if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS))
	{
		DBGPRINT(RT_DEBUG_ERROR,"device connected\n");
		return -1;
	}
	else if (in_interrupt())	
	{
		DBGPRINT(RT_DEBUG_ERROR,"in_interrupt, return RTUSB_VendorRequest\n");

		return -1;
	}
	else
	{
	
		if( RequestType == DEVICE_VENDOR_REQUEST_OUT)
			ret=usb_control_msg(pAdapter->usb, usb_sndctrlpipe( pAdapter->usb, 0 ), Request, RequestType, Value,Index, TransferBuffer, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES);
		else if(RequestType == DEVICE_VENDOR_REQUEST_IN)
			ret=usb_control_msg(pAdapter->usb, usb_rcvctrlpipe( pAdapter->usb, 0 ), Request, RequestType, Value,Index, (PUSHORT)TransferBuffer, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES);
		else
		{
			DBGPRINT(RT_DEBUG_ERROR,"vendor request direction is failed\n");
			ret = -1;
		}

		if((RequestType == DEVICE_VENDOR_REQUEST_OUT) && (ret != 0))
			DBGPRINT(RT_DEBUG_TRACE,"USBVendorRequest  ret=%d,	\n",ret);
	
//	if((RequestType == DEVICE_VENDOR_REQUEST_IN) && (ret != 2))
//		DBGPRINT(RT_DEBUG_TRACE,"USBVendorRequest	read ret=%d,  TransferBuffer = 0x%x\n",ret, *(PUSHORT)TransferBuffer);
//	if((TransferBuffer != NULL) )
//		DBGPRINT(RT_DEBUG_TRACE,"USBVendorRequest	ret=%d, read from = 0x%x TransferBuffer = 0x%x\n",ret,Value, *(PUSHORT)TransferBuffer);

		if (ret <0) {
			int temp_i=0;
			DBGPRINT(RT_DEBUG_ERROR,"USBVendorRequest failed ret=%d, \n",ret);
			ret = 0;
			do
			{
				if( RequestType == DEVICE_VENDOR_REQUEST_OUT)
					ret=usb_control_msg(pAdapter->usb, usb_sndctrlpipe( pAdapter->usb, 0 ), Request, RequestType, Value,Index, TransferBuffer, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES);
				else if(RequestType == DEVICE_VENDOR_REQUEST_IN)
					ret=usb_control_msg(pAdapter->usb, usb_rcvctrlpipe( pAdapter->usb, 0 ), Request, RequestType, Value,Index, (PUSHORT)TransferBuffer, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES);
				temp_i++;
			} while( (ret < 0) && (temp_i <= 1) );

			if( ret >= 0)
				return ret;
			
		}
	}
	return ret;
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
VOID	RTUSBInitializeCmdQ(
	IN	PCmdQ	cmdq)
{
	cmdq->head = NULL;
	cmdq->tail = NULL;
	cmdq->size = 0;
}


/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
NDIS_STATUS	RTUSBEnqueueCmdFromNdis(
	IN	PRT2570ADAPTER	pAdapter,
	IN	NDIS_OID		Oid,
	IN	BOOLEAN			SetInformation,
	IN	PVOID			pInformationBuffer,
	IN	ULONG			InformationBufferLength)
{
	PCmdQElmt	cmdqelmt = NULL;
	
	if (pAdapter->RTUSBCmdThr_pid < 0) 
		return NDIS_STATUS_RESOURCES;

	cmdqelmt = (PCmdQElmt) kmalloc(sizeof(CmdQElmt), GFP_KERNEL);
	if (!cmdqelmt) 
	{
		DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
		kfree((PCmdQElmt)cmdqelmt);
		return NDIS_STATUS_RESOURCES;
	}

	if ((Oid == RT_OID_SINGLE_READ_MAC) ||
		(Oid == RT_OID_MULTI_READ_MAC) ||
		(Oid == RT_OID_VENDOR_READ_BBP) ||
		(Oid == RT_OID_USB_VENDOR_EEPROM_READ))
	{
		cmdqelmt->buffer = pInformationBuffer;
	}
	else
	{
		cmdqelmt->buffer = NULL;
		if (pInformationBuffer != NULL)
		{
			cmdqelmt->buffer =	kmalloc(InformationBufferLength, GFP_KERNEL);
			if ((!cmdqelmt->buffer) )
			{
				kfree((PVOID)cmdqelmt->buffer);
				kfree((PCmdQElmt)cmdqelmt);
				return (NDIS_STATUS_RESOURCES);
			}
			else
			{
				NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength);
				cmdqelmt->bufferlength = InformationBufferLength;
			}
		}
		else
			cmdqelmt->bufferlength = 0;
	}
	
	cmdqelmt->command = Oid;
	cmdqelmt->CmdFromNdis = TRUE;
	if (SetInformation == TRUE)
		cmdqelmt->SetOperation = TRUE;
	else
		cmdqelmt->SetOperation = FALSE;

	NdisAcquireSpinLock(&pAdapter->CmdQLock);
	EnqueueCmd((&pAdapter->CmdQ), cmdqelmt);
	NdisReleaseSpinLock(&pAdapter->CmdQLock);
	
	RTUSBCMDUp(pAdapter, &pAdapter->RTUSBCmd_semaphore);

	if ((Oid == OID_802_11_BSSID_LIST_SCAN) ||
		(Oid == RT_OID_802_11_BSSID) ||
		(Oid == OID_802_11_SSID) ||
		(Oid == OID_802_11_DISASSOCIATE))
	{
		return(NDIS_STATUS_SUCCESS);
	}
	else
	{
		//IncrementIoCount(pAdapter);
		//return(NDIS_STATUS_PENDING);
	}
		return(NDIS_STATUS_SUCCESS);
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
VOID	RTUSBEnqueueInternalCmd(
	IN	PRT2570ADAPTER	pAdapter,
	IN	NDIS_OID		Oid)
{
	PCmdQElmt	cmdqelmt = NULL;

	if (pAdapter->RTUSBCmdThr_pid < 0) 
		return;
	
	switch (Oid)
	{
		case RT_OID_CHECK_GPIO:
			cmdqelmt = &(pAdapter->CmdQElements[CHECK_GPIO]);
			break;
			
		case RT_OID_PERIODIC_EXECUT:
			cmdqelmt = &(pAdapter->CmdQElements[PERIODIC_EXECUT]);
			break;
			
		//For Alpha only
		case RT_OID_ASICLED_EXECUT:
			cmdqelmt = &(pAdapter->CmdQElements[ASICLED_EXECUT]);
			break;

		case RT_OID_UPDATE_TX_RATE:
			cmdqelmt = &(pAdapter->CmdQElements[UPDATE_TX_RATE]);
			break;
			
		case RT_OID_SET_PSM_BIT_SAVE:
			cmdqelmt = &(pAdapter->CmdQElements[SET_PSM_SAVE]);
			break;
			
		case RT_OID_LINK_DOWN:
			cmdqelmt = &(pAdapter->CmdQElements[LINK_DOWN]);
			break;
			
		case RT_OID_USB_RESET_BULK_IN:
			cmdqelmt = &(pAdapter->CmdQElements[RESET_BULKIN]);
			break;
			
		case RT_OID_USB_RESET_BULK_OUT:
			cmdqelmt = &(pAdapter->CmdQElements[RESET_BULKOUT]);
			break;
			
		case RT_OID_RESET_FROM_ERROR:
			cmdqelmt = &(pAdapter->CmdQElements[RESET_FROM_ERROR]);
			break;
			
		case RT_OID_RESET_FROM_NDIS:
			cmdqelmt = &(pAdapter->CmdQElements[RESET_FROM_NDIS]);
			break;

		default:
			break;
	}

	if ((cmdqelmt != NULL) && (cmdqelmt->InUse == FALSE) && (pAdapter->RTUSBCmdThr_pid > 0))
	{
		cmdqelmt->InUse = TRUE;
		cmdqelmt->command = Oid;

		NdisAcquireSpinLock(&pAdapter->CmdQLock);
		EnqueueCmd((&pAdapter->CmdQ), cmdqelmt);
		NdisReleaseSpinLock(&pAdapter->CmdQLock);
		RTUSBCMDUp(pAdapter, &pAdapter->RTUSBCmd_semaphore);
	}
}

/*
	========================================================================
	
	Routine Description:
	  Creates an IRP to submite an IOCTL_INTERNAL_USB_RESET_PORT
	  synchronously. Callers of this function must be running at
	  PASSIVE LEVEL.

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
NTSTATUS	RTUSB_ResetDevice(
	IN	PRT2570ADAPTER	pAdapter)
{
	NTSTATUS		Status = TRUE;

	DBGPRINT_RAW(RT_DEBUG_TRACE, "--->USB_ResetDevice\n");
	//RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS);
	return Status;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av一区二区三区| 91精品国产91久久综合桃花| 色丁香久综合在线久综合在线观看| 一区二区三区中文在线观看| 蜜桃av噜噜一区二区三区小说| 亚洲1区2区3区4区| 北条麻妃一区二区三区| 岛国精品一区二区| 日韩一区二区电影在线| 成人h版在线观看| 成人精品视频一区二区三区| 日韩网站在线看片你懂的| 综合分类小说区另类春色亚洲小说欧美| 国产午夜精品久久久久久免费视| 国产亚洲一区二区三区| 日韩中文字幕不卡| 欧美日韩综合在线免费观看| 欧美一区二区国产| 国产视频911| 久久精品国产第一区二区三区| 国产精品综合网| 日韩欧美123| 久久99热这里只有精品| 日韩欧美在线网站| 久久激情综合网| 欧美电影免费观看高清完整版| 欧美国产乱子伦| 国产精品一级片在线观看| 日韩一区二区三区在线视频| 亚洲.国产.中文慕字在线| 久久国产日韩欧美精品| 51精品久久久久久久蜜臀| 日韩av中文在线观看| 欧美人妖巨大在线| 中文字幕国产一区二区| 成人精品电影在线观看| 亚洲视频狠狠干| 美腿丝袜在线亚洲一区| 欧美不卡一区二区三区四区| 奇米888四色在线精品| xfplay精品久久| 国产成人精品免费在线| 1024亚洲合集| 欧美色综合网站| 久久超碰97人人做人人爱| 久久综合色天天久久综合图片| 一区二区三区在线影院| 久久国产夜色精品鲁鲁99| 色婷婷av一区| 亚洲成人第一页| 久久无码av三级| av在线不卡网| 日韩精品一区第一页| www.欧美色图| 性做久久久久久免费观看| 成人高清视频在线| 亚洲bdsm女犯bdsm网站| 精品va天堂亚洲国产| k8久久久一区二区三区| 国产亚洲综合性久久久影院| av激情综合网| 日韩av一区二| 国产精品久久毛片| 欧美高清精品3d| 粉嫩av亚洲一区二区图片| 亚洲激情在线播放| 欧美成人三级在线| 91女神在线视频| 久久精品国产免费看久久精品| 7777精品久久久大香线蕉| 亚洲一区欧美一区| 欧美成人aa大片| 在线免费观看日韩欧美| 国产在线观看一区二区| 亚洲国产精品一区二区www在线| 91麻豆国产精品久久| 久久 天天综合| 亚洲不卡一区二区三区| 中文字幕av一区 二区| 欧美一区二区视频在线观看2022| 日本最新不卡在线| 综合欧美一区二区三区| 久久色在线观看| 国产麻豆精品95视频| 午夜电影网亚洲视频| 日韩美女视频19| 久久精品免费在线观看| 成人毛片视频在线观看| 国产欧美一区二区三区沐欲| 粉嫩蜜臀av国产精品网站| 老司机精品视频线观看86| 亚洲一区在线看| 日韩色在线观看| 欧美精品少妇一区二区三区| 色综合 综合色| 99久久99精品久久久久久| 国产一区二区三区免费| 看电影不卡的网站| 久久久久久97三级| 精品日韩欧美一区二区| 欧美日韩国产天堂| 欧美亚男人的天堂| 色屁屁一区二区| 蜜臀国产一区二区三区在线播放| 久久久久久久综合色一本| 日韩精品一区二区三区在线观看| 国产69精品久久久久777| 美女视频免费一区| 男人的天堂亚洲一区| 欧美国产精品一区| 国产日韩精品一区二区浪潮av | 成人理论电影网| 亚洲人成在线播放网站岛国| 6080午夜不卡| 51精品秘密在线观看| 成人av高清在线| 99综合影院在线| 99久久99久久久精品齐齐| 91色porny蝌蚪| 欧美探花视频资源| 国产裸体歌舞团一区二区| 精品一区二区三区在线观看国产| 亚洲女人的天堂| 中文字幕一区二区三区四区不卡 | 日韩精品一区二区在线观看| 日韩一区二区三区高清免费看看| 国产成人在线视频播放| 岛国精品在线观看| 91网址在线看| 欧美美女一区二区| 亚洲精品一区二区三区在线观看| 91国产免费看| 7777女厕盗摄久久久| 日韩欧美国产综合| 国产精品亲子伦对白| 亚洲免费在线电影| 亚洲成人免费观看| 久久se精品一区二区| 成人网男人的天堂| 色天使色偷偷av一区二区| 欧美一区二区视频免费观看| 国产日韩欧美亚洲| 亚洲图片自拍偷拍| 激情综合色播激情啊| 99国产精品久| 国产成人免费xxxxxxxx| 色综合久久久久网| 欧美不卡在线视频| 一区二区三区欧美视频| 中文字幕在线观看不卡视频| 精品国产精品一区二区夜夜嗨| 欧美日韩亚洲高清一区二区| 精品99久久久久久| 精品剧情在线观看| 国产精品麻豆久久久| 日本91福利区| 91免费在线看| 国产欧美一区二区三区网站| 五月综合激情婷婷六月色窝| 国产风韵犹存在线视精品| 欧美色爱综合网| 欧美精品久久99久久在免费线| 欧美特级限制片免费在线观看| 色婷婷综合视频在线观看| 26uuu国产电影一区二区| 亚洲综合在线电影| 国产精品亚洲成人| 制服丝袜成人动漫| 中文字幕欧美一| 国产中文一区二区三区| 欧美日韩国产小视频在线观看| 欧美美女黄视频| 国产精品美女久久久久久| 美女被吸乳得到大胸91| 欧美三级三级三级| 日韩一级大片在线| 亚洲精品国产视频| 午夜精品久久久久久久99樱桃| 天堂一区二区在线| 色欲综合视频天天天| 欧美激情综合在线| 狠狠狠色丁香婷婷综合久久五月| 成人性视频免费网站| 亚洲精品一区二区三区精华液| 国产精品免费丝袜| 国产一区二区不卡在线| 99久久久久久| 欧美日韩久久不卡| 亚洲乱码中文字幕综合| 成人精品在线视频观看| 日本一区二区免费在线| 精品制服美女丁香| 欧美tk—视频vk| 经典三级视频一区| 日韩精品专区在线影院重磅| 日本中文字幕一区二区有限公司| 国产91在线观看丝袜| 国产亚洲成av人在线观看导航 | 国产精品第五页| 99在线视频精品|