123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- NV-CONTROL X Extension - API specificiation v 1.6
- 1. INTRODUCTION
- The NV-CONTROL X extension provides a mechanism for X clients to
- query and set configuration parameters of the NVIDIA X driver.
- State set by the NV-CONTROL X extension is assumed to be persistent
- only for the current server generation.
- Attributes are configurable on a per X screen basis, and some
- attributes are also configurable on a per display device basis.
- Addtionally, some attributes can only be queried, though most can
- be both queried and modified. The NV-CONTROL extension provides
- a mechanism to determine what values are valid for an attribute,
- if an attribute is read-only, if it can be read and written, if it
- requires a display device qualifier, and if the the attribute is
- available on the specified X screen.
- Finally, NV-CONTROL clients may also request to be notified when an
- attribute is changed by any other NV-CONTROL client.
- 2. DISPLAY DEVICES
- A "Display Device" refers to some piece of hardware capable of
- displaying an image. Display devices are separated into the three
- general categories: analog CRTs, digital flatpanels, and TVs.
- Note that analog flatpanels fall under the category of analog CRTs.
- The NVIDIA X driver allows multiple display devices to display
- portions of the same X screen; this is configured through the
- TwinView feature of the NVIDIA X driver. TwinView is described in
- the Appendix on TwinView in the NVIDIA Linux driver text README file.
- A consequence of TwinView is that an X screen does not necessarily
- uniquely identify a display device.
- While most attributes controlled by the NV-CONTROL X extension
- apply to an entire X screen, some attributes can be controlled per
- display device. When querying and assigning such attributes, the
- particular display device is specified via a display device mask.
- A "display device mask" is an unsigned 32 bit value that identifies
- one or more display devices: the first 8 bits each identify a CRT, the
- next 8 bits each identify a TV, and the next 8 each identify a DFP.
- For example, 0x1 refers to CRT-0, 0x3 refers to CRT-0 and CRT-1,
- 0x10001 refers to CRT-0 and DFP-0, etc.
- 3. QUERYING THE EXTENSION
- NV-CONTROL clients can query for the existence of the NV-CONTROL X
- extension with:
- Bool XNVCTRLQueryExtension (Display *dpy,
- int *event_basep, int *error_basep);
- This function returns True if the extension exists, and returns False
- if the extension does not. It also returns the error and event bases.
- The arguments are:
- dpy - The connection to the X server.
- event_basep - The returned event base. Currently, only one
- extension specific event is defined.
- error_basep - The returned error base. Currently, no extension
- specific errors are defined.
- The version of the NV-CONTROL extension can be queried with:
- Bool XNVCTRLQueryVersion (Display *dpy, int *major, int *minor);
- This function returns True if the extension exists, and returns
- False if it does not. It also returns the major and minor version
- numbers of the extension. The arguments are:
- dpy - The connection to the X server.
- major - The returned major version number of the extension.
- minor - The returned minor version number of the extension.
- You can determine if a particular X screen is controlled by the
- NVIDIA X driver (and thus supports the NV-CONTROL X extension) with:
- Bool XNVCTRLIsNvScreen (Display *dpy, int screen);
- This function returns True if the specified screen is controlled by
- the NVIDIA driver, and thus supports the NV-CONTROL X extension.
- It returns False if the specified screen does not support the
- NV-CONTROL X extension. The arguments are:
- dpy - The connection to the X server.
- screen - the X screen to query.
- 4. QUERYING VALID ATTRIBUTE VALUES
- NV-CONTROL clients can query the valid values for any integer
- attribute with:
- Bool XNVCTRLQueryValidAttributeValues (Display *dpy,
- int screen,
- unsigned int display_mask,
- unsigned int attribute,
- NVCTRLAttributeValidValuesRec
- *values);
- This function returns True if the attribute exists on the specified
- X screen, or False if the attribute is not available on the specified
- X screen.
- The arguments are:
- dpy - The connection to the X server.
- screen - the X screen to query.
- display_mask - for attributes that can be controlled on a per
- display device basis, the display_mask should
- uniquely identify a single display device.
- This argument is ignored for attributes that
- apply to the entire X screen.
- attribute - the integer attribute to query
- values - the returned NVCTRLAttributeValidValuesRec structure.
- The NVCTRLAttributeValidValuesRec structure is defined as:
- typedef struct _NVCTRLAttributeValidValues {
- int type;
- union {
- struct {
- int min;
- int max;
- } range;
- struct {
- unsigned int ints;
- } bits;
- } u;
- unsigned int permissions;
- } NVCTRLAttributeValidValuesRec;
- Where type can be one of:
- #define ATTRIBUTE_TYPE_UNKNOWN 0
- #define ATTRIBUTE_TYPE_INTEGER 1
- #define ATTRIBUTE_TYPE_BITMASK 2
- #define ATTRIBUTE_TYPE_BOOL 3
- #define ATTRIBUTE_TYPE_RANGE 4
- #define ATTRIBUTE_TYPE_INT_BITS 5
- ATTRIBUTE_TYPE_INTEGER indicates that the attribute is an integer
- value; any integer may be specified when setting this attribute.
- ATTRIBUTE_TYPE_BITMASK indicates that the attribute is an integer
- value, interpretted as a bitmask. This is the type, for example,
- of the NV_CTRL_CONNECTED_DISPLAYS attribute.
- ATTRIBUTE_TYPE_BOOL indicates that the attribute is a boolean;
- valid values are 1 (on/true) and 0 (off/false).
- ATTRIBUTE_TYPE_RANGE indicates that the attribute can have any
- integer value between NVCTRLAttributeValidValues.u.range.min and
- NVCTRLAttributeValidValues.u.range.max (inclusive).
- ATTRIBUTE_TYPE_INT_BITS indicates that the attribute can
- only have certain integer values, indicated by which bits in
- NVCTRLAttributeValidValues.u.bits.ints are on (for example: if bit
- 0 is on, then 0 is a valid value; if bit 5 is on, then 5 is a valid
- value, etc). This is the type, for example, of NV_CTRL_FSAA_MODE.
- The permissions field in NVCTRLAttributeValidValuesRec is a bitmask
- that can contain any of:
- #define ATTRIBUTE_TYPE_READ 0x1
- #define ATTRIBUTE_TYPE_WRITE 0x2
- #define ATTRIBUTE_TYPE_DISPLAY 0x4
- ATTRIBUTE_TYPE_READ indicates that the attribute is readable; in
- general, all attributes will be readable.
- ATTRIBUTE_TYPE_WRITE indicates that the attribute is writable;
- attributes may not be writable for various reasons: they represent
- static system information, they can only be changed by changing an
- XF86Config option, etc.
- ATTRIBUTE_TYPE_DISPLAY indicates that the attribute can be
- controlled on a per display device basis, and thus
- XNVCTRLQueryAttribute() and XNVCTRLSetAttribute() require that a
- display device be specified.
- The XNVCTRLQueryValidAttributeValues() function can cause the
- following X protocol errors:
- BadValue - The screen does not exist.
- BadMatch - The NVIDIA driver is not present on that screen.
- 5. QUERYING ATTRIBUTE VALUES
- NV-CONTROL clients can query the current value of an integer
- attribute with:
- Bool XNVCTRLQueryAttribute (Display *dpy,
- int screen,
- unsigned int display_mask,
- unsigned int attribute,
- int *value);
- This function returns True if the attribute exists, and stores the
- current attribute value in the memory pointed to by the value
- argument. False is returned if the attribute does not exist on the
- specified X screen.
- The arguments are:
- dpy - The connection to the X server.
- screen - the X screen to query.
- display_mask - if the attribute requires a display device,
- then this indicates the display device to query;
- this field is ignored if the attribute is not
- display device specific. You can determine
- if an attribute is display device specific by
- querying the valid values and checking for the
- ATTRIBUTE_TYPE_DISPLAY bit in the permissions
- field.
- attribute - the attribute to query.
- value - the returned attribute value.
-
- This function can cause the following X protocol errors:
- BadValue - The screen does not exist.
- BadMatch - The NVIDIA driver is not present on that screen.
- NV-CONTROL clients can query the read-only string attributes with:
- Bool XNVCTRLQueryStringAttribute (Display *dpy,
- int screen,
- unsigned int display_mask,
- unsigned int attribute,
- char **ptr);
- This function returns True if the string attribute exists;
- or it returns False if the string attribute does not exist. If
- XNVCTRLQueryStringAttribute returns True, *ptr will point to an
- allocated string containing the string attribute requested. It is
- the caller's responsibility to free the string with XFree().
- The arguments are:
- dpy - The connection to the X server.
- screen - the X screen to query.
- display_mask - if the attribute requires a display device,
- then this indicates the display device to query;
- this field is ignored if the attribute is not
- display device specific.
- attribute - the string attribute to query
- ptr - the returned allocated string
- This function can cause the following X protocol errors:
- BadValue - The screen does not exist.
- BadMatch - The NVIDIA driver is not present on that screen.
- BadAlloc - Insufficient resources to fulfill the request.
-
- See NVCtrl.h (distributed in the src/libXNVCtrl/ directory of
- the nvidia-settings source package) for a list of possible string
- attributes.
- 6. ASSIGNING ATTRIBUTE VALUES
- An integer attribute can be assigned a value with:
- void XNVCTRLSetAttribute (Display *dpy,
- int screen,
- unsigned int display_mask,
- unsigned int attribute,
- int value);
- This function sets the attribute to the given value. This function
- does not have a return value. Note that, because it does not
- return a value, XNVCTRLSetAttribute() only queues the request in
- the X command stream. The command will not actually be sent to
- the server until an X command that flushes the X command stream
- (such as XFlush(), or any API command that queries a value from the
- server) is called.
- The arguments are:
- dpy - The connection to the X server.
- screen - the X screen to query.
- display_mask - if the attribute requires a display device,
- then this indicates the display device to set;
- this field is ignored if the attribute is not
- display device specific. You can determine
- if an attribute is display device specific by
- querying the valid values and checking for the
- ATTRIBUTE_TYPE_DISPLAY bit in the permissions
- field.
- attribute - the attribute to set.
- value - the value the attribute should be set to.
- See NVCtrl.h (distributed in the src/libXNVCtrl/ directory of
- the nvidia-settings source package) for a list of possible integer
- attributes.
- This function can cause the following X protocol errors:
- BadMatch - The NVIDIA driver is not present on that screen.
- BadValue - The screen does not exist, or an invalid value is
- specified, or the attribute does not exist on the
- specified X screen, or the attribute requires a
- display device and display_mask does not uniquely
- identify a display device.
- Before calling XNVCTRLSetAttribute(), an NV-CONTROL client should
- use XNVCTRLQueryAttribute() or XNVCTRLQueryValidAttributeValues()
- to determine if the attribute exists on the specified X screen;
- if the attribute does not exist and XNVCTRLSetAttribute()
- is called for that attribute, then a BadValue X protocol error will
- be triggered.
- 7. SELECTING EVENT NOTIFICATION
- NV-CONTROL clients can enable NV-CONTROL events with:
- Bool XNVCtrlSelectNotify (Display *dpy,
- int screen,
- int type,
- Bool onoff);
- This function returns True if the extension exists, or False if the
- extension does not exist. The arguments are:
- dpy - The connection to the X server.
- screen - the X screen on which to enable events.
- type - the type of event to enable; currently, the only NV-CONTROL
- event type is ATTRIBUTE_CHANGED_EVENT.
- onoff - whether to enable (True) or disable (False) receiving
- this event type.
- This function can cause the following X protocol errors:
- BadValue - The screen does not exist.
- BadMatch - The NVIDIA driver is not present on that screen.
- When an NV-CONTROL client changes an integer attribute value, all
- other NV-CONTROL clients with ATTRIBUTE_CHANGED_EVENT notificaion
- enabled will receive an XEvent where XEvent.type is equal to:
- event_base + ATTRIBUTE_CHANGED_EVENT
- where event_base is the event base returned by
- XNVCTRLQueryExtension(). The XEvent can then be cast as an
- XNVCtrlAttributeChangedEvent structure:
- typedef struct {
- int type;
- unsigned long serial;
- Bool send_event; /* always FALSE, we don't allow send_events */
- Display *display;
- Time time;
- int screen;
- unsigned int display_mask;
- unsigned int attribute;
- int value;
- } XNVCtrlAttributeChangedEvent;
- The screen, display_mask, attribute, and value fields correspond to
- the arguments passed to XNVCTRLSetAttribute().
- 8. NV-CONTROL EXTENSION HISTORY
- 1.0 - 1.5 NVIDIA Internal development versions
- 1.6 Initial public version
|