소스 검색

qcacmn: Fix NDI create sequence

Create NDI vdev after adapter is added to back of hdd adapter list,
so that vdev create completion callback can identify right adapter
and set corresponding completion variable.

Change-Id: Id0d78a5e482c875fee346224f37c29a874814133
CRs-Fixed: 2252031
Naveen Rawat 7 년 전
부모
커밋
cb0a5b0bf4
2개의 변경된 파일7개의 추가작업 그리고 13개의 파일을 삭제
  1. 5 11
      os_if/linux/nan/src/os_if_nan.c
  2. 2 2
      umac/nan/core/inc/nan_public_structs.h

+ 5 - 11
os_if/linux/nan/src/os_if_nan.c

@@ -135,6 +135,7 @@ vendor_attr_policy[QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1] = {
 static int os_if_nan_process_ndi_create(struct wlan_objmgr_psoc *psoc,
 static int os_if_nan_process_ndi_create(struct wlan_objmgr_psoc *psoc,
 					struct nlattr **tb)
 					struct nlattr **tb)
 {
 {
+	int ret;
 	char *iface_name;
 	char *iface_name;
 	QDF_STATUS status;
 	QDF_STATUS status;
 	uint16_t transaction_id;
 	uint16_t transaction_id;
@@ -169,21 +170,14 @@ static int os_if_nan_process_ndi_create(struct wlan_objmgr_psoc *psoc,
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
-	nan_vdev = cb_obj.ndi_open(iface_name);
-
-	if (!nan_vdev) {
+	ret = cb_obj.ndi_open(iface_name);
+	if (ret) {
 		cfg80211_err("ndi_open failed");
 		cfg80211_err("ndi_open failed");
-		return -EINVAL;
+		return ret;
 	}
 	}
 
 
-	/*
-	 * Create transaction id is required to be saved since the firmware
-	 * does not honor the transaction id for create request
-	 */
-	ucfg_nan_set_ndp_create_transaction_id(nan_vdev, transaction_id);
-	ucfg_nan_set_ndi_state(nan_vdev, NAN_DATA_NDI_CREATING_STATE);
 
 
-	return cb_obj.ndi_start(wlan_vdev_get_id(nan_vdev));
+	return cb_obj.ndi_start(iface_name, transaction_id);
 }
 }
 
 
 static int os_if_nan_process_ndi_delete(struct wlan_objmgr_psoc *psoc,
 static int os_if_nan_process_ndi_delete(struct wlan_objmgr_psoc *psoc,

+ 2 - 2
umac/nan/core/inc/nan_public_structs.h

@@ -589,8 +589,8 @@ struct nan_callbacks {
 				   struct wlan_objmgr_vdev *vdev,
 				   struct wlan_objmgr_vdev *vdev,
 				   uint32_t type, void *msg);
 				   uint32_t type, void *msg);
 
 
-	struct wlan_objmgr_vdev* (*ndi_open)(char *iface_name);
-	int (*ndi_start)(uint8_t);
+	int (*ndi_open)(char *iface_name);
+	int (*ndi_start)(char *iface_name, uint16_t);
 	void (*ndi_close)(uint8_t);
 	void (*ndi_close)(uint8_t);
 	int (*ndi_delete)(uint8_t, char *iface_name, uint16_t transaction_id);
 	int (*ndi_delete)(uint8_t, char *iface_name, uint16_t transaction_id);
 	void (*drv_ndi_create_rsp_handler)(uint8_t,
 	void (*drv_ndi_create_rsp_handler)(uint8_t,