/* * 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 #include #include #include #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 /** @} */