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