static INT32 stp_btm_dump_send_retry_handler(PINT8 tmp, INT32 len) { if (NULL == tmp) return -1; INT32 rc = 0, nl_retry = 0; rc = stp_dbg_nl_send(tmp, 2, len+5); while (rc) { nl_retry++; if (rc == 32) { STP_BTM_ERR_FUNC("**dump send timeout : %d**\n", rc); return 1; } if (nl_retry > 1000) { STP_BTM_ERR_FUNC("**dump send fails, and retry more than 1000: %d.**\n", rc); return 2; } STP_BTM_WARN_FUNC("**dump send fails, and retry again.**\n"); osal_sleep_ms(3); rc = stp_dbg_nl_send(tmp, 2, len+5); if (!rc) STP_BTM_DBG_FUNC("****retry again ok!**\n"); } return rc; }
static INT32 _stp_btm_put_dump_to_nl(void) { #define NUM_FETCH_ENTRY 8 static UINT8 buf[2048]; static UINT8 tmp[2048]; UINT32 buf_len; STP_PACKET_T *pkt; STP_DBG_HDR_T *hdr; INT32 remain=0, index =0; INT32 retry = 0, rc = 0, nl_retry = 0; STP_BTM_INFO_FUNC("Enter..\n"); index = 0; tmp[index++]='['; tmp[index++]='M'; tmp[index++]=']'; do { index = 3; remain = stp_dbg_dmp_out_ex(&buf[0], &buf_len); if (buf_len > 0) { pkt = (STP_PACKET_T *)buf; hdr = &pkt->hdr; if (hdr->dbg_type == STP_DBG_FW_DMP){ memcpy(&tmp[index], pkt->raw, pkt->hdr.len); if(pkt->hdr.len <= 1500) { tmp[index + pkt->hdr.len] = '\n'; tmp[index + pkt->hdr.len + 1] = '\0'; //printk("\n%s\n+++\n", tmp); rc = stp_dbg_nl_send((char *)&tmp, 2); while(rc){ nl_retry++; if(nl_retry > 1000){ break; } STP_BTM_WARN_FUNC("**dump send fails, and retry again.**\n"); msleep(3); rc = stp_dbg_nl_send((char *)&tmp, 2); if(!rc){ STP_BTM_WARN_FUNC("****retry again ok!**\n"); } } //schedule(); } else { STP_BTM_INFO_FUNC("dump entry length is over long\n"); BUG_ON(0); } retry = 0; } }else { retry ++; msleep(100); } }while((remain > 0) || (retry < 2)); STP_BTM_INFO_FUNC("Exit..\n"); return 0; }