• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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