From 35ce6c809ccf637c6bb8a00ad14b051b87d9884a Mon Sep 17 00:00:00 2001 From: Davide Grohmann Date: Tue, 1 Jun 2021 15:03:51 +0200 Subject: Add support for handling capabilities requests Change-Id: Id5aa197312c88b0c448dc085d8477ed67da24724 --- driver_library/src/ethosu.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'driver_library/src') diff --git a/driver_library/src/ethosu.cpp b/driver_library/src/ethosu.cpp index 1768271..ea1f7f4 100644 --- a/driver_library/src/ethosu.cpp +++ b/driver_library/src/ethosu.cpp @@ -111,6 +111,43 @@ const char *Exception::what() const throw() { return msg.c_str(); } +/**************************************************************************** + * Semantic Version + ****************************************************************************/ + +bool SemanticVersion::operator==(const SemanticVersion &other) { + return other.major == major && other.minor == minor && other.patch == patch; +} + +bool SemanticVersion::operator<(const SemanticVersion &other) { + if (other.major > major) + return true; + if (other.minor > minor) + return true; + return other.patch > patch; +} + +bool SemanticVersion::operator<=(const SemanticVersion &other) { + return *this < other || *this == other; +} + +bool SemanticVersion::operator!=(const SemanticVersion &other) { + return !(*this == other); +} + +bool SemanticVersion::operator>(const SemanticVersion &other) { + return !(*this <= other); +} + +bool SemanticVersion::operator>=(const SemanticVersion &other) { + return !(*this < other); +} + +ostream &operator<<(ostream &out, const SemanticVersion &v) { + return out << "{ major=" << unsigned(v.major) << ", minor=" << unsigned(v.minor) << ", patch=" << unsigned(v.patch) + << " }"; +} + /**************************************************************************** * Device ****************************************************************************/ @@ -130,6 +167,23 @@ int Device::ioctl(unsigned long cmd, void *data) { return eioctl(fd, cmd, data); } +Capabilities Device::capabilities() { + ethosu_uapi_device_capabilities uapi; + (void)eioctl(fd, ETHOSU_IOCTL_CAPABILITIES_REQ, static_cast(&uapi)); + + Capabilities capabilities( + HardwareId(uapi.hw_id.version_status, + SemanticVersion(uapi.hw_id.version_major, uapi.hw_id.version_minor), + SemanticVersion(uapi.hw_id.product_major), + SemanticVersion(uapi.hw_id.arch_major_rev, uapi.hw_id.arch_minor_rev, uapi.hw_id.arch_patch_rev)), + HardwareConfiguration(uapi.hw_cfg.macs_per_cc, + uapi.hw_cfg.cmd_stream_version, + uapi.hw_cfg.shram_size, + bool(uapi.hw_cfg.custom_dma)), + SemanticVersion(uapi.driver_major_rev, uapi.driver_minor_rev, uapi.driver_patch_rev)); + return capabilities; +} + /**************************************************************************** * Buffer ****************************************************************************/ -- cgit v1.2.1