blob: 079d9cd16bb92389f0ff1d62fd704689470a9aa4 [file] [log] [blame]
telsoa01ce3e84a2018-08-31 09:31:35 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// See LICENSE file in the project root for full license information.
4//
5
6#pragma once
7
8#include <HalInterfaces.h>
9
10#include "ArmnnDevice.hpp"
Matteo Martincigh79250ab2018-09-04 16:28:10 +010011#include "ArmnnDriverImpl.hpp"
Matteo Martincighe48bdff2018-09-03 13:50:50 +010012#include "../ArmnnDriverImpl.hpp"
Matteo Martincigh79250ab2018-09-04 16:28:10 +010013#include "../1.0/ArmnnDriverImpl.hpp"
telsoa01ce3e84a2018-08-31 09:31:35 +010014
15#include <log/log.h>
16
Matteo Martincighe48bdff2018-09-03 13:50:50 +010017namespace armnn_driver
18{
19namespace V1_1
20{
telsoa01ce3e84a2018-08-31 09:31:35 +010021
22class ArmnnDriver : public ArmnnDevice, public ::android::hardware::neuralnetworks::V1_1::IDevice
23{
24public:
25 ArmnnDriver(DriverOptions options)
26 : ArmnnDevice(std::move(options))
27 {
28 ALOGV("V1_1::ArmnnDriver::ArmnnDriver()");
29 }
30 ~ArmnnDriver() {}
31
32public:
33 Return<void> getCapabilities(
Matteo Martincighe48bdff2018-09-03 13:50:50 +010034 ::android::hardware::neuralnetworks::V1_0::IDevice::getCapabilities_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010035 {
36 ALOGV("V1_1::ArmnnDriver::getCapabilities()");
37
Matteo Martincigh79250ab2018-09-04 16:28:10 +010038 return V1_0::ArmnnDriverImpl::getCapabilities(m_Runtime,
39 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010040 }
41
42 Return<void> getSupportedOperations(
43 const ::android::hardware::neuralnetworks::V1_0::Model& model,
Matteo Martincighe48bdff2018-09-03 13:50:50 +010044 ::android::hardware::neuralnetworks::V1_0::IDevice::getSupportedOperations_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010045 {
46 ALOGV("V1_1::ArmnnDriver::getSupportedOperations()");
47
Matteo Martincighe48bdff2018-09-03 13:50:50 +010048 return armnn_driver::ArmnnDriverImpl<HalVersion_1_0>::getSupportedOperations(m_Runtime,
49 m_Options,
50 model,
51 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010052 }
53
54 Return<ErrorStatus> prepareModel(
55 const ::android::hardware::neuralnetworks::V1_0::Model& model,
Matteo Martincighe48bdff2018-09-03 13:50:50 +010056 const android::sp<IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010057 {
58 ALOGV("V1_1::ArmnnDriver::prepareModel()");
59
Matteo Martincighe48bdff2018-09-03 13:50:50 +010060 return armnn_driver::ArmnnDriverImpl<HalVersion_1_0>::prepareModel(m_Runtime,
61 m_ClTunedParameters,
62 m_Options,
63 model,
64 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010065 }
66
67 Return<void> getCapabilities_1_1(
Matteo Martincighe48bdff2018-09-03 13:50:50 +010068 ::android::hardware::neuralnetworks::V1_1::IDevice::getCapabilities_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010069 {
70 ALOGV("V1_1::ArmnnDriver::getCapabilities_1_1()");
71
Matteo Martincigh79250ab2018-09-04 16:28:10 +010072 return V1_1::ArmnnDriverImpl::getCapabilities_1_1(m_Runtime,
73 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010074 }
75
76 Return<void> getSupportedOperations_1_1(
77 const ::android::hardware::neuralnetworks::V1_1::Model& model,
Matteo Martincighe48bdff2018-09-03 13:50:50 +010078 ::android::hardware::neuralnetworks::V1_1::IDevice::getSupportedOperations_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010079 {
80 ALOGV("V1_1::ArmnnDriver::getSupportedOperations_1_1()");
81
Matteo Martincighe48bdff2018-09-03 13:50:50 +010082 return armnn_driver::ArmnnDriverImpl<HalVersion_1_1>::getSupportedOperations(m_Runtime,
83 m_Options,
84 model,
85 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010086 }
87
88 Return<ErrorStatus> prepareModel_1_1(
89 const ::android::hardware::neuralnetworks::V1_1::Model& model,
90 ::android::hardware::neuralnetworks::V1_1::ExecutionPreference preference,
Matteo Martincighe48bdff2018-09-03 13:50:50 +010091 const android::sp<IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010092 {
telsoa01ce3e84a2018-08-31 09:31:35 +010093 ALOGV("V1_1::ArmnnDriver::prepareModel_1_1()");
94
Matteo Martincighe48bdff2018-09-03 13:50:50 +010095 if (!(preference == ExecutionPreference::LOW_POWER ||
96 preference == ExecutionPreference::FAST_SINGLE_ANSWER ||
97 preference == ExecutionPreference::SUSTAINED_SPEED))
telsoa01ce3e84a2018-08-31 09:31:35 +010098 {
Matteo Martincighe48bdff2018-09-03 13:50:50 +010099 ALOGV("V1_1::ArmnnDriver::prepareModel_1_1: Invalid execution preference");
telsoa01ce3e84a2018-08-31 09:31:35 +0100100 cb->notify(ErrorStatus::INVALID_ARGUMENT, nullptr);
101 return ErrorStatus::INVALID_ARGUMENT;
102 }
103
Matteo Martincighe48bdff2018-09-03 13:50:50 +0100104 return armnn_driver::ArmnnDriverImpl<HalVersion_1_1>::prepareModel(m_Runtime,
105 m_ClTunedParameters,
106 m_Options,
107 model,
Matteo Martincigh79250ab2018-09-04 16:28:10 +0100108 cb,
109 model.relaxComputationFloat32toFloat16
110 && m_Options.GetFp16Enabled());
telsoa01ce3e84a2018-08-31 09:31:35 +0100111 }
112
Matteo Martincighe48bdff2018-09-03 13:50:50 +0100113 Return<DeviceStatus> getStatus() override
telsoa01ce3e84a2018-08-31 09:31:35 +0100114 {
115 ALOGV("V1_1::ArmnnDriver::getStatus()");
116
Matteo Martincighe48bdff2018-09-03 13:50:50 +0100117 return armnn_driver::ArmnnDriverImpl<HalVersion_1_1>::getStatus();
telsoa01ce3e84a2018-08-31 09:31:35 +0100118 }
119};
120
121} // armnn_driver::namespace V1_1
122} // namespace armnn_driver