⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtusb_io.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
{	BBP_CSR_CFG_STRUC	BbpCsr;	UINT			i = 0;	NTSTATUS		status;	// Verify the busy condition	do	{		status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word);		if (status >= 0)		{		if (!(BbpCsr.field.Busy == BUSY))			break;		}		DBGPRINT(RT_DEBUG_TRACE, ("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", i));		i++;	}	while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));		if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))	{		DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));		return STATUS_UNSUCCESSFUL;	}	// Prepare for write material	BbpCsr.word 				= 0;	BbpCsr.field.fRead			= 0;	BbpCsr.field.Value			= Value;	BbpCsr.field.Busy			= 1;	BbpCsr.field.RegNum 		= Id;	RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word);		pAd->BbpWriteLatch[Id] = Value;	return STATUS_SUCCESS;}/*	========================================================================		Routine Description: Write RF register through MAC	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBWriteRFRegister(	IN	PRTMP_ADAPTER	pAd,	IN	UINT32			Value){	PHY_CSR4_STRUC	PhyCsr4;	UINT			i = 0;	NTSTATUS		status;	NdisZeroMemory(&PhyCsr4, sizeof(PHY_CSR4_STRUC));	do	{		status = RTUSBReadMACRegister(pAd, RF_CSR_CFG0, &PhyCsr4.word);		if (status >= 0)		{		if (!(PhyCsr4.field.Busy))			break;		}		DBGPRINT(RT_DEBUG_TRACE, ("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", i));		i++;	}	while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));	if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))	{		DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));		return STATUS_UNSUCCESSFUL;	}	RTUSBWriteMACRegister(pAd, RF_CSR_CFG0, Value);		return STATUS_SUCCESS;}/*	========================================================================		Routine Description:	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS RTUSBReadEEPROM(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	OUT	PUCHAR			pData,	IN	USHORT			length){	NTSTATUS	Status = STATUS_SUCCESS;#ifdef RTMP_EFUSE_SUPPORT#endif // RTMP_EFUSE_SUPPORT //	{		Status = RTUSB_VendorRequest(			pAd,			(USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),			DEVICE_VENDOR_REQUEST_IN,			0x9,			0,			Offset,			pData,			length);	}	return Status;}/*	========================================================================		Routine Description:	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/NTSTATUS RTUSBWriteEEPROM(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	PUCHAR			pData,	IN	USHORT			length){	NTSTATUS	Status = STATUS_SUCCESS;#ifdef RTMP_EFUSE_SUPPORT#endif // RTMP_EFUSE_SUPPORT //	{		Status = RTUSB_VendorRequest(			pAd,			USBD_TRANSFER_DIRECTION_OUT,			DEVICE_VENDOR_REQUEST_OUT,			0x8,			0,			Offset,			pData,			length);	}		return Status;}NTSTATUS RTUSBReadEEPROM16(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			offset,	OUT	PUSHORT			pData){	NTSTATUS status;	USHORT  localData;		status = RTUSBReadEEPROM(pAd, offset, (PUCHAR)(&localData), 2);	if (status == STATUS_SUCCESS)		*pData = le2cpu16(localData);		return status;}NTSTATUS RTUSBWriteEEPROM16(	IN RTMP_ADAPTER *pAd, 	IN USHORT offset, 	IN USHORT value){	USHORT tmpVal;		tmpVal = cpu2le16(value);	return RTUSBWriteEEPROM(pAd, offset, (PUCHAR)&(tmpVal), 2);}	/*	========================================================================		Routine Description:	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/VOID RTUSBPutToSleep(	IN	PRTMP_ADAPTER	pAd){	UINT32		value;		// Timeout 0x40 x 50us	value = (SLEEPCID<<16)+(OWNERMCU<<24)+ (0x40<<8)+1;	RTUSBWriteMACRegister(pAd, 0x7010, value);	RTUSBWriteMACRegister(pAd, 0x404, 0x30);	//RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS);				DBGPRINT_RAW(RT_DEBUG_ERROR, ("Sleep Mailbox testvalue %x\n", value));	}/*	========================================================================		Routine Description:	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/NTSTATUS RTUSBWakeUp(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;		Status = RTUSB_VendorRequest(		pAd,		USBD_TRANSFER_DIRECTION_OUT,		DEVICE_VENDOR_REQUEST_OUT,		0x01,		0x09,		0,		NULL,		0);		return Status;}/*	========================================================================		Routine Description:	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/VOID	RTUSBInitializeCmdQ(	IN	PCmdQ	cmdq){	cmdq->head = NULL;	cmdq->tail = NULL;	cmdq->size = 0;	cmdq->CmdQState = RTMP_TASK_STAT_INITED;}/*	========================================================================		Routine Description:	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/NDIS_STATUS	RTUSBEnqueueCmdFromNdis(	IN	PRTMP_ADAPTER	pAd,	IN	NDIS_OID		Oid,	IN	BOOLEAN			SetInformation,	IN	PVOID			pInformationBuffer,	IN	UINT32			InformationBufferLength){	NDIS_STATUS	status;	PCmdQElmt	cmdqelmt = NULL;	RTMP_OS_TASK	*pTask = &pAd->cmdQTask;	#ifdef KTHREAD_SUPPORT	if (pTask->kthread_task == NULL)#else	CHECK_PID_LEGALITY(pTask->taskPID) #endif		return (NDIS_STATUS_RESOURCES);	status = os_alloc_mem(pAd, (PUCHAR *)(&cmdqelmt), sizeof(CmdQElmt));	if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL))		return (NDIS_STATUS_RESOURCES);		cmdqelmt->buffer = NULL;		if (pInformationBuffer != NULL)		{				status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength);			if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL))			{       				kfree(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(&pAd->CmdQLock);	if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT)	{		EnqueueCmd((&pAd->CmdQ), cmdqelmt);		status = NDIS_STATUS_SUCCESS;	}	else	{		status = NDIS_STATUS_FAILURE;	}	NdisReleaseSpinLock(&pAd->CmdQLock);		if (status == NDIS_STATUS_FAILURE)	{		if (cmdqelmt->buffer)			os_free_mem(pAd, cmdqelmt->buffer);		os_free_mem(pAd, cmdqelmt);	}	else	RTUSBCMDUp(pAd);    return(NDIS_STATUS_SUCCESS);}/*	========================================================================		Routine Description:	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NDIS_STATUS RTUSBEnqueueInternalCmd(	IN PRTMP_ADAPTER	pAd,	IN NDIS_OID			Oid,	IN PVOID			pInformationBuffer,	IN UINT32			InformationBufferLength)	{	NDIS_STATUS	status;	PCmdQElmt	cmdqelmt = NULL;		status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt, sizeof(CmdQElmt));	if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL))		return (NDIS_STATUS_RESOURCES);	NdisZeroMemory(cmdqelmt, sizeof(CmdQElmt));	if(InformationBufferLength > 0)	{		status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength);		if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL))		{			os_free_mem(pAd, cmdqelmt);			return (NDIS_STATUS_RESOURCES);		}		else		{			NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength);			cmdqelmt->bufferlength = InformationBufferLength;		}	}	else	{		cmdqelmt->buffer = NULL;		cmdqelmt->bufferlength = 0;	}	cmdqelmt->command = Oid;	cmdqelmt->CmdFromNdis = FALSE;	if (cmdqelmt != NULL)	{		NdisAcquireSpinLock(&pAd->CmdQLock);		if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT)		{			EnqueueCmd((&pAd->CmdQ), cmdqelmt);			status = NDIS_STATUS_SUCCESS;		}		else		{			status = NDIS_STATUS_FAILURE;		}		NdisReleaseSpinLock(&pAd->CmdQLock);		if (status == NDIS_STATUS_FAILURE)		{			if (cmdqelmt->buffer)				os_free_mem(pAd, cmdqelmt->buffer);			os_free_mem(pAd, cmdqelmt);		}		else			RTUSBCMDUp(pAd);	}	return(NDIS_STATUS_SUCCESS);}/*	========================================================================		Routine Description:	Arguments:	Return Value:		IRQL = 		Note:	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -