blob: 1a9d9d311b6fbbebd3b107a0c6d715a85882723f [file] [log] [blame]
Mike Kellyb5fdf382019-06-11 16:35:25 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <HalInterfaces.h>
9
10#include "../ArmnnDevice.hpp"
11#include "ArmnnDriverImpl.hpp"
12#include "HalPolicy.hpp"
13
14#include "../ArmnnDriverImpl.hpp"
15#include "../1.2/ArmnnDriverImpl.hpp"
16#include "../1.2/HalPolicy.hpp"
17#include "../1.1/ArmnnDriverImpl.hpp"
18#include "../1.1/HalPolicy.hpp"
19#include "../1.0/ArmnnDriverImpl.hpp"
20#include "../1.0/HalPolicy.hpp"
21
22#include <log/log.h>
23
24namespace armnn_driver
25{
26namespace hal_1_2
27{
28
29class ArmnnDriver : public ArmnnDevice, public V1_2::IDevice
30{
31public:
Kevin Mayec1e5b82020-02-26 17:00:39 +000032
Mike Kellyb5fdf382019-06-11 16:35:25 +010033 ArmnnDriver(DriverOptions options)
34 : ArmnnDevice(std::move(options))
35 {
36 ALOGV("hal_1_2::ArmnnDriver::ArmnnDriver()");
37 }
38 ~ArmnnDriver() {}
39
40 using HidlToken = android::hardware::hidl_array<uint8_t, ANEURALNETWORKS_BYTE_SIZE_OF_CACHE_TOKEN>;
41
42public:
43 Return<void> getCapabilities(V1_0::IDevice::getCapabilities_cb cb) override
44 {
45 ALOGV("hal_1_2::ArmnnDriver::getCapabilities()");
46
47 return hal_1_0::ArmnnDriverImpl::getCapabilities(m_Runtime, cb);
48 }
49
50 Return<void> getSupportedOperations(const V1_0::Model& model,
51 V1_0::IDevice::getSupportedOperations_cb cb) override
52 {
53 ALOGV("hal_1_2::ArmnnDriver::getSupportedOperations()");
54
55 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::getSupportedOperations(m_Runtime,
56 m_Options,
57 model,
58 cb);
59 }
60
Kevin DuBois30c34ae2020-08-26 13:53:41 -070061 Return<V1_0::ErrorStatus> prepareModel(const V1_0::Model& model,
Kevin Mayec1e5b82020-02-26 17:00:39 +000062 const android::sp<V1_0::IPreparedModelCallback>& cb) override
Mike Kellyb5fdf382019-06-11 16:35:25 +010063 {
64 ALOGV("hal_1_2::ArmnnDriver::prepareModel()");
65
66 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::prepareModel(m_Runtime,
67 m_ClTunedParameters,
68 m_Options,
69 model,
70 cb);
71 }
72
73 Return<void> getCapabilities_1_1(V1_1::IDevice::getCapabilities_1_1_cb cb) override
74 {
75 ALOGV("hal_1_2::ArmnnDriver::getCapabilities_1_1()");
76
77 return hal_1_1::ArmnnDriverImpl::getCapabilities_1_1(m_Runtime, cb);
78 }
79
80 Return<void> getSupportedOperations_1_1(const V1_1::Model& model,
81 V1_1::IDevice::getSupportedOperations_1_1_cb cb) override
82 {
83 ALOGV("hal_1_2::ArmnnDriver::getSupportedOperations_1_1()");
84 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getSupportedOperations(m_Runtime,
85 m_Options,
86 model,
87 cb);
88 }
89
Kevin DuBois30c34ae2020-08-26 13:53:41 -070090 Return<V1_0::ErrorStatus> prepareModel_1_1(const V1_1::Model& model,
Kevin Mayec1e5b82020-02-26 17:00:39 +000091 V1_1::ExecutionPreference preference,
92 const android::sp<V1_0::IPreparedModelCallback>& cb) override
Mike Kellyb5fdf382019-06-11 16:35:25 +010093 {
94 ALOGV("hal_1_2::ArmnnDriver::prepareModel_1_1()");
95
Kevin DuBois30c34ae2020-08-26 13:53:41 -070096 if (!(preference == V1_1::ExecutionPreference::LOW_POWER ||
97 preference == V1_1::ExecutionPreference::FAST_SINGLE_ANSWER ||
98 preference == V1_1::ExecutionPreference::SUSTAINED_SPEED))
Mike Kellyb5fdf382019-06-11 16:35:25 +010099 {
100 ALOGV("hal_1_2::ArmnnDriver::prepareModel_1_1: Invalid execution preference");
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700101 cb->notify(V1_0::ErrorStatus::INVALID_ARGUMENT, nullptr);
102 return V1_0::ErrorStatus::INVALID_ARGUMENT;
Mike Kellyb5fdf382019-06-11 16:35:25 +0100103 }
104
105 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::prepareModel(m_Runtime,
106 m_ClTunedParameters,
107 m_Options,
108 model,
109 cb,
110 model.relaxComputationFloat32toFloat16
111 && m_Options.GetFp16Enabled());
112 }
113
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700114 Return<V1_0::DeviceStatus> getStatus() override
Mike Kellyb5fdf382019-06-11 16:35:25 +0100115 {
116 ALOGV("hal_1_2::ArmnnDriver::getStatus()");
117
118 return armnn_driver::ArmnnDriverImpl<hal_1_2::HalPolicy>::getStatus();
119 }
120
121 Return<void> getVersionString(getVersionString_cb cb)
122 {
Jim Flynn829ad302019-12-13 14:43:24 +0000123 ALOGV("hal_1_2::ArmnnDriver::getVersionString()");
Mike Kellyb5fdf382019-06-11 16:35:25 +0100124
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700125 cb(V1_0::ErrorStatus::NONE, "ArmNN");
Mike Kellyb5fdf382019-06-11 16:35:25 +0100126 return Void();
127 }
128
129 Return<void> getType(getType_cb cb)
130 {
131 ALOGV("hal_1_2::ArmnnDriver::getType()");
132
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700133 cb(V1_0::ErrorStatus::NONE, V1_2::DeviceType::CPU);
Mike Kellyb5fdf382019-06-11 16:35:25 +0100134 return Void();
135 }
136
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700137 Return<V1_0::ErrorStatus> prepareModelFromCache(
Mike Kellyb5fdf382019-06-11 16:35:25 +0100138 const android::hardware::hidl_vec<android::hardware::hidl_handle>&,
139 const android::hardware::hidl_vec<android::hardware::hidl_handle>&,
140 const HidlToken&,
141 const sp<V1_2::IPreparedModelCallback>& callback)
142 {
143 ALOGV("hal_1_2::ArmnnDriver::prepareModelFromCache()");
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700144 callback->notify_1_2(V1_0::ErrorStatus::GENERAL_FAILURE, nullptr);
145 return V1_0::ErrorStatus::GENERAL_FAILURE;
Mike Kellyb5fdf382019-06-11 16:35:25 +0100146 }
147
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700148 Return<V1_0::ErrorStatus> prepareModel_1_2(const V1_2::Model& model, V1_1::ExecutionPreference preference,
Mike Kellyb5fdf382019-06-11 16:35:25 +0100149 const android::hardware::hidl_vec<android::hardware::hidl_handle>&,
150 const android::hardware::hidl_vec<android::hardware::hidl_handle>&, const HidlToken&,
151 const android::sp<V1_2::IPreparedModelCallback>& cb)
152 {
Aron Virginas-Tar9f0693b2019-11-06 14:32:30 +0000153 ALOGV("hal_1_2::ArmnnDriver::prepareModel_1_2()");
Mike Kellyb5fdf382019-06-11 16:35:25 +0100154
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700155 if (!(preference == V1_1::ExecutionPreference::LOW_POWER ||
156 preference == V1_1::ExecutionPreference::FAST_SINGLE_ANSWER ||
157 preference == V1_1::ExecutionPreference::SUSTAINED_SPEED))
Mike Kellyb5fdf382019-06-11 16:35:25 +0100158 {
Aron Virginas-Tar9f0693b2019-11-06 14:32:30 +0000159 ALOGV("hal_1_2::ArmnnDriver::prepareModel_1_2: Invalid execution preference");
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700160 cb->notify(V1_0::ErrorStatus::INVALID_ARGUMENT, nullptr);
161 return V1_0::ErrorStatus::INVALID_ARGUMENT;
Mike Kellyb5fdf382019-06-11 16:35:25 +0100162 }
163
164 return ArmnnDriverImpl::prepareArmnnModel_1_2(m_Runtime,
165 m_ClTunedParameters,
166 m_Options,
167 model,
168 cb,
169 model.relaxComputationFloat32toFloat16
170 && m_Options.GetFp16Enabled());
171 }
172
173 Return<void> getSupportedExtensions(getSupportedExtensions_cb cb)
174 {
175 ALOGV("hal_1_2::ArmnnDriver::getSupportedExtensions()");
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700176 cb(V1_0::ErrorStatus::NONE, {/* No extensions. */});
Mike Kellyb5fdf382019-06-11 16:35:25 +0100177 return Void();
178 }
179
180 Return<void> getCapabilities_1_2(getCapabilities_1_2_cb cb)
181 {
182 ALOGV("hal_1_2::ArmnnDriver::getCapabilities()");
183
184 return hal_1_2::ArmnnDriverImpl::getCapabilities_1_2(m_Runtime, cb);
185 }
186
187 Return<void> getSupportedOperations_1_2(const V1_2::Model& model,
188 getSupportedOperations_1_2_cb cb)
189 {
190 ALOGV("hal_1_2::ArmnnDriver::getSupportedOperations()");
191
192 return armnn_driver::ArmnnDriverImpl<hal_1_2::HalPolicy>::getSupportedOperations(m_Runtime,
193 m_Options,
194 model,
195 cb);
196 }
197
198 Return<void> getNumberOfCacheFilesNeeded(getNumberOfCacheFilesNeeded_cb cb)
199 {
200 ALOGV("hal_1_2::ArmnnDriver::getSupportedExtensions()");
201
202 // Set both numbers to be 0 for cache not supported.
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700203 cb(V1_0::ErrorStatus::NONE, 0, 0);
Mike Kellyb5fdf382019-06-11 16:35:25 +0100204 return Void();
205 }
206};
207
208} // namespace hal_1_2
Aron Virginas-Tar9f0693b2019-11-06 14:32:30 +0000209} // namespace armnn_driver