Commit 52506b09 authored by Thomas Zimmermann's avatar Thomas Zimmermann Committed by Javier Martinez Canillas

drm: Provide PCI module-init macros

Provide helper macros to register PCI-based DRM drivers. The new
macros behave like module_pci_driver() with an additional test if
DRM modesetting has been enabled.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Signed-off-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211222082831.196562-2-javierm@redhat.com
parent ba3a5ddc
...@@ -75,6 +75,12 @@ update it, its value is mostly useless. The DRM core prints it to the ...@@ -75,6 +75,12 @@ update it, its value is mostly useless. The DRM core prints it to the
kernel log at initialization time and passes it to userspace through the kernel log at initialization time and passes it to userspace through the
DRM_IOCTL_VERSION ioctl. DRM_IOCTL_VERSION ioctl.
Module Initialization
---------------------
.. kernel-doc:: include/drm/drm_module.h
:doc: overview
Managing Ownership of the Framebuffer Aperture Managing Ownership of the Framebuffer Aperture
---------------------------------------------- ----------------------------------------------
......
/* SPDX-License-Identifier: MIT */
#ifndef DRM_MODULE_H
#define DRM_MODULE_H
#include <linux/pci.h>
#include <drm/drm_drv.h>
/**
* DOC: overview
*
* This library provides helpers registering DRM drivers during module
* initialization and shutdown. The provided helpers act like bus-specific
* module helpers, such as module_pci_driver(), but respect additional
* parameters that control DRM driver registration.
*
* Below is an example of initializing a DRM driver for a device on the
* PCI bus.
*
* .. code-block:: c
*
* struct pci_driver my_pci_drv = {
* };
*
* drm_module_pci_driver(my_pci_drv);
*
* The generated code will test if DRM drivers are enabled and register
* the PCI driver my_pci_drv. For more complex module initialization, you
* can still use module_init() and module_exit() in your driver.
*/
/*
* PCI drivers
*/
static inline int __init drm_pci_register_driver(struct pci_driver *pci_drv)
{
if (drm_firmware_drivers_only())
return -ENODEV;
return pci_register_driver(pci_drv);
}
/**
* drm_module_pci_driver - Register a DRM driver for PCI-based devices
* @__pci_drv: the PCI driver structure
*
* Registers a DRM driver for devices on the PCI bus. The helper
* macro behaves like module_pci_driver() but tests the state of
* drm_firmware_drivers_only(). For more complex module initialization,
* use module_init() and module_exit() directly.
*
* Each module may only use this macro once. Calling it replaces
* module_init() and module_exit().
*/
#define drm_module_pci_driver(__pci_drv) \
module_driver(__pci_drv, drm_pci_register_driver, pci_unregister_driver)
static inline int __init
drm_pci_register_driver_if_modeset(struct pci_driver *pci_drv, int modeset)
{
if (drm_firmware_drivers_only() && modeset == -1)
return -ENODEV;
if (modeset == 0)
return -ENODEV;
return pci_register_driver(pci_drv);
}
static inline void __exit
drm_pci_unregister_driver_if_modeset(struct pci_driver *pci_drv, int modeset)
{
pci_unregister_driver(pci_drv);
}
/**
* drm_module_pci_driver_if_modeset - Register a DRM driver for PCI-based devices
* @__pci_drv: the PCI driver structure
* @__modeset: an additional parameter that disables the driver
*
* This macro is deprecated and only provided for existing drivers. For
* new drivers, use drm_module_pci_driver().
*
* Registers a DRM driver for devices on the PCI bus. The helper macro
* behaves like drm_module_pci_driver() with an additional driver-specific
* flag. If __modeset is 0, the driver has been disabled, if __modeset is
* -1 the driver state depends on the global DRM state. For all other
* values, the PCI driver has been enabled. The default should be -1.
*/
#define drm_module_pci_driver_if_modeset(__pci_drv, __modeset) \
module_driver(__pci_drv, drm_pci_register_driver_if_modeset, \
drm_pci_unregister_driver_if_modeset, __modeset)
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment