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

Annotation of sys/dev/pci/if_ipwreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: if_ipwreg.h,v 1.14 2006/02/26 19:14:40 damien Exp $   */
                      2:
                      3: /*-
                      4:  * Copyright (c) 2004-2006
                      5:  *      Damien Bergamini <damien.bergamini@free.fr>. 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 unmodified, this list of conditions, and the following
                     12:  *    disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  */
                     29:
                     30: #define IPW_NTBD       128
                     31: #define IPW_TBD_SZ     (IPW_NTBD * sizeof (struct ipw_bd))
                     32: #define IPW_NDATA      (IPW_NTBD / 2)
                     33: #define IPW_NRBD       128
                     34: #define IPW_RBD_SZ     (IPW_NRBD * sizeof (struct ipw_bd))
                     35: #define IPW_STATUS_SZ  (IPW_NRBD * sizeof (struct ipw_status))
                     36:
                     37: #define IPW_CSR_INTR           0x0008
                     38: #define IPW_CSR_INTR_MASK      0x000c
                     39: #define IPW_CSR_INDIRECT_ADDR  0x0010
                     40: #define IPW_CSR_INDIRECT_DATA  0x0014
                     41: #define IPW_CSR_AUTOINC_ADDR   0x0018
                     42: #define IPW_CSR_AUTOINC_DATA   0x001c
                     43: #define IPW_CSR_RST            0x0020
                     44: #define IPW_CSR_CTL            0x0024
                     45: #define IPW_CSR_IO             0x0030
                     46: #define IPW_CSR_TX_BD_BASE     0x0200
                     47: #define IPW_CSR_TX_BD_SIZE     0x0204
                     48: #define IPW_CSR_RX_BD_BASE     0x0240
                     49: #define IPW_CSR_RX_STATUS_BASE 0x0244
                     50: #define IPW_CSR_RX_BD_SIZE     0x0248
                     51: #define IPW_CSR_TX_READ_INDEX  0x0280
                     52: #define IPW_CSR_RX_READ_INDEX  0x02a0
                     53: #define IPW_CSR_TABLE1_BASE    0x0380
                     54: #define IPW_CSR_TABLE2_BASE    0x0384
                     55: #define IPW_CSR_TX_WRITE_INDEX 0x0f80
                     56: #define IPW_CSR_RX_WRITE_INDEX 0x0fa0
                     57:
                     58: /* possible flags for register IPW_CSR_INTR */
                     59: #define IPW_INTR_TX_TRANSFER   0x00000001
                     60: #define IPW_INTR_RX_TRANSFER   0x00000002
                     61: #define IPW_INTR_STATUS_CHANGE 0x00000010
                     62: #define IPW_INTR_COMMAND_DONE  0x00010000
                     63: #define IPW_INTR_FW_INIT_DONE  0x01000000
                     64: #define IPW_INTR_FATAL_ERROR   0x40000000
                     65: #define IPW_INTR_PARITY_ERROR  0x80000000
                     66:
                     67: #define IPW_INTR_MASK                                                  \
                     68:        (IPW_INTR_TX_TRANSFER | IPW_INTR_RX_TRANSFER |                  \
                     69:         IPW_INTR_STATUS_CHANGE | IPW_INTR_COMMAND_DONE |               \
                     70:         IPW_INTR_FW_INIT_DONE | IPW_INTR_FATAL_ERROR |                 \
                     71:         IPW_INTR_PARITY_ERROR)
                     72:
                     73: /* possible flags for register IPW_CSR_RST */
                     74: #define IPW_RST_PRINCETON_RESET        0x00000001
                     75: #define IPW_RST_SW_RESET       0x00000080
                     76: #define IPW_RST_MASTER_DISABLED        0x00000100
                     77: #define IPW_RST_STOP_MASTER    0x00000200
                     78:
                     79: /* possible flags for register IPW_CSR_CTL */
                     80: #define IPW_CTL_CLOCK_READY    0x00000001
                     81: #define IPW_CTL_ALLOW_STANDBY  0x00000002
                     82: #define IPW_CTL_INIT           0x00000004
                     83:
                     84: /* possible flags for register IPW_CSR_IO */
                     85: #define IPW_IO_GPIO1_ENABLE    0x00000008
                     86: #define IPW_IO_GPIO1_MASK      0x0000000c
                     87: #define IPW_IO_GPIO3_MASK      0x000000c0
                     88: #define IPW_IO_LED_OFF         0x00002000
                     89: #define IPW_IO_RADIO_DISABLED  0x00010000
                     90:
                     91: #define IPW_STATE_ASSOCIATED           0x0004
                     92: #define IPW_STATE_ASSOCIATION_LOST     0x0008
                     93: #define IPW_STATE_SCAN_COMPLETE                0x0020
                     94: #define IPW_STATE_RADIO_DISABLED       0x0100
                     95: #define IPW_STATE_DISABLED             0x0200
                     96: #define IPW_STATE_SCANNING             0x0800
                     97:
                     98: /* table1 offsets */
                     99: #define IPW_INFO_LOCK                  480
                    100: #define IPW_INFO_APS_CNT               604
                    101: #define IPW_INFO_APS_BASE              608
                    102: #define IPW_INFO_CARD_DISABLED         628
                    103: #define IPW_INFO_CURRENT_CHANNEL       756
                    104: #define IPW_INFO_CURRENT_TX_RATE       768
                    105:
                    106: /* table2 offsets */
                    107: #define IPW_INFO_CURRENT_SSID  48
                    108: #define IPW_INFO_CURRENT_BSSID 112
                    109:
                    110: /* supported rates */
                    111: #define IPW_RATE_DS1   1
                    112: #define IPW_RATE_DS2   2
                    113: #define IPW_RATE_DS5   4
                    114: #define IPW_RATE_DS11  8
                    115:
                    116: /* firmware binary image header */
                    117: struct ipw_firmware_hdr {
                    118:        uint32_t        version;
                    119:        uint32_t        main_size;      /* firmware size */
                    120:        uint32_t        ucode_size;     /* microcode size */
                    121: } __packed;
                    122:
                    123: /* buffer descriptor */
                    124: struct ipw_bd {
                    125:        uint32_t        physaddr;
                    126:        uint32_t        len;
                    127:        uint8_t         flags;
                    128: #define IPW_BD_FLAG_TX_FRAME_802_3             0x00
                    129: #define IPW_BD_FLAG_TX_NOT_LAST_FRAGMENT       0x01
                    130: #define IPW_BD_FLAG_TX_FRAME_COMMAND           0x02
                    131: #define IPW_BD_FLAG_TX_FRAME_802_11            0x04
                    132: #define IPW_BD_FLAG_TX_LAST_FRAGMENT           0x08
                    133:        uint8_t         nfrag;  /* number of fragments */
                    134:        uint8_t         reserved[6];
                    135: } __packed;
                    136:
                    137: /* status */
                    138: struct ipw_status {
                    139:        uint32_t        len;
                    140:        uint16_t        code;
                    141: #define IPW_STATUS_CODE_COMMAND                0
                    142: #define IPW_STATUS_CODE_NEWSTATE       1
                    143: #define IPW_STATUS_CODE_DATA_802_11    2
                    144: #define IPW_STATUS_CODE_DATA_802_3     3
                    145: #define IPW_STATUS_CODE_NOTIFICATION   4
                    146:        uint8_t         flags;
                    147: #define IPW_STATUS_FLAG_DECRYPTED      0x01
                    148: #define IPW_STATUS_FLAG_WEP_ENCRYPTED  0x02
                    149:        uint8_t         rssi;   /* received signal strength indicator */
                    150: } __packed;
                    151:
                    152: /* data header */
                    153: struct ipw_hdr {
                    154:        uint32_t        type;
                    155: #define IPW_HDR_TYPE_SEND      33
                    156:        uint32_t        subtype;
                    157:        uint8_t         encrypted;
                    158:        uint8_t         encrypt;
                    159:        uint8_t         keyidx;
                    160:        uint8_t         keysz;
                    161:        uint8_t         key[IEEE80211_KEYBUF_SIZE];
                    162:        uint8_t         reserved[10];
                    163:        uint8_t         src_addr[IEEE80211_ADDR_LEN];
                    164:        uint8_t         dst_addr[IEEE80211_ADDR_LEN];
                    165:        uint16_t        fragmentsz;
                    166: } __packed;
                    167:
                    168: /* command */
                    169: struct ipw_cmd {
                    170:        uint32_t        type;
                    171: #define IPW_CMD_ENABLE                         2
                    172: #define IPW_CMD_SET_CONFIGURATION              6
                    173: #define IPW_CMD_SET_ESSID                      8
                    174: #define IPW_CMD_SET_MANDATORY_BSSID            9
                    175: #define IPW_CMD_SET_MAC_ADDRESS                        11
                    176: #define IPW_CMD_SET_MODE                       12
                    177: #define IPW_CMD_SET_CHANNEL                    14
                    178: #define IPW_CMD_SET_RTS_THRESHOLD              15
                    179: #define IPW_CMD_SET_FRAG_THRESHOLD             16
                    180: #define IPW_CMD_SET_POWER_MODE                 17
                    181: #define IPW_CMD_SET_TX_RATES                   18
                    182: #define IPW_CMD_SET_BASIC_TX_RATES             19
                    183: #define IPW_CMD_SET_WEP_KEY                    20
                    184: #define IPW_CMD_SET_WEP_KEY_INDEX              25
                    185: #define IPW_CMD_SET_WEP_FLAGS                  26
                    186: #define IPW_CMD_ADD_MULTICAST                  27
                    187: #define IPW_CMD_SET_BEACON_INTERVAL            29
                    188: #define IPW_CMD_SET_TX_POWER_INDEX             36
                    189: #define IPW_CMD_BROADCAST_SCAN                 43
                    190: #define IPW_CMD_DISABLE                                44
                    191: #define IPW_CMD_SET_DESIRED_BSSID              45
                    192: #define IPW_CMD_SET_SCAN_OPTIONS               46
                    193: #define IPW_CMD_PREPARE_POWER_DOWN             58
                    194: #define IPW_CMD_DISABLE_PHY                    61
                    195: #define IPW_CMD_SET_SECURITY_INFORMATION       67
                    196:        uint32_t        subtype;
                    197:        uint32_t        seq;
                    198:        uint32_t        len;
                    199:        uint8_t         data[400];
                    200:        uint32_t        status;
                    201:        uint8_t         reserved[68];
                    202: } __packed;
                    203:
                    204: /* possible values for command IPW_CMD_SET_POWER_MODE */
                    205: #define IPW_POWER_MODE_CAM     0
                    206: #define IPW_POWER_AUTOMATIC    6
                    207:
                    208: /* possible values for command IPW_CMD_SET_MODE */
                    209: #define IPW_MODE_BSS           0
                    210: #define IPW_MODE_IBSS          1
                    211: #define IPW_MODE_MONITOR       2
                    212:
                    213: /* possible flags for command IPW_CMD_SET_WEP_FLAGS */
                    214: #define IPW_WEPON      0x8
                    215:
                    216: /* structure for command IPW_CMD_SET_WEP_KEY */
                    217: struct ipw_wep_key {
                    218:        uint8_t idx;
                    219:        uint8_t len;
                    220:        uint8_t key[13];
                    221: } __packed;
                    222:
                    223: /* structure for command IPW_CMD_SET_SECURITY_INFORMATION */
                    224: struct ipw_security {
                    225:        uint32_t        ciphers;
                    226: #define IPW_CIPHER_NONE                0x00000001
                    227: #define IPW_CIPHER_WEP40       0x00000002
                    228: #define IPW_CIPHER_WEP104      0x00000020
                    229:        uint16_t        reserved1;
                    230:        uint8_t         authmode;
                    231: #define IPW_AUTH_OPEN  0
                    232: #define IPW_AUTH_SHARED        1
                    233:        uint16_t        reserved2;
                    234: } __packed;
                    235:
                    236: /* structure for command IPW_CMD_SET_SCAN_OPTIONS */
                    237: struct ipw_scan_options {
                    238:        uint32_t        flags;
                    239: #define IPW_SCAN_DO_NOT_ASSOCIATE      0x00000001
                    240: #define IPW_SCAN_PASSIVE               0x00000008
                    241:        uint32_t        channels;
                    242: } __packed;
                    243:
                    244: /* structure for command IPW_CMD_SET_CONFIGURATION */
                    245: struct ipw_configuration {
                    246:        uint32_t        flags;
                    247: #define IPW_CFG_PROMISCUOUS    0x00000004
                    248: #define IPW_CFG_PREAMBLE_AUTO  0x00000010
                    249: #define IPW_CFG_IBSS_AUTO_START        0x00000020
                    250: #define IPW_CFG_802_1x_ENABLE  0x00004000
                    251: #define IPW_CFG_BSS_MASK       0x00008000
                    252: #define IPW_CFG_IBSS_MASK      0x00010000
                    253:        uint32_t        bss_chan;
                    254:        uint32_t        ibss_chan;
                    255: } __packed;
                    256:
                    257: /* EEPROM = Electrically Erasable Programmable Read-Only Memory */
                    258:
                    259: #define IPW_MEM_EEPROM_CTL     0x00300040
                    260:
                    261: #define IPW_EEPROM_MAC 0x21
                    262:
                    263: #define IPW_EEPROM_DELAY       1       /* minimum hold time (microsecond) */
                    264:
                    265: #define IPW_EEPROM_C   (1 << 0)        /* Serial Clock */
                    266: #define IPW_EEPROM_S   (1 << 1)        /* Chip Select */
                    267: #define IPW_EEPROM_D   (1 << 2)        /* Serial data input */
                    268: #define IPW_EEPROM_Q   (1 << 4)        /* Serial data output */
                    269:
                    270: #define IPW_EEPROM_SHIFT_D     2
                    271: #define IPW_EEPROM_SHIFT_Q     4
                    272:
                    273: /*
                    274:  * control and status registers access macros
                    275:  */
                    276: #define CSR_READ_1(sc, reg)                                            \
                    277:        bus_space_read_1((sc)->sc_st, (sc)->sc_sh, (reg))
                    278:
                    279: #define CSR_READ_2(sc, reg)                                            \
                    280:        bus_space_read_2((sc)->sc_st, (sc)->sc_sh, (reg))
                    281:
                    282: #define CSR_READ_4(sc, reg)                                            \
                    283:        bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg))
                    284:
                    285: #define CSR_WRITE_1(sc, reg, val)                                      \
                    286:        bus_space_write_1((sc)->sc_st, (sc)->sc_sh, (reg), (val))
                    287:
                    288: #define CSR_WRITE_2(sc, reg, val)                                      \
                    289:        bus_space_write_2((sc)->sc_st, (sc)->sc_sh, (reg), (val))
                    290:
                    291: #define CSR_WRITE_4(sc, reg, val)                                      \
                    292:        bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
                    293:
                    294: #define CSR_WRITE_MULTI_1(sc, reg, buf, len)                           \
                    295:        bus_space_write_multi_1((sc)->sc_st, (sc)->sc_sh, (reg),        \
                    296:            (buf), (len))
                    297:
                    298: /*
                    299:  * indirect memory space access macros
                    300:  */
                    301: #define MEM_WRITE_1(sc, addr, val) do {                                        \
                    302:        CSR_WRITE_4((sc), IPW_CSR_INDIRECT_ADDR, (addr));               \
                    303:        CSR_WRITE_1((sc), IPW_CSR_INDIRECT_DATA, (val));                \
                    304: } while (/* CONSTCOND */0)
                    305:
                    306: #define MEM_WRITE_2(sc, addr, val) do {                                        \
                    307:        CSR_WRITE_4((sc), IPW_CSR_INDIRECT_ADDR, (addr));               \
                    308:        CSR_WRITE_2((sc), IPW_CSR_INDIRECT_DATA, (val));                \
                    309: } while (/* CONSTCOND */0)
                    310:
                    311: #define MEM_WRITE_4(sc, addr, val) do {                                        \
                    312:        CSR_WRITE_4((sc), IPW_CSR_INDIRECT_ADDR, (addr));               \
                    313:        CSR_WRITE_4((sc), IPW_CSR_INDIRECT_DATA, (val));                \
                    314: } while (/* CONSTCOND */0)
                    315:
                    316: #define MEM_WRITE_MULTI_1(sc, addr, buf, len) do {                     \
                    317:        CSR_WRITE_4((sc), IPW_CSR_INDIRECT_ADDR, (addr));               \
                    318:        CSR_WRITE_MULTI_1((sc), IPW_CSR_INDIRECT_DATA, (buf), (len));   \
                    319: } while (/* CONSTCOND */0)
                    320:
                    321: /*
                    322:  * EEPROM access macro
                    323:  */
                    324: #define IPW_EEPROM_CTL(sc, val) do {                                   \
                    325:        MEM_WRITE_4((sc), IPW_MEM_EEPROM_CTL, (val));                   \
                    326:        DELAY(IPW_EEPROM_DELAY);                                        \
                    327: } while (0)
                    328:

CVSweb