hardware.h revision c12d0e9240db0fb53546fd08276454a2cca72492
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 37f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct hw_module_t; 38f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct hw_module_methods_t; 39f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectstruct hw_device_t; 40f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 41f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 42f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM 43f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * and the fields of this data structure must begin with hw_module_t 44f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific information. 45f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 469d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopiantypedef struct hw_module_t { 47f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** tag must be initialized to HARDWARE_MODULE_TAG */ 48f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t tag; 49f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 50f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** major version number for the module */ 51f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint16_t version_major; 52f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 53f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** minor version number of the module */ 54f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint16_t version_minor; 55f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 56f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Identifier of module */ 57f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char *id; 58f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 59f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Name of this module */ 60f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char *name; 61f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 62f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Author/owner/implementor of the module */ 63f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project const char *author; 64f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 65f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Modules methods */ 66f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_methods_t* methods; 67a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 68a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian /** module's dso */ 69a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian void* dso; 70a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian 71f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** padding to 128 bytes, reserved for future use */ 72a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian uint32_t reserved[32-7]; 73f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 749d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian} hw_module_t; 759d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian 769d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopiantypedef struct hw_module_methods_t { 77f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Open a specific device */ 78f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*open)(const struct hw_module_t* module, const char* id, 79f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_device_t** device); 809d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian 819d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian} hw_module_methods_t; 82f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 83f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 84f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Every device data structure must begin with hw_device_t 85f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * followed by module specific public methods and attributes. 86f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 879d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopiantypedef struct hw_device_t { 88f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** tag must be initialized to HARDWARE_DEVICE_TAG */ 89f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t tag; 90f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 91f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** version number for hw_device_t */ 92f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t version; 93f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 94f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** reference to the module this device belongs to */ 95f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project struct hw_module_t* module; 96f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 97f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** padding reserved for future use */ 98f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project uint32_t reserved[12]; 99f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 100f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project /** Close this device */ 101f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project int (*close)(struct hw_device_t* device); 1029d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian 1039d82c1a447a72a2c086b9cd34c5b73b163d7acbcMathias Agopian} hw_device_t; 104f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 105f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 106a8a75166a2d3c7639a7432a67075c98796165206Mathias Agopian * Name of the hal_module_info 107f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 108f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define HAL_MODULE_INFO_SYM HMI 109f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 110f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 111f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Name of the hal_module_info as a string 112f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 113f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#define HAL_MODULE_INFO_SYM_AS_STR "HMI" 114f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 115f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project/** 116f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project * Get the module info associated with a module by id. 11754921de415cd91af21801115baa40e78fc4ea4beDima Zavin * 11854921de415cd91af21801115baa40e78fc4ea4beDima Zavin * @return: 0 == success, <0 == error and *module == NULL 119f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project */ 120f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Projectint hw_get_module(const char *id, const struct hw_module_t **module); 121f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 12254921de415cd91af21801115baa40e78fc4ea4beDima Zavin/** 12354921de415cd91af21801115baa40e78fc4ea4beDima Zavin * Get the module info associated with a module instance by class 'class_id' 12454921de415cd91af21801115baa40e78fc4ea4beDima Zavin * and instance 'inst'. 12554921de415cd91af21801115baa40e78fc4ea4beDima Zavin * 12654921de415cd91af21801115baa40e78fc4ea4beDima Zavin * Some modules types necessitate multiple instances. For example audio supports 12754921de415cd91af21801115baa40e78fc4ea4beDima Zavin * multiple concurrent interfaces and thus 'audio' is the module class 12854921de415cd91af21801115baa40e78fc4ea4beDima Zavin * and 'primary' or 'a2dp' are module interfaces. This implies that the files 12954921de415cd91af21801115baa40e78fc4ea4beDima Zavin * providing these modules would be named audio.primary.<variant>.so and 13054921de415cd91af21801115baa40e78fc4ea4beDima Zavin * audio.a2dp.<variant>.so 13154921de415cd91af21801115baa40e78fc4ea4beDima Zavin * 13254921de415cd91af21801115baa40e78fc4ea4beDima Zavin * @return: 0 == success, <0 == error and *module == NULL 13354921de415cd91af21801115baa40e78fc4ea4beDima Zavin */ 13454921de415cd91af21801115baa40e78fc4ea4beDima Zavinint hw_get_module_by_class(const char *class_id, const char *inst, 13554921de415cd91af21801115baa40e78fc4ea4beDima Zavin const struct hw_module_t **module); 136f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 137f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project__END_DECLS 138f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project 139f53ebec38718ff5d6b2aff2fa62b92a75d007ca5The Android Open Source Project#endif /* ANDROID_INCLUDE_HARDWARE_HARDWARE_H */ 140