Browse Source

qcacld-3.0: Add interface files for dynamic antenna selection

Add interface files for dynamic antenna selection feature

CRs-Fixed: 931250
Change-Id: Ieafe368a25c3a69e32cd5de6822ef84130528096
Archana Ramachandran 9 years ago
parent
commit
d41c3ed58c

+ 39 - 0
core/hdd/inc/wlan_hdd_main.h

@@ -146,6 +146,9 @@
 /* Scan Req Timeout */
 #define WLAN_WAIT_TIME_SCAN_REQ 100
 
+#define WLAN_WAIT_TIME_ANTENNA_MODE_REQ 3000
+#define WLAN_WAIT_TIME_SET_DUAL_MAC_CFG 1500
+
 #define MAX_NUMBER_OF_ADAPTERS 4
 
 #define MAX_CFG_STRING_LEN  255
@@ -1112,6 +1115,36 @@ typedef struct {
 
 } fw_log_info;
 
+/**
+ * enum antenna_mode - number of TX/RX chains
+ * @HDD_ANTENNA_MODE_INVALID: Invalid mode place holder
+ * @HDD_ANTENNA_MODE_1X1: Number of TX/RX chains equals 1
+ * @HDD_ANTENNA_MODE_2X2: Number of TX/RX chains equals 2
+ * @HDD_ANTENNA_MODE_MAX: Place holder for max mode
+ */
+enum antenna_mode {
+	HDD_ANTENNA_MODE_INVALID,
+	HDD_ANTENNA_MODE_1X1,
+	HDD_ANTENNA_MODE_2X2,
+	HDD_ANTENNA_MODE_MAX
+};
+
+/**
+ * enum smps_mode - SM power save mode
+ * @HDD_SMPS_MODE_STATIC: Static power save
+ * @HDD_SMPS_MODE_DYNAMIC: Dynamic power save
+ * @HDD_SMPS_MODE_RESERVED: Reserved
+ * @HDD_SMPS_MODE_DISABLED: Disable power save
+ * @HDD_SMPS_MODE_MAX: Place holder for max mode
+ */
+enum smps_mode {
+	HDD_SMPS_MODE_STATIC,
+	HDD_SMPS_MODE_DYNAMIC,
+	HDD_SMPS_MODE_RESERVED,
+	HDD_SMPS_MODE_DISABLED,
+	HDD_SMPS_MODE_MAX
+};
+
 #ifdef WLAN_FEATURE_OFFLOAD_PACKETS
 /**
  * struct hdd_offloaded_packets - request id to pattern id mapping
@@ -1372,6 +1405,10 @@ struct hdd_context_s {
 	 * at runtime and intersecting it with target capab before updating.
 	 */
 	uint32_t fine_time_meas_cap_target;
+	/* completion variable to indicate set antenna mode complete*/
+	struct completion set_antenna_mode_cmpl;
+	/* Current number of TX X RX chains being used */
+	enum antenna_mode current_antenna_mode;
 };
 
 /*---------------------------------------------------------------------------
@@ -1566,6 +1603,8 @@ static inline void wlan_hdd_stop_sap(hdd_adapter_t *ap_adapter) {}
 static inline void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter) {}
 #endif
 
+void wlan_hdd_soc_set_antenna_mode_cb(enum set_antenna_mode_status status);
+
 #ifdef QCA_CONFIG_SMP
 int wlan_hdd_get_cpu(void);
 #else

+ 49 - 0
core/mac/inc/sir_api.h

@@ -452,6 +452,31 @@ struct sir_set_dual_mac_cfg {
 	struct sir_dual_mac_config set_dual_mac;
 };
 
+/**
+ * struct sir_antenna_mode_param - antenna mode param
+ * @num_tx_chains: Number of TX chains
+ * @num_rx_chains: Number of RX chains
+ * @reason: Reason for setting antenna mode
+ * @set_antenna_mode_resp: callback to set antenna mode command
+ */
+struct sir_antenna_mode_param {
+	uint32_t num_tx_chains;
+	uint32_t num_rx_chains;
+	void *set_antenna_mode_resp;
+};
+
+/**
+ * struct sir_set_antenna_mode - Set antenna mode request
+ * @message_type: Message type
+ * @length: Length of the message
+ * @set_antenna_mode: Params containing antenna mode params
+ */
+struct sir_set_antenna_mode {
+	uint16_t message_type;
+	uint16_t length;
+	struct sir_antenna_mode_param set_antenna_mode;
+};
+
 /* / BSS type enum used in while scanning/joining etc */
 typedef enum eSirBssType {
 	eSIR_INFRASTRUCTURE_MODE,
@@ -3258,6 +3283,29 @@ struct sir_dual_mac_config_resp {
 	uint32_t status;
 };
 
+/**
+ * enum set_antenna_mode_status - Status of set antenna mode
+ * command
+ * @SET_ANTENNA_MODE_STATUS_OK: command successful
+ * @SET_ANTENNA_MODE_STATUS_EINVAL: invalid antenna mode
+ * @SET_ANTENNA_MODE_STATUS_ECANCELED: mode change cancelled
+ * @SET_ANTENNA_MODE_STATUS_ENOTSUP: mode not supported
+ */
+enum set_antenna_mode_status {
+	SET_ANTENNA_MODE_STATUS_OK,
+	SET_ANTENNA_MODE_STATUS_EINVAL,
+	SET_ANTENNA_MODE_STATUS_ECANCELED,
+	SET_ANTENNA_MODE_STATUS_ENOTSUP,
+};
+
+/**
+ * struct sir_antenna_mode_resp - set antenna mode response
+ * @status: Status of setting the antenna mode
+ */
+struct sir_antenna_mode_resp {
+	enum set_antenna_mode_status status;
+};
+
 #ifdef WLAN_WAKEUP_EVENTS
 /*---------------------------------------------------------------------------
    tSirWakeReasonInd
@@ -5157,6 +5205,7 @@ typedef void (*hw_mode_transition_cb)(uint32_t old_hw_mode_index,
 		struct sir_vdev_mac_map *vdev_mac_map);
 typedef void (*dual_mac_cb)(uint32_t status, uint32_t scan_config,
 		uint32_t fw_mode_config);
+typedef void (*antenna_mode_cb)(uint32_t status);
 
 /**
  * struct sir_nss_update_request

+ 2 - 0
core/mac/inc/wni_api.h

@@ -246,6 +246,8 @@ enum eWniMsgTypes {
 	eWNI_SME_EXT_CHANGE_CHANNEL_IND,
 	eWNI_SME_REGISTER_MGMT_FRAME_CB,
 	eWNI_SME_HT40_OBSS_SCAN_IND, /* START and UPDATE OBSS SCAN Indication*/
+	eWNI_SME_SET_ANTENNA_MODE_REQ,
+	eWNI_SME_SET_ANTENNA_MODE_RESP,
 	eWNI_SME_MSG_TYPES_END
 };
 

+ 3 - 1
core/mac/src/include/sir_params.h

@@ -358,9 +358,11 @@ typedef struct sSirMbMsgP2p {
 
 #ifdef FEATURE_WLAN_SCAN_PNO
 #define SIR_HAL_SET_PNO_REQ                (SIR_HAL_ITC_MSG_TYPES_BEGIN + 119)
-/* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 120) is unused */
 #endif /* FEATURE_WLAN_SCAN_PNO */
 
+#define SIR_HAL_SOC_ANTENNA_MODE_REQ        (SIR_HAL_ITC_MSG_TYPES_BEGIN + 120)
+#define SIR_HAL_SOC_ANTENNA_MODE_RESP       (SIR_HAL_ITC_MSG_TYPES_BEGIN + 121)
+
 /* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 122) is unused */
 
 #ifdef WLAN_FEATURE_PACKET_FILTERING

+ 2 - 0
core/sme/inc/sme_api.h

@@ -1003,6 +1003,8 @@ QDF_STATUS sme_set_peer_authorized(uint8_t *peer_addr,
 				   uint32_t vdev_id);
 QDF_STATUS sme_soc_set_dual_mac_config(tHalHandle hal,
 		struct sir_dual_mac_config msg);
+QDF_STATUS sme_soc_set_antenna_mode(tHalHandle hal,
+		struct sir_antenna_mode_param *msg);
 
 void sme_set_scan_disable(tHalHandle h_hal, int value);
 void sme_setdef_dot11mode(tHalHandle hal);

+ 2 - 0
core/sme/inc/sme_inside.h

@@ -191,6 +191,7 @@ typedef struct tagSmeCmd {
 		struct sir_hw_mode set_hw_mode_cmd;
 		struct s_nss_update_cmd nss_update_cmd;
 		struct sir_dual_mac_config set_dual_mac_cmd;
+		struct sir_antenna_mode_param set_antenna_mode_cmd;
 	} u;
 } tSmeCmd;
 
@@ -282,6 +283,7 @@ QDF_STATUS csr_create_roam_scan_channel_list(tpAniSirGlobal pMac,
 ePhyChanBondState csr_convert_cb_ini_value_to_phy_cb_state(uint32_t cbIniValue);
 void active_list_cmd_timeout_handle(void *userData);
 void csr_process_set_dual_mac_config(tpAniSirGlobal mac, tSmeCmd *command);
+void csr_process_set_antenna_mode(tpAniSirGlobal mac, tSmeCmd *command);
 void csr_process_set_hw_mode(tpAniSirGlobal mac, tSmeCmd *command);
 void csr_process_nss_update_req(tpAniSirGlobal mac, tSmeCmd *command);
 

+ 1 - 0
core/sme/inc/sme_internal.h

@@ -92,6 +92,7 @@ typedef enum eSmeCommandType {
 	e_sme_command_set_hw_mode,
 	e_sme_command_nss_update,
 	e_sme_command_set_dual_mac_config,
+	e_sme_command_set_antenna_mode,
 } eSmeCommandType;
 
 typedef enum eSmeState {

+ 2 - 0
core/wma/inc/wma.h

@@ -1972,6 +1972,8 @@ QDF_STATUS wma_get_scan_id(uint32_t *scan_id);
 
 QDF_STATUS wma_send_soc_set_dual_mac_config(tp_wma_handle wma_handle,
 		struct sir_dual_mac_config *msg);
+QDF_STATUS wma_send_pdev_set_antenna_mode(tp_wma_handle wma_handle,
+		struct sir_antenna_mode_param *msg);
 QDF_STATUS wma_crash_inject(tp_wma_handle wma_handle, uint32_t type,
 			uint32_t delay_time_ms);