| %% template file for generating types.hal. |
| %% see frameworks/ml/nn/tools/api/README.md. |
| /* |
| * Copyright (C) 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.hardware.neuralnetworks@1.2; |
| |
| import @1.0::DataLocation; |
| import @1.0::ErrorStatus; |
| import @1.0::OperandLifeTime; |
| import @1.0::OperandType; |
| import @1.0::PerformanceInfo; |
| import @1.1::OperationType; |
| |
| import android.hidl.safe_union@1.0::Monostate; |
| |
| enum Constant : uint32_t { |
| /** |
| * The byte size of the cache token. |
| */ |
| BYTE_SIZE_OF_CACHE_TOKEN = 32, |
| |
| /** |
| * The maximum number of files for each type of cache in compilation caching. |
| */ |
| MAX_NUMBER_OF_CACHE_FILES = 32, |
| }; |
| |
| enum OperandType : @1.0::OperandType { |
| %insert Operand_1.2 |
| %insert OEMDeprecationAndOperandTypeRangeMaxComment |
| }; |
| |
| /** |
| * The range of operand values in the OperandType enum. |
| */ |
| enum OperandTypeRange : uint32_t { |
| BASE_MIN = 0, |
| FUNDAMENTAL_MIN = 0, |
| %insert Operand_1.2_MAX |
| OEM_MIN = 10000, |
| OEM_MAX = 10001, |
| BASE_MAX = 0xFFFF, |
| }; |
| |
| /** |
| * Operation types. |
| * |
| * The type of an operation in a model. |
| */ |
| enum OperationType : int32_t { |
| |
| %insert Operation_1.0 |
| |
| %insert Operation_1.1 |
| |
| %insert Operation_1.2 |
| |
| /** |
| * DEPRECATED. Since NNAPI 1.2, extensions are the preferred alternative to |
| * OEM operation and data types. |
| * |
| * This operation is OEM specific. It should only be used for OEM |
| * applications. |
| */ |
| OEM_OPERATION = @1.1::OperationType:OEM_OPERATION, |
| /* ADDING A NEW FUNDAMENTAL OPERATION REQUIRES UPDATING THE VALUE OF |
| * OperationTypeRange::FUNDAMENTAL_MAX. |
| */ |
| /* ADDING A NEW OEM OPERATION REQUIRES UPDATING THE VALUE OF |
| * OperationTypeRange::OEM_MAX. |
| */ |
| }; |
| |
| /** |
| * The range of values in the OperationType enum. |
| */ |
| enum OperationTypeRange : uint32_t { |
| BASE_MIN = 0, |
| FUNDAMENTAL_MIN = 0, |
| %insert Operation_1.2_MAX |
| OEM_MIN = 10000, |
| OEM_MAX = 10000, |
| BASE_MAX = 0xFFFF, |
| }; |
| |
| %insert DeviceType |
| |
| %insert Capabilities |
| |
| %insert Operation |
| |
| %insert SymmPerChannelQuantParams |
| |
| %insert Operand |
| |
| %insert Model |
| |
| %insert OutputShape |
| |
| %insert MeasureTiming |
| |
| %insert Timing |
| |
| /** |
| * FmqRequestDatum is a single element of a serialized representation of an |
| * execution request (a {@link @1.0::Request} object and a {@link MeasureTiming} |
| * value) which is sent across FastMessageQueue. |
| * |
| * The serialized representation for a particular execution is referred to later |
| * in these descriptions as a 'packet'. |
| * |
| * FastMessageQueue can only pass HIDL-defined types that do not involve nested |
| * buffers, handles, or interfaces. |
| * |
| * The request is serialized as follows: |
| * 1) 'packetInformation' |
| * 2) For each input operand: |
| * 2.1) 'inputOperandInformation' |
| * 2.2) For each dimension element of the operand: |
| * 2.2.1) 'inputOperandDimensionValue' |
| * 3) For each output operand: |
| * 3.1) 'outputOperandInformation' |
| * 3.2) For each dimension element of the operand: |
| * 3.2.1) 'outputOperandDimensionValue' |
| * 4) For each pool: |
| * 4.1) 'poolIdentifier' |
| * 5) 'measureTiming' |
| */ |
| safe_union FmqRequestDatum { |
| /** |
| * Type to describe the high-level layout of the packet. |
| */ |
| struct PacketInformation { |
| /** |
| * How many elements the packet contains, including the |
| * "packetInformation" datum. |
| */ |
| uint32_t packetSize; |
| |
| /** |
| * Number of input operands. |
| */ |
| uint32_t numberOfInputOperands; |
| |
| /** |
| * Number of output operands. |
| */ |
| uint32_t numberOfOutputOperands; |
| |
| /** |
| * Number of pool identifiers. |
| */ |
| uint32_t numberOfPools; |
| }; |
| |
| /** |
| * Type representing the information for each operand. |
| */ |
| struct OperandInformation { |
| /** |
| * If true, the argument does not have a value. This can be used for |
| * operations that take optional arguments. If true, the fields of |
| * 'location' are set to 0, 'numberOfDimensions' is set to 0, and the |
| * dimensions information is omitted from the serialization. |
| */ |
| bool hasNoValue; |
| |
| /** |
| * The location within one of the memory pools passed in the Request. |
| */ |
| DataLocation location; |
| |
| /** |
| * Number of subsequent elements that belong to the dimensions vector. |
| */ |
| uint32_t numberOfDimensions; |
| }; |
| |
| /** |
| * packetInformation is the first element of the packet and describes the |
| * remainder of the packet. |
| */ |
| PacketInformation packetInformation; |
| |
| /** |
| * Information for each input operand. |
| */ |
| OperandInformation inputOperandInformation; |
| |
| /** |
| * Element of the dimensions vector. |
| */ |
| uint32_t inputOperandDimensionValue; |
| |
| /** |
| * Information for each output operand. |
| */ |
| OperandInformation outputOperandInformation; |
| |
| /** |
| * Element of the dimensions vector. |
| */ |
| uint32_t outputOperandDimensionValue; |
| |
| /** |
| * Unique identifier for a pool. |
| * |
| * A {@link @1.0::Request} passes across one or more pools of shared memory |
| * for the inputs and outputs of an execution. However, these memory pools |
| * are not able to be sent across FastMessageQueue directly. Instead, the |
| * producing side of the FMQ represents each different pool with a unique |
| * identifier, and sends this identifier across the FMQ. Whenever the |
| * consuming side of the FMQ needs the memory corresponding to this unique |
| * identifier, it can pass the identifier to |
| * {@link IBurstCallback::getMemories} to retreive the memory. Although this |
| * HIDL Binder call is expensive compared to communication across FMQ, it is |
| * only needed in the cases when the consumer does not recognize the unique |
| * identifier. |
| */ |
| int32_t poolIdentifier; |
| |
| /** |
| * Specifies whether or not to measure duration of the execution. The |
| * duration runs from the time the driver dequeues the request from a |
| * FastMessageQueue to the time the driver enqueues results to a |
| * FastMessageQueue. |
| */ |
| MeasureTiming measureTiming; |
| }; |
| |
| /** |
| * FmqResultDatum is a single element of a serialized representation of the |
| * values returned from an execution ({@link @1.0::ErrorStatus}, |
| * vec<{@link OutputShape}>, and {@link Timing}) which is returned via |
| * FastMessageQueue. |
| * |
| * The serialized representation for a particular execution is referred to later |
| * in these descriptions as a 'packet'. |
| * |
| * FastMessageQueue can only pass HIDL-defined types that do not involve nested |
| * buffers, handles, or interfaces. |
| * |
| * The execution return values ({@link @1.0::ErrorStatus} and |
| * vec<{@link OutputShape}>) are serialized as follows: |
| * 1) 'packetInformation' |
| * 2) For each returned operand: |
| * 2.1) 'operandInformation' |
| * 2.2) For each dimension element of the operand: |
| * 2.2.1) 'operandDimensionValue' |
| * 3) 'executionTiming' |
| */ |
| safe_union FmqResultDatum { |
| /** |
| * Type to describe the high-level layout of the packet. |
| */ |
| struct PacketInformation { |
| /** |
| * How many elements the packet contains, including the |
| * "packetInformation" datum. |
| */ |
| uint32_t packetSize; |
| |
| /** |
| * Status of the execution. |
| */ |
| ErrorStatus errorStatus; |
| |
| /** |
| * Number of returned operands. |
| */ |
| uint32_t numberOfOperands; |
| }; |
| |
| /** |
| * Type representing the information for each operand. |
| */ |
| struct OperandInformation { |
| /** |
| * Indicates whether the operand's output buffer is large enough to |
| * store the operand's result data. |
| */ |
| bool isSufficient; |
| |
| /** |
| * Number of subsequent elements that belong to the dimensions vector. |
| */ |
| uint32_t numberOfDimensions; |
| }; |
| |
| /** |
| * packetInformation is the first element of the packet and describes the |
| * remainder of the packet. It additionally includes the status of the |
| * execution. |
| */ |
| PacketInformation packetInformation; |
| |
| /** |
| * Information for each returned operand. |
| */ |
| OperandInformation operandInformation; |
| |
| /** |
| * Element of the dimensions vector. |
| */ |
| uint32_t operandDimensionValue; |
| |
| /** |
| * Duration of execution. Unless measurement was requested and execution |
| * succeeds, all times must be reported as UINT64_MAX. A driver may choose |
| * to report any time as UINT64_MAX, indicating that measurement is not |
| * available. |
| */ |
| Timing executionTiming; |
| }; |
| |
| %insert Extension |