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