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;
}