Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/include/drm/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 11 kB image not shown  

Quelle  gud.h   Sprache: C

 
/* SPDX-License-Identifier: MIT */
/*
 * Copyright 2020 Noralf Trønnes
 */


#ifndef __LINUX_GUD_H
#define __LINUX_GUD_H

#include <linux/types.h>

/*
 * struct gud_display_descriptor_req - Display descriptor
 * @magic: Magic value GUD_DISPLAY_MAGIC
 * @version: Protocol version
 * @flags: Flags
 *         - STATUS_ON_SET: Always do a status request after a SET request.
 *                          This is used by the Linux gadget driver since it has
 *                          no way to control the status stage of a control OUT
 *                          request that has a payload.
 *         - FULL_UPDATE:   Always send the entire framebuffer when flushing changes.
 *                          The GUD_REQ_SET_BUFFER request will not be sent
 *                          before each bulk transfer, it will only be sent if the
 *                          previous bulk transfer had failed. This gives the device
 *                          a chance to reset its state machine if needed.
 *                          This flag can not be used in combination with compression.
 * @compression: Supported compression types
 *               - GUD_COMPRESSION_LZ4: LZ4 lossless compression.
 * @max_buffer_size: Maximum buffer size the device can handle (optional).
 *                   This is useful for devices that don't have a big enough
 *                   buffer to decompress the entire framebuffer in one go.
 * @min_width: Minimum pixel width the controller can handle
 * @max_width: Maximum width
 * @min_height: Minimum height
 * @max_height: Maximum height
 *
 * Devices that have only one display mode will have min_width == max_width
 * and min_height == max_height.
 */

struct gud_display_descriptor_req {
 __le32 magic;
#define GUD_DISPLAY_MAGIC   0x1d50614d
 __u8 version;
 __le32 flags;
#define GUD_DISPLAY_FLAG_STATUS_ON_SET  BIT(0)
#define GUD_DISPLAY_FLAG_FULL_UPDATE  BIT(1)
 __u8 compression;
#define GUD_COMPRESSION_LZ4   BIT(0)
 __le32 max_buffer_size;
 __le32 min_width;
 __le32 max_width;
 __le32 min_height;
 __le32 max_height;
} __packed;

/*
 * struct gud_property_req - Property
 * @prop: Property
 * @val: Value
 */

struct gud_property_req {
 __le16 prop;
 __le64 val;
} __packed;

/*
 * struct gud_display_mode_req - Display mode
 * @clock: Pixel clock in kHz
 * @hdisplay: Horizontal display size
 * @hsync_start: Horizontal sync start
 * @hsync_end: Horizontal sync end
 * @htotal: Horizontal total size
 * @vdisplay: Vertical display size
 * @vsync_start: Vertical sync start
 * @vsync_end: Vertical sync end
 * @vtotal: Vertical total size
 * @flags: Bits 0-13 are the same as in the RandR protocol and also what DRM uses.
 *         The deprecated bits are reused for internal protocol flags leaving us
 *         free to follow DRM for the other bits in the future.
 *         - FLAG_PREFERRED: Set on the preferred display mode.
 */

struct gud_display_mode_req {
 __le32 clock;
 __le16 hdisplay;
 __le16 hsync_start;
 __le16 hsync_end;
 __le16 htotal;
 __le16 vdisplay;
 __le16 vsync_start;
 __le16 vsync_end;
 __le16 vtotal;
 __le32 flags;
#define GUD_DISPLAY_MODE_FLAG_PHSYNC  BIT(0)
#define GUD_DISPLAY_MODE_FLAG_NHSYNC  BIT(1)
#define GUD_DISPLAY_MODE_FLAG_PVSYNC  BIT(2)
#define GUD_DISPLAY_MODE_FLAG_NVSYNC  BIT(3)
#define GUD_DISPLAY_MODE_FLAG_INTERLACE  BIT(4)
#define GUD_DISPLAY_MODE_FLAG_DBLSCAN  BIT(5)
#define GUD_DISPLAY_MODE_FLAG_CSYNC  BIT(6)
#define GUD_DISPLAY_MODE_FLAG_PCSYNC  BIT(7)
#define GUD_DISPLAY_MODE_FLAG_NCSYNC  BIT(8)
#define GUD_DISPLAY_MODE_FLAG_HSKEW  BIT(9)
/* BCast and PixelMultiplex are deprecated */
#define GUD_DISPLAY_MODE_FLAG_DBLCLK  BIT(12)
#define GUD_DISPLAY_MODE_FLAG_CLKDIV2  BIT(13)
#define GUD_DISPLAY_MODE_FLAG_USER_MASK  \
  (GUD_DISPLAY_MODE_FLAG_PHSYNC | GUD_DISPLAY_MODE_FLAG_NHSYNC | \
  GUD_DISPLAY_MODE_FLAG_PVSYNC | GUD_DISPLAY_MODE_FLAG_NVSYNC | \
  GUD_DISPLAY_MODE_FLAG_INTERLACE | GUD_DISPLAY_MODE_FLAG_DBLSCAN | \
  GUD_DISPLAY_MODE_FLAG_CSYNC | GUD_DISPLAY_MODE_FLAG_PCSYNC | \
  GUD_DISPLAY_MODE_FLAG_NCSYNC | GUD_DISPLAY_MODE_FLAG_HSKEW | \
  GUD_DISPLAY_MODE_FLAG_DBLCLK | GUD_DISPLAY_MODE_FLAG_CLKDIV2)
/* Internal protocol flags */
#define GUD_DISPLAY_MODE_FLAG_PREFERRED  BIT(10)
} __packed;

/*
 * struct gud_connector_descriptor_req - Connector descriptor
 * @connector_type: Connector type (GUD_CONNECTOR_TYPE_*).
 *                  If the host doesn't support the type it should fall back to PANEL.
 * @flags: Flags
 *         - POLL_STATUS: Connector status can change (polled every 10 seconds)
 *         - INTERLACE: Interlaced modes are supported
 *         - DOUBLESCAN: Doublescan modes are supported
 */

struct gud_connector_descriptor_req {
 __u8 connector_type;
#define GUD_CONNECTOR_TYPE_PANEL  0
#define GUD_CONNECTOR_TYPE_VGA   1
#define GUD_CONNECTOR_TYPE_COMPOSITE  2
#define GUD_CONNECTOR_TYPE_SVIDEO  3
#define GUD_CONNECTOR_TYPE_COMPONENT  4
#define GUD_CONNECTOR_TYPE_DVI   5
#define GUD_CONNECTOR_TYPE_DISPLAYPORT  6
#define GUD_CONNECTOR_TYPE_HDMI   7
 __le32 flags;
#define GUD_CONNECTOR_FLAGS_POLL_STATUS  BIT(0)
#define GUD_CONNECTOR_FLAGS_INTERLACE  BIT(1)
#define GUD_CONNECTOR_FLAGS_DOUBLESCAN  BIT(2)
} __packed;

/*
 * struct gud_set_buffer_req - Set buffer transfer info
 * @x: X position of rectangle
 * @y: Y position
 * @width: Pixel width of rectangle
 * @height: Pixel height
 * @length: Buffer length in bytes
 * @compression: Transfer compression
 * @compressed_length: Compressed buffer length
 *
 * This request is issued right before the bulk transfer.
 * @x, @y, @width and @height specifies the rectangle where the buffer should be
 * placed inside the framebuffer.
 */

struct gud_set_buffer_req {
 __le32 x;
 __le32 y;
 __le32 width;
 __le32 height;
 __le32 length;
 __u8 compression;
 __le32 compressed_length;
} __packed;

/*
 * struct gud_state_req - Display state
 * @mode: Display mode
 * @format: Pixel format GUD_PIXEL_FORMAT_*
 * @connector: Connector index
 * @properties: Array of properties
 *
 * The entire state is transferred each time there's a change.
 */

struct gud_state_req {
 struct gud_display_mode_req mode;
 __u8 format;
 __u8 connector;
 struct gud_property_req properties[];
} __packed;

/* List of supported connector properties: */

/* Margins in pixels to deal with overscan, range 0-100 */
#define GUD_PROPERTY_TV_LEFT_MARGIN   1
#define GUD_PROPERTY_TV_RIGHT_MARGIN   2
#define GUD_PROPERTY_TV_TOP_MARGIN   3
#define GUD_PROPERTY_TV_BOTTOM_MARGIN   4
#define GUD_PROPERTY_TV_MODE    5
/* Brightness in percent, range 0-100 */
#define GUD_PROPERTY_TV_BRIGHTNESS   6
/* Contrast in percent, range 0-100 */
#define GUD_PROPERTY_TV_CONTRAST   7
/* Flicker reduction in percent, range 0-100 */
#define GUD_PROPERTY_TV_FLICKER_REDUCTION  8
/* Overscan in percent, range 0-100 */
#define GUD_PROPERTY_TV_OVERSCAN   9
/* Saturation in percent, range 0-100 */
#define GUD_PROPERTY_TV_SATURATION   10
/* Hue in percent, range 0-100 */
#define GUD_PROPERTY_TV_HUE    11

/*
 * Backlight brightness is in the range 0-100 inclusive. The value represents the human perceptual
 * brightness and not a linear PWM value. 0 is minimum brightness which should not turn the
 * backlight completely off. The DPMS connector property should be used to control power which will
 * trigger a GUD_REQ_SET_DISPLAY_ENABLE request.
 *
 * This does not map to a DRM property, it is used with the backlight device.
 */

#define GUD_PROPERTY_BACKLIGHT_BRIGHTNESS  12

/* List of supported properties that are not connector propeties: */

/*
 * Plane rotation. Should return the supported bitmask on
 * GUD_REQ_GET_PROPERTIES. GUD_ROTATION_0 is mandatory.
 *
 * Note: This is not display rotation so 90/270 will need scaling to make it fit (unless squared).
 */

#define GUD_PROPERTY_ROTATION    50
  #define GUD_ROTATION_0   BIT(0)
  #define GUD_ROTATION_90   BIT(1)
  #define GUD_ROTATION_180   BIT(2)
  #define GUD_ROTATION_270   BIT(3)
  #define GUD_ROTATION_REFLECT_X  BIT(4)
  #define GUD_ROTATION_REFLECT_Y  BIT(5)
  #define GUD_ROTATION_MASK   (GUD_ROTATION_0 | GUD_ROTATION_90 | \
      GUD_ROTATION_180 | GUD_ROTATION_270 | \
      GUD_ROTATION_REFLECT_X | GUD_ROTATION_REFLECT_Y)

/* USB Control requests: */

/* Get status from the last GET/SET control request. Value is u8. */
#define GUD_REQ_GET_STATUS    0x00
  /* Status values: */
  #define GUD_STATUS_OK    0x00
  #define GUD_STATUS_BUSY   0x01
  #define GUD_STATUS_REQUEST_NOT_SUPPORTED 0x02
  #define GUD_STATUS_PROTOCOL_ERROR  0x03
  #define GUD_STATUS_INVALID_PARAMETER  0x04
  #define GUD_STATUS_ERROR   0x05

/* Get display descriptor as a &gud_display_descriptor_req */
#define GUD_REQ_GET_DESCRIPTOR    0x01

/* Get supported pixel formats as a byte array of GUD_PIXEL_FORMAT_* */
#define GUD_REQ_GET_FORMATS    0x40
  #define GUD_FORMATS_MAX_NUM   32
  #define GUD_PIXEL_FORMAT_R1   0x01 /* 1-bit monochrome */
  #define GUD_PIXEL_FORMAT_R8   0x08 /* 8-bit greyscale */
  #define GUD_PIXEL_FORMAT_XRGB1111  0x20
  #define GUD_PIXEL_FORMAT_RGB332  0x30
  #define GUD_PIXEL_FORMAT_RGB565  0x40
  #define GUD_PIXEL_FORMAT_RGB888  0x50
  #define GUD_PIXEL_FORMAT_XRGB8888  0x80
  #define GUD_PIXEL_FORMAT_ARGB8888  0x81

/*
 * Get supported properties that are not connector propeties as a &gud_property_req array.
 * gud_property_req.val often contains the initial value for the property.
 */

#define GUD_REQ_GET_PROPERTIES    0x41
  #define GUD_PROPERTIES_MAX_NUM  32

/* Connector requests have the connector index passed in the wValue field */

/* Get connector descriptors as an array of &gud_connector_descriptor_req */
#define GUD_REQ_GET_CONNECTORS    0x50
  #define GUD_CONNECTORS_MAX_NUM  32

/*
 * Get properties supported by the connector as a &gud_property_req array.
 * gud_property_req.val often contains the initial value for the property.
 */

#define GUD_REQ_GET_CONNECTOR_PROPERTIES  0x51
  #define GUD_CONNECTOR_PROPERTIES_MAX_NUM 32

/*
 * Issued when there's a TV_MODE property present.
 * Gets an array of the supported TV_MODE names each entry of length
 * GUD_CONNECTOR_TV_MODE_NAME_LEN. Names must be NUL-terminated.
 */

#define GUD_REQ_GET_CONNECTOR_TV_MODE_VALUES  0x52
  #define GUD_CONNECTOR_TV_MODE_NAME_LEN 16
  #define GUD_CONNECTOR_TV_MODE_MAX_NUM  16

/* When userspace checks connector status, this is issued first, not used for poll requests. */
#define GUD_REQ_SET_CONNECTOR_FORCE_DETECT  0x53

/*
 * Get connector status. Value is u8.
 *
 * Userspace will get a HOTPLUG uevent if one of the following is true:
 * - Connection status has changed since last
 * - CHANGED is set
 */

#define GUD_REQ_GET_CONNECTOR_STATUS   0x54
  #define GUD_CONNECTOR_STATUS_DISCONNECTED 0x00
  #define GUD_CONNECTOR_STATUS_CONNECTED 0x01
  #define GUD_CONNECTOR_STATUS_UNKNOWN  0x02
  #define GUD_CONNECTOR_STATUS_CONNECTED_MASK 0x03
  #define GUD_CONNECTOR_STATUS_CHANGED  BIT(7)

/*
 * Display modes can be fetched as either EDID data or an array of &gud_display_mode_req.
 *
 * If GUD_REQ_GET_CONNECTOR_MODES returns zero, EDID is used to create display modes.
 * If both display modes and EDID are returned, EDID is just passed on to userspace
 * in the EDID connector property.
 */


/* Get &gud_display_mode_req array of supported display modes */
#define GUD_REQ_GET_CONNECTOR_MODES   0x55
  #define GUD_CONNECTOR_MAX_NUM_MODES  128

/* Get Extended Display Identification Data */
#define GUD_REQ_GET_CONNECTOR_EDID   0x56
  #define GUD_CONNECTOR_MAX_EDID_LEN  2048

/* Set buffer properties before bulk transfer as &gud_set_buffer_req */
#define GUD_REQ_SET_BUFFER    0x60

/* Check display configuration as &gud_state_req */
#define GUD_REQ_SET_STATE_CHECK    0x61

/* Apply the previous STATE_CHECK configuration */
#define GUD_REQ_SET_STATE_COMMIT   0x62

/* Enable/disable the display controller, value is u8: 0/1 */
#define GUD_REQ_SET_CONTROLLER_ENABLE   0x63

/* Enable/disable display/output (DPMS), value is u8: 0/1 */
#define GUD_REQ_SET_DISPLAY_ENABLE   0x64

#endif

Messung V0.5
C=88 H=100 G=94

¤ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.