diff options
| author | Komal Seelam <kseelam@codeaurora.org> | 2016-02-22 20:44:25 +0530 |
|---|---|---|
| committer | Komal Seelam <kseelam@codeaurora.org> | 2016-03-14 14:08:12 +0530 |
| commit | 02cf2f8509b773bf6f81e6b03e7dee9b3ad75566 (patch) | |
| tree | 2cc41de9338902b5a381bce57247d85cda0bf141 | |
| parent | 43301de9995ad84d6882368788ce46374250b248 (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.h | 6 | ||||
| -rw-r--r-- | hif/src/ce/ce_api.h | 7 | ||||
| -rw-r--r-- | hif/src/ce/ce_bmi.c | 9 | ||||
| -rw-r--r-- | hif/src/ce/ce_diag.c | 30 | ||||
| -rw-r--r-- | hif/src/ce/ce_main.c | 78 | ||||
| -rw-r--r-- | hif/src/ce/ce_main.h | 1 | ||||
| -rw-r--r-- | hif/src/ce/ce_tasklet.c | 11 | ||||
| -rw-r--r-- | hif/src/hif_main.c | 29 | ||||
| -rw-r--r-- | hif/src/hif_main.h | 8 | ||||
| -rw-r--r-- | hif/src/pcie/hif_io32_pci.h | 4 | ||||
| -rw-r--r-- | hif/src/pcie/if_pci.c | 169 | ||||
| -rw-r--r-- | hif/src/pcie/if_pci.h | 1 | ||||
| -rw-r--r-- | hif/src/snoc/if_snoc.c | 6 |
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; } } |
