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: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211222082831.196562-2-javierm@redhat.com
This commit is contained in:
parent
ba3a5ddcf1
commit
52506b099e
|
@ -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
|
||||
DRM_IOCTL_VERSION ioctl.
|
||||
|
||||
Module Initialization
|
||||
---------------------
|
||||
|
||||
.. kernel-doc:: include/drm/drm_module.h
|
||||
:doc: overview
|
||||
|
||||
Managing Ownership of the Framebuffer Aperture
|
||||
----------------------------------------------
|
||||
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
/* 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
|
Loading…
Reference in New Issue