xref: /aosp_15_r20/external/android-nn-driver/1.2/HalPolicy.hpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
1*3e777be0SXin Li //
2*3e777be0SXin Li // Copyright © 2019-2023 Arm Ltd and Contributors. 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 "../ConversionUtils.hpp"
9*3e777be0SXin Li #include "../ConversionUtils_1_2.hpp"
10*3e777be0SXin Li 
11*3e777be0SXin Li #include <HalInterfaces.h>
12*3e777be0SXin Li 
13*3e777be0SXin Li #include <armnn/Types.hpp>
14*3e777be0SXin Li 
15*3e777be0SXin Li namespace V1_2 = ::android::hardware::neuralnetworks::V1_2;
16*3e777be0SXin Li 
17*3e777be0SXin Li namespace armnn_driver
18*3e777be0SXin Li {
19*3e777be0SXin Li class DriverOptions;
20*3e777be0SXin Li namespace hal_1_2
21*3e777be0SXin Li {
22*3e777be0SXin Li 
23*3e777be0SXin Li class HalPolicy
24*3e777be0SXin Li {
25*3e777be0SXin Li public:
26*3e777be0SXin Li     using Model                     = V1_2::Model;
27*3e777be0SXin Li     using Operand                   = V1_2::Operand;
28*3e777be0SXin Li     using OperandLifeTime           = V1_0::OperandLifeTime;
29*3e777be0SXin Li     using OperandType               = V1_2::OperandType;
30*3e777be0SXin Li     using Operation                 = V1_2::Operation;
31*3e777be0SXin Li     using OperationType             = V1_2::OperationType;
32*3e777be0SXin Li     using ExecutionCallback         = V1_2::IExecutionCallback;
33*3e777be0SXin Li     using getSupportedOperations_cb = V1_2::IDevice::getSupportedOperations_1_2_cb;
34*3e777be0SXin Li     using ErrorStatus               = V1_0::ErrorStatus;
35*3e777be0SXin Li     using DeviceType                = V1_2::DeviceType;
36*3e777be0SXin Li 
37*3e777be0SXin Li     static DeviceType GetDeviceTypeFromOptions(const DriverOptions& options);
38*3e777be0SXin Li 
39*3e777be0SXin Li     static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data);
40*3e777be0SXin Li 
41*3e777be0SXin Li private:
42*3e777be0SXin Li     static bool ConvertArgMinMax(const Operation& operation,
43*3e777be0SXin Li                                  const Model& model,
44*3e777be0SXin Li                                  ConversionData& data,
45*3e777be0SXin Li                                  armnn::ArgMinMaxFunction argMinMaxFunction);
46*3e777be0SXin Li 
47*3e777be0SXin Li     static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data);
48*3e777be0SXin Li 
49*3e777be0SXin Li     static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data);
50*3e777be0SXin Li 
51*3e777be0SXin Li     static bool ConvertCast(const Operation& operation, const Model& model, ConversionData& data);
52*3e777be0SXin Li 
53*3e777be0SXin Li     static bool ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data);
54*3e777be0SXin Li 
55*3e777be0SXin Li     static bool ConvertComparison(const Operation& operation,
56*3e777be0SXin Li                                   const Model& model,
57*3e777be0SXin Li                                   ConversionData& data,
58*3e777be0SXin Li                                   armnn::ComparisonOperation comparisonOperation);
59*3e777be0SXin Li 
60*3e777be0SXin Li     static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data);
61*3e777be0SXin Li 
62*3e777be0SXin Li     static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data);
63*3e777be0SXin Li 
64*3e777be0SXin Li     static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data);
65*3e777be0SXin Li 
66*3e777be0SXin Li     static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data);
67*3e777be0SXin Li 
68*3e777be0SXin Li     static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data);
69*3e777be0SXin Li 
70*3e777be0SXin Li     static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data);
71*3e777be0SXin Li 
72*3e777be0SXin Li     static bool ConvertElementwiseBinary(const Operation& operation,
73*3e777be0SXin Li                                          const Model& model,
74*3e777be0SXin Li                                          ConversionData& data,
75*3e777be0SXin Li                                          armnn::BinaryOperation binaryOperation);
76*3e777be0SXin Li 
77*3e777be0SXin Li     static bool ConvertElementwiseUnary(const Operation& operation,
78*3e777be0SXin Li                                         const Model& model,
79*3e777be0SXin Li                                         ConversionData& data,
80*3e777be0SXin Li                                         armnn::UnaryOperation unaryOperation);
81*3e777be0SXin Li 
82*3e777be0SXin Li     static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data);
83*3e777be0SXin Li 
84*3e777be0SXin Li     static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data);
85*3e777be0SXin Li 
86*3e777be0SXin Li     static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data);
87*3e777be0SXin Li 
88*3e777be0SXin Li     static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data);
89*3e777be0SXin Li 
90*3e777be0SXin Li     static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data);
91*3e777be0SXin Li 
92*3e777be0SXin Li     static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data);
93*3e777be0SXin Li 
94*3e777be0SXin Li     static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data);
95*3e777be0SXin Li 
96*3e777be0SXin Li     static bool ConvertLocalResponseNormalization(const Operation& operation,
97*3e777be0SXin Li                                                   const Model& model,
98*3e777be0SXin Li                                                   ConversionData& data);
99*3e777be0SXin Li 
100*3e777be0SXin Li     static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data);
101*3e777be0SXin Li 
102*3e777be0SXin Li     static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data);
103*3e777be0SXin Li 
104*3e777be0SXin Li     static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data);
105*3e777be0SXin Li 
106*3e777be0SXin Li     static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data);
107*3e777be0SXin Li 
108*3e777be0SXin Li     static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data);
109*3e777be0SXin Li 
110*3e777be0SXin Li     static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data);
111*3e777be0SXin Li 
112*3e777be0SXin Li     static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data);
113*3e777be0SXin Li 
114*3e777be0SXin Li     static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data);
115*3e777be0SXin Li 
116*3e777be0SXin Li     static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data);
117*3e777be0SXin Li 
118*3e777be0SXin Li     static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data);
119*3e777be0SXin Li 
120*3e777be0SXin Li     static bool ConvertReduce(const Operation& operation,
121*3e777be0SXin Li                               const Model& model,
122*3e777be0SXin Li                               ConversionData& data,
123*3e777be0SXin Li                               ReduceOperation reduce_operation);
124*3e777be0SXin Li 
125*3e777be0SXin Li     static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data);
126*3e777be0SXin Li 
127*3e777be0SXin Li     static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data);
128*3e777be0SXin Li 
129*3e777be0SXin Li     static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data);
130*3e777be0SXin Li 
131*3e777be0SXin Li     static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data);
132*3e777be0SXin Li 
133*3e777be0SXin Li     static bool ConvertResize(const Operation& operation,
134*3e777be0SXin Li                               const Model& model,
135*3e777be0SXin Li                               ConversionData& data,
136*3e777be0SXin Li                               armnn::ResizeMethod resizeMethod);
137*3e777be0SXin Li 
138*3e777be0SXin Li     static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data);
139*3e777be0SXin Li 
140*3e777be0SXin Li     static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data);
141*3e777be0SXin Li 
142*3e777be0SXin Li     static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data);
143*3e777be0SXin Li 
144*3e777be0SXin Li     static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data);
145*3e777be0SXin Li 
146*3e777be0SXin Li     static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data);
147*3e777be0SXin Li 
148*3e777be0SXin Li     static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data);
149*3e777be0SXin Li 
150*3e777be0SXin Li     static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data);
151*3e777be0SXin Li 
152*3e777be0SXin Li     static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data);
153*3e777be0SXin Li 
154*3e777be0SXin Li     static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data);
155*3e777be0SXin Li 
156*3e777be0SXin Li     static bool ConvertUnidirectionalSequenceLstm(const Operation& operation,
157*3e777be0SXin Li                                                   const Model& model,
158*3e777be0SXin Li                                                   ConversionData& data);
159*3e777be0SXin Li };
160*3e777be0SXin Li 
161*3e777be0SXin Li } // namespace hal_1_2
162*3e777be0SXin Li } // namespace armnn_driver
163