diff options
author | Davide Grohmann <davide.grohmann@arm.com> | 2021-06-01 15:03:51 +0200 |
---|---|---|
committer | Kristofer Jonsson <kristofer.jonsson@arm.com> | 2021-06-10 14:58:49 +0000 |
commit | 35ce6c809ccf637c6bb8a00ad14b051b87d9884a (patch) | |
tree | e999250ca985ac5b00ba9162ee1782de02983c03 /driver_library/include | |
parent | 0c79f896caf1a0ac16dd92810c4b15bfff00bdb3 (diff) | |
download | ethos-u-linux-driver-stack-35ce6c809ccf637c6bb8a00ad14b051b87d9884a.tar.gz |
Add support for handling capabilities requests
Change-Id: Id5aa197312c88b0c448dc085d8477ed67da24724
Diffstat (limited to 'driver_library/include')
-rw-r--r-- | driver_library/include/ethosu.hpp | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/driver_library/include/ethosu.hpp b/driver_library/include/ethosu.hpp index 70d0701..d3f7421 100644 --- a/driver_library/include/ethosu.hpp +++ b/driver_library/include/ethosu.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Arm Limited. All rights reserved. + * Copyright (c) 2020-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -19,10 +19,25 @@ #pragma once #include <algorithm> +#include <iostream> #include <memory> #include <string> #include <vector> +/* + *The following undef are necessary to avoid clash with macros in GNU C Library + * if removed the following warning/error are produced: + * + * In the GNU C Library, "major" ("minor") is defined + * by <sys/sysmacros.h>. For historical compatibility, it is + * currently defined by <sys/types.h> as well, but we plan to + * remove this soon. To use "major" ("minor"), include <sys/sysmacros.h> + * directly. If you did not intend to use a system-defined macro + * "major" ("minor"), you should undefine it after including <sys/types.h>. + */ +#undef major +#undef minor + namespace EthosU { class Exception : public std::exception { @@ -35,12 +50,95 @@ private: std::string msg; }; +/** + * Sematic Version : major.minor.patch + */ +class SemanticVersion { +public: + SemanticVersion(uint32_t _major = 0, uint32_t _minor = 0, uint32_t _patch = 0) : + major(_major), minor(_minor), patch(_patch){}; + + bool operator==(const SemanticVersion &other); + bool operator<(const SemanticVersion &other); + bool operator<=(const SemanticVersion &other); + bool operator!=(const SemanticVersion &other); + bool operator>(const SemanticVersion &other); + bool operator>=(const SemanticVersion &other); + + uint32_t major; + uint32_t minor; + uint32_t patch; +}; + +std::ostream &operator<<(std::ostream &out, const SemanticVersion &v); + +/* + * Hardware Identifier + * @versionStatus: Version status + * @version: Version revision + * @product: Product revision + * @architecture: Architecture revison + */ +struct HardwareId { +public: + HardwareId(uint32_t _versionStatus, + const SemanticVersion &_version, + const SemanticVersion &_product, + const SemanticVersion &_architecture) : + versionStatus(_versionStatus), + version(_version), product(_product), architecture(_architecture) {} + + uint32_t versionStatus; + SemanticVersion version; + SemanticVersion product; + SemanticVersion architecture; +}; + +/* + * Hardware Configuration + * @macsPerClockCycle: MACs per clock cycle + * @cmdStreamVersion: NPU command stream version + * @shramSize: SHRAM size + * @customDma: Custom DMA enabled + */ +struct HardwareConfiguration { +public: + HardwareConfiguration(uint32_t _macsPerClockCycle, + uint32_t _cmdStreamVersion, + uint32_t _shramSize, + bool _customDma) : + macsPerClockCycle(_macsPerClockCycle), + cmdStreamVersion(_cmdStreamVersion), shramSize(_shramSize), customDma(_customDma) {} + + uint32_t macsPerClockCycle; + uint32_t cmdStreamVersion; + uint32_t shramSize; + bool customDma; +}; + +/** + * Device capabilities + * @hwId: Hardware + * @driver: Driver revision + * @hwCfg Hardware configuration + */ +class Capabilities { +public: + Capabilities(const HardwareId &_hwId, const HardwareConfiguration &_hwCfg, const SemanticVersion &_driver) : + hwId(_hwId), hwCfg(_hwCfg), driver(_driver) {} + + HardwareId hwId; + HardwareConfiguration hwCfg; + SemanticVersion driver; +}; + class Device { public: Device(const char *device = "/dev/ethosu0"); virtual ~Device(); int ioctl(unsigned long cmd, void *data = nullptr); + Capabilities capabilities(); private: int fd; |