blob: 2548c8aca275383f9873880294566b0d50f80279 [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:
arovir01b0717b52018-09-05 17:03:25 +010036 Return<void> getCapabilities(V1_0::IDevice::getCapabilities_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010037 {
arovir01b0717b52018-09-05 17:03:25 +010038 ALOGV("hal_1_1::ArmnnDriver::getCapabilities()");
telsoa01ce3e84a2018-08-31 09:31:35 +010039
arovir01b0717b52018-09-05 17:03:25 +010040 return hal_1_0::ArmnnDriverImpl::getCapabilities(m_Runtime, cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010041 }
42
arovir01b0717b52018-09-05 17:03:25 +010043 Return<void> getSupportedOperations(const V1_0::Model& model,
44 V1_0::IDevice::getSupportedOperations_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010045 {
arovir01b0717b52018-09-05 17:03:25 +010046 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations()");
telsoa01ce3e84a2018-08-31 09:31:35 +010047
arovir01b0717b52018-09-05 17:03:25 +010048 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::getSupportedOperations(m_Runtime,
49 m_Options,
50 model,
51 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010052 }
53
arovir01b0717b52018-09-05 17:03:25 +010054 Return<ErrorStatus> prepareModel(const V1_0::Model& model,
55 const android::sp<IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010056 {
arovir01b0717b52018-09-05 17:03:25 +010057 ALOGV("hal_1_1::ArmnnDriver::prepareModel()");
telsoa01ce3e84a2018-08-31 09:31:35 +010058
arovir01b0717b52018-09-05 17:03:25 +010059 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::prepareModel(m_Runtime,
60 m_ClTunedParameters,
61 m_Options,
62 model,
63 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010064 }
65
arovir01b0717b52018-09-05 17:03:25 +010066 Return<void> getCapabilities_1_1(V1_1::IDevice::getCapabilities_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010067 {
arovir01b0717b52018-09-05 17:03:25 +010068 ALOGV("hal_1_1::ArmnnDriver::getCapabilities_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010069
arovir01b0717b52018-09-05 17:03:25 +010070 return hal_1_1::ArmnnDriverImpl::getCapabilities_1_1(m_Runtime, cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010071 }
72
arovir01b0717b52018-09-05 17:03:25 +010073 Return<void> getSupportedOperations_1_1(const V1_1::Model& model,
74 V1_1::IDevice::getSupportedOperations_1_1_cb cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010075 {
arovir01b0717b52018-09-05 17:03:25 +010076 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010077
arovir01b0717b52018-09-05 17:03:25 +010078 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getSupportedOperations(m_Runtime,
79 m_Options,
80 model,
81 cb);
telsoa01ce3e84a2018-08-31 09:31:35 +010082 }
83
arovir01b0717b52018-09-05 17:03:25 +010084 Return<ErrorStatus> prepareModel_1_1(const V1_1::Model& model,
85 V1_1::ExecutionPreference preference,
86 const android::sp<IPreparedModelCallback>& cb) override
telsoa01ce3e84a2018-08-31 09:31:35 +010087 {
arovir01b0717b52018-09-05 17:03:25 +010088 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1()");
telsoa01ce3e84a2018-08-31 09:31:35 +010089
Matteo Martincighe48bdff2018-09-03 13:50:50 +010090 if (!(preference == ExecutionPreference::LOW_POWER ||
91 preference == ExecutionPreference::FAST_SINGLE_ANSWER ||
92 preference == ExecutionPreference::SUSTAINED_SPEED))
telsoa01ce3e84a2018-08-31 09:31:35 +010093 {
arovir01b0717b52018-09-05 17:03:25 +010094 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1: Invalid execution preference");
telsoa01ce3e84a2018-08-31 09:31:35 +010095 cb->notify(ErrorStatus::INVALID_ARGUMENT, nullptr);
96 return ErrorStatus::INVALID_ARGUMENT;
97 }
98
arovir01b0717b52018-09-05 17:03:25 +010099 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::prepareModel(m_Runtime,
100 m_ClTunedParameters,
101 m_Options,
102 model,
103 cb,
104 model.relaxComputationFloat32toFloat16
105 && m_Options.GetFp16Enabled());
telsoa01ce3e84a2018-08-31 09:31:35 +0100106 }
107
Matteo Martincighe48bdff2018-09-03 13:50:50 +0100108 Return<DeviceStatus> getStatus() override
telsoa01ce3e84a2018-08-31 09:31:35 +0100109 {
arovir01b0717b52018-09-05 17:03:25 +0100110 ALOGV("hal_1_1::ArmnnDriver::getStatus()");
telsoa01ce3e84a2018-08-31 09:31:35 +0100111
arovir01b0717b52018-09-05 17:03:25 +0100112 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getStatus();
telsoa01ce3e84a2018-08-31 09:31:35 +0100113 }
114};
115
arovir01b0717b52018-09-05 17:03:25 +0100116} // namespace hal_1_1
Matteo Martincigh8b287c22018-09-07 09:25:10 +0100117} // namespace armnn_driver