summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-05-24 21:18:35 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-06-02 15:14:28 -0500
commit74b9b31c9ae811dd527d4eb328e9fa93327442ab (patch)
tree848b6ad8a46f8a5a8065f80fcaddf07d061b3be2
parentf0e44bc60ca80d5bf875f0836a119e361d84dd44 (diff)
downloadtalos-hostboot-74b9b31c9ae811dd527d4eb328e9fa93327442ab.tar.gz
talos-hostboot-74b9b31c9ae811dd527d4eb328e9fa93327442ab.zip
Errl support for device framework.
Change-Id: I7849df2994312c6e91d9f86431c2d084c26b21cf Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/99 Tested-by: Jenkins Server Reviewed-by: Thi N. Tran <thi@us.ibm.com>
-rw-r--r--src/include/usr/devicefw/devfwreasoncodes.H20
-rw-r--r--src/include/usr/devicefw/driverif.H32
-rw-r--r--src/include/usr/devicefw/userif.H18
-rw-r--r--src/include/usr/hbotcompid.H7
-rw-r--r--src/usr/devicefw/associator.C57
-rw-r--r--src/usr/devicefw/associator.H8
-rw-r--r--src/usr/devicefw/driverif.C20
-rw-r--r--src/usr/devicefw/test/associatortest.H60
-rw-r--r--src/usr/devicefw/userif.C16
9 files changed, 167 insertions, 71 deletions
diff --git a/src/include/usr/devicefw/devfwreasoncodes.H b/src/include/usr/devicefw/devfwreasoncodes.H
new file mode 100644
index 000000000..0f55f063d
--- /dev/null
+++ b/src/include/usr/devicefw/devfwreasoncodes.H
@@ -0,0 +1,20 @@
+#ifndef __DEVICEFW_DEVFWREASONCODES_H
+#define __DEVICEFW_DEVFWREASONCODES_H
+
+#include <hbotcompid.H>
+
+namespace DeviceFW
+{
+ enum DevFwModuleId
+ {
+ DEVFW_MOD_ASSOCIATOR = 0x00,
+ };
+
+ enum DevFwReasonCode
+ {
+ DEVFW_RC_INVALID_REGISTRATION = DEVFW_COMP_ID | 0x01,
+ DEVFW_RC_NO_ROUTE_FOUND = DEVFW_COMP_ID | 0x02,
+ };
+};
+
+#endif
diff --git a/src/include/usr/devicefw/driverif.H b/src/include/usr/devicefw/driverif.H
index ceff91c59..a3c5b37b6 100644
--- a/src/include/usr/devicefw/driverif.H
+++ b/src/include/usr/devicefw/driverif.H
@@ -72,10 +72,10 @@ namespace DeviceFW
/** @typedef deviceOp_t
* @brief Function prototype for registered device-driver operations.
*/
- typedef ErrorHandle_t(*deviceOp_t)(OperationType,
- TargetHandle_t,
- void*, size_t&,
- int64_t, va_list);
+ typedef errlHndl_t(*deviceOp_t)(OperationType,
+ TargetHandle_t,
+ void*, size_t&,
+ int64_t, va_list);
/**
* @brief Register a device driver routing function with the framework.
@@ -173,10 +173,10 @@ namespace DeviceFW
* perform accesses which may be only visible to internal drivers.
*/
template <typename AccType>
- ErrorHandle_t deviceOp(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- AccType i_accessType, ...)
+ errlHndl_t deviceOp(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ AccType i_accessType, ...)
{
return InvalidParameterType(); // Cause a compile fail if not one of
// the explicit template specializations.
@@ -235,15 +235,15 @@ namespace DeviceFW
// TargType - TargetType only.
// AccType - AccessType, AccessType_DriverOnly (no WILDCARD).
template <>
- ErrorHandle_t deviceOp<>(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- AccessType i_accessType, ...);
+ errlHndl_t deviceOp<>(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ AccessType i_accessType, ...);
template <>
- ErrorHandle_t deviceOp<>(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- AccessType_DriverOnly i_accessType, ...);
+ errlHndl_t deviceOp<>(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ AccessType_DriverOnly i_accessType, ...);
};
diff --git a/src/include/usr/devicefw/userif.H b/src/include/usr/devicefw/userif.H
index dc4cbd4c7..db9285a02 100644
--- a/src/include/usr/devicefw/userif.H
+++ b/src/include/usr/devicefw/userif.H
@@ -10,12 +10,12 @@
#define __DEVICEFW_USERIF
#include <stdint.h>
+#include <errl/errltypes.H>
namespace DeviceFW
{
- /* TODO: Update these to real error log / target handle type once those
- * pieces of code are complete. */
- typedef void* ErrorHandle_t;
+ /* TODO: Update these to real target handle type once that piece of code
+ * is complete. */
typedef int TargetHandle_t;
/** @enum AccessType
@@ -68,9 +68,9 @@ namespace DeviceFW
* </PRE>
*
*/
- ErrorHandle_t deviceRead(TargetHandle_t i_target,
- void* o_buffer, size_t& io_buflen,
- AccessType i_accessType, ...);
+ errlHndl_t deviceRead(TargetHandle_t i_target,
+ void* o_buffer, size_t& io_buflen,
+ AccessType i_accessType, ...);
/**
* @brief Perform a hardware write operation.
@@ -98,9 +98,9 @@ namespace DeviceFW
* </PRE>
*
*/
- ErrorHandle_t deviceWrite(TargetHandle_t i_target,
- void* i_buffer, size_t& io_buflen,
- AccessType i_accessType, ...);
+ errlHndl_t deviceWrite(TargetHandle_t i_target,
+ void* i_buffer, size_t& io_buflen,
+ AccessType i_accessType, ...);
};
diff --git a/src/include/usr/hbotcompid.H b/src/include/usr/hbotcompid.H
index 49fad6ea9..b99e91c35 100644
--- a/src/include/usr/hbotcompid.H
+++ b/src/include/usr/hbotcompid.H
@@ -38,6 +38,13 @@ const compId_t ERRL_COMP_ID = 0x0100;
const char ERRL_COMP_NAME[] = "errl";
//@}
+/** @name DEVFW
+ * Device Framework component
+ */
+//@{
+const compId_t DEVFW_COMP_ID = 0x0200;
+const char DEVFW_COMP_NAME[] = "devfw";
+//@}
#endif
diff --git a/src/usr/devicefw/associator.C b/src/usr/devicefw/associator.C
index 95c8ef7a0..d076c311e 100644
--- a/src/usr/devicefw/associator.C
+++ b/src/usr/devicefw/associator.C
@@ -1,7 +1,12 @@
#include <algorithm>
+#include <errl/errlentry.H>
+#include <errl/errlmanager.H>
+#include <trace/interface.H>
+
+#include <devicefw/devfwreasoncodes.H>
#include "associator.H"
-#include <trace/interface.H>
+using namespace ERRORLOG;
namespace DeviceFW
{
@@ -71,9 +76,24 @@ namespace DeviceFW
if(((targets.flag) && (i_targetType != WILDCARD)) ||
((!targets.flag) && (i_targetType == WILDCARD)))
{
- // TODO: Create error log for invalid target type?
- bool l_invalidTargetType = false;
- assert(l_invalidTargetType);
+ /*@
+ * @errortype
+ * @moduleid DEVFW_MOD_ASSOCIATOR
+ * @reasoncode DEVFW_RC_INVALID_REGISTRATION
+ * @userdata1 (OpType << 32) | (AccessType)
+ * @userdata2 TargetType
+ *
+ * @devdesc An invalid registration type was given to
+ * register a device with the routing framework.
+ */
+ errlHndl_t l_errl =
+ new ErrlEntry(ERRL_SEV_INFORMATIONAL,
+ DEVFW_MOD_ASSOCIATOR,
+ DEVFW_RC_INVALID_REGISTRATION,
+ TWO_UINT32_TO_UINT64(i_opType, i_accType),
+ TO_UINT64(i_targetType)
+ );
+ errlCommit(l_errl);
}
// Index offset to proper target type. This is now lowest level of map.
@@ -101,10 +121,10 @@ namespace DeviceFW
mutex_unlock(iv_mutex);
}
- ErrorHandle_t Associator::performOp(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- int64_t i_accessType, va_list i_addr)
+ errlHndl_t Associator::performOp(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ int64_t i_accessType, va_list i_addr)
const
{
TRACDCOMP(g_traceBuffer, "Device op requested for (%d, %d, %d)",
@@ -114,7 +134,7 @@ namespace DeviceFW
// compiler due to the template specializations in driverif.H.
// No assert-checks will be done here.
- ErrorHandle_t l_errl = NULL;
+ errlHndl_t l_errl = NULL;
mutex_lock(iv_mutex);
@@ -188,8 +208,23 @@ namespace DeviceFW
// Call function if one was found, create error otherwise.
if (NULL == l_devRoute)
{
- // TODO: create error log.
- assert(NULL != l_devRoute);
+ /*@
+ * @errortype
+ * @moduleid DEVFW_MOD_ASSOCIATOR
+ * @reasoncode DEVFW_RC_NO_ROUTE_FOUND
+ * @userdata1 (OpType << 32) | (AccessType)
+ * @userdata1 TargetType
+ *
+ * @devdesc A device driver operation was attempted for
+ * which no driver has been registered.
+ */
+ l_errl = new ErrlEntry(ERRL_SEV_INFORMATIONAL,
+ DEVFW_MOD_ASSOCIATOR,
+ DEVFW_RC_NO_ROUTE_FOUND,
+ TWO_UINT32_TO_UINT64(i_opType, i_accessType),
+ /*TODO: i_target->type*/
+ TO_UINT64(PROCESSOR)
+ );
}
else
{
diff --git a/src/usr/devicefw/associator.H b/src/usr/devicefw/associator.H
index 67b35e31b..2052781b7 100644
--- a/src/usr/devicefw/associator.H
+++ b/src/usr/devicefw/associator.H
@@ -50,10 +50,10 @@ namespace DeviceFW
deviceOp_t i_regRoute);
/** Perform routing. See deviceOp. */
- ErrorHandle_t performOp(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- int64_t i_accessType, va_list i_addr) const;
+ errlHndl_t performOp(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ int64_t i_accessType, va_list i_addr) const;
private:
typedef std::vector<deviceOp_t> opVector_t;
diff --git a/src/usr/devicefw/driverif.C b/src/usr/devicefw/driverif.C
index f6a2b9321..f6109ffea 100644
--- a/src/usr/devicefw/driverif.C
+++ b/src/usr/devicefw/driverif.C
@@ -117,13 +117,13 @@ namespace DeviceFW
// TargType - TargetType only.
// AccType - AccessType, AccessType_DriverOnly (no WILDCARD).
template <>
- ErrorHandle_t deviceOp<>(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- AccessType i_accessType, ...)
+ errlHndl_t deviceOp<>(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ AccessType i_accessType, ...)
{
va_list args;
- ErrorHandle_t errl;
+ errlHndl_t errl;
va_start(args, i_accessType);
@@ -136,13 +136,13 @@ namespace DeviceFW
}
template <>
- ErrorHandle_t deviceOp<>(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- AccessType_DriverOnly i_accessType, ...)
+ errlHndl_t deviceOp<>(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ AccessType_DriverOnly i_accessType, ...)
{
va_list args;
- ErrorHandle_t errl;
+ errlHndl_t errl;
va_start(args, i_accessType);
diff --git a/src/usr/devicefw/test/associatortest.H b/src/usr/devicefw/test/associatortest.H
index 792b6c3ef..3d7aa6a32 100644
--- a/src/usr/devicefw/test/associatortest.H
+++ b/src/usr/devicefw/test/associatortest.H
@@ -2,6 +2,8 @@
#define __TEST_ASSOCIATORTEST_H
#include <cxxtest/TestSuite.H>
+#include <errl/errlentry.H>
+#include <devicefw/devfwreasoncodes.H>
#include "../associator.H"
using namespace DeviceFW;
@@ -33,10 +35,10 @@ public:
// Used for registration testing.
static
- ErrorHandle_t performOperation(OperationType i_opType,
- TargetHandle_t i_target,
- void* io_buffer, size_t& io_buflen,
- int64_t i_accessType, va_list i_addr)
+ errlHndl_t performOperation(OperationType i_opType,
+ TargetHandle_t i_target,
+ void* io_buffer, size_t& io_buflen,
+ int64_t i_accessType, va_list i_addr)
{
g_associatorTest_result = g_associatorTest_value;
g_associatorTest_opType = i_opType;
@@ -61,9 +63,9 @@ public:
PROCESSOR,
&performOperation);
- ErrorHandle_t l_errl = as.performOp(READ, TargetHandle_t(),
- buf, bufsize,
- SCOM, va_list());
+ errlHndl_t l_errl = as.performOp(READ, TargetHandle_t(),
+ buf, bufsize,
+ SCOM, va_list());
if (l_errl)
{
@@ -102,9 +104,9 @@ public:
PROCESSOR,
&performOperation);
- ErrorHandle_t l_errl = as.performOp(WRITE, TargetHandle_t(),
- buf, bufsize,
- SCOM, va_list());
+ errlHndl_t l_errl = as.performOp(WRITE, TargetHandle_t(),
+ buf, bufsize,
+ SCOM, va_list());
if (l_errl)
{
@@ -143,9 +145,9 @@ public:
WILDCARD,
&performOperation);
- ErrorHandle_t l_errl = as.performOp(READ, TargetHandle_t(),
- buf, bufsize,
- SCOM, va_list());
+ errlHndl_t l_errl = as.performOp(READ, TargetHandle_t(),
+ buf, bufsize,
+ SCOM, va_list());
if (l_errl)
{
@@ -168,6 +170,38 @@ public:
}
}
+
+ /**
+ * @test Verify missing registration returns an error log.
+ */
+ void testMissingRegistration()
+ {
+ void* buf = NULL;
+ size_t bufsize = 0;
+
+ g_associatorTest_value = &AssociatorTest::testMissingRegistration;
+
+ Associator as;
+ as.registerRoute(READ,
+ SCOM,
+ WILDCARD,
+ &performOperation);
+
+ errlHndl_t l_errl = as.performOp(READ, TargetHandle_t(),
+ buf, bufsize,
+ MAILBOX, va_list());
+
+ if (NULL == l_errl)
+ {
+ TS_FAIL("Error not received from performOp.");
+ }
+ else if (DEVFW_RC_NO_ROUTE_FOUND != l_errl->reasonCode())
+ {
+ TS_FAIL("Reason code different from DEVFW_RC_NO_ROUTE_FOUND.");
+ }
+ }
+
+
};
#endif
diff --git a/src/usr/devicefw/userif.C b/src/usr/devicefw/userif.C
index 3b1f237f8..248077358 100644
--- a/src/usr/devicefw/userif.C
+++ b/src/usr/devicefw/userif.C
@@ -9,12 +9,12 @@
namespace DeviceFW
{
- ErrorHandle_t deviceRead(TargetHandle_t i_target,
- void* o_buffer, size_t& io_buflen,
- AccessType i_accessType, ...)
+ errlHndl_t deviceRead(TargetHandle_t i_target,
+ void* o_buffer, size_t& io_buflen,
+ AccessType i_accessType, ...)
{
va_list args;
- ErrorHandle_t errl;
+ errlHndl_t errl;
va_start(args, i_accessType);
@@ -26,12 +26,12 @@ namespace DeviceFW
return errl;
}
- ErrorHandle_t deviceWrite(TargetHandle_t i_target,
- void* i_buffer, size_t& io_buflen,
- AccessType i_accessType, ...)
+ errlHndl_t deviceWrite(TargetHandle_t i_target,
+ void* i_buffer, size_t& io_buflen,
+ AccessType i_accessType, ...)
{
va_list args;
- ErrorHandle_t errl;
+ errlHndl_t errl;
va_start(args, i_accessType);
OpenPOWER on IntegriCloud