1f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/* 2f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 4f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * you may not use this file except in compliance with the License. 6f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * You may obtain a copy of the License at 7f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 8f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * 10f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * See the License for the specific language governing permissions and 14f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * limitations under the License. 15f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 16f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 17f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#ifndef ANDROID_INCLUDE_HARDWARE_HARDWARE_H 18f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define ANDROID_INCLUDE_HARDWARE_HARDWARE_H 19f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 20f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#include <stdint.h> 21f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#include <sys/cdefs.h> 22f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 23a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#include <cutils/native_handle.h> 24c12d0e9240db0fb53546fd08276454a2cca72492Iliyan Malchev#include <system/graphics.h> 25a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 26f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__BEGIN_DECLS 27f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 28f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/* 29f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Value for the hw_module_t.tag field 30f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 31a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 32a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define MAKE_TAG_CONSTANT(A,B,C,D) (((A) << 24) | ((B) << 16) | ((C) << 8) | (D)) 33a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 34a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define HARDWARE_MODULE_TAG MAKE_TAG_CONSTANT('H', 'W', 'M', 'T') 35a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian#define HARDWARE_DEVICE_TAG MAKE_TAG_CONSTANT('H', 'W', 'D', 'T') 36f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 3765820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin#define HARDWARE_MAKE_API_VERSION(maj,min) \ 3865820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin ((((maj) & 0xff) << 8) | ((min) & 0xff)) 3965820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin 403f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HARDWARE_MAKE_API_VERSION_2(maj,min,hdr) \ 413f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall ((((maj) & 0xff) << 24) | (((min) & 0xff) << 16) | ((hdr) & 0xffff)) 423f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HARDWARE_API_VERSION_2_MAJ_MIN_MASK 0xffff0000 433f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HARDWARE_API_VERSION_2_HEADER_MASK 0x0000ffff 443f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall 453f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall 4665820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin/* 4765820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * The current HAL API version. 4865820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * 4965820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * All module implementations must set the hw_module_t.hal_api_version field 5065820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * to this value when declaring the module with HAL_MODULE_INFO_SYM. 5165820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * 5265820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * Note that previous implementations have always set this field to 0. 5365820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * Therefore, libhardware HAL API will always consider versions 0.0 and 1.0 5465820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * to be 100% binary compatible. 5565820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * 5665820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin */ 5765820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin#define HARDWARE_HAL_API_VERSION HARDWARE_MAKE_API_VERSION(1, 0) 5865820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin 5965820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin/* 6002a5801af9e08559757773f1d22a5ae14bf12928Dima Zavin * Helper macros for module implementors. 6165820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * 622fe3ae5ec955773d389ef11c116848188dcf253fDima Zavin * The derived modules should provide convenience macros for supported 632fe3ae5ec955773d389ef11c116848188dcf253fDima Zavin * versions so that implementations can explicitly specify module/device 642fe3ae5ec955773d389ef11c116848188dcf253fDima Zavin * versions at definition time. 652fe3ae5ec955773d389ef11c116848188dcf253fDima Zavin * 6665820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin * Use this macro to set the hw_module_t.module_api_version field. 6765820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin */ 6865820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin#define HARDWARE_MODULE_API_VERSION(maj,min) HARDWARE_MAKE_API_VERSION(maj,min) 693f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HARDWARE_MODULE_API_VERSION_2(maj,min,hdr) HARDWARE_MAKE_API_VERSION_2(maj,min,hdr) 7065820e4d7a0b89108b194284b94f6f82d28a875cDima Zavin 7102a5801af9e08559757773f1d22a5ae14bf12928Dima Zavin/* 7202a5801af9e08559757773f1d22a5ae14bf12928Dima Zavin * Use this macro to set the hw_device_t.version field 7302a5801af9e08559757773f1d22a5ae14bf12928Dima Zavin */ 7402a5801af9e08559757773f1d22a5ae14bf12928Dima Zavin#define HARDWARE_DEVICE_API_VERSION(maj,min) HARDWARE_MAKE_API_VERSION(maj,min) 753f5b522ac9a472de756c08b16f357acd6dc26e34Jesse Hall#define HARDWARE_DEVICE_API_VERSION_2(maj,min,hdr) HARDWARE_MAKE_API_VERSION_2(maj,min,hdr) 7602a5801af9e08559757773f1d22a5ae14bf12928Dima Zavin 77f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct hw_module_t; 78f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct hw_module_methods_t; 79f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct hw_device_t; 80f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 81f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 82f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 83f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and the fields of this data structure must begin with hw_module_t 84f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific information. 85f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 869d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopiantypedef struct hw_module_t { 87f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** tag must be initialized to HARDWARE_MODULE_TAG */ 88f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t tag; 89f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 902b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin /** 912b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The API version of the implemented module. The module owner is 922b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * responsible for updating the version when a module interface has 932b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * changed. 942b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 952b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The derived modules such as gralloc and audio own and manage this field. 962b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The module user must interpret the version field to decide whether or 972b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * not to inter-operate with the supplied module implementation. 982b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * For example, SurfaceFlinger is responsible for making sure that 992b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * it knows how to manage different versions of the gralloc-module API, 1002b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * and AudioFlinger must know how to do the same for audio-module API. 1012b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1022b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The module API version should include a major and a minor component. 1032b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * For example, version 1.0 could be represented as 0x0100. This format 1042b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * implies that versions 0x0100-0x01ff are all API-compatible. 1052b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1062b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * In the future, libhardware will expose a hw_get_module_version() 1072b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * (or equivalent) function that will take minimum/maximum supported 1082b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * versions as arguments and would be able to reject modules with 1092b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * versions outside of the supplied range. 1102b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin */ 1112b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin uint16_t module_api_version; 1128dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin#define version_major module_api_version 1138dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin /** 1148dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin * version_major/version_minor defines are supplied here for temporary 1158dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin * source code compatibility. They will be removed in the next version. 1168dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin * ALL clients must convert to the new version format. 1178dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin */ 1182b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin 1192b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin /** 1202b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The API version of the HAL module interface. This is meant to 1212b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * version the hw_module_t, hw_module_methods_t, and hw_device_t 1222b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * structures and definitions. 1232b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1242b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The HAL interface owns this field. Module users/implementations 1252b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * must NOT rely on this value for version information. 1262b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1272b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * Presently, 0 is the only valid value. 1282b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin */ 1292b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin uint16_t hal_api_version; 1308dc4e710c0dfa66564c8cea0af53f7b4e8e0f80aDima Zavin#define version_minor hal_api_version 131f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 132f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Identifier of module */ 133f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char *id; 134f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 135f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Name of this module */ 136f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char *name; 137f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 138f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Author/owner/implementor of the module */ 139f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char *author; 140f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 141f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Modules methods */ 142f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_methods_t* methods; 143a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 144a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /** module's dso */ 145a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian void* dso; 146a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 147f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** padding to 128 bytes, reserved for future use */ 148a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian uint32_t reserved[32-7]; 149f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1509d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian} hw_module_t; 1519d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian 1529d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopiantypedef struct hw_module_methods_t { 153f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Open a specific device */ 154f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*open)(const struct hw_module_t* module, const char* id, 155f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_device_t** device); 1569d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian 1579d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian} hw_module_methods_t; 158f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 159f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 160f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every device data structure must begin with hw_device_t 161f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific public methods and attributes. 162f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 1639d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopiantypedef struct hw_device_t { 164f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** tag must be initialized to HARDWARE_DEVICE_TAG */ 165f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t tag; 166f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 1672b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin /** 1682b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * Version of the module-specific device API. This value is used by 1692b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * the derived-module user to manage different device implementations. 1702b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1712b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * The module user is responsible for checking the module_api_version 1722b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * and device version fields to ensure that the user is capable of 1732b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * communicating with the specific module implementation. 1742b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1752b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * One module can support multiple devices with different versions. This 1762b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * can be useful when a device interface changes in an incompatible way 1772b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * but it is still necessary to support older implementations at the same 1782b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * time. One such example is the Camera 2.0 API. 1792b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * 1802b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * This field is interpreted by the module user and is ignored by the 1812b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin * HAL interface itself. 1822b57780d88e32ce9fde32dc085aef2fa7fd478e1Dima Zavin */ 183f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t version; 184f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 185f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** reference to the module this device belongs to */ 186f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_t* module; 187f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 188f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** padding reserved for future use */ 189f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t reserved[12]; 190f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 191f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Close this device */ 192f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*close)(struct hw_device_t* device); 1939d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian 1949d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian} hw_device_t; 195f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 196f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 197a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Name of the hal_module_info 198f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 199f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define HAL_MODULE_INFO_SYM HMI 200f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 201f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 202f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Name of the hal_module_info as a string 203f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 204f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define HAL_MODULE_INFO_SYM_AS_STR "HMI" 205f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 206f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 207f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Get the module info associated with a module by id. 20854921de415cd91af21801115baa40e78fc4ea4beDima Zavin * 20954921de415cd91af21801115baa40e78fc4ea4beDima Zavin * @return: 0 == success, <0 == error and *module == NULL 210f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 211f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectint hw_get_module(const char *id, const struct hw_module_t **module); 212f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 21354921de415cd91af21801115baa40e78fc4ea4beDima Zavin/** 21454921de415cd91af21801115baa40e78fc4ea4beDima Zavin * Get the module info associated with a module instance by class 'class_id' 21554921de415cd91af21801115baa40e78fc4ea4beDima Zavin * and instance 'inst'. 21654921de415cd91af21801115baa40e78fc4ea4beDima Zavin * 21754921de415cd91af21801115baa40e78fc4ea4beDima Zavin * Some modules types necessitate multiple instances. For example audio supports 21854921de415cd91af21801115baa40e78fc4ea4beDima Zavin * multiple concurrent interfaces and thus 'audio' is the module class 21954921de415cd91af21801115baa40e78fc4ea4beDima Zavin * and 'primary' or 'a2dp' are module interfaces. This implies that the files 22054921de415cd91af21801115baa40e78fc4ea4beDima Zavin * providing these modules would be named audio.primary.<variant>.so and 22154921de415cd91af21801115baa40e78fc4ea4beDima Zavin * audio.a2dp.<variant>.so 22254921de415cd91af21801115baa40e78fc4ea4beDima Zavin * 22354921de415cd91af21801115baa40e78fc4ea4beDima Zavin * @return: 0 == success, <0 == error and *module == NULL 22454921de415cd91af21801115baa40e78fc4ea4beDima Zavin */ 22554921de415cd91af21801115baa40e78fc4ea4beDima Zavinint hw_get_module_by_class(const char *class_id, const char *inst, 22654921de415cd91af21801115baa40e78fc4ea4beDima Zavin const struct hw_module_t **module); 227f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 228f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__END_DECLS 229f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 230f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#endif /* ANDROID_INCLUDE_HARDWARE_HARDWARE_H */ 231