===============================================================================
			U S E R  M A N U A L

 Copyright 2008-2021 NXP


1) FOR DRIVER BUILD

	Goto source code directory wlan_src/.
	make [clean] build
	The driver and utility binaries can be found in ../bin_xxxx directory.
	The driver code supports Linux kernel from 2.6.32 to 5.8.0.

2) FOR DRIVER INSTALL

	a) Copy firmware image to /lib/firmware/nxp/, copy wifi_mod_para.conf to /lib/firmware/nxp/.
	b) Install WLAN driver
	   There are drv_mode, max_sta_bss, max_uap_bss etc. module parameters.
		The bit settings of drv_mode are,
			Bit 0 :  STA
			Bit 1 :  uAP
			Bit 2 :  WIFIDIRECT

		max_sta_bss: Maximum number of STA BSS (default 1, max 1)
		sta_name: Name of the STA interface (default: "mlan")
		max_uap_bss: Maximum number of uAP BSS (default 1, max 1)
		uap_name: Name of the uAP interface (default: "uap")
		max_wfd_bss: Maximum number of WIFIDIRECT BSS (default 1, max 1)
		wfd_name: Name of the WIFIDIRECT interface (default: "wfd")
		max_vir_bss: Number of Virtual interfaces (default 0)
		uap_oper_ctrl: uAP operation control when in-STA disconnect with ext-AP
                               0: default do nothing, 2: uAP stops and restarts automatically
	   For example, to install multi-chip driver,
		insmod mlan.ko
		insmod moal.ko mod_para=nxp/wifi_mod_para.conf [drvdbg=0x7]
	   wifi_mod_para.conf is used to support multi-chips which has different load module parameters. It contains
           the module parameters for different chips.
	c) Uninstall WLAN driver,
		ifconfig mlanX down
		ifconfig uapX down
		rmmod moal
		rmmod mlan

	To load driver with MFG firmware file, use mfg_mode=1 when insmod WLAN driver and
	specify MFG firmware name if needed.

	There are some other parameters for debugging purpose etc. Use modinfo to check details.
	  drvdbg=<bit mask of driver debug message control>
	  dev_cap_mask=<Bit mask of the device capability>
	  mac_addr=xx:xx:xx:xx:xx:xx <override the MAC address (in hex)>
	  auto_ds=0|1|2 <use MLAN default | enable auto deepsleep | disable auto deepsleep>
	  ps_mode=0|1|2 <use MLAN default | enable IEEE PS mode | disable IEEE PS mode>
	  max_tx_buf=2048|4096|8192 <maximum AMSDU Tx buffer size>
	  pm_keep_power=1|0 <PM keep power in suspend (default) | PM no power in suspend>
	  shutdown_hs=1|0 <Enable HS when shutdown | No HS when shutdown (default)>
	  cfg_11d=0|1|2 <use MLAN default | enable 11d | disable 11d>
	  dts_enable=0|1 <Disable DTS | Enable DTS (default)>
	  fw_name = <FW file name>
		e.g. copy pcieuart9098_combo_v1.bin to firmware directory, fw_name=nxp/pcieuart9098_combo_v1.bin
	  hw_test=0|1 <Disable hardware test (default) | Enable hardware test>
	  fw_serial=0|1 <support parallel download FW | support serial download FW (default)>
	  req_fw_nowait=0|1 <use request_firmware API (default) | use request_firmware_nowait API>
      dfs53cfg=0|1|2 <use Fw Default | New W53 | Old W53>
	  SD8887: antcfg=0|1|2|0xffff <default | Tx/Rx antenna 1 | Tx/Rx antenna 2 | enable antenna diversity>
	  SD8897/SD8997: antcfg=0x11|0x13|0x33 <Bit0:Rx Path A, Bit1:Rx Path B, Bit 4:Tx Path A, Bit 5:Tx Path B>
	  slew_rate: Slew Rate Control value = 0|1|2|3 (0 is the slowest slew rate and 03 has the highest slew rate (default))
	  init_cfg=<init config (MAC addresses, registers etc.) file name>
		e.g. copy init_cfg.conf to firmware directory, init_cfg=nxp/init_cfg.conf
	  cal_data_cfg=<CAL data config file name>
		e.g. copy cal_data.conf to firmware directory, cal_data_cfg=nxp/cal_data.conf
          Note: Loading driver with 8887 must include correct cal_data_cfg parameter.
	 dpd_data_cfg=<DPD data config file name>
	   e.g. copy dpd_data.conf to firmware directory, dpd_data_cfg=nxp/dpd_data.conf
	  txpwrlimit_cfg=<Tx power limit config file name>
		e.g. copy txpwrlimit_cfg_set.conf to firmware directory, txpwrlimit_cfg=nxp/txpwrlimit_cfg_set.conf
      cntry_txpwr=0|1|2
                  0: Disable setting tx power table of country (default)
                  1: Enable setting tx power table of country
                  2: Enable setting rgpower table of country
	  init_hostcmd_cfg=<init hostcmd config file name>
		e.g. copy init_hostcmd_cfg.conf to firmware directory, init_hostcmd_cfg=nxp/init_hostcmd_cfg.conf
	  band_steer_cfg=<band steer config file name>
		e.g. generate bscfg.conf by band_steer_cfg.conf, then copy bscfg.conf to firmware directory, band_steer_cfg=nxp/bscfg.conf
	  sdio_rx_aggr=1|0 <Enable SDIO rx aggr (default) | Disable SDIO rx aggr>
	  cfg80211_wext=<bit mask of CFG80211 and WEXT control>
		Bit 0: STA WEXT
		Bit 1: uAP WEXT
		Bit 2: STA CFG80211
		Bit 3: uAP CFG80211
	  reg_alpha2=<Regulatory alpha2 (default NULL)>
	  skip_fwdnld=0|1 <enable FW download support (default) | disable FW download support>
	  wq_sched_prio: Priority for work queue
	  wq_sched_policy: Scheduling policy for work queue
		(0: SCHED_NORMAL, 1: SCHED_FIFO, 2: SCHED_RR, 3: SCHED_BATCH, 5: SCHED_IDLE)
		Please note that, both wq_sched_prio and wq_sched_policy should be provided
		as module parameters. If wq_sched_policy is (0, 3 or 5), then wq_sched_prio
		must be 0. wq_sched_prio should be 1 to 99 otherwise.
	  rx_work=0|1|2 <default | Enable rx_work_queue | Disable rx_work_queue>
	  pcie_int_mode=0|1|2 <Legacy mode, MSI mode (default), MSI-X mode>
	  pcie_int_mode=0|1 <Legacy mode, MSI mode (default)>
	  aggrctrl=1|0 <enable Tx aggr | disable Tx aggr>
	  usb_aggr=0|1|2 <use MLAN default (disabled) | enable USB aggr | disable USB aggr>
	  low_power_mode_enable=0|1 <disable low power mode (default)| enable low power mode>
	  When low power mode is enabled, the output power will be clipped at ~+10dBm and the
	  expected PA current is expected to be in the 80-90 mA range for b/g/n modes
	wakelock_timeout=<set wakelock_timeout value (ms)>
	pmic=0|1 <No pmic configure cmd sent to firmware | Send pmic configure cmd to firmware>
	indication_gpio=0xXY <GPIO to indicate wakeup source and its level; high four bits X:
                  level(0/1) for normal wakeup; low four bits Y: GPIO pin number. This parameter
                  only works with specific board and firmware.>
	hs_wake_interval=<Host sleep wakeup interval,it will round to nearest multiple dtim*beacon_period in fw>
	disconnect_on_suspend=0|1 <Disable disconnect wifi on suspend (default) | Enable disconnect wifi on suspend>
	hs_mimo_switch=0|1 <Disable dynamic MIMO-SISO switch during host sleep (default) | Enable dynamic MIMO-SISO switch during host sleep>
	gtk_rekey_offload=0|1|2 <disable gtk_rekey_offload|enable gtk_rekey_offload (default) | enable gtk_rekey_offload in suspend mode only>
	napi=0|1 <disable napi | enable napi>
	fixed_beacon_buffer=0|1 <allocate default buffer size (default) | allocate max buffer size>
	GoAgeoutTime=0|x <use default ageout time (default) | set Go age out time xTU(TU 100ms)>
	multi_dtim=0|x <use default DTIM interval(default) | set x*beacon_period as DTIM interval>
	inact_tmo=0|x <use default IEEE ps inactivity timout value (default) | use IEEE ps inactivity timeout value x ms>
	uap_max_sta: Maximum number of STA for UAP/GO (default 0, max 64)
	host_mlme=0|1 <Disable Host MLME support (default)| Enable Host MLME support>
	country_ie_ignore=0|1 <Follow countryIE from AP and beacon hint enable (default) | Ignore countryIE from AP and beacon hint disable>
	beacon_hints=0|1 <enable beacon hints(default) | disable beacon hints>

	Note: On some platforms (e.g. PXA910/920) double quotation marks ("") need to used
	for module parameters.
		insmod sdxxx.ko "<para1> <para2> ..."

3) FOR DRIVER PROC & DEBUG

	The following info are provided in /proc/net/mwlan/adapterX/mlanY|uapY|wfdY/info,
	on kernel 2.6.24 or later, the entry is /proc/mwlan/adapterX/mlanY|uapY|wfdY/info.

	driver_name = "wlan" or "uap"
	driver_version = <chip id, firmware version and driver version>
	interface_name = "mlanX", "uapX" or "wfdX"
	bss_mode = "Ad-hoc" | "Managed" | "Auto" | "Unknown"
	media_state = "Disconnected" | "Connected"
	mac_address = <6-byte adapter MAC address>
	multicase_count = <multicast address count>     // Only for STA
	essid = <current SSID>                          // Only for STA
	bssid = <current BSSID>                         // Only for STA
	channel = <current channel>                     // Only for STA
	region_code = <current region code>             // Only for STA
	multicast_address[n] = <multicast address>      // Only for STA
	num_tx_bytes = <number of bytes sent to device>
	num_rx_bytes = <number of bytes received from device and sent to kernel>
	num_tx_pkts = <number of packets sent to device>
	num_rx_pkts = <number of packets received from device and sent to kernel>
	num_tx_pkts_dropped = <number of Tx packets dropped by driver>
	num_rx_pkts_dropped = <number of Rx packets dropped by driver>
	num_tx_pkts_err = <number of Tx packets failed to send to device>
	num_rx_pkts_err = <number of Rx packets failed to receive from device>
	carrier "on" | "off"
	tx queue "stopped" | "started"
	tkip_mic_failures = 0                           // Only for uAP
	ccmp_decrypt_errors = 0                         // Only for uAP
	wep_undecryptable_count = 0                     // Only for uAP
	wep_icv_error_count = 0                         // Only for uAP
	decrypt_failure_count = 0                       // Only for uAP
	mcast_tx_count = 0                              // Only for uAP
	failed_count = 0                                // Only for uAP
	retry_count = 0                                 // Only for uAP
	multiple_retry_count = 0                        // Only for uAP
	frame_duplicate_count = 0                       // Only for uAP
	rts_success_count = 0                           // Only for uAP
	rts_failure_count = 0                           // Only for uAP
	ack_failure_count = 0                           // Only for uAP
	rx_fragment_count = 0                           // Only for uAP
	mcast_rx_frame_count = 0                        // Only for uAP
	fcs_error_count = 0                             // Only for uAP
	tx_frame_count = 0                              // Only for uAP
	rsna_tkip_cm_invoked = 0                        // Only for uAP
	rsna_4way_hshk_failures = 0                     // Only for uAP

	The following debug info are provided in /proc/net/mwlan/adapterX/mlanY|uapY|wfdY/debug,
	on kernel 2.6.24 or later, the entry is /proc/mwlan/adapterX/mlanY|uapY|wfdY/debug.

	drvdbg = <bit mask of driver debug message control>
	wmm_ac_vo = <number of packets sent to device from WMM AcVo queue>
	wmm_ac_vi = <number of packets sent to device from WMM AcVi queue>
	wmm_ac_be = <number of packets sent to device from WMM AcBE queue>
	wmm_ac_bk = <number of packets sent to device from WMM AcBK queue>
	max_tx_buf_size = <maximum Tx buffer size>
	tx_buf_size = <current Tx buffer size>
	curr_tx_buf_size = <current Tx buffer size in FW>
	ps_mode = <0/1, CAM mode/PS mode>
	ps_state = <0/1/2/3, awake state/pre-sleep state/sleep-confirm state/sleep state>
	is_deep_sleep = <0/1, not deep sleep state/deep sleep state>    // Only for STA
	wakeup_dev_req = <0/1, wakeup device not required/required>
	wakeup_tries = <wakeup device count, cleared when device awake>
	hs_configured = <0/1, host sleep not configured/configured>
	hs_activated = <0/1, extended host sleep not activated/activated>
	tx_pkts_queued = <number of Tx packets queued>
	pps_uapsd_mode = <0/1, PPS/UAPSD mode disabled/enabled>     // Only for STA
	sleep_pd = <sleep period in milliseconds>                   // Only for STA
	qos_cfg = <WMM QoS info>                                    // Only for STA
	tx_lock_flag = <0/1, Tx lock flag>                          // Only for STA
	port_open = <0/1, port open flag>                           // Only for STA
	scan_processing = <0/1, scan processing flag>               // Only for STA
	num_bridge_pkts = <number of bridged packets>               // Only for uAP
	num_drop_pkts = <number of dropped packets>                 // Only for uAP
	num_tx_timeout = <number of Tx timeout>
	num_cmd_timeout = <number of timeout commands>
	timeout_cmd_id = <command id of the last timeout command>
	timeout_cmd_act = <command action of the last timeout command>
	last_cmd_id = <command id of the last several commands sent to device>
	last_cmd_act = <command action of the last several commands sent to device>
	last_cmd_index = <0 based last command index>
	last_cmd_resp_id = <command id of the last several command responses received from device>
	last_cmd_resp_index = <0 based last command response index>
	last_event = <event id of the last several events received from device>
	last_event_index = <0 based last event index>
	num_cmd_h2c_fail = <number of commands failed to send to device>
	num_cmd_sleep_cfm_fail = <number of sleep confirm failed to send to device>
	num_tx_h2c_fail = <number of data packets failed to send to device>
	num_cmdevt_c2h_fail = <number of commands/events failed to receive from device>
	num_rx_c2h_fail = <number of data packets failed to receive from device>
	num_int_read_fail = <number of interrupt read failures>
	last_int_status = <last interrupt status>
	num_evt_deauth = <number of deauthenticated events received from device>        // Only for STA
	num_evt_disassoc = <number of disassociated events received from device>        // Only for STA
	num_evt_link_lost = <number of link lost events received from device>           // Only for STA
	num_cmd_deauth = <number of deauthenticate commands sent to device>             // Only for STA
	num_cmd_assoc_ok = <number of associate commands with success return>           // Only for STA
	num_cmd_assoc_fail = <number of associate commands with failure return>         // Only for STA
	cmd_sent = <0/1, send command resources available/sending command to device>
	data_sent = <0/1, send data resources available/sending data to device>
	mp_rd_bitmap = <SDIO multi-port read bitmap>
	curr_rd_port = <SDIO multi-port current read port>
	mp_wr_bitmap = <SDIO multi-port write bitmap>
	curr_wr_port = <SDIO multi-port current write port>
	txbd_rdptr = <PCIE transmit read pointer>
	txbd_wrptr = <PCIE transmit write pointer>
	rxbd_rdptr = <PCIE recieve read pointer>
	rxbd_wrptr = <PCIE recieve write pointer>
	eventbd_rdptr = <PCIE event read pointer>
	eventbd_wrptr = <PCIE event write pointer>
	cmd_resp_received = <0/1, no cmd response to process/response received and yet to process>
	event_received = <0/1, no event to process/event received and yet to process>
	tx_cmd_urb_pending = <number of URB pending for cmd transmit>
	tx_data_urb_pending = <number of URB pending for data transmit>
	rx_cmd_urb_pending = <number of URB pending for cmd receive>
	rx_data_urb_pending = <number of URB pending for data receive>
	ioctl_pending = <number of ioctl pending>
	tx_pending = <number of Tx packet pending>
	rx_pending = <number of Rx packet pending>
	lock_count = <number of lock used>
	malloc_count = <number of malloc done>
	mbufalloc_count = <number of mlan_buffer allocated>
	malloc_cons_count = <number of consistent malloc done>
	main_state = <current state of the main process>
	sdiocmd53w = <SDIO Cmd53 write status>
	sdiocmd53r = <SDIO Cmd52 read status>
	hs_skip_count = <number of skipped suspends>
	hs_force_count = <number of forced suspends>

	Issue SDIO cmd52 read/write through proc.
	Usage:
		echo "sdcmd52rw=<func> <reg> [data]" > /proc/mwlan/adapterX/config
	where the parameters:
		func: The function number to use (0-7)
		reg:  The address of the register
		data: The value to write, read if the value is absent
		For SDIO MMC driver, only function 0 and WLAN function access is allowed.
		And there is a limitation for function 0 write, only vendor specific CCCR
		registers (0xf0 -0xff) are permiited.
	Examples:
		echo "sdcmd52rw= 0 4" > /proc/mwlan/adapterX/config      # read func 0 address 4
		cat /proc/mwlan/adapterX/config                          # display the register value
		echo "sdcmd52rw= 1 3 0xf" > /proc/mwlan/adapterX/config  # write 0xf to func 1 address 3

	Issue debug_dump command through proc.
	Usage:
		echo "debug_dump" > /proc/mwlan/adapterX/config

	Examples:
		echo "debug_dump" > /proc/mwlan/adapterX/config      # dump driver internal debug status.

	Use dmesg or cat /var/log/debug to check driver debug messages.

	Update /proc/sys/kernel/printk to change message log levels.
	For example,
	echo 6 > /proc/sys/kernel/printk    (messages with a higher priority than 6
	                                     will be printed to the console)
	echo 15 > /proc/sys/kernel/printk   (all messages will be printed to console)

4) FOR FW RELOAD
    a) Enable parallel firmware download in driver parameter
       insmod sdxxx.ko fw_serial=0

    b) default fw name for parallel firmware download
       sd8887_wlan_a2.bin

    c) Trigger FW reload
       echo "fw_reload=1" > /proc/mwlan/adapterX/config   trigger inband firmware reset and reload firmware
       echo "fw_reload=2" > /proc/mwlan/adapterX/config   trigger firmware reload
       echo "fw_reload=3" > /proc/mwlan/adapterX/config   set firmware reload flag in driver.
       echo "fw_reload=4" > /proc/mwlan/config   trigger pcie FLR and reload firmware.

    (Note: This feature will be supported on Robin3 and KF2.
           For CAC-A2, it only work with the board which supports parallel fw download)

5) FOR RF test mode commands:

    Following commands are used to perform RF testing of the wifi chipset.
    Please not that these test mode commands can only be issued while the
    device is in disconnected state and the uAP BSS is inactive.
    Normal wifi operations cannot be used on entering RF Test Mode.

    Enter RF Test Mode:
	echo "rf_test_mode=1" > /proc/mwlan/adapterX/config

    Exit RF Test Mode:
	echo "rf_test_mode=0" > /proc/mwlan/adapterX/config
    Please note that after exiting the RF Test Mode, the FW needs to be
    reset in order to use normal wifi connectivity.

    To get the set of available RF Test Mode commands, currently set
    parameters values for each command and the output,
	cat /proc/mwlan/adapterX/config

    Set Tx Antenna
	For 1x1 chipsets, 1:Main, 2:Aux when antenna diversity is supported
	For 2x2 chipsets, 1:Path A, 2: Path B, 3: Path A+B
			  Both Tx and Rx must be set to same antenna path
	echo "tx_antenna=1" > /proc/mwlan/adapterX/config

    Set Rx Antenna
	For 1x1 chipsets, 1:Main, 2:Aux when antenna diversity is supported
	For 2x2 chipsets, 1:Path A, 2:Path B, 3:Path A+B
			  Both Tx and Rx must be set to same antenna path
	echo "rx_antenna=1" > /proc/mwlan/adapterX/config

    Set RF band  (0:2G, 1:5G)
	For 2G, channel will be reset to 6, while for 5G, to channel 36
	echo "band=0" > /proc/mwlan/adapterX/config

    Set RF bandwidth  (0:20MHz, 1:40MHz, 4:80MHz)
	echo "bw=0" > /proc/mwlan/adapterX/config

    Set RF channel
	echo "channel=6" > /proc/mwlan/adapterX/config

    Set Radio Mode
        echo "radio_mode=14 4" > /proc/mwlan/adapterX/config

    Get and reset packet error rate
	echo "get_and_reset_per" > /proc/mwlan/adapterX/config

    Set Tx Power
	This command will set power only if caldata is already loaded in the FW.
	Power       (0 to 24 dBm)
	Modulation  (0: CCK, 1:OFDM, 2:MCS)
	Path ID     (0: PathA, 1:PathB, 2:PathA+B)
	echo "tx_power=16 2 0" > /proc/mwlan/adapterX/config

    Set Tx Continuous Mode
	Start                 (0:disable, 1:enable)
	Continuous Wave Mode  (0:disable, 1:enable)
	Payload Pattern       (0 to 0xFFFFFFFF)
	CS Mode               (Applicable only when continuous wave is disabled)
	                      (0:disable, 1:enable)
	Active SubChannel     (0:low, 1:upper, 3:both)
	Tx Data Rate          (Rate Index corresponding to legacy/HT/VHT rates)

	Example: To start continuous wave (tone) mode, first stop any ongoing
	Tx and then start wave mode:
	step1: echo "tx_continuous=0" > /proc/mwlan/adapterX/config
	step2: echo "tx_continuous=1 1 0xAAA 0 3 7" > /proc/mwlan/adapterX/config

	Example: To start continuous packet mode, first stop any ongoing Tx and
	then start pkt mode:
	step1: echo "tx_continuous=0" > /proc/mwlan/adapterX/config
	step2: echo "tx_continuous=1 0 0xAAA 0 3 7" > /proc/mwlan/adapterX/config

	stop:
	echo "tx_continuous=0" > /proc/mwlan/adapterX/config

    Set Tx Frame
	Start                 (0:disable, 1:enable)
	Tx Data Rate          (Rate Index corresponding to legacy/HT/VHT rates)
	Payload Pattern       (0 to 0xFFFFFFFF)
	Payload Length        (1 to 0x400)
	Adjust Burst SIFS Gap (0:disable, 1:enable)
	Burst SIFS in us      (0 to 255us)
	Short Preamble        (0:disable, 1:enable)
	Active SubChannel     (0:low, 1:upper, 3:both)
	Short GI              (0:disable, 1:enable)
	Adv Coding            (0:disable, 1:enable)
	Beamforming           (0:disable, 1:enable)
	GreenField Mode       (0:disable, 1:enable)
	STBC                  (0:disable, 1:enable)
	BSSID                 (xx:xx:xx:xx:xx:xx)

	Example: To start Tx frame with duty cycle, first stop any ongoing Tx
        and then start Tx frame:
	echo "tx_frame=0" > /proc/mwlan/adapterX/config
	echo "tx_frame=1 7 0xAAA 0x100 1 20 0 0 0 0 0 0 0 05:43:3f:c4:51" > /proc/mwlan/adapterX/config


===============================================================================
        U S E R  M A N U A L  F O R  MLANUTL

NAME
	mlanutl - configure the additional parameters available for NXP mdriver.

SYNOPSIS
	mlanutl -v
	mlanutl <mlanX|uapX|wfdx> <command> [parameters] ...

	mlanutl mlanX verext
	mlanutl mlanX version
	mlanutl mlanX hostcmd <conf> generate_raw <raw_data_file>
	mlanutl mlanX getdatarate
	mlanutl uapX getdatarate
	mlanutl mlanX drvdbg [n]
	mlanutl mlanX getlog
	mlanutl mlanX getsignal [m] [n]
	mlanutl mlanX signalextcfg [m]
	mlanutl mlanX getsignalextv2 [m]
	mlanutl mlanX getsignalext [m]
	mlanutl mlanX get_txpwrlimit <n> [raw_data_file]
	mlanutl mlanX aggrpriotbl [<m0> <n0> <m1> <n1> ... <m7> <n7>]
	mlanutl uapX aggrpriotbl [<m0> <n0> <m1> <n1> ... <m7> <n7>]
	mlanutl mlanX addbapara [<m> <n> <o> <p> <q>]
	mlanutl uapX addbapara [<m> <n> <o> <p> <q>]
	mlanutl mlanX addbareject [<m0> <m1> ... <m7>]
	mlanutl uapX addbareject [<m0> <m1> ... <m7>]
	mlanutl mlanX dyn_bw [n]
	mlanutl mlanX vhtcfg <j> <k> [l] [m] [n] [o]
	mlanutl uapX vhtcfg <j> <k> [l] [m] [n] [o]
	mlanutl mlanX httxcfg [<m>] [<n>]
	mlanutl mlanX htcapinfo [<m>] [<n>]
        mlanutl mlanX 11axcfg [config/11axcfg.conf]
	mlanutl mlanX 11axcmd <subcmd> <value>
	mlanutl mlanX txratecfg [l] [m] [n] [o]
	mlanutl uapX txratecfg [l] [m] [n] [o]

DESCRIPTION
	Those commands are used to send additional commands to the NXP MLAN
	card via the Linux device driver.

	The mlanX parameter specifies the network device that is to be used to
	perform this command on. It could be mlan0, mlan1 etc.

verext
	Retrieve and display an extended version string from the firmware

	Usage:
		mlanutl mlanX verext [#]

	where [#] is an optional argument to retrieve a specific version string,
	omission of the argument retrieves the 0 indexed string.

version
	This is used to get the current version of the driver and the firmware.

drvdbg
	This command is used to set/get the bit masks of driver debug message control.

	Usage:
		mlanutl mlanX drvdbg [n]

	Where the parameter <n> is the generic debug message control bit mask.
	The following types of driver debug messages can be dynamically enabled or
	disabled by setting or clearing the corresponding bits,
		bit 0:  MMSG            PRINTM(MMSG,...)
		bit 1:  MFATAL          PRINTM(MFATAL,...)
		bit 2:  MERROR          PRINTM(MERROR,...)
		bit 3:  MDATA           PRINTM(MDATA,...)
		bit 4:  MCMND           PRINTM(MCMND,...)
		bit 5:  MEVENT          PRINTM(MEVENT,...)
		bit 6:  MINTR           PRINTM(MINTR,...)
		bit 7:  MIOCTL          PRINTM(MIOCTL,...)
		...
		bit 16: MDAT_D          PRINTM(MDAT_D,...), DBG_HEXDUMP(MDAT_D,...)
		bit 17: MCMD_D          PRINTM(MCMD_D,...), DBG_HEXDUMP(MCMD_D,...)
		bit 18: MEVT_D          PRINTM(MEVT_D,...), DBG_HEXDUMP(MEVT_D,...)
		bit 19: MFW_D           PRINTM(MFW_D,...),  DBG_HEXDUMP(MFW_D,...)
		bit 20: MIF_D           PRINTM(MIF_D,...),  DBG_HEXDUMP(MIF_D,...)
		...
		bit 28: MENTRY          PRINTM(MENTRY,...), ENTER(), LEAVE()
		bit 29: MWARN           PRINTM(MWARN,...)
		bit 30: MINFO           PRINTM(MINFO,...)

	If CONFIG_DEBUG=2, all kinds of debug messages can be configured.

	If CONFIG_DEBUG=1, all kinds of debug messages can be configured except
	for MENTRY, MWARN and MINFO. By default MMSG, MFATAL and MERROR are enabled.

	Some special debug messages,
		'*'             // MLAN driver ISR is called (bit 6 MINTR enabled)
		'|'             // PS awake event is received (bit 5 MEVENT enabled)
		'_'             // PS sleep event is received (bit 5 MEVENT enabled)
		'+'             // PS sleep confirm is sent (bit 5 MEVENT enabled)

	Examples:
		mlanutl mlan0 drvdbg             : Get the current driver debug masks
		mlanutl mlan0 drvdbg 0           : Disable all the debug messages
		mlanutl mlan0 drvdbg 7           : Enable MMSG, MFATAL and MERROR messages
		mlanutl mlan0 drvdbg 0x20037     : Enable MMSG, MFATAL, MEEROR,
		                                   MCMND, MEVENT and MCMD_D messages
		mlanutl mlan0 drvdbg -1          : Enable all the debug messages

hostcmd generate_raw
	This command is used to generate the raw data(hostcommand block) for
	hostcommand in <conf_file> and write that to file <raw_data_file>

	Usage:
		mlanutl mlanX hostcmd <conf_file> generate_raw <raw_data_file>

getdatarate
	This command is used to get the data rate being used in last Tx
	packet and last Rx packet.

getlog
	This command is used to get the statistics available in the station.
	Following stats are displayed:-
	dot11MulticastTransmittedFrameCount	Increments when the multicast bit is set in the destination
						MAC address of a successfully transmitted MSDU

	dot11FailedCount			Increments when an MSDU is not transmitted successfully

	dot11RetryCount				Increments when an MSDU is successfully transmitted after one
						or more retransmissions

	dot11MultipleRetryCount			Increments when an MSDU is successfully transmitted after more
						than one retransmission

	dot11FrameDuplicateCount		Increments when a frame is received that the Sequence Control
						field is indicating a duplicate count

	dot11RTSSuccessCount			Increments when a CTS is received in response to an RTS

	dot11RTSFailureCount			Increments when a CTS is not received in response to an RTS

	dot11ACKFaliureCount			Increments when an ACK is not received when expected

	dot11ReceivedFragmentCount		Increments for each successfully received MPDU of type Data or Management

	dot11MulticastReceivedFrameCount	Increments when a MSDU is received with the multicast bit set in the destination MAC address

	dot11FCSErrorCount			Increments when an FCS error is detected in a received MPDU

	dot11TransmittedFrameCount		Increments for each successfully transmitted MSDU

	dot11WeplcvErrCnt			Increment when WEP decryption error for key index 0.3

	beaconReceivedCnt			Increments when received beacon

	beaconMissedCnt				Increments when beacon missed

	dot11TransmittedFrameCount		Increments for each successfully transmitted MSDU

	dot11QosTransmittedFragmentCount	Increments when a corresponding UP's MPDU transmitted successfully

	dot11QosFailedCount			Increments when a corresponding UP's MSDU not transmitted successfully

	dot11QosRetryCount			Increment when a corresponding UP's MSDU transmitted successfully after one or more retransmission

	dot11QosMultipleRetryCount		Increments when a corresponding UP's MSDU is successfully transmitted after more than one retransmission

	dot11QosFrameDuplicateCount		Increments when a corresponding UP's frame is received that the Sequence
						Control field is indicating a duplicate frame

	dot11QosRTSSuccessCount			Increments when a CTS is received in response to an RTS, which is sent for a corresponding UP's Qos frame

	dot11QosRTSFailureCount			Increments when a CTS is not received in response to an RTS, which is sent for a corresponding UP's
						Qos frame

	dot11QosACKFailureCount			Increments when an ACK is not received when expected for a corresponding UP's Qos frame

	dot11QosReceivedFragmentCount		Increments when a corresponding UP's MPDU received

	dot11QosTransmittedFrameCount		Increments when a corresponding UP's MSDU transmitted

	dot11QosDiscardedFrameCount		Increments when a corresponding UP's MSDU not transmitted successfully

	dot11QosMPDUsReceivedCount		Increments when a corresponding UP's MDPU received


	dot11QosRetriesReceivedCount		Increments when a corresponding UP's MDPU received which retry bit is set

	dot11RSNAStatsCMACICVErrors		Increment when a MPDU discard by CMAC integrity check

	dot11RSNAStatsCMACReplays		Increments when a MPDU discarded by the CMAC replay error

	dot11RSNAStatsRobustMgmtCCMPReplays	Increments when a robust management frame discarded by CCMP replay error

	dot11RSNAStatsTKIPICVErrors		Increments when a MPDU discarded by TKIP ICV error

	dot11RSNAStatsTKIPReplays		Increments when a MPDU discarded by TKIP replay error

	dot11RSNAStatsCCMPDecryptErrors		Increments when a MPDU discarded by CCMP decryption error

	dot11RSNAStatsCCMPReplays		Increments when a MPDU discarded by CCMP replay error

	dot11TransmittedAMSDUCount		Increments when a A-MSDU transmitted successfully

	dot11FailedAMSDUCount			Increments when a A-MSDU not transmitted successfully

	dot11RetryAMSDUCount			Increments when a A-MSDU is successfully transmitted after one or more retransmissions

	dot11MultipleRetryAMSDUCount		Increments when a A-MSDU is successfully transmitted after more than one retransmissions

	dot11TransmittedOctetsInAMSDUCount	Increments by the number of octets in the frame body
						of an A-MSDU frame when an A-MSDU frame is successfully transmitted

	dot11AMSDUAckFailureCount		Increments when an acknowledgment to an A-MSDU is not received when expected.

	dot11ReceivedAMSDUCount			Increments when a A-MSDU frame received

	dot11ReceivedOctetsInAMSDUCount		Increments by the number of octets in the frame body
						of an A-MSDU frame when an A-MSDU frame is received

	dot11TransmittedAMPDUCount		Increments when an A-MPDU is transmitted

	dot11TransmittedMPDUsInAMPDUCount	Increments by the number of MPDUs in the A-MPDU when an A-MPDU is transmitted

	dot11TransmittedOctetsInAMPDUCount	Increments by the number of octets in the A-MPDU frame when an A-MPDU frame is transmitted

	dot11AMPDUReceivedCount			Increments when the MAC receives an A-MPDU from the PHY

	dot11MPDUInReceivedAMPDUCount		Increments by the number of MPDUs received in the
						A-MPDU when an A-MPDU is received

	dot11ReceivedOctetsInAMPDUCount		Increments by the number of octets in the A-MPDU
						frame when an A-MPDU frame is received

	dot11AMPDUDelimiterCRCErrorCount	Increments when an MPDU delimiter has a CRC error when this is the first
						CRC error in the received A-MPDU or when the previous delimiter has been decoded correctly

getsignal
	This command gets the last and average value of RSSI, SNR and NF of
	Beacon and Data.
	Note: This command is available only when STA is connected.

	where value of m is:
		1   -- RSSI (Receive Signal Strength Indication)
		2   -- SNR (Signal to Noise Ratio)
		3   -- NF (Noise Floor)
	where value of n is:
		1   -- Beacon last
		2   -- Beacon average
		3   -- Data last
		4   -- Data average

	Examples:
		mlanutl mlan0 getsignal 1        : Get the RSSI info (beacon last, beacon
		                                  average, data last and data average)
		mlanutl mlan0 getsignal 3 4      : Get the NF of data average
		mlanutl mlan0 getsignal 2 1      : Get the SNR of beacon last
		mlanutl mlan0 getsignal          : Get all of the signal info
		mlan0     getsignal:-32  -33  -35  -36  67  59  63  56  -99  -92  -98  -92
		RSSI info: beacon last -32, beacon average -33, data last -35, data average -36
		SNR info: beacon last 67, beacon average 59, data last 63, data average 56
		NF info: beacon last -99, beacon average -92, data last -98, data average -92

getsignalext
	This command gets the last and average value of RSSI, SNR and NF of
	Beacon and Data of spectific antenna path.
	Note: This command is available only when STA is connected.
              Driver will enable signalext and collect signal information for one second

	where value of m is:
		1   -- PATH A
		2   -- PATH B
		3   -- PATH A+B

	Examples:
        	mlanutl mlan0 getsignalext          :Get All path's signal.
        	mlanutl maln0 getsignalext 3        :Get path A+B signal
        	mlanutl maln0 getsignalext 1        :Get path A signal
		mlanutl mlan0 getsignalext 2        :Get path B signal

        PATH A: -46 -46 -49 -49 65 45 39 42 -111 -91 -88 -91

	PATH A: RSSI info: beacon last -46, beacon average -46, data last -49, data average -49
		SNR info: beacon last 65, beacon average 45, data last 39, data average 42
		NF info: beacon last -111, beacon average -91, data last -88, data average -91

signalextcfg
	This command is used to enable/disable signalext
	Usage:
    		mlanutl mlanX signalextcfg [m]
	where the value of [m] is:
		1 -- enable signalext in firmware
		0 -- disable signalext in firmware
	Examples:
		mlanutl mlan0 signalextcfg 1 : Enable signalext in firmware
		mlanutl mlan0 signalextcfg 0 : Disable signalext in firmware

getsignalextv2
	This command gets the last and average value of RSSI, SNR and NF of
	Beacon and Data of spectific antenna path.
	Note: This command is available only when STA is connected.
              "mlanutl mlanX signalextcfg 1" command needs to be issued before issuing this command

	where value of m is:
		1   -- PATH A
		2   -- PATH B
		3   -- PATH A+B

	Examples:
        	mlanutl mlan0 getsignalextv2          :Get All path's signal.
        	mlanutl maln0 getsignalextv2 3        :Get path A+B signal
        	mlanutl maln0 getsignalextv2 1        :Get path A signal
		mlanutl mlan0 getsignalextv2 2        :Get path B signal

        PATH A: -46 -46 -49 -49 65 45 39 42 -111 -91 -88 -91

	PATH A: RSSI info: beacon last -46, beacon average -46, data last -49, data average -49
		SNR info: beacon last 65, beacon average 45, data last 39, data average 42
		NF info: beacon last -111, beacon average -91, data last -88, data average -91

get_txpwrlimit
	This command is used to get the txpwrlimit table in FW
Usage:
 	mlanutl mlanX get_txpwrlimit <n> [raw_data_file]
	where <n>
		0:      Get 2.4G txpwrlimit table
		0x10:   Get 5G sub0 txpwrlimit table
		0x11:   Get 5G sub1 txpwrlimit table
		0x12    Get 5G sub2 txpwrlimit table
		0x1f    Get all 5G txpwrlimit table
		0xff    Get both 2G and 5G txpwrlimit table
	<raw_data_file> driver will save fw raw data to this file.

    Examples:
		mlanutl mlan0 get_txpwrlimit 0                      : Get 2G txpwrlimit table.
		mlanutl mlan0 get_txpwrlimit 0x10                   : Get 5G sub band0 txpwrlimit table
		mlanutl mlan0 get_txpwrlimit 0xff txpwrlimit.bin    : Get both 2G/5G txpwrlimit table and save to txpwrlimit.bin

aggrpriotbl
	This command is used set/get the priority table for AMPDU/AMSDU traffic per tid.
	This command can also be used to disable AMPDU/AMSDU for a given tid.
	In case of AMPDU this priority table will be used to setup block ack (to make
	sure the highest priority tid always uses AMPDU as we have limited AMPDU streams)

	where <m0> <n0> <m1> <n1> ... <m7> <n7>

	<mx> - This is priority for Tid0 for AMPDU packet. A priority could be any
		   values between 0 - 7, 0xff to disable aggregation.
	<nx> - This is priority for Tid0 for AMSDU packet. A priority could be any
		   values between 0 - 7, 0xff to disable aggregation.

	eg:
	mlanutl mlanX aggrpriotbl - This command will get the current Priority table for AMPDU and AMSDU.
						  <2 2 0 0 1 1 3 3 4 4 5 5 255 255 255 255>. This is read as
						  <"Prio for AMPDU for Tid0" "Prio for AMSDU for Tid0"
						   "Prio for AMPDU for Tid1" "Prio for AMSDU for Tid1" and so on
	mlanutl mlanX aggrpriotbl 2 2 0 0 1 1 3 3 4 4 5 5 255 255 255 255 -
						This will set the priority table for AMPDU and AMSDU
						Priority for Tid0/AMPDU = 2, Tid0/AMSDU = 2, Tid1/AMPDU = 0, Tid1/AMSDU = 0
						and so on. Aggregation for Tid6 and Tid7 are disabled.
						Here higher the priority number, higher the priority (i.e. 7
						has higher priority than 6). Similarly for AMSDU.
	mlanutl mlanX aggrpriotbl 0xff 2 0xff 0 0xff 1 0xff 3 0xff 4 0xff 5 0xff 0xff 0xff 0xff - This will disable
						AMPDU for all the TIDs but will still keep AMSDU enabled to Tid0 to Tid5

	The default setting is 2 255 0 255 1 255 3 255 4 255 5 255 255 255 255 255.

	A delBA should be seen in case a disable happens on a TID for which AMPDU stream
	is currently setup.

	Note:- This command should only be issue in disconnected state.

addbapara
	This command can be used to update the default ADDBA parameters.

	where <m> is <timeout>
	<timeout> - This is the block ack timeout for ADDBA request.
		0 : Disable (recommended for throughput test)
		1 - 65535 : Block Ack Timeout in TU

	where <n> is <txwinsize>
	<txwinsize> - Window size for ADDBA request. (16 is recommended and default value)

	where <o> is <rxwinsize>
	<rxwinsize> - Window size for ADDBA response. (48 is recommended and 32 is default value)
	              (16 is recommended for IWNCOMM AP in WAPI throughput test)

	Current window size limit for Tx as well as Rx is 1023.

	where <p> is <txamsdu>
	<txamsdu> - amsdu support for ADDBA request. (1 is default value)
            0: disable amsdu in ADDBA request
            1: enable amsdu in ADDBA request

	where <q> is <rxamsdu>
	<rxamsdu> - amsdu support for ADDBA response. (1 is default value)
            0: disable amsdu in ADDBA response
            1: enable amsdu in ADDBA response

	eg:
	mlanutl mlanX addbapara - This command will get the current addba params
	mlanutl mlanX addbapara 1000 64 8 0 0 - This will change the ADDBA timeout to (1000 * 1024) us,
			txwinsize to 64 and rxwinsize to 8 and disable amdsu in ADDBA request/response.

	The default setting is 65535 16 32 1 1.

	In case the ADDBA timeout value is updated then a ADDBA is sent for all streams
	to update the timeout value.

	In case txwinsize and/or rxwinsize is updated, the effect could only be seen on
	next ADDBA request/response. The current streams will not be affected with this
	change.

	In case of txamsdu/rxamsdu is updated, the effect could only be seen on
	next ADDBA request/response. The current streams will not be affected with this
	change. AMSDU in AMPDU stream will be enabled when AP support this feature
	and AMSDU is enabled in aggrpriotbl.

addbareject
	This command is used set/get the addbareject table for all the TIDs.
	This command can also be used to enable rejection of ADDBA requests for a given tid.

	where <m0> <m1> ... <m7>

	<mX> - This can be 0/1 for TidX. 1 enables rejection of ADDBA request for TidX and
		   0 would accept any ADDBAs for TidX.

	eg:
	mlanutl mlanX addbareject - This command will get the current table.
	    [0 0 0 0 0 0 0 0]. ADDBA would be accepted for all TIDs. This is the default state.

	mlanutl mlanX addbareject 0 0 1 1 0 0 0 0 - This command will accept ADDBA requests for
		Tid [0,1,4,5,6,7] and reject ADDBA requests for Tid [2,3]

	mlanutl mlanX addbareject 1 1 1 1 1 1 1 1 - This will enable rejection of ADDBA requests for
		all Tids.

	Note:- This command should only be issue in disconnected state.

vhtcfg
	This command is used to set and get various 11ac specific configuration
	for transmission and reception. For the SET operation, all paramaters
	may be applied. For the GET operation, only the first two parameters are applied.
	The 6th argument "rx_mcs_set" can be used to disbale/enable 802.11ac.

	where <j> is <band>
	<band> - This is the band setting for the vhtcfg
		0: Settings for both 2.4G and 5G bands (for SET operation, 11N BW only)
		1: Settings for 2.4G band (for 11N BW only)
		2: Settings for 5G band

	where <k> is <txrx>
	<txrx> - This parameter specifies the configuration of VHT operation for TX or/and VHT capabilities
		0: Unspecified
		1: configuration of VHT capabilities for Tx operations (STA only)
		2: configuration of VHT capabilities for association (STA only)
		3: configuration of VHT capabilities (uAP only)
	Note: For the STA, the VHT capabilities configuration is applied in association,
	      whereas the VHT operations configuration is actually used in Tx.

	where [l] is <bwcfg>
	<bwcfg> - This parameter specifies the bandwidth (BW) configuration
		  applied to the vhtcfg.
	If <txrx> is 1/3 (Tx operations),
		0: Tx BW follows the BW (20/40 MHz) from 11N CFG
		1: Tx BW follows the BW (80/160/80+80 MHz) from VHT Capabilities
		   defined in <vhtcap> below for 5G band.
	If <txrx> is 2 (association),
		0: Rx BW follows the BW (20/40 MHz) from 11N CFG
		1: Rx BW follows the BW (80/160/80+80 MHz) from VHT Capabilities
		   defined in <vhtcap> below for 5G band.

	where [m] is <vhtcap>
	<vhtcap> - This parameter specifies the VHT capabilities info if <txrx> is 2 (association)
		   or the VHT Tx operations if <txrx> is 1 (Tx operations).
		   The VHT Tx operation should be a subset of VHT capabilities for association.
		   It is a bitmap and should be used as follows:

		Bit 31-30: Reserved and set to 0
		Bit 29:    TX antenna pattern consistency
			   1: antenna pattern does not change
			   0: antenna pattern might change
		Bit 28:    RX antenna pattern consistency
			   1: antenna pattern does not change
			   0: antenna pattern might change
		Bit 27-26: VHT link adaptation capable
			   0: no feedback of VHT MFB from the STA
			   1: unsolicted feedback of VHT MFB from the STA
			   2: both response and unsolicted feedback of VHT MFB
			      from the STA
			   3: reserved and set to 0
		Bit 25-23: Maximum A-MPDU length exponent
		Bit 22:    +HTC-VHT capable (1: enable. 0 disable)
		Bit 21:    VHT TXOP PS
		Bit 20:    MU beamformee capable (1: enable. 0 disable)
		Bit 19:    MU beamformer capable (1: enable. 0 disable)
		Bit 18-16: Number of sounding dimensions (set to maximum-1
			   if Bit 11 is 1. Otherwise, reserved and set to 0)
		Bit 15-13: Compressed steering number of beamformer
			   antennas supported (set to maximum-1 if Bit 12 is 1.
			   Otherwise, reserved and set to 0)
		Bit 12:    SU beamformee capable (1: enable. 0 disable)
		Bit 11:    SU beamformer capable (1: enable. 0 disable)
		Bit 10-8:  Rx STBC
			   0: no support
			   1: support of 1 spatial stream
			   2: support of 1-2 streams
			   3: support of 1-3 spatial streams
			   4: support of 1-4 spatial streams
			   5-7: reserved and set to 0
		Bit 7:     TX STBC (1: enable. 0 disable)
		Bit 6:     Short GI for 160 and 80+80 MHz (1: enable. 0 disable)
		Bit 5:     Short GI for 80 MHz (1: enable. 0 disable)
		Bit 4:     Rx LDPC (1: enable. 0 disable)
		Bit 3-2:   Supported channel width set.
			   0: no support of either 160 or 80+80 MHz.
			   1: support of 160 MHz
			   2: support of both 160 and 80+80 MHz.
			   3: reserved and set to 0.
		Bit 1-0:   Maximum MPDU length
			   0: 3895 octets.
			   1: 7991 octets.
			   2: 11454 octets.
			   3: reserved and set to 0.

	Note: for the STA, if <txrx> is 1 (Tx operations), the bitmap for <vhtcap> may be simplied as follows:
		Bit 31-8: Reserved and set to 0
		Bit 7:    Tx STBC (1: enable. 0 disable)
		Bit 6:    Reserved and set to 0
		Bit 5:    Short GI for 80 Mhz (1: enable. 0 disable)
		Bit 4:    LDPC (1: enable. 0 disable)
		Bit 3-0:  Reserved and set to 0

	where [n] is <tx_mcs_map>,
	<tx_mcs_map> - This parameter specifies the TX MCS map. It may not be used for the STA if <txrx> is 1 (Tx operations).
		It is a bitmap and should be used as following
		Bit 15-0:  MCS map, which is defined as folows:
			Bit 15-14: Max MCS for 8 SS
			Bit 13-12: Max MCS for 7 SS
			Bit 11-10: Max MCS for 6 SS
			Bit 9-8:   Max MCS for 5 SS
			Bit 7-6:   Max MCS for 4 SS
			Bit 5-4:   Max MCS for 3 SS
			Bit 3-2:   Max MCS for 2 SS
			Bit 1-0:   Max MCS for 1 SS

	where [o] is <rx_mcs_map>.
	<rx_mcs_map> - This parameter specifies the RX MCS map. It may not be used for the STA if <txrx> is 1 (Tx operations).
		It is a bitmap with the same sructure as for <tx_mcs_map>
		rx_mcs_map = 0xffff : FW will disable 802.11ac
                rx_mcs_map = others : FW will enable 802.11ac

	Note: The user setting of vhtcap may be overwritten by the driver
	      if the setting of those fields is beyond the hardware capabilities.

	Examples:
		mlanutl mlan0 vhtcfg 2 1            : Get current VHT configuration in 5GHz for the STA.
		mlanutl mlan0 vhtcfg 2 2            : Get maximum VHT configuration in 5GHz for the STA.
		mlanutl mlan0 vhtcfg 2 1 1 0x000001f0
		    : Set the Tx operations configuration in 5GHz for the STA,
		      Tx BW follows the VHT Capabilities.
		mlanutl mlan0 vhtcfg 2 2 0 0x000001f0 0xfff5 0xfffa
		    : Set the VHT capabilities configuration in 5GHz for the STA,
		      the Tx supports MCS 0-8 for both 1 and 2 spatial streams,
		      while the Rx supports MCS 0-9 for both 1 and 2 spatial streams.
		mlanutl uap0 vhtcfg 2 3 0 0x000001f0 0xfffa 0xfffa
		    : Set the current/maximum VHT configuration in 5GHz for the uAP.
		      Both Tx and Rx supports MCS 0-9 for both 1 and 2 spatial streams.
		mlanutl uap0 vhtcfg 2 3 0 0x000001b0
		    : Set the VHT capability information in 5GHz for the uAP, and keep the Tx/Rx MCS Map same as before.

dyn_bw
	This command is used to set/get dynamic bandwidth.

	Usage:
		mlanutl mlanX dyn_bw [n]

	where <n>
           [BIT0]
                 0 = TxInfo Indicated BW Disable
                 1 = TxInfo Indicated BW Enable
           [BIT1]
                 0 = TxInfo Dynamatic BW Disable
                 1 = TxInfo Dynamatic BW Enable
           [BIT2]
                 0 = TxInfo Force send RTS Disable
                 1 = TxInfo Force send RTS Enable
           [BIT3]
                 0 = Mac Dynamic BW Operation Mode Disable (Static BW Operation Mode)
                 1 = Mac Dynamic BW Operation Mode Enable
           other bits reserved.

        If no parameter provided, get is performed.

	Examples:
		mlanutl mlan0 dyn_bw 0x1       : Enable TxInfo Indicated BW
		mlanutl mlan0 dyn_bw           : get current setting

httxcfg
	This command is used to configure various 11n specific configuration
	for transmit (such as Short GI, Channel BW and Green field support)

	where <m> is <txcfg>
	This is a bitmap and should be used as following
		Bit 15-8: Reserved set to 0
		Bit 7: STBC enable/disable
		Bit 6: Short GI in 40 Mhz enable/disable
		Bit 5: Short GI in 20 Mhz enable/disable
		Bit 4: Green field enable/disable
		Bit 3-2: Reserved set to 1
		Bit 1: 20/40 Mhz enable disable.
		Bit 0: LDPC enable/disable

	When Bit 1 is set then firmware could transmit in 20Mhz or 40Mhz based
	on rate adaptation. When this bit is reset then firmware will only
	transmit in 20Mhz.

	where <n> is <band>
	<band> - This is the band info for <txcfg> settings.
		0: Settings for both 2.4G and 5G bands
		1: Settings for 2.4G band
		2: Settings for 5G band

	Example:
		mlanutl mlanX httxcfg
		This will display HT Tx configuration for 2.4G and 5G band.

		mlanutl mlanX httxcfg 0x62
		This will enable 20/40 and Short GI but will disable Green field for 2.4G and 5G band.

		mlanutl mlanX httxcfg 0x30 1
		This will enable Short GI 20 Mhz and Green field for 2.4G band.

	The default value is 0x20 for 2.4G and 0x62 for 5G.

	Note:- If 20/40 MHz support is disabled in htcapinfo, device will not transmit
	in 40 MHz even 20/40 MHz is enabled in httxcfg.

htcapinfo
	This command is used to configure some of parameters in HTCapInfo IE
	(such as Short GI, Channel BW, and Green field support)

	where <m> is <capinfo>
	<capinfo> - This is a bitmap and should be used as following
		Bit 29: Green field enable/disable
		Bit 26: Rx STBC Support enable/disable. (As we support
			single spatial stream only 1 bit is used for Rx STBC)
		Bit 25: Tx STBC support enable/disable.
		Bit 24: Short GI in 40 Mhz enable/disable
		Bit 23: Short GI in 20 Mhz enable/disable
		Bit 22: Rx LDPC enable/disable
		Bit 17: 20/40 Mhz enable disable.
		Bit  8: Enable/disable 40Mhz Intolarent bit in ht capinfo.
		        0 will reset this bit and 1 will set this bit in
		        htcapinfo attached in assoc request.
		All others are reserved and should be set to 0.

	Setting of any other bits will return error.

	where <n> is <band>
	<band> - This is the band info for <capinfo> settings.
		0: Settings for both 2.4G and 5G bands
		1: Settings for 2.4G band
		2: Settings for 5G band

	Example:
		mlanutl mlanX htcapinfo
		This will display HT capabilties information.
		If the information for 2.4G and 5G is different,
		the first value is for 2.4G and the second value is for 5G.
		Otherwise, it will display a single value for both bands.

		mlanutl mlanX htcapinfo 0x1820000
		This will enable Short GI, Channel BW to 20/40 and disable Green field support for 2.4G and 5G band.

		mlanutl mlanX htcapinfo 0x800000 2
		This will enable Short GI, Channel BW to 20 only, No Rx STBC support and disable Green field support for 5G band.

	The default value is 0x4800000 for 2.4G and 0x5820000 for 5G.

	Note:- This command can be issued any time but it will only come to effect from
	next association. (as HTCapInfo is sent only during Association).

11axcfg
	This command is used to config 11ax HE capability using conf file.

     Usage:
             mlanutl mlanX 11axcfg [conf file]

     Example:
        mlanutl mlan0 11axcfg config/11axcfg.conf
        mlanutl uap0  11axcfg config/11axcfg.conf

11axcmd
    This command is used to config 11ax HE capability using command.

    Usage:
            mlanutl <mlanX|uapX> 11axcmd <subcmd> [value_1] [value_2]
            <subcmd = tx_omi > :     set/get omi value
                                     used for OMI transmission in MAC header HTC+ field, please see 11ax spec for OMI definition
                                     set OMI when [value_1 = <omi>], where <omi> is defined as:
                                       Bit 0-2: Rx NSS
                                       Bit 3-4: Channel Width
                                       Bit 6  : Tx NSTS (applies to client mode only)
                                       All other bits are not supported currently.
                                     get OMI without value_1 and value_2

            <subcmd = obssnbru_toltime> :  set/get OBSS narrow band RU tolerance time value in seconds
                                           set tolerance time when [value_1 = <time>], where <time> indicates:
                                           the minimum time that needs to pass since the reception of the last beacon frame from an OBSS AP that
                                           did not indicate tolerance to narrow bandwidth RU in OFDMA before the STA transmits an HE TB PPDU in a
                                           26-tine RU allocated by a trigger frame from the HE AP.
                                           valid value range [1..3600] in seconds. Any value more than 3600 will disable this feature.
                                           By default this feature is currently disabled.
    Example :
            mlanutl mlan0 11axcmd tx_omi 0x41            : set omi value to 0x41
            mlanutl mlan0 11axcmd tx_omi                 : get omi value
            mlanutl mlan0 11axcmd obssnbru_toltime 1800  : set OBSSNBRU tolerance time to 1800 seconds
            mlanutl mlan0 11axcmd obssnbru_toltime 3601  : disable OBSSNBRU tolerance time
            mlanutl mlan0 11axcmd obssnbru_toltime       : get OBSSNBRU tolerance time

txratecfg
	This command is used to set/get the transmit data rate.

	Note:
	1) The data rate can be set only after association.

	2) If the reassoc is OFF driver reset the data rate to auto if the connection state is disconnected.
	Please note that user has to re-issue the set data rate command if the driver is disconnected.

	3) If the reassoc is ON driver remembers the data rate set by the user, if the driver is
	disconnected user does not have to re-issue the set data rate again.

	4) Parameter [o] is optional. If [o] is not given, it will be set as 0xffff.

	Where
	[l] is <format>
	<format> - This parameter specifies the data rate format used in this command
		0:    LG
		1:    HT
		2:    VHT
		3:    HE
		0xff: Auto

	[m] is <index>
	<index> - This parameter specifies the rate or MCS index
	If <format> is 0 (LG),
		0	1 Mbps
		1	2 Mbps
		2	5.5 Mbps
		3	11 Mbps
		4	6 Mbps
		5	9 Mbps
		6	12 Mbps
		7	18 Mbps
		8	24 Mbps
		9	36 Mbps
		10	48 Mbps
		11	54 Mbps
	If <format> is 1 (HT),
		0	MCS0
		1	MCS1
		2	MCS2
		3	MCS3
		4	MCS4
		5	MCS5
		6	MCS6
		7	MCS7
		8	MCS8
		9	MCS9
		10	MCS10
		11	MCS11
		12	MCS12
		13	MCS13
		14	MCS14
		15	MCS15
	If <format> is 2 (VHT),
		0	MCS0
		1	MCS1
		2	MCS2
		3	MCS3
		4	MCS4
		5	MCS5
		6	MCS6
		7	MCS7
		8	MCS8
		9	MCS9
	If <format> is 3 (HE),
		0	MCS0
		1	MCS1
		2	MCS2
		3	MCS3
		4	MCS4
		5	MCS5
		6	MCS6
		7	MCS7
		8	MCS8
		9	MCS9
		10	MCS10
		11	MCS11
	[n] is <nss>
	<nss> - This parameter specifies the NSS. It is valid for VHT
	If <format> is 2 (VHT),
		1	NSS1
		2	NSS2
	[n] is <nss>
	<nss> - This parameter specifies the NSS. It is valid for HE
	If <format> is 3 (HE),
		1	NSS1
		2	NSS2
	[o] is <rate setting, only support 9098/9097/9xxx chips>
        Bit0 - 1: indicate preambleType
          For legacy 11b: preemble type
             00    = long
             01    = short
             10/11  = reserved
          For legacy 11g: reserved
          For 11n: Green field PPDU indicator
             00 = HT-mix
             01 = HT-GF
             10/11 = reserved.
          For 11ac: reserved.
          For 11ax:
             00 = HE-SU
             01 = HE-EXT-SU
             others are reserved

        Bit 2 - 4 : indicate BW:
          For HE ER:
            0 = 242-tone RU
            1 =  upper frequency 106-tone RU within the primary 20 MHz
          Otherwise:
            0 = 20 MHz
            1 = 40 MHz
            2 = 80 MHz
            3 = 160 MHz

        Bit 5 -6: indicate LTF + GI size
          For HT:
            0 = normal
            1 = Short GI
          For VHT:
            01 = Short GI
            11 = Short GI and Nsym mod 10=9
            00 = otherwise
          For HE:
            0 = 1xHELTF + GI0.8us
            1 = 2xHELTF + GI0.8us
            2 = 2xHELTF + GI1.6us
            3 = 4xHELTF + GI0.8us if DCM = 1 and STBC = 1
                4xHELTF + GI3.2us, otherwise.

        Bit 7: Indicate  STBC:
            0 = no STBC
            1 = STBC

        Bit 8: indicate DCM:
            0 = no DCM
            1 = DCM

        Bit 9: indicate coding:
            0 = BCC
            1 = LDPC

        Bit 10 - 11: reserved.

        Bit 12 - 13: Indicate maxPE
            Max packet extension
            0 - 0 usec
            1 - 8 usec
            2 - 16 usec.

        Bit 14 - 15: reserved.

        0xffff: Auto

	Examples:
		mlanutl mlan0 txratecfg          : Read the current data rate setting
		mlanutl mlan0 txratecfg 0 3      : Set fixed Tx rate to 11 Mbps
		mlanutl mlan0 txratecfg 0 11     : Set fixed Tx rate to 54 Mbps
		mlanutl mlan0 txratecfg 1 3      : Set fixed Tx rate to MCS3
		mlanutl mlan0 txratecfg 2 3 2    : Set fixed Tx rate to MCS3 for NSS2
		mlanutl mlan0 txratecfg 3 3 2    : Set 11AX fixed Tx rate to MCS3 for NSS2
		mlanutl mlan0 txratecfg 3 5 2 0x2282   : Set 11AX fixed Tx rate to MCS5 for NSS2, and Preamble type is 2, BW is 0, LTF + GI size 0
                                                         STBC is 1, DMC is 0, Coding is 1, maxPE is 2.
		mlanutl mlan0 txratecfg 0xff     : Disable fixed rate and uses auto rate

