1/* 2 Driver for Intel(R) PRO/Wireless 2100 devices. 3 Copyright (C) 2006 Michael Lotz <mmlr@mlotz.ch> 4 Released under the terms of the MIT license. 5*/ 6 7#ifndef _IPW2100_H_ 8#define _IPW2100_H_ 9 10#include "ipw2100_hw.h" 11 12class IPW2100 { 13public: 14 IPW2100(int32 deviceID, pci_info *info, 15 pci_module_info *module); 16 ~IPW2100(); 17 18 status_t InitCheck(); 19 20 int32 DeviceID() { return fDeviceID; }; 21 22 status_t Open(uint32 flags); 23 status_t Close(); 24 status_t Free(); 25 26 status_t Read(off_t position, void *buffer, 27 size_t *numBytes); 28 status_t Write(off_t position, const void *buffer, 29 size_t *numBytes); 30 status_t Control(uint32 op, void *args, size_t length); 31 32private: 33static int32 InterruptHandler(void *data); 34 int32 Interrupt(); 35 36 void HandleTXInterrupt(); 37 void HandleRXInterrupt(); 38 39 uint32 ReadReg(uint32 offset); 40 void WriteReg(uint32 offset, uint32 value); 41 42 uint8 ReadMem8(uint32 address); 43 uint16 ReadMem16(uint32 address); 44 uint32 ReadMem32(uint32 address); 45 46 void WriteMem8(uint32 address, uint8 value); 47 void WriteMem16(uint32 address, uint16 value); 48 void WriteMem32(uint32 address, uint32 value); 49 50 status_t ReadOrdinal(uint32 index, uint8 *buffer, 51 size_t *size); 52 status_t WriteOrdinal(uint32 index, const uint8 *buffer, 53 size_t *size); 54 55 status_t SendCommand(uint32 commandId, const uint8 *buffer, 56 size_t length); 57 58 area_id MapPhysicalMemory(const char *name, 59 uint32 physicalAddress, void **logicalAddress, 60 size_t size); 61 area_id AllocateContiguous(const char *name, 62 void **logicalAddress, uint32 *physicalAddress, 63 size_t size); 64 65 void SetInterrupts(uint32 interrupts); 66 uint32 Interrupts(); 67 68 status_t CheckAdapterAccess(); 69 status_t SoftResetAdapter(); 70 status_t ResetAdapter(); 71 status_t StopMaster(); 72 status_t SetupBuffers(); 73 status_t ReadMACAddress(); 74 status_t LoadMicrocodeAndFirmware(); 75 status_t LoadMicrocode(const uint8 *buffer, uint32 size); 76 status_t LoadFirmware(const uint8 *buffer, uint32 size); 77 status_t ClearSharedMemory(); 78 status_t StartFirmware(); 79 status_t EtherInit(); 80 status_t DisableAdapter(); 81 status_t EnableAdapter(); 82 status_t ScanForNetworks(); 83 status_t DisableRadio(); 84 status_t PowerDown(); 85 86 status_t fStatus; 87 bool fClosing; 88 89 sem_id fFWInitDoneSem; 90 sem_id fAdapterDisabledSem; 91 sem_id fTXTransferSem; 92 sem_id fRXTransferSem; 93 sem_id fCommandDoneSem; 94 95 int32 fDeviceID; 96 pci_info *fPCIInfo; 97 pci_module_info *fPCIModule; 98 99 uint32 fRegisterBase; 100 uint8 *fRegisters; 101 area_id fRegistersArea; 102 103 area_id fTXRingArea; 104 ipw_bd *fTXRingLog; 105 uint32 fTXRingPhy; 106 107 area_id fTXPacketsArea; 108 ipw_tx *fTXPacketsLog; 109 uint32 fTXPacketsPhy; 110 111 area_id fRXRingArea; 112 ipw_bd *fRXRingLog; 113 uint32 fRXRingPhy; 114 115 area_id fRXPacketsArea; 116 ipw_rx *fRXPacketsLog; 117 uint32 fRXPacketsPhy; 118 119 area_id fStatusRingArea; 120 ipw_status *fStatusRingLog; 121 uint32 fStatusRingPhy; 122 123 area_id fCommandArea; 124 ipw_command *fCommandLog; 125 uint32 fCommandPhy; 126 127 uint32 fInterruptMask; 128 uint32 fTXPosition; 129 uint32 fRXPosition; 130 bool fAssociated; 131 132 uint32 fReadIndex; 133 bool *fReadQueue; 134 135 uint32 fOrdinalTable1Base; 136 uint32 fOrdinalTable2Base; 137 uint32 fOrdinalTable1Length; 138 uint32 fOrdinalTable2Length; 139 140 // settings 141 int32 fInterruptLine; 142 uint8 fMACAddress[6]; 143 uint32 fMode; 144 uint32 fChannel; 145 uint32 fTXRates; 146 uint32 fPowerMode; 147 uint32 fRTSThreshold; 148 uint32 fScanOptions; 149 uint8 fAuthMode; 150 uint32 fCiphers; 151 char *fESSID; 152 ipw_wep_key fWEPKeys[4]; 153 uint32 fWEPKeyIndex; 154 uint32 fWEPFlags; 155 bool fDumpTXPackets; 156 bool fDumpRXPackets; 157}; 158 159#endif // _IPW2100_H_ 160