xref: /aosp_15_r20/external/android-nn-driver/ArmnnDriverImpl.hpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
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 "DriverOptions.hpp"
9*3e777be0SXin Li 
10*3e777be0SXin Li #include <HalInterfaces.h>
11*3e777be0SXin Li 
12*3e777be0SXin Li #ifdef ARMNN_ANDROID_R
13*3e777be0SXin Li using namespace android::nn::hal;
14*3e777be0SXin Li #endif
15*3e777be0SXin Li 
16*3e777be0SXin Li #ifdef ARMNN_ANDROID_S
17*3e777be0SXin Li using namespace android::hardware;
18*3e777be0SXin Li #endif
19*3e777be0SXin Li 
20*3e777be0SXin Li namespace V1_0 = ::android::hardware::neuralnetworks::V1_0;
21*3e777be0SXin Li namespace V1_1 = ::android::hardware::neuralnetworks::V1_1;
22*3e777be0SXin Li 
23*3e777be0SXin Li #ifdef ARMNN_ANDROID_NN_V1_2 // Using ::android::hardware::neuralnetworks::V1_2
24*3e777be0SXin Li namespace V1_2 = ::android::hardware::neuralnetworks::V1_2;
25*3e777be0SXin Li #endif
26*3e777be0SXin Li 
27*3e777be0SXin Li #ifdef ARMNN_ANDROID_NN_V1_3 // Using ::android::hardware::neuralnetworks::V1_3
28*3e777be0SXin Li namespace V1_2 = ::android::hardware::neuralnetworks::V1_2;
29*3e777be0SXin Li namespace V1_3 = ::android::hardware::neuralnetworks::V1_3;
30*3e777be0SXin Li #endif
31*3e777be0SXin Li 
32*3e777be0SXin Li namespace armnn_driver
33*3e777be0SXin Li {
34*3e777be0SXin Li 
35*3e777be0SXin Li template <typename Callback, typename Context>
36*3e777be0SXin Li struct CallbackContext
37*3e777be0SXin Li {
38*3e777be0SXin Li     Callback callback;
39*3e777be0SXin Li     Context ctx;
40*3e777be0SXin Li };
41*3e777be0SXin Li 
42*3e777be0SXin Li template<typename HalPolicy>
43*3e777be0SXin Li class ArmnnDriverImpl
44*3e777be0SXin Li {
45*3e777be0SXin Li public:
46*3e777be0SXin Li     using HalModel                     = typename HalPolicy::Model;
47*3e777be0SXin Li     using HalGetSupportedOperations_cb = typename HalPolicy::getSupportedOperations_cb;
48*3e777be0SXin Li     using HalErrorStatus               = typename HalPolicy::ErrorStatus;
49*3e777be0SXin Li 
50*3e777be0SXin Li     static Return<void> getSupportedOperations(
51*3e777be0SXin Li             const armnn::IRuntimePtr& runtime,
52*3e777be0SXin Li             const DriverOptions& options,
53*3e777be0SXin Li             const HalModel& model,
54*3e777be0SXin Li             HalGetSupportedOperations_cb);
55*3e777be0SXin Li 
56*3e777be0SXin Li     static Return<V1_0::ErrorStatus> prepareModel(
57*3e777be0SXin Li             const armnn::IRuntimePtr& runtime,
58*3e777be0SXin Li             const armnn::IGpuAccTunedParametersPtr& clTunedParameters,
59*3e777be0SXin Li             const DriverOptions& options,
60*3e777be0SXin Li             const HalModel& model,
61*3e777be0SXin Li             const android::sp<V1_0::IPreparedModelCallback>& cb,
62*3e777be0SXin Li             bool float32ToFloat16 = false);
63*3e777be0SXin Li 
64*3e777be0SXin Li     static Return<V1_0::DeviceStatus> getStatus();
65*3e777be0SXin Li 
66*3e777be0SXin Li };
67*3e777be0SXin Li 
68*3e777be0SXin Li } // namespace armnn_driver
69