static int dhd_dump(dhd_pub_t *dhdp, char *buf, int buflen) { struct bcmstrbuf b; struct bcmstrbuf *strbuf = &b; bcm_binit(strbuf, buf, buflen); /* Base DHD info */ bcm_bprintf(strbuf, "%s\n", dhd_version); bcm_bprintf(strbuf, "\n"); bcm_bprintf(strbuf, "pub.up %d pub.txoff %d pub.busstate %d\n", dhdp->up, dhdp->txoff, dhdp->busstate); bcm_bprintf(strbuf, "pub.hdrlen %d pub.maxctl %d pub.rxsz %d\n", dhdp->hdrlen, dhdp->maxctl, dhdp->rxsz); bcm_bprintf(strbuf, "pub.iswl %d pub.drv_version %ld pub.mac %pM\n", dhdp->iswl, dhdp->drv_version, &dhdp->mac); bcm_bprintf(strbuf, "pub.bcmerror %d tickcnt %d\n", dhdp->bcmerror, dhdp->tickcnt); bcm_bprintf(strbuf, "dongle stats:\n"); bcm_bprintf(strbuf, "tx_packets %ld tx_bytes %ld tx_errors %ld tx_dropped %ld\n", dhdp->dstats.tx_packets, dhdp->dstats.tx_bytes, dhdp->dstats.tx_errors, dhdp->dstats.tx_dropped); bcm_bprintf(strbuf, "rx_packets %ld rx_bytes %ld rx_errors %ld rx_dropped %ld\n", dhdp->dstats.rx_packets, dhdp->dstats.rx_bytes, dhdp->dstats.rx_errors, dhdp->dstats.rx_dropped); bcm_bprintf(strbuf, "multicast %ld\n", dhdp->dstats.multicast); bcm_bprintf(strbuf, "bus stats:\n"); bcm_bprintf(strbuf, "tx_packets %ld tx_multicast %ld tx_errors %ld\n", dhdp->tx_packets, dhdp->tx_multicast, dhdp->tx_errors); bcm_bprintf(strbuf, "tx_ctlpkts %ld tx_ctlerrs %ld\n", dhdp->tx_ctlpkts, dhdp->tx_ctlerrs); bcm_bprintf(strbuf, "rx_packets %ld rx_multicast %ld rx_errors %ld\n", dhdp->rx_packets, dhdp->rx_multicast, dhdp->rx_errors); bcm_bprintf(strbuf, "rx_ctlpkts %ld rx_ctlerrs %ld rx_dropped %ld rx_flushed %ld\n", dhdp->rx_ctlpkts, dhdp->rx_ctlerrs, dhdp->rx_dropped, dhdp->rx_flushed); bcm_bprintf(strbuf, "rx_readahead_cnt %ld tx_realloc %ld fc_packets %ld\n", dhdp->rx_readahead_cnt, dhdp->tx_realloc, dhdp->fc_packets); bcm_bprintf(strbuf, "wd_dpc_sched %ld\n", dhdp->wd_dpc_sched); bcm_bprintf(strbuf, "\n"); /* Add any prot info */ dhd_prot_dump(dhdp, strbuf); bcm_bprintf(strbuf, "\n"); /* Add any bus info */ dhd_bus_dump(dhdp, strbuf); return !strbuf->size ? -EOVERFLOW : 0; }
/* * EMFL Packet Counters/Statistics */ static int32 emf_stats_get(char *buf, char **start, off_t offset, int32 size, int32 *eof, void *data) { emf_info_t *emfi = (emf_info_t *)data; emf_cfg_request_t *cfg; emf_stats_t *emfs; struct bcmstrbuf b; ASSERT(emfi); cfg = MALLOC(emfi->osh, sizeof(emf_cfg_request_t)); if (cfg == NULL) { EMF_ERROR("Out of memory allocating emf_cfg_request\n"); return (FAILURE); } cfg->command_id = EMFCFG_CMD_EMF_STATS; cfg->oper_type = EMFCFG_OPER_TYPE_GET; cfg->size = sizeof(emf_stats_t); emfs = (emf_stats_t *)cfg->arg; emfc_cfg_request_process(emfi->emfci, cfg); if (cfg->status != EMFCFG_STATUS_SUCCESS) { EMF_ERROR("Unable to get the EMF stats\n"); MFREE(emfi->osh, cfg, sizeof(emf_cfg_request_t)); return (FAILURE); } bcm_binit(&b, buf, size); bcm_bprintf(&b, "McastDataPkts McastDataFwd McastFlooded " "McastDataSentUp McastDataDropped\n"); bcm_bprintf(&b, "%-15d %-15d %-15d %-15d %d\n", emfs->mcast_data_frames, emfs->mcast_data_fwd, emfs->mcast_data_flooded, emfs->mcast_data_sentup, emfs->mcast_data_dropped); bcm_bprintf(&b, "IgmpPkts IgmpPktsFwd " "IgmpPktsSentUp MFDBCacheHits MFDBCacheMisses\n"); bcm_bprintf(&b, "%-15d %-15d %-15d %-15d %d\n", emfs->igmp_frames, emfs->igmp_frames_fwd, emfs->igmp_frames_sentup, emfs->mfdb_cache_hits, emfs->mfdb_cache_misses); MFREE(emfi->osh, cfg, sizeof(emf_cfg_request_t)); if (b.size == 0) { EMF_ERROR("Input buffer overflow\n"); return (FAILURE); } return (b.buf - b.origbuf); }
static int dhd_dump(dhd_pub_t *dhdp, char *buf, int buflen) { char eabuf[ETHER_ADDR_STR_LEN]; struct bcmstrbuf b; struct bcmstrbuf *strbuf = &b; bcm_binit(strbuf, buf, buflen); /* Base DHD info */ bcm_bprintf(strbuf, "%s\n", dhd_version); bcm_bprintf(strbuf, "\n"); bcm_bprintf(strbuf, "pub.up %d pub.txoff %d pub.busstate %d\n", dhdp->up, dhdp->txoff, dhdp->busstate); bcm_bprintf(strbuf, "pub.hdrlen %d pub.maxctl %d pub.rxsz %d\n", dhdp->hdrlen, dhdp->maxctl, dhdp->rxsz); bcm_bprintf(strbuf, "pub.iswl %d pub.drv_version %ld pub.mac %s\n", dhdp->iswl, dhdp->drv_version, bcm_ether_ntoa(&dhdp->mac, eabuf)); bcm_bprintf(strbuf, "pub.bcmerror %d tickcnt %d\n", dhdp->bcmerror, dhdp->tickcnt); bcm_bprintf(strbuf, "dongle stats:\n"); bcm_bprintf(strbuf, "tx_packets %ld tx_bytes %ld tx_errors %ld tx_dropped %ld\n", dhdp->dstats.tx_packets, dhdp->dstats.tx_bytes, dhdp->dstats.tx_errors, dhdp->dstats.tx_dropped); bcm_bprintf(strbuf, "rx_packets %ld rx_bytes %ld rx_errors %ld rx_dropped %ld\n", dhdp->dstats.rx_packets, dhdp->dstats.rx_bytes, dhdp->dstats.rx_errors, dhdp->dstats.rx_dropped); bcm_bprintf(strbuf, "multicast %ld\n", dhdp->dstats.multicast); bcm_bprintf(strbuf, "bus stats:\n"); bcm_bprintf(strbuf, "tx_packets %ld tx_multicast %ld tx_errors %ld\n", dhdp->tx_packets, dhdp->tx_multicast, dhdp->tx_errors); bcm_bprintf(strbuf, "tx_ctlpkts %ld tx_ctlerrs %ld\n", dhdp->tx_ctlpkts, dhdp->tx_ctlerrs); bcm_bprintf(strbuf, "rx_packets %ld rx_multicast %ld rx_errors %ld \n", dhdp->rx_packets, dhdp->rx_multicast, dhdp->rx_errors); bcm_bprintf(strbuf, "rx_ctlpkts %ld rx_ctlerrs %ld rx_dropped %ld rx_flushed %ld\n", dhdp->rx_ctlpkts, dhdp->rx_ctlerrs, dhdp->rx_dropped, dhdp->rx_flushed); bcm_bprintf(strbuf, "rx_readahead_cnt %ld tx_realloc %ld\n", dhdp->rx_readahead_cnt, dhdp->tx_realloc); bcm_bprintf(strbuf, "\n"); /* Add any prot info */ dhd_prot_dump(dhdp, strbuf); bcm_bprintf(strbuf, "\n"); /* Add any bus info */ dhd_bus_dump(dhdp, strbuf); return (!strbuf->size ? BCME_BUFTOOSHORT : 0); }
static int32 igs_sdb_list(char *buf, char **start, off_t offset, int32 size, int32 *eof, void *data) { igs_info_t *igs_info = (igs_info_t *)data; igs_cfg_request_t *cfg; igs_cfg_sdb_list_t *list; int32 i; struct bcmstrbuf b; ASSERT(igs_info); cfg = MALLOC(igs_info->osh, sizeof(igs_cfg_request_t)); if (cfg == NULL) { IGS_ERROR("Out of memory allocating igs_cfg_request\n"); return (FAILURE); } strcpy(cfg->inst_id, igs_info->inst_id); cfg->command_id = IGSCFG_CMD_IGSDB_LIST; cfg->oper_type = IGSCFG_OPER_TYPE_GET; cfg->size = sizeof(cfg->arg); list = (igs_cfg_sdb_list_t *)cfg->arg; igsc_cfg_request_process(igs_info->igsc_info, cfg); if (cfg->status != IGSCFG_STATUS_SUCCESS) { IGS_ERROR("Unable to get the IGSDB list\n"); MFREE(igs_info->osh, cfg, sizeof(igs_cfg_request_t)); return (FAILURE); } bcm_binit(&b, buf, size); bcm_bprintf(&b, "Group Members Interface\n"); for (i = 0; i < list->num_entries; i++) { bcm_bprintf(&b, "%08x ", list->sdb_entry[i].mgrp_ip); bcm_bprintf(&b, "%08x ", list->sdb_entry[i].mh_ip); bcm_bprintf(&b, "%s\n", list->sdb_entry[i].if_name); } MFREE(igs_info->osh, cfg, sizeof(igs_cfg_request_t)); if (b.size == 0) { IGS_ERROR("Input buffer overflow\n"); return (FAILURE); } return (b.buf - b.origbuf); }
static int32 emf_mfdb_list(char *buf, char **start, off_t offset, int32 size, int32 *eof, void *data) { emf_info_t *emfi = (emf_info_t *)data; emf_cfg_request_t *cfg; struct bcmstrbuf b; emf_cfg_mfdb_list_t *list; int32 i; ASSERT(emfi); cfg = MALLOC(emfi->osh, sizeof(emf_cfg_request_t)); if (cfg == NULL) { EMF_ERROR("Out of memory allocating emf_cfg_request\n"); return (FAILURE); } cfg->command_id = EMFCFG_CMD_MFDB_LIST; cfg->oper_type = EMFCFG_OPER_TYPE_GET; cfg->size = sizeof(cfg->arg); list = (emf_cfg_mfdb_list_t *)cfg->arg; emfc_cfg_request_process(emfi->emfci, cfg); if (cfg->status != EMFCFG_STATUS_SUCCESS) { EMF_ERROR("Unable to get the MFDB list\n"); MFREE(emfi->osh, cfg, sizeof(emf_cfg_request_t)); return (FAILURE); } bcm_binit(&b, buf, size); bcm_bprintf(&b, "Group Interface Pkts\n"); for (i = 0; i < list->num_entries; i++) { bcm_bprintf(&b, "%08x ", list->mfdb_entry[i].mgrp_ip); bcm_bprintf(&b, "%-15s", list->mfdb_entry[i].if_name); bcm_bprintf(&b, "%d\n", list->mfdb_entry[i].pkts_fwd); } MFREE(emfi->osh, cfg, sizeof(emf_cfg_request_t)); if (b.size == 0) { EMF_ERROR("Input buffer overflow\n"); return (FAILURE); } return (b.buf - b.origbuf); }
static int bcm947xx_pcm_close(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; bcm947xx_i2s_info_t *snd_bcm = rtd->dai->cpu_dai->private_data; struct bcm947xx_runtime_data *brtd = substream->runtime->private_data; DBG("%s %s\n", __FUNCTION__, bcm947xx_direction_str(substream)); DBG("%s: i2s intstatus 0x%x intmask 0x%x\n", __FUNCTION__, R_REG(snd_bcm->osh, &snd_bcm->regs->intstatus), R_REG(snd_bcm->osh, &snd_bcm->regs->intmask)); /* #if required because dma_dump is unavailable in non-debug builds. */ #if BCM947XX_DUMP_RING_BUFFER_ON_PCM_CLOSE_ON { /* dump dma rings to console */ #if !defined(FIFOERROR_DUMP_SIZE) #define FIFOERROR_DUMP_SIZE 8192 #endif char *tmp; struct bcmstrbuf b; if (snd_bcm->di[0] && (tmp = MALLOC(snd_bcm->osh, FIFOERROR_DUMP_SIZE))) { bcm_binit(&b, tmp, FIFOERROR_DUMP_SIZE); dma_dump(snd_bcm->di[0], &b, TRUE); printbig(tmp); MFREE(snd_bcm->osh, tmp, FIFOERROR_DUMP_SIZE); } } #endif /* BCM947XX_DUMP_RING_BUFFER_ON_PCM_CLOSE_ON */ /* reclaim all descriptors */ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { dma_rxreset(snd_bcm->di[0]); dma_rxreclaim(snd_bcm->di[0]); } else { dma_txreset(snd_bcm->di[0]); dma_txreclaim(snd_bcm->di[0], HNDDMA_RANGE_ALL); } if (brtd) kfree(brtd); else DBG("%s: called with brtd == NULL\n", __FUNCTION__); return 0; }
/* * IGSL Packet Counters/Statistics Function */ static int32 igs_stats_get(char *buf, char **start, off_t offset, int32 size, int32 *eof, void *data) { igs_info_t *igs_info; igs_cfg_request_t cfg; igs_stats_t *stats; struct bcmstrbuf b; igs_info = (igs_info_t *)data; strcpy(cfg.inst_id, igs_info->inst_id); cfg.command_id = IGSCFG_CMD_IGS_STATS; cfg.oper_type = IGSCFG_OPER_TYPE_GET; cfg.size = sizeof(cfg.arg); stats = (igs_stats_t *)cfg.arg; igsc_cfg_request_process(igs_info->igsc_info, &cfg); if (cfg.status != IGSCFG_STATUS_SUCCESS) { IGS_ERROR("Unable to get the IGS stats\n"); return (FAILURE); } bcm_binit(&b, buf, size); bcm_bprintf(&b, "IgmpPkts IgmpQueries " "IgmpReports IgmpV2Reports IgmpLeaves\n"); bcm_bprintf(&b, "%-15d %-15d %-15d %-15d %d\n", stats->igmp_packets, stats->igmp_queries, stats->igmp_reports, stats->igmp_v2reports, stats->igmp_leaves); bcm_bprintf(&b, "IgmpNotHandled McastGroups " "McastMembers MemTimeouts\n"); bcm_bprintf(&b, "%-15d %-15d %-15d %d\n", stats->igmp_not_handled, stats->igmp_mcast_groups, stats->igmp_mcast_members, stats->igmp_mem_timeouts); if (b.size == 0) { IGS_ERROR("Input buffer overflow\n"); return (FAILURE); } return (b.buf - b.origbuf); }
/* * IGSL Packet Counters/Statistics Function */ static int32 igs_stats_get(char *buf, char **start, off_t offset, int32 size, int32 *eof, void *data) { igs_info_t *igs_info = (igs_info_t *)data; igs_cfg_request_t *cfg; igs_stats_t *stats; struct bcmstrbuf b; ASSERT(igs_info); cfg = MALLOC(igs_info->osh, sizeof(igs_cfg_request_t)); if (cfg == NULL) { IGS_ERROR("Out of memory allocating igs_cfg_request\n"); return (FAILURE); } strcpy(cfg->inst_id, igs_info->inst_id); cfg->command_id = IGSCFG_CMD_IGS_STATS; cfg->oper_type = IGSCFG_OPER_TYPE_GET; cfg->size = sizeof(cfg->arg); stats = (igs_stats_t *)cfg->arg; igsc_cfg_request_process(igs_info->igsc_info, cfg); if (cfg->status != IGSCFG_STATUS_SUCCESS) { IGS_ERROR("Unable to get the IGS stats\n"); MFREE(igs_info->osh, cfg, sizeof(igs_cfg_request_t)); return (FAILURE); } bcm_binit(&b, buf, size); bcm_bprintf(&b, "IgmpPkts IgmpQueries " "IgmpReports IgmpV2Reports " #ifdef SUPPORT_IGMP_V3 "IgmpV3Reports " #endif "IgmpLeaves\n"); bcm_bprintf(&b, "%-15d %-15d %-15d %-15d " #ifdef SUPPORT_IGMP_V3 "%-15d " #endif "%d\n", stats->igmp_packets, stats->igmp_queries, stats->igmp_reports, stats->igmp_v2reports, #ifdef SUPPORT_IGMP_V3 stats->igmp_v3reports, #endif stats->igmp_leaves); bcm_bprintf(&b, "IgmpNotHandled McastGroups " "McastMembers MemTimeouts\n"); bcm_bprintf(&b, "%-15d %-15d %-15d %d\n", stats->igmp_not_handled, stats->igmp_mcast_groups, stats->igmp_mcast_members, stats->igmp_mem_timeouts); MFREE(igs_info->osh, cfg, sizeof(igs_cfg_request_t)); if (b.size == 0) { IGS_ERROR("Input buffer overflow\n"); return (FAILURE); } return (b.buf - b.origbuf); }