void RPC_HandleEvent(void *eventHandle) { UInt8 clientId = 0; ResultDataBuffer_t *dataBuf; Result_t res = RESULT_OK; PACKET_BufHandle_t bufHandle = (PACKET_BufHandle_t) eventHandle; dataBuf = capi2_malloc(sizeof(ResultDataBuffer_t)); if (dataBuf) { dataBuf->refCount = 1; res = RPC_DeserializeMsg(RPC_PACKET_GetBufferData(bufHandle), RPC_PACKET_GetBufferLength(bufHandle), dataBuf); if (res == RESULT_OK) { Boolean isUnsolicited; UInt8 clientIndex = GetClientIndex(dataBuf, &isUnsolicited); clientId = RPC_SYS_GetClientID(clientIndex); RPC_USER_LOCK(gRpcLock); RPC_DispatchMsg(dataBuf); RPC_USER_UNLOCK(gRpcLock); } else { capi2_free(dataBuf); } } RPC_PACKET_FreeBufferEx(bufHandle, clientId); }
/** @fn RPC_Result_t bcm_fuse_net_bd_cb(PACKET_InterfaceType_t interfaceType, unsigned char cid, PACKET_BufHandle_t dataBufHandle); */ static RPC_Result_t bcm_fuse_net_bd_cb(PACKET_InterfaceType_t interfaceType, unsigned char cid, PACKET_BufHandle_t dataBufHandle) { unsigned long data_len = 0; struct sk_buff *skb = NULL; unsigned char *data_ptr = NULL; net_drvr_info_t *ndrvr_info_ptr = NULL; //BNET_DEBUG(DBG_INFO,"%s: receive packet \n", __FUNCTION__); data_len = RPC_PACKET_GetBufferLength(dataBufHandle); //BNET_DEBUG(DBG_INFO,"%s: RECVD Buffer Delivery on AP Packet channel, cid[%d] size[%d]!!\n", __FUNCTION__, cid, data_len); //ndrvr_info_ptr = &g_net_dev_tbl[0]; ndrvr_info_ptr = bcm_fuse_net_device_pdp_lookup(cid); if (ndrvr_info_ptr == NULL) { if (printk_ratelimit()) BNET_DEBUG(DBG_ERROR,"%s: bcm_fuse_net_device_pdp_lookup failed\n", __FUNCTION__); return RPC_RESULT_ERROR; } skb = dev_alloc_skb(data_len); if (skb == NULL) { if (printk_ratelimit()) BNET_DEBUG(DBG_ERROR,"%s: dev_alloc_skb() failed - packet dropped\n", __FUNCTION__); ndrvr_info_ptr->stats.rx_dropped++; return RPC_RESULT_ERROR; } data_ptr = (unsigned char*)RPC_PACKET_GetBufferData(dataBufHandle); memcpy(skb_put(skb, data_len), data_ptr, data_len); skb->dev = ndrvr_info_ptr->dev_ptr; skb->protocol=htons(ETH_P_IP); // skb->ip_summed = CHECKSUM_UNNECESSARY; /* don't check it */ skb->pkt_type = PACKET_HOST; ndrvr_info_ptr->dev_ptr->last_rx = jiffies; bcm_fuse_net_last_rx = ndrvr_info_ptr->dev_ptr->last_rx; ndrvr_info_ptr->stats.rx_packets++; ndrvr_info_ptr->stats.rx_bytes += data_len; netif_rx(skb); return RPC_RESULT_OK; }
void eemDispatchPacket(void* pkt, UInt8 cid) { Boolean handled = TRUE; int len = RPC_PACKET_GetBufferLength((PACKET_BufHandle_t)pkt); UInt8* buf = RPC_PACKET_GetBufferData((PACKET_BufHandle_t)pkt); if(sEemCb.recv) { handled = sEemCb.recv(buf, len, pkt); } Log_DebugPrintf(LOGID_SYSEEMRPC, "AP eemDispatchPacket recv len:%d buf:%x pkt:%x handled:%d cbk:%x", len, buf, pkt, handled,sEemCb.recv); if(handled) RPC_PACKET_FreeBuffer((PACKET_BufHandle_t)pkt); }
void RPC_HandleEvent(void* eventHandle) { ResultDataBuffer_t* dataBuf; Result_t res = RESULT_OK; PACKET_BufHandle_t bufHandle = (PACKET_BufHandle_t)eventHandle; dataBuf = capi2_malloc(sizeof(ResultDataBuffer_t)); if(dataBuf) { dataBuf->refCount = 1; res = RPC_DeserializeMsg(RPC_PACKET_GetBufferData(bufHandle), RPC_PACKET_GetBufferLength(bufHandle),dataBuf); if(res == RESULT_OK) { RPC_DispatchMsg(dataBuf); } } RPC_PACKET_FreeBuffer(bufHandle); }