mirror of https://gitee.com/openkylin/linux.git
140 lines
2.7 KiB
C
140 lines
2.7 KiB
C
/* 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;
|
|
struct drm_minor;
|
|
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
|
|
* releasing it's resources using drm_client_release().
|
|
*
|
|
* 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;
|
|
};
|
|
|
|
int drm_client_new(struct drm_device *dev, struct drm_client_dev *client,
|
|
const char *name, const struct drm_client_funcs *funcs);
|
|
void drm_client_release(struct drm_client_dev *client);
|
|
|
|
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);
|
|
|
|
int drm_client_debugfs_init(struct drm_minor *minor);
|
|
|
|
#endif
|