Primary purpose of this commit is to enable support for the Aviator

Pro and Raylink cards with version 5 firmware. Only infra-structure
mode has been tested. Specific changes for this feature are:

        o Add RFC1042 encapsulation of IP datagrams

        o Add authentication and association

        o Decode of the beacon (although not used)

Other changes have been made:

        o Pass command completion status to *_done (in place for
          adding proper error recovery)

	o Move a couple of state variables into the current
	  network parameters structure. This is in prep. for
	  dealing with roaming.

MFC after:	1 week
This commit is contained in:
Duncan Barclay 2001-05-17 22:23:49 +00:00
parent 8107ed2eda
commit 60453b06de
4 changed files with 720 additions and 305 deletions

File diff suppressed because it is too large Load Diff

View File

@ -39,7 +39,7 @@
/*
* RAY_DEBUG settings
*
* RECERR Recoverable error's, deprecated use RAY_RECERR macro
* AUTH Authentication
* SUBR Subroutine entry
* BOOTPARAM Startup CM dump
* STARTJOIN State transitions for start/join
@ -55,7 +55,7 @@
* TX TX routine info
* DCOM dump comq entries
*/
#define RAY_DBG_RECERR 0x0001
#define RAY_DBG_AUTH 0x0001
#define RAY_DBG_SUBR 0x0002
#define RAY_DBG_BOOTPARAM 0x0004
#define RAY_DBG_STARTJOIN 0x0008
@ -131,12 +131,17 @@
* These override macros defined in if_ray.c to turn them into
* debugging ones.
*/
#if RAY_DEBUG & RAY_DBG_COM
#if RAY_DEBUG
#define RAY_RECERR(sc, fmt, args...) do { \
device_printf((sc)->dev, "%s(%d) " fmt "\n", \
__FUNCTION__ , __LINE__ , ##args); \
} while (0)
#endif /* RAY_DEBUG */
#if RAY_DEBUG & RAY_DBG_COM
#define RAY_COM_CHECK(sc, com) do { if (RAY_DEBUG & RAY_DBG_COM) { \
ray_com_ecf_check((sc), (com), __FUNCTION__ ); \
} } while (0)
#endif /* RAY_DEBUG & RAY_DBG_COM */
#if RAY_DEBUG & RAY_DBG_MBUF

View File

@ -220,9 +220,11 @@ struct ray_mib_5 {
#define RAY_MIB_CUR_PROMISC 64
#define RAY_MIB_DES_AP_STATUS 65
#define RAY_MIB_DES_PROMISC 66
#define RAY_MIB_CUR_FRAMING 67
#define RAY_MIB_DES_FRAMING 68
#define RAY_MIB_LASTUSER 45
#define RAY_MIB_MAX 66
#define RAY_MIB_MAX 68
/*
* Strings for the MIB
@ -294,7 +296,9 @@ struct ray_mib_5 {
"Current AP_STATUS", \
"Current PROMISC", \
"Desired AP_STATUS", \
"Desired PROMISC" \
"Desired PROMISC", \
"Current FRAMING", \
"Desired FRAMING" \
}
#define RAY_MIB_HELP_STRINGS { \
@ -364,7 +368,9 @@ struct ray_mib_5 {
"Current AP_STATUS", \
"Current PROMISC", \
"Desired AP_STATUS", \
"Desired PROMISC" \
"Desired PROMISC", \
"Current FRAMING", \
"Desired FRAMING" \
}
/*
@ -447,7 +453,9 @@ struct ray_mib_5 {
{RAY_V4|RAY_V5, 1, 1}, /* RAY_MIB_CUR_AP_STATUS */ \
{RAY_V4|RAY_V5, 1, 1}, /* RAY_MIB_CUR_PROMISC */ \
{RAY_V4|RAY_V5, 1, 1}, /* RAY_MIB_DES_AP_STATUS */ \
{RAY_V4|RAY_V5, 1, 1} /* RAY_MIB_DES_PROMISC */ \
{RAY_V4|RAY_V5, 1, 1}, /* RAY_MIB_DES_PROMISC */ \
{RAY_V4|RAY_V5, 1, 1}, /* RAY_MIB_CUR_FRAMING */ \
{RAY_V4|RAY_V5, 1, 1} /* RAY_MIB_DES_FRAMING */ \
}
/*
@ -480,8 +488,11 @@ struct ray_mib_5 {
* 17 June, 1998
*/
/* XXX Obtained by raycontrol _before_ downloading
* # /sys/dev/ray/raycontrol/raycontrol -i ray0
/* Obtained by raycontrol _before_ downloading
*
* WebGear Aviator
*
* # raycontrol -i ray0
* Firmware version 4
* Network type 0x01 0 Ad hoc, 1 Infrastructure
* AP status 0x00 0 Station, 1 Access Point
@ -525,7 +536,56 @@ struct ray_mib_5 {
* TEST_MODE 0x00 TEST_MODE
* TEST_MIN_CHAN 0x02 TEST_MIN_CHAN
* TEST_MAX_CHAN 0x02 TEST_MAX_CHAN
*/
*
* Raylink
* Firmware version 5
* Network type 0x01 0 Ad hoc, 1 Infrastructure
* AP status 0x00 0 Station, 1 Access Point
* SSID ESSID1
* Scan mode 0x01 0 Passive, 1 Active
* APM mode 0x00 0 Off, 1 On
* MAC address 00:00:8f:a8:17:06
* Fragmentation threshold 0x7fff Bytes
* Dwell time 0x0080 DWELL_TIME
* Beacon period 0x0100 BEACON_PERIOD
* DTIM_INTERVAL 0x01 DTIM_INTERVAL
* MAX_RETRY 0x1f MAX_RETRY
* ACK_TIMO 0x86 ACK_TIMO
* SIFS 0x1c SIFS
* DIFS 0x82 DIFS
* PIFS 0x4e PIFS
* RTS_THRESH 0x7fff RTS_THRESH
* SCAN_DWELL 0x04e2 SCAN_DWELL
* SCAN_MAX_DWELL 0x38a4 SCAN_MAX_DWELL
* ASSOC_TIMO 0x05 ASSOC_TIMO
* ADHOC_SCAN_CYCLE 0x08 ADHOC_SCAN_CYCLE
* INFRA_SCAN_CYCLE 0x02 INFRA_SCAN_CYCLE
* INFRA_SUPER_SCAN_CYCLE 0x08 INFRA_SUPER_SCAN_CYCLE
* PROMISC 0x00 PROMISC
* UNIQ_WORD 0x0cbd UNIQ_WORD
* SLOT_TIME 0x32 SLOT_TIME
* ROAM_LOW_SNR_THRESH 0xff ROAM_LOW_SNR_THRESH
* LOW_SNR_COUNT 0xff LOW_SNR_COUNT
* INFRA_MISSED_BEACON_COUNT 0x02 INFRA_MISSED_BEACON_COUNT
* ADHOC_MISSED_BEACON_COUNT 0xff ADHOC_MISSED_BEACON_COUNT
* COUNTRY_CODE 0x01 COUNTRY_CODE
* HOP_SEQ 0x0b HOP_SEQ
* HOP_SEQ_LEN 0x55 HOP_SEQ_LEN
* CW_MAX 0x003f CW_MAX
* CW_MIN 0x000f CW_MIN
* NOISE_FILTER_GAIN 0x04 NOISE_FILTER_GAIN
* NOISE_LIMIT_OFFSET 0x08 NOISE_LIMIT_OFFSET
* RSSI_THRESH_OFFSET 0x28 RSSI_THRESH_OFFSET
* BUSY_THRESH_OFFSET 0x28 BUSY_THRESH_OFFSET
* SYNC_THRESH 0x07 SYNC_THRESH
* TEST_MODE 0x00 TEST_MODE
* TEST_MIN_CHAN 0x02 TEST_MIN_CHAN
* TEST_MAX_CHAN 0x02 TEST_MAX_CHAN
* ALLOW_PROBE_RESP 0x00 ALLOW_PROBE_RESP
* PRIVACY_MUST_START 0x00 PRIVACY_MUST_START
* PRIVACY_CAN_JOIN 0x00 PRIVACY_CAN_JOIN
* BASIC_RATE_SET 0x02 BASIC_RATE_SET
*/
/*
* mib_net_type
@ -533,11 +593,13 @@ struct ray_mib_5 {
* DOC 0x01 - Defines network type for Start and Join
* - Network commands.
*
* Symb 0x00 - Adhoc is safer and I ain't got an AP
* As the V4 cards don't do infra we have to use adhoc. For V5 cards
* we follow standard FreeBSD practise and use infrastructure mode.
*/
#define RAY_MIB_NET_TYPE_ADHOC 0x00
#define RAY_MIB_NET_TYPE_INFRA 0x01
#define RAY_MIB_NET_TYPE_DEFAULT RAY_MIB_NET_TYPE_ADHOC
#define RAY_MIB_NET_TYPE_V4 RAY_MIB_NET_TYPE_ADHOC
#define RAY_MIB_NET_TYPE_V5 RAY_MIB_NET_TYPE_INFRA
/*
* mib_ap_status
@ -547,7 +609,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_AP_STATUS_TERMINAL 0x00
#define RAY_MIB_AP_STATUS_AP 0x01
#define RAY_MIB_AP_STATUS_DEFAULT RAY_MIB_AP_STATUS_TERMINAL
#define RAY_MIB_AP_STATUS_V4 RAY_MIB_AP_STATUS_TERMINAL
#define RAY_MIB_AP_STATUS_V5 RAY_MIB_AP_STATUS_TERMINAL
/*
* mib_ssid
@ -560,8 +623,9 @@ struct ray_mib_5 {
* Symb - windows setting comes from the Aviator software v1.1
*/
#define RAY_MIB_SSID_WINDOWS "NETWORK_NAME"
#define RAY_MIB_SSID_NOT_WINDOWS "WIRELESS_NETWORK"
#define RAY_MIB_SSID_DEFAULT RAY_MIB_SSID_WINDOWS
#define RAY_MIB_SSID_RAYLINK "ESSID1"
#define RAY_MIB_SSID_V4 RAY_MIB_SSID_WINDOWS
#define RAY_MIB_SSID_V5 RAY_MIB_SSID_RAYLINK
/*
* mib_scan_mode
@ -572,7 +636,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_SCAN_MODE_PASSIVE 0x00
#define RAY_MIB_SCAN_MODE_ACTIVE 0x01
#define RAY_MIB_SCAN_MODE_DEFAULT RAY_MIB_SCAN_MODE_ACTIVE
#define RAY_MIB_SCAN_MODE_V4 RAY_MIB_SCAN_MODE_ACTIVE
#define RAY_MIB_SCAN_MODE_V5 RAY_MIB_SCAN_MODE_ACTIVE
/*
* mib_apm_mode
@ -584,7 +649,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_APM_MODE_NONE 0x00
#define RAY_MIB_APM_MODE_POWERSAVE 0x01
#define RAY_MIB_APM_MODE_DEFAULT RAY_MIB_APM_MODE_NONE
#define RAY_MIB_APM_MODE_V4 RAY_MIB_APM_MODE_NONE
#define RAY_MIB_APM_MODE_V5 RAY_MIB_APM_MODE_NONE
/*
* mib_mac_addr
@ -609,7 +675,8 @@ struct ray_mib_5 {
#define RAY_MIB_FRAG_THRESH_MINIMUM 0
#define RAY_MIB_FRAG_THRESH_MAXIMUM 2346
#define RAY_MIB_FRAG_THRESH_DISABLE 0x7fff
#define RAY_MIB_FRAG_THRESH_DEFAULT RAY_MIB_FRAG_THRESH_DISABLE
#define RAY_MIB_FRAG_THRESH_V4 RAY_MIB_FRAG_THRESH_DISABLE
#define RAY_MIB_FRAG_THRESH_V5 RAY_MIB_FRAG_THRESH_DISABLE
/*
* mib_dwell_time
@ -664,7 +731,7 @@ struct ray_mib_5 {
#define RAY_MIB_BEACON_PERIOD_MINIMUM 1
#define RAY_MIB_BEACON_PERIOD_MAXIMUM 0xffff
#define RAY_MIB_BEACON_PERIOD_V4 0x0001
#define RAY_MIB_BEACON_PERIOD_V5 RAY_MIB_DWELL_TIME_V5
#define RAY_MIB_BEACON_PERIOD_V5 (2*RAY_MIB_DWELL_TIME_V5)
/*
* mib_dtim_interval
@ -680,7 +747,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_DTIM_INTERVAL_MINIMUM 1
#define RAY_MIB_DTIM_INTERVAL_MAXIMUM 255
#define RAY_MIB_DTIM_INTERVAL_DEFAULT 0x01
#define RAY_MIB_DTIM_INTERVAL_V4 0x01
#define RAY_MIB_DTIM_INTERVAL_V5 0x01
/*
* mib_max_retry
@ -696,7 +764,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_MAX_RETRY_MINIMUM 0
#define RAY_MIB_MAX_RETRY_MAXIMUM 255
#define RAY_MIB_MAX_RETRY_DEFAULT 0x07
#define RAY_MIB_MAX_RETRY_V4 0x07
#define RAY_MIB_MAX_RETRY_V5 0x1f
/*
* mib_ack_timo
@ -714,7 +783,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_ACK_TIMO_MINIMUM 0
#define RAY_MIB_ACK_TIMO_MAXIMUM 255
#define RAY_MIB_ACK_TIMO_DEFAULT 0xa3
#define RAY_MIB_ACK_TIMO_V4 0xa3
#define RAY_MIB_ACK_TIMO_V5 0x86
/*
* mib_sifs
@ -729,7 +799,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_SIFS_MINIMUM 28
#define RAY_MIB_SIFS_MAXIMUM 62
#define RAY_MIB_SIFS_DEFAULT 0x1d
#define RAY_MIB_SIFS_V4 0x1d
#define RAY_MIB_SIFS_V5 0x1c
/*
* mib_difs
@ -738,7 +809,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_DIFS_MINIMUM 130
#define RAY_MIB_DIFS_MAXIMUM 255
#define RAY_MIB_DIFS_DEFAULT 0x82
#define RAY_MIB_DIFS_V4 0x82
#define RAY_MIB_DIFS_V5 0x82
/*
* mib_pifs
@ -766,7 +838,8 @@ struct ray_mib_5 {
#define RAY_MIB_RTS_THRESH_MINIMUM 0
#define RAY_MIB_RTS_THRESH_MAXIMUM 2346
#define RAY_MIB_RTS_THRESH_DISABLE 0x7fff
#define RAY_MIB_RTS_THRESH_DEFAULT RAY_MIB_RTS_THRESH_DISABLE
#define RAY_MIB_RTS_THRESH_V4 RAY_MIB_RTS_THRESH_DISABLE
#define RAY_MIB_RTS_THRESH_V5 RAY_MIB_RTS_THRESH_DISABLE
/*
* mib_scan_dwell
@ -815,7 +888,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_ASSOC_TIMO_MINIMUM 0
#define RAY_MIB_ASSOC_TIMO_MAXIMUM 255
#define RAY_MIB_ASSOC_TIMO_DEFAULT 0x05
#define RAY_MIB_ASSOC_TIMO_V4 0x05
#define RAY_MIB_ASSOC_TIMO_V5 0x05
/*
* mib_adhoc_scan_cycle
@ -827,7 +901,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_ADHOC_SCAN_CYCLE_MINIMUM 1
#define RAY_MIB_ADHOC_SCAN_CYCLE_MAXIMUM 255
#define RAY_MIB_ADHOC_SCAN_CYCLE_DEFAULT 0x08
#define RAY_MIB_ADHOC_SCAN_CYCLE_V4 0x08
#define RAY_MIB_ADHOC_SCAN_CYCLE_V5 0x08
/*
* mib_infra_scan_cycle
@ -839,7 +914,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_INFRA_SCAN_CYCLE_MINIMUM 1
#define RAY_MIB_INFRA_SCAN_CYCLE_MAXIMUM 255
#define RAY_MIB_INFRA_SCAN_CYCLE_DEFAULT 0x02
#define RAY_MIB_INFRA_SCAN_CYCLE_V4 0x02
#define RAY_MIB_INFRA_SCAN_CYCLE_V5 0x02
/*
* mib_infra_super_scan_cycle
@ -850,7 +926,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_INFRA_SUPER_SCAN_CYCLE_MINIMUM 1
#define RAY_MIB_INFRA_SUPER_SCAN_CYCLE_MAXIMUM 255
#define RAY_MIB_INFRA_SUPER_SCAN_CYCLE_DEFAULT 0x08
#define RAY_MIB_INFRA_SUPER_SCAN_CYCLE_V4 0x08
#define RAY_MIB_INFRA_SUPER_SCAN_CYCLE_V5 0x08
/*
* mib_promisc
@ -860,7 +937,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_PROMISC_DISABLED 0
#define RAY_MIB_PROMISC_ENABLED 1
#define RAY_MIB_PROMISC_DEFAULT 0x00
#define RAY_MIB_PROMISC_V4 0x00
#define RAY_MIB_PROMISC_V5 0x00
/*
* mib_uniq_word
@ -870,7 +948,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_UNIQ_WORD_MINIMUM 0
#define RAY_MIB_UNIQ_WORD_MAXIMUM 0xffff
#define RAY_MIB_UNIQ_WORD_DEFAULT 0x0cbd
#define RAY_MIB_UNIQ_WORD_V4 0x0cbd
#define RAY_MIB_UNIQ_WORD_V5 0x0cbd
/*
* mib_slot_time
@ -908,7 +987,8 @@ struct ray_mib_5 {
#define RAY_MIB_ROAM_LOW_SNR_THRESH_MINIMUM 0
#define RAY_MIB_ROAM_LOW_SNR_THRESH_MAXIMUM 255
#define RAY_MIB_ROAM_LOW_SNR_THRESH_DISABLED 0xff
#define RAY_MIB_ROAM_LOW_SNR_THRESH_DEFAULT RAY_MIB_ROAM_LOW_SNR_THRESH_DISABLED
#define RAY_MIB_ROAM_LOW_SNR_THRESH_V4 RAY_MIB_ROAM_LOW_SNR_THRESH_DISABLED
#define RAY_MIB_ROAM_LOW_SNR_THRESH_V5 RAY_MIB_ROAM_LOW_SNR_THRESH_DISABLED
/*
* mib_low_snr_count
@ -929,7 +1009,8 @@ struct ray_mib_5 {
#define RAY_MIB_LOW_SNR_COUNT_MINIMUM 0
#define RAY_MIB_LOW_SNR_COUNT_MAXIMUM 255
#define RAY_MIB_LOW_SNR_COUNT_DISABLED 0xff
#define RAY_MIB_LOW_SNR_COUNT_DEFAULT RAY_MIB_LOW_SNR_COUNT_DISABLED
#define RAY_MIB_LOW_SNR_COUNT_V4 RAY_MIB_LOW_SNR_COUNT_DISABLED
#define RAY_MIB_LOW_SNR_COUNT_V5 RAY_MIB_LOW_SNR_COUNT_DISABLED
/*
* mib_infra_missed_beacon_count
@ -947,7 +1028,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_INFRA_MISSED_BEACON_COUNT_MINIMUM 0
#define RAY_MIB_INFRA_MISSED_BEACON_COUNT_MAXIMUM 255
#define RAY_MIB_INFRA_MISSED_BEACON_COUNT_DEFAULT 0x05
#define RAY_MIB_INFRA_MISSED_BEACON_COUNT_V4 0x05
#define RAY_MIB_INFRA_MISSED_BEACON_COUNT_V5 0x02
/*
* mib_adhoc_missed_beacon_count
@ -960,7 +1042,8 @@ struct ray_mib_5 {
#define RAY_MIB_ADHOC_MISSED_BEACON_COUNT_MINIMUM 0
#define RAY_MIB_ADHOC_MISSED_BEACON_COUNT_MAXIMUM 255
#define RAY_MIB_ADHOC_MISSED_BEACON_COUNT_DISABLED 0xff
#define RAY_MIB_ADHOC_MISSED_BEACON_COUNT_DEFAULT RAY_MIB_ADHOC_MISSED_BEACON_COUNT_DISABLED
#define RAY_MIB_ADHOC_MISSED_BEACON_COUNT_V4 RAY_MIB_ADHOC_MISSED_BEACON_COUNT_DISABLED
#define RAY_MIB_ADHOC_MISSED_BEACON_COUNT_V5 RAY_MIB_ADHOC_MISSED_BEACON_COUNT_DISABLED
/*
* mib_country_code
@ -982,7 +1065,8 @@ struct ray_mib_5 {
#define RAY_MIB_COUNTRY_CODE_ISRAEL 0x07
#define RAY_MIB_COUNTRY_CODE_AUSTRALIA 0x08
#define RAY_MIB_COUNTRY_CODE_JAPAN_TEST 0x09
#define RAY_MIB_COUNTRY_CODE_DEFAULT RAY_MIB_COUNTRY_CODE_USA
#define RAY_MIB_COUNTRY_CODE_V4 RAY_MIB_COUNTRY_CODE_USA
#define RAY_MIB_COUNTRY_CODE_V5 RAY_MIB_COUNTRY_CODE_USA
/*
* mib_hop_seq
@ -994,7 +1078,8 @@ struct ray_mib_5 {
*/
#define RAY_MIB_HOP_SEQ_MINIMUM 6
#define RAY_MIB_HOP_SEQ_MAXIMUM 72
#define RAY_MIB_HOP_SEQ_DEFAULT 0x0b
#define RAY_MIB_HOP_SEQ_V4 0x0b
#define RAY_MIB_HOP_SEQ_V5 0x04
/*
* mib_hop_seq_len
@ -1009,8 +1094,6 @@ struct ray_mib_5 {
#define RAY_MIB_HOP_SEQ_LEN_V4 0x4e
#define RAY_MIB_HOP_SEQ_LEN_V5 0x4f
/* XXX need to update these to the spec. XXX */
/*
* All from here down are the same in Linux/NetBSD and seem to be sane.
*/

View File

@ -33,7 +33,7 @@
*/
/*
* Network parameters, used twice in sotfc to store what we want and what
* Network parameters, used twice in softc to store what we want and what
* we have.
*
* The current parameters are ONLY valid in a function called from the runq
@ -44,7 +44,10 @@ struct ray_nw_param {
struct ray_net_params \
p_2;
u_int8_t np_ap_status;
int np_promisc;
int np_promisc; /* Promiscious mode status */
int np_framing; /* Packet framing types */
int np_auth; /* Authentication status */
int np_havenet; /* True if we have a network */
};
#define np_upd_param p_1.c_upd_param
#define np_bss_id p_1.c_bss_id
@ -80,10 +83,9 @@ struct ray_softc {
struct resource* irq_res; /* Resource for irq */
void * irq_handle; /* Handle for irq handler */
u_int8_t sc_ccsinuse[64];/* ccss' in use -- not for tx */
u_char sc_gone; /* 1 = Card bailed out */
int framing; /* Packet framing types */
struct ray_ecf_startup_v5
sc_ecf_startup; /* Startup info from card */
@ -92,8 +94,6 @@ struct ray_softc {
struct ray_nw_param sc_c; /* current network params */
struct ray_nw_param sc_d; /* desired network params */
int sc_havenet; /* true if we have a network */
u_int8_t sc_ccsinuse[64];/* ccss' in use -- not for tx */
int sc_checkcounters;
u_int64_t sc_rxoverflow; /* Number of rx overflows */
@ -127,12 +127,6 @@ struct ray_comq_entry {
char *c_mesg;
};
/*
* Framing types
*/
/* XXX maybe better as part of the if structure? */
#define SC_FRAMING_WEBGEAR 0
/*
* Macro's and constants
*/
@ -183,6 +177,17 @@ static int mib_info[RAY_MIB_MAX+1][3] = RAY_MIB_INFO;
#define SRAM_WRITE_FIELD_N(sc, off, s, f, p, n) \
SRAM_WRITE_REGION((sc), (off) + offsetof(struct s, f), (p), (n))
/* Framing types */
/* XXX maybe better as part of the if structure? */
#define RAY_FRAMING_ENCAPSULATION 0
#define RAY_FRAMING_TRANSLATION 1
/* Authentication states */
#define RAY_AUTH_UNAUTH 0
#define RAY_AUTH_WAITING 1
#define RAY_AUTH_AUTH 2
#define RAY_AUTH_NEEDED 3
/* Flags for runq entries */
#define RAY_COM_FWOK 0x0001 /* Wakeup on completion */
#define RAY_COM_FRUNNING 0x0002 /* This one running */
@ -263,6 +268,24 @@ static int mib_info[RAY_MIB_MAX+1][3] = RAY_MIB_INFO;
RAY_PRINTF(sc, "got error from runq 0x%x", (error)); \
} while (0)
/*
* There are a number of entry points into the ray_init_xxx routines.
* These can be classed into two types: a) those that happen as a result
* of a change to the cards operating parameters (e.g. BSSID change), and
* b) those that happen as a result of a change to the interface parameters
* (e.g. a change to the IP address). The second set of entries need not
* send a command to the card when the card is IFF_RUNNING. The
* RAY_COM_FCHKRUNNING flags indicates when the RUNNING flag should be
* checked, and this macro does the necessary check and command abort.
*/
#define RAY_COM_CHKRUNNING(sc, com, ifp) do { \
if (((com)->c_flags & RAY_COM_FCHKRUNNING) && \
((ifp)->if_flags & IFF_RUNNING)) { \
ray_com_runq_done(sc); \
return; \
} } while (0)
#define RAY_COM_INIT(com, function, flags) \
ray_com_init((com), (function), (flags), __STRING(function));
@ -284,6 +307,19 @@ static int mib_info[RAY_MIB_MAX+1][3] = RAY_MIB_INFO;
} } while (0)
#endif /* RAY_RECERR */
/* XXX this should be in CCSERR but don't work - probably need to use ##ifp->(iferrcounter)++; \*/
#ifndef RAY_CCSERR
#define RAY_CCSERR(sc, status, iferrcounter) do { \
struct ifnet *ifp = &(sc)->arpcom.ac_if; \
char *ss[] = RAY_CCS_STATUS_STRINGS; \
if ((status) != RAY_CCS_STATUS_COMPLETE) { \
if (ifp->if_flags & IFF_DEBUG) { \
device_printf((sc)->dev, \
"%s(%d) ECF command completed with status %s\n", \
__FUNCTION__ , __LINE__ , ss[(status)]); \
} } } while (0)
#endif /* RAY_CCSERR */
#ifndef RAY_MAP_CM
#define RAY_MAP_CM(sc)
#endif /* RAY_MAP_CM */