source: rtems/c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h @ 311dfa6

4.104.114.95
Last change on this file since 311dfa6 was 311dfa6, checked in by Joel Sherrill <joel.sherrill@…>, on 04/16/08 at 18:37:33

2008-04-16 Matthieu Bucchianeri <mbucchia@…>

  • ChangeLog?, Makefile.am, README, bsp_specs, configure.ac, mk_libnds.sh, patch.libnds, preinstall.am, block/block.c, clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c, coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile, dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c, dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile, dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h, dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h, dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c, dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c, dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c, dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c, dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c, dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c, dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c, dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c, dswifi/arm9/source/sgIP_memblock.h, dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h, dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h, dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h, dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h, dswifi/include/dswifi7.h, dswifi/include/dswifi9.h, dswifi/include/dswifi_version.h, dswifi/include/netdb.h, dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c, fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h, include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h, libfat/gba/include/fat.h, libfat/include/fat.h, libfat/nds/include/fat.h, libfat/source/bit_ops.h, libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h, libfat/source/directory.c, libfat/source/directory.h, libfat/source/fatdir.c, libfat/source/fatdir.h, libfat/source/fatfile.c, libfat/source/fatfile.h, libfat/source/file_allocation_table.c, libfat/source/file_allocation_table.h, libfat/source/filetime.c, libfat/source/filetime.h, libfat/source/libfat.c, libfat/source/mem_allocate.h, libfat/source/partition.c, libfat/source/partition.h, libfat/source/disc_io/disc.c, libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h, libfat/source/disc_io/io_cf_common.c, libfat/source/disc_io/io_cf_common.h, libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s, libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h, libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h, libfat/source/disc_io/io_m3_common.c, libfat/source/disc_io/io_m3_common.h, libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h, libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h, libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h, libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h, libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h, libfat/source/disc_io/io_sc_common.c, libfat/source/disc_io/io_sc_common.h, libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h, libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h, libfat/source/disc_io/io_scsd_s.s, libfat/source/disc_io/io_sd_common.c, libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7, libnds/Makefile.arm9, libnds/libnds_license.txt, libnds/basicARM7/source/defaultARM7.c, libnds/include/default_font_bin.h, libnds/include/gbfs.h, libnds/include/nds.h, libnds/include/nds/bios.h, libnds/include/nds/card.h, libnds/include/nds/dma.h, libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h, libnds/include/nds/jtypes.h, libnds/include/nds/memory.h, libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h, libnds/include/nds/system.h, libnds/include/nds/timers.h, libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h, libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h, libnds/include/nds/arm9/background.h, libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h, libnds/include/nds/arm9/console.h, libnds/include/nds/arm9/exceptions.h, libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h, libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h, libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h, libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h, libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h, libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h, libnds/source/arm7/audio.c, libnds/source/arm7/clock.c, libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c, libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c, libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s, libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s, libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s, libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c, libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin, libnds/source/arm9/default_font.s, libnds/source/arm9/exceptionHandler.S, libnds/source/arm9/exceptionHandler.s, libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c, libnds/source/arm9/icache.s, libnds/source/arm9/image.c, libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c, libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c, libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c, libnds/source/arm9/system.c, libnds/source/arm9/touch.c, libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c, libnds/source/common/biosCalls.s, libnds/source/common/card.c, libnds/source/common/gbfs.c, libnds/source/common/interruptDispatcher.s, libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c, sound/sound.h, start/start.S, startup/linkcmds, startup/start.c, timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c, tools/configure.ac, tools/runtest, tools/ndstool/include/arm7_sha1_homebrew.h, tools/ndstool/include/arm7_sha1_nintendo.h, tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h, tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h, tools/ndstool/include/encryption.h, tools/ndstool/include/header.h, tools/ndstool/include/hook.h, tools/ndstool/include/little.h, tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h, tools/ndstool/include/ndscreate.h, tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h, tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h, tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h, tools/ndstool/include/passme_vhd1.h, tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h, tools/ndstool/include/sha1.h, tools/ndstool/include/types.h, tools/ndstool/source/arm7_sha1_homebrew.c, tools/ndstool/source/arm7_sha1_nintendo.c, tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp, tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp, tools/ndstool/source/default_icon.c, tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp, tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c, tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp, tools/ndstool/source/ndscreate.cpp, tools/ndstool/source/ndsextract.cpp, tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp, tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c, tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp, touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c, touchscreen/reco.h, touchscreen/touchscreen.c, touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c: New files.
  • Property mode set to 100644
File size: 8.5 KB
Line 
1// DS Wifi interface code
2// Copyright (C) 2005-2006 Stephen Stair - sgstair@akkit.org - http://www.akkit.org
3// wifi_shared.h - Shared structures to be used by arm9 and arm7
4/******************************************************************************
5DSWifi Lib and test materials are licenced under the MIT open source licence:
6Copyright (c) 2005-2006 Stephen Stair
7
8Permission is hereby granted, free of charge, to any person obtaining a copy of
9this software and associated documentation files (the "Software"), to deal in
10the Software without restriction, including without limitation the rights to
11use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12of the Software, and to permit persons to whom the Software is furnished to do
13so, subject to the following conditions:
14
15The above copyright notice and this permission notice shall be included in all
16copies or substantial portions of the Software.
17
18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24SOFTWARE.
25******************************************************************************/
26
27#ifndef WIFI_SHARED_H
28#define WIFI_SHARED_H
29
30
31#include <nds.h>
32
33
34
35// on spinlock contention, the side unsuccessfully attempting the lock reverts the lock.
36// if the unlocking side sees the lock incorrectly set, the unlocking side will delay until it has reverted to the correct value, then continue unlocking.
37// there should be a delay of at least about ~10-20 cycles between a lock and unlock, to prevent contention.
38#define SPINLOCK_NOBODY                 0x0000 
39#define SPINLOCK_ARM7                   0x0001
40#define SPINLOCK_ARM9                   0x0002
41
42#define SPINLOCK_OK             0x0000
43#define SPINLOCK_INUSE  0x0001
44#define SPINLOCK_ERROR  0x0002
45
46#ifdef ARM7
47#define SPINLOCK_VALUE SPINLOCK_ARM7
48#endif
49#ifdef ARM9
50#define SPINLOCK_VALUE SPINLOCK_ARM9
51#endif
52
53
54#define Spinlock_Acquire(structtolock) SLasm_Acquire(&((structtolock).spinlock),SPINLOCK_VALUE)
55#define Spinlock_Release(structtolock) SLasm_Release(&((structtolock).spinlock),SPINLOCK_VALUE)
56#define Spinlock_Check(structtolock) (((structtolock).spinlock)!=SPINLOCK_NOBODY)
57
58#ifdef __cplusplus
59extern "C" {
60#endif
61
62extern u32 SLasm_Acquire(volatile u32 * lockaddr, u32 lockvalue);
63extern u32 SLasm_Release(volatile u32 * lockaddr, u32 lockvalue);
64
65#ifdef __cplusplus
66};
67#endif
68
69// If for whatever reason you want to ditch SGIP and use your own stack, comment out the following line.
70#define WIFI_USE_TCP_SGIP       1
71
72#define WIFI_RXBUFFER_SIZE      (1024*12)
73#define WIFI_TXBUFFER_SIZE      (1024*24)
74#define WIFI_MAX_AP                     32
75#define WIFI_MAX_ASSOC_RETRY    30
76#define WIFI_PS_POLL_CONST  2
77
78#define WIFI_MAX_PROBE          4
79
80#define WIFI_AP_TIMEOUT    40
81
82#define WFLAG_PACKET_DATA               0x0001
83#define WFLAG_PACKET_MGT                0x0002
84#define WFLAG_PACKET_BEACON             0x0004
85#define WFLAG_PACKET_CTRL               0x0008
86
87
88#define WFLAG_PACKET_ALL                0xFFFF
89
90#define WFLAG_ARM7_ACTIVE               0x0001
91#define WFLAG_ARM7_RUNNING              0x0002
92
93#define WFLAG_ARM9_ACTIVE               0x0001
94#define WFLAG_ARM9_USELED               0x0002
95#define WFLAG_ARM9_ARM7READY    0x0004
96#define WFLAG_ARM9_NETUP                0x0008
97#define WFLAG_ARM9_NETREADY             0x0010
98
99#define WFLAG_ARM9_INITFLAGMASK 0x0002
100
101#define WFLAG_IP_GOTDHCP                0x0001
102
103// request - request flags
104#define WFLAG_REQ_APCONNECT                     0x0001
105#define WFLAG_REQ_APCOPYVALUES          0x0002
106#define WFLAG_REQ_APADHOC                       0x0008
107#define WFLAG_REQ_PROMISC                       0x0010
108#define WFLAG_REQ_USEWEP                        0x0020
109
110// request - informational flags
111#define WFLAG_REQ_APCONNECTED           0x8000
112
113#define WFLAG_APDATA_ADHOC                      0x0001
114#define WFLAG_APDATA_WEP                        0x0002
115#define WFLAG_APDATA_WPA                        0x0004
116#define WFLAG_APDATA_COMPATIBLE         0x0008
117#define WFLAG_APDATA_EXTCOMPATIBLE      0x0010
118#define WFLAG_APDATA_SHORTPREAMBLE      0x0020
119#define WFLAG_APDATA_ACTIVE                     0x8000
120
121
122enum WIFI_RETURN {
123        WIFI_RETURN_OK =                                0, // Everything went ok
124        WIFI_RETURN_LOCKFAILED  =               1, // the spinlock attempt failed (it wasn't retried cause that could lock both cpus- retry again after a delay.
125        WIFI_RETURN_ERROR =                             2, // There was an error in attempting to complete the requested task.
126        WIFI_RETURN_PARAMERROR =                3, // There was an error in the parameters passed to the function.
127};
128
129enum WIFI_STATS {
130        // software stats
131        WSTAT_RXQUEUEDPACKETS, // number of packets queued into the rx fifo
132        WSTAT_TXQUEUEDPACKETS, // number of packets queued into the tx fifo
133        WSTAT_RXQUEUEDBYTES, // number of bytes queued into the rx fifo
134        WSTAT_TXQUEUEDBYTES, // number of bytes queued into the tx fifo
135        WSTAT_RXQUEUEDLOST, // number of packets lost due to space limitations in queuing
136        WSTAT_TXQUEUEDREJECTED, // number of packets rejected due to space limitations in queuing
137        WSTAT_RXPACKETS,
138        WSTAT_RXBYTES,
139        WSTAT_RXDATABYTES,
140        WSTAT_TXPACKETS,
141        WSTAT_TXBYTES,
142        WSTAT_TXDATABYTES,
143   WSTAT_ARM7_UPDATES,
144   WSTAT_DEBUG,
145        // harware stats (function mostly unknown.)
146        WSTAT_HW_1B0,WSTAT_HW_1B1,WSTAT_HW_1B2,WSTAT_HW_1B3,WSTAT_HW_1B4,WSTAT_HW_1B5,WSTAT_HW_1B6,WSTAT_HW_1B7,       
147        WSTAT_HW_1B8,WSTAT_HW_1B9,WSTAT_HW_1BA,WSTAT_HW_1BB,WSTAT_HW_1BC,WSTAT_HW_1BD,WSTAT_HW_1BE,WSTAT_HW_1BF,       
148        WSTAT_HW_1C0,WSTAT_HW_1C1,WSTAT_HW_1C4,WSTAT_HW_1C5,
149        WSTAT_HW_1D0,WSTAT_HW_1D1,WSTAT_HW_1D2,WSTAT_HW_1D3,WSTAT_HW_1D4,WSTAT_HW_1D5,WSTAT_HW_1D6,WSTAT_HW_1D7,       
150        WSTAT_HW_1D8,WSTAT_HW_1D9,WSTAT_HW_1DA,WSTAT_HW_1DB,WSTAT_HW_1DC,WSTAT_HW_1DD,WSTAT_HW_1DE,WSTAT_HW_1DF,       
151
152        NUM_WIFI_STATS
153};
154
155
156enum WIFI_MODE {
157        WIFIMODE_DISABLED,
158        WIFIMODE_NORMAL,
159        WIFIMODE_SCAN,
160        WIFIMODE_ASSOCIATE,
161        WIFIMODE_ASSOCIATED,
162        WIFIMODE_DISASSOCIATE,
163        WIFIMODE_CANNOTASSOCIATE,
164};
165enum WIFI_AUTHLEVEL {
166        WIFI_AUTHLEVEL_DISCONNECTED,
167        WIFI_AUTHLEVEL_AUTHENTICATED,
168        WIFI_AUTHLEVEL_ASSOCIATED,
169        WIFI_AUTHLEVEL_DEASSOCIATED,
170};
171
172enum WEPMODES {
173        WEPMODE_NONE = 0,
174        WEPMODE_40BIT = 1,
175        WEPMODE_128BIT = 2
176};
177
178enum WIFI_ASSOCSTATUS {
179    ASSOCSTATUS_DISCONNECTED, // not *trying* to connect
180    ASSOCSTATUS_SEARCHING, // data given does not completely specify an AP, looking for AP that matches the data.
181    ASSOCSTATUS_AUTHENTICATING, // connecting...
182    ASSOCSTATUS_ASSOCIATING, // connecting...
183    ASSOCSTATUS_ACQUIRINGDHCP, // connected to AP, but getting IP data from DHCP
184    ASSOCSTATUS_ASSOCIATED,     // Connected! (COMPLETE if Wifi_ConnectAP was called to start)
185    ASSOCSTATUS_CANNOTCONNECT, // error in connecting... (COMPLETE if Wifi_ConnectAP was called to start)
186};
187
188typedef struct WIFI_TXHEADER {
189        u16 enable_flags;
190        u16 unknown;
191        u16 countup;
192        u16 beaconfreq;
193        u16 tx_rate;
194        u16 tx_length;
195} Wifi_TxHeader;
196
197typedef struct WIFI_RXHEADER {
198        u16 a;
199        u16 b;
200        u16 c;
201        u16 d;
202        u16 byteLength;
203        u16 rssi_;
204} Wifi_RxHeader;
205
206typedef struct WIFI_ACCESSPOINT {
207        char ssid[33]; // 0-32byte data, zero
208        char ssid_len;
209        u8 bssid[6];
210        u8 macaddr[6];
211        u16 maxrate; // max rate is measured in steps of 1/2Mbit - 5.5Mbit will be represented as 11, or 0x0B
212        u32 timectr;
213        u16 rssi;
214        u16 flags;
215        u32 spinlock;
216        u8 channel;
217        u8 rssi_past[8];
218        u8 base_rates[16]; // terminated by a 0 entry
219} Wifi_AccessPoint;
220
221typedef struct WIFI_MAINSTRUCT {
222        unsigned long dummy1[8];
223        // wifi status
224        u16 curChannel, reqChannel;
225        u16 curMode, reqMode;
226        u16 authlevel,authctr;
227        u32 flags9, flags7, reqPacketFlags;
228        u16 curReqFlags, reqReqFlags;
229        u32 counter7,bootcounter7;
230        char MacAddr[6];
231        u16 authtype;
232        u16 iptype,ipflags;
233        u32 ip,snmask,gateway;
234
235        // current AP data
236        char ssid7[34],ssid9[34];
237        u8 bssid7[6], bssid9[6];
238        u8 apmac7[6], apmac9[6];
239        char wepmode7, wepmode9;
240        char wepkeyid7, wepkeyid9;
241        u8 wepkey7[20],wepkey9[20];
242        u8 baserates7[16], baserates9[16];
243        u8 apchannel7, apchannel9;
244        u8 maxrate7;
245        u16 ap_rssi;
246        u16 pspoll_period;
247
248        // AP data
249        Wifi_AccessPoint aplist[WIFI_MAX_AP];
250
251        // probe stuff
252        u8 probe9_numprobe;
253        u8 probe9_ssidlen[WIFI_MAX_PROBE];
254        char probe9_ssid[WIFI_MAX_PROBE][32];
255
256        // WFC data
257        u8 wfc_enable[4]; // wep mode, or 0x80 for "enabled"
258        Wifi_AccessPoint wfc_ap[3];
259        unsigned long wfc_config[3][5]; // ip, snmask, gateway, primarydns, 2nddns
260        u8 wfc_wepkey[3][16];
261       
262
263        // wifi data
264        u32 rxbufIn, rxbufOut; // bufIn/bufOut have 2-byte granularity.
265        u16 rxbufData[WIFI_RXBUFFER_SIZE/2]; // send raw 802.11 data through! rxbuffer is for rx'd data, arm7->arm9 transfer
266
267        u32 txbufIn, txbufOut;
268        u16 txbufData[WIFI_TXBUFFER_SIZE/2]; // tx buffer is for data to tx, arm9->arm7 transfer
269
270        // stats data
271        u32 stats[NUM_WIFI_STATS];
272   
273        u16 debug[30];
274
275   u32 random; // semirandom number updated at the convenience of the arm7. use for initial seeds & such.
276
277        unsigned long dummy2[8];
278
279} Wifi_MainStruct;
280
281
282
283#endif
284
Note: See TracBrowser for help on using the repository browser.