2006-05-30 13:56:48 +00:00
|
|
|
/**
|
|
|
|
* @file IxNpeMhUnsolicitedCbMgr.c
|
|
|
|
*
|
|
|
|
* @author Intel Corporation
|
|
|
|
* @date 18 Jan 2002
|
|
|
|
*
|
|
|
|
* @brief This file contains the implementation of the private API for
|
|
|
|
* the Unsolicited Callback Manager module.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @par
|
|
|
|
* IXP400 SW Release version 2.0
|
|
|
|
*
|
|
|
|
* -- Copyright Notice --
|
|
|
|
*
|
|
|
|
* @par
|
|
|
|
* Copyright 2001-2005, Intel Corporation.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* @par
|
2013-07-28 20:12:47 +00:00
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
2006-05-30 13:56:48 +00:00
|
|
|
* @par
|
|
|
|
* -- End of Copyright Notice --
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Put the system defined include files required.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Put the user defined include files required.
|
|
|
|
*/
|
|
|
|
#include "IxOsal.h"
|
|
|
|
|
|
|
|
#include "IxNpeMhMacros_p.h"
|
|
|
|
|
|
|
|
#include "IxNpeMhUnsolicitedCbMgr_p.h"
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* #defines and macros used in this file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Typedefs whose scope is limited to this file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct IxNpeMhUnsolicitedCallbackTable
|
|
|
|
*
|
|
|
|
* @brief This structure is used to maintain the list of registered
|
|
|
|
* callbacks. One entry exists for each message ID, and a NULL entry will
|
|
|
|
* signify that no callback has been registered for that ID.
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
/** array of entries */
|
|
|
|
IxNpeMhCallback entries[IX_NPEMH_MAX_MESSAGE_ID + 1];
|
|
|
|
} IxNpeMhUnsolicitedCallbackTable;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @struct IxNpeMhUnsolicitedCbMgrStats
|
|
|
|
*
|
|
|
|
* @brief This structure is used to maintain statistics for the Unsolicited
|
|
|
|
* Callback Manager module.
|
|
|
|
*/
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
UINT32 saves; /**< callback table saves */
|
|
|
|
UINT32 overwrites; /**< callback table overwrites */
|
|
|
|
} IxNpeMhUnsolicitedCbMgrStats;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Variable declarations global to this file only. Externs are followed by
|
|
|
|
* static variables.
|
|
|
|
*/
|
|
|
|
|
|
|
|
PRIVATE IxNpeMhUnsolicitedCallbackTable
|
|
|
|
ixNpeMhUnsolicitedCallbackTables[IX_NPEMH_NUM_NPES];
|
|
|
|
|
|
|
|
PRIVATE IxNpeMhUnsolicitedCbMgrStats
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[IX_NPEMH_NUM_NPES];
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Extern function prototypes.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Static function prototypes.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Function definition: ixNpeMhUnsolicitedCbMgrInitialize
|
|
|
|
*/
|
|
|
|
|
|
|
|
void ixNpeMhUnsolicitedCbMgrInitialize (void)
|
|
|
|
{
|
|
|
|
IxNpeMhNpeId npeId = 0;
|
|
|
|
IxNpeMhUnsolicitedCallbackTable *table = NULL;
|
|
|
|
IxNpeMhMessageId messageId = 0;
|
|
|
|
|
|
|
|
IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Entering "
|
|
|
|
"ixNpeMhUnsolicitedCbMgrInitialize\n");
|
|
|
|
|
|
|
|
/* for each NPE ... */
|
|
|
|
for (npeId = 0; npeId < IX_NPEMH_NUM_NPES; npeId++)
|
|
|
|
{
|
|
|
|
/* initialise a pointer to the table for convenience */
|
|
|
|
table = &ixNpeMhUnsolicitedCallbackTables[npeId];
|
|
|
|
|
|
|
|
/* for each message ID ... */
|
|
|
|
for (messageId = IX_NPEMH_MIN_MESSAGE_ID;
|
|
|
|
messageId <= IX_NPEMH_MAX_MESSAGE_ID; messageId++)
|
|
|
|
{
|
|
|
|
/* initialise the callback for this message ID to NULL */
|
|
|
|
table->entries[messageId] = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Exiting "
|
|
|
|
"ixNpeMhUnsolicitedCbMgrInitialize\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Function definition: ixNpeMhUnsolicitedCbMgrCallbackSave
|
|
|
|
*/
|
|
|
|
|
|
|
|
void ixNpeMhUnsolicitedCbMgrCallbackSave (
|
|
|
|
IxNpeMhNpeId npeId,
|
|
|
|
IxNpeMhMessageId unsolicitedMessageId,
|
|
|
|
IxNpeMhCallback unsolicitedCallback)
|
|
|
|
{
|
|
|
|
IxNpeMhUnsolicitedCallbackTable *table = NULL;
|
|
|
|
|
|
|
|
/* initialise a pointer to the table for convenience */
|
|
|
|
table = &ixNpeMhUnsolicitedCallbackTables[npeId];
|
|
|
|
|
|
|
|
IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Entering "
|
|
|
|
"ixNpeMhUnsolicitedCbMgrCallbackSave\n");
|
|
|
|
|
|
|
|
/* update statistical info */
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[npeId].saves++;
|
|
|
|
|
|
|
|
/* check if there is a callback already registered for this NPE and */
|
|
|
|
/* message ID */
|
|
|
|
if (table->entries[unsolicitedMessageId] != NULL)
|
|
|
|
{
|
|
|
|
/* if we are overwriting an existing callback */
|
|
|
|
if (unsolicitedCallback != NULL)
|
|
|
|
{
|
|
|
|
IX_NPEMH_TRACE2 (IX_NPEMH_DEBUG, "Unsolicited callback "
|
|
|
|
"overwriting existing callback for NPE ID %d "
|
|
|
|
"message ID 0x%02X\n", npeId, unsolicitedMessageId);
|
|
|
|
}
|
|
|
|
else /* if we are clearing an existing callback */
|
|
|
|
{
|
|
|
|
IX_NPEMH_TRACE2 (IX_NPEMH_DEBUG, "NULL unsolicited callback "
|
|
|
|
"clearing existing callback for NPE ID %d "
|
|
|
|
"message ID 0x%02X\n", npeId, unsolicitedMessageId);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* update statistical info */
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[npeId].overwrites++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* save the callback into the table */
|
|
|
|
table->entries[unsolicitedMessageId] = unsolicitedCallback;
|
|
|
|
|
|
|
|
IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Exiting "
|
|
|
|
"ixNpeMhUnsolicitedCbMgrCallbackSave\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Function definition: ixNpeMhUnsolicitedCbMgrCallbackRetrieve
|
|
|
|
*/
|
|
|
|
|
|
|
|
void ixNpeMhUnsolicitedCbMgrCallbackRetrieve (
|
|
|
|
IxNpeMhNpeId npeId,
|
|
|
|
IxNpeMhMessageId unsolicitedMessageId,
|
|
|
|
IxNpeMhCallback *unsolicitedCallback)
|
|
|
|
{
|
|
|
|
IxNpeMhUnsolicitedCallbackTable *table = NULL;
|
|
|
|
|
|
|
|
/* initialise a pointer to the table for convenience */
|
|
|
|
table = &ixNpeMhUnsolicitedCallbackTables[npeId];
|
|
|
|
|
|
|
|
/* retrieve the callback from the table */
|
|
|
|
*unsolicitedCallback = table->entries[unsolicitedMessageId];
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Function definition: ixNpeMhUnsolicitedCbMgrShow
|
|
|
|
*/
|
|
|
|
|
|
|
|
void ixNpeMhUnsolicitedCbMgrShow (
|
|
|
|
IxNpeMhNpeId npeId)
|
|
|
|
{
|
|
|
|
/* show the unsolicited callback table save counter */
|
|
|
|
IX_NPEMH_SHOW ("Unsolicited callback table saves",
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[npeId].saves);
|
|
|
|
|
|
|
|
/* show the unsolicited callback table overwrite counter */
|
|
|
|
IX_NPEMH_SHOW ("Unsolicited callback table overwrites",
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[npeId].overwrites);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Function definition: ixNpeMhUnsolicitedCbMgrShowReset
|
|
|
|
*/
|
|
|
|
|
|
|
|
void ixNpeMhUnsolicitedCbMgrShowReset (
|
|
|
|
IxNpeMhNpeId npeId)
|
|
|
|
{
|
|
|
|
/* reset the unsolicited callback table save counter */
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[npeId].saves = 0;
|
|
|
|
|
|
|
|
/* reset the unsolicited callback table overwrite counter */
|
|
|
|
ixNpeMhUnsolicitedCbMgrStats[npeId].overwrites = 0;
|
|
|
|
}
|