1*03ce13f7SAndroid Build Coastguard Worker /* 2*03ce13f7SAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*03ce13f7SAndroid Build Coastguard Worker * 4*03ce13f7SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*03ce13f7SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*03ce13f7SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*03ce13f7SAndroid Build Coastguard Worker * 8*03ce13f7SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*03ce13f7SAndroid Build Coastguard Worker * 10*03ce13f7SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*03ce13f7SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*03ce13f7SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*03ce13f7SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*03ce13f7SAndroid Build Coastguard Worker * limitations under the License. 15*03ce13f7SAndroid Build Coastguard Worker */ 16*03ce13f7SAndroid Build Coastguard Worker 17*03ce13f7SAndroid Build Coastguard Worker #pragma once 18*03ce13f7SAndroid Build Coastguard Worker 19*03ce13f7SAndroid Build Coastguard Worker #include <cstdint> 20*03ce13f7SAndroid Build Coastguard Worker 21*03ce13f7SAndroid Build Coastguard Worker #define MAKE_TAG_CONSTANT(A, B, C, D) (((A) << 24) | ((B) << 16) | ((C) << 8) | (D)) 22*03ce13f7SAndroid Build Coastguard Worker 23*03ce13f7SAndroid Build Coastguard Worker #define HARDWARE_MODULE_TAG MAKE_TAG_CONSTANT('H', 'W', 'M', 'T') 24*03ce13f7SAndroid Build Coastguard Worker #define HARDWARE_DEVICE_TAG MAKE_TAG_CONSTANT('H', 'W', 'D', 'T') 25*03ce13f7SAndroid Build Coastguard Worker 26*03ce13f7SAndroid Build Coastguard Worker #define HARDWARE_MAKE_API_VERSION(maj, min) ((((maj)&0xff) << 8) | ((min)&0xff)) 27*03ce13f7SAndroid Build Coastguard Worker 28*03ce13f7SAndroid Build Coastguard Worker #define HARDWARE_HAL_API_VERSION HARDWARE_MAKE_API_VERSION(1, 0) 29*03ce13f7SAndroid Build Coastguard Worker 30*03ce13f7SAndroid Build Coastguard Worker struct hw_module_methods_t; 31*03ce13f7SAndroid Build Coastguard Worker 32*03ce13f7SAndroid Build Coastguard Worker struct hw_module_t { 33*03ce13f7SAndroid Build Coastguard Worker uint32_t tag; 34*03ce13f7SAndroid Build Coastguard Worker uint16_t module_api_version; 35*03ce13f7SAndroid Build Coastguard Worker uint16_t hal_api_version; 36*03ce13f7SAndroid Build Coastguard Worker const char* id; 37*03ce13f7SAndroid Build Coastguard Worker const char* name; 38*03ce13f7SAndroid Build Coastguard Worker const char* author; 39*03ce13f7SAndroid Build Coastguard Worker hw_module_methods_t* methods; 40*03ce13f7SAndroid Build Coastguard Worker void* dso; 41*03ce13f7SAndroid Build Coastguard Worker #ifdef __LP64__ 42*03ce13f7SAndroid Build Coastguard Worker uint64_t reserved[32 - 7]; 43*03ce13f7SAndroid Build Coastguard Worker #else 44*03ce13f7SAndroid Build Coastguard Worker uint32_t reserved[32 - 7]; 45*03ce13f7SAndroid Build Coastguard Worker #endif 46*03ce13f7SAndroid Build Coastguard Worker }; 47*03ce13f7SAndroid Build Coastguard Worker 48*03ce13f7SAndroid Build Coastguard Worker struct hw_device_t { 49*03ce13f7SAndroid Build Coastguard Worker uint32_t tag; 50*03ce13f7SAndroid Build Coastguard Worker uint32_t version; 51*03ce13f7SAndroid Build Coastguard Worker struct hw_module_t* module; 52*03ce13f7SAndroid Build Coastguard Worker #ifdef __LP64__ 53*03ce13f7SAndroid Build Coastguard Worker uint64_t reserved[12]; 54*03ce13f7SAndroid Build Coastguard Worker #else 55*03ce13f7SAndroid Build Coastguard Worker uint32_t reserved[12]; 56*03ce13f7SAndroid Build Coastguard Worker #endif 57*03ce13f7SAndroid Build Coastguard Worker int (*close)(hw_device_t* device); 58*03ce13f7SAndroid Build Coastguard Worker }; 59*03ce13f7SAndroid Build Coastguard Worker 60*03ce13f7SAndroid Build Coastguard Worker struct hw_module_methods_t { 61*03ce13f7SAndroid Build Coastguard Worker int (*open)(const hw_module_t*, const char*, hw_device_t**); 62*03ce13f7SAndroid Build Coastguard Worker }; 63*03ce13f7SAndroid Build Coastguard Worker 64*03ce13f7SAndroid Build Coastguard Worker extern "C" { 65*03ce13f7SAndroid Build Coastguard Worker int hw_get_module(const char* id, const hw_module_t** module); 66*03ce13f7SAndroid Build Coastguard Worker }; 67