static INT32 _stp_dbg_dmp_in (MTKSTP_DBG_T *stp_dbg, CHAR *buf, INT32 len) { UINT32 internalFlag = stp_dbg->logsys->size < STP_DBG_LOG_ENTRY_NUM; #ifdef CONFIG_LOG_STP_INTERNAL internalFlag = 1; #endif osal_lock_unsleepable_lock(&(stp_dbg->logsys->lock)); if (internalFlag){ stp_dbg->logsys->queue[stp_dbg->logsys->in].id = 0; stp_dbg->logsys->queue[stp_dbg->logsys->in].len = len; osal_memcpy(&(stp_dbg->logsys->queue[stp_dbg->logsys->in].buffer[0]),buf, ((len >= STP_DBG_LOG_ENTRY_SZ)? (STP_DBG_LOG_ENTRY_SZ):(len))); stp_dbg->logsys->size++; stp_dbg->logsys->size = (stp_dbg->logsys->size > STP_DBG_LOG_ENTRY_NUM) ? STP_DBG_LOG_ENTRY_NUM : stp_dbg->logsys->size; stp_dbg->logsys->in = (stp_dbg->logsys->in >= (STP_DBG_LOG_ENTRY_NUM - 1))?(0):(stp_dbg->logsys->in + 1); STP_DBG_DBG_FUNC("logsys size = %d, in = %d\n", stp_dbg->logsys->size, stp_dbg->logsys->in); } else { STP_DBG_WARN_FUNC("logsys FULL!\n"); } osal_unlock_unsleepable_lock(&(stp_dbg->logsys->lock)); return 0; }
static int _stp_dbg_dmp_in(MTKSTP_DBG_T *stp_dbg, char *buf, int len) { unsigned long flags; unsigned int internalFlag = stp_dbg->logsys->size < STP_DBG_LOG_ENTRY_NUM; //#ifdef CONFIG_LOG_STP_INTERNAL //Here we record log in this circle buffer, if buffer is full , select to overlap earlier log, logic should be okay internalFlag = 1; //#endif spin_lock_irqsave(&(stp_dbg->logsys->lock), flags); if(internalFlag) { stp_dbg->logsys->queue[stp_dbg->logsys->in].id = 0; stp_dbg->logsys->queue[stp_dbg->logsys->in].len = len; memset(&(stp_dbg->logsys->queue[stp_dbg->logsys->in].buffer[0]), 0, ((len >= STP_DBG_LOG_ENTRY_SZ)? (STP_DBG_LOG_ENTRY_SZ):(len))); memcpy(&(stp_dbg->logsys->queue[stp_dbg->logsys->in].buffer[0]), buf, ((len >= STP_DBG_LOG_ENTRY_SZ)? (STP_DBG_LOG_ENTRY_SZ):(len))); stp_dbg->logsys->size++; stp_dbg->logsys->size = (stp_dbg->logsys->size > STP_DBG_LOG_ENTRY_NUM) ? STP_DBG_LOG_ENTRY_NUM : stp_dbg->logsys->size; if (0 != gStpDbgLogOut) { STP_DBG_HDR_T *pHdr = NULL; char* pBuf = NULL; unsigned int len =0; pHdr = (STP_DBG_HDR_T *)&(stp_dbg->logsys->queue[stp_dbg->logsys->in].buffer[0]); pBuf = (char *)&(stp_dbg->logsys->queue[stp_dbg->logsys->in].buffer[0]) + sizeof (STP_DBG_HDR_T); len = stp_dbg->logsys->queue[stp_dbg->logsys->in].len - sizeof (STP_DBG_HDR_T); printk("STP-DBG:%d.%ds, %s:pT%sn(%d)l(%d)s(%d)a(%d)\n", \ pHdr->sec, pHdr->usec, pHdr->dir == PKT_DIR_TX ? "Tx" : "Rx", gStpDbgType[pHdr->type], pHdr->no, pHdr->len, pHdr->seq, pHdr->ack ); if (0 < len) { stp_dbg_dump_data(pBuf, pHdr->dir == PKT_DIR_TX ? "Tx" : "Rx", len); } } stp_dbg->logsys->in = (stp_dbg->logsys->in >= (STP_DBG_LOG_ENTRY_NUM - 1))?(0):(stp_dbg->logsys->in + 1); STP_DBG_DBG_FUNC("logsys size = %d, in = %d\n", stp_dbg->logsys->size, stp_dbg->logsys->in); } else { STP_DBG_WARN_FUNC("logsys FULL!\n"); } spin_unlock_irqrestore(&(stp_dbg->logsys->lock), flags); return 0; }