--- a/src/nvidia-modprobe-utils.h	2020-09-18 18:11:57.046187358 +0800
+++ b/src/nvidia-modprobe-utils.h	2020-09-18 23:35:14.062948666 +0800
@@ -31,29 +31,20 @@
 #include <stdio.h>
 
 #define NV_MAX_CHARACTER_DEVICE_FILE_STRLEN  128
-#define NV_MODULE_INSTANCE_NONE              -1
-#define NV_MODULE_INSTANCE_ZERO              0
-#define NV_MAX_MODULE_INSTANCES              8
 #define NV_CTL_DEVICE_NUM                    255
 #define NV_MODESET_MINOR_DEVICE_NUM          254
-
-#define NV_FRONTEND_CONTROL_DEVICE_MINOR_MAX NV_CTL_DEVICE_NUM
+#define NV_NVSWITCH_CTL_MINOR                255
 
 #define NV_DEVICE_FILE_PATH "/dev/nvidia%d"
 #define NV_CTRL_DEVICE_FILE_PATH "/dev/nvidiactl"
 #define NV_MODESET_DEVICE_NAME "/dev/nvidia-modeset"
 #define NV_VGPU_VFIO_DEVICE_NAME "/dev/nvidia-vgpu%d"
 #define NV_NVLINK_DEVICE_NAME "/dev/nvidia-nvlink"
+#define NV_NVSWITCH_CTL_NAME "/dev/nvidia-nvswitchctl"
+#define NV_NVSWITCH_DEVICE_NAME "/dev/nvidia-nvswitch%d"
 
-#define NV_NMODULE_CTRL_DEVICE_FILE_PATH "/dev/nvidiactl%d"
-
-#define NV_FRONTEND_CONTROL_DEVICE_MINOR_MIN \
-    (NV_FRONTEND_CONTROL_DEVICE_MINOR_MAX - \
-     NV_MAX_MODULE_INSTANCES)
-
-#define NV_FRONTEND_IS_CONTROL_DEVICE(x) \
-    ((x <= NV_FRONTEND_CONTROL_DEVICE_MINOR_MAX) && \
-     (x > NV_FRONTEND_CONTROL_DEVICE_MINOR_MIN))
+#define NV_CAPS_MODULE_NAME "nvidia-caps"
+#define NV_CAP_DEVICE_NAME "/dev/" NV_CAPS_MODULE_NAME "/nvidia-cap%d"
 
 #if defined(NV_LINUX)
 
@@ -76,40 +67,33 @@
     return !!(state & (1 << value));
 }
 
-int nvidia_get_file_state(int minor, int module_instance);
-int nvidia_modprobe(const int print_errors, int module_instance);
-int nvidia_mknod(int minor, int module_instance);
+int nvidia_get_file_state(int minor);
+int nvidia_modprobe(const int print_errors);
+int nvidia_mknod(int minor);
 int nvidia_uvm_modprobe(void);
 int nvidia_uvm_mknod(int base_minor);
 int nvidia_modeset_modprobe(void);
 int nvidia_modeset_mknod(void);
 int nvidia_vgpu_vfio_mknod(int minor_num);
 int nvidia_nvlink_mknod(void);
-
-int mknod_helper(int major, int minor, const char *path, const char *proc_path);
-int get_chardev_major(const char *name);
+int nvidia_nvlink_get_file_state(void);
+int nvidia_nvswitch_mknod(int minor);
+int nvidia_nvswitch_get_file_state(int minor);
+int nvidia_cap_mknod(const char* cap_file_path, int *minor);
+int nvidia_cap_get_file_state(const char* cap_file_path);
+int nvidia_cap_get_device_file_attrs(const char* cap_file_path, int *major, int *minor, char *name);
+int nvidia_get_chardev_major(const char *name);
 
 #endif /* NV_LINUX */
 
 /*
- * Detect use of multiple kernel module instances. Use a single 
- * module instance unless instance != NV_MODULE_INSTANCE_NONE
- */
-static __inline__ int is_multi_module(int module_instance)
-{
-    return (module_instance != NV_MODULE_INSTANCE_NONE);
-}
-
-
-/*
  * Construct the device file name, based on 'minor'.  If an error
  * occurs, the nul terminator will be written to name[0].
  */
 static __inline__ void assign_device_file_name
 (
     char name[NV_MAX_CHARACTER_DEVICE_FILE_STRLEN],
-    int minor,
-    int module_instance
+    int minor
 )
 {
     int ret;
@@ -119,20 +102,12 @@
         goto fail;
     }
 
-    if (!is_multi_module(module_instance) && minor == NV_CTL_DEVICE_NUM)
+    if (minor == NV_CTL_DEVICE_NUM)
     {
         ret = snprintf(name,
                        NV_MAX_CHARACTER_DEVICE_FILE_STRLEN,
                        NV_CTRL_DEVICE_FILE_PATH);
     }
-    else if (is_multi_module(module_instance) && 
-             NV_FRONTEND_IS_CONTROL_DEVICE(minor))
-    {
-        ret = snprintf(name,
-                       NV_MAX_CHARACTER_DEVICE_FILE_STRLEN,
-                       NV_NMODULE_CTRL_DEVICE_FILE_PATH,
-                       module_instance);
-    }
     else
     {
         ret = snprintf(name,
@@ -154,4 +129,4 @@
     name[0] = '\0';
 }
 
-#endif /* __NVIDIA_MODPROBE_UTILS_H__ */
\ No newline at end of file
+#endif /* __NVIDIA_MODPROBE_UTILS_H__ */
