1 // 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.0/ArmnnDriverImpl.hpp" 16 #include "../1.0/HalPolicy.hpp" 17 #include "../NamespaceAdaptor.hpp" 18 19 #include <log/log.h> 20 21 namespace armnn_driver 22 { 23 namespace hal_1_1 24 { 25 26 class ArmnnDriver : public ArmnnDevice, public V1_1::IDevice 27 { 28 public: ArmnnDriver(DriverOptions options)29 ArmnnDriver(DriverOptions options) 30 : ArmnnDevice(std::move(options)) 31 { 32 ALOGV("hal_1_1::ArmnnDriver::ArmnnDriver()"); 33 } ~ArmnnDriver()34 ~ArmnnDriver() {} 35 36 public: 37 getCapabilities(V1_0::IDevice::getCapabilities_cb cb)38 Return<void> getCapabilities(V1_0::IDevice::getCapabilities_cb cb) override 39 { 40 ALOGV("hal_1_1::ArmnnDriver::getCapabilities()"); 41 42 return hal_1_0::ArmnnDriverImpl::getCapabilities(m_Runtime, cb); 43 } 44 getSupportedOperations(const V1_0::Model & model,V1_0::IDevice::getSupportedOperations_cb cb)45 Return<void> getSupportedOperations(const V1_0::Model& model, 46 V1_0::IDevice::getSupportedOperations_cb cb) override 47 { 48 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations()"); 49 50 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::getSupportedOperations(m_Runtime, 51 m_Options, 52 model, 53 cb); 54 } 55 prepareModel(const V1_0::Model & model,const android::sp<V1_0::IPreparedModelCallback> & cb)56 Return<V1_0::ErrorStatus> prepareModel(const V1_0::Model& model, 57 const android::sp<V1_0::IPreparedModelCallback>& cb) override 58 { 59 ALOGV("hal_1_1::ArmnnDriver::prepareModel()"); 60 61 return armnn_driver::ArmnnDriverImpl<hal_1_0::HalPolicy>::prepareModel(m_Runtime, 62 m_ClTunedParameters, 63 m_Options, 64 model, 65 cb); 66 } 67 getCapabilities_1_1(V1_1::IDevice::getCapabilities_1_1_cb cb)68 Return<void> getCapabilities_1_1(V1_1::IDevice::getCapabilities_1_1_cb cb) override 69 { 70 ALOGV("hal_1_1::ArmnnDriver::getCapabilities_1_1()"); 71 72 return hal_1_1::ArmnnDriverImpl::getCapabilities_1_1(m_Runtime, cb); 73 } 74 getSupportedOperations_1_1(const V1_1::Model & model,V1_1::IDevice::getSupportedOperations_1_1_cb cb)75 Return<void> getSupportedOperations_1_1(const V1_1::Model& model, 76 V1_1::IDevice::getSupportedOperations_1_1_cb cb) override 77 { 78 ALOGV("hal_1_1::ArmnnDriver::getSupportedOperations_1_1()"); 79 80 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getSupportedOperations(m_Runtime, 81 m_Options, 82 model, 83 cb); 84 } 85 prepareModel_1_1(const V1_1::Model & model,V1_1::ExecutionPreference preference,const android::sp<V1_0::IPreparedModelCallback> & cb)86 Return<V1_0::ErrorStatus> prepareModel_1_1(const V1_1::Model& model, 87 V1_1::ExecutionPreference preference, 88 const android::sp<V1_0::IPreparedModelCallback>& cb) override 89 { 90 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1()"); 91 92 if (!(preference == V1_1::ExecutionPreference::LOW_POWER || 93 preference == V1_1::ExecutionPreference::FAST_SINGLE_ANSWER || 94 preference == V1_1::ExecutionPreference::SUSTAINED_SPEED)) 95 { 96 ALOGV("hal_1_1::ArmnnDriver::prepareModel_1_1: Invalid execution preference"); 97 cb->notify(V1_0::ErrorStatus::INVALID_ARGUMENT, nullptr); 98 return V1_0::ErrorStatus::INVALID_ARGUMENT; 99 } 100 101 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()); 108 } 109 getStatus()110 Return<V1_0::DeviceStatus> getStatus() override 111 { 112 ALOGV("hal_1_1::ArmnnDriver::getStatus()"); 113 114 return armnn_driver::ArmnnDriverImpl<hal_1_1::HalPolicy>::getStatus(); 115 } 116 }; 117 118 } // namespace hal_1_1 119 } // namespace armnn_driver 120