From 98fc793386560e6258383ff6f5bffcb04a8d273b Mon Sep 17 00:00:00 2001 From: Carter Li Date: Fri, 2 Aug 2024 14:07:04 +0800 Subject: [PATCH] GPU (Linux): embed part of `asahi_drm.h` code --- src/detection/gpu/gpu_linux.c | 81 ++++++++++++++++++++++++++++++++--- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index 71b614c63..dee3ff961 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -10,14 +10,83 @@ #include #if __aarch64__ - #if __has_include() && FF_HAVE_DRM - #include + #if FF_HAVE_DRM #include #include #include - #define FF_HAVE_ASAHI_DRM_H 1 - #else - #warning " not available" + + #if !__has_include() + #include + #else + /* SPDX-License-Identifier: MIT */ + /* Copyright (C) The Asahi Linux Contributors */ + #define DRM_ASAHI_GET_PARAMS 0x00 + #define DRM_ASAHI_MAX_CLUSTERS 32 + struct drm_asahi_params_global + { + __u32 unstable_uabi_version; + __u32 pad0; + + __u64 feat_compat; + __u64 feat_incompat; + + __u32 gpu_generation; + __u32 gpu_variant; + __u32 gpu_revision; + __u32 chip_id; + + __u32 num_dies; + __u32 num_clusters_total; + __u32 num_cores_per_cluster; + __u32 num_frags_per_cluster; + __u32 num_gps_per_cluster; + __u32 num_cores_total_active; + __u64 core_masks[DRM_ASAHI_MAX_CLUSTERS]; + + __u32 vm_page_size; + __u32 pad1; + __u64 vm_user_start; + __u64 vm_user_end; + __u64 vm_shader_start; + __u64 vm_shader_end; + + __u32 max_syncs_per_submission; + __u32 max_commands_per_submission; + __u32 max_commands_in_flight; + __u32 max_attachments; + + __u32 timer_frequency_hz; + __u32 min_frequency_khz; + __u32 max_frequency_khz; + __u32 max_power_mw; + + __u32 result_render_size; + __u32 result_compute_size; + }; + + struct drm_asahi_get_params + { + /** @extensions: Pointer to the first extension struct, if any */ + __u64 extensions; + + /** @param: Parameter group to fetch (MBZ) */ + __u32 param_group; + + /** @pad: MBZ */ + __u32 pad; + + /** @value: User pointer to write parameter struct */ + __u64 pointer; + + /** @value: Size of user buffer, max size supported on return */ + __u64 size; + }; + + enum + { + DRM_IOCTL_ASAHI_GET_PARAMS = DRM_IOWR(DRM_COMMAND_BASE + DRM_ASAHI_GET_PARAMS, struct drm_asahi_get_params), + }; + #endif #endif #endif @@ -338,7 +407,7 @@ FF_MAYBE_UNUSED static const char* detectAsahi(FFlist* gpus, FFstrbuf* buffer, F pciDetectDriver(gpu, drmDir, buffer, drmKey); - #if FF_HAVE_ASAHI_DRM_H + #if FF_HAVE_DRM ffStrbufSetS(buffer, "/dev/dri/"); ffStrbufAppendS(buffer, drmKey); FF_AUTO_CLOSE_FD int fd = open(buffer->chars, O_RDONLY);