aboutsummaryrefslogtreecommitdiff
path: root/driver_library/include/ethosu.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'driver_library/include/ethosu.hpp')
-rw-r--r--driver_library/include/ethosu.hpp100
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;