hostcmd.h 13.7 KB
Newer Older
1 2 3 4
/*
 * This file contains the function prototypes, data structure
 * and defines for all the host/station commands
 */
5 6
#ifndef _LBS_HOSTCMD_H
#define _LBS_HOSTCMD_H
7 8 9 10 11 12 13 14 15 16

#include <linux/wireless.h>
#include "11d.h"
#include "types.h"

/* 802.11-related definitions */

/* TxPD descriptor */
struct txpd {
	/* Current Tx packet status */
17
	__le32 tx_status;
18
	/* Tx control */
19 20
	__le32 tx_control;
	__le32 tx_packet_location;
21
	/* Tx packet length */
22
	__le16 tx_packet_length;
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
	/* First 2 byte of destination MAC address */
	u8 tx_dest_addr_high[2];
	/* Last 4 byte of destination MAC address */
	u8 tx_dest_addr_low[4];
	/* Pkt Priority */
	u8 priority;
	/* Pkt Trasnit Power control */
	u8 powermgmt;
	/* Amount of time the packet has been queued in the driver (units = 2ms) */
	u8 pktdelay_2ms;
	/* reserved */
	u8 reserved1;
};

/* RxPD Descriptor */
struct rxpd {
	/* Current Rx packet status */
40
	__le16 status;
41 42 43 44 45 46 47 48

	/* SNR */
	u8 snr;

	/* Tx control */
	u8 rx_control;

	/* Pkt length */
49
	__le16 pkt_len;
50 51 52 53 54 55 56 57

	/* Noise Floor */
	u8 nf;

	/* Rx Packet Rate */
	u8 rx_rate;

	/* Pkt addr */
58
	__le32 pkt_ptr;
59 60

	/* Next Rx RxPD addr */
61
	__le32 next_rxpd_ptr;
62 63 64 65 66 67

	/* Pkt Priority */
	u8 priority;
	u8 reserved[3];
};

68 69 70 71 72 73 74
struct cmd_header {
	__le16 command;
	__le16 size;
	__le16 seqnum;
	__le16 result;
} __attribute__ ((packed));

75 76
struct cmd_ctrl_node {
	struct list_head list;
77
	/* command response */
78
	int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *);
79
	unsigned long callback_arg;
80
	/* command data */
81
	struct cmd_header *cmdbuf;
82 83 84 85 86
	/* wait queue */
	u16 cmdwaitqwoken;
	wait_queue_head_t cmdwait_q;
};

87 88 89
/* Generic structure to hold all key types. */
struct enc_key {
	u16 len;
90 91
	u16 flags;  /* KEY_INFO_* from defs.h */
	u16 type; /* KEY_TYPE_* from defs.h */
92
	u8 key[32];
93 94
};

95 96
/* lbs_offset_value */
struct lbs_offset_value {
97 98 99 100 101 102 103
	u32 offset;
	u32 value;
};

/* Define general data structure */
/* cmd_DS_GEN */
struct cmd_ds_gen {
104 105 106 107
	__le16 command;
	__le16 size;
	__le16 seqnum;
	__le16 result;
108
	void *cmdresp[0];
109 110 111
};

#define S_DS_GEN sizeof(struct cmd_ds_gen)
112 113


114
/*
115
 * Define data structure for CMD_GET_HW_SPEC
116 117 118
 * This structure defines the response for the GET_HW_SPEC command
 */
struct cmd_ds_get_hw_spec {
119 120
	struct cmd_header hdr;

121
	/* HW Interface version number */
122
	__le16 hwifversion;
123
	/* HW version number */
124
	__le16 version;
125
	/* Max number of TxPD FW can handle */
126
	__le16 nr_txpd;
127
	/* Max no of Multicast address */
128
	__le16 nr_mcast_adr;
129 130 131 132
	/* MAC address */
	u8 permanentaddr[6];

	/* region Code */
133
	__le16 regioncode;
134 135

	/* Number of antenna used */
136
	__le16 nr_antenna;
137

138 139
	/* FW release number, example 1,2,3,4 = 3.2.1p4 */
	u8 fwreleasenumber[4];
140 141

	/* Base Address of TxPD queue */
142
	__le32 wcb_base;
143
	/* Read Pointer of RxPd queue */
144
	__le32 rxpd_rdptr;
145 146

	/* Write Pointer of RxPd queue */
147
	__le32 rxpd_wrptr;
148 149

	/*FW/HW capability */
150
	__le32 fwcapinfo;
151 152 153
} __attribute__ ((packed));

struct cmd_ds_802_11_reset {
154
	__le16 action;
155 156 157
};

struct cmd_ds_802_11_subscribe_event {
158 159
	__le16 action;
	__le16 events;
160 161 162 163 164 165 166

	/* A TLV to the CMD_802_11_SUBSCRIBE_EVENT command can contain a
	 * number of TLVs. From the v5.1 manual, those TLVs would add up to
	 * 40 bytes. However, future firmware might add additional TLVs, so I
	 * bump this up a bit.
	 */
	u8 tlv[128];
167 168 169 170
};

/*
 * This scan handle Country Information IE(802.11d compliant)
171
 * Define data structure for CMD_802_11_SCAN
172 173 174
 */
struct cmd_ds_802_11_scan {
	u8 bsstype;
175
	u8 bssid[ETH_ALEN];
176 177 178 179 180 181 182 183 184
	u8 tlvbuffer[1];
#if 0
	mrvlietypes_ssidparamset_t ssidParamSet;
	mrvlietypes_chanlistparamset_t ChanListParamSet;
	mrvlietypes_ratesparamset_t OpRateSet;
#endif
};

struct cmd_ds_802_11_scan_rsp {
185
	__le16 bssdescriptsize;
186 187 188 189 190
	u8 nr_sets;
	u8 bssdesc_and_tlvbuffer[1];
};

struct cmd_ds_802_11_get_log {
191 192 193 194 195 196 197 198 199 200 201 202 203
	__le32 mcasttxframe;
	__le32 failed;
	__le32 retry;
	__le32 multiretry;
	__le32 framedup;
	__le32 rtssuccess;
	__le32 rtsfailure;
	__le32 ackfailure;
	__le32 rxfrag;
	__le32 mcastrxframe;
	__le32 fcserror;
	__le32 txframe;
	__le32 wepundecryptable;
204 205 206
};

struct cmd_ds_mac_control {
207 208
	__le16 action;
	__le16 reserved;
209 210 211
};

struct cmd_ds_mac_multicast_adr {
212 213
	__le16 action;
	__le16 nr_of_adrs;
214 215 216 217 218 219 220 221 222 223 224
	u8 maclist[ETH_ALEN * MRVDRV_MAX_MULTICAST_LIST_SIZE];
};

struct cmd_ds_802_11_authenticate {
	u8 macaddr[ETH_ALEN];
	u8 authtype;
	u8 reserved[10];
};

struct cmd_ds_802_11_deauthenticate {
	u8 macaddr[6];
225
	__le16 reasoncode;
226 227 228 229
};

struct cmd_ds_802_11_associate {
	u8 peerstaaddr[6];
230
	__le16 capability;
231 232
	__le16 listeninterval;
	__le16 bcnperiod;
233 234 235 236 237 238 239 240 241 242 243 244
	u8 dtimperiod;

#if 0
	mrvlietypes_ssidparamset_t ssidParamSet;
	mrvlietypes_phyparamset_t phyparamset;
	mrvlietypes_ssparamset_t ssparamset;
	mrvlietypes_ratesparamset_t ratesParamSet;
#endif
} __attribute__ ((packed));

struct cmd_ds_802_11_disassociate {
	u8 destmacaddr[6];
245
	__le16 reasoncode;
246 247 248 249 250 251 252
};

struct cmd_ds_802_11_associate_rsp {
	struct ieeetypes_assocrsp assocRsp;
};

struct cmd_ds_802_11_ad_hoc_result {
253 254
	u8 pad[3];
	u8 bssid[ETH_ALEN];
255 256 257 258
};

struct cmd_ds_802_11_set_wep {
	/* ACT_ADD, ACT_REMOVE or ACT_ENABLE */
259
	__le16 action;
260 261

	/* key Index selected for Tx */
262
	__le16 keyindex;
263 264 265 266 267 268 269

	/* 40, 128bit or TXWEP */
	u8 keytype[4];
	u8 keymaterial[4][16];
};

struct cmd_ds_802_3_get_stat {
270 271 272 273 274 275
	__le32 xmitok;
	__le32 rcvok;
	__le32 xmiterror;
	__le32 rcverror;
	__le32 rcvnobuffer;
	__le32 rcvcrcerror;
276 277 278
};

struct cmd_ds_802_11_get_stat {
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
	__le32 txfragmentcnt;
	__le32 mcasttxframecnt;
	__le32 failedcnt;
	__le32 retrycnt;
	__le32 Multipleretrycnt;
	__le32 rtssuccesscnt;
	__le32 rtsfailurecnt;
	__le32 ackfailurecnt;
	__le32 frameduplicatecnt;
	__le32 rxfragmentcnt;
	__le32 mcastrxframecnt;
	__le32 fcserrorcnt;
	__le32 bcasttxframecnt;
	__le32 bcastrxframecnt;
	__le32 txbeacon;
	__le32 rxbeacon;
	__le32 wepundecryptable;
296 297 298
};

struct cmd_ds_802_11_snmp_mib {
299 300 301
	__le16 querytype;
	__le16 oid;
	__le16 bufsize;
302 303 304 305
	u8 value[128];
};

struct cmd_ds_mac_reg_map {
306
	__le16 buffersize;
307
	u8 regmap[128];
308
	__le16 reserved;
309 310 311
};

struct cmd_ds_bbp_reg_map {
312
	__le16 buffersize;
313
	u8 regmap[128];
314
	__le16 reserved;
315 316 317
};

struct cmd_ds_rf_reg_map {
318
	__le16 buffersize;
319
	u8 regmap[64];
320
	__le16 reserved;
321 322 323
};

struct cmd_ds_mac_reg_access {
324 325 326
	__le16 action;
	__le16 offset;
	__le32 value;
327 328 329
};

struct cmd_ds_bbp_reg_access {
330 331
	__le16 action;
	__le16 offset;
332 333 334 335 336
	u8 value;
	u8 reserved[3];
};

struct cmd_ds_rf_reg_access {
337 338
	__le16 action;
	__le16 offset;
339 340 341 342 343
	u8 value;
	u8 reserved[3];
};

struct cmd_ds_802_11_radio_control {
344 345
	__le16 action;
	__le16 control;
346 347
};

348 349 350 351 352 353
struct cmd_ds_802_11_beacon_control {
	__le16 action;
	__le16 beacon_enable;
	__le16 beacon_period;
};

354 355
struct cmd_ds_802_11_sleep_params {
	/* ACT_GET/ACT_SET */
356
	__le16 action;
357 358

	/* Sleep clock error in ppm */
359
	__le16 error;
360 361

	/* Wakeup offset in usec */
362
	__le16 offset;
363 364

	/* Clock stabilization time in usec */
365
	__le16 stabletime;
366 367 368 369 370 371 372 373

	/* control periodic calibration */
	u8 calcontrol;

	/* control the use of external sleep clock */
	u8 externalsleepclk;

	/* reserved field, should be set to zero */
374
	__le16 reserved;
375 376 377 378
};

struct cmd_ds_802_11_inactivity_timeout {
	/* ACT_GET/ACT_SET */
379
	__le16 action;
380 381

	/* Inactivity timeout in msec */
382
	__le16 timeout;
383 384 385
};

struct cmd_ds_802_11_rf_channel {
386 387
	struct cmd_header hdr;

388
	__le16 action;
389 390 391 392
	__le16 channel;
	__le16 rftype;      /* unused */
	__le16 reserved;    /* unused */
	u8 channellist[32]; /* unused */
393 394 395 396
};

struct cmd_ds_802_11_rssi {
	/* weighting factor */
397
	__le16 N;
398

399 400 401
	__le16 reserved_0;
	__le16 reserved_1;
	__le16 reserved_2;
402 403 404
};

struct cmd_ds_802_11_rssi_rsp {
405 406 407 408
	__le16 SNR;
	__le16 noisefloor;
	__le16 avgSNR;
	__le16 avgnoisefloor;
409 410 411
};

struct cmd_ds_802_11_mac_address {
412
	__le16 action;
413 414 415 416
	u8 macadd[ETH_ALEN];
};

struct cmd_ds_802_11_rf_tx_power {
417 418
	__le16 action;
	__le16 currentlevel;
419 420 421
};

struct cmd_ds_802_11_rf_antenna {
422
	__le16 action;
423 424

	/* Number of antennas or 0xffff(diversity) */
425
	__le16 antennamode;
426 427 428

};

429
struct cmd_ds_802_11_monitor_mode {
H
Holger Schurig 已提交
430 431
	__le16 action;
	__le16 mode;
432 433
};

434
struct cmd_ds_set_boot2_ver {
435 436
	struct cmd_header hdr;

H
Holger Schurig 已提交
437 438
	__le16 action;
	__le16 version;
439 440
};

441
struct cmd_ds_802_11_ps_mode {
442 443 444 445 446
	__le16 action;
	__le16 nullpktinterval;
	__le16 multipledtim;
	__le16 reserved;
	__le16 locallisteninterval;
447 448 449
};

struct PS_CMD_ConfirmSleep {
450 451 452 453
	__le16 command;
	__le16 size;
	__le16 seqnum;
	__le16 result;
454

455 456 457 458 459
	__le16 action;
	__le16 reserved1;
	__le16 multipledtim;
	__le16 reserved;
	__le16 locallisteninterval;
460 461 462
};

struct cmd_ds_802_11_data_rate {
463 464
	struct cmd_header hdr;

465
	__le16 action;
466 467
	__le16 reserved;
	u8 rates[MAX_RATES];
468 469 470
};

struct cmd_ds_802_11_rate_adapt_rateset {
471 472 473
	__le16 action;
	__le16 enablehwauto;
	__le16 bitmap;
474 475 476
};

struct cmd_ds_802_11_ad_hoc_start {
477
	u8 ssid[IW_ESSID_MAX_SIZE];
478
	u8 bsstype;
479
	__le16 beaconperiod;
480 481 482
	u8 dtimperiod;
	union IEEEtypes_ssparamset ssparamset;
	union ieeetypes_phyparamset phyparamset;
483
	__le16 probedelay;
484
	__le16 capability;
485
	u8 rates[MAX_RATES];
486 487 488 489
	u8 tlv_memory_size_pad[100];
} __attribute__ ((packed));

struct adhoc_bssdesc {
490 491 492
	u8 bssid[6];
	u8 ssid[32];
	u8 type;
493
	__le16 beaconperiod;
494
	u8 dtimperiod;
495 496
	__le64 timestamp;
	__le64 localtime;
497 498
	union ieeetypes_phyparamset phyparamset;
	union IEEEtypes_ssparamset ssparamset;
499
	__le16 capability;
500
	u8 rates[MAX_RATES];
501 502 503 504 505 506 507 508

	/* DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used below in the
	 * Adhoc join command and will cause a binary layout mismatch with
	 * the firmware
	 */
} __attribute__ ((packed));

struct cmd_ds_802_11_ad_hoc_join {
509
	struct adhoc_bssdesc bss;
510 511
	__le16 failtimeout;
	__le16 probedelay;
512 513 514 515

} __attribute__ ((packed));

struct cmd_ds_802_11_enable_rsn {
516 517
	__le16 action;
	__le16 enable;
518
} __attribute__ ((packed));
519 520 521

struct MrvlIEtype_keyParamSet {
	/* type ID */
522
	__le16 type;
523 524

	/* length of Payload */
525
	__le16 length;
526 527

	/* type of key: WEP=0, TKIP=1, AES=2 */
528
	__le16 keytypeid;
529 530

	/* key control Info specific to a keytypeid */
531
	__le16 keyinfo;
532 533

	/* length of key */
534
	__le16 keylen;
535 536 537 538 539

	/* key material of size keylen */
	u8 key[32];
};

540 541 542 543 544 545 546
struct cmd_ds_host_sleep {
	struct cmd_header hdr;
	__le32 criteria;
	uint8_t gpio;
	uint8_t gap;
} __attribute__ ((packed));

547
struct cmd_ds_802_11_key_material {
548
	__le16 action;
549 550 551 552
	struct MrvlIEtype_keyParamSet keyParamSet[2];
} __attribute__ ((packed));

struct cmd_ds_802_11_eeprom_access {
553
	__le16 action;
554 555

	/* multiple 4 */
556 557
	__le16 offset;
	__le16 bytecount;
558 559 560 561
	u8 value;
} __attribute__ ((packed));

struct cmd_ds_802_11_tpc_cfg {
562
	__le16 action;
563 564 565 566 567 568 569 570
	u8 enable;
	s8 P0;
	s8 P1;
	s8 P2;
	u8 usesnr;
} __attribute__ ((packed));

struct cmd_ds_802_11_led_ctrl {
571 572
	__le16 action;
	__le16 numled;
573 574 575 576
	u8 data[256];
} __attribute__ ((packed));

struct cmd_ds_802_11_pwr_cfg {
577
	__le16 action;
578 579 580 581 582 583 584
	u8 enable;
	s8 PA_P0;
	s8 PA_P1;
	s8 PA_P2;
} __attribute__ ((packed));

struct cmd_ds_802_11_afc {
585
	__le16 afc_auto;
586 587
	union {
		struct {
588 589
			__le16 threshold;
			__le16 period;
590 591
		};
		struct {
592 593
			__le16 timing_offset; /* signed */
			__le16 carrier_offset; /* signed */
594 595 596 597 598
		};
	};
} __attribute__ ((packed));

struct cmd_tx_rate_query {
599
	__le16 txrate;
600 601 602 603 604 605 606
} __attribute__ ((packed));

struct cmd_ds_get_tsf {
	__le64 tsfvalue;
} __attribute__ ((packed));

struct cmd_ds_bt_access {
607 608
	__le16 action;
	__le32 id;
609 610 611 612 613
	u8 addr1[ETH_ALEN];
	u8 addr2[ETH_ALEN];
} __attribute__ ((packed));

struct cmd_ds_fwt_access {
614 615
	__le16 action;
	__le32 id;
616
	u8 valid;
617 618 619
	u8 da[ETH_ALEN];
	u8 dir;
	u8 ra[ETH_ALEN];
620 621 622
	__le32 ssn;
	__le32 dsn;
	__le32 metric;
623
	u8 rate;
624 625
	u8 hopcount;
	u8 ttl;
626
	__le32 expiration;
627
	u8 sleepmode;
628 629
	__le32 snr;
	__le32 references;
630
	u8 prec[ETH_ALEN];
631 632
} __attribute__ ((packed));

633 634 635 636 637 638 639 640 641 642 643 644

struct cmd_ds_mesh_config {
	struct cmd_header hdr;

        __le16 action;
        __le16 channel;
        __le16 type;
        __le16 length;
        u8 data[128];   /* last position reserved */
} __attribute__ ((packed));


645
struct cmd_ds_mesh_access {
646 647
	struct cmd_header hdr;

648 649
	__le16 action;
	__le32 data[32];	/* last position reserved */
650 651
} __attribute__ ((packed));

652 653 654
/* Number of stats counters returned by the firmware */
#define MESH_STATS_NUM 8

655 656
struct cmd_ds_command {
	/* command header */
657 658 659 660
	__le16 command;
	__le16 size;
	__le16 seqnum;
	__le16 result;
661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680

	/* command Body */
	union {
		struct cmd_ds_802_11_ps_mode psmode;
		struct cmd_ds_802_11_scan scan;
		struct cmd_ds_802_11_scan_rsp scanresp;
		struct cmd_ds_mac_control macctrl;
		struct cmd_ds_802_11_associate associate;
		struct cmd_ds_802_11_deauthenticate deauth;
		struct cmd_ds_802_11_set_wep wep;
		struct cmd_ds_802_11_ad_hoc_start ads;
		struct cmd_ds_802_11_reset reset;
		struct cmd_ds_802_11_ad_hoc_result result;
		struct cmd_ds_802_11_get_log glog;
		struct cmd_ds_802_11_authenticate auth;
		struct cmd_ds_802_11_get_stat gstat;
		struct cmd_ds_802_3_get_stat gstat_8023;
		struct cmd_ds_802_11_snmp_mib smib;
		struct cmd_ds_802_11_rf_tx_power txp;
		struct cmd_ds_802_11_rf_antenna rant;
681
		struct cmd_ds_802_11_monitor_mode monitor;
682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712
		struct cmd_ds_802_11_rate_adapt_rateset rateset;
		struct cmd_ds_mac_multicast_adr madr;
		struct cmd_ds_802_11_ad_hoc_join adj;
		struct cmd_ds_802_11_radio_control radio;
		struct cmd_ds_802_11_rf_channel rfchannel;
		struct cmd_ds_802_11_rssi rssi;
		struct cmd_ds_802_11_rssi_rsp rssirsp;
		struct cmd_ds_802_11_disassociate dassociate;
		struct cmd_ds_802_11_mac_address macadd;
		struct cmd_ds_802_11_enable_rsn enbrsn;
		struct cmd_ds_802_11_key_material keymaterial;
		struct cmd_ds_mac_reg_access macreg;
		struct cmd_ds_bbp_reg_access bbpreg;
		struct cmd_ds_rf_reg_access rfreg;
		struct cmd_ds_802_11_eeprom_access rdeeprom;

		struct cmd_ds_802_11d_domain_info domaininfo;
		struct cmd_ds_802_11d_domain_info domaininforesp;

		struct cmd_ds_802_11_sleep_params sleep_params;
		struct cmd_ds_802_11_inactivity_timeout inactivity_timeout;
		struct cmd_ds_802_11_tpc_cfg tpccfg;
		struct cmd_ds_802_11_pwr_cfg pwrcfg;
		struct cmd_ds_802_11_afc afc;
		struct cmd_ds_802_11_led_ctrl ledgpio;

		struct cmd_tx_rate_query txrate;
		struct cmd_ds_bt_access bt;
		struct cmd_ds_fwt_access fwt;
		struct cmd_ds_get_tsf gettsf;
		struct cmd_ds_802_11_subscribe_event subscribe_event;
713
		struct cmd_ds_802_11_beacon_control bcn_ctrl;
714 715 716 717
	} params;
} __attribute__ ((packed));

#endif