2018-07-03 19:03:47 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef _DRM_CLIENT_H_
# define _DRM_CLIENT_H_
# include <linux/types.h>
struct drm_client_dev ;
struct drm_device ;
struct drm_file ;
struct drm_framebuffer ;
struct drm_gem_object ;
2018-07-03 19:03:51 +03:00
struct drm_minor ;
2018-07-03 19:03:47 +03:00
struct module ;
/**
* struct drm_client_funcs - DRM client callbacks
*/
struct drm_client_funcs {
/**
* @ owner : The module owner
*/
struct module * owner ;
/**
* @ unregister :
*
* Called when & drm_device is unregistered . The client should respond by
2019-02-02 04:23:26 +03:00
* releasing its resources using drm_client_release ( ) .
2018-07-03 19:03:47 +03:00
*
* This callback is optional .
*/
void ( * unregister ) ( struct drm_client_dev * client ) ;
/**
* @ restore :
*
* Called on drm_lastclose ( ) . The first client instance in the list that
* returns zero gets the privilege to restore and no more clients are
* called . This callback is not called after @ unregister has been called .
*
* This callback is optional .
*/
int ( * restore ) ( struct drm_client_dev * client ) ;
/**
* @ hotplug :
*
* Called on drm_kms_helper_hotplug_event ( ) .
* This callback is not called after @ unregister has been called .
*
* This callback is optional .
*/
int ( * hotplug ) ( struct drm_client_dev * client ) ;
} ;
/**
* struct drm_client_dev - DRM client instance
*/
struct drm_client_dev {
/**
* @ dev : DRM device
*/
struct drm_device * dev ;
/**
* @ name : Name of the client .
*/
const char * name ;
/**
* @ list :
*
* List of all clients of a DRM device , linked into
* & drm_device . clientlist . Protected by & drm_device . clientlist_mutex .
*/
struct list_head list ;
/**
* @ funcs : DRM client functions ( optional )
*/
const struct drm_client_funcs * funcs ;
/**
* @ file : DRM file
*/
struct drm_file * file ;
} ;
2018-10-01 22:45:36 +03:00
int drm_client_init ( struct drm_device * dev , struct drm_client_dev * client ,
const char * name , const struct drm_client_funcs * funcs ) ;
2018-07-03 19:03:47 +03:00
void drm_client_release ( struct drm_client_dev * client ) ;
2019-04-03 15:56:58 +03:00
void drm_client_register ( struct drm_client_dev * client ) ;
2018-07-03 19:03:47 +03:00
void drm_client_dev_unregister ( struct drm_device * dev ) ;
void drm_client_dev_hotplug ( struct drm_device * dev ) ;
void drm_client_dev_restore ( struct drm_device * dev ) ;
/**
* struct drm_client_buffer - DRM client buffer
*/
struct drm_client_buffer {
/**
* @ client : DRM client
*/
struct drm_client_dev * client ;
/**
* @ handle : Buffer handle
*/
u32 handle ;
/**
* @ pitch : Buffer pitch
*/
u32 pitch ;
/**
* @ gem : GEM object backing this buffer
*/
struct drm_gem_object * gem ;
/**
* @ vaddr : Virtual address for the buffer
*/
void * vaddr ;
/**
* @ fb : DRM framebuffer
*/
struct drm_framebuffer * fb ;
} ;
struct drm_client_buffer *
drm_client_framebuffer_create ( struct drm_client_dev * client , u32 width , u32 height , u32 format ) ;
void drm_client_framebuffer_delete ( struct drm_client_buffer * buffer ) ;
2018-07-03 19:03:51 +03:00
int drm_client_debugfs_init ( struct drm_minor * minor ) ;
2018-07-03 19:03:47 +03:00
# endif