diff --git a/src/intel/dev/intel_device_info.c b/src/intel/dev/intel_device_info.c index 4c6da5e0939..0798046fb02 100644 --- a/src/intel/dev/intel_device_info.c +++ b/src/intel/dev/intel_device_info.c @@ -1518,6 +1518,12 @@ intel_get_device_info_from_fd(int fd, struct intel_device_info *devinfo) return false; } + devinfo->kmd_type = intel_get_kmd_type(fd); + if (devinfo->kmd_type == INTEL_KMD_TYPE_INVALID) { + mesa_loge("Unknown kernel mode driver"); + return false; + } + /* remaining initializion queries the kernel for device info */ if (devinfo->no_hw) { /* Provide some sensible values for NO_HW. */ diff --git a/src/intel/dev/intel_device_info.h b/src/intel/dev/intel_device_info.h index 68df625da63..e2f497cef0f 100644 --- a/src/intel/dev/intel_device_info.h +++ b/src/intel/dev/intel_device_info.h @@ -30,6 +30,7 @@ #include "util/macros.h" #include "compiler/shader_enums.h" +#include "intel_kmd.h" #include "intel/common/intel_engine.h" @@ -96,6 +97,8 @@ enum intel_platform { */ struct intel_device_info { + enum intel_kmd_type kmd_type; + /* Driver internal numbers used to differentiate platforms. */ int ver; int verx10; diff --git a/src/intel/dev/intel_kmd.c b/src/intel/dev/intel_kmd.c new file mode 100644 index 00000000000..91b7f176095 --- /dev/null +++ b/src/intel/dev/intel_kmd.c @@ -0,0 +1,43 @@ +/* + * Copyright © 2023 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include +#include + +#include "intel_kmd.h" + +enum intel_kmd_type +intel_get_kmd_type(int fd) +{ + enum intel_kmd_type type = INTEL_KMD_TYPE_INVALID; + drmVersionPtr version = drmGetVersion(fd); + + if (!version) + return type; + + if (strcmp(version->name, "i915") == 0) + type = INTEL_KMD_TYPE_I915; + + drmFreeVersion(version); + return type; +} diff --git a/src/intel/dev/intel_kmd.h b/src/intel/dev/intel_kmd.h new file mode 100644 index 00000000000..d30cf819163 --- /dev/null +++ b/src/intel/dev/intel_kmd.h @@ -0,0 +1,32 @@ +/* + * Copyright © 2023 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#pragma once + +enum intel_kmd_type { + INTEL_KMD_TYPE_INVALID = 0, + INTEL_KMD_TYPE_I915, + INTEL_KMD_TYPE_LAST +}; + +enum intel_kmd_type intel_get_kmd_type(int fd); diff --git a/src/intel/dev/meson.build b/src/intel/dev/meson.build index 0adfd7e8eb9..724c747b103 100644 --- a/src/intel/dev/meson.build +++ b/src/intel/dev/meson.build @@ -29,6 +29,8 @@ files_libintel_dev = files( 'intel_device_info.h', 'intel_hwconfig.c', 'intel_hwconfig.h', + 'intel_kmd.c', + 'intel_kmd.h', ) libintel_dev = static_library(