blob: 091ca6e3b63d8ed08f3ec06e7229184ab4c62976 [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"
Kevin DuBois30c34ae2020-08-26 13:53:41 -070017#include "../NamespaceAdaptor.hpp"
telsoa01ce3e84a2018-08-31 09:31:35 +010018
19#include <log/log.h>
20
Matteo Martincighe48bdff2018-09-03 13:50:50 +010021namespace armnn_driver
22{
arovir01b0717b52018-09-05 17:03:25 +010023namespace hal_1_1
Matteo Martincighe48bdff2018-09-03 13:50:50 +010024{
telsoa01ce3e84a2018-08-31 09:31:35 +010025
arovir01b0717b52018-09-05 17:03:25 +010026class ArmnnDriver : public ArmnnDevice, public V1_1::IDevice
telsoa01ce3e84a2018-08-31 09:31:35 +010027{
28public:
29 ArmnnDriver(DriverOptions options)
30 : ArmnnDevice(std::move(options))
31 {
arovir01b0717b52018-09-05 17:03:25 +010032 ALOGV("hal_1_1::ArmnnDriver::ArmnnDriver()");
telsoa01ce3e84a2018-08-31 09:31:35 +010033 }
34 ~ArmnnDriver() {}
35
36public:
Kevin Mayec1e5b82020-02-26 17:00:39 +000037
arovir01b0717b52018-09-05 17:03:25 +010038 Return<void> getCapabilities(V1_0::IDevice::getCapabilities_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010039 {
arovir01b0717b52018-09-05 17:03:25 +010040 ALOGV("hal_1_1::ArmnnDriver::getCapabilities()");
telsoa01ce3e84a2018-08-31 09:31:35 +010041
arovir01b0717b52018-09-05 17:03:25 +010042 return hal_1_0::ArmnnDriverImpl::getCapabilities(m_Runtime, cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010043 }
44
arovir01b0717b52018-09-05 17:03:25 +010045 Return<void> getSupportedOperations(const V1_0::Model& model,
46 V1_0::IDevice::getSupportedOperations_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010047 {
arovir01b0717b52018-09-05 17:03:25 +010048 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations()");
telsoa01ce3e84a2018-08-31 09:31:35 +010049
arovir01b0717b52018-09-05 17:03:25 +010050 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::getSupportedOperations(m_Runtime,
51 m_Options,
52 model,
53 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010054 }
55
Kevin DuBois30c34ae2020-08-26 13:53:41 -070056 Return<V1_0::ErrorStatus> prepareModel(const V1_0::Model& model,
Kevin Mayec1e5b82020-02-26 17:00:39 +000057 const android::sp<V1_0::IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010058 {
arovir01b0717b52018-09-05 17:03:25 +010059 ALOGV("hal_1_1::ArmnnDriver::prepareModel()");
telsoa01ce3e84a2018-08-31 09:31:35 +010060
arovir01b0717b52018-09-05 17:03:25 +010061 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::prepareModel(m_Runtime,
62 m_ClTunedParameters,
63 m_Options,
64 model,
65 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010066 }
67
arovir01b0717b52018-09-05 17:03:25 +010068 Return<void> getCapabilities_1_1(V1_1::IDevice::getCapabilities_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010069 {
arovir01b0717b52018-09-05 17:03:25 +010070 ALOGV("hal_1_1::ArmnnDriver::getCapabilities_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010071
arovir01b0717b52018-09-05 17:03:25 +010072 return hal_1_1::ArmnnDriverImpl::getCapabilities_1_1(m_Runtime, cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010073 }
74
arovir01b0717b52018-09-05 17:03:25 +010075 Return<void> getSupportedOperations_1_1(const V1_1::Model& model,
76 V1_1::IDevice::getSupportedOperations_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010077 {
arovir01b0717b52018-09-05 17:03:25 +010078 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010079
arovir01b0717b52018-09-05 17:03:25 +010080 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getSupportedOperations(m_Runtime,
81 m_Options,
82 model,
83 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010084 }
85
Kevin DuBois30c34ae2020-08-26 13:53:41 -070086 Return<V1_0::ErrorStatus> prepareModel_1_1(const V1_1::Model& model,
Kevin Mayec1e5b82020-02-26 17:00:39 +000087 V1_1::ExecutionPreference preference,
88 const android::sp<V1_0::IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010089 {
arovir01b0717b52018-09-05 17:03:25 +010090 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010091
Kevin DuBois30c34ae2020-08-26 13:53:41 -070092 if (!(preference == V1_1::ExecutionPreference::LOW_POWER ||
93 preference == V1_1::ExecutionPreference::FAST_SINGLE_ANSWER ||
94 preference == V1_1::ExecutionPreference::SUSTAINED_SPEED))
telsoa01ce3e84a2018-08-31 09:31:35 +010095 {
arovir01b0717b52018-09-05 17:03:25 +010096 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1: Invalid execution preference");
Kevin DuBois30c34ae2020-08-26 13:53:41 -070097 cb->notify(V1_0::ErrorStatus::INVALID_ARGUMENT, nullptr);
98 return V1_0::ErrorStatus::INVALID_ARGUMENT;
telsoa01ce3e84a2018-08-31 09:31:35 +010099 }
100
arovir01b0717b52018-09-05 17:03:25 +0100101 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::prepareModel(m_Runtime,
102 m_ClTunedParameters,
103 m_Options,
104 model,
105 cb,
106 model.relaxComputationFloat32toFloat16
107 && m_Options.GetFp16Enabled());
telsoa01ce3e84a2018-08-31 09:31:35 +0100108 }
109
Kevin DuBois30c34ae2020-08-26 13:53:41 -0700110 Return<V1_0::DeviceStatus> getStatus() override
telsoa01ce3e84a2018-08-31 09:31:35 +0100111 {
arovir01b0717b52018-09-05 17:03:25 +0100112 ALOGV("hal_1_1::ArmnnDriver::getStatus()");
telsoa01ce3e84a2018-08-31 09:31:35 +0100113
arovir01b0717b52018-09-05 17:03:25 +0100114 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getStatus();
telsoa01ce3e84a2018-08-31 09:31:35 +0100115 }
116};
117
arovir01b0717b52018-09-05 17:03:25 +0100118} // namespace hal_1_1
Matteo Martincigh8b287c22018-09-07 09:25:10 +0100119} // namespace armnn_driver