hostcmd.h 13.5 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
	int result;
78
	/* command response */
79
	int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *);
80
	unsigned long callback_arg;
81
	/* command data */
82
	struct cmd_header *cmdbuf;
83 84 85 86 87
	/* wait queue */
	u16 cmdwaitqwoken;
	wait_queue_head_t cmdwait_q;
};

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

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

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

#define S_DS_GEN sizeof(struct cmd_ds_gen)
113 114


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

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

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

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

139 140
	/* FW release number, example 0x01030304 = 2.3.4p1 */
	__le32 fwrelease;
141 142

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

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

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

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

struct cmd_ds_802_11_subscribe_event {
159 160
	struct cmd_header hdr;

161 162
	__le16 action;
	__le16 events;
163 164 165 166 167 168

	/* 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.
	 */
169
	uint8_t tlv[128];
170 171 172 173
};

/*
 * This scan handle Country Information IE(802.11d compliant)
174
 * Define data structure for CMD_802_11_SCAN
175 176
 */
struct cmd_ds_802_11_scan {
177 178 179 180 181
	struct cmd_header hdr;

	uint8_t bsstype;
	uint8_t bssid[ETH_ALEN];
	uint8_t tlvbuffer[0];
182 183 184 185 186 187 188 189
#if 0
	mrvlietypes_ssidparamset_t ssidParamSet;
	mrvlietypes_chanlistparamset_t ChanListParamSet;
	mrvlietypes_ratesparamset_t OpRateSet;
#endif
};

struct cmd_ds_802_11_scan_rsp {
190 191
	struct cmd_header hdr;

192
	__le16 bssdescriptsize;
193 194
	uint8_t nr_sets;
	uint8_t bssdesc_and_tlvbuffer[0];
195 196 197
};

struct cmd_ds_802_11_get_log {
198 199
	struct cmd_header hdr;

200 201 202 203 204 205 206 207 208 209 210 211 212
	__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;
213 214 215
};

struct cmd_ds_mac_control {
216
	struct cmd_header hdr;
217
	__le16 action;
218
	u16 reserved;
219 220 221
};

struct cmd_ds_mac_multicast_adr {
222
	struct cmd_header hdr;
223 224
	__le16 action;
	__le16 nr_of_adrs;
225 226 227 228 229 230 231 232 233 234
	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 {
235 236 237
	struct cmd_header hdr;

	u8 macaddr[ETH_ALEN];
238
	__le16 reasoncode;
239 240 241 242
};

struct cmd_ds_802_11_associate {
	u8 peerstaaddr[6];
243
	__le16 capability;
244 245
	__le16 listeninterval;
	__le16 bcnperiod;
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
	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_associate_rsp {
	struct ieeetypes_assocrsp assocRsp;
};

struct cmd_ds_802_11_set_wep {
261 262
	struct cmd_header hdr;

263
	/* ACT_ADD, ACT_REMOVE or ACT_ENABLE */
264
	__le16 action;
265 266

	/* key Index selected for Tx */
267
	__le16 keyindex;
268 269

	/* 40, 128bit or TXWEP */
270 271
	uint8_t keytype[4];
	uint8_t keymaterial[4][16];
272 273 274
};

struct cmd_ds_802_3_get_stat {
275 276 277 278 279 280
	__le32 xmitok;
	__le32 rcvok;
	__le32 xmiterror;
	__le32 rcverror;
	__le32 rcvnobuffer;
	__le32 rcvcrcerror;
281 282 283
};

struct cmd_ds_802_11_get_stat {
284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
	__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;
301 302 303
};

struct cmd_ds_802_11_snmp_mib {
304 305 306
	__le16 querytype;
	__le16 oid;
	__le16 bufsize;
307 308 309 310
	u8 value[128];
};

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

struct cmd_ds_bbp_reg_map {
317
	__le16 buffersize;
318
	u8 regmap[128];
319
	__le16 reserved;
320 321 322
};

struct cmd_ds_rf_reg_map {
323
	__le16 buffersize;
324
	u8 regmap[64];
325
	__le16 reserved;
326 327 328
};

struct cmd_ds_mac_reg_access {
329 330 331
	__le16 action;
	__le16 offset;
	__le32 value;
332 333 334
};

struct cmd_ds_bbp_reg_access {
335 336
	__le16 action;
	__le16 offset;
337 338 339 340 341
	u8 value;
	u8 reserved[3];
};

struct cmd_ds_rf_reg_access {
342 343
	__le16 action;
	__le16 offset;
344 345 346 347 348
	u8 value;
	u8 reserved[3];
};

struct cmd_ds_802_11_radio_control {
349 350
	struct cmd_header hdr;

351 352
	__le16 action;
	__le16 control;
353 354
};

355 356 357 358 359 360
struct cmd_ds_802_11_beacon_control {
	__le16 action;
	__le16 beacon_enable;
	__le16 beacon_period;
};

361
struct cmd_ds_802_11_sleep_params {
362 363
	struct cmd_header hdr;

364
	/* ACT_GET/ACT_SET */
365
	__le16 action;
366 367

	/* Sleep clock error in ppm */
368
	__le16 error;
369 370

	/* Wakeup offset in usec */
371
	__le16 offset;
372 373

	/* Clock stabilization time in usec */
374
	__le16 stabletime;
375 376

	/* control periodic calibration */
377
	uint8_t calcontrol;
378 379

	/* control the use of external sleep clock */
380
	uint8_t externalsleepclk;
381 382

	/* reserved field, should be set to zero */
383
	__le16 reserved;
384 385 386
};

struct cmd_ds_802_11_inactivity_timeout {
387 388
	struct cmd_header hdr;

389
	/* ACT_GET/ACT_SET */
390
	__le16 action;
391 392

	/* Inactivity timeout in msec */
393
	__le16 timeout;
394 395 396
};

struct cmd_ds_802_11_rf_channel {
397 398
	struct cmd_header hdr;

399
	__le16 action;
400 401 402 403
	__le16 channel;
	__le16 rftype;      /* unused */
	__le16 reserved;    /* unused */
	u8 channellist[32]; /* unused */
404 405 406 407
};

struct cmd_ds_802_11_rssi {
	/* weighting factor */
408
	__le16 N;
409

410 411 412
	__le16 reserved_0;
	__le16 reserved_1;
	__le16 reserved_2;
413 414 415
};

struct cmd_ds_802_11_rssi_rsp {
416 417 418 419
	__le16 SNR;
	__le16 noisefloor;
	__le16 avgSNR;
	__le16 avgnoisefloor;
420 421 422
};

struct cmd_ds_802_11_mac_address {
423 424
	struct cmd_header hdr;

425
	__le16 action;
426 427 428 429
	u8 macadd[ETH_ALEN];
};

struct cmd_ds_802_11_rf_tx_power {
430 431
	struct cmd_header hdr;

432
	__le16 action;
433 434 435
	__le16 curlevel;
	s8 maxlevel;
	s8 minlevel;
436 437 438
};

struct cmd_ds_802_11_rf_antenna {
439
	__le16 action;
440 441

	/* Number of antennas or 0xffff(diversity) */
442
	__le16 antennamode;
443 444 445

};

446
struct cmd_ds_802_11_monitor_mode {
Holger Schurig's avatar
Holger Schurig committed
447 448
	__le16 action;
	__le16 mode;
449 450
};

451
struct cmd_ds_set_boot2_ver {
452 453
	struct cmd_header hdr;

Holger Schurig's avatar
Holger Schurig committed
454 455
	__le16 action;
	__le16 version;
456 457
};

458 459 460 461 462 463 464 465 466 467 468 469 470 471
struct cmd_ds_802_11_fw_wake_method {
	struct cmd_header hdr;

	__le16 action;
	__le16 method;
};

struct cmd_ds_802_11_sleep_period {
	struct cmd_header hdr;

	__le16 action;
	__le16 period;
};

472
struct cmd_ds_802_11_ps_mode {
473 474 475 476 477
	__le16 action;
	__le16 nullpktinterval;
	__le16 multipledtim;
	__le16 reserved;
	__le16 locallisteninterval;
478 479
};

480 481
struct cmd_confirm_sleep {
	struct cmd_header hdr;
482

483
	__le16 action;
484
	__le16 nullpktinterval;
485 486 487
	__le16 multipledtim;
	__le16 reserved;
	__le16 locallisteninterval;
488 489 490
};

struct cmd_ds_802_11_data_rate {
491 492
	struct cmd_header hdr;

493
	__le16 action;
494 495
	__le16 reserved;
	u8 rates[MAX_RATES];
496 497 498
};

struct cmd_ds_802_11_rate_adapt_rateset {
499
	struct cmd_header hdr;
500 501 502
	__le16 action;
	__le16 enablehwauto;
	__le16 bitmap;
503 504 505
};

struct cmd_ds_802_11_ad_hoc_start {
506 507
	struct cmd_header hdr;

508
	u8 ssid[IW_ESSID_MAX_SIZE];
509
	u8 bsstype;
510
	__le16 beaconperiod;
511
	u8 dtimperiod;   /* Reserved on v9 and later */
512 513
	union IEEEtypes_ssparamset ssparamset;
	union ieeetypes_phyparamset phyparamset;
514
	__le16 probedelay;
515
	__le16 capability;
516
	u8 rates[MAX_RATES];
517 518 519
	u8 tlv_memory_size_pad[100];
} __attribute__ ((packed));

520 521 522 523 524 525 526
struct cmd_ds_802_11_ad_hoc_result {
	struct cmd_header hdr;

	u8 pad[3];
	u8 bssid[ETH_ALEN];
};

527
struct adhoc_bssdesc {
528 529
	u8 bssid[ETH_ALEN];
	u8 ssid[IW_ESSID_MAX_SIZE];
530
	u8 type;
531
	__le16 beaconperiod;
532
	u8 dtimperiod;
533 534
	__le64 timestamp;
	__le64 localtime;
535 536
	union ieeetypes_phyparamset phyparamset;
	union IEEEtypes_ssparamset ssparamset;
537
	__le16 capability;
538
	u8 rates[MAX_RATES];
539 540 541 542 543 544 545 546

	/* 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 {
547 548
	struct cmd_header hdr;

549
	struct adhoc_bssdesc bss;
550 551 552
	__le16 failtimeout;   /* Reserved on v9 and later */
	__le16 probedelay;    /* Reserved on v9 and later */
} __attribute__ ((packed));
553

554 555
struct cmd_ds_802_11_ad_hoc_stop {
	struct cmd_header hdr;
556 557 558
} __attribute__ ((packed));

struct cmd_ds_802_11_enable_rsn {
559 560
	struct cmd_header hdr;

561 562
	__le16 action;
	__le16 enable;
563
} __attribute__ ((packed));
564 565 566

struct MrvlIEtype_keyParamSet {
	/* type ID */
567
	__le16 type;
568 569

	/* length of Payload */
570
	__le16 length;
571 572

	/* type of key: WEP=0, TKIP=1, AES=2 */
573
	__le16 keytypeid;
574 575

	/* key control Info specific to a keytypeid */
576
	__le16 keyinfo;
577 578

	/* length of key */
579
	__le16 keylen;
580 581 582 583 584

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

585 586 587 588 589 590 591
struct cmd_ds_host_sleep {
	struct cmd_header hdr;
	__le32 criteria;
	uint8_t gpio;
	uint8_t gap;
} __attribute__ ((packed));

592
struct cmd_ds_802_11_key_material {
593 594
	struct cmd_header hdr;

595
	__le16 action;
596 597 598 599
	struct MrvlIEtype_keyParamSet keyParamSet[2];
} __attribute__ ((packed));

struct cmd_ds_802_11_eeprom_access {
600
	struct cmd_header hdr;
601 602
	__le16 action;
	__le16 offset;
603 604 605 606
	__le16 len;
	/* firmware says it returns a maximum of 20 bytes */
#define LBS_EEPROM_READ_LEN 20
	u8 value[LBS_EEPROM_READ_LEN];
607 608 609
} __attribute__ ((packed));

struct cmd_ds_802_11_tpc_cfg {
610
	__le16 action;
611 612 613 614 615 616 617 618
	u8 enable;
	s8 P0;
	s8 P1;
	s8 P2;
	u8 usesnr;
} __attribute__ ((packed));

struct cmd_ds_802_11_led_ctrl {
619 620
	__le16 action;
	__le16 numled;
621 622 623 624
	u8 data[256];
} __attribute__ ((packed));

struct cmd_ds_802_11_afc {
625
	__le16 afc_auto;
626 627
	union {
		struct {
628 629
			__le16 threshold;
			__le16 period;
630 631
		};
		struct {
632 633
			__le16 timing_offset; /* signed */
			__le16 carrier_offset; /* signed */
634 635 636 637 638
		};
	};
} __attribute__ ((packed));

struct cmd_tx_rate_query {
639
	__le16 txrate;
640 641 642 643 644 645 646
} __attribute__ ((packed));

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

struct cmd_ds_bt_access {
647 648
	__le16 action;
	__le32 id;
649 650 651 652 653
	u8 addr1[ETH_ALEN];
	u8 addr2[ETH_ALEN];
} __attribute__ ((packed));

struct cmd_ds_fwt_access {
654 655
	__le16 action;
	__le32 id;
656
	u8 valid;
657 658 659
	u8 da[ETH_ALEN];
	u8 dir;
	u8 ra[ETH_ALEN];
660 661 662
	__le32 ssn;
	__le32 dsn;
	__le32 metric;
663
	u8 rate;
664 665
	u8 hopcount;
	u8 ttl;
666
	__le32 expiration;
667
	u8 sleepmode;
668 669
	__le32 snr;
	__le32 references;
670
	u8 prec[ETH_ALEN];
671 672
} __attribute__ ((packed));

673 674 675 676 677 678 679 680 681 682 683 684

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));


685
struct cmd_ds_mesh_access {
686 687
	struct cmd_header hdr;

688 689
	__le16 action;
	__le32 data[32];	/* last position reserved */
690 691
} __attribute__ ((packed));

692 693 694
/* Number of stats counters returned by the firmware */
#define MESH_STATS_NUM 8

695 696
struct cmd_ds_command {
	/* command header */
697 698 699 700
	__le16 command;
	__le16 size;
	__le16 seqnum;
	__le16 result;
701 702 703 704 705 706 707 708 709 710 711

	/* command Body */
	union {
		struct cmd_ds_802_11_ps_mode psmode;
		struct cmd_ds_802_11_associate associate;
		struct cmd_ds_802_11_reset reset;
		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_antenna rant;
712
		struct cmd_ds_802_11_monitor_mode monitor;
713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729
		struct cmd_ds_802_11_rssi rssi;
		struct cmd_ds_802_11_rssi_rsp rssirsp;
		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_11d_domain_info domaininfo;
		struct cmd_ds_802_11d_domain_info domaininforesp;

		struct cmd_ds_802_11_tpc_cfg tpccfg;
		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;
730
		struct cmd_ds_802_11_beacon_control bcn_ctrl;
731 732 733 734
	} params;
} __attribute__ ((packed));

#endif