Exemple #1
0
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);
}
Exemple #2
0
/**
   @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;
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}