diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-04-16 18:37:33 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-04-16 18:37:33 +0000 |
commit | 311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a (patch) | |
tree | 47eaf22ca7bb8cc68486ffe964abd54b535902ad /c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h | |
parent | 2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com> (diff) | |
download | rtems-311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a.tar.bz2 |
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* 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.
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h')
-rw-r--r-- | c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h b/c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h new file mode 100644 index 0000000000..9c83af9502 --- /dev/null +++ b/c/src/lib/libbsp/arm/nds/dswifi/common/source/wifi_shared.h @@ -0,0 +1,284 @@ +// DS Wifi interface code +// Copyright (C) 2005-2006 Stephen Stair - sgstair@akkit.org - http://www.akkit.org +// wifi_shared.h - Shared structures to be used by arm9 and arm7 +/****************************************************************************** +DSWifi Lib and test materials are licenced under the MIT open source licence: +Copyright (c) 2005-2006 Stephen Stair + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +******************************************************************************/ + +#ifndef WIFI_SHARED_H +#define WIFI_SHARED_H + + +#include <nds.h> + + + +// on spinlock contention, the side unsuccessfully attempting the lock reverts the lock. +// 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. +// there should be a delay of at least about ~10-20 cycles between a lock and unlock, to prevent contention. +#define SPINLOCK_NOBODY 0x0000 +#define SPINLOCK_ARM7 0x0001 +#define SPINLOCK_ARM9 0x0002 + +#define SPINLOCK_OK 0x0000 +#define SPINLOCK_INUSE 0x0001 +#define SPINLOCK_ERROR 0x0002 + +#ifdef ARM7 +#define SPINLOCK_VALUE SPINLOCK_ARM7 +#endif +#ifdef ARM9 +#define SPINLOCK_VALUE SPINLOCK_ARM9 +#endif + + +#define Spinlock_Acquire(structtolock) SLasm_Acquire(&((structtolock).spinlock),SPINLOCK_VALUE) +#define Spinlock_Release(structtolock) SLasm_Release(&((structtolock).spinlock),SPINLOCK_VALUE) +#define Spinlock_Check(structtolock) (((structtolock).spinlock)!=SPINLOCK_NOBODY) + +#ifdef __cplusplus +extern "C" { +#endif + +extern u32 SLasm_Acquire(volatile u32 * lockaddr, u32 lockvalue); +extern u32 SLasm_Release(volatile u32 * lockaddr, u32 lockvalue); + +#ifdef __cplusplus +}; +#endif + +// If for whatever reason you want to ditch SGIP and use your own stack, comment out the following line. +#define WIFI_USE_TCP_SGIP 1 + +#define WIFI_RXBUFFER_SIZE (1024*12) +#define WIFI_TXBUFFER_SIZE (1024*24) +#define WIFI_MAX_AP 32 +#define WIFI_MAX_ASSOC_RETRY 30 +#define WIFI_PS_POLL_CONST 2 + +#define WIFI_MAX_PROBE 4 + +#define WIFI_AP_TIMEOUT 40 + +#define WFLAG_PACKET_DATA 0x0001 +#define WFLAG_PACKET_MGT 0x0002 +#define WFLAG_PACKET_BEACON 0x0004 +#define WFLAG_PACKET_CTRL 0x0008 + + +#define WFLAG_PACKET_ALL 0xFFFF + +#define WFLAG_ARM7_ACTIVE 0x0001 +#define WFLAG_ARM7_RUNNING 0x0002 + +#define WFLAG_ARM9_ACTIVE 0x0001 +#define WFLAG_ARM9_USELED 0x0002 +#define WFLAG_ARM9_ARM7READY 0x0004 +#define WFLAG_ARM9_NETUP 0x0008 +#define WFLAG_ARM9_NETREADY 0x0010 + +#define WFLAG_ARM9_INITFLAGMASK 0x0002 + +#define WFLAG_IP_GOTDHCP 0x0001 + +// request - request flags +#define WFLAG_REQ_APCONNECT 0x0001 +#define WFLAG_REQ_APCOPYVALUES 0x0002 +#define WFLAG_REQ_APADHOC 0x0008 +#define WFLAG_REQ_PROMISC 0x0010 +#define WFLAG_REQ_USEWEP 0x0020 + +// request - informational flags +#define WFLAG_REQ_APCONNECTED 0x8000 + +#define WFLAG_APDATA_ADHOC 0x0001 +#define WFLAG_APDATA_WEP 0x0002 +#define WFLAG_APDATA_WPA 0x0004 +#define WFLAG_APDATA_COMPATIBLE 0x0008 +#define WFLAG_APDATA_EXTCOMPATIBLE 0x0010 +#define WFLAG_APDATA_SHORTPREAMBLE 0x0020 +#define WFLAG_APDATA_ACTIVE 0x8000 + + +enum WIFI_RETURN { + WIFI_RETURN_OK = 0, // Everything went ok + WIFI_RETURN_LOCKFAILED = 1, // the spinlock attempt failed (it wasn't retried cause that could lock both cpus- retry again after a delay. + WIFI_RETURN_ERROR = 2, // There was an error in attempting to complete the requested task. + WIFI_RETURN_PARAMERROR = 3, // There was an error in the parameters passed to the function. +}; + +enum WIFI_STATS { + // software stats + WSTAT_RXQUEUEDPACKETS, // number of packets queued into the rx fifo + WSTAT_TXQUEUEDPACKETS, // number of packets queued into the tx fifo + WSTAT_RXQUEUEDBYTES, // number of bytes queued into the rx fifo + WSTAT_TXQUEUEDBYTES, // number of bytes queued into the tx fifo + WSTAT_RXQUEUEDLOST, // number of packets lost due to space limitations in queuing + WSTAT_TXQUEUEDREJECTED, // number of packets rejected due to space limitations in queuing + WSTAT_RXPACKETS, + WSTAT_RXBYTES, + WSTAT_RXDATABYTES, + WSTAT_TXPACKETS, + WSTAT_TXBYTES, + WSTAT_TXDATABYTES, + WSTAT_ARM7_UPDATES, + WSTAT_DEBUG, + // harware stats (function mostly unknown.) + WSTAT_HW_1B0,WSTAT_HW_1B1,WSTAT_HW_1B2,WSTAT_HW_1B3,WSTAT_HW_1B4,WSTAT_HW_1B5,WSTAT_HW_1B6,WSTAT_HW_1B7, + WSTAT_HW_1B8,WSTAT_HW_1B9,WSTAT_HW_1BA,WSTAT_HW_1BB,WSTAT_HW_1BC,WSTAT_HW_1BD,WSTAT_HW_1BE,WSTAT_HW_1BF, + WSTAT_HW_1C0,WSTAT_HW_1C1,WSTAT_HW_1C4,WSTAT_HW_1C5, + WSTAT_HW_1D0,WSTAT_HW_1D1,WSTAT_HW_1D2,WSTAT_HW_1D3,WSTAT_HW_1D4,WSTAT_HW_1D5,WSTAT_HW_1D6,WSTAT_HW_1D7, + WSTAT_HW_1D8,WSTAT_HW_1D9,WSTAT_HW_1DA,WSTAT_HW_1DB,WSTAT_HW_1DC,WSTAT_HW_1DD,WSTAT_HW_1DE,WSTAT_HW_1DF, + + NUM_WIFI_STATS +}; + + +enum WIFI_MODE { + WIFIMODE_DISABLED, + WIFIMODE_NORMAL, + WIFIMODE_SCAN, + WIFIMODE_ASSOCIATE, + WIFIMODE_ASSOCIATED, + WIFIMODE_DISASSOCIATE, + WIFIMODE_CANNOTASSOCIATE, +}; +enum WIFI_AUTHLEVEL { + WIFI_AUTHLEVEL_DISCONNECTED, + WIFI_AUTHLEVEL_AUTHENTICATED, + WIFI_AUTHLEVEL_ASSOCIATED, + WIFI_AUTHLEVEL_DEASSOCIATED, +}; + +enum WEPMODES { + WEPMODE_NONE = 0, + WEPMODE_40BIT = 1, + WEPMODE_128BIT = 2 +}; + +enum WIFI_ASSOCSTATUS { + ASSOCSTATUS_DISCONNECTED, // not *trying* to connect + ASSOCSTATUS_SEARCHING, // data given does not completely specify an AP, looking for AP that matches the data. + ASSOCSTATUS_AUTHENTICATING, // connecting... + ASSOCSTATUS_ASSOCIATING, // connecting... + ASSOCSTATUS_ACQUIRINGDHCP, // connected to AP, but getting IP data from DHCP + ASSOCSTATUS_ASSOCIATED, // Connected! (COMPLETE if Wifi_ConnectAP was called to start) + ASSOCSTATUS_CANNOTCONNECT, // error in connecting... (COMPLETE if Wifi_ConnectAP was called to start) +}; + +typedef struct WIFI_TXHEADER { + u16 enable_flags; + u16 unknown; + u16 countup; + u16 beaconfreq; + u16 tx_rate; + u16 tx_length; +} Wifi_TxHeader; + +typedef struct WIFI_RXHEADER { + u16 a; + u16 b; + u16 c; + u16 d; + u16 byteLength; + u16 rssi_; +} Wifi_RxHeader; + +typedef struct WIFI_ACCESSPOINT { + char ssid[33]; // 0-32byte data, zero + char ssid_len; + u8 bssid[6]; + u8 macaddr[6]; + u16 maxrate; // max rate is measured in steps of 1/2Mbit - 5.5Mbit will be represented as 11, or 0x0B + u32 timectr; + u16 rssi; + u16 flags; + u32 spinlock; + u8 channel; + u8 rssi_past[8]; + u8 base_rates[16]; // terminated by a 0 entry +} Wifi_AccessPoint; + +typedef struct WIFI_MAINSTRUCT { + unsigned long dummy1[8]; + // wifi status + u16 curChannel, reqChannel; + u16 curMode, reqMode; + u16 authlevel,authctr; + u32 flags9, flags7, reqPacketFlags; + u16 curReqFlags, reqReqFlags; + u32 counter7,bootcounter7; + char MacAddr[6]; + u16 authtype; + u16 iptype,ipflags; + u32 ip,snmask,gateway; + + // current AP data + char ssid7[34],ssid9[34]; + u8 bssid7[6], bssid9[6]; + u8 apmac7[6], apmac9[6]; + char wepmode7, wepmode9; + char wepkeyid7, wepkeyid9; + u8 wepkey7[20],wepkey9[20]; + u8 baserates7[16], baserates9[16]; + u8 apchannel7, apchannel9; + u8 maxrate7; + u16 ap_rssi; + u16 pspoll_period; + + // AP data + Wifi_AccessPoint aplist[WIFI_MAX_AP]; + + // probe stuff + u8 probe9_numprobe; + u8 probe9_ssidlen[WIFI_MAX_PROBE]; + char probe9_ssid[WIFI_MAX_PROBE][32]; + + // WFC data + u8 wfc_enable[4]; // wep mode, or 0x80 for "enabled" + Wifi_AccessPoint wfc_ap[3]; + unsigned long wfc_config[3][5]; // ip, snmask, gateway, primarydns, 2nddns + u8 wfc_wepkey[3][16]; + + + // wifi data + u32 rxbufIn, rxbufOut; // bufIn/bufOut have 2-byte granularity. + u16 rxbufData[WIFI_RXBUFFER_SIZE/2]; // send raw 802.11 data through! rxbuffer is for rx'd data, arm7->arm9 transfer + + u32 txbufIn, txbufOut; + u16 txbufData[WIFI_TXBUFFER_SIZE/2]; // tx buffer is for data to tx, arm9->arm7 transfer + + // stats data + u32 stats[NUM_WIFI_STATS]; + + u16 debug[30]; + + u32 random; // semirandom number updated at the convenience of the arm7. use for initial seeds & such. + + unsigned long dummy2[8]; + +} Wifi_MainStruct; + + + +#endif + |