Author: gkruse Date: 2006-08-27 18:39:20 +0200 (Sun, 27 Aug 2006) New Revision: 174 Modified: branches/usb-drivers/KisMAC.xcodeproj/project.pbxproj branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm branches/usb-drivers/Sources/Driver/USBJack/USBJack.h branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm branches/usb-drivers/Sources/Driver/USBJack/rt2570.h branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.h branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm Log: Finally does something, the led turns on. We are able to power up the asic, and verify its state, but the BPP never reports that it is ready. Modified: branches/usb-drivers/KisMAC.xcodeproj/project.pbxproj =================================================================== --- branches/usb-drivers/KisMAC.xcodeproj/project.pbxproj 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/KisMAC.xcodeproj/project.pbxproj 2006-08-27 16:39:20 UTC (rev 174) @@ -465,7 +465,7 @@ 6C541AAB0A72002F00B58A95 /* growl-ap-revealed.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C541AA80A72002F00B58A95 /* growl-ap-revealed.png */; }; 6C541AAC0A72003000B58A95 /* growl-wpa-challenge.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C541AA90A72002F00B58A95 /* growl-wpa-challenge.png */; }; 6C541AAD0A72003000B58A95 /* growl-wpa-response.png in Resources */ = {isa = PBXBuildFile; fileRef = 6C541AAA0A72002F00B58A95 /* growl-wpa-response.png */; }; - 6C7171D20AA1739700CD6879 /* rt2570.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C7171D10AA1739700CD6879 /* rt2570.h */; }; + 6C71721F0AA17A5A00CD6879 /* rt2570.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C71721E0AA17A5A00CD6879 /* rt2570.h */; }; 6CA3BCCB09B2A58F00DCB407 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CA3BCCA09B2A58F00DCB407 /* Accelerate.framework */; }; 6CE20615C5B043AF00A26C3A /* IntersilJack.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CE2060FC5B043AF00A26C3A /* IntersilJack.h */; }; 6CE20616C5B043AF00A26C3A /* IntersilJack.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6CE20610C5B043AF00A26C3A /* IntersilJack.mm */; }; @@ -817,7 +817,7 @@ 6C541AA80A72002F00B58A95 /* growl-ap-revealed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "growl-ap-revealed.png"; sourceTree = "<group>"; }; 6C541AA90A72002F00B58A95 /* growl-wpa-challenge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "growl-wpa-challenge.png"; sourceTree = "<group>"; }; 6C541AAA0A72002F00B58A95 /* growl-wpa-response.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "growl-wpa-response.png"; sourceTree = "<group>"; }; - 6C7171D10AA1739700CD6879 /* rt2570.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = rt2570.h; sourceTree = "<group>"; }; + 6C71721E0AA17A5A00CD6879 /* rt2570.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = rt2570.h; path = USBJack/rt2570.h; sourceTree = "<group>"; }; 6CA3BCCA09B2A58F00DCB407 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; }; 6CE2060FC5B043AF00A26C3A /* IntersilJack.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = IntersilJack.h; path = USBJack/IntersilJack.h; sourceTree = "<group>"; }; 6CE20610C5B043AF00A26C3A /* IntersilJack.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = IntersilJack.mm; path = USBJack/IntersilJack.mm; sourceTree = "<group>"; }; @@ -1460,7 +1460,7 @@ 6CE20612C5B043AF00A26C3A /* structs.h */, 6CE20613C5B043AF00A26C3A /* USBJack.h */, 6CE20614C5B043AF00A26C3A /* USBJack.mm */, - 6C7171D10AA1739700CD6879 /* rt2570.h */, + 6C71721E0AA17A5A00CD6879 /* rt2570.h */, 6CE206E6C5B0502200A26C3A /* RalinkJack.h */, 6CE206E7C5B0502200A26C3A /* RalinkJack.mm */, ); @@ -1645,7 +1645,7 @@ 6CE20618C5B043AF00A26C3A /* structs.h in Headers */, 6CE20619C5B043AF00A26C3A /* USBJack.h in Headers */, 6CE206E8C5B0502200A26C3A /* RalinkJack.h in Headers */, - 6C7171D20AA1739700CD6879 /* rt2570.h in Headers */, + 6C71721F0AA17A5A00CD6879 /* rt2570.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; Modified: branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm =================================================================== --- branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/Driver/USBJack/IntersilJack.mm 2006-08-27 16:39:20 UTC (rev 174) @@ -104,6 +104,40 @@ return true; } +IOReturn USBJack::_init() { + WLIdentity ident; + WLHardwareAddress macAddr; + int i; + + _firmwareType = -1; + + for (i = 0; i< wlResetTries; i++) { + if (_reset() == kIOReturnSuccess) break; + if (!_devicePresent) return kIOReturnError; + } + + /* + * Get firmware vendor and version + */ + + if (_getIdentity(&ident) != kIOReturnSuccess) { + NSLog(@"USBJack::_init: Couldn't read card identity\n"); + return kIOReturnError; + } + + NSLog(@"USBJack: Firmware vendor %d, variant %d, version %d.%d\n", ident.vendor, ident.variant, ident.major, ident.minor); + + if (_getHardwareAddress(&macAddr) != kIOReturnSuccess) { + NSLog(@"USBJack::_init: Couldn't read MAC address\n"); + return kIOReturnError; + } + + _deviceInit = true; + + return kIOReturnSuccess; +} + + IOReturn USBJack::_reset() { int i; Modified: branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h =================================================================== --- branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.h 2006-08-27 16:39:20 UTC (rev 174) @@ -17,6 +17,8 @@ RalinkJack(); ~RalinkJack(); + IOReturn RalinkJack::_init(); + IOReturn RTUSB_VendorRequest(UInt8 direction, UInt8 bRequest, UInt16 wValue, Modified: branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm =================================================================== --- branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/Driver/USBJack/RalinkJack.mm 2006-08-27 16:39:20 UTC (rev 174) @@ -9,6 +9,156 @@ #include "RalinkJack.h" +IOReturn RalinkJack::_init() { + unsigned long Index; + unsigned char buffer[22]; + unsigned short temp; + unsigned char Value = 0xff; + unsigned int i; + + NSLog(@"--> NICInitializeAsic"); + + do + { + //NdisMSleep(1000); + RTUSB_VendorRequest(kUSBOut, + 0x1, + 0x4, + 0x1, + NULL, + 0); + + RTUSBSingleWrite(0x308, 0xf0);//asked by MAX + + // Disable RX at first beginning. Before BulkInReceive, we will enable RX. + RTUSBWriteMACRegister(TXRX_CSR2, 1); + RTUSBWriteMACRegister(MAC_CSR13, 0x1111);//requested by Jerry + RTUSBWriteMACRegister(MAC_CSR14, 0x1E11); + RTUSBWriteMACRegister(MAC_CSR1, 3); // reset MAC state machine, requested by Kevin 2003-2-11 + RTUSBWriteMACRegister(MAC_CSR1, 0); // reset MAC state machine, requested by Kevin 2003-2-11 + RTUSBWriteMACRegister(TXRX_CSR5, 0x8C8D); + RTUSBWriteMACRegister(TXRX_CSR6, 0x8B8A); + RTUSBWriteMACRegister(TXRX_CSR7, 0x8687); + RTUSBWriteMACRegister(TXRX_CSR8, 0x0085); + RTUSBWriteMACRegister(TXRX_CSR21, 0xe78f); + RTUSBWriteMACRegister(MAC_CSR9, 0xFF1D); + + i = 0; + //check and see if asic has powered up + RTUSBReadMACRegister(MAC_CSR17, &temp); + while (((temp & 0x01e0 ) != 0x01e0) && (i < 50)) + { + sleep(1); + RTUSBReadMACRegister(MAC_CSR17, &temp); + + i++; + } + if (i == 50) + { +/* if (RTUSB_ResetDevice() == FALSE) + { + //RTMP_SET_FLAG( fRTMP_ADAPTER_REMOVE_IN_PROGRESS); + DBGPRINT(RT_DEBUG_TRACE, "<== NICInitializeAsic ERROR\n"); + return; + } + else + continue; + */ + } + + //lets mess with the leds to verify we have control + RTUSBWriteMACRegister(MAC_CSR20, 0x002); //put led under software control + + RTUSBWriteMACRegister(MAC_CSR1, 4); + RTUSBReadMACRegister(MAC_CSR0, &temp); + if ( temp >= 3){ + RTUSBReadMACRegister(PHY_CSR2, &temp); + RTUSBWriteMACRegister(PHY_CSR2, temp & 0xFFFD); + } + else + { + NSLog(@"LNA 3 mode\n"); + RTUSBWriteMACRegister(PHY_CSR2, 0x3002); // LNA 3 mode + } + RTUSBWriteMACRegister(MAC_CSR11, 2); + RTUSBWriteMACRegister(MAC_CSR22, 0x53); + RTUSBWriteMACRegister(MAC_CSR15, 0x01ee); + RTUSBWriteMACRegister(MAC_CSR16, 0); + RTUSBWriteMACRegister(MAC_CSR8, 0x0780);//steven:limit the maximum frame length + + RTUSBReadMACRegister(TXRX_CSR0, &temp); + temp &= 0xe007; + temp |= ((LENGTH_802_11 << 3) | (0x000f << 9)); + RTUSBWriteMACRegister(TXRX_CSR0, temp); + + RTUSBWriteMACRegister(TXRX_CSR19, 0); + RTUSBWriteMACRegister(MAC_CSR18, 0x5a); + + //set RF_LE to low when standby + RTUSBReadMACRegister(PHY_CSR4, &temp); + RTUSBWriteMACRegister(PHY_CSR4, temp | 1); + //NdisMSleep(1);//wait for PLL to become stable + + i = 0; + do + { + RTUSBReadBBPRegister(BBP_Version, &Value); + NSLog(@"Read BBP_Version Value = %d\n", Value); + i++; + }while (((Value == 0xff) || (Value == 0x00)) && (i < 50)); + if (i < 50)//BBP ready + { + break; + } + /* + else + { + if ( RTUSB_ResetDevice(pAdapter) == FALSE) + { + RTMP_SET_FLAG( fRTMP_ADAPTER_REMOVE_IN_PROGRESS); + return; + } + }*/ + }while (1); + + // Initialize BBP register to default value + for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) + { + i = 0; + do + { + RTUSBReadMACRegister(PHY_CSR8, &temp); + if (!(temp & BUSY)) + break; + i++; + } + while (i < RETRY_LIMIT); + + RTUSBWriteMACRegister(PHY_CSR7, BBPRegTable[Index]); + } + + + // Initialize RF register to default value + //AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel); + //AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel); + + // Add radio off control + /*if (pAdapter->PortCfg.bRadio == FALSE) + { + RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0); + RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0); + + RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF); + DBGPRINT(RT_DEBUG_ERROR, "1Set fRTMP_ADAPTER_RADIO_OFF "); + }*/ + + + //RTUSBMultiRead(STA_CSR0, buffer, 22); + + NSLog(@"<-- NICInitializeAsic\n"); + return kIOReturnSuccess; +} + IOReturn RalinkJack::RTUSB_VendorRequest(UInt8 direction, UInt8 bRequest, UInt16 wValue, @@ -17,6 +167,7 @@ UInt16 wLength) { IOReturn ret; + char buf[10]; if (!_devicePresent) { @@ -25,20 +176,24 @@ } else { - IOUSBDevRequest * theRequest; - theRequest->bmRequestType = USBmakebmRequestType(direction, kUSBVendor, kUSBEndpoint); - theRequest->bRequest = bRequest; - theRequest->wValue = wValue; - theRequest->wIndex = wIndex; - theRequest->pData = pData; - theRequest->wLength = wLength; + IOUSBDevRequest theRequest; + theRequest.bmRequestType = USBmakebmRequestType(direction, kUSBVendor, kUSBEndpoint); + theRequest.bRequest = bRequest; + theRequest.wValue = wValue; + theRequest.wIndex = wIndex; + theRequest.pData = pData; + theRequest.wLength = wLength; - ret = (*_interface)->ControlRequest(_interface, 0, theRequest); + ret = (*_interface)->ControlRequest(_interface, 0, &theRequest); - if (theRequest->wLenDone < wLength) { - NSLog(@"WTF, we didn't seem to write the whole request?"); - } + //data is returned in the bus endian + //we need to swap + //this is going to be bad when we run on intel + + swab(theRequest.pData, buf, wLength); + memcpy(pData, buf,wLength); + } return ret; } Modified: branches/usb-drivers/Sources/Driver/USBJack/USBJack.h =================================================================== --- branches/usb-drivers/Sources/Driver/USBJack/USBJack.h 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/Driver/USBJack/USBJack.h 2006-08-27 16:39:20 UTC (rev 174) @@ -73,7 +73,7 @@ int _getFirmwareType(); IOReturn _disable(); IOReturn _enable(); - IOReturn _init(); + virtual IOReturn _init(); virtual IOReturn _reset(); inline void _lockDevice(); Modified: branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm =================================================================== --- branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/Driver/USBJack/USBJack.mm 2006-08-27 16:39:20 UTC (rev 174) @@ -235,36 +235,7 @@ } IOReturn USBJack::_init() { - WLIdentity ident; - WLHardwareAddress macAddr; - int i; - - _firmwareType = -1; - - for (i = 0; i< wlResetTries; i++) { - if (_reset() == kIOReturnSuccess) break; - if (!_devicePresent) return kIOReturnError; - } - - /* - * Get firmware vendor and version - */ - - if (_getIdentity(&ident) != kIOReturnSuccess) { - NSLog(@"USBJack::_init: Couldn't read card identity\n"); - return kIOReturnError; - } - - NSLog(@"USBJack: Firmware vendor %d, variant %d, version %d.%d\n", ident.vendor, ident.variant, ident.major, ident.minor); - - if (_getHardwareAddress(&macAddr) != kIOReturnSuccess) { - NSLog(@"USBJack::_init: Couldn't read MAC address\n"); - return kIOReturnError; - } - - _deviceInit = true; - - return kIOReturnSuccess; + return kIOReturnError; //this method MUST be overridden } IOReturn USBJack::_reset() { Modified: branches/usb-drivers/Sources/Driver/USBJack/rt2570.h =================================================================== --- branches/usb-drivers/Sources/Driver/USBJack/rt2570.h 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/Driver/USBJack/rt2570.h 2006-08-27 16:39:20 UTC (rev 174) @@ -36,7 +36,50 @@ #define USHORT unsigned short #define RETRY_LIMIT 3 +#define LENGTH_802_11 24 +#define mdelay(a) usleep(a*100) +#define NdisMSleep mdelay + +USHORT BBPRegTable[] = { + 0x0302, // R03 + 0x0419, // R04 + 0x0E1C, // R14 + 0x0F30, // R15 + 0x10ac, // R16 + 0x1148, // R17 + 0x1218, // R18 + 0x13ff, // R19 + 0x141E, // R20 + 0x1508, // R21 + 0x1608, // R22 + 0x1708, // R23 + //modified by david 0x1870, // R24 + 0x1880, // R24 modified by david + //modified by gary 0x1940, // R25 + 0x1950, // R25 //modified by gary + 0x1A08, // R26 + 0x1B23, // R27 + 0x1E10, // R30 + 0x1F2B, // R31 + 0x20B9, // R32 + 0x2212, // R34 + 0x2350, // R35 + 0x27c4, // R39 + 0x2802, // R40 + 0x2960, // R41 + 0x3510, // R53 + 0x3618, // R54 + 0x3808, // R56 + 0x3910, // R57 + 0x3A08, // R58 + 0x3D60, // R61 + 0x3E10, // R62 + 0x4BFF, // R75//by MAX +}; +#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(USHORT)) + + #ifndef __RT2570_H__ #define __RT2570_H__ Modified: branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.h =================================================================== --- branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.h 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.h 2006-08-27 16:39:20 UTC (rev 174) @@ -26,9 +26,10 @@ #import <Foundation/Foundation.h> #import "WaveDriver.h" #import "../Driver/USBJack/IntersilJack.h" +#import "../Driver/USBJack/RalinkJack.h" @interface WaveDriverUSBIntersil : WaveDriver { - USBJack *_driver; + RalinkJack *_driver; //stuff for timed sending float _interval; Modified: branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm =================================================================== --- branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm 2006-08-27 06:58:35 UTC (rev 173) +++ branches/usb-drivers/Sources/WaveDrivers/WaveDriverUSBIntersil.mm 2006-08-27 16:39:20 UTC (rev 174) @@ -33,7 +33,7 @@ self=[super init]; if(!self) return Nil; - _driver = new USBJack; + _driver = new RalinkJack; _driver->startMatching(); _errors = 0; @@ -129,7 +129,7 @@ } - (bool) wakeDriver{ - _driver = new USBJack; + _driver = new RalinkJack; _driver->startMatching(); return YES; } @@ -146,7 +146,7 @@ if (_errors < 3) { NSLog(@"USB receiveFrame failed - attempting to reload driver"); delete _driver; - _driver = new USBJack; + _driver = new RalinkJack; _driver->startMatching(); } else { NSLog(@"Excessive errors received - terminating driver");