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

📄 rtusb_io.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
/* ************************************************************************* * Ralink Tech Inc. * 5F., No.36, Taiyuan St., Jhubei City, * Hsinchu County 302, * Taiwan, R.O.C. * * (c) Copyright 2002-2007, Ralink Technology, Inc. * * This program is free software; you can redistribute it and/or modify  *  * it under the terms of the GNU General Public License as published by  *  * the Free Software Foundation; either version 2 of the License, or     *  * (at your option) any later version.                                   *  *                                                                       *  * This program is distributed in the hope that it will be useful,       *  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *  * GNU General Public License for more details.                          *  *                                                                       *  * You should have received a copy of the GNU General Public License     *  * along with this program; if not, write to the                         *  * Free Software Foundation, Inc.,                                       *  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *  *                                                                       *  *************************************************************************  	Module Name:	rtusb_io.c	Abstract:	Revision History:	Who			When	    What	--------	----------  ----------------------------------------------	Name		Date	    Modification logs	Paul Lin    06-25-2004  created*/#ifdef RTMP_MAC_USB#include	"rt_config.h"/*	========================================================================		Routine Description: NIC initialization complete	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/static NTSTATUS	RTUSBFirmwareRun(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		USBD_TRANSFER_DIRECTION_OUT,		DEVICE_VENDOR_REQUEST_OUT,		0x01,		0x8,		0,		NULL,		0);		return Status;}/*	========================================================================		Routine Description: Write Firmware to NIC.	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS RTUSBFirmwareWrite(	IN PRTMP_ADAPTER pAd,	IN PUCHAR		pFwImage,	IN ULONG		FwLen){	UINT32		MacReg;	NTSTATUS 	Status;//	ULONG 		i;	USHORT		writeLen;		Status = RTUSBReadMACRegister(pAd, MAC_CSR0, &MacReg);	writeLen = FwLen;	RTUSBMultiWrite(pAd, FIRMWARE_IMAGE_BASE, pFwImage, writeLen);		Status = RTUSBWriteMACRegister(pAd, 0x7014, 0xffffffff);	Status = RTUSBWriteMACRegister(pAd, 0x701c, 0xffffffff);	Status = RTUSBFirmwareRun(pAd);	//2008/11/28:KH add to fix the dead rf frequency offset bug<--	RTMPusecDelay(10000);	RTUSBWriteMACRegister(pAd,H2M_MAILBOX_CSR,0);	AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); //reset rf by MCU supported by new firmware	//2008/11/28:KH add to fix the dead rf frequency offset bug-->#ifdef NEW_FW	if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd))	{		// send 0x36 mcu command after 0x72 for RT3xxx to fix Radio-Off current leakage issue		RTMPusecDelay(200);		AsicSendCommandToMcu(pAd, 0x36, 0, 0, 0);		RTMPusecDelay(10);	}#endif // NEW_FW //		return Status;}NTSTATUS	RTUSBVenderReset(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;	DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n"));	Status = RTUSB_VendorRequest(		pAd,		USBD_TRANSFER_DIRECTION_OUT,		DEVICE_VENDOR_REQUEST_OUT,		0x01,		0x1,		0,		NULL,		0);	DBGPRINT_RAW(RT_DEBUG_ERROR, ("<--RTUSBVenderReset\n"));	return Status;}/*	========================================================================		Routine Description: Read various length data from RT2573	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBMultiRead(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	OUT	PUCHAR			pData,	IN	USHORT			length){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		(USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),		DEVICE_VENDOR_REQUEST_IN,		0x7,		0,		Offset,		pData,		length);		return Status;}/*	========================================================================		Routine Description: Write various length data to RT2573	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBMultiWrite_OneByte(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	PUCHAR			pData){	NTSTATUS	Status;	// TODO: In 2870, use this funciton carefully cause it's not stable.	Status = RTUSB_VendorRequest(		pAd,		USBD_TRANSFER_DIRECTION_OUT,		DEVICE_VENDOR_REQUEST_OUT,		0x6,		0,		Offset,		pData,		1);	return Status;}NTSTATUS	RTUSBMultiWrite(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	PUCHAR			pData,	IN	USHORT			length){	NTSTATUS	Status;	USHORT          index = 0,Value;	PUCHAR          pSrc = pData;	USHORT          resude = 0;			resude = length % 2;	length  += resude;	do	{			Value =(USHORT)( *pSrc  | (*(pSrc + 1) << 8));		Status = RTUSBSingleWrite(pAd,Offset + index,Value);            index +=2;            length -= 2;            pSrc = pSrc + 2;        }while(length > 0);	return Status;}NTSTATUS RTUSBSingleWrite(	IN 	RTMP_ADAPTER 	*pAd,	IN	USHORT			Offset,	IN	USHORT			Value){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		USBD_TRANSFER_DIRECTION_OUT,		DEVICE_VENDOR_REQUEST_OUT,		0x2,		Value,		Offset,		NULL,		0);		return Status;}/*	========================================================================		Routine Description: Read 32-bit MAC register	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBReadMACRegister(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	OUT	PUINT32			pValue){	NTSTATUS	Status = 0;	UINT32		localVal;	Status = RTUSB_VendorRequest(		pAd,		(USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),		DEVICE_VENDOR_REQUEST_IN,		0x7,		0,		Offset,		&localVal,		4);		*pValue = le2cpu32(localVal);	if (Status < 0)		*pValue = 0xffffffff;		return Status;}/*	========================================================================		Routine Description: Write 32-bit MAC register	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBWriteMACRegister(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	UINT32			Value){	NTSTATUS	Status;	UINT32		localVal;	localVal = Value;	Status = RTUSBSingleWrite(pAd, Offset, (USHORT)(localVal & 0xffff));	Status = RTUSBSingleWrite(pAd, Offset + 2, (USHORT)((localVal & 0xffff0000) >> 16));	return Status;}/*	========================================================================		Routine Description: Read 8-bit BBP register	Arguments:	Return Value:	IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBReadBBPRegister(	IN	PRTMP_ADAPTER	pAd,	IN	UCHAR			Id,	IN	PUCHAR			pValue){	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, ("RTUSBReadBBPRegister(BBP_CSR_CFG_1):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)))	{		//		// Read failed then Return Default value.		//		*pValue = pAd->BbpWriteLatch[Id];			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			= 1;	BbpCsr.field.Busy			= 1;	BbpCsr.field.RegNum 		= Id;	RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word);	i = 0;		// Verify the busy condition	do	{		status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word);		if (status >= 0)		{		if (!(BbpCsr.field.Busy == BUSY))		{			*pValue = (UCHAR)BbpCsr.field.Value;			break;		}		}		DBGPRINT(RT_DEBUG_TRACE, ("RTUSBReadBBPRegister(BBP_CSR_CFG_2):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)))	{		//		// Read failed then Return Default value.		//		*pValue = pAd->BbpWriteLatch[Id];		DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));		return STATUS_UNSUCCESSFUL;	}		return STATUS_SUCCESS;}/*	========================================================================		Routine Description: Write 8-bit BBP register	Arguments:	Return Value:		IRQL = 		Note:		========================================================================*/NTSTATUS	RTUSBWriteBBPRegister(	IN	PRTMP_ADAPTER	pAd,	IN	UCHAR			Id,	IN	UCHAR			Value)

⌨️ 快捷键说明

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