249 lines
9.1 KiB
C
249 lines
9.1 KiB
C
/*
|
|
* Copyright (C) 2021 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.
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup NeuralNetworks
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @file NeuralNetworksShim.h
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
/******************************************************************
|
|
*
|
|
* IMPORTANT NOTICE:
|
|
*
|
|
* This file is part of Android's set of stable system headers
|
|
* exposed by the Android NDK (Native Development Kit).
|
|
*
|
|
* Third-party source AND binary code relies on the definitions
|
|
* here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES.
|
|
*
|
|
* - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES)
|
|
* - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS
|
|
* - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY
|
|
* - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES
|
|
*/
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <sys/cdefs.h>
|
|
|
|
#include "NeuralNetworksSupportLibraryImpl.h"
|
|
|
|
__BEGIN_DECLS
|
|
|
|
/**
|
|
* Result codes.
|
|
*/
|
|
typedef enum {
|
|
ANNSHIM_NO_ERROR = 0,
|
|
|
|
/**
|
|
* Failure caused by failure to load support library driver.
|
|
*/
|
|
ANNSHIM_FAILED_TO_LOAD_SL = 1,
|
|
|
|
/**
|
|
* Failure caused by failure to register HAL service.
|
|
*/
|
|
ANNSHIM_FAILED_TO_REGISTER_SERVICE = 2,
|
|
|
|
/**
|
|
* General failure.
|
|
*/
|
|
ANNSHIM_GENERAL_ERROR = 3,
|
|
|
|
/**
|
|
* Invalid argument
|
|
*/
|
|
ANNSHIM_INVALID_ARGUMENT = 4,
|
|
|
|
} ANeuralNetworksShimResultCode;
|
|
|
|
/**
|
|
* Supplementary information required to expose NNAPI HAL Service on top of
|
|
* a NNAPI SL Driver.
|
|
*/
|
|
typedef struct ANeuralNetworksShimDeviceInfo ANeuralNetworksShimDeviceInfo;
|
|
|
|
/**
|
|
* Additional parameters indicating how to devices should be registered.
|
|
*/
|
|
typedef struct ANeuralNetworksShimRegistrationParams ANeuralNetworksShimRegistrationParams;
|
|
|
|
/**
|
|
* Allocate ANeuralNetworksShimDeviceInfo struct with a device name.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param deviceInfo The {@link ANeuralNetworksShimDeviceInfo} to be created.
|
|
* Set to NULL if unsuccessful.
|
|
* @param deviceName has to match NNAPI Device name exposed by SL Driver.
|
|
* @param serviceName name of the AIDL service backed by this SL Driver device.
|
|
* If null, the deviceName will be used as the service name.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Returns ANNSHIM_NO_ERROR if successful.
|
|
*/
|
|
int ANeuralNetworksShimDeviceInfo_create(
|
|
ANeuralNetworksShimDeviceInfo* _Nullable* _Nonnull deviceInfo,
|
|
const char* _Nonnull deviceName, const char* _Nullable serviceName) __INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Free ANeuralNetworksShimDeviceInfo struct.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param deviceInfo The NNAPI shim device info to be destroyed. Passing NULL is acceptable and
|
|
* results in no operation.
|
|
*/
|
|
void ANeuralNetworksShimDeviceInfo_free(ANeuralNetworksShimDeviceInfo* _Nonnull deviceInfo)
|
|
__INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Allocate ANeuralNetworksShimRegistrationParams struct.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param nnapiSupportLibraryPackage Handle to a NNAPI SL implementation.
|
|
* @param outRegistrationParams The {@link ANeuralNetworksShimRegistrationParams} to be created.
|
|
* Set to NULL if unsuccessful.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Returns ANNSHIM_NO_ERROR if successful.
|
|
*/
|
|
int ANeuralNetworksShimRegistrationParams_create(
|
|
NnApiSLDriverImpl* _Nonnull nnapiSupportLibraryPackage,
|
|
ANeuralNetworksShimRegistrationParams* _Nullable* _Nonnull outRegistrationParams)
|
|
__INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Free ANeuralNetworksShimRegistrationParams struct.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param registrationParams The NNAPI shim registration parameters to be destroyed. Passing NULL is
|
|
* acceptable and results in no operation.
|
|
*/
|
|
void ANeuralNetworksShimRegistrationParams_free(
|
|
ANeuralNetworksShimRegistrationParams* _Nonnull registrationParams) __INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Add device info to the registration parameters.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param registrationParams The NNAPI shim registration parameter struct to be modified.
|
|
* @param devicesToRegister ANeuralNetworksShimDeviceInfo struct, with name and supplementary info
|
|
* about NNAPI device to register.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Returns ANNSHIM_NO_ERROR if successful.
|
|
*/
|
|
int ANeuralNetworksShimRegistrationParams_addDeviceInfo(
|
|
ANeuralNetworksShimRegistrationParams* _Nonnull registrationParams,
|
|
const ANeuralNetworksShimDeviceInfo* _Nonnull deviceInfo) __INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Set the number of listener threads for all registered services.
|
|
*
|
|
* By default, this value is 15, but this default may change in the future. The provided value must
|
|
* be non-zero.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param registrationParams The NNAPI shim registration parameter struct to be modified.
|
|
* @param numberOfListenerThreads Number of listener threads for the registered services.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Returns ANNSHIM_NO_ERROR if successful.
|
|
*/
|
|
int ANeuralNetworksShimRegistrationParams_setNumberOfListenerThreads(
|
|
ANeuralNetworksShimRegistrationParams* _Nonnull registrationParams,
|
|
uint32_t numberOfListenerThreads) __INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Set whether to register the service eagerly or lazily.
|
|
*
|
|
* By default, the service is eagerly registered.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param registrationParams The NNAPI shim registration parameter struct to be modified.
|
|
* @param asLazy 'false' if the services should be registered with
|
|
* {@link AServiceManager_addService}, 'true' if the services should be registered
|
|
* with {@link AServiceManager_registerLazyService}.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Returns ANNSHIM_NO_ERROR if successful.
|
|
*/
|
|
int ANeuralNetworksShimRegistrationParams_registerAsLazyService(
|
|
ANeuralNetworksShimRegistrationParams* _Nonnull registrationParams, bool asLazy)
|
|
__INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Specifies whether a minimum support device should be registered in the event a specified driver
|
|
* could not be registered from the NNAPI SL implementation.
|
|
*
|
|
* When called, {@link ANeuralNetworksShim_registerSupportLibraryService} will attempt to register
|
|
* all drivers specified by a {@link ANeuralNetworksShimDeviceInfo}. For some clients of this API
|
|
* (such as the legacy NNAPI vendor drivers), failing to register any driver should be considered
|
|
* an error, and {@link ANeuralNetworksShim_registerSupportLibraryService} should return with an
|
|
* error code. However, for other clients of this API (such as the NNAPI updatable vendor drivers),
|
|
* failing to register one driver should not prevent other drivers from being registered; instead, a
|
|
* driver with minimum support should instead be registered so that the devices registered with the
|
|
* Service Manager matches the service instances listed in the device manifest.
|
|
*
|
|
* By default, {@link ANeuralNetworksShim_registerSupportLibraryService} will immediately return
|
|
* with an error instead of registering a minimum support device.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param registrationParams The NNAPI shim registration parameter struct to be modified.
|
|
* @param fallback 'true' if a minimal device should be registered when the actual device is not
|
|
* able to be registered, 'false' if
|
|
* {@link ANeuralNetworksShim_registerSupportLibraryService} should instead
|
|
* immediately fail with an error.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Returns ANNSHIM_NO_ERROR if successful.
|
|
*/
|
|
int ANeuralNetworksShimRegistrationParams_fallbackToMinimumSupportDevice(
|
|
ANeuralNetworksShimRegistrationParams* _Nonnull registrationParams, bool fallback)
|
|
__INTRODUCED_IN(31);
|
|
|
|
/**
|
|
* Register NNAPI support library driver as HAL services.
|
|
*
|
|
* Takes a NNAPI SL implementation and registers each NNAPI Device it exposes as a
|
|
* separate HAL/AIDL service.
|
|
*
|
|
* If loading SL driver is successful, it blocks and never returns. If there's
|
|
* any problem with the support library driver, it returns on error.
|
|
*
|
|
* Available since API level 31.
|
|
*
|
|
* @param registrationParams Additional arguments for how the devices should be registered.
|
|
* @return {@link ANeuralNetworksShimResultCode} enum values.
|
|
* Blocks forever if successful.
|
|
*/
|
|
int ANeuralNetworksShim_registerSupportLibraryService(
|
|
const ANeuralNetworksShimRegistrationParams* _Nonnull registrationParams)
|
|
__INTRODUCED_IN(31);
|
|
|
|
__END_DECLS
|
|
|
|
/** @} */
|