Hi All:

I'm initiating a discussion on FBPM here to get some ideas from others.

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
        



Reply via email to