summaryrefslogtreecommitdiff
path: root/Acceleration/library/icp_telephony/tdm_infrastructure_message_handler/IxPiuMhUnsolicitedCbMgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'Acceleration/library/icp_telephony/tdm_infrastructure_message_handler/IxPiuMhUnsolicitedCbMgr.c')
-rw-r--r--Acceleration/library/icp_telephony/tdm_infrastructure_message_handler/IxPiuMhUnsolicitedCbMgr.c301
1 files changed, 301 insertions, 0 deletions
diff --git a/Acceleration/library/icp_telephony/tdm_infrastructure_message_handler/IxPiuMhUnsolicitedCbMgr.c b/Acceleration/library/icp_telephony/tdm_infrastructure_message_handler/IxPiuMhUnsolicitedCbMgr.c
new file mode 100644
index 0000000..468b5e5
--- /dev/null
+++ b/Acceleration/library/icp_telephony/tdm_infrastructure_message_handler/IxPiuMhUnsolicitedCbMgr.c
@@ -0,0 +1,301 @@
+/**
+ * @file IxPiuMhUnsolicitedCbMgr.c
+ *
+ * @author Intel Corporation
+ * @date 18 Jan 2002
+ *
+ * @description Contents are the implementation of the private API for
+ * the Unsolicited Callback Manager module.
+ *
+ *
+ * @par
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2007,2008,2009 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * Contact Information:
+ * Intel Corporation
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2007,2008,2009 Intel Corporation. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Intel Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ *
+*/
+
+/*
+ * Put the system defined include files required.
+ */
+
+
+/*
+ * Put the user defined include files required.
+ */
+#include "IxOsal.h"
+
+#include "IxPiuMhMacros_p.h"
+
+#include "IxPiuMhUnsolicitedCbMgr_p.h"
+
+
+/*
+ * #defines and macros used in this file.
+ */
+
+/*
+ * Typedefs whose scope is limited to this file.
+ */
+
+/**
+ * @struct IxPiuMhUnsolicitedCallbackTable
+ *
+ * @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 */
+ IxPiuMhCallback entries[IX_PIUMH_MAX_MESSAGE_ID + 1];
+} IxPiuMhUnsolicitedCallbackTable;
+
+/**
+ * @struct IxPiuMhUnsolicitedCbMgrStats
+ *
+ * @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 */
+} IxPiuMhUnsolicitedCbMgrStats;
+
+/*
+ * Variable declarations global to this file only. Externs are followed by
+ * static variables.
+ */
+
+PRIVATE IxPiuMhUnsolicitedCallbackTable
+ixPiuMhUnsolicitedCallbackTables[IX_PIUMH_NUM_PIUS];
+
+PRIVATE IxPiuMhUnsolicitedCbMgrStats
+ixPiuMhUnsolicitedCbMgrStats[IX_PIUMH_NUM_PIUS];
+
+/*
+ * Extern function prototypes.
+ */
+
+/*
+ * Static function prototypes.
+ */
+
+/*
+ * Function definition: ixPiuMhUnsolicitedCbMgrInitialize
+ */
+
+void ixPiuMhUnsolicitedCbMgrInitialize (void)
+{
+ IxPiuMhPiuId piuId = 0;
+ IxPiuMhUnsolicitedCallbackTable *table = NULL;
+ IxPiuMhMessageId messageId = 0;
+
+ IX_PIUMH_TRACE0 (IX_PIUMH_FN_ENTRY_EXIT, "Entering "
+ "ixPiuMhUnsolicitedCbMgrInitialize\n");
+
+ /* for each PIU ... */
+ for (piuId = 0; piuId < IX_PIUMH_NUM_PIUS; piuId++)
+ {
+ /* initialise a pointer to the table for convenience */
+ table = &ixPiuMhUnsolicitedCallbackTables[piuId];
+
+ /* for each message ID ... */
+ for (messageId = IX_PIUMH_MIN_MESSAGE_ID;
+ messageId <= IX_PIUMH_MAX_MESSAGE_ID; messageId++)
+ {
+ /* initialise the callback for this message ID to NULL */
+ table->entries[messageId] = NULL;
+ }
+ }
+
+ IX_PIUMH_TRACE0 (IX_PIUMH_FN_ENTRY_EXIT, "Exiting "
+ "ixPiuMhUnsolicitedCbMgrInitialize\n");
+}
+
+/*
+ * Function definition: ixPiuMhUnsolicitedCbMgrCallbackSave
+ */
+void ixPiuMhUnsolicitedCbMgrUninitialize (void)
+{
+ IxPiuMhPiuId piuId;
+ IxPiuMhUnsolicitedCallbackTable *table;
+ IxPiuMhMessageId messageId;
+
+ IX_PIUMH_TRACE0 (IX_PIUMH_FN_ENTRY_EXIT, "Entering "
+ "ixPiuMhUnsolicitedCbMgrUninitialize\n");
+
+ /* for each PIU ... */
+ for (piuId = 0; piuId < IX_PIUMH_NUM_PIUS; piuId++)
+ {
+ /* initialise a pointer to the table for convenience */
+ table = &ixPiuMhUnsolicitedCallbackTables[piuId];
+
+ /* for each message ID ... */
+ for (messageId = IX_PIUMH_MIN_MESSAGE_ID;
+ messageId <= IX_PIUMH_MAX_MESSAGE_ID; messageId++)
+ {
+ /* initialise the callback for this message ID to NULL */
+ table->entries[messageId] = NULL;
+ }
+ }
+ IX_PIUMH_TRACE0 (IX_PIUMH_FN_ENTRY_EXIT, "Exiting "
+ "ixPiuMhUnsolicitedCbMgrUninitialize\n");
+}
+
+/*
+ * Function definition: ixPiuMhUnsolicitedCbMgrCallbackSave
+ */
+
+void ixPiuMhUnsolicitedCbMgrCallbackSave (
+ IxPiuMhPiuId piuId,
+ IxPiuMhMessageId unsolicitedMessageId,
+ IxPiuMhCallback unsolicitedCallback)
+{
+ IxPiuMhUnsolicitedCallbackTable *table = NULL;
+
+ /* initialise a pointer to the table for convenience */
+ table = &ixPiuMhUnsolicitedCallbackTables[piuId];
+
+ IX_PIUMH_TRACE0 (IX_PIUMH_FN_ENTRY_EXIT, "Entering "
+ "ixPiuMhUnsolicitedCbMgrCallbackSave\n");
+
+ /* update statistical info */
+ ixPiuMhUnsolicitedCbMgrStats[piuId].saves++;
+
+ /* check if there is a callback already registered for this PIU and */
+ /* message ID */
+ if (table->entries[unsolicitedMessageId] != NULL)
+ {
+ /* if we are overwriting an existing callback */
+ if (unsolicitedCallback != NULL)
+ {
+ IX_PIUMH_TRACE2 (IX_PIUMH_DEBUG, "Unsolicited callback "
+ "overwriting existing callback for PIU ID %d "
+ "message ID 0x%02X\n", piuId, unsolicitedMessageId);
+ }
+ else /* if we are clearing an existing callback */
+ {
+ IX_PIUMH_TRACE2 (IX_PIUMH_DEBUG, "NULL unsolicited callback "
+ "clearing existing callback for PIU ID %d "
+ "message ID 0x%02X\n", piuId, unsolicitedMessageId);
+ }
+
+ /* update statistical info */
+ ixPiuMhUnsolicitedCbMgrStats[piuId].overwrites++;
+ }
+
+ /* save the callback into the table */
+ table->entries[unsolicitedMessageId] = unsolicitedCallback;
+
+ IX_PIUMH_TRACE0 (IX_PIUMH_FN_ENTRY_EXIT, "Exiting "
+ "ixPiuMhUnsolicitedCbMgrCallbackSave\n");
+}
+
+/*
+ * Function definition: ixPiuMhUnsolicitedCbMgrCallbackRetrieve
+ */
+
+void ixPiuMhUnsolicitedCbMgrCallbackRetrieve (
+ IxPiuMhPiuId piuId,
+ IxPiuMhMessageId unsolicitedMessageId,
+ IxPiuMhCallback *unsolicitedCallback)
+{
+ IxPiuMhUnsolicitedCallbackTable *table = NULL;
+
+ /* initialise a pointer to the table for convenience */
+ table = &ixPiuMhUnsolicitedCallbackTables[piuId];
+
+ /* retrieve the callback from the table */
+ if (unsolicitedCallback != NULL)
+ {
+ *unsolicitedCallback = table->entries[unsolicitedMessageId];
+ }
+}
+
+/*
+ * Function definition: ixPiuMhUnsolicitedCbMgrShow
+ */
+
+void ixPiuMhUnsolicitedCbMgrShow (
+ IxPiuMhPiuId piuId)
+{
+ /* show the unsolicited callback table save counter */
+ IX_PIUMH_SHOW ("Unsolicited callback table saves",
+ ixPiuMhUnsolicitedCbMgrStats[piuId].saves);
+
+ /* show the unsolicited callback table overwrite counter */
+ IX_PIUMH_SHOW ("Unsolicited callback table overwrites",
+ ixPiuMhUnsolicitedCbMgrStats[piuId].overwrites);
+}
+
+/*
+ * Function definition: ixPiuMhUnsolicitedCbMgrShowReset
+ */
+
+void ixPiuMhUnsolicitedCbMgrShowReset (
+ IxPiuMhPiuId piuId)
+{
+ /* reset the unsolicited callback table save counter */
+ ixPiuMhUnsolicitedCbMgrStats[piuId].saves = 0;
+
+ /* reset the unsolicited callback table overwrite counter */
+ ixPiuMhUnsolicitedCbMgrStats[piuId].overwrites = 0;
+}