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

📄 rtusb_io.c

📁 r73模块的无线网卡在Linux下的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************** * RT2x00 SourceForge Project - http://rt2x00.serialmonkey.com             * *                                                                         * *   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.             * *                                                                         * *   Licensed under the GNU GPL                                            * *   Original code supplied under license from RaLink Inc, 2004.           * ***************************************************************************//*************************************************************************** *	Module Name:	rtusb_io.c * *	Abstract: * *	Revision History: *	Who		When		What *	--------	----------	----------------------------- *	Paul Lin	06-25-2004	created * ***************************************************************************/#include	"rt_config.h"/*	========================================================================	Routine Description: NIC initialization complete	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBFirmwareRun(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x01,		0x8,		0,		NULL,		0);	return Status;}/*	========================================================================	Routine Description: Read various length data from RT2573	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBMultiRead(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	OUT	PVOID			pData,	IN	USHORT			length){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_IN,		0x7,		0,		Offset,		pData,		length);	return Status;}/*	========================================================================	Routine Description: Write various length data to RT2573	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBMultiWrite(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	PVOID			pData,	IN	USHORT			length){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x6,		0,		Offset,		pData,		length);	return Status;}/*	========================================================================	Routine Description: Read 32-bit MAC register	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBReadMACRegister(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	OUT	PULONG			pValue){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_IN,		0x7,		0,		Offset,		pValue,		4);	le32_to_cpus(pValue);	return Status;}/*	========================================================================	Routine Description: Write 32-bit MAC register	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBWriteMACRegister(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	ULONG			Value){	NTSTATUS	Status;	cpu_to_le32s(&Value);	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x6,		0x00,		Offset,		&Value,		4);	return Status;}NTSTATUS	RT73WriteTXRXCSR0(	IN	PRTMP_ADAPTER pAd,	IN	BOOLEAN 	disableRx,	IN	BOOLEAN		dropControl){    ULONG val = 0x0046b032;    if (pAd->PortCfg.BssType != BSS_MONITOR)    {	val |= 0x00100000;		//Drop promiscuous frames if not in rfmon	val |= 0x00200000;		//Drop to_ds (packets from station to access point/distribution system)    }    if (disableRx == TRUE)    {	val |= 0x00010000;    }    if (dropControl == TRUE)    {	val |= 0x00080000;    }    return RTUSBWriteMACRegister(pAd, TXRX_CSR0, val);}/*	========================================================================	Routine Description: Write 32-bit MAC register	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS    RTUSBSetLED(	IN	PRTMP_ADAPTER		pAd,	IN	MCU_LEDCS_STRUC		LedStatus,	IN	USHORT				LedIndicatorStrength){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x0a,		LedStatus.word,		LedIndicatorStrength,		NULL,		0);	return Status;}/*	========================================================================	Routine Description: Read 8-bit BBP register	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBReadBBPRegister(	IN	PRTMP_ADAPTER	pAd,	IN	UCHAR			Id,	IN	PUCHAR			pValue){	PHY_CSR3_STRUC	PhyCsr3;	UINT			i = 0;	// Verify the busy condition	do	{		RTUSBReadMACRegister(pAd, PHY_CSR3, &PhyCsr3.word);		if (!(PhyCsr3.field.Busy == BUSY))			break;		i++;	}	while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));	//DBGPRINT(RT_DEBUG_INFO, "- %s: Pre-busy PHY_CSR3=0x%08x\n",			//__FUNCTION__, PhyCsr3.word);	if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))	{		//		// Read failed then Return Default value.		//		*pValue = pAd->BbpWriteLatch[Id];		KPRINT(KERN_NOTICE,				"- BBP read: Pre-busy error or device removed!!!\n");		DBGPRINT(RT_DEBUG_ERROR, "Retry count exhausted or device removed!!!\n");		return STATUS_UNSUCCESSFUL;	}	// Prepare for write material	PhyCsr3.word 				= 0;	PhyCsr3.field.fRead			= 1;	PhyCsr3.field.Busy			= 1;	PhyCsr3.field.RegNum 		= Id;	RTUSBWriteMACRegister(pAd, PHY_CSR3, PhyCsr3.word);	i = 0;	// Verify the busy condition	do	{		RTUSBReadMACRegister(pAd, PHY_CSR3, &PhyCsr3.word);		if (!(PhyCsr3.field.Busy == BUSY))		{			*pValue = (UCHAR)PhyCsr3.field.Value;			break;		}		i++;	}	while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));	//DBGPRINT(RT_DEBUG_INFO, "- %s: Post-busy PHY_CSR3=0x%08x\n",			//__FUNCTION__, PhyCsr3.word);	if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))	{		//		// Read failed then Return Default value.		//		*pValue = pAd->BbpWriteLatch[Id];		KPRINT(KERN_NOTICE,				"- BBP read: Post-busy error or device removed!!!\n");		DBGPRINT(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:	Note:	========================================================================*/NTSTATUS	RTUSBWriteBBPRegister(	IN	PRTMP_ADAPTER	pAd,	IN	UCHAR			Id,	IN	UCHAR			Value){	PHY_CSR3_STRUC	PhyCsr3;	UINT			i = 0;	// Verify the busy condition	do	{		RTUSBReadMACRegister(pAd, PHY_CSR3, &PhyCsr3.word);		if (!(PhyCsr3.field.Busy == BUSY))			break;		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(RT_DEBUG_ERROR,				"- %s: Busy error=0x%08x or device removed!!!\n",				__FUNCTION__, PhyCsr3.word);		KPRINT(KERN_NOTICE,				"- BBP write: Retry count exhausted or device removed!!!\n");		return STATUS_UNSUCCESSFUL;	}	// Prepare for write material	PhyCsr3.word 				= 0;	PhyCsr3.field.fRead			= 0;	PhyCsr3.field.Value			= Value;	PhyCsr3.field.Busy			= 1;	PhyCsr3.field.RegNum 		= Id;	RTUSBWriteMACRegister(pAd, PHY_CSR3, PhyCsr3.word);	pAd->BbpWriteLatch[Id] = Value;	return STATUS_SUCCESS;}/*	========================================================================	Routine Description: Write RF register through MAC	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBWriteRFRegister(	IN	PRTMP_ADAPTER	pAd,	IN	ULONG			Value){	PHY_CSR4_STRUC	PhyCsr4;	UINT			i = 0;	do	{		RTUSBReadMACRegister(pAd, PHY_CSR4, &PhyCsr4.word);		if (!(PhyCsr4.field.Busy))			break;		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(RT_DEBUG_ERROR,				"- %s: Busy error=0x%08x or device removed!!!\n",				__FUNCTION__, PhyCsr4.word);		KPRINT(KERN_NOTICE,				"- RF write: Retry count exhausted or device removed!!!\n");		return STATUS_UNSUCCESSFUL;	}	RTUSBWriteMACRegister(pAd, PHY_CSR4, Value);	return STATUS_SUCCESS;}/*	========================================================================	Routine Description:	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBReadEEPROM(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	OUT	PVOID			pData,	IN	USHORT			length){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_IN,		0x9,		0,		Offset,		pData,		length);	return Status;}/*	========================================================================	Routine Description:	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBWriteEEPROM(	IN	PRTMP_ADAPTER	pAd,	IN	USHORT			Offset,	IN	PVOID			pData,	IN	USHORT			length){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x8,		0,		Offset,		pData,		length);	return Status;}/*	========================================================================	Routine Description:	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS	RTUSBStopRx(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(pAd,             0,             DEVICE_VENDOR_REQUEST_OUT,             0x0C,             0x0,             0x0,             NULL,             0);	return Status;}/*	========================================================================	Routine Description:	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS RTUSBPutToSleep(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x01,		0x07,		0,		NULL,		0);	return Status;}/*	========================================================================	Routine Description:	Arguments:	Return Value:	Note:	========================================================================*/NTSTATUS RTUSBWakeUp(	IN	PRTMP_ADAPTER	pAd){	NTSTATUS	Status;	Status = RTUSB_VendorRequest(		pAd,		0,		DEVICE_VENDOR_REQUEST_OUT,		0x01,		0x09,		0,		NULL,		0);	return Status;}

⌨️ 快捷键说明

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