summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKomal Seelam <kseelam@codeaurora.org>2016-02-22 20:44:25 +0530
committerKomal Seelam <kseelam@codeaurora.org>2016-03-14 14:08:12 +0530
commit02cf2f8509b773bf6f81e6b03e7dee9b3ad75566 (patch)
tree2cc41de9338902b5a381bce57247d85cda0bf141
parent43301de9995ad84d6882368788ce46374250b248 (diff)
qcacmn: Refactor HIF to use Single HIF Context
Remove unwanted pointers to various HIF data structures. Use single HIF Context and dynamically typecast to required HIF data structures. Change-Id: I1e2f39455a23826d1eaa9785aa9f1bc3854a9cb2 CRs-Fixed: 967765
-rw-r--r--hif/inc/hif.h6
-rw-r--r--hif/src/ce/ce_api.h7
-rw-r--r--hif/src/ce/ce_bmi.c9
-rw-r--r--hif/src/ce/ce_diag.c30
-rw-r--r--hif/src/ce/ce_main.c78
-rw-r--r--hif/src/ce/ce_main.h1
-rw-r--r--hif/src/ce/ce_tasklet.c11
-rw-r--r--hif/src/hif_main.c29
-rw-r--r--hif/src/hif_main.h8
-rw-r--r--hif/src/pcie/hif_io32_pci.h4
-rw-r--r--hif/src/pcie/if_pci.c169
-rw-r--r--hif/src/pcie/if_pci.h1
-rw-r--r--hif/src/snoc/if_snoc.c6
13 files changed, 155 insertions, 204 deletions
diff --git a/hif/inc/hif.h b/hif/inc/hif.h
index a6b9cf6ba360..b717aa310eb6 100644
--- a/hif/inc/hif.h
+++ b/hif/inc/hif.h
@@ -223,12 +223,6 @@ struct ol_softc {
/* status of target init */
WLAN_INIT_STATUS wlan_init_status;
- /* Handles for Lower Layers : filled in at init time */
- hif_handle_t hif_hdl;
-#ifdef HIF_PCI
- struct hif_pci_softc *hif_sc;
-#endif
-
#ifdef WLAN_FEATURE_FASTPATH
int fastpath_mode_on; /* Duplicating this for data path efficiency */
#endif /* WLAN_FEATURE_FASTPATH */
diff --git a/hif/src/ce/ce_api.h b/hif/src/ce/ce_api.h
index ddd82e357b11..96cdc134d3f9 100644
--- a/hif/src/ce/ce_api.h
+++ b/hif/src/ce/ce_api.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -29,6 +29,8 @@
#define __COPY_ENGINE_API_H__
#include "ce_main.h"
+#include "hif_main.h"
+
/* TBDXXX: Use int return values for consistency with Target */
/* TBDXXX: Perhaps merge Host/Target-->common */
@@ -463,8 +465,9 @@ static inline void ce_pkt_error_count_incr(
struct HIF_CE_state *_hif_state,
enum ol_ath_hif_pkt_ecodes _hif_ecode)
{
+ struct ol_softc *scn = HIF_GET_SOFTC(_hif_state);
if (_hif_ecode == HIF_PIPE_NO_RESOURCE)
- (_hif_state->scn->pkt_stats.hif_pipe_no_resrc_count)
+ (scn->pkt_stats.hif_pipe_no_resrc_count)
+= 1;
}
diff --git a/hif/src/ce/ce_bmi.c b/hif/src/ce/ce_bmi.c
index 38b599175c39..05e815787945 100644
--- a/hif/src/ce/ce_bmi.c
+++ b/hif/src/ce/ce_bmi.c
@@ -88,7 +88,7 @@ void hif_bmi_send_done(struct CE_handle *copyeng, void *ce_context,
{
struct BMI_transaction *transaction =
(struct BMI_transaction *)transfer_context;
- struct ol_softc *scn = transaction->hif_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(transaction->hif_state);
#ifdef BMI_RSP_POLLING
/*
@@ -124,7 +124,7 @@ void hif_bmi_recv_data(struct CE_handle *copyeng, void *ce_context,
{
struct BMI_transaction *transaction =
(struct BMI_transaction *)transfer_context;
- struct ol_softc *scn = transaction->hif_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(transaction->hif_state);
transaction->bmi_response_length = nbytes;
transaction->bmi_transaction_flags |= BMI_RESP_RECV_DONE;
@@ -137,13 +137,14 @@ void hif_bmi_recv_data(struct CE_handle *copyeng, void *ce_context,
}
#endif
-CDF_STATUS hif_exchange_bmi_msg(struct ol_softc *scn,
+CDF_STATUS hif_exchange_bmi_msg(struct ol_softc *hif_ctx,
uint8_t *bmi_request,
uint32_t request_length,
uint8_t *bmi_response,
uint32_t *bmi_response_lengthp, uint32_t TimeoutMS)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
struct HIF_CE_pipe_info *send_pipe_info =
&(hif_state->pipe_info[BMI_CE_NUM_TO_TARG]);
struct CE_handle *ce_send_hdl = send_pipe_info->ce_hdl;
diff --git a/hif/src/ce/ce_diag.c b/hif/src/ce/ce_diag.c
index f524702503cc..a260085d5a08 100644
--- a/hif/src/ce/ce_diag.c
+++ b/hif/src/ce/ce_diag.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -51,9 +51,10 @@
#include "epping_main.h"
#include "cds_concurrency.h"
-void hif_dump_target_memory(struct ol_softc *scn, void *ramdump_base,
+void hif_dump_target_memory(struct ol_softc *hif_ctx, void *ramdump_base,
uint32_t address, uint32_t size)
{
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
uint32_t loc = address;
uint32_t val = 0;
uint32_t j = 0;
@@ -95,10 +96,11 @@ void hif_dump_target_memory(struct ol_softc *scn, void *ramdump_base,
*/
CDF_STATUS
-hif_diag_read_mem(struct ol_softc *scn, uint32_t address, uint8_t *data,
+hif_diag_read_mem(struct ol_softc *hif_ctx, uint32_t address, uint8_t *data,
int nbytes)
{
- struct HIF_CE_state *hif_state;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
CDF_STATUS status = CDF_STATUS_SUCCESS;
cdf_dma_addr_t buf;
unsigned int completed_nbytes, orig_nbytes, remaining_bytes;
@@ -115,8 +117,6 @@ hif_diag_read_mem(struct ol_softc *scn, uint32_t address, uint8_t *data,
unsigned int toeplitz_hash_result;
unsigned int user_flags = 0;
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
-
transaction_id = (mux_id & MUX_ID_MASK) |
(transaction_id & TRANSACTION_ID_MASK);
#ifdef QCA_WIFI_3_0
@@ -260,12 +260,11 @@ done:
}
/* Read 4-byte aligned data from Target memory or register */
-CDF_STATUS hif_diag_read_access(struct ol_softc *scn,
+CDF_STATUS hif_diag_read_access(struct ol_softc *hif_ctx,
uint32_t address, uint32_t *data)
{
- struct HIF_CE_state *hif_state;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
if (address >= DRAM_BASE_ADDRESS) {
/* Assume range doesn't cross this boundary */
return hif_diag_read_mem(scn, address, (uint8_t *) data,
@@ -279,10 +278,11 @@ CDF_STATUS hif_diag_read_access(struct ol_softc *scn,
}
}
-CDF_STATUS hif_diag_write_mem(struct ol_softc *scn,
+CDF_STATUS hif_diag_write_mem(struct ol_softc *hif_ctx,
uint32_t address, uint8_t *data, int nbytes)
{
- struct HIF_CE_state *hif_state;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
CDF_STATUS status = CDF_STATUS_SUCCESS;
cdf_dma_addr_t buf;
unsigned int completed_nbytes, orig_nbytes, remaining_bytes;
@@ -299,7 +299,6 @@ CDF_STATUS hif_diag_write_mem(struct ol_softc *scn,
unsigned int toeplitz_hash_result;
unsigned int user_flags = 0;
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
ce_diag = hif_state->ce_diag;
transaction_id = (mux_id & MUX_ID_MASK) |
(transaction_id & TRANSACTION_ID_MASK);
@@ -433,12 +432,11 @@ done:
}
/* Write 4B data to Target memory or register */
-CDF_STATUS
-hif_diag_write_access(struct ol_softc *scn, uint32_t address, uint32_t data)
+CDF_STATUS hif_diag_write_access(struct ol_softc *hif_ctx, uint32_t address,
+ uint32_t data)
{
- struct HIF_CE_state *hif_state;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
if (address >= DRAM_BASE_ADDRESS) {
/* Assume range doesn't cross this boundary */
uint32_t data_buf = data;
diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c
index db8536816f0c..6694dea4cfe4 100644
--- a/hif/src/ce/ce_main.c
+++ b/hif/src/ce/ce_main.c
@@ -539,9 +539,9 @@ void ce_fini(struct CE_handle *copyeng)
cdf_mem_free(CE_state);
}
-void hif_detach_htc(struct ol_softc *scn)
+void hif_detach_htc(struct ol_softc *hif_ctx)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
cdf_mem_zero(&hif_state->msg_callbacks_pending,
sizeof(hif_state->msg_callbacks_pending));
@@ -551,11 +551,12 @@ void hif_detach_htc(struct ol_softc *scn)
/* Send the first nbytes bytes of the buffer */
CDF_STATUS
-hif_send_head(struct ol_softc *scn,
+hif_send_head(struct ol_softc *hif_ctx,
uint8_t pipe, unsigned int transfer_id, unsigned int nbytes,
cdf_nbuf_t nbuf, unsigned int data_attr)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
struct HIF_CE_pipe_info *pipe_info = &(hif_state->pipe_info[pipe]);
struct CE_handle *ce_hdl = pipe_info->ce_hdl;
int bytes = nbytes, nfrags = 0;
@@ -659,9 +660,9 @@ void hif_send_complete_check(struct ol_softc *scn, uint8_t pipe, int force)
#endif
}
-uint16_t hif_get_free_queue_number(struct ol_softc *scn, uint8_t pipe)
+uint16_t hif_get_free_queue_number(struct ol_softc *hif_ctx, uint8_t pipe)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
struct HIF_CE_pipe_info *pipe_info = &(hif_state->pipe_info[pipe]);
uint16_t rv;
@@ -682,6 +683,7 @@ hif_pci_ce_send_done(struct CE_handle *copyeng, void *ce_context,
struct HIF_CE_pipe_info *pipe_info =
(struct HIF_CE_pipe_info *)ce_context;
struct HIF_CE_state *hif_state = pipe_info->HIF_CE_state;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_state);
unsigned int sw_idx = sw_index, hw_idx = hw_index;
struct hif_msg_callbacks *msg_callbacks =
&hif_state->msg_callbacks_current;
@@ -692,7 +694,7 @@ hif_pci_ce_send_done(struct CE_handle *copyeng, void *ce_context,
* when last fragment is complteted.
*/
if (transfer_context != CE_SENDLIST_ITEM_CTXT) {
- if (hif_state->scn->target_status
+ if (scn->target_status
== OL_TRGET_STATUS_RESET)
cdf_nbuf_free(transfer_context);
else
@@ -750,19 +752,20 @@ hif_pci_ce_recv_data(struct CE_handle *copyeng, void *ce_context,
(struct HIF_CE_pipe_info *)ce_context;
struct HIF_CE_state *hif_state = pipe_info->HIF_CE_state;
struct CE_state *ce_state = (struct CE_state *) copyeng;
- struct ol_softc *scn = hif_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_state);
+ struct hif_pci_softc *hif_sc = HIF_GET_PCI_SOFTC(hif_state);
struct hif_msg_callbacks *msg_callbacks =
&hif_state->msg_callbacks_current;
do {
- hif_pm_runtime_mark_last_busy(scn->hif_sc->dev);
+ hif_pm_runtime_mark_last_busy(hif_sc->dev);
cdf_nbuf_unmap_single(scn->cdf_dev,
(cdf_nbuf_t) transfer_context,
CDF_DMA_FROM_DEVICE);
atomic_inc(&pipe_info->recv_bufs_needed);
hif_post_recv_buffers_for_pipe(pipe_info);
- if (hif_state->scn->target_status == OL_TRGET_STATUS_RESET)
+ if (scn->target_status == OL_TRGET_STATUS_RESET)
cdf_nbuf_free(transfer_context);
else
hif_ce_do_recv(msg_callbacks, transfer_context,
@@ -785,10 +788,10 @@ hif_pci_ce_recv_data(struct CE_handle *copyeng, void *ce_context,
/* TBDXXX: Set CE High Watermark; invoke txResourceAvailHandler in response */
void
-hif_post_init(struct ol_softc *scn, void *unused,
+hif_post_init(struct ol_softc *hif_ctx, void *unused,
struct hif_msg_callbacks *callbacks)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
#ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG
spin_lock_init(&pcie_access_log_lock);
@@ -803,7 +806,7 @@ int hif_completion_thread_startup(struct HIF_CE_state *hif_state)
{
struct CE_handle *ce_diag = hif_state->ce_diag;
int pipe_num;
- struct ol_softc *scn = hif_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_state);
struct hif_msg_callbacks *hif_msg_callbacks =
&hif_state->msg_callbacks_current;
@@ -865,7 +868,7 @@ int hif_completion_thread_startup(struct HIF_CE_state *hif_state)
*/
static void hif_msg_callbacks_install(struct ol_softc *scn)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
cdf_mem_copy(&hif_state->msg_callbacks_current,
&hif_state->msg_callbacks_pending,
@@ -891,14 +894,9 @@ hif_get_default_pipe(struct ol_softc *scn, uint8_t *ULPipe, uint8_t *DLPipe)
*/
void hif_dump_pipe_debug_count(struct ol_softc *scn)
{
- struct HIF_CE_state *hif_state;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
int pipe_num;
- if (scn == NULL) {
- HIF_ERROR("%s scn is NULL", __func__);
- return;
- }
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
if (hif_state == NULL) {
HIF_ERROR("%s hif_state is NULL", __func__);
return;
@@ -925,8 +923,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info)
{
struct CE_handle *ce_hdl;
cdf_size_t buf_sz;
- struct HIF_CE_state *hif_state = pipe_info->HIF_CE_state;
- struct ol_softc *scn = hif_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(pipe_info->HIF_CE_state);
CDF_STATUS ret;
uint32_t bufs_posted = 0;
@@ -1031,7 +1028,7 @@ static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info)
*/
static int hif_post_recv_buffers(struct ol_softc *scn)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
int pipe_num, rv = 0;
A_TARGET_ACCESS_LIKELY(scn);
@@ -1051,9 +1048,10 @@ done:
return rv;
}
-CDF_STATUS hif_start(struct ol_softc *scn)
+CDF_STATUS hif_start(struct ol_softc *hif_ctx)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
hif_msg_callbacks_install(scn);
@@ -1132,7 +1130,7 @@ void hif_recv_buffer_cleanup_on_pipe(struct HIF_CE_pipe_info *pipe_info)
return;
}
- scn = hif_state->scn;
+ scn = HIF_GET_SOFTC(hif_state);
ce_hdl = pipe_info->ce_hdl;
if (scn->cdf_dev == NULL) {
@@ -1151,6 +1149,7 @@ void hif_send_buffer_cleanup_on_pipe(struct HIF_CE_pipe_info *pipe_info)
{
struct CE_handle *ce_hdl;
struct HIF_CE_state *hif_state;
+ struct ol_softc *scn;
cdf_nbuf_t netbuf;
void *per_CE_context;
cdf_dma_addr_t CE_data;
@@ -1170,6 +1169,8 @@ void hif_send_buffer_cleanup_on_pipe(struct HIF_CE_pipe_info *pipe_info)
return;
}
+ scn = HIF_GET_SOFTC(hif_state);
+
ce_hdl = pipe_info->ce_hdl;
while (ce_cancel_send_next
@@ -1185,7 +1186,7 @@ void hif_send_buffer_cleanup_on_pipe(struct HIF_CE_pipe_info *pipe_info)
* by checking whether it's the endpoint
* which they are queued in.
*/
- if (id == hif_state->scn->htc_endpoint)
+ if (id == scn->htc_endpoint)
return;
/* Indicate the completion to higer
* layer to free the buffer */
@@ -1208,8 +1209,9 @@ void hif_send_buffer_cleanup_on_pipe(struct HIF_CE_pipe_info *pipe_info)
void hif_buffer_cleanup(struct HIF_CE_state *hif_state)
{
int pipe_num;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_state);
- for (pipe_num = 0; pipe_num < hif_state->scn->ce_count; pipe_num++) {
+ for (pipe_num = 0; pipe_num < scn->ce_count; pipe_num++) {
struct HIF_CE_pipe_info *pipe_info;
pipe_info = &hif_state->pipe_info[pipe_num];
@@ -1218,15 +1220,17 @@ void hif_buffer_cleanup(struct HIF_CE_state *hif_state)
}
}
-void hif_flush_surprise_remove(struct ol_softc *scn)
+void hif_flush_surprise_remove(struct ol_softc *hif_ctx)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = hif_ctx;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
hif_buffer_cleanup(hif_state);
}
-void hif_stop(struct ol_softc *scn)
+void hif_stop(struct ol_softc *hif_ctx)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
int pipe_num;
scn->hif_init_done = false;
@@ -1503,7 +1507,7 @@ void hif_wake_target_cpu(struct ol_softc *scn)
static void hif_sleep_entry(void *arg)
{
struct HIF_CE_state *hif_state = (struct HIF_CE_state *)arg;
- struct ol_softc *scn = hif_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_state);
uint32_t idle_ms;
if (scn->recovery)
return;
@@ -1880,8 +1884,6 @@ int hif_config_ce(hif_handle_t hif_hdl)
return CDF_STATUS_NOT_INITIALIZED;
}
- hif_state->scn = scn;
- scn->hif_hdl = hif_state;
scn->mem = soc_info.v_addr;
scn->mem_pa = soc_info.p_addr;
tgt_info->soc_version = soc_info.version;
@@ -2011,7 +2013,6 @@ err:
hif_state->sleep_timer_init = false;
}
- scn->hif_hdl = NULL;
athdiag_procfs_remove();
scn->athdiag_procfs_inited = false;
HIF_TRACE("%s: X, ret = %d\n", __func__, rv);
@@ -2037,12 +2038,13 @@ err:
*
* Return: None
*/
-void hif_ipa_get_ce_resource(struct ol_softc *scn,
+void hif_ipa_get_ce_resource(struct ol_softc *hif_ctx,
cdf_dma_addr_t *ce_sr_base_paddr,
uint32_t *ce_sr_ring_size,
cdf_dma_addr_t *ce_reg_paddr)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
struct HIF_CE_pipe_info *pipe_info =
&(hif_state->pipe_info[HIF_PCI_IPA_UC_ASSIGNED_CE]);
struct CE_handle *ce_hdl = pipe_info->ce_hdl;
diff --git a/hif/src/ce/ce_main.h b/hif/src/ce/ce_main.h
index 354c812c3788..21a24341ec94 100644
--- a/hif/src/ce/ce_main.h
+++ b/hif/src/ce/ce_main.h
@@ -109,7 +109,6 @@ struct ce_tasklet_entry {
struct HIF_CE_state {
struct ol_softc ol_sc;
- struct ol_softc *scn;
bool started;
struct ce_tasklet_entry tasklets[CE_COUNT_MAX];
cdf_spinlock_t keep_awake_lock;
diff --git a/hif/src/ce/ce_tasklet.c b/hif/src/ce/ce_tasklet.c
index a68dcec1f3b0..c38c9c343caf 100644
--- a/hif/src/ce/ce_tasklet.c
+++ b/hif/src/ce/ce_tasklet.c
@@ -101,7 +101,8 @@ static void reschedule_ce_tasklet_work_handler(struct work_struct *work)
HIF_ERROR("%s: tasklet scn is null", __func__);
return;
}
- hif_ce_state = (struct HIF_CE_state *)scn->hif_hdl;
+
+ hif_ce_state = HIF_GET_CE_STATE(scn);
if (scn->hif_init_done == false) {
HIF_ERROR("%s: wlan driver is unloaded", __func__);
@@ -193,7 +194,7 @@ static void ce_tasklet(unsigned long data)
struct ce_tasklet_entry *tasklet_entry =
(struct ce_tasklet_entry *)data;
struct HIF_CE_state *hif_ce_state = tasklet_entry->hif_ce_state;
- struct ol_softc *scn = hif_ce_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ce_state);
struct CE_state *CE_state = scn->ce_id_to_state[tasklet_entry->ce_id];
hif_record_ce_desc_event(tasklet_entry->ce_id, HIF_CE_TASKLET_ENTRY,
@@ -262,7 +263,7 @@ void ce_tasklet_init(struct HIF_CE_state *hif_ce_state, uint32_t mask)
void ce_tasklet_kill(struct HIF_CE_state *hif_ce_state)
{
int i;
- struct ol_softc *scn = hif_ce_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ce_state);
for (i = 0; i < CE_COUNT_MAX; i++)
if (hif_ce_state->tasklets[i].inited) {
@@ -282,7 +283,7 @@ static irqreturn_t ce_irq_handler(int irq, void *context)
{
struct ce_tasklet_entry *tasklet_entry = context;
struct HIF_CE_state *hif_ce_state = tasklet_entry->hif_ce_state;
- struct ol_softc *scn = hif_ce_state->scn;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ce_state);
uint32_t host_status;
int ce_id = icnss_get_ce_id(irq);
@@ -397,7 +398,7 @@ CDF_STATUS ce_register_irq(struct HIF_CE_state *hif_ce_state, uint32_t mask)
#ifndef HIF_PCI
/* move to hif_configure_irq */
- ce_enable_irq_in_group_reg(hif_ce_state->scn, done_mask);
+ ce_enable_irq_in_group_reg(HIF_GET_SOFTC(hif_ce_state), done_mask);
#endif
return CDF_STATUS_SUCCESS;
diff --git a/hif/src/hif_main.c b/hif/src/hif_main.c
index 52dec6e42522..c0c5dea2dbf6 100644
--- a/hif/src/hif_main.c
+++ b/hif/src/hif_main.c
@@ -112,15 +112,7 @@ void hif_dump(struct ol_softc *scn, uint8_t cmd_id, bool start)
*/
void hif_shut_down_device(struct ol_softc *scn)
{
- if (scn && scn->hif_hdl) {
- struct HIF_CE_state *hif_state =
- (struct HIF_CE_state *)scn->hif_hdl;
-
- hif_stop(scn);
- cdf_mem_free(hif_state);
- scn->hif_hdl = NULL;
- }
-
+ hif_stop(scn);
}
@@ -217,7 +209,7 @@ static inline void hif_fw_event_handler(struct HIF_CE_state *hif_state)
irqreturn_t hif_fw_interrupt_handler(int irq, void *arg)
{
struct ol_softc *scn = arg;
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
uint32_t fw_indicator_address, fw_indicator;
A_TARGET_ACCESS_BEGIN_RET(scn);
@@ -262,8 +254,9 @@ irqreturn_t hif_fw_interrupt_handler(int irq, void *arg)
*
* Return: void *
*/
-void *hif_get_targetdef(struct ol_softc *scn)
+void *hif_get_targetdef(struct ol_softc *hif_ctx)
{
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
return scn->targetdef;
}
@@ -548,10 +541,6 @@ void hif_close(void *hif_ctx)
scn->athdiag_procfs_inited = false;
}
- if (scn->hif_hdl) {
- cdf_mem_free(scn->hif_hdl);
- scn->hif_hdl = NULL;
- }
hif_bus_close(scn);
cds_free_context(cds_get_global_context(),
CDF_MODULE_ID_HIF, hif_ctx);
@@ -606,7 +595,7 @@ CDF_STATUS hif_enable(void *hif_ctx, struct device *dev,
*/
#ifdef HIF_PCI
- status = hif_configure_irq(scn->hif_sc);
+ status = hif_configure_irq(hif_ctx);
if (status < 0) {
HIF_ERROR("%s: ERROR - configure_IRQ_and_CE failed, status = %d",
__func__, status);
@@ -702,13 +691,9 @@ static void hif_crash_shutdown_dump_bus_register(void *hif_ctx)
*/
void hif_crash_shutdown(void *hif_ctx)
{
- struct ol_softc *scn = hif_ctx;
- struct HIF_CE_state *hif_state;
-
- if (!scn)
- return;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(hif_ctx);
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
if (!hif_state)
return;
diff --git a/hif/src/hif_main.h b/hif/src/hif_main.h
index c357c8e1e782..02890a6803dc 100644
--- a/hif/src/hif_main.h
+++ b/hif/src/hif_main.h
@@ -57,9 +57,6 @@
*/
#define TARGID_TO_PCI_ADDR(targid) (*((A_target_id_t *)(targid)))
-A_target_id_t hif_get_target_id(struct ol_softc *scn);
-bool hif_target_forced_awake(struct ol_softc *scn);
-
#ifdef QCA_WIFI_3_0
#define DISABLE_L1SS_STATES 1
#endif
@@ -101,9 +98,14 @@ bool hif_target_forced_awake(struct ol_softc *scn);
#define QCA6180_DEVICE_ID (0x041)
#endif
+#define HIF_GET_PCI_SOFTC(scn) ((struct hif_pci_softc *)scn)
+#define HIF_GET_CE_STATE(scn) ((struct HIF_CE_state *)scn)
+#define HIF_GET_SOFTC(scn) ((struct ol_softc *)scn)
+
A_target_id_t hif_get_target_id(struct ol_softc *scn);
void hif_dump_pipe_debug_count(struct ol_softc *scn);
+bool hif_target_forced_awake(struct ol_softc *scn);
bool hif_max_num_receives_reached(unsigned int count);
int hif_config_ce(hif_handle_t hif_hdl);
int athdiag_procfs_init(void *scn);
diff --git a/hif/src/pcie/hif_io32_pci.h b/hif/src/pcie/hif_io32_pci.h
index 27b6d660a306..98b1827e80d2 100644
--- a/hif/src/pcie/hif_io32_pci.h
+++ b/hif/src/pcie/hif_io32_pci.h
@@ -30,7 +30,7 @@
#ifdef HIF_PCI
-#include "hif.h"
+#include "hif_main.h"
#include "regtable.h"
#include "ce_reg.h"
#include "cdf_atomic.h"
@@ -256,7 +256,7 @@ irqreturn_t hif_fw_interrupt_handler(int irq, void *arg);
static inline void ce_irq_enable(struct ol_softc *scn, int ce_id)
{
uint32_t tmp = 1 << ce_id;
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
cdf_spin_lock_irqsave(&sc->irq_lock);
scn->ce_irq_summary &= ~tmp;
diff --git a/hif/src/pcie/if_pci.c b/hif/src/pcie/if_pci.c
index de4b74ae02f4..737d27420e4e 100644
--- a/hif/src/pcie/if_pci.c
+++ b/hif/src/pcie/if_pci.c
@@ -123,7 +123,7 @@ static inline void hif_pci_route_adrastea_interrupt(struct hif_pci_softc *sc)
#else
void hif_pci_route_adrastea_interrupt(struct hif_pci_softc *sc)
{
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
unsigned int target_enable0, target_enable1;
unsigned int target_cause0, target_cause1;
@@ -146,8 +146,8 @@ void hif_pci_route_adrastea_interrupt(struct hif_pci_softc *sc)
static irqreturn_t hif_pci_interrupt_handler(int irq, void *arg)
{
struct hif_pci_softc *sc = (struct hif_pci_softc *)arg;
- struct ol_softc *scn = sc->ol_sc;
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(arg);
volatile int tmp;
uint16_t val;
uint32_t bar0;
@@ -278,7 +278,7 @@ static irqreturn_t hif_pci_msi_fw_handler(int irq, void *arg)
{
struct hif_pci_softc *sc = (struct hif_pci_softc *)arg;
- (irqreturn_t) hif_fw_interrupt_handler(sc->irq_event, sc->ol_sc);
+ (irqreturn_t) hif_fw_interrupt_handler(sc->irq_event, arg);
return IRQ_HANDLED;
}
@@ -302,7 +302,7 @@ bool hif_pci_targ_is_present(struct ol_softc *scn, void *__iomem *mem)
#if CONFIG_ATH_PCIE_MAX_PERF == 0
void hif_pci_cancel_deferred_target_sleep(struct ol_softc *scn)
{
- struct HIF_CE_state *hif_state = (struct HIF_CE_state *)scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
A_target_id_t pci_addr = scn->mem;
cdf_spin_lock_irqsave(&hif_state->keep_awake_lock);
@@ -342,7 +342,7 @@ static void hif_pci_device_reset(struct hif_pci_softc *sc)
void __iomem *mem = sc->mem;
int i;
uint32_t val;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
if (!scn->hostdef)
return;
@@ -415,7 +415,7 @@ void hif_pci_device_warm_reset(struct hif_pci_softc *sc)
int i;
uint32_t val;
uint32_t fw_indicator;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
/* NB: Don't check resetok here. This form of reset is
* integral to correct operation. */
@@ -531,9 +531,10 @@ void hif_pci_device_warm_reset(struct hif_pci_softc *sc)
}
#ifndef QCA_WIFI_3_0
-int hif_check_fw_reg(struct ol_softc *scn)
+int hif_check_fw_reg(struct ol_softc *hif_ctx)
{
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
void __iomem *mem = sc->mem;
uint32_t val;
@@ -550,12 +551,13 @@ int hif_check_fw_reg(struct ol_softc *scn)
}
#endif
-int hif_check_soc_status(struct ol_softc *scn)
+int hif_check_soc_status(struct ol_softc *hif_ctx)
{
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
uint16_t device_id;
uint32_t val;
uint16_t timeout_count = 0;
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
/* Check device ID from PCIe configuration space for link status */
pci_read_config_word(sc->pdev, PCI_DEVICE_ID, &device_id);
@@ -617,7 +619,7 @@ int hif_check_soc_status(struct ol_softc *scn)
*/
static void hif_dump_pci_registers(struct ol_softc *scn)
{
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
void __iomem *mem = sc->mem;
uint32_t val, i, j;
uint32_t wrapper_idx[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
@@ -769,7 +771,6 @@ int hif_dump_registers(struct ol_softc *scn)
*/
static irqreturn_t ce_per_engine_handler(int irq, void *arg)
{
- struct hif_pci_softc *sc = (struct hif_pci_softc *)arg;
int CE_id = irq - MSI_ASSIGN_CE_INITIAL;
/*
@@ -781,7 +782,7 @@ static irqreturn_t ce_per_engine_handler(int irq, void *arg)
* used by firmware.
*/
- ce_per_engine_service(sc->ol_sc, CE_id);
+ ce_per_engine_service(arg, CE_id);
return IRQ_HANDLED;
}
@@ -792,7 +793,7 @@ static irqreturn_t ce_per_engine_handler(int irq, void *arg)
static void reschedule_tasklet_work_handler(void *arg)
{
struct hif_pci_softc *sc = arg;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
if (!scn) {
HIF_ERROR("%s: ol_softc is NULL", __func__);
@@ -827,7 +828,7 @@ static void hif_init_reschedule_tasklet_work(struct hif_pci_softc *sc) { }
static void wlan_tasklet(unsigned long data)
{
struct hif_pci_softc *sc = (struct hif_pci_softc *)data;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
if (scn->hif_init_done == false)
goto end;
@@ -837,7 +838,7 @@ static void wlan_tasklet(unsigned long data)
if (!ADRASTEA_BU) {
(irqreturn_t) hif_fw_interrupt_handler(sc->irq_event, scn);
- if (sc->ol_sc->target_status == OL_TRGET_STATUS_RESET)
+ if (scn->target_status == OL_TRGET_STATUS_RESET)
goto end;
}
@@ -1042,9 +1043,7 @@ static void hif_pm_runtime_lock_timeout_fn(unsigned long data);
*/
static void hif_pm_runtime_start(struct hif_pci_softc *sc)
{
- struct ol_softc *ol_sc;
-
- ol_sc = sc->ol_sc;
+ struct ol_softc *ol_sc = HIF_GET_SOFTC(sc);
if (!ol_sc->enable_runtime_pm) {
HIF_INFO("%s: RUNTIME PM is disabled in ini\n", __func__);
@@ -1078,7 +1077,7 @@ static void hif_pm_runtime_start(struct hif_pci_softc *sc)
*/
static void hif_pm_runtime_stop(struct hif_pci_softc *sc)
{
- struct ol_softc *ol_sc = sc->ol_sc;
+ struct ol_softc *ol_sc = HIF_GET_PCI_SOFTC(sc);
if (!ol_sc->enable_runtime_pm)
return;
@@ -1148,15 +1147,13 @@ static void hif_pm_runtime_stop(struct hif_pci_softc *sc) {}
*/
void hif_enable_power_management(void *hif_ctx)
{
- struct hif_pci_softc *pci_ctx;
+ struct hif_pci_softc *pci_ctx = HIF_GET_PCI_SOFTC(hif_ctx);
- if (hif_ctx == NULL) {
+ if (pci_ctx == NULL) {
HIF_ERROR("%s, hif_ctx null", __func__);
return;
}
- pci_ctx = ((struct ol_softc *)hif_ctx)->hif_sc;
-
hif_pm_runtime_start(pci_ctx);
}
@@ -1170,15 +1167,13 @@ void hif_enable_power_management(void *hif_ctx)
*/
void hif_disable_power_management(void *hif_ctx)
{
- struct hif_pci_softc *pci_ctx;
+ struct hif_pci_softc *pci_ctx = HIF_GET_PCI_SOFTC(hif_ctx);
- if (hif_ctx == NULL) {
+ if (pci_ctx == NULL) {
HIF_ERROR("%s, hif_ctx null", __func__);
return;
}
- pci_ctx = ((struct ol_softc *)hif_ctx)->hif_sc;
-
hif_pm_runtime_stop(pci_ctx);
}
@@ -1202,10 +1197,8 @@ int hif_bus_get_context_size(void)
*/
CDF_STATUS hif_bus_open(struct ol_softc *ol_sc, enum ath_hal_bus_type bus_type)
{
- struct hif_pci_softc *sc = (struct hif_pci_softc *)ol_sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(ol_sc);
- ol_sc->hif_sc = (void *)sc;
- sc->ol_sc = ol_sc;
ol_sc->bus_type = bus_type;
hif_pm_runtime_open(sc);
@@ -1221,18 +1214,9 @@ CDF_STATUS hif_bus_open(struct ol_softc *ol_sc, enum ath_hal_bus_type bus_type)
*/
void hif_bus_close(struct ol_softc *ol_sc)
{
- struct hif_pci_softc *sc;
-
- if (ol_sc == NULL) {
- HIF_ERROR("%s: ol_softc is NULL", __func__);
- return;
- }
- sc = ol_sc->hif_sc;
- if (sc == NULL)
- return;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(ol_sc);
hif_pm_runtime_close(sc);
- ol_sc->hif_sc = NULL;
}
#define BAR_NUM 0
@@ -1244,7 +1228,7 @@ int hif_enable_pci(struct hif_pci_softc *sc,
void __iomem *mem;
int ret = 0;
uint16_t device_id;
- struct ol_softc *ol_sc = sc->ol_sc;
+ struct ol_softc *ol_sc = HIF_GET_SOFTC(sc);
pci_read_config_word(pdev,PCI_DEVICE_ID,&device_id);
if(device_id != id->device) {
@@ -1340,12 +1324,7 @@ err_region:
void hif_disable_pci(struct hif_pci_softc *sc)
{
- struct ol_softc *ol_sc;
-
- if (!sc)
- return;
-
- ol_sc = sc->ol_sc;
+ struct ol_softc *ol_sc = HIF_GET_SOFTC(sc);
if (ol_sc == NULL) {
HIF_ERROR("%s: ol_sc = NULL", __func__);
return;
@@ -1367,7 +1346,7 @@ int hif_pci_probe_tgt_wakeup(struct hif_pci_softc *sc)
#ifndef QCA_WIFI_3_0
uint32_t fw_indicator;
#endif
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
/*
* Verify that the Target was started cleanly.*
* The case where this is most likely is with an AUX-powered
@@ -1431,23 +1410,23 @@ static void wlan_tasklet_msi(unsigned long data)
{
struct hif_tasklet_entry *entry = (struct hif_tasklet_entry *)data;
struct hif_pci_softc *sc = (struct hif_pci_softc *) entry->hif_handler;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
- if (sc->ol_sc->hif_init_done == false)
+ if (scn->hif_init_done == false)
goto irq_handled;
- if (cdf_atomic_read(&sc->ol_sc->link_suspended))
+ if (cdf_atomic_read(&scn->link_suspended))
goto irq_handled;
cdf_atomic_inc(&scn->active_tasklet_cnt);
if (entry->id == HIF_MAX_TASKLET_NUM) {
/* the last tasklet is for fw IRQ */
- (irqreturn_t)hif_fw_interrupt_handler(sc->irq_event, sc->ol_sc);
- if (sc->ol_sc->target_status == OL_TRGET_STATUS_RESET)
+ (irqreturn_t)hif_fw_interrupt_handler(sc->irq_event, scn);
+ if (scn->target_status == OL_TRGET_STATUS_RESET)
goto irq_handled;
- } else if (entry->id < sc->ol_sc->ce_count) {
- ce_per_engine_service(sc->ol_sc, entry->id);
+ } else if (entry->id < scn->ce_count) {
+ ce_per_engine_service(scn, entry->id);
} else {
HIF_ERROR("%s: ERROR - invalid CE_id = %d",
__func__, entry->id);
@@ -1464,7 +1443,7 @@ int hif_configure_msi(struct hif_pci_softc *sc)
int ret = 0;
int num_msi_desired;
int rv = -1;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
HIF_TRACE("%s: E", __func__);
@@ -1580,7 +1559,7 @@ if (sc->num_msi_intrs >= 1)
static int hif_pci_configure_legacy_irq(struct hif_pci_softc *sc)
{
int ret = 0;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
HIF_TRACE("%s: E", __func__);
@@ -1618,7 +1597,8 @@ end:
void hif_nointrs(struct ol_softc *scn)
{
int i;
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
if (scn->request_irq_done == false)
return;
@@ -1632,7 +1612,7 @@ void hif_nointrs(struct ol_softc *scn)
/* Legacy PCI line interrupt */
free_irq(sc->pdev->irq, sc);
}
- ce_unregister_irq(scn->hif_hdl, 0xfff);
+ ce_unregister_irq(hif_state, 0xfff);
scn->request_irq_done = false;
}
@@ -1658,7 +1638,7 @@ void hif_disable_bus(void *bdev)
if (!sc)
return;
- scn = sc->ol_sc;
+ scn = HIF_GET_SOFTC(sc);
if (ADRASTEA_BU) {
hif_write32_mb(sc->mem + PCIE_INTR_ENABLE_ADDRESS, 0);
@@ -1832,20 +1812,16 @@ static int hif_bus_resume_link_up(struct ol_softc *scn)
static int hif_bus_suspend_link_down(struct ol_softc *scn)
{
struct pci_dev *pdev;
- struct HIF_CE_state *hif_state;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
int status = 0;
- if (!scn)
- return -EFAULT;
-
- pdev = scn->aps_osdev.bdev;
-
- hif_state = (struct HIF_CE_state *)scn->hif_hdl;
if (!hif_state) {
HIF_ERROR("%s: hif_state is null", __func__);
return -EFAULT;
}
+ pdev = scn->aps_osdev.bdev;
+
disable_irq(pdev->irq);
status = hif_drain_tasklets(scn);
@@ -2186,13 +2162,13 @@ static void hif_free_msi_ctx(struct ol_softc *scn)
void hif_disable_isr(void *ol_sc)
{
- struct ol_softc *scn = (struct ol_softc *)ol_sc;
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(ol_sc);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
hif_nointrs(ol_sc);
hif_free_msi_ctx(scn);
/* Cancel the pending tasklet */
- ce_tasklet_kill(scn->hif_hdl);
+ ce_tasklet_kill(ol_sc);
tasklet_kill(&sc->intr_tq);
cdf_atomic_set(&scn->active_tasklet_cnt, 0);
}
@@ -2200,8 +2176,8 @@ void hif_disable_isr(void *ol_sc)
/* Function to reset SoC */
void hif_reset_soc(void *ol_sc)
{
- struct ol_softc *scn = (struct ol_softc *)ol_sc;
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(ol_sc);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(ol_sc);
struct hif_target_info *tgt_info = hif_get_target_info_handle(scn);
#if defined(CPU_WARM_RESET_WAR)
@@ -2220,8 +2196,8 @@ void hif_reset_soc(void *ol_sc)
void hif_disable_aspm(void *hif_ctx)
{
- struct ol_softc *scn = hif_ctx;
- struct hif_pci_softc *sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
if (NULL == scn) {
HIF_ERROR("%s: Could not disable ASPM scn is null",
@@ -2229,8 +2205,6 @@ void hif_disable_aspm(void *hif_ctx)
return;
}
- sc = scn->hif_sc;
-
/* Disable ASPM when pkt log is enabled */
pci_read_config_dword(sc->pdev, 0x80, &sc->lcr_val);
pci_write_config_dword(sc->pdev, 0x80, (sc->lcr_val & 0xffffff00));
@@ -2245,15 +2219,14 @@ void hif_disable_aspm(void *hif_ctx)
*/
void hif_enable_power_gating(void *hif_ctx)
{
- struct ol_softc *scn = hif_ctx;
- struct hif_pci_softc *sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
if (NULL == scn) {
HIF_ERROR("%s: Could not disable ASPM scn is null",
__func__);
return;
}
- sc = scn->hif_sc;
/* Re-enable ASPM after firmware/OTP download is complete */
pci_write_config_dword(sc->pdev, 0x80, sc->lcr_val);
@@ -2310,10 +2283,10 @@ int
hif_target_sleep_state_adjust(struct ol_softc *scn,
bool sleep_ok, bool wait_for_it)
{
- struct HIF_CE_state *hif_state = scn->hif_hdl;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
A_target_id_t pci_addr = scn->mem;
static int max_delay;
- struct hif_pci_softc *sc = scn->hif_sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(scn);
static int debug;
struct hif_config_info *cfg = hif_get_ini_handle(scn);
@@ -2625,7 +2598,7 @@ void war_pci_write32(char *addr, uint32_t offset, uint32_t value)
int hif_configure_irq(struct hif_pci_softc *sc)
{
int ret = 0;
- struct ol_softc *scn = sc->ol_sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(sc);
HIF_TRACE("%s: E", __func__);
@@ -2676,7 +2649,7 @@ void hif_target_sync(struct ol_softc *scn)
int fw_ind = 0;
HIF_TRACE("%s: Loop checking FW signal", __func__);
while (1) {
- fw_ind = hif_read32_mb(scn->hif_sc->mem +
+ fw_ind = hif_read32_mb(scn->mem +
FW_INDICATOR_ADDRESS);
if (fw_ind & FW_IND_INITIALIZED)
break;
@@ -2718,7 +2691,7 @@ CDF_STATUS hif_enable_bus(struct ol_softc *ol_sc,
{
int ret = 0;
uint32_t hif_type, target_type;
- struct hif_pci_softc *sc;
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(ol_sc);
uint16_t revision_id;
uint32_t lcr_val;
int probe_again = 0;
@@ -2733,7 +2706,6 @@ CDF_STATUS hif_enable_bus(struct ol_softc *ol_sc,
HIF_ERROR("%s: hif_ctx is NULL", __func__);
return CDF_STATUS_E_NOMEM;
}
- sc = ol_sc->hif_sc;
ol_sc->aps_osdev.bdev = pdev;
sc->pdev = pdev;
@@ -2772,8 +2744,8 @@ again:
HIF_TRACE("%s: hif_type = 0x%x, target_type = 0x%x",
__func__, hif_type, target_type);
- hif_register_tbl_attach(sc->ol_sc, hif_type);
- target_register_tbl_attach(sc->ol_sc, target_type);
+ hif_register_tbl_attach(ol_sc, hif_type);
+ target_register_tbl_attach(ol_sc, target_type);
ret = hif_pci_probe_tgt_wakeup(sc);
if (ret < 0) {
@@ -2858,13 +2830,9 @@ int hif_get_target_type(struct ol_softc *ol_sc, struct device *dev,
void hif_pm_runtime_get_noresume(void *hif_ctx)
{
- struct ol_softc *scn = hif_ctx;
- struct hif_pci_softc *sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
- if (NULL == scn)
- return;
-
- sc = scn->hif_sc;
if (NULL == sc)
return;
@@ -2887,8 +2855,8 @@ void hif_pm_runtime_get_noresume(void *hif_ctx)
*/
int hif_pm_runtime_get(void *hif_ctx)
{
- struct ol_softc *scn = hif_ctx;
- struct hif_pci_softc *sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
int ret;
int pm_state;
@@ -2897,7 +2865,6 @@ int hif_pm_runtime_get(void *hif_ctx)
__func__);
return -EFAULT;
}
- sc = scn->hif_sc;
pm_state = cdf_atomic_read(&sc->pm_state);
@@ -2944,8 +2911,8 @@ int hif_pm_runtime_get(void *hif_ctx)
*/
int hif_pm_runtime_put(void *hif_ctx)
{
- struct ol_softc *scn = (struct ol_softc *)hif_ctx;
- struct hif_pci_softc *sc;
+ struct ol_softc *scn = HIF_GET_SOFTC(hif_ctx);
+ struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
int pm_state, usage_count;
unsigned long flags;
char *error = NULL;
@@ -2955,8 +2922,6 @@ int hif_pm_runtime_put(void *hif_ctx)
__func__);
return -EFAULT;
}
- sc = scn->hif_sc;
-
usage_count = atomic_read(&sc->dev->power.usage_count);
if (usage_count == 1) {
diff --git a/hif/src/pcie/if_pci.h b/hif/src/pcie/if_pci.h
index 849d06f73a28..dcb29d209e53 100644
--- a/hif/src/pcie/if_pci.h
+++ b/hif/src/pcie/if_pci.h
@@ -117,7 +117,6 @@ struct hif_pci_softc {
struct device *dev;
struct pci_dev *pdev;
- struct ol_softc *ol_sc;
int num_msi_intrs; /* number of MSI interrupts granted */
/* 0 --> using legacy PCI line interrupts */
struct tasklet_struct intr_tq; /* tasklet */
diff --git a/hif/src/snoc/if_snoc.c b/hif/src/snoc/if_snoc.c
index e739a0073970..e09de89f0228 100644
--- a/hif/src/snoc/if_snoc.c
+++ b/hif/src/snoc/if_snoc.c
@@ -94,9 +94,10 @@ void hif_reset_soc(void *hif_ctx)
void hif_disable_isr(void *hif_ctx)
{
struct ol_softc *scn = (struct ol_softc *)hif_ctx;
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
hif_nointrs(scn);
- ce_tasklet_kill(scn->hif_hdl);
+ ce_tasklet_kill(scn);
cdf_atomic_set(&scn->active_tasklet_cnt, 0);
}
@@ -316,8 +317,9 @@ void hif_disable_bus(void *bdev)
*/
void hif_nointrs(struct ol_softc *scn)
{
+ struct HIF_CE_state *hif_state = HIF_GET_CE_STATE(scn);
if (scn->request_irq_done) {
- ce_unregister_irq(scn->hif_hdl, 0xfff);
+ ce_unregister_irq(hif_state, 0xfff);
scn->request_irq_done = false;
}
}