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