docs: def list_supported_drivers():
          """Returns dictionary with driver classes names as keys."""
  
          def convert_oslo_config(oslo_options):
              options = []
              for opt in oslo_options:
                  tmp_dict = {k: str(v) for k, v in vars(opt).items()
                              if not k.startswith('_')}
                  options.append(tmp_dict)
              return options
  
          def list_drivers(queue):
              cwd = os.getcwd()
              # Go to the parent directory directory where Cinder is installed
              os.chdir(utils.__file__.rsplit(os.sep, 2)[0])
              try:
                  drivers = cinder_interface_util.get_volume_drivers()
                  mapping = {d.class_name: vars(d) for d in drivers}
                  # Drivers contain class instances which are not serializable
                  for driver in mapping.values():
                      driver.pop('cls', None)
                      if 'driver_options' in driver:
                          driver['driver_options'] = convert_oslo_config(
                              driver['driver_options'])
              finally:
                  os.chdir(cwd)
              queue.put(mapping)
  
          # Use a different process to avoid having all driver classes loaded in
          # memory during our execution.
          queue = multiprocessing.Queue()
          p = multiprocessing.Process(target=list_drivers, args=(queue,))
          p.start()
          result = queue.get()
          p.join()
          return result