1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright (C) 2013 Rob Clark <[email protected]> 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 10*61046927SAndroid Build Coastguard Worker * 11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 13*61046927SAndroid Build Coastguard Worker * Software. 14*61046927SAndroid Build Coastguard Worker * 15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20*61046927SAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21*61046927SAndroid Build Coastguard Worker * SOFTWARE. 22*61046927SAndroid Build Coastguard Worker * 23*61046927SAndroid Build Coastguard Worker * Authors: 24*61046927SAndroid Build Coastguard Worker * Rob Clark <[email protected]> 25*61046927SAndroid Build Coastguard Worker */ 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker #ifndef LOADER_H 28*61046927SAndroid Build Coastguard Worker #define LOADER_H 29*61046927SAndroid Build Coastguard Worker 30*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 31*61046927SAndroid Build Coastguard Worker #include <sys/stat.h> 32*61046927SAndroid Build Coastguard Worker #include <stddef.h> 33*61046927SAndroid Build Coastguard Worker #include "mesa_interface.h" 34*61046927SAndroid Build Coastguard Worker 35*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 36*61046927SAndroid Build Coastguard Worker extern "C" { 37*61046927SAndroid Build Coastguard Worker #endif 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker struct __DRIextensionRec; 40*61046927SAndroid Build Coastguard Worker 41*61046927SAndroid Build Coastguard Worker /* Helpers to figure out driver and device name, eg. from pci-id, etc. */ 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker int 44*61046927SAndroid Build Coastguard Worker loader_open_device(const char *); 45*61046927SAndroid Build Coastguard Worker 46*61046927SAndroid Build Coastguard Worker char * 47*61046927SAndroid Build Coastguard Worker loader_get_kernel_driver_name(int fd); 48*61046927SAndroid Build Coastguard Worker 49*61046927SAndroid Build Coastguard Worker int 50*61046927SAndroid Build Coastguard Worker loader_open_render_node_platform_device(const char * const drivers[], 51*61046927SAndroid Build Coastguard Worker unsigned int n_drivers); 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker bool 54*61046927SAndroid Build Coastguard Worker loader_is_device_render_capable(int fd); 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Worker char * 57*61046927SAndroid Build Coastguard Worker loader_get_render_node(dev_t device); 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker bool 60*61046927SAndroid Build Coastguard Worker loader_get_pci_id_for_fd(int fd, int *vendor_id, int *chip_id); 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker char * 63*61046927SAndroid Build Coastguard Worker loader_get_driver_for_fd(int fd); 64*61046927SAndroid Build Coastguard Worker 65*61046927SAndroid Build Coastguard Worker void * 66*61046927SAndroid Build Coastguard Worker loader_open_driver_lib(const char *driver_name, 67*61046927SAndroid Build Coastguard Worker const char *lib_suffix, 68*61046927SAndroid Build Coastguard Worker const char **search_path_vars, 69*61046927SAndroid Build Coastguard Worker const char *default_search_path, 70*61046927SAndroid Build Coastguard Worker bool warn_on_fail); 71*61046927SAndroid Build Coastguard Worker 72*61046927SAndroid Build Coastguard Worker char * 73*61046927SAndroid Build Coastguard Worker loader_get_device_name_for_fd(int fd); 74*61046927SAndroid Build Coastguard Worker 75*61046927SAndroid Build Coastguard Worker /* For dri prime gpu offloading this function will take current render fd and possibly 76*61046927SAndroid Build Coastguard Worker * update it with new prime gpu offloading fd. For dri prime gpu offloading optionally 77*61046927SAndroid Build Coastguard Worker * this function can return the original fd. Also this function returns true/false based 78*61046927SAndroid Build Coastguard Worker * on render gpu is different from display gpu. 79*61046927SAndroid Build Coastguard Worker */ 80*61046927SAndroid Build Coastguard Worker 81*61046927SAndroid Build Coastguard Worker bool 82*61046927SAndroid Build Coastguard Worker loader_get_user_preferred_fd(int *fd_render_gpu, int *original_fd); 83*61046927SAndroid Build Coastguard Worker 84*61046927SAndroid Build Coastguard Worker /* for logging.. keep this aligned with egllog.h so we can just use 85*61046927SAndroid Build Coastguard Worker * _eglLog directly. 86*61046927SAndroid Build Coastguard Worker */ 87*61046927SAndroid Build Coastguard Worker 88*61046927SAndroid Build Coastguard Worker #define _LOADER_FATAL 0 /* unrecoverable error */ 89*61046927SAndroid Build Coastguard Worker #define _LOADER_WARNING 1 /* recoverable error/problem */ 90*61046927SAndroid Build Coastguard Worker #define _LOADER_INFO 2 /* just useful info */ 91*61046927SAndroid Build Coastguard Worker #define _LOADER_DEBUG 3 /* useful info for debugging */ 92*61046927SAndroid Build Coastguard Worker 93*61046927SAndroid Build Coastguard Worker typedef void loader_logger(int level, const char *fmt, ...); 94*61046927SAndroid Build Coastguard Worker void 95*61046927SAndroid Build Coastguard Worker loader_set_logger(loader_logger *logger); 96*61046927SAndroid Build Coastguard Worker 97*61046927SAndroid Build Coastguard Worker struct dri_extension_match { 98*61046927SAndroid Build Coastguard Worker /* __DRI_* extension name */ 99*61046927SAndroid Build Coastguard Worker const char *name; 100*61046927SAndroid Build Coastguard Worker 101*61046927SAndroid Build Coastguard Worker /* Required minimum version in the extension struct */ 102*61046927SAndroid Build Coastguard Worker int version; 103*61046927SAndroid Build Coastguard Worker 104*61046927SAndroid Build Coastguard Worker /* offset in the data arg at which to store a pointer to the extension */ 105*61046927SAndroid Build Coastguard Worker int offset; 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Worker bool optional; 108*61046927SAndroid Build Coastguard Worker }; 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker bool loader_bind_extensions(void *data, 111*61046927SAndroid Build Coastguard Worker const struct dri_extension_match *matches, size_t num_matches, 112*61046927SAndroid Build Coastguard Worker const __DRIextension **extensions); 113*61046927SAndroid Build Coastguard Worker 114*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 115*61046927SAndroid Build Coastguard Worker } 116*61046927SAndroid Build Coastguard Worker #endif 117*61046927SAndroid Build Coastguard Worker 118*61046927SAndroid Build Coastguard Worker #endif /* LOADER_H */ 119