RPC_Handle_t RPC_SYS_RegisterClient(const RPC_InitParams_t *params) { UInt8 userClientID; UInt8 clientIndex = 0; gClientIndex++; clientIndex = gClientIndex; if(clientIndex >= MAX_RPC_CLIENTS) return (RPC_Handle_t)NULL; gClientMap[clientIndex] = *params; RPC_PACKET_RegisterDataInd(0, (PACKET_InterfaceType_t)(gClientMap[clientIndex].iType), RPC_BufferDelivery, params->flowCb); rpc_internal_xdr_init(); rpc_register_xdr(clientIndex, params->xdrtbl, params->table_size); userClientID = SYS_GenClientID(); gClientIDs[userClientID] = clientIndex; gClientIDMap[clientIndex] = userClientID; gClientLocalMap[clientIndex].notifyUnsolicited = FALSE; _DBG_(RPC_TRACE("RPC_SYS_RegisterClient index=%d userClientID=%d", clientIndex, userClientID)); return (RPC_Handle_t)clientIndex; }
static int bcm_fuse_net_open(struct net_device *dev) { int i; net_drvr_info_t ndrvr_info_ptr; unsigned long flags; uint8_t idx = BCM_NET_MAX_PDP_CNTXS;//0; int ret = 0; static int IsFirstCall = 0; ndrvr_info_ptr.dev_ptr = dev; /** Register callbacks with the RPC Proxy server */ if (0 == IsFirstCall) { g_NetClientId = SYS_GenClientID(); ret = RPC_PACKET_RegisterDataInd (g_NetClientId, INTERFACE_PACKET, bcm_fuse_net_bd_cb, bcm_fuse_net_fc_cb); if (RPC_RESULT_OK != ret) { BNET_DEBUG(DBG_ERROR,"%s: first call client ID[%d] FAIL\n", __FUNCTION__, g_NetClientId); return(-1); } IsFirstCall++; BNET_DEBUG(DBG_INFO,"%s: first call client ID[%d]\n", __FUNCTION__, g_NetClientId); } for (i = 0; i < BCM_NET_MAX_PDP_CNTXS; i++) { BNET_DEBUG(DBG_INFO,"%s: g_net_dev_tbl[%d]=0x%x,dev_ptr 0x%x, dev 0x%x, 0x%x \n", __FUNCTION__, i, (unsigned int)(&g_net_dev_tbl[i]), (unsigned int)(g_net_dev_tbl[i].dev_ptr), (unsigned int)dev, (unsigned int)(&ndrvr_info_ptr)); } idx = bcm_fuse_net_find_entry(&ndrvr_info_ptr); if (idx == BCM_NET_MAX_PDP_CNTXS) { BNET_DEBUG(DBG_ERROR,"%s: No free device interface to assign for pdp_cid[%d]\n", __FUNCTION__, idx); return(-EISCONN); } spin_lock_irqsave(&g_dev_lock, flags); //g_net_dev_tbl[idx].pdp_context_id = idx+1; g_net_dev_tbl[idx].pdp_context_id = RMNET_TO_CID(idx); spin_unlock_irqrestore(&g_dev_lock, flags); BNET_DEBUG(DBG_INFO,"%s: BCM_FUSE_NET_ACTIVATE_PDP: rmnet[%d] pdp_info.cid=%d\n", __FUNCTION__, idx, g_net_dev_tbl[idx].pdp_context_id); netif_start_queue(dev); return 0; }
RPC_Handle_t RPC_SYS_RegisterClient(const RPC_InitParams_t *params) { UInt8 userClientID; UInt8 clientIndex = 0; int index; _DBG_(RPC_TRACE("RPC_SYS_RegisterClient gRpcInit=%d tblSize=%d", gRpcInit, params->table_size)); if (!gRpcInit) RPC_SYS_Init(NULL); RPC_USER_LOCK(gRpcLock); index = RPC_FindUnsedSlot(); if (index == -1) { _DBG_(RPC_TRACE ("RPC_SYS_RegisterClient ERROR Max clients reached")); RPC_USER_UNLOCK(gRpcLock); return (RPC_Handle_t) 0; } gClientIndex++; clientIndex = index; gClientMap[clientIndex] = *params; userClientID = SYS_GenClientID(); if (userClientID == 0) { _DBG_(RPC_TRACE ("RPC_SYS_RegisterClient client ID allocation fail")); RPC_USER_UNLOCK(gRpcLock); return (RPC_Handle_t) 0; } _DBG_(RPC_TRACE ("RPC_SYS_RegisterClient index=%d userClientID=%d gClientIndex=%d", clientIndex, userClientID, gClientIndex)); RPC_PACKET_RegisterDataInd(userClientID, (PACKET_InterfaceType_t)(gClientMap [clientIndex]. iType), RPC_BufferDelivery, params->flowCb, RPC_Handle_CPReset); rpc_internal_xdr_init(); rpc_register_xdr(clientIndex, params->xdrtbl, params->table_size); gClientIDs[userClientID] = clientIndex; gClientIDMap[clientIndex] = userClientID; gClientLocalMap[clientIndex].notifyUnsolicited = FALSE; gClientLocalMap[clientIndex].ackdCPReset = FALSE; RPC_USER_UNLOCK(gRpcLock); return (RPC_Handle_t) clientIndex; }