[BACK]Return to anreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/anreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: anreg.h,v 1.10 2006/01/09 21:19:47 jsg Exp $  */
                      2: /*     $NetBSD: anreg.h,v 1.11 2005/01/15 11:01:46 dyoung Exp $        */
                      3: /*
                      4:  * Copyright (c) 1997, 1998, 1999
                      5:  *     Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by Bill Paul.
                     18:  * 4. Neither the name of the author nor the names of any co-contributors
                     19:  *    may be used to endorse or promote products derived from this software
                     20:  *    without specific prior written permission.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
                     23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     25:  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
                     26:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     27:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     28:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     29:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     30:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     31:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
                     32:  * THE POSSIBILITY OF SUCH DAMAGE.
                     33:  *
                     34:  * $FreeBSD: src/sys/dev/an/if_anreg.h,v 1.3 2000/11/13 23:04:12 wpaul Exp $
                     35:  */
                     36:
                     37: #ifndef _DEV_IC_ANREG_H
                     38: #define        _DEV_IC_ANREG_H
                     39:
                     40: /*
                     41:  * Size of Aironet I/O space.
                     42:  */
                     43: #define AN_IOSIZ               0x40
                     44:
                     45: /*
                     46:  * Hermes register definitions and what little I know about them.
                     47:  */
                     48:
                     49: /* Hermes command/status registers. */
                     50: #define AN_COMMAND             0x00
                     51: #define AN_PARAM0              0x02
                     52: #define AN_PARAM1              0x04
                     53: #define AN_PARAM2              0x06
                     54: #define AN_STATUS              0x08
                     55: #define AN_RESP0               0x0A
                     56: #define AN_RESP1               0x0C
                     57: #define AN_RESP2               0x0E
                     58: #define AN_LINKSTAT            0x10
                     59:
                     60: /* Command register */
                     61: #define AN_CMD_BUSY            0x8000 /* busy bit */
                     62: #define AN_CMD_NO_ACK          0x0080 /* don't acknowledge command */
                     63: #define AN_CMD_CODE_MASK       0x003F
                     64: #define AN_CMD_QUAL_MASK       0x7F00
                     65:
                     66: /* Command codes */
                     67: #define AN_CMD_NOOP            0x0000 /* no-op */
                     68: #define AN_CMD_ENABLE          0x0001 /* enable */
                     69: #define AN_CMD_DISABLE         0x0002 /* disable */
                     70: #define AN_CMD_FORCE_SYNCLOSS  0x0003 /* force loss of sync */
                     71: #define AN_CMD_FW_RESTART      0x0004 /* firmware resrart */
                     72: #define AN_CMD_HOST_SLEEP      0x0005
                     73: #define AN_CMD_MAGIC_PKT       0x0006
                     74: #define AN_CMD_READCFG         0x0008
                     75: #define AN_CMD_SET_MODE                0x0009
                     76: #define AN_CMD_ALLOC_MEM       0x000A /* allocate NIC memory */
                     77: #define AN_CMD_TX              0x000B /* transmit */
                     78: #define AN_CMD_DEALLOC_MEM     0x000C
                     79: #define AN_CMD_NOOP2           0x0010
                     80: #define AN_CMD_ACCESS          0x0021
                     81: #define AN_CMD_ALLOC_BUF       0x0028
                     82: #define AN_CMD_PSP_NODES       0x0030
                     83: #define AN_CMD_SET_PHYREG      0x003E
                     84: #define AN_CMD_TX_TEST         0x003F
                     85: #define AN_CMD_SLEEP           0x0085
                     86: #define AN_CMD_SAVECFG         0x0108
                     87:
                     88: /*
                     89:  * Reclaim qualifier bit, applicable to the
                     90:  * TX command.
                     91:  */
                     92: #define AN_RECLAIM             0x0100 /* reclaim NIC memory */
                     93:
                     94: /*
                     95:  * ACCESS command qualifier bits.
                     96:  */
                     97: #define AN_ACCESS_READ         0x0000
                     98: #define AN_ACCESS_WRITE                0x0100
                     99:
                    100: /*
                    101:  * PROGRAM command qualifier bits.
                    102:  */
                    103: #define AN_PROGRAM_DISABLE     0x0000
                    104: #define AN_PROGRAM_ENABLE_RAM  0x0100
                    105: #define AN_PROGRAM_ENABLE_NVRAM        0x0200
                    106: #define AN_PROGRAM_NVRAM       0x0300
                    107:
                    108: /* Status register values */
                    109: #define AN_STAT_CMD_CODE       0x003F
                    110: #define AN_STAT_CMD_RESULT     0x7F00
                    111:
                    112: /* Linkstat register */
                    113: #define AN_LINKSTAT_ASSOCIATED         0x0400
                    114: #define AN_LINKSTAT_AUTHFAIL           0x0300
                    115: #define AN_LINKSTAT_ASSOC_FAIL         0x8400
                    116: #define AN_LINKSTAT_DISASSOC           0x8200
                    117: #define AN_LINKSTAT_DEAUTH             0x8100
                    118: #define AN_LINKSTAT_SYNCLOST_TSF       0x8004
                    119: #define AN_LINKSTAT_SYNCLOST_HOSTREQ   0x8003
                    120: #define AN_LINKSTAT_SYNCLOST_AVGRETRY  0x8002
                    121: #define AN_LINKSTAT_SYNCLOST_MAXRETRY  0x8001
                    122: #define AN_LINKSTAT_SYNCLOST_MISSBEACON        0x8000
                    123:
                    124: /* memory handle management registers */
                    125: #define AN_RX_FID              0x20
                    126: #define AN_ALLOC_FID           0x22
                    127: #define AN_TX_CMP_FID          0x24
                    128:
                    129: /*
                    130:  * Buffer Access Path (BAP) registers.
                    131:  * These are I/O channels. I believe you can use each one for
                    132:  * any desired purpose independently of the other. In general
                    133:  * though, we use BAP1 for reading and writing LTV records and
                    134:  * reading received data frames, and BAP0 for writing transmit
                    135:  * frames. This is a convention though, not a rule.
                    136:  */
                    137: #define AN_SEL0                        0x18
                    138: #define AN_SEL1                        0x1A
                    139: #define AN_OFF0                        0x1C
                    140: #define AN_OFF1                        0x1E
                    141: #define AN_DATA0               0x36
                    142: #define AN_DATA1               0x38
                    143: #define AN_BAP0                        AN_DATA0
                    144: #define AN_BAP1                        AN_DATA1
                    145:
                    146: #define AN_OFF_BUSY            0x8000
                    147: #define AN_OFF_ERR             0x4000
                    148: #define AN_OFF_DONE            0x2000
                    149: #define AN_OFF_DATAOFF         0x0FFF
                    150:
                    151: /* Event registers */
                    152: #define AN_EVENT_STAT          0x30    /* Event status */
                    153: #define AN_INT_EN              0x32    /* Interrupt enable/disable */
                    154: #define AN_EVENT_ACK           0x34    /* Ack event */
                    155:
                    156: /* Events */
                    157: #define AN_EV_CLR_STUCK_BUSY   0x4000  /* clear stuck busy bit */
                    158: #define AN_EV_WAKEREQUEST      0x2000  /* awaken from PSP mode */
                    159: #define AN_EV_MIC              0x1000  /* Message Integrity Check*/
                    160: #define AN_EV_TX_CPY           0x0400
                    161: #define AN_EV_AWAKE            0x0100  /* station woke up from PSP mode*/
                    162: #define AN_EV_LINKSTAT         0x0080  /* link status available */
                    163: #define AN_EV_CMD              0x0010  /* command completed */
                    164: #define AN_EV_ALLOC            0x0008  /* async alloc/reclaim completed */
                    165: #define AN_EV_TX_EXC           0x0004  /* async xmit completed with failure */
                    166: #define AN_EV_TX               0x0002  /* async xmit completed successfully */
                    167: #define AN_EV_RX               0x0001  /* async rx completed */
                    168:
                    169: /* Host software registers */
                    170: #define AN_SW0                 0x28
                    171: #define AN_SW1                 0x2A
                    172: #define AN_SW2                 0x2C
                    173: #define AN_SW3                 0x2E
                    174:
                    175: #define AN_CNTL                        0x14
                    176:
                    177: #define AN_CNTL_AUX_ENA                0xC000
                    178: #define AN_CNTL_AUX_ENA_STAT   0xC000
                    179: #define AN_CNTL_AUX_DIS_STAT   0x0000
                    180: #define AN_CNTL_AUX_ENA_CNTL   0x8000
                    181: #define AN_CNTL_AUX_DIS_CNTL   0x4000
                    182:
                    183: #define AN_AUX_PAGE            0x3A
                    184: #define AN_AUX_OFFSET          0x3C
                    185: #define AN_AUX_DATA            0x3E
                    186:
                    187: /*
                    188:  * General configuration information.
                    189:  */
                    190: #define AN_RID_GENCONFIG       0xFF10
                    191: struct an_rid_genconfig {
                    192:        /* General configuration. */
                    193:        u_int16_t               an_opmode;              /* 0x02 */
                    194:        u_int16_t               an_rxmode;              /* 0x04 */
                    195:        u_int16_t               an_fragthresh;          /* 0x06 */
                    196:        u_int16_t               an_rtsthresh;           /* 0x08 */
                    197:        u_int8_t                an_macaddr[6];          /* 0x0A */
                    198:        u_int8_t                an_rates[8];            /* 0x10 */
                    199:        u_int16_t               an_shortretry_limit;    /* 0x18 */
                    200:        u_int16_t               an_longretry_limit;     /* 0x1A */
                    201:        u_int16_t               an_tx_msdu_lifetime;    /* 0x1C */
                    202:        u_int16_t               an_rx_msdu_lifetime;    /* 0x1E */
                    203:        u_int16_t               an_stationary;          /* 0x20 */
                    204:        u_int16_t               an_ordering;            /* 0x22 */
                    205:        u_int16_t               an_devtype;             /* 0x24 */
                    206:        u_int16_t               an_rsvd0[5];            /* 0x26 */
                    207:        /* Scanning associating. */
                    208:        u_int16_t               an_scanmode;            /* 0x30 */
                    209:        u_int16_t               an_probedelay;          /* 0x32 */
                    210:        u_int16_t               an_probe_energy_timeout;/* 0x34 */
                    211:        u_int16_t               an_probe_response_timeout;/*0x36 */
                    212:        u_int16_t               an_beacon_listen_timeout;/*0x38 */
                    213:        u_int16_t               an_ibss_join_net_timeout;/*0x3A */
                    214:        u_int16_t               an_auth_timeout;        /* 0x3C */
                    215:        u_int16_t               an_authtype;            /* 0x3E */
                    216:        u_int16_t               an_assoc_timeout;       /* 0x40 */
                    217:        u_int16_t               an_specified_ap_timeout;/* 0x42 */
                    218:        u_int16_t               an_offline_scan_interval;/*0x44 */
                    219:        u_int16_t               an_offline_scan_duration;/*0x46 */
                    220:        u_int16_t               an_link_loss_delay;     /* 0x48 */
                    221:        u_int16_t               an_max_beacon_lost_time;/* 0x4A */
                    222:        u_int16_t               an_refresh_interval;    /* 0x4C */
                    223:        u_int16_t               an_rsvd1;               /* 0x4E */
                    224:        /* Power save operation */
                    225:        u_int16_t               an_psave_mode;          /* 0x50 */
                    226:        u_int16_t               an_sleep_for_dtims;     /* 0x52 */
                    227:        u_int16_t               an_listen_interval;     /* 0x54 */
                    228:        u_int16_t               an_fast_listen_interval;/* 0x56 */
                    229:        u_int16_t               an_listen_decay;        /* 0x58 */
                    230:        u_int16_t               an_fast_listen_decay;   /* 0x5A */
                    231:        u_int16_t               an_rsvd2[2];            /* 0x5C */
                    232:        /* Ad-hoc (or AP) operation. */
                    233:        u_int16_t               an_beacon_period;       /* 0x60 */
                    234:        u_int16_t               an_atim_duration;       /* 0x62 */
                    235:        u_int16_t               an_rsvd3;               /* 0x64 */
                    236:        u_int16_t               an_ds_channel;          /* 0x66 */
                    237:        u_int16_t               an_rsvd4;               /* 0x68 */
                    238:        u_int16_t               an_dtim_period;         /* 0x6A */
                    239:        u_int16_t               an_rsvd5[2];            /* 0x6C */
                    240:        /* Radio operation. */
                    241:        u_int16_t               an_radiotype;           /* 0x70 */
                    242:        u_int16_t               an_diversity;           /* 0x72 */
                    243:        u_int16_t               an_tx_power;            /* 0x74 */
                    244:        u_int16_t               an_rss_thresh;          /* 0x76 */
                    245:        u_int16_t               an_modulation_type;     /* 0x78 */
                    246:        u_int16_t               an_short_preamble;      /* 0x7A */
                    247:        u_int16_t               an_home_product;        /* 0x7C */
                    248:        u_int16_t               an_rsvd6;               /* 0x7E */
                    249:        /* Aironet extensions. */
                    250:        u_int8_t                an_nodename[16];        /* 0x80 */
                    251:        u_int16_t               an_arl_thresh;          /* 0x90 */
                    252:        u_int16_t               an_arl_decay;           /* 0x92 */
                    253:        u_int16_t               an_arl_delay;           /* 0x94 */
                    254:        u_int8_t                an_rsvd7;               /* 0x96 */
                    255:        u_int8_t                an_rsvd8;               /* 0x97 */
                    256:        u_int8_t                an_magic_packet_action; /* 0x98 */
                    257:        u_int8_t                an_magic_packet_ctl;    /* 0x99 */
                    258:        u_int16_t               an_rsvd9;
                    259:        u_int16_t               an_spare[24];
                    260: } __attribute__((__packed__));
                    261:
                    262: #define AN_OPMODE_IBSS_ADHOC                   0x0000
                    263: #define AN_OPMODE_INFRASTRUCTURE_STATION       0x0001
                    264: #define AN_OPMODE_AP                           0x0002
                    265: #define AN_OPMODE_AP_REPEATER                  0x0003
                    266: #define AN_OPMODE_UNMODIFIED_PAYLOAD           0x0100
                    267: #define AN_OPMODE_AIRONET_EXTENSIONS           0x0200
                    268: #define AN_OPMODE_AP_EXTENSIONS                        0x0400
                    269: #define        AN_OPMODE_ANTENNA_ALIGN                 0x0800
                    270: #define        AN_OPMODE_ETHER_LLC                     0x1000
                    271: #define        AN_OPMODE_LEAF_NODE                     0x2000
                    272: #define        AN_OPMODE_CF_POLLABLE                   0x4000
                    273: #define        AN_OPMODE_MIC                           0x8000
                    274:
                    275: #define AN_RXMODE_BC_MC_ADDR                   0x0000
                    276: #define AN_RXMODE_BC_ADDR                      0x0001
                    277: #define AN_RXMODE_ADDR                         0x0002
                    278: #define AN_RXMODE_80211_MONITOR_CURBSS         0x0003
                    279: #define AN_RXMODE_80211_MONITOR_ANYBSS         0x0004
                    280: #define AN_RXMODE_LAN_MONITOR_CURBSS           0x0005
                    281: #define AN_RXMODE_NO_8023_HEADER               0x0100
                    282: #define AN_RXMODE_NORMALIZED_RSSI              0x0200
                    283:
                    284: #define AN_RATE_1MBPS                          0x0002
                    285: #define AN_RATE_2MBPS                          0x0004
                    286: #define AN_RATE_5_5MBPS                                0x000B
                    287: #define AN_RATE_11MBPS                         0x0016
                    288:
                    289: #define AN_DEVTYPE_PC4500                      0x0065
                    290: #define AN_DEVTYPE_PC4800                      0x006D
                    291:
                    292: #define AN_SCANMODE_ACTIVE                     0x0000
                    293: #define AN_SCANMODE_PASSIVE                    0x0001
                    294: #define AN_SCANMODE_AIRONET_ACTIVE             0x0002
                    295:
                    296: #define AN_AUTHTYPE_NONE                       0x0000
                    297: #define AN_AUTHTYPE_OPEN                       0x0001
                    298: #define AN_AUTHTYPE_SHAREDKEY                  0x0002
                    299: #define AN_AUTHTYPE_MASK                       0x00ff
                    300: #define AN_AUTHTYPE_PRIVACY_IN_USE             0x0100
                    301: #define AN_AUTHTYPE_ALLOW_UNENCRYPTED          0x0200
                    302: #define AN_AUTHTYPE_LEAP                       0x1000
                    303:
                    304: #define AN_PSAVE_CAM                           0x0000
                    305: #define AN_PSAVE_PSP                           0x0001
                    306: #define AN_PSAVE_PSP_CAM                       0x0002
                    307:
                    308: #define AN_RADIOTYPE_80211_FH                  0x0001
                    309: #define AN_RADIOTYPE_80211_DS                  0x0002
                    310: #define AN_RADIOTYPE_LM2000_DS                 0x0004
                    311:
                    312: #define AN_DIVERSITY_FACTORY_DEFAULT           0x0000
                    313: #define AN_DIVERSITY_ANTENNA_1_ONLY            0x0001
                    314: #define AN_DIVERSITY_ANTENNA_2_ONLY            0x0002
                    315: #define AN_DIVERSITY_ANTENNA_1_AND_2           0x0003
                    316:
                    317: #define AN_TXPOWER_FACTORY_DEFAULT             0x0000
                    318: #define AN_TXPOWER_50MW                                50
                    319: #define AN_TXPOWER_100MW                       100
                    320: #define AN_TXPOWER_250MW                       250
                    321:
                    322: /*
                    323:  * Valid SSID list. You can specify up to three SSIDs denoting
                    324:  * the service sets that you want to join. The first SSID always
                    325:  * defaults to "tsunami" which is a handy way to detect the
                    326:  * card.
                    327:  */
                    328: #define AN_RID_SSIDLIST                0xFF11
                    329: struct an_rid_ssidlist {
                    330:        struct an_rid_ssid_entry {
                    331:                u_int16_t       an_ssid_len;
                    332:                char            an_ssid[32];
                    333:        } __attribute__((__packed__)) an_entry[3];      /* 25 for fwver.5 */
                    334: } __attribute__((__packed__));
                    335:
                    336: /*
                    337:  * Valid AP list.
                    338:  */
                    339: #define AN_RID_APLIST          0xFF12
                    340: struct an_rid_aplist {
                    341:        u_int8_t                an_ap1[8];
                    342:        u_int8_t                an_ap2[8];
                    343:        u_int8_t                an_ap3[8];
                    344:        u_int8_t                an_ap4[8];
                    345: } __attribute__((__packed__));
                    346:
                    347: /*
                    348:  * Driver name.
                    349:  */
                    350: #define AN_RID_DRVNAME         0xFF13
                    351: struct an_rid_drvname {
                    352:        u_int8_t                an_drvname[16];
                    353: } __attribute__((__packed__));
                    354:
                    355: /*
                    356:  * Frame encapsulation.
                    357:  */
                    358: #define AN_RID_ENCAP           0xFF14
                    359: #define        AN_ENCAP_NENTS          8
                    360: struct an_rid_encap {
                    361:        struct an_rid_encap_entry {
                    362:                u_int16_t       an_ethertype;
                    363:                u_int16_t       an_action;
                    364:        } __attribute__((__packed__)) an_entry[AN_ENCAP_NENTS];
                    365: } __attribute__((__packed__));
                    366:
                    367: #define AN_ENCAP_ACTION_RX     0x0001
                    368: #define AN_ENCAP_ACTION_TX     0x0002
                    369:
                    370: #define AN_RXENCAP_NONE                0x0000
                    371: #define AN_RXENCAP_RFC1024     0x0001
                    372:
                    373: #define AN_TXENCAP_RFC1024     0x0000
                    374: #define AN_TXENCAP_80211       0x0002
                    375:
                    376: /*
                    377:  * Actual config, same structure as general config (read only).
                    378:  */
                    379: #define AN_RID_ACTUALCFG       0xFF20
                    380:
                    381: /*
                    382:  * Card capabilities (read only).
                    383:  */
                    384: #define AN_RID_CAPABILITIES    0xFF00
                    385: struct an_rid_caps {
                    386:        u_int8_t                an_oui[3];              /* 0x02 */
                    387:        u_int8_t                an_rsvd0;               /* 0x05 */
                    388:        u_int16_t               an_prodnum;             /* 0x06 */
                    389:        u_int8_t                an_manufname[32];       /* 0x08 */
                    390:        u_int8_t                an_prodname[16];        /* 0x28 */
                    391:        u_int8_t                an_prodvers[8];         /* 0x38 */
                    392:        u_int8_t                an_oemaddr[6];          /* 0x40 */
                    393:        u_int8_t                an_aironetaddr[6];      /* 0x46 */
                    394:        u_int16_t               an_radiotype;           /* 0x4C */
                    395:        u_int16_t               an_regdomain;           /* 0x4E */
                    396:        u_int8_t                an_callid[6];           /* 0x50 */
                    397:        u_int8_t                an_rates[8];            /* 0x56 */
                    398:        u_int8_t                an_rx_diversity;        /* 0x5E */
                    399:        u_int8_t                an_tx_diversity;        /* 0x5F */
                    400:        u_int16_t               an_tx_powerlevels[8];   /* 0x60 */
                    401:        u_int16_t               an_hwrev;               /* 0x70 */
                    402:        u_int16_t               an_hwcaps;              /* 0x72 */
                    403:        u_int16_t               an_temprange;           /* 0x74 */
                    404:        u_int16_t               an_fwrev;               /* 0x76 */
                    405:        u_int16_t               an_fwsubrev;            /* 0x78 */
                    406:        u_int16_t               an_ifacerev;            /* 0x7A */
                    407:        u_int16_t               an_softcaps;            /* 0x7C */
                    408:        u_int16_t               an_bootblockrev;        /* 0x7E */
                    409:        u_int16_t               an_req_hw_support;      /* 0x80 */
                    410:        /* extended capabilities */
                    411:        u_int16_t               an_ext_softcaps;        /* 0x82 */
                    412:        u_int16_t               an_spare[34];
                    413: } __attribute__((__packed__));
                    414:
                    415: #define        AN_REGDOMAIN_USA        0
                    416: #define        AN_REGDOMAIN_EUROPE     1
                    417: #define        AN_REGDOMAIN_JAPAN      2
                    418: #define        AN_REGDOMAIN_SPAIN      3
                    419: #define        AN_REGDOMAIN_FRANCE     4
                    420: #define        AN_REGDOMAIN_BELGIUM    5
                    421: #define        AN_REGDOMAIN_ISRAEL     6
                    422: #define        AN_REGDOMAIN_CANADA     7
                    423: #define        AN_REGDOMAIN_AUSTRALIA  8
                    424: #define        AN_REGDOMAIN_JAPANWIDE  9
                    425:
                    426: #define        AN_SOFTCAPS_WEP         0x0002
                    427: #define        AN_SOFTCAPS_RSSIMAP     0x0008
                    428: #define        AN_SOFTCAPS_WEP128      0x0100
                    429:
                    430: #define        AN_EXT_SOFTCAPS_MIC     0x0001
                    431:
                    432: /*
                    433:  * Access point (read only)
                    434:  */
                    435: #define AN_RID_APINFO          0xFF01
                    436: struct an_rid_apinfo {
                    437:        u_int16_t               an_tim_addr;
                    438:        u_int16_t               an_airo_addr;
                    439: } __attribute__((__packed__));
                    440:
                    441: /*
                    442:  * Radio info (read only).
                    443:  */
                    444: #define AN_RID_RADIOINFO       0xFF02
                    445:
                    446: /*
                    447:  * Status (read only). Note: the manual claims this RID is 108 bytes
                    448:  * long (0x6A is the last datum, which is 2 bytes long) however when
                    449:  * this RID is read from the NIC, it returns a length of 110 or 112.
                    450:  * To be on the safe side, this structure is padded with 4 extra 16-bit
                    451:  * words. (There is a misprint in the manual which says the macaddr
                    452:  * field is 8 bytes long.)
                    453:  *
                    454:  * Also, the channel_set and current_channel fields appear to be
                    455:  * reversed. Either that, or the hop_period field is unused.
                    456:  */
                    457: #define AN_RID_STATUS          0xFF50
                    458: struct an_rid_status {
                    459:        u_int8_t                an_macaddr[6];          /* 0x02 */
                    460:        u_int16_t               an_opmode;              /* 0x08 */
                    461:        u_int16_t               an_errcode;             /* 0x0A */
                    462:        u_int16_t               an_cur_signal_strength; /* 0x0C */
                    463:        u_int16_t               an_ssidlen;             /* 0x0E */
                    464:        u_int8_t                an_ssid[32];            /* 0x10 */
                    465:        u_int8_t                an_ap_name[16];         /* 0x30 */
                    466:        u_int8_t                an_cur_bssid[6];        /* 0x40 */
                    467:        u_int8_t                an_prev_bssid1[6];      /* 0x46 */
                    468:        u_int8_t                an_prev_bssid2[6];      /* 0x4C */
                    469:        u_int8_t                an_prev_bssid3[6];      /* 0x52 */
                    470:        u_int16_t               an_beacon_period;       /* 0x58 */
                    471:        u_int16_t               an_dtim_period;         /* 0x5A */
                    472:        u_int16_t               an_atim_duration;       /* 0x5C */
                    473:        u_int16_t               an_hop_period;          /* 0x5E */
                    474:        u_int16_t               an_cur_channel;         /* 0x62 */
                    475:        u_int16_t               an_channel_set;         /* 0x60 */
                    476:        u_int16_t               an_hops_to_backbone;    /* 0x64 */
                    477:        u_int16_t               an_ap_total_load;       /* 0x66 */
                    478:        u_int16_t               an_our_generated_load;  /* 0x68 */
                    479:        u_int16_t               an_accumulated_arl;     /* 0x6A */
                    480:        u_int16_t               an_cur_signal_quality;  /* 0x6C */
                    481:        u_int16_t               an_current_tx_rate;     /* 0x6E */
                    482:        u_int16_t               an_ap_device;           /* 0x70 */
                    483:        u_int16_t               an_normalized_rssi;     /* 0x72 */
                    484:        u_int16_t               an_short_pre_in_use;    /* 0x74 */
                    485:        u_int8_t                an_ap_ip_addr[4];       /* 0x76 */
                    486:        u_int16_t               an_max_noise_prev_sec;  /* 0x7A */
                    487:        u_int16_t               an_avg_noise_prev_min;  /* 0x7C */
                    488:        u_int16_t               an_max_noise_prev_min;  /* 0x7E */
                    489:        u_int16_t               an_spare[11];
                    490: } __attribute__((__packed__));
                    491:
                    492: #define AN_STATUS_OPMODE_CONFIGURED            0x0001
                    493: #define AN_STATUS_OPMODE_MAC_ENABLED           0x0002
                    494: #define AN_STATUS_OPMODE_RX_ENABLED            0x0004
                    495: #define AN_STATUS_OPMODE_IN_SYNC               0x0010
                    496: #define AN_STATUS_OPMODE_ASSOCIATED            0x0020
                    497: #define AN_STATUS_OPMODE_ERROR                 0x8000
                    498:
                    499: /*
                    500:  * Statistics
                    501:  */
                    502: #define AN_RID_16BITS_CUM      0xFF60  /* Cumulative 16-bit stats counters */
                    503: #define AN_RID_16BITS_DELTA    0xFF61  /* 16-bit stats (since last clear) */
                    504: #define AN_RID_16BITS_DELTACLR 0xFF62  /* 16-bit stats, clear on read */
                    505: #define AN_RID_32BITS_CUM      0xFF68  /* Cumulative 32-bit stats counters */
                    506: #define AN_RID_32BITS_DELTA    0xFF69  /* 32-bit stats (since last clear) */
                    507: #define AN_RID_32BITS_DELTACLR 0xFF6A  /* 32-bit stats, clear on read */
                    508:
                    509: /*
                    510:  * Grrr. The manual says the statistics record is 384 bytes in length,
                    511:  * but the card says the record is 404 bytes. There's some padding left
                    512:  * at the end of this structure to account for any discrepancies.
                    513:  */
                    514: struct an_rid_stats {
                    515:        u_int16_t               an_spacer;              /* 0x02 */
                    516:        u_int32_t               an_rx_overruns;         /* 0x04 */
                    517:        u_int32_t               an_rx_plcp_csum_errs;   /* 0x08 */
                    518:        u_int32_t               an_rx_plcp_format_errs; /* 0x0C */
                    519:        u_int32_t               an_rx_plcp_len_errs;    /* 0x10 */
                    520:        u_int32_t               an_rx_mac_crc_errs;     /* 0x14 */
                    521:        u_int32_t               an_rx_mac_crc_ok;       /* 0x18 */
                    522:        u_int32_t               an_rx_wep_errs;         /* 0x1C */
                    523:        u_int32_t               an_rx_wep_ok;           /* 0x20 */
                    524:        u_int32_t               an_retry_long;          /* 0x24 */
                    525:        u_int32_t               an_retry_short;         /* 0x28 */
                    526:        u_int32_t               an_retry_max;           /* 0x2C */
                    527:        u_int32_t               an_no_ack;              /* 0x30 */
                    528:        u_int32_t               an_no_cts;              /* 0x34 */
                    529:        u_int32_t               an_rx_ack_ok;           /* 0x38 */
                    530:        u_int32_t               an_rx_cts_ok;           /* 0x3C */
                    531:        u_int32_t               an_tx_ack_ok;           /* 0x40 */
                    532:        u_int32_t               an_tx_rts_ok;           /* 0x44 */
                    533:        u_int32_t               an_tx_cts_ok;           /* 0x48 */
                    534:        u_int32_t               an_tx_lmac_mcasts;      /* 0x4C */
                    535:        u_int32_t               an_tx_lmac_bcasts;      /* 0x50 */
                    536:        u_int32_t               an_tx_lmac_ucast_frags; /* 0x54 */
                    537:        u_int32_t               an_tx_lmac_ucasts;      /* 0x58 */
                    538:        u_int32_t               an_tx_beacons;          /* 0x5C */
                    539:        u_int32_t               an_rx_beacons;          /* 0x60 */
                    540:        u_int32_t               an_tx_single_cols;      /* 0x64 */
                    541:        u_int32_t               an_tx_multi_cols;       /* 0x68 */
                    542:        u_int32_t               an_tx_defers_no;        /* 0x6C */
                    543:        u_int32_t               an_tx_defers_prot;      /* 0x70 */
                    544:        u_int32_t               an_tx_defers_energy;    /* 0x74 */
                    545:        u_int32_t               an_rx_dups;             /* 0x78 */
                    546:        u_int32_t               an_rx_partial;          /* 0x7C */
                    547:        u_int32_t               an_tx_too_old;          /* 0x80 */
                    548:        u_int32_t               an_rx_too_old;          /* 0x84 */
                    549:        u_int32_t               an_lostsync_max_retries;/* 0x88 */
                    550:        u_int32_t               an_lostsync_missed_beacons;/* 0x8C */
                    551:        u_int32_t               an_lostsync_arl_exceeded;/*0x90 */
                    552:        u_int32_t               an_lostsync_deauthed;   /* 0x94 */
                    553:        u_int32_t               an_lostsync_disassociated;/*0x98 */
                    554:        u_int32_t               an_lostsync_tsf_timing; /* 0x9C */
                    555:        u_int32_t               an_tx_host_mcasts;      /* 0xA0 */
                    556:        u_int32_t               an_tx_host_bcasts;      /* 0xA4 */
                    557:        u_int32_t               an_tx_host_ucasts;      /* 0xA8 */
                    558:        u_int32_t               an_tx_host_failed;      /* 0xAC */
                    559:        u_int32_t               an_rx_host_mcasts;      /* 0xB0 */
                    560:        u_int32_t               an_rx_host_bcasts;      /* 0xB4 */
                    561:        u_int32_t               an_rx_host_ucasts;      /* 0xB8 */
                    562:        u_int32_t               an_rx_host_discarded;   /* 0xBC */
                    563:        u_int32_t               an_tx_hmac_mcasts;      /* 0xC0 */
                    564:        u_int32_t               an_tx_hmac_bcasts;      /* 0xC4 */
                    565:        u_int32_t               an_tx_hmac_ucasts;      /* 0xC8 */
                    566:        u_int32_t               an_tx_hmac_failed;      /* 0xCC */
                    567:        u_int32_t               an_rx_hmac_mcasts;      /* 0xD0 */
                    568:        u_int32_t               an_rx_hmac_bcasts;      /* 0xD4 */
                    569:        u_int32_t               an_rx_hmac_ucasts;      /* 0xD8 */
                    570:        u_int32_t               an_rx_hmac_discarded;   /* 0xDC */
                    571:        u_int32_t               an_tx_hmac_accepted;    /* 0xE0 */
                    572:        u_int32_t               an_ssid_mismatches;     /* 0xE4 */
                    573:        u_int32_t               an_ap_mismatches;       /* 0xE8 */
                    574:        u_int32_t               an_rates_mismatches;    /* 0xEC */
                    575:        u_int32_t               an_auth_rejects;        /* 0xF0 */
                    576:        u_int32_t               an_auth_timeouts;       /* 0xF4 */
                    577:        u_int32_t               an_assoc_rejects;       /* 0xF8 */
                    578:        u_int32_t               an_assoc_timeouts;      /* 0xFC */
                    579:        u_int32_t               an_reason_outside_table;/* 0x100 */
                    580:        u_int32_t               an_reason1;             /* 0x104 */
                    581:        u_int32_t               an_reason2;             /* 0x108 */
                    582:        u_int32_t               an_reason3;             /* 0x10C */
                    583:        u_int32_t               an_reason4;             /* 0x110 */
                    584:        u_int32_t               an_reason5;             /* 0x114 */
                    585:        u_int32_t               an_reason6;             /* 0x118 */
                    586:        u_int32_t               an_reason7;             /* 0x11C */
                    587:        u_int32_t               an_reason8;             /* 0x120 */
                    588:        u_int32_t               an_reason9;             /* 0x124 */
                    589:        u_int32_t               an_reason10;            /* 0x128 */
                    590:        u_int32_t               an_reason11;            /* 0x12C */
                    591:        u_int32_t               an_reason12;            /* 0x130 */
                    592:        u_int32_t               an_reason13;            /* 0x134 */
                    593:        u_int32_t               an_reason14;            /* 0x138 */
                    594:        u_int32_t               an_reason15;            /* 0x13C */
                    595:        u_int32_t               an_reason16;            /* 0x140 */
                    596:        u_int32_t               an_reason17;            /* 0x144 */
                    597:        u_int32_t               an_reason18;            /* 0x148 */
                    598:        u_int32_t               an_reason19;            /* 0x14C */
                    599:        u_int32_t               an_rx_mgmt_pkts;        /* 0x150 */
                    600:        u_int32_t               an_tx_mgmt_pkts;        /* 0x154 */
                    601:        u_int32_t               an_rx_refresh_pkts;     /* 0x158 */
                    602:        u_int32_t               an_tx_refresh_pkts;     /* 0x15C */
                    603:        u_int32_t               an_rx_poll_pkts;        /* 0x160 */
                    604:        u_int32_t               an_tx_poll_pkts;        /* 0x164 */
                    605:        u_int32_t               an_host_retries;        /* 0x168 */
                    606:        u_int32_t               an_lostsync_hostreq;    /* 0x16C */
                    607:        u_int32_t               an_host_tx_bytes;       /* 0x170 */
                    608:        u_int32_t               an_host_rx_bytes;       /* 0x174 */
                    609:        u_int32_t               an_uptime_usecs;        /* 0x178 */
                    610:        u_int32_t               an_uptime_secs;         /* 0x17C */
                    611:        u_int32_t               an_lostsync_better_ap;  /* 0x180 */
                    612:        u_int32_t               an_rsvd[10];
                    613: } __attribute__((__packed__));
                    614:
                    615: /*
                    616:  * Volatile WEP Key
                    617:  */
                    618: #define AN_RID_WEP_VOLATILE    0xFF15  /* Volatile WEP Key */
                    619: struct an_rid_wepkey {
                    620:        u_int16_t               an_key_index;           /* 0x02 */
                    621:        u_int8_t                an_mac_addr[6];         /* 0x04 */
                    622:        u_int16_t               an_key_len;             /* 0x0A */
                    623:        u_int8_t                an_key[16];             /* 0x0C */
                    624: } __attribute__((__packed__));
                    625:
                    626: /*
                    627:  * Persistent WEP Key
                    628:  */
                    629: #define AN_RID_WEP_PERSISTENT  0xFF16  /* Persistent WEP Key */
                    630:
                    631: /*
                    632:  * LEAP Key
                    633:  */
                    634: #define AN_RID_LEAP_USER       0xFF23  /* User Name for LEAP */
                    635: #define AN_RID_LEAP_PASS       0xFF24  /* Password for LEAP */
                    636: struct an_rid_leapkey {
                    637:        u_int16_t               an_key_len;             /* 0x02 */
                    638:        u_int8_t                an_key[32];             /* 0x04 */
                    639: } __attribute__((__packed__));
                    640:
                    641: /*
                    642:  * MIC
                    643:  */
                    644: #define AN_RID_MIC             0xFF57  /* Message Integrity Check */
                    645: struct an_rid_mic {
                    646:        u_int16_t               an_mic_state;           /* 0x02 */
                    647:        u_int16_t               an_mic_mcast_valid;     /* 0x04 */
                    648:        u_int8_t                an_mic_mcast[16];       /* 0x06 */
                    649:        u_int16_t               an_mic_ucast_valid;     /* 0x16 */
                    650:        u_int8_t                an_mic_ucast[16];       /* 0x18 */
                    651: } __attribute__((__packed__));
                    652:
                    653: /*
                    654:  * Receive frame structure.
                    655:  */
                    656: struct an_rxframe {
                    657:        u_int32_t               an_rx_time;             /* 0x00 */
                    658:        u_int16_t               an_rx_status;           /* 0x04 */
                    659:        u_int16_t               an_rx_payload_len;      /* 0x06 */
                    660:        u_int8_t                an_rsvd0;               /* 0x08 */
                    661:        u_int8_t                an_rx_signal_strength;  /* 0x09 */
                    662:        u_int8_t                an_rx_rate;             /* 0x0A */
                    663:        u_int8_t                an_rx_chan;             /* 0x0B */
                    664:        u_int8_t                an_rx_assoc_cnt;        /* 0x0C */
                    665:        u_int8_t                an_rsvd1[3];            /* 0x0D */
                    666:        u_int8_t                an_plcp_hdr[4];         /* 0x10 */
                    667:        struct ieee80211_frame_addr4    an_whdr;
                    668:        u_int16_t               an_gaplen;              /* 0x32 */
                    669: } __attribute__((__packed__));
                    670: #define AN_RXGAP_MAX   8
                    671:
                    672: /*
                    673:  * Transmit frame structure.
                    674:  */
                    675: struct an_txframe {
                    676:        u_int32_t               an_tx_sw;               /* 0x00 */
                    677:        u_int16_t               an_tx_status;           /* 0x04 */
                    678:        u_int16_t               an_tx_payload_len;      /* 0x06 */
                    679:        u_int16_t               an_tx_ctl;              /* 0x08 */
                    680:        u_int16_t               an_tx_assoc_id;         /* 0x0A */
                    681:        u_int16_t               an_tx_retry;            /* 0x0C */
                    682:        u_int8_t                an_tx_assoc_cnt;        /* 0x0E */
                    683:        u_int8_t                an_tx_rate;             /* 0x0F */
                    684:        u_int8_t                an_tx_max_long_retries; /* 0x10 */
                    685:        u_int8_t                an_tx_max_short_retries; /*0x11 */
                    686:        u_int8_t                an_rsvd0[2];            /* 0x12 */
                    687:        struct ieee80211_frame_addr4    an_whdr;
                    688:        u_int16_t               an_gaplen;              /* 0x32 */
                    689: } __attribute__((__packed__));
                    690:
                    691: #define        AN_TXGAP_802_3  0
                    692: #define        AN_TXGAP_802_11 6
                    693:
                    694: struct an_802_3_hdr {
                    695:        u_int16_t               an_802_3_status;
                    696:        u_int16_t               an_802_3_payload_len;
                    697:        u_int8_t                an_dst_addr[6];
                    698:        u_int8_t                an_src_addr[6];
                    699: } __attribute__((__packed__));
                    700:
                    701: #define AN_TXSTAT_EXCESS_RETRY 0x0002
                    702: #define AN_TXSTAT_LIFE_EXCEEDED        0x0004
                    703: #define AN_TXSTAT_AID_FAIL     0x0008
                    704: #define AN_TXSTAT_MAC_DISABLED 0x0010
                    705: #define AN_TXSTAT_ASSOC_LOST   0x0020
                    706:
                    707: #define AN_TXCTL_RSVD          0x0001
                    708: #define AN_TXCTL_TXOK_INTR     0x0002
                    709: #define AN_TXCTL_TXERR_INTR    0x0004
                    710: #define AN_TXCTL_HEADER_TYPE   0x0008
                    711: #define AN_TXCTL_PAYLOAD_TYPE  0x0010
                    712: #define AN_TXCTL_NORELEASE     0x0020
                    713: #define AN_TXCTL_NORETRIES     0x0040
                    714: #define AN_TXCTL_CLEAR_AID     0x0080
                    715: #define AN_TXCTL_STRICT_ORDER  0x0100
                    716: #define AN_TXCTL_USE_RTS       0x0200
                    717:
                    718: #define AN_HEADERTYPE_8023     0x0000
                    719: #define AN_HEADERTYPE_80211    0x0008
                    720:
                    721: #define AN_PAYLOADTYPE_ETHER   0x0000
                    722: #define AN_PAYLOADTYPE_LLC     0x0010
                    723:
                    724: #define AN_TXCTL_80211 \
                    725:        (AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_80211|    \
                    726:        AN_PAYLOADTYPE_LLC|AN_TXCTL_NORELEASE)
                    727:
                    728: #define AN_TXCTL_8023  \
                    729:        (AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_8023|     \
                    730:        AN_PAYLOADTYPE_ETHER|AN_TXCTL_NORELEASE)
                    731:
                    732: #define AN_STAT_BADCRC         0x0001
                    733: #define AN_STAT_UNDECRYPTABLE  0x0002
                    734: #define AN_STAT_ERRSTAT                0x0003
                    735: #define AN_STAT_MAC_PORT       0x0700
                    736: #define AN_STAT_1042           0x2000  /* RFC1042 encoded */
                    737: #define AN_STAT_TUNNEL         0x4000  /* Bridge-tunnel encoded */
                    738: #define AN_STAT_WMP_MSG                0x6000  /* WaveLAN-II management protocol */
                    739: #define AN_RXSTAT_MSG_TYPE     0xE000
                    740:
                    741: #define AN_ENC_TX_802_3                0x00
                    742: #define AN_ENC_TX_802_11       0x11
                    743: #define AN_ENC_TX_E_II         0x0E
                    744:
                    745: #define AN_ENC_TX_1042         0x00
                    746: #define AN_ENC_TX_TUNNEL       0xF8
                    747:
                    748: #define AN_TXCNTL_MACPORT      0x00FF
                    749: #define AN_TXCNTL_STRUCTTYPE   0xFF00
                    750:
                    751: #endif /* _DEV_IC_ANREG_H */

CVSweb