diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2011-05-18 11:49:26 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2011-06-02 09:54:48 -0500 |
commit | 83e18669b6c2322c8eb5f8632ac823877d765e0d (patch) | |
tree | 780c62fbc578e5a3b6c362db40b84e468611dd13 /src/usr/devicefw/driverif.C | |
parent | 40d7b75141080adb8b42cc5ea058c91944e7621e (diff) | |
download | talos-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.C | 157 |
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; + } + +}; |