blob: 521b918577b62fd22fbd55e8075087d236a1d1f6 [file] [log] [blame]
telsoa01ce3e84a2018-08-31 09:31:35 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beck93e48982018-09-05 13:05:09 +01003// SPDX-License-Identifier: MIT
telsoa01ce3e84a2018-08-31 09:31:35 +01004//
5
6#pragma once
7
8#include <HalInterfaces.h>
9
Matteo Martincigh8b287c22018-09-07 09:25:10 +010010#include "../ArmnnDevice.hpp"
Matteo Martincigh79250ab2018-09-04 16:28:10 +010011#include "ArmnnDriverImpl.hpp"
arovir01b0717b52018-09-05 17:03:25 +010012#include "HalPolicy.hpp"
13
Matteo Martincighe48bdff2018-09-03 13:50:50 +010014#include "../ArmnnDriverImpl.hpp"
Matteo Martincigh79250ab2018-09-04 16:28:10 +010015#include "../1.0/ArmnnDriverImpl.hpp"
arovir01b0717b52018-09-05 17:03:25 +010016#include "../1.0/HalPolicy.hpp"
telsoa01ce3e84a2018-08-31 09:31:35 +010017
18#include <log/log.h>
19
Matteo Martincighe48bdff2018-09-03 13:50:50 +010020namespace armnn_driver
21{
arovir01b0717b52018-09-05 17:03:25 +010022namespace hal_1_1
Matteo Martincighe48bdff2018-09-03 13:50:50 +010023{
telsoa01ce3e84a2018-08-31 09:31:35 +010024
arovir01b0717b52018-09-05 17:03:25 +010025class ArmnnDriver : public ArmnnDevice, public V1_1::IDevice
telsoa01ce3e84a2018-08-31 09:31:35 +010026{
27public:
28 ArmnnDriver(DriverOptions options)
29 : ArmnnDevice(std::move(options))
30 {
arovir01b0717b52018-09-05 17:03:25 +010031 ALOGV("hal_1_1::ArmnnDriver::ArmnnDriver()");
telsoa01ce3e84a2018-08-31 09:31:35 +010032 }
33 ~ArmnnDriver() {}
34
35public:
Kevin Mayec1e5b82020-02-26 17:00:39 +000036
arovir01b0717b52018-09-05 17:03:25 +010037 Return<void> getCapabilities(V1_0::IDevice::getCapabilities_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010038 {
arovir01b0717b52018-09-05 17:03:25 +010039 ALOGV("hal_1_1::ArmnnDriver::getCapabilities()");
telsoa01ce3e84a2018-08-31 09:31:35 +010040
arovir01b0717b52018-09-05 17:03:25 +010041 return hal_1_0::ArmnnDriverImpl::getCapabilities(m_Runtime, cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010042 }
43
arovir01b0717b52018-09-05 17:03:25 +010044 Return<void> getSupportedOperations(const V1_0::Model& model,
45 V1_0::IDevice::getSupportedOperations_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010046 {
arovir01b0717b52018-09-05 17:03:25 +010047 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations()");
telsoa01ce3e84a2018-08-31 09:31:35 +010048
arovir01b0717b52018-09-05 17:03:25 +010049 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::getSupportedOperations(m_Runtime,
50 m_Options,
51 model,
52 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010053 }
54
Kevin Mayec1e5b82020-02-26 17:00:39 +000055 Return<V1_0::ErrorStatus> prepareModel(const V1_0::Model& model,
56 const android::sp<V1_0::IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010057 {
arovir01b0717b52018-09-05 17:03:25 +010058 ALOGV("hal_1_1::ArmnnDriver::prepareModel()");
telsoa01ce3e84a2018-08-31 09:31:35 +010059
arovir01b0717b52018-09-05 17:03:25 +010060 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::prepareModel(m_Runtime,
61 m_ClTunedParameters,
62 m_Options,
63 model,
64 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010065 }
66
arovir01b0717b52018-09-05 17:03:25 +010067 Return<void> getCapabilities_1_1(V1_1::IDevice::getCapabilities_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010068 {
arovir01b0717b52018-09-05 17:03:25 +010069 ALOGV("hal_1_1::ArmnnDriver::getCapabilities_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010070
arovir01b0717b52018-09-05 17:03:25 +010071 return hal_1_1::ArmnnDriverImpl::getCapabilities_1_1(m_Runtime, cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010072 }
73
arovir01b0717b52018-09-05 17:03:25 +010074 Return<void> getSupportedOperations_1_1(const V1_1::Model& model,
75 V1_1::IDevice::getSupportedOperations_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010076 {
arovir01b0717b52018-09-05 17:03:25 +010077 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010078
arovir01b0717b52018-09-05 17:03:25 +010079 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getSupportedOperations(m_Runtime,
80 m_Options,
81 model,
82 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010083 }
84
Kevin Mayec1e5b82020-02-26 17:00:39 +000085 Return<V1_0::ErrorStatus> prepareModel_1_1(const V1_1::Model& model,
86 V1_1::ExecutionPreference preference,
87 const android::sp<V1_0::IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010088 {
arovir01b0717b52018-09-05 17:03:25 +010089 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010090
Sadik Armagan188675f2021-02-12 17:16:42 +000091 if (!(preference == V1_1::ExecutionPreference::LOW_POWER ||
92 preference == V1_1::ExecutionPreference::FAST_SINGLE_ANSWER ||
93 preference == V1_1::ExecutionPreference::SUSTAINED_SPEED))
telsoa01ce3e84a2018-08-31 09:31:35 +010094 {
arovir01b0717b52018-09-05 17:03:25 +010095 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1: Invalid execution preference");
Kevin Mayec1e5b82020-02-26 17:00:39 +000096 cb->notify(V1_0::ErrorStatus::INVALID_ARGUMENT, nullptr);
97 return V1_0::ErrorStatus::INVALID_ARGUMENT;
telsoa01ce3e84a2018-08-31 09:31:35 +010098 }
99
arovir01b0717b52018-09-05 17:03:25 +0100100 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::prepareModel(m_Runtime,
101 m_ClTunedParameters,
102 m_Options,
103 model,
104 cb,
105 model.relaxComputationFloat32toFloat16
106 && m_Options.GetFp16Enabled());
telsoa01ce3e84a2018-08-31 09:31:35 +0100107 }
108
Sadik Armagan188675f2021-02-12 17:16:42 +0000109 Return<V1_0::DeviceStatus> getStatus() override
telsoa01ce3e84a2018-08-31 09:31:35 +0100110 {
arovir01b0717b52018-09-05 17:03:25 +0100111 ALOGV("hal_1_1::ArmnnDriver::getStatus()");
telsoa01ce3e84a2018-08-31 09:31:35 +0100112
arovir01b0717b52018-09-05 17:03:25 +0100113 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getStatus();
telsoa01ce3e84a2018-08-31 09:31:35 +0100114 }
115};
116
arovir01b0717b52018-09-05 17:03:25 +0100117} // namespace hal_1_1
Matteo Martincigh8b287c22018-09-07 09:25:10 +0100118} // namespace armnn_driver