msm: ipa: optimize the spearhead stats mips consumption
Removed stats ioctls which are not relevant when pipes are not connected yet. Change-Id: I59891e07d4fb116e7a1fb8475e2aefae1cb799c6 Signed-off-by: Michael Adisumarta <madisuma@codeaurora.org>
This commit is contained in:
@@ -894,6 +894,7 @@ int ipa_set_pkt_init_ex_hdr_ofst(
|
|||||||
struct ipa_pkt_init_ex_hdr_ofst_set *lookup, bool proc_ctx);
|
struct ipa_pkt_init_ex_hdr_ofst_set *lookup, bool proc_ctx);
|
||||||
|
|
||||||
/* IPA stats pm functions */
|
/* IPA stats pm functions */
|
||||||
|
int ipa_pm_get_scaling_bw_levels(struct ipa_lnx_clock_stats *clock_stats);
|
||||||
int ipa_pm_get_aggregated_throughput(void);
|
int ipa_pm_get_aggregated_throughput(void);
|
||||||
int ipa_pm_get_current_clk_vote(void);
|
int ipa_pm_get_current_clk_vote(void);
|
||||||
bool ipa_get_pm_client_stats_filled(struct pm_client_stats *pm_stats_ptr,
|
bool ipa_get_pm_client_stats_filled(struct pm_client_stats *pm_stats_ptr,
|
||||||
|
@@ -802,21 +802,10 @@ EXPORT_SYMBOL(ipa3_set_usb_max_packet_size);
|
|||||||
int ipa3_get_usb_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
int ipa3_get_usb_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ipa_ep_idx_tx, ipa_ep_idx_rx;
|
|
||||||
|
|
||||||
ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_USB_CONS);
|
if (!ipa3_ctx->usb_ctx.dbg_stats.uc_dbg_stats_mmio)
|
||||||
ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_USB_PROD);
|
|
||||||
|
|
||||||
if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_tx].valid ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_rx].valid) {
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
if (!ipa3_ctx->usb_ctx.dbg_stats.uc_dbg_stats_mmio) {
|
|
||||||
IPAERR("bad parms NULL usb_gsi_stats_mmio\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
||||||
for (i = 0; i < MAX_USB_CHANNELS; i++) {
|
for (i = 0; i < MAX_USB_CHANNELS; i++) {
|
||||||
stats->u.ring[i].ringFull = ioread32(
|
stats->u.ring[i].ringFull = ioread32(
|
||||||
@@ -2072,21 +2061,10 @@ static void ipa3_get_gsi_ring_stats(struct IpaHwRingStats_t *ring,
|
|||||||
int ipa3_get_aqc_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
int ipa3_get_aqc_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ipa_ep_idx_tx, ipa_ep_idx_rx;
|
|
||||||
|
|
||||||
ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_AQC_ETHERNET_CONS);
|
if (!ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio)
|
||||||
ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_AQC_ETHERNET_PROD);
|
|
||||||
|
|
||||||
if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_tx].valid ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_rx].valid) {
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
if (!ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio) {
|
|
||||||
IPAERR("bad parms NULL aqc_gsi_stats_mmio\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
||||||
for (i = 0; i < MAX_AQC_CHANNELS; i++) {
|
for (i = 0; i < MAX_AQC_CHANNELS; i++) {
|
||||||
ipa3_get_gsi_ring_stats(stats->u.ring + i,
|
ipa3_get_gsi_ring_stats(stats->u.ring + i,
|
||||||
@@ -2110,21 +2088,10 @@ int ipa3_get_aqc_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
|||||||
int ipa3_get_ntn_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
int ipa3_get_ntn_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ipa_ep_idx_tx, ipa_ep_idx_rx;
|
|
||||||
|
|
||||||
ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_ETHERNET_CONS);
|
if (!ipa3_ctx->ntn_ctx.dbg_stats.uc_dbg_stats_mmio)
|
||||||
ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_ETHERNET_PROD);
|
|
||||||
|
|
||||||
if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_tx].valid ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_rx].valid) {
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
if (!ipa3_ctx->ntn_ctx.dbg_stats.uc_dbg_stats_mmio) {
|
|
||||||
IPAERR("bad parms NULL ntn_gsi_stats_mmio\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
||||||
for (i = 0; i < MAX_NTN_CHANNELS; i++) {
|
for (i = 0; i < MAX_NTN_CHANNELS; i++) {
|
||||||
ipa3_get_gsi_ring_stats(stats->u.ring + i,
|
ipa3_get_gsi_ring_stats(stats->u.ring + i,
|
||||||
@@ -2149,21 +2116,10 @@ int ipa3_get_rtk_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
u64 low, high;
|
u64 low, high;
|
||||||
int ipa_ep_idx_tx, ipa_ep_idx_rx;
|
|
||||||
|
|
||||||
ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_RTK_ETHERNET_CONS);
|
if (!ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio)
|
||||||
ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_RTK_ETHERNET_PROD);
|
|
||||||
|
|
||||||
if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_tx].valid ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_rx].valid) {
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
if (!ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio) {
|
|
||||||
IPAERR("bad parms NULL eth_gsi_stats_mmio\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
||||||
for (i = 0; i < MAX_RTK_CHANNELS; i++) {
|
for (i = 0; i < MAX_RTK_CHANNELS; i++) {
|
||||||
ipa3_get_gsi_ring_stats(&stats->u.rtk[i].commStats,
|
ipa3_get_gsi_ring_stats(&stats->u.rtk[i].commStats,
|
||||||
|
@@ -1458,6 +1458,21 @@ int ipa_pm_exceptions_stat(char *buf, int size)
|
|||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ipa_pm_get_scaling_bw_levels(struct ipa_lnx_clock_stats *clock_stats)
|
||||||
|
{
|
||||||
|
struct clk_scaling_db *clk;
|
||||||
|
|
||||||
|
if (ipa_pm_ctx) {
|
||||||
|
clk = &ipa_pm_ctx->clk_scaling;
|
||||||
|
if (clk->threshold_size >= 3) {
|
||||||
|
clock_stats->scale_thresh_svs = clk->current_threshold[0];
|
||||||
|
clock_stats->scale_thresh_nom = clk->current_threshold[1];
|
||||||
|
clock_stats->scale_thresh_tur = clk->current_threshold[2];
|
||||||
|
return 0;
|
||||||
|
} else return -EINVAL;
|
||||||
|
} else return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
int ipa_pm_get_aggregated_throughput(void)
|
int ipa_pm_get_aggregated_throughput(void)
|
||||||
{
|
{
|
||||||
if (ipa_pm_ctx)
|
if (ipa_pm_ctx)
|
||||||
|
@@ -402,16 +402,12 @@ static int ipa_get_clock_stats(unsigned long arg)
|
|||||||
clock_stats = (struct ipa_lnx_clock_stats *) memdup_user((
|
clock_stats = (struct ipa_lnx_clock_stats *) memdup_user((
|
||||||
const void __user *)arg, alloc_size);
|
const void __user *)arg, alloc_size);
|
||||||
if (IS_ERR(clock_stats)) {
|
if (IS_ERR(clock_stats)) {
|
||||||
IPA_STATS_ERR("copy from user failed");
|
IPA_STATS_ERR("copy from user failed\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
clock_stats->scale_thresh_svs =
|
if(ipa_pm_get_scaling_bw_levels(clock_stats))
|
||||||
ipa3_ctx->ctrl->clock_scaling_bw_threshold_svs;
|
IPA_STATS_ERR("Couldn't get scaling bw levels\n");
|
||||||
clock_stats->scale_thresh_nom =
|
|
||||||
ipa3_ctx->ctrl->clock_scaling_bw_threshold_nominal;
|
|
||||||
clock_stats->scale_thresh_tur =
|
|
||||||
ipa3_ctx->ctrl->clock_scaling_bw_threshold_turbo;
|
|
||||||
clock_stats->aggr_bw =
|
clock_stats->aggr_bw =
|
||||||
ipa_pm_get_aggregated_throughput();
|
ipa_pm_get_aggregated_throughput();
|
||||||
clock_stats->curr_clk_vote = ipa_pm_get_current_clk_vote();
|
clock_stats->curr_clk_vote = ipa_pm_get_current_clk_vote();
|
||||||
@@ -955,6 +951,7 @@ static int ipa_get_eth_inst_stats(unsigned long arg)
|
|||||||
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
||||||
(instance_ptr->num_pipes *
|
(instance_ptr->num_pipes *
|
||||||
sizeof(struct ipa_lnx_pipe_info)));
|
sizeof(struct ipa_lnx_pipe_info)));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(ipa3_get_aqc_gsi_stats(&stats)) {
|
if(ipa3_get_aqc_gsi_stats(&stats)) {
|
||||||
@@ -967,6 +964,7 @@ static int ipa_get_eth_inst_stats(unsigned long arg)
|
|||||||
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
||||||
(instance_ptr->num_pipes *
|
(instance_ptr->num_pipes *
|
||||||
sizeof(struct ipa_lnx_pipe_info)));
|
sizeof(struct ipa_lnx_pipe_info)));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1012,6 +1010,7 @@ static int ipa_get_eth_inst_stats(unsigned long arg)
|
|||||||
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
||||||
(instance_ptr->num_pipes *
|
(instance_ptr->num_pipes *
|
||||||
sizeof(struct ipa_lnx_pipe_info)));
|
sizeof(struct ipa_lnx_pipe_info)));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
client_type = IPA_CLIENT_RTK_ETHERNET_CONS;
|
client_type = IPA_CLIENT_RTK_ETHERNET_CONS;
|
||||||
instance_ptr->pm_bandwidth =
|
instance_ptr->pm_bandwidth =
|
||||||
@@ -1390,6 +1389,7 @@ static int ipa_get_mhip_inst_stats(unsigned long arg)
|
|||||||
(instance_ptr->gsi_debug_stats.num_rx_instances *
|
(instance_ptr->gsi_debug_stats.num_rx_instances *
|
||||||
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
sizeof(struct ipa_lnx_gsi_rx_debug_stats)) +
|
||||||
(instance_ptr->num_pipes * sizeof(struct ipa_lnx_pipe_info)));
|
(instance_ptr->num_pipes * sizeof(struct ipa_lnx_pipe_info)));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_instance_ptr = (struct ipa_lnx_gsi_tx_debug_stats *)((
|
tx_instance_ptr = (struct ipa_lnx_gsi_tx_debug_stats *)((
|
||||||
@@ -1505,6 +1505,7 @@ static int ipa_stats_get_alloc_info(unsigned long arg)
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int j, k;
|
int j, k;
|
||||||
int holb_drop_stats_num_pipes = 0;
|
int holb_drop_stats_num_pipes = 0;
|
||||||
|
int ipa_ep_idx_tx, ipa_ep_idx_rx;
|
||||||
int ipa_client_type;
|
int ipa_client_type;
|
||||||
int reg_idx;
|
int reg_idx;
|
||||||
int index;
|
int index;
|
||||||
@@ -1546,31 +1547,39 @@ static int ipa_stats_get_alloc_info(unsigned long arg)
|
|||||||
|
|
||||||
/* For WLAN instance */
|
/* For WLAN instance */
|
||||||
if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_WLAN_STATS) {
|
if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_WLAN_STATS) {
|
||||||
ipa_lnx_agent_ctx.alloc_info.num_wlan_instances = 1;
|
ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_CONS);
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_pipes = 2;
|
ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_PROD);
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_tx_instances = 1;
|
if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_rx_instances = 1;
|
!ipa3_ctx->ep[ipa_ep_idx_tx].valid ||
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].pipes_client_type[0]
|
!ipa3_ctx->ep[ipa_ep_idx_rx].valid) {
|
||||||
= IPA_CLIENT_WLAN2_CONS;
|
ipa_lnx_agent_ctx.alloc_info.num_wlan_instances = 0;
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].pipes_client_type[1]
|
} else {
|
||||||
= IPA_CLIENT_WLAN2_PROD;
|
ipa_lnx_agent_ctx.alloc_info.num_wlan_instances = 1;
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].tx_inst_client_type[0]
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_pipes = 2;
|
||||||
= IPA_CLIENT_WLAN2_CONS;
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_tx_instances = 1;
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].rx_inst_client_type[0]
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_rx_instances = 1;
|
||||||
= IPA_CLIENT_WLAN2_PROD;
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].pipes_client_type[0]
|
||||||
if(ipa_wdi_is_tx1_used() == 1) {
|
= IPA_CLIENT_WLAN2_CONS;
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_tx_instances++;
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].pipes_client_type[1]
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_pipes++;
|
= IPA_CLIENT_WLAN2_PROD;
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].tx_inst_client_type[0]
|
||||||
0].pipes_client_type[2] = IPA_CLIENT_WLAN2_CONS1;
|
= IPA_CLIENT_WLAN2_CONS;
|
||||||
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].rx_inst_client_type[0]
|
||||||
0].tx_inst_client_type[1] = IPA_CLIENT_WLAN2_CONS1;
|
= IPA_CLIENT_WLAN2_PROD;
|
||||||
|
if(ipa_wdi_is_tx1_used() == 1) {
|
||||||
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_tx_instances++;
|
||||||
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[0].num_pipes++;
|
||||||
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[
|
||||||
|
0].pipes_client_type[2] = IPA_CLIENT_WLAN2_CONS1;
|
||||||
|
ipa_lnx_agent_ctx.alloc_info.wlan_inst_info[
|
||||||
|
0].tx_inst_client_type[1] = IPA_CLIENT_WLAN2_CONS1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For ETH instance */
|
/* For ETH instance */
|
||||||
if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_ETH_STATS) {
|
if (ipa_lnx_agent_ctx.log_type_mask & SPRHD_IPA_LOG_TYPE_ETH_STATS) {
|
||||||
ipa_lnx_agent_ctx.alloc_info.num_eth_instances = IPA_ETH_INST_ID_MAX;
|
ipa_lnx_agent_ctx.alloc_info.num_eth_instances = 0;
|
||||||
for (i = 0; i < IPA_ETH_INST_ID_MAX; i++) {
|
for (i = 0; i < IPA_ETH_INST_ID_MAX; i++) {
|
||||||
ipa_lnx_agent_ctx.alloc_info.eth_inst_info[i].num_pipes = 0;
|
ipa_lnx_agent_ctx.alloc_info.eth_inst_info[i].num_pipes = 0;
|
||||||
ipa_lnx_agent_ctx.alloc_info.eth_inst_info[i].num_pipes = 0;
|
ipa_lnx_agent_ctx.alloc_info.eth_inst_info[i].num_pipes = 0;
|
||||||
@@ -1609,6 +1618,7 @@ static int ipa_stats_get_alloc_info(unsigned long arg)
|
|||||||
}
|
}
|
||||||
ipa_lnx_agent_ctx.alloc_info.eth_inst_info[
|
ipa_lnx_agent_ctx.alloc_info.eth_inst_info[
|
||||||
i].pipes_client_type[(k*2) + 1] = ipa_client_type;
|
i].pipes_client_type[(k*2) + 1] = ipa_client_type;
|
||||||
|
ipa_lnx_agent_ctx.alloc_info.num_eth_instances++;
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1205,21 +1205,9 @@ exit:
|
|||||||
int ipa3_get_wdi3_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
int ipa3_get_wdi3_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int ipa_ep_idx_tx, ipa_ep_idx_rx;
|
|
||||||
|
|
||||||
ipa_ep_idx_tx = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_CONS);
|
if (!ipa3_ctx->wdi3_ctx.dbg_stats.uc_dbg_stats_mmio)
|
||||||
ipa_ep_idx_rx = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_PROD);
|
|
||||||
|
|
||||||
if ((ipa_ep_idx_tx == -1) || (ipa_ep_idx_rx == -1) ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_tx].valid ||
|
|
||||||
!ipa3_ctx->ep[ipa_ep_idx_rx].valid) {
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
if (!ipa3_ctx->wdi3_ctx.dbg_stats.uc_dbg_stats_mmio) {
|
|
||||||
IPAERR("bad NULL parms for wdi3_gsi_stats\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
||||||
for (i = 0; i < MAX_WDI3_CHANNELS; i++) {
|
for (i = 0; i < MAX_WDI3_CHANNELS; i++) {
|
||||||
|
Reference in New Issue
Block a user