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