diff options
Diffstat (limited to 'driver_library/include/ethosu.hpp')
-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; |