Frame Buffer Power Management extension to Xorg

Jay Cotton Jay.Cotton at Sun.COM
Fri Dec 23 14:48:46 PST 2005


Hi All:

I'm initiating a discussion on FBPM here to get some ideas from others.
This message was also sent to xwin-discus at opensolaris.org, but its not
cross posted.


What exists today:

Sun has a FBPM extension to Xsun that allows the server to assert power level
control on the frame buffers of Sparc workstation systems.  The design requires
that the CPU, memory, Disk, and Graphic board be power controlled separately.

On workstations where the Graphics board consumes half of the power of the
system, and users want to keep the workstation up for remote login etc.  It's
desirable to provide sectioned power control.

Problem:

0.  EPA in the form of EStar is mandating lower power for workstations to the
tune of about 5 watts at idle.

1.  The new X86/X64 based systems with top end video boards can consume
a lot of power.  In excess of 150 watts for the graphics engine.

2.  Its desirable to have "fine" grain control of power usage on the desktop
system.

Solution set:

1. Sun has a FBPM extension for Sparc graphics boards.  Port the same to
Xorg and be done with it.

2.  Implement a clean solution for the problem.
	a.  The Current Sun FBPM code depends on DPMS timers and is linked
	with the DPMS code in Xsun.  This may not be the best way to do this.
	b.  Would/Does it make sense to modify DPMS to include a frame buffer
	switch.


Details:

Here are the client library functions that support FBPM on Sparc.

Bool FBPMQueryExtension (dpy, event_basep, error_basep)
Status FBPMGetVersion(dpy, major_versionp, minor_versionp)
Bool FBPMCapable(dpy)
Bool FBPMEnable(dpy,state)
Status FBPMDisable(dpy)
Status FBPMForceLevel(dpy, level)
Status FBPMInfo(dpy, state, onoff)

These have DPMS analogs in the library.  The question is, should we modify DPMS
to subsume these functions and spin up the client library rev. for DPMS to 1.2?

DPMSQueryExtension (Display *dpy, int *event_basep, int *error_basep)
DPMSGetVersion(Display *dpy, int *major_versionp, int *minor_versionp)
DPMSCapable(Display *dpy)
DPMSSetTimeouts(Display *dpy, CARD16 standby, CARD16 suspend, CARD16 off)
DPMSGetTimeouts(Display *dpy, CARD16 *standby, CARD16 *suspend, CARD16 *off)
DPMSEnable(Display *dpy)
DPMSDisable(Display *dpy)
DPMSForceLevel(Display *dpy, CARD16 level)
DPMSInfo(Display *dpy, CARD16 *power_level, BOOL *state)

These are the DPMS library functions.

DPMSEnable(Display *dpy, CARD16 subsection)
DPMSDisable(Display *dpy, CARD16 subsection)

	Where subsection might be:  0 for display, 1 for graphcis board, and 2 for both.

And so on.  The other way is to just do the library as it exists and not make any
changes to DPMS.
-- 
	 Jay Cotton 		     Jay.Cotton at sun.com
	 MPK17-2348    x80841
	 Sun Microsystems Inc. - X11 Server Group
	 Operating Platform Group
	
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NOTICE: This email message is for the sole use of the intended
recipient(s) and may contain confidential and privileged information.
Any unauthorized review, use, disclosure or distribution is prohibited.
If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~





More information about the xorg-arch mailing list