/*
 * Copyright (c) KylinSoft  Co., Ltd. 2024. All rights reserved.
 *
 * kaiming is licensed under the GPL v2.0+.
 * 
 * See the LICENSE file for more details.
 */

#ifndef __KMCAPABILITY_H__
#define __KMCAPABILITY_H__

constexpr int CAP_CHOWN = 0;
constexpr int CAP_DAC_OVERRIDE = 1;
constexpr int CAP_DAC_READ_SEARCH = 2;
constexpr int CAP_FOWNER = 3;
constexpr int CAP_FSETID = 4;
constexpr int CAP_KILL = 5;
constexpr int CAP_SETGID = 6;
constexpr int CAP_SETUID = 7;
constexpr int CAP_SETPCAP = 8;
constexpr int CAP_LINUX_IMMUTABLE = 9;
constexpr int CAP_NET_BIND_SERVICE = 10;
constexpr int CAP_NET_BROADCAST = 11;
constexpr int CAP_NET_ADMIN = 12;
constexpr int CAP_NET_RAW = 13;
constexpr int CAP_IPC_LOCK = 14;
constexpr int CAP_IPC_OWNER = 15;
constexpr int CAP_SYS_MODULE = 16;
constexpr int CAP_SYS_RAWIO = 17;
constexpr int CAP_SYS_CHROOT = 18;
constexpr int CAP_SYS_PTRACE = 19;
constexpr int CAP_SYS_PACCT = 20;
constexpr int CAP_SYS_ADMIN = 21;
constexpr int CAP_SYS_BOOT = 22;
constexpr int CAP_SYS_NICE = 23;
constexpr int CAP_SYS_RESOURCE = 24;
constexpr int CAP_SYS_TIME = 25;
constexpr int CAP_SYS_TTY_CONFIG = 26;
constexpr int CAP_MKNOD = 27;
constexpr int CAP_LEASE = 28;
constexpr int CAP_AUDIT_WRITE = 29;
constexpr int CAP_AUDIT_CONTROL = 30;
constexpr int CAP_SETFCAP = 31;
constexpr int CAP_MAC_OVERRIDE = 32;
constexpr int CAP_MAC_ADMIN = 33;
constexpr int CAP_SYSLOG = 34;
constexpr int CAP_WAKE_ALARM = 35;
constexpr int CAP_BLOCK_SUSPEND = 36;
constexpr int CAP_AUDIT_READ = 37;
constexpr int CAP_PERFMON = 38;
constexpr int CAP_BPF = 39;
constexpr int CAP_CHECKPOINT_RESTORE = 40;

const std::vector<std::string> gpus = {
    "/etc/OpenCL/vendors",
    "/etc/vulkan/icd.d",
    "/etc/init.d",
    "/usr/share/glvnd",
    "/usr/share/drirc.d",
    "/usr/share/vulkan",
    "/usr/share/X11/xorg.conf.d",
    "/usr/share/alsa",
    "/usr/share/pulseaudio",
    "/usr/lib/myarch-linux-gnu/dri",
    "/usr/lib/myarch-linux-gnu/gbm",
    "/usr/lib/myarch-linux-gnu/vdpau",
    "/usr/lib/myarch-linux-gnu/musa",
    "/usr/lib/myarch-linux-gnu/genbu",
    "/usr/lib/xorg/modules",
    "/usr/lib/dri",
    "/usr/lib/kgc",

    // zhaoxin-cx4
    "/usr/lib/myarch-linux-gnu/cx4_driocl.so",
    "/usr/lib/myarch-linux-gnu/cx4oclasm.so",
    "/usr/lib/myarch-linux-gnu/cx4oclcompiler.so"
    "/usr/lib/myarch-linux-gnu/libEGL_cx4.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_cx4.so.0",
    "/usr/lib/myarch-linux-gnu/libcx4GLSLCompiler.so",
    "/usr/lib/myarch-linux-gnu/libcx4arb_compiler.so",
    "/usr/lib/myarch-linux-gnu/libcx4bec.so",
    "/usr/lib/myarch-linux-gnu/libcx4keinterface_v2.so.0",
    "/usr/lib/myarch-linux-gnu/libcx4spirv2nir.so",
    "/usr/lib/myarch-linux-gnu/libglapi_cx4.so.0",
    "/usr/lib/myarch-linux-gnu/libvulkan_cx4.so.0",

    // zhaoxin
    "/usr/lib/myarch-linux-gnu/libEGL_zx.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_zx.so.0",
    "/usr/lib/myarch-linux-gnu/libglapi_zx.so.0",
    "/usr/lib/myarch-linux-gnu/libkeinterface_zx.so.0",
    "/usr/lib/myarch-linux-gnu/libvdpau_zx.so",

    // sietium-umod
    "/usr/lib/myarch-linux-gnu/gb02",

    // xdxgpu
    "/usr/lib/myarch-linux-gnu/libCL_xdxgpu.so"
    "/usr/lib/myarch-linux-gnu/libCL_xdxgpu.so.1",
    "/usr/lib/myarch-linux-gnu/libEGL_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libEGL_xdxgpu.so.0",
    "/usr/lib/myarch-linux-gnu/libGLESv1_CM_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libGLESv2_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libGLX_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libGLX_xdxgpu.so.0",
    "/usr/lib/myarch-linux-gnu/libGL_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libGL_xdxgpu.so.1",
    "/usr/lib/myarch-linux-gnu/libXDXScopeServices.so",
    "/usr/lib/myarch-linux-gnu/libXdxFBC.so",
    "/usr/lib/myarch-linux-gnu/libdri_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libdrm_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libdrm_xdxgpu.so.1",
    "/usr/lib/myarch-linux-gnu/libglapi_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libglapi_xdxgpu.so.0",
    "/usr/lib/myarch-linux-gnu/libgsl_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libsutu_display.so",
    "/usr/lib/myarch-linux-gnu/libufgen_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libusc_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libvlk_xdxgpu.so",
    "/usr/lib/myarch-linux-gnu/libvlk_xdxgpu.so.1",
    "/usr/lib/myarch-linux-gnu/libxdxgpu-ml.so",
    "/usr/lib/myarch-linux-gnu/libxdxgpu_vpp_process.so",

    // innogpu-fh2m
    "/usr/lib/myarch-linux-gnu/libEGL_inno.so.0",
    "/usr/lib/myarch-linux-gnu/libGLESv1_CM_INNO_MESA.so.1",
    "/usr/lib/myarch-linux-gnu/libGLESv2_INNO_MESA.so.1",
    "/usr/lib/myarch-linux-gnu/libGLX_inno.so.0",
    "/usr/lib/myarch-linux-gnu/libGL_INNO_MESA.so.1",
    "/usr/lib/myarch-linux-gnu/libINNOOCL.so.1",
    "/usr/lib/myarch-linux-gnu/libVK_INNO.so.1",
    "/usr/lib/myarch-linux-gnu/libcodec.so",
    "/usr/lib/myarch-linux-gnu/libglapi_inno.so.0",
    "/usr/lib/myarch-linux-gnu/libifbc_ext.so",
    "/usr/lib/myarch-linux-gnu/libinno_dri_support.so.1",
    "/usr/lib/myarch-linux-gnu/libinno_mesa_wsi.so.1",
    "/usr/lib/myarch-linux-gnu/libinnogpu_gbm.so.1",
    "/usr/lib/myarch-linux-gnu/libsrv_um_inno.so.1",
    "/usr/lib/myarch-linux-gnu/libufwriter_inno.so.1",
    "/usr/lib/myarch-linux-gnu/libusc_inno.so.1",

    // innogpu-g0

    // csmicro
    "/usr/lib/myarch-linux-gnu/csmicro",
    "/usr/lib/myarch-linux-gnu/libCSM.so",
    "/usr/lib/myarch-linux-gnu/libdrm_csmicro.so"
    "/usr/lib/myarch-linux-gnu/libdrm_csmicro.so.1",
    "/usr/lib/myarch-linux-gnu/libutil_csmicro.so",
    "/usr/lib/myarch-linux-gnu/libutil_csmicro.so.1",

    // ljmgp
    "/usr/lib/myarch-linux-gnu/libEGL_ljm.so",
    "/usr/lib/myarch-linux-gnu/libEGL_ljm.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_ljm.so",
    "/usr/lib/myarch-linux-gnu/libGLX_ljm.so.0",
    "/usr/lib/myarch-linux-gnu/libdrm_ljm.so",
    "/usr/lib/myarch-linux-gnu/libdrm_ljm.so.1",
    "/usr/lib/myarch-linux-gnu/libutil_ljm.so",
    "/usr/lib/myarch-linux-gnu/libutil_ljm.so.1",
    "/usr/lib/myarch-linux-gnu/libvulkan_ljm.so",
    "/usr/lib/myarch-linux-gnu/libvulkan_ljm.so.1",
    "/usr/lib/myarch-linux-gnu/libGLES_CM_ljm.so",
    "/usr/lib/myarch-linux-gnu/libGLESv1_CM_ljm.so",
    "/usr/lib/myarch-linux-gnu/libGLESv2_ljm.so",
    "/usr/lib/myarch-linux-gnu/libGLSFE.so",
    "/usr/lib/myarch-linux-gnu/libKFE.so",
    "/usr/lib/myarch-linux-gnu/libLJM.so",
    "/usr/lib/myarch-linux-gnu/libMCG.so",
    "/usr/lib/myarch-linux-gnu/libOpenCL_ljm.so",
    "/usr/lib/myarch-linux-gnu/libSPIRV_ljm.so",
    "/usr/lib/myarch-linux-gnu/libapidec.so",

    // gf-arise
    "/usr/lib/myarch-linux-gnu/arise_driocl.so",
    "/usr/lib/myarch-linux-gnu/ariseoclcompiler.so",
    "/usr/lib/myarch-linux-gnu/ariseoclasm.so",
    "/usr/lib/myarch-linux-gnu/libEGL_arise.so.0",
    "/usr/lib/myarch-linux-gnu/libEGL_arise.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libGLX_arise.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_arise.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libariseGLSLCompiler.so",
    "/usr/lib/myarch-linux-gnu/libarisearb_compiler.so",
    "/usr/lib/myarch-linux-gnu/libarisebec.so",
    "/usr/lib/myarch-linux-gnu/libarisekeinterface_v2.so.0",
    "/usr/lib/myarch-linux-gnu/libarisekeinterface_v2.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libglapi_arise.so.0",
    "/usr/lib/myarch-linux-gnu/libglapi_arise.so.0.0.0",

    // musa
    "/etc/musa.ini",
    "/etc/musa_config",
    "/usr/lib/i386-linux-gnu/dri",
    "/usr/lib/i386-linux-gnu/musa",
    "/usr/lib/i386-linux-gnu/gbm",

    // mwv207
    "/usr/lib/myarch-linux-gnu/libdrm_jmgpu.so.1",
    "/usr/lib/myarch-linux-gnu/mwv207",
    "/usr/lib/myarch-linux-gnu/libCLC.so",
    "/usr/lib/myarch-linux-gnu/libEGL_mwv207.so.0",
    "/usr/lib/myarch-linux-gnu/libGLESv1_CM_mwv207.so",
    "/usr/lib/myarch-linux-gnu/libGLESv2_mwv207.so",
    "/usr/lib/myarch-linux-gnu/libGLSLC.so",
    "/usr/lib/myarch-linux-gnu/libGLX_mwv207.so.0",
    "/usr/lib/myarch-linux-gnu/libJMC.so",
    "/usr/lib/myarch-linux-gnu/libSPIRV_jm.so",
    "/usr/lib/myarch-linux-gnu/libdrm_jmgpu.so",
    "/usr/lib/myarch-linux-gnu/libgbm_jm.so",
    "/usr/lib/myarch-linux-gnu/libgbm_mwv207.so",
    "/usr/lib/myarch-linux-gnu/libgbm_mwv207.so.1",
    "/usr/lib/myarch-linux-gnu/libglapi_mwv207.so",
    "/usr/lib/myarch-linux-gnu/libglapi_mwv207.so.0",
    "/usr/lib/myarch-linux-gnu/libmwv207OpenCL.so",
    "/usr/lib/myarch-linux-gnu/libmwv207OpenCL.so.1",
    "/usr/lib/myarch-linux-gnu/libmwv207OpenCL.so.1.0",
    "/usr/lib/myarch-linux-gnu/libmwv207OpenCL.so.1.0.0",

    // mwv206
    "/usr/lib/myarch-linux-gnu/libmwv206api.so",
    "/usr/lib/myarch-linux-gnu/libmwv206dec.so",
    "/usr/lib/myarch-linux-gnu/mwv206",

    // sietium-arch
    "/usr/lib/myarch-linux-gnu/sietium",

    // rxview
    "/usr/lib/myarch-linux-gnu/libvpu.so",
    "/usr/lib/myarch-linux-gnu/rxview",

    // musa-myarch
    "/usr/lib/arm-linux-gnueabihf/musa",
    "/usr/lib/arm-linux-gnueabihf/dri",
    "/usr/lib/arm-linux-gnueabihf/gbm",
    "/usr/lib/arm-linux-gnu/gbm",

    // genbu
    "/usr/lib/myarch-linux-gnu/libEGL_genbu.so",
    "/usr/lib/myarch-linux-gnu/libEGL_genbu.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_genbu.so",
    "/usr/lib/myarch-linux-gnu/libGLX_genbu.so.0",
    "/usr/lib/myarch-linux-gnu/libglapi_genbu.so",
    "/usr/lib/myarch-linux-gnu/libglapi_genbu.so.0",

    // fantgpu-fh2m
    "/usr/lib/myarch-linux-gnu/libEGL_fant.so.0",
    "/usr/lib/myarch-linux-gnu/libEGL_fant.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libFTOCL.so.1",
    "/usr/lib/myarch-linux-gnu/libGLESv1_CM_FT_MESA.so.1",
    "/usr/lib/myarch-linux-gnu/libGLESv2_FT_MESA.so.1",
    "/usr/lib/myarch-linux-gnu/libGLX_fant.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_fant.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libGL_FT_MESA.so.1",
    "/usr/lib/myarch-linux-gnu/libVK_FANT.so.1",
    "/usr/lib/myarch-linux-gnu/libfant_codec.so",
    "/usr/lib/myarch-linux-gnu/libfantgpu_gbm.so.1",
    "/usr/lib/myarch-linux-gnu/libfantgpu_gbm.so.1.0.0",
    "/usr/lib/myarch-linux-gnu/libft_dri_support.so.1",
    "/usr/lib/myarch-linux-gnu/libft_mesa_wsi.so.1",
    "/usr/lib/myarch-linux-gnu/libglapi_fant.so.0",
    "/usr/lib/myarch-linux-gnu/libglapi_fant.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libsrv_um.so.1",
    "/usr/lib/myarch-linux-gnu/libufwriter.so.1",
    "/usr/lib/myarch-linux-gnu/libusc.so.1",
    "/usr/lib/myarch-linux-gnu/libEGL_fant.so",
    "/usr/lib/myarch-linux-gnu/libEGL_fant.so.0",
    "/usr/lib/myarch-linux-gnu/libFTOCL.so",
    "/usr/lib/myarch-linux-gnu/libGLESv1_CM_FT_MESA.so",
    "/usr/lib/myarch-linux-gnu/libGLESv2_FT_MESA.so",
    "/usr/lib/myarch-linux-gnu/libGLX_fant.so",
    "/usr/lib/myarch-linux-gnu/libGLX_fant.so.0",
    "/usr/lib/myarch-linux-gnu/libGL_FT_MESA.so",
    "/usr/lib/myarch-linux-gnu/libVK_FANT.so",
    "/usr/lib/myarch-linux-gnu/libfantgpu_gbm.so",
    "/usr/lib/myarch-linux-gnu/libfantgpu_gbm.so.1",
    "/usr/lib/myarch-linux-gnu/libft_dri_support.so",
    "/usr/lib/myarch-linux-gnu/libft_mesa_wsi.so",
    "/usr/lib/myarch-linux-gnu/libglapi_fant.so",
    "/usr/lib/myarch-linux-gnu/libglapi_fant.so.0",
    "/usr/lib/myarch-linux-gnu/libsrv_um.so",
    "/usr/lib/myarch-linux-gnu/libufwriter.so",
    "/usr/lib/myarch-linux-gnu/libusc.so",

    // mesa
    "/usr/lib/myarch-linux-gnu/libEGL_mesa.so.0",
    "/usr/lib/myarch-linux-gnu/libEGL_mesa.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libglapi.so.0",
    "/usr/lib/myarch-linux-gnu/libglapi.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libVkLayer_MESA_device_select.so",
    "/usr/lib/myarch-linux-gnu/libVkLayer_MESA_overlay.so",
    "/usr/lib/myarch-linux-gnu/libvulkan_broadcom.so",
    "/usr/lib/myarch-linux-gnu/libvulkan_freedreno.so",
    "/usr/lib/myarch-linux-gnu/libvulkan_lvp.so",
    "/usr/lib/myarch-linux-gnu/libvulkan_radeon.so",
    "/usr/lib/myarch-linux-gnu/libvulkan_virtio.so",
    "/usr/lib/myarch-linux-gnu/libGLU.so.1",
    "/usr/lib/myarch-linux-gnu/libGLU.so.1.3.1",
    "/usr/lib/myarch-linux-gnu/libGLX_mesa.so.0",
    "/usr/lib/myarch-linux-gnu/libGLX_mesa.so.0.0.0",
    "/usr/lib/myarch-linux-gnu/libGLX_indirect.so.0",

};

#endif
