HRESULT briGetThisNodeAddr(uint32 *pNodeAddr) { HRESULT hResult = NO_ERROR; if (briIsSelfIDsValid() == FALSE) { hResult = E_LHL_NODEID_NOT_AVAIL; sysLogError(hResult, __LINE__, moduleName); return hResult; } *pNodeAddr = (uint32) (briLocalNodeInfo.busId | briLocalNodeInfo.nodeId); return hResult; }
HRESULT briGetBusID(uint16 *pBusId) { HRESULT hResult = NO_ERROR; if (briIsSelfIDsValid() == TRUE) { *pBusId = briLocalNodeInfo.busId; } else { hResult = E_LHL_NODEID_NOT_AVAIL; sysLogError(hResult, __LINE__, moduleName); return hResult; } return hResult; }
HRESULT nciGetNodeInfo(uint32 nodeAddr, LAL_DEVICE_INFO *plalDevInfo) { HRESULT hResult = NO_ERROR; uint32 nodeId = (nodeAddr & MASK_NODEID); if (plalDevInfo == NULL) { hResult = E_BAD_INPUT_PARAMETERS; sysLogError(hResult, __LINE__, moduleName); return hResult; } // LM??? this will not work in bridged environment if (briIsSelfIDsValid() != TRUE) { hResult = E_NCI_NODE_INFO_NOT_AVAILABLE; sysLogError(hResult, __LINE__, moduleName); return hResult; } #if 1 //LM??? else if (nodeAddr == BROADCAST_NODE_ADDR) { plalDevInfo->active = TRUE; plalDevInfo->nodeAddr = nodeAddr; plalDevInfo->WWUID.hi = 0; plalDevInfo->WWUID.low = BROADCAST_NODE_ADDR; plalDevInfo->maxRec = BUSINFO_MAXREC_NONE; //LM??? return hResult; } #endif else if ((nodeAddr < LOCAL_BUS_ID_MASK) || ((nodeId & MASK_NODEID) >= briGetNumNodes())) { hResult = E_NCI_NODE_ID_OUT_OF_RANGE; sysLogError(hResult, __LINE__, moduleName); return hResult; } plalDevInfo->active = TRUE; plalDevInfo->nodeAddr = nodeAddr; plalDevInfo->WWUID.hi = briGetBusInfoBlockCacheData(nodeId, BIB_WWUIDHI_QUAD); plalDevInfo->WWUID.low = briGetBusInfoBlockCacheData(nodeId, BIB_WWUIDLO_QUAD); plalDevInfo->maxRec = briGetBusInfoBlockCacheData(nodeId, BIB_NODECAPS_QUAD) & BUSINFO_MAXREC; return hResult; }
HRESULT nciGetBusInfo(LAL_BUS_RESET_INFO* plalInfoBlock) { HRESULT hResult = NO_ERROR; uint32 busGen = 0; if (briIsSelfIDsValid() != TRUE) { hResult = E_NCI_BUS_INFO_NOT_AVAILABLE; sysLogError(hResult, __LINE__, moduleName); return hResult; } if (nciInfoBlock.bValid != TRUE) { hResult = E_NCI_NODE_INFO_NOT_AVAILABLE; sysLogError(hResult, __LINE__, moduleName); return hResult; } hResult = briGetCurrentBusGeneration(&busGen); if (hResult != NO_ERROR) return hResult; nciInfoBlock.busGeneration = busGen; hResult = briGetThisNodeAddr(&nciInfoBlock.nodeAddr); if (hResult != NO_ERROR) return hResult; hResult = briGetBusID(&nciInfoBlock.busId); if (hResult != NO_ERROR) return hResult; hResult = lhlBriGetCycleTime(&nciInfoBlock.currentTime); if (hResult != NO_ERROR) return hResult; plalInfoBlock->currentTime = nciInfoBlock.currentTime; plalInfoBlock->busGeneration = nciInfoBlock.busGeneration; plalInfoBlock->numNodes = nciInfoBlock.numNodes; plalInfoBlock->rootAddr = nciInfoBlock.rootAddr; plalInfoBlock->irmAddr = nciInfoBlock.irmAddr; plalInfoBlock->numSelfIDs = nciInfoBlock.numSelfIDs; plalInfoBlock->nodeAddr = nciInfoBlock.nodeAddr; plalInfoBlock->busId = nciInfoBlock.busId; plalInfoBlock->SIDBundle = nciInfoBlock.SIDBundle; return hResult; }
/********************************************************* Called by BR Thread. Have the NCI validate the self-id bundle, find IRM, etc. */ HRESULT briProcessSelfId(void) { HRESULT hResult = NO_ERROR; if (briIsSelfIDsValid() == TRUE) { hResult = nciVerifySelfIDs( briGetSIDs(), briGetNumSIDQuads(), briGetNumNodes()); } else { hResult = E_LHL_SELF_ID_DATA_ERROR; sysLogError(hResult, __LINE__, moduleName); return hResult; } return hResult; }