diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index 0c92e0c..2372a7a 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -688,7 +688,7 @@
 	uint8_t vdev_id = pdel_sta_self_req_param->session_id;
 	struct wma_txrx_node *iface = &wma_handle->interfaces[vdev_id];
 
-	if (cdf_atomic_read(&iface->bss_status) == WMA_BSS_STATUS_STARTED) {
+	if (qdf_atomic_read(&iface->bss_status) == WMA_BSS_STATUS_STARTED) {
 		WMA_LOGA("BSS is not yet stopped. Defering vdev(vdev id %x) deletion",
 			vdev_id);
 		iface->del_staself_req = pdel_sta_self_req_param;
@@ -812,7 +812,7 @@
 		}
 		bcn->seq_no = MIN_SW_SEQ;
 		cdf_spinlock_init(&bcn->lock);
-		cdf_atomic_set(&wma->interfaces[resp_event->vdev_id].bss_status,
+		qdf_atomic_set(&wma->interfaces[resp_event->vdev_id].bss_status,
 			       WMA_BSS_STATUS_STARTED);
 		WMA_LOGD("%s: AP mode (type %d subtype %d) BSS is started",
 			 __func__, wma->interfaces[resp_event->vdev_id].type,
@@ -951,7 +951,7 @@
 	}
 
 	if ((resp_event->vdev_id <= wma->max_bssid) &&
-	    (cdf_atomic_read
+	    (qdf_atomic_read
 		(&wma->interfaces[resp_event->vdev_id].vdev_restart_params.hidden_ssid_restart_in_progress))
 	    && (wma_is_vdev_in_ap_mode(wma, resp_event->vdev_id) == true)) {
 		WMA_LOGE("%s: vdev restart event recevied for hidden ssid set using IOCTL",
@@ -963,7 +963,7 @@
 			WMA_LOGE("%s : failed to send vdev up", __func__);
 			return -EEXIST;
 		}
-		cdf_atomic_set(&wma->interfaces[resp_event->vdev_id].
+		qdf_atomic_set(&wma->interfaces[resp_event->vdev_id].
 			       vdev_restart_params.
 			       hidden_ssid_restart_in_progress, 0);
 		wma->interfaces[resp_event->vdev_id].vdev_up = true;
@@ -1409,7 +1409,7 @@
 	TAILQ_FOREACH_REVERSE(peer, &vdev->peer_list, peer_list_t, peer_list_elem) {
 		if (temp) {
 			cdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
-			if (cdf_atomic_read(&temp->delete_in_progress) == 0) {
+			if (qdf_atomic_read(&temp->delete_in_progress) == 0) {
 				wma_remove_peer(wma, temp->mac_addr.raw,
 					vdev_id, temp, false);
 			}
@@ -1480,7 +1480,7 @@
 			      peer_list_elem) {
 		if (temp) {
 			cdf_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
-			if (cdf_atomic_read(&temp->delete_in_progress) == 0) {
+			if (qdf_atomic_read(&temp->delete_in_progress) == 0) {
 				wma_remove_peer(wma, temp->mac_addr.raw,
 						vdev_id, temp, false);
 			}
@@ -1598,7 +1598,7 @@
 	buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
 	if (!buf) {
 		WMA_LOGE("%s : wmi_buf_alloc failed", __func__);
-		cdf_atomic_set(&intr[sessionId].vdev_restart_params.
+		qdf_atomic_set(&intr[sessionId].vdev_restart_params.
 			       hidden_ssid_restart_in_progress, 0);
 		return;
 	}
@@ -1649,7 +1649,7 @@
 				   WMI_VDEV_RESTART_REQUEST_CMDID);
 	if (ret < 0) {
 		WMA_LOGE("%s: Failed to send vdev restart command", __func__);
-		cdf_atomic_set(&intr[sessionId].vdev_restart_params.
+		qdf_atomic_set(&intr[sessionId].vdev_restart_params.
 			       hidden_ssid_restart_in_progress, 0);
 		cdf_nbuf_free(buf);
 	}
@@ -1692,7 +1692,7 @@
 	resp_event = param_buf->fixed_param;
 
 	if ((resp_event->vdev_id <= wma->max_bssid) &&
-	    (cdf_atomic_read
+	    (qdf_atomic_read
 		     (&wma->interfaces[resp_event->vdev_id].vdev_restart_params.
 		     hidden_ssid_restart_in_progress))
 	    && ((wma->interfaces[resp_event->vdev_id].type == WMI_VDEV_TYPE_AP)
@@ -1770,7 +1770,7 @@
 		ol_txrx_vdev_unpause(iface->handle,
 				     OL_TXQ_PAUSE_REASON_VDEV_STOP);
 		iface->pause_bitmap &= ~(1 << PAUSE_TYPE_HOST);
-		cdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STOPPED);
+		qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STOPPED);
 		WMA_LOGD("%s: (type %d subtype %d) BSS is stopped",
 			 __func__, iface->type, iface->sub_type);
 		bcn = wma->interfaces[resp_event->vdev_id].beacon;
@@ -1942,7 +1942,7 @@
 		self_sta_req->type;
 	wma_handle->interfaces[self_sta_req->session_id].sub_type =
 		self_sta_req->sub_type;
-	cdf_atomic_init(&wma_handle->interfaces
+	qdf_atomic_init(&wma_handle->interfaces
 			[self_sta_req->session_id].bss_status);
 
 	if (((self_sta_req->type == WMI_VDEV_TYPE_AP) &&
@@ -2777,7 +2777,7 @@
 		ol_txrx_vdev_unpause(iface->handle,
 				     OL_TXQ_PAUSE_REASON_VDEV_STOP);
 		iface->pause_bitmap &= ~(1 << PAUSE_TYPE_HOST);
-		cdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STOPPED);
+		qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STOPPED);
 		WMA_LOGD("%s: (type %d subtype %d) BSS is stopped",
 			 __func__, iface->type, iface->sub_type);
 
@@ -4149,7 +4149,7 @@
 	if (params->nonRoamReassoc) {
 		ol_txrx_peer_state_update(pdev, params->bssId,
 					  ol_txrx_peer_state_auth);
-		cdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STARTED);
+		qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STARTED);
 		iface->aid = params->assocId;
 		goto out;
 	}
@@ -4188,7 +4188,7 @@
 			 * following which are useful for LFR3.0.*/
 			ol_txrx_peer_state_update(pdev, params->bssId,
 						  ol_txrx_peer_state_auth);
-			cdf_atomic_set(&iface->bss_status,
+			qdf_atomic_set(&iface->bss_status,
 				       WMA_BSS_STATUS_STARTED);
 			iface->aid = params->assocId;
 			WMA_LOGE("LFR3:statype %d vdev %d aid %d bssid %pM",
@@ -4294,7 +4294,7 @@
 		wma->interfaces[params->smesessionId].vdev_up = true;
 	}
 
-	cdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STARTED);
+	qdf_atomic_set(&iface->bss_status, WMA_BSS_STATUS_STARTED);
 	WMA_LOGD("%s: STA mode (type %d subtype %d) BSS is started",
 		 __func__, iface->type, iface->sub_type);
 	/* Sta is now associated, configure various params */
diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c
index dee39dd..5773643 100644
--- a/core/wma/src/wma_features.c
+++ b/core/wma/src/wma_features.c
@@ -3102,7 +3102,7 @@
 static inline void wma_set_wow_bus_suspend(tp_wma_handle wma, int val)
 {
 
-	cdf_atomic_set(&wma->is_wow_bus_suspended, val);
+	qdf_atomic_set(&wma->is_wow_bus_suspended, val);
 }
 
 
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index 28b98cd..76ae27d 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -1840,8 +1840,8 @@
 	qdf_list_create(&wma_handle->wma_hold_req_queue,
 		      MAX_ENTRY_HOLD_REQ_QUEUE);
 	cdf_spinlock_init(&wma_handle->wma_hold_req_q_lock);
-	cdf_atomic_init(&wma_handle->is_wow_bus_suspended);
-	cdf_atomic_init(&wma_handle->scan_id_counter);
+	qdf_atomic_init(&wma_handle->is_wow_bus_suspended);
+	qdf_atomic_init(&wma_handle->scan_id_counter);
 
 	/* Register vdev start response event handler */
 	wmi_unified_register_event_handler(wma_handle->wmi_handle,
diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c
index e38234e..02cbc2e 100644
--- a/core/wma/src/wma_mgmt.c
+++ b/core/wma/src/wma_mgmt.c
@@ -2873,7 +2873,7 @@
 	}
 
 	intr[pReq->sessionId].vdev_restart_params.ssidHidden = pReq->ssidHidden;
-	cdf_atomic_set(&intr[pReq->sessionId].vdev_restart_params.
+	qdf_atomic_set(&intr[pReq->sessionId].vdev_restart_params.
 		       hidden_ssid_restart_in_progress, 1);
 
 	/* vdev stop -> vdev restart -> vdev up */
@@ -2885,7 +2885,7 @@
 							(1 << PAUSE_TYPE_HOST);
 	if (wmi_unified_vdev_stop_send(wma_handle->wmi_handle, pReq->sessionId)) {
 		WMA_LOGE("%s: %d Failed to send vdev stop", __func__, __LINE__);
-		cdf_atomic_set(&intr[pReq->sessionId].vdev_restart_params.
+		qdf_atomic_set(&intr[pReq->sessionId].vdev_restart_params.
 			       hidden_ssid_restart_in_progress, 0);
 		return;
 	}
diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c
index 66920c8..6dff2ec 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -6820,7 +6820,7 @@
 	}
 
 	/* host need to cycle through the lower 12 bits to generate ids */
-	*scan_id = cdf_atomic_inc_return(&wma->scan_id_counter) &
+	*scan_id = qdf_atomic_inc_return(&wma->scan_id_counter) &
 			WMA_SCAN_ID_MASK;
 	/*
 	 * Firmware expects the host scan request id appended
