int rttm_recv(void *buf,u32 len) { S_RTTM_CONTEXT *prttm=NULL; prttm=DEV_GETRTT_HDL(); ath6kl_dbg(ATH6KL_DBG_RTT,"RTT Resp Type : %d Len : %d ",((struct nsp_mresphdr *)buf)->response_type,len); if(prttm->burst==0) { //Begin Burst prttm->burst=1; if(((struct nsp_mresphdr *)buf)->response_type == 1) { prttm->burstsize =MRES_LEN + (((struct nsp_mresphdr *)buf)->no_of_responses*CIR_RES_LEN) ; } else { prttm->burstsize =MRES_LEN + sizeof(struct nsp_rtt_resp) ; } if(prttm->burstsize > (RTTM_CIR_BUF_SIZE - (prttm->pvbufptr - prttm->cirbuf))) { prttm->pvbufptr = prttm->cirbuf; prttm->pvreadptr = prttm->cirbuf; } prttm->privptr = prttm->pvbufptr; ((S_RTT_PRIV_HDR *)(prttm->privptr))->done = 0x0; prttm->pvbufptr+=sizeof(S_RTT_PRIV_HDR); } memcpy(prttm->pvbufptr,buf,len); prttm->pvbufptr+=len; prttm->burstsize-=len; if(0==prttm->burstsize) { prttm->burst = 0; //DumpRttResp(prttm->privptr+sizeof(S_RTT_PRIV_HDR)); ((S_RTT_PRIV_HDR *)(prttm->privptr))->done = 0x1; prttm->nCirResp++; { //Pass up Recv RTT Resp by NL void *data=NULL; u32 datalen=0; rttm_getbuf(&data,&datalen); if(data && datalen) { ath6kl_dbg(ATH6KL_DBG_RTT,"NLSend Len : %d ",datalen); ath_netlink_send(data,datalen); } } } return 0; }
int rttm_recv(void *buf, u32 len) { #define RTTM_CONTEXT_PREFIX_OFFSET \ (sizeof(u32) + sizeof(u32) + sizeof(struct ath6kl *)) struct rttm_context *prttm = NULL; struct nsp_mresphdr *presphdr = (struct nsp_mresphdr *)buf; int resptype = presphdr->response_type; prttm = DEV_GETRTT_HDL(); /* printk("RTT Recv Len : %d %d\n", len, resptype); */ if ((resptype == MRESP_CLKOFFSETCAL_START) || (resptype == MRESP_CLKOFFSETCAL_END)) { ath6kl_dbg(ATH6KL_DBG_RTT, "RTT ClkCal Request %d\n", resptype); if (resptype == MRESP_CLKOFFSETCAL_START) { prttm->rttdhclkcal_active = 1; prttm->dhclkcal_index = 0; } else if (resptype == MRESP_CLKOFFSETCAL_END) { prttm->rttdhclkcal_active = 0; prttm->dhclkcal_index = 0; /* Post Response of measurements to Device */ prttm->mresphdr.frame_type = NSP_RTTCLKCAL_INFO; rttm_issue_request( (char *)prttm + RTTM_CONTEXT_PREFIX_OFFSET, NSP_HDR_LEN + sizeof(struct nsp_rtt_clkoffset)); } } else { if (buf && len) { /* Pass up Recv RTT Resp by NL */ /* DumpRttResp(buf); */ ath6kl_dbg(ATH6KL_DBG_RTT, "NLSend Len : %d ", len); ath_netlink_send(buf, len); } } return 0; }