📄 rtusb_io.c
字号:
/*************************************************************************** * 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 + -