linux/drivers/staging/csr/unifiio.h
<<
>>
Prefs
   1/*
   2 * ---------------------------------------------------------------------------
   3 *
   4 *  FILE: unifiio.h
   5 *
   6 *      Public definitions for the UniFi linux driver.
   7 *      This is mostly ioctl command values and structs.
   8 *
   9 *      Include <sys/ioctl.h> or similar before this file
  10 *
  11 * Copyright (C) 2005-2009 by Cambridge Silicon Radio Ltd.
  12 *
  13 * Refer to LICENSE.txt included with this source code for details on
  14 * the license terms.
  15 *
  16 * ---------------------------------------------------------------------------
  17 */
  18#ifndef __UNIFIIO_H__
  19#define __UNIFIIO_H__
  20
  21#include <linux/types.h>
  22
  23#define UNIFI_GET_UDI_ENABLE    _IOR('u',  1, int)
  24#define UNIFI_SET_UDI_ENABLE    _IOW('u',  2, int)
  25/* Values for UDI_ENABLE */
  26#define UDI_ENABLE_DATA         0x1
  27#define UDI_ENABLE_CONTROL      0x2
  28
  29/* MIB set/get. Arg is a pointer to a varbind */
  30#define UNIFI_GET_MIB           _IOWR('u',  3, unsigned char *)
  31#define UNIFI_SET_MIB           _IOW ('u',  4, unsigned char *)
  32#define MAX_VARBIND_LENGTH 127
  33
  34/* Private IOCTLs */
  35#define SIOCIWS80211POWERSAVEPRIV           SIOCIWFIRSTPRIV
  36#define SIOCIWG80211POWERSAVEPRIV           SIOCIWFIRSTPRIV + 1
  37#define SIOCIWS80211RELOADDEFAULTSPRIV      SIOCIWFIRSTPRIV + 2
  38#define SIOCIWSCONFWAPIPRIV                 SIOCIWFIRSTPRIV + 4
  39#define SIOCIWSWAPIKEYPRIV                  SIOCIWFIRSTPRIV + 6
  40#define SIOCIWSSMEDEBUGPRIV                 SIOCIWFIRSTPRIV + 8
  41#define SIOCIWSAPCFGPRIV                    SIOCIWFIRSTPRIV + 10
  42#define SIOCIWSAPSTARTPRIV                  SIOCIWFIRSTPRIV + 12
  43#define SIOCIWSAPSTOPPRIV                   SIOCIWFIRSTPRIV + 14
  44#define SIOCIWSFWRELOADPRIV                 SIOCIWFIRSTPRIV + 16
  45#define SIOCIWSSTACKSTART                   SIOCIWFIRSTPRIV + 18
  46#define SIOCIWSSTACKSTOP                    SIOCIWFIRSTPRIV + 20
  47
  48
  49
  50#define IWPRIV_POWER_SAVE_MAX_STRING 32
  51#define IWPRIV_SME_DEBUG_MAX_STRING 32
  52#define IWPRIV_SME_MAX_STRING 120
  53
  54
  55/* Private configuration commands */
  56#define UNIFI_CFG               _IOWR('u',  5, unsigned char *)
  57/*
  58 * <------------------  Read/Write Buffer  -------------------->
  59 * _____________________________________________________________
  60 * |    Cmd    |    Arg    |   ...  Buffer (opt)  ...          |
  61 * -------------------------------------------------------------
  62 * <-- uint --><-- uint --><-----  unsigned char buffer  ------>
  63 *
  64 * Cmd:    A unifi_cfg_command_t command.
  65 * Arg:    Out:Length     if Cmd==UNIFI_CFG_GET
  66 *         In:PowerOnOff  if Cmd==UNIFI_CFG_POWER
  67 *         In:PowerMode   if Cmd==UNIFI_CFG_POWERSAVE
  68 *         In:Length      if Cmd==UNIFI_CFG_FILTER
  69 *         In:WMM Qos Info if Cmd==UNIFI_CFG_WMM_QOS_INFO
  70 * Buffer: Out:Data       if Cmd==UNIFI_CFG_GET
  71 *         NULL           if Cmd==UNIFI_CFG_POWER
  72 *         NULL           if Cmd==UNIFI_CFG_POWERSAVE
  73 *         In:Filters     if Cmd==UNIFI_CFG_FILTER
  74 *
  75 * where Filters is a uf_cfg_bcast_packet_filter_t structure
  76 * followed by 0 - n tclas_t structures. The length of the tclas_t
  77 * structures is obtained by uf_cfg_bcast_packet_filter_t::tclas_ies_length.
  78 */
  79
  80
  81#define UNIFI_PUTEST            _IOWR('u',  6, unsigned char *)
  82/*
  83 * <------------------  Read/Write Buffer  -------------------->
  84 * _____________________________________________________________
  85 * |    Cmd    |    Arg    |   ...  Buffer (opt)  ...          |
  86 * -------------------------------------------------------------
  87 * <-- uint --><-- uint --><-----  unsigned char buffer  ------>
  88 *
  89 * Cmd:    A unifi_putest_command_t command.
  90 * Arg:    N/A                           if Cmd==UNIFI_PUTEST_START
  91 *         N/A                           if Cmd==UNIFI_PUTEST_STOP
  92 *         In:int (Clock Speed)          if Cmd==UNIFI_PUTEST_SET_SDIO_CLOCK
  93 *         In/Out:sizeof(unifi_putest_cmd52) if Cmd==UNIFI_PUTEST_CMD52_READ
  94 *         In:sizeof(unifi_putest_cmd52) if Cmd==UNIFI_PUTEST_CMD52_WRITE
  95 *         In:uint (f/w file name length) if Cmd==UNIFI_PUTEST_DL_FW
  96 * Buffer: NULL                          if Cmd==UNIFI_PUTEST_START
  97 *         NULL                          if Cmd==UNIFI_PUTEST_STOP
  98 *         NULL                          if Cmd==UNIFI_PUTEST_SET_SDIO_CLOCK
  99 *         In/Out:unifi_putest_cmd52     if Cmd==UNIFI_PUTEST_CMD52_READ
 100 *         In:unifi_putest_cmd52         if Cmd==UNIFI_PUTEST_CMD52_WRITE
 101 *         In:f/w file name              if Cmd==UNIFI_PUTEST_DL_FW
 102 */
 103
 104#define UNIFI_BUILD_TYPE _IOWR('u', 7, unsigned char)
 105#define UNIFI_BUILD_NME 1
 106#define UNIFI_BUILD_WEXT 2
 107#define UNIFI_BUILD_AP 3
 108
 109/* debugging */
 110#define UNIFI_KICK              _IO ('u',  0x10)
 111#define UNIFI_SET_DEBUG         _IO ('u',  0x11)
 112#define UNIFI_SET_TRACE         _IO ('u',  0x12)
 113
 114#define UNIFI_GET_INIT_STATUS   _IOR ('u', 0x15, int)
 115#define UNIFI_SET_UDI_LOG_MASK  _IOR('u',  0x18, unifiio_filter_t)
 116#define UNIFI_SET_UDI_SNAP_MASK _IOW('u',  0x1a, unifiio_snap_filter_t)
 117#define UNIFI_SET_AMP_ENABLE    _IOWR('u',  0x1b, int)
 118
 119#define UNIFI_INIT_HW           _IOR ('u', 0x13, unsigned char)
 120#define UNIFI_INIT_NETDEV       _IOW ('u', 0x14, unsigned char[6])
 121#define UNIFI_SME_PRESENT       _IOW ('u', 0x19, int)
 122
 123#define UNIFI_CFG_PERIOD_TRAFFIC _IOW ('u', 0x21, unsigned char *)
 124#define UNIFI_CFG_UAPSD_TRAFFIC _IOW ('u', 0x22, unsigned char)
 125
 126#define UNIFI_COREDUMP_GET_REG  _IOWR('u', 0x23, unifiio_coredump_req_t)
 127
 128
 129/*
 130 * Following reset, f/w may only be downloaded using CMD52.
 131 * This is slow, so there is a facility to download a secondary
 132 * loader first which supports CMD53.
 133 * If loader_len is > 0, then loader_data is assumed to point to
 134 * a suitable secondary loader that can be used to download the
 135 * main image.
 136 *
 137 * The driver will run the host protocol initialisation sequence
 138 * after downloading the image.
 139 *
 140 * If both lengths are zero, then the f/w is assumed to have been
 141 * booted from Flash and the host protocol initialisation sequence
 142 * is run.
 143 */
 144typedef struct {
 145
 146    /* Number of bytes in the image */
 147    int img_len;
 148
 149    /* Pointer to image data. */
 150    unsigned char *img_data;
 151
 152
 153    /* Number of bytes in the loader image */
 154    int loader_len;
 155
 156    /* Pointer to loader image data. */
 157    unsigned char *loader_data;
 158
 159} unifiio_img_t;
 160
 161
 162/* Structure of data read from the unifi device. */
 163typedef struct
 164{
 165    /* Length (in bytes) of entire structure including appended bulk data */
 166    int length;
 167
 168    /* System time (in milliseconds) that signal was transferred */
 169    int timestamp;
 170
 171    /* Direction in which signal was transferred. */
 172    int direction;
 173#define UDI_FROM_HOST   0
 174#define UDI_TO_HOST     1
 175#define UDI_CONFIG_IND  2
 176
 177    /* The length of the signal (in bytes) not including bulk data */
 178    int signal_length;
 179
 180    /* Signal body follows, then any bulk data */
 181
 182} udi_msg_t;
 183
 184
 185typedef enum
 186{
 187    UfSigFil_AllOn = 0,         /* Log all signal IDs */
 188    UfSigFil_AllOff = 1,        /* Don't log any signal IDs */
 189    UfSigFil_SelectOn = 2,      /* Log these signal IDs */
 190    UfSigFil_SelectOff = 3      /* Don't log these signal IDs */
 191} uf_sigfilter_action_t;
 192
 193typedef struct {
 194
 195    /* Number of 16-bit ints in the sig_ids array */
 196    int num_sig_ids;
 197    /* The action to perform */
 198    uf_sigfilter_action_t action;
 199    /* List of signal IDs to pass or block */
 200    unsigned short *sig_ids;
 201
 202} unifiio_filter_t;
 203
 204
 205typedef struct {
 206    /* Number of 16-bit ints in the protocols array */
 207    u16 count;
 208    /* List of protocol ids to pass */
 209    u16 *protocols;
 210} unifiio_snap_filter_t;
 211
 212
 213
 214typedef u8 unifi_putest_command_t;
 215
 216#define UNIFI_PUTEST_START 0
 217#define UNIFI_PUTEST_STOP 1
 218#define UNIFI_PUTEST_SET_SDIO_CLOCK 2
 219#define UNIFI_PUTEST_CMD52_READ 3
 220#define UNIFI_PUTEST_CMD52_WRITE 4
 221#define UNIFI_PUTEST_DL_FW 5
 222#define UNIFI_PUTEST_DL_FW_BUFF 6
 223#define UNIFI_PUTEST_CMD52_BLOCK_READ 7
 224#define UNIFI_PUTEST_COREDUMP_PREPARE 8
 225#define UNIFI_PUTEST_GP_READ16 9
 226#define UNIFI_PUTEST_GP_WRITE16 10
 227
 228
 229struct unifi_putest_cmd52 {
 230    int funcnum;
 231    unsigned long addr;
 232    unsigned char data;
 233};
 234
 235
 236struct unifi_putest_block_cmd52_r {
 237    int           funcnum;
 238    unsigned long addr;
 239    unsigned int  length;
 240    unsigned char *data;
 241};
 242
 243struct unifi_putest_gp_rw16 {
 244    unsigned long addr;        /* generic address */
 245    unsigned short data;
 246};
 247
 248typedef enum unifi_cfg_command {
 249    UNIFI_CFG_GET,
 250    UNIFI_CFG_POWER,
 251    UNIFI_CFG_POWERSAVE,
 252    UNIFI_CFG_FILTER,
 253    UNIFI_CFG_POWERSUPPLY,
 254    UNIFI_CFG_WMM_QOSINFO,
 255    UNIFI_CFG_WMM_ADDTS,
 256    UNIFI_CFG_WMM_DELTS,
 257    UNIFI_CFG_STRICT_DRAFT_N,
 258    UNIFI_CFG_ENABLE_OKC,
 259    UNIFI_CFG_SET_AP_CONFIG,
 260    UNIFI_CFG_CORE_DUMP /* request to take a fw core dump */
 261} unifi_cfg_command_t;
 262
 263typedef enum unifi_cfg_power {
 264    UNIFI_CFG_POWER_UNSPECIFIED,
 265    UNIFI_CFG_POWER_OFF,
 266    UNIFI_CFG_POWER_ON
 267} unifi_cfg_power_t;
 268
 269typedef enum unifi_cfg_powersupply {
 270    UNIFI_CFG_POWERSUPPLY_UNSPECIFIED,
 271    UNIFI_CFG_POWERSUPPLY_MAINS,
 272    UNIFI_CFG_POWERSUPPLY_BATTERIES
 273} unifi_cfg_powersupply_t;
 274
 275typedef enum unifi_cfg_powersave {
 276    UNIFI_CFG_POWERSAVE_UNSPECIFIED,
 277    UNIFI_CFG_POWERSAVE_NONE,
 278    UNIFI_CFG_POWERSAVE_FAST,
 279    UNIFI_CFG_POWERSAVE_FULL,
 280    UNIFI_CFG_POWERSAVE_AUTO
 281} unifi_cfg_powersave_t;
 282
 283typedef enum unifi_cfg_get {
 284    UNIFI_CFG_GET_COEX,
 285    UNIFI_CFG_GET_POWER_MODE,
 286    UNIFI_CFG_GET_VERSIONS,
 287    UNIFI_CFG_GET_POWER_SUPPLY,
 288    UNIFI_CFG_GET_INSTANCE,
 289    UNIFI_CFG_GET_AP_CONFIG
 290} unifi_cfg_get_t;
 291
 292#define UNIFI_CFG_FILTER_NONE            0x0000
 293#define UNIFI_CFG_FILTER_DHCP            0x0001
 294#define UNIFI_CFG_FILTER_ARP             0x0002
 295#define UNIFI_CFG_FILTER_NBNS            0x0004
 296#define UNIFI_CFG_FILTER_NBDS            0x0008
 297#define UNIFI_CFG_FILTER_CUPS            0x0010
 298#define UNIFI_CFG_FILTER_ALL             0xFFFF
 299
 300
 301typedef struct uf_cfg_bcast_packet_filter
 302{
 303    unsigned long filter_mode;     //as defined by HIP protocol
 304    unsigned char arp_filter;
 305    unsigned char dhcp_filter;
 306    unsigned long tclas_ies_length; // length of tclas_ies in bytes
 307    unsigned char tclas_ies[1];    // variable length depending on above field
 308} uf_cfg_bcast_packet_filter_t;
 309
 310typedef struct uf_cfg_ap_config
 311{
 312    u8    phySupportedBitmap;
 313    u8    channel;
 314    u16   beaconInterval;
 315    u8    dtimPeriod;
 316    u8     wmmEnabled;
 317    u8    shortSlotTimeEnabled;
 318    u16   groupkeyTimeout;
 319    u8     strictGtkRekeyEnabled;
 320    u16   gmkTimeout;
 321    u16   responseTimeout;
 322    u8    retransLimit;
 323    u8    rxStbc;
 324    u8     rifsModeAllowed;
 325    u8    dualCtsProtection;
 326    u8    ctsProtectionType;
 327    u16   maxListenInterval;
 328}uf_cfg_ap_config_t;
 329
 330typedef struct tcpic_clsfr
 331{
 332    __u8 cls_fr_type;
 333    __u8 cls_fr_mask;
 334    __u8 version;
 335    __u8 source_ip_addr[4];
 336    __u8 dest_ip_addr[4];
 337    __u16 source_port;
 338    __u16 dest_port;
 339    __u8 dscp;
 340    __u8 protocol;
 341    __u8 reserved;
 342} __attribute__ ((packed)) tcpip_clsfr_t;
 343
 344typedef struct tclas {
 345    __u8 element_id;
 346    __u8 length;
 347    __u8 user_priority;
 348    tcpip_clsfr_t tcp_ip_cls_fr;
 349} __attribute__ ((packed)) tclas_t;
 350
 351
 352#define CONFIG_IND_ERROR            0x01
 353#define CONFIG_IND_EXIT             0x02
 354#define CONFIG_SME_NOT_PRESENT      0x10
 355#define CONFIG_SME_PRESENT          0x20
 356
 357/* WAPI Key */
 358typedef struct
 359{
 360    u8                          unicastKey;
 361    /* If non zero, then unicast key otherwise group key */
 362    u8                          keyIndex;
 363    u8                          keyRsc[16];
 364    u8                          authenticator;
 365    /* If non zero, then authenticator otherwise supplicant */
 366    u8                          address[6];
 367    u8                          key[32];
 368} unifiio_wapi_key_t;
 369
 370/* Values describing XAP memory regions captured by the mini-coredump system */
 371typedef enum unifiio_coredump_space {
 372    UNIFIIO_COREDUMP_MAC_REG,
 373    UNIFIIO_COREDUMP_PHY_REG,
 374    UNIFIIO_COREDUMP_SH_DMEM,
 375    UNIFIIO_COREDUMP_MAC_DMEM,
 376    UNIFIIO_COREDUMP_PHY_DMEM,
 377    UNIFIIO_COREDUMP_TRIGGER_MAGIC = 0xFEED
 378} unifiio_coredump_space_t;
 379
 380/* Userspace tool uses this structure to retrieve a register value from a
 381 * mini-coredump buffer previously saved by the HIP
 382 */
 383typedef struct unifiio_coredump_req {
 384    /* From user */
 385    int index;                      /* 0=newest, -1=oldest */
 386    unsigned int offset;            /* register offset in space */
 387    unifiio_coredump_space_t space; /* memory space */
 388    /* Filled by driver */
 389    unsigned int drv_build;         /* driver build id */
 390    unsigned int chip_ver;          /* chip version */
 391    unsigned int fw_ver;            /* firmware version */
 392    int requestor;                  /* requestor: 0=auto dump, 1=manual */
 393    unsigned int timestamp;         /* time of capture by driver */
 394    unsigned int serial;            /* capture serial number */
 395    int value;                      /* 16 bit register value, -ve for error */
 396} unifiio_coredump_req_t;           /* Core-dumped register value request */
 397
 398#endif /* __UNIFIIO_H__ */
 399