summaryrefslogtreecommitdiffstats
path: root/src/usr/devicefw/driverif.C
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2011-05-18 11:49:26 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2011-06-02 09:54:48 -0500
commit83e18669b6c2322c8eb5f8632ac823877d765e0d (patch)
tree780c62fbc578e5a3b6c362db40b84e468611dd13 /src/usr/devicefw/driverif.C
parent40d7b75141080adb8b42cc5ea058c91944e7621e (diff)
downloadtalos-hostboot-83e18669b6c2322c8eb5f8632ac823877d765e0d.tar.gz
talos-hostboot-83e18669b6c2322c8eb5f8632ac823877d765e0d.zip
Device Framework support.
Change-Id: I133f58df309c7fc3a7faa261699eba66a6bae4be Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/98 Tested-by: Jenkins Server Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com>
Diffstat (limited to 'src/usr/devicefw/driverif.C')
-rw-r--r--src/usr/devicefw/driverif.C157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/usr/devicefw/driverif.C b/src/usr/devicefw/driverif.C
new file mode 100644
index 000000000..f6a2b9321
--- /dev/null
+++ b/src/usr/devicefw/driverif.C
@@ -0,0 +1,157 @@
+/** @file driverif.C
+ * Implement the template specializations of functions from driverif.H.
+ */
+#include <devicefw/driverif.H>
+#include <util/singleton.H>
+
+#include "associator.H"
+
+namespace DeviceFW
+{
+ template <>
+ void deviceRegisterRoute<>(OperationType i_opType,
+ AccessType i_accessType,
+ TargetType_t i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(OperationType i_opType,
+ AccessType_DriverOnly i_accessType,
+ TargetType_t i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(OperationType i_opType,
+ AccessType i_accessType,
+ DriverSpecial i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(OperationType i_opType,
+ AccessType_DriverOnly i_accessType,
+ DriverSpecial i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(DriverSpecial i_opType,
+ AccessType i_accessType,
+ TargetType_t i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(DriverSpecial i_opType,
+ AccessType_DriverOnly i_accessType,
+ TargetType_t i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(DriverSpecial i_opType,
+ AccessType i_accessType,
+ DriverSpecial i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ template <>
+ void deviceRegisterRoute<>(DriverSpecial i_opType,
+ AccessType_DriverOnly i_accessType,
+ DriverSpecial i_targetType,
+ deviceOp_t i_regRoute)
+ {
+ Singleton<Associator>::instance().registerRoute(
+ static_cast<int64_t>(i_opType),
+ static_cast<int64_t>(i_accessType),
+ static_cast<int64_t>(i_targetType),
+ i_regRoute);
+ }
+
+ // deviceOp:
+ // OpType - OperationType only.
+ // 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, ...)
+ {
+ va_list args;
+ ErrorHandle_t errl;
+
+ va_start(args, i_accessType);
+
+ errl = Singleton<Associator>::instance().performOp(
+ i_opType, i_target, io_buffer, io_buflen,
+ i_accessType, args);
+
+ va_end(args);
+ return errl;
+ }
+
+ template <>
+ ErrorHandle_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;
+
+ va_start(args, i_accessType);
+
+ errl = Singleton<Associator>::instance().performOp(
+ i_opType, i_target, io_buffer, io_buflen,
+ i_accessType, args);
+
+ va_end(args);
+ return errl;
+ }
+
+};
OpenPOWER on IntegriCloud