Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
/*********************************************************
	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;
}