Edward Shu wrote:
>
>  I think there are two concepts to be clarified, VGA text console
> and VESA text console.  VGA text console is the legacy way.
> In this proposal, you may mean the VESA text console when
> text console is mentioned, that emulates the text output with
> the VESA graphics mode.  As VESA is a generic graphics
> standard with few hardware specific acceleration,  the text
> rendering speed will be much slower causing flicking screen.
> I recommend to reserve some open interfaces for third-party to
> fully accelerating the text rendering  under VESA text mode.
>  Other comments in lines below.

I agree with this.. specifically I can see that *scrolling* can be slow 
if not accelerated.   I doubt just adding characters to the screen would 
be a problem, though.

NetBSD's graphics console has a nice way of expressing bitblt support... 
perhaps something similar can be used here.

    - Garrett
>
>>   2.5) Resetting frame buffer state on fast reboot
>>
>>    Since the boot loader does not run during fast reboot, the kernel
>>    needs to ensure that the graphics card is in a sane state. This is
>>    achieved by setting the appropriate mode early on while the system
>>    can still make BIOS calls.
> I am not sure you can find a right place to make the BIOS calls, because
> fast boot will be out of  the real mode  very early.
>
>>
>>   2.6) Resetting frame buffer state on suspend/resume
>>
>>   Since userland must be running for vbiosd to reset the mode, the
>>   mode can not be reset directly as part of the resume entries. Rather
>>   another thread in the daemon, is invoked that is pause()d with a 
>> SIGTHAW
>>   handler that will send a KD_RESUME ioctl to the console device when
>>   invoked, which in turn invokes the vbiosd door thread to set the 
>> proper
>>   VESA mode.
> We actually have a srn driver to communicate with the X server to do  
> suspend/resume.
> The srn driver protocol can be enhanced for vbiosd to act likely.
>
>>
>> 3) Interfaces
>>
>>  3.1) Committed interfaces
>>
>>   The possible states of the console property:
>>
>>         text            text output in either VGA text mode or VESA
>>                         graphics mode depending on the mode set by
>>                         the booter or system capabilities.
>>
>>         force-text      text output in VGA text mode regardless of the
>>                         mode set by the booter
>>
>>         graphics        if the booter sets a VESA graphics mode, the
>>                         graphical boot images are loaded and displayed
>>                         if not the system will default to text output
>>                         in VGA text mode
>>
>>         ttya/ttyb       serial output (not impacted by this work)
>>
>>     In case of error the system will fall back to VGA text mode, but
>>     the value of the console property is not re-written.
>>
>>     force-text exists to allow for continued compatibility with
>>     external screen readers and the like.
>>
>>   Console terminal sizing properties:
>>
>>     screen-#columns
>>     screen-#rows
>>
>>
>>   Additional Solaris VISUAL I/O control operation, commited in line
>>   with the previous vis_ interfaces which were made stable in
>>   PSARC/2003/432:
>>
>>   VIS_CONSCLEAR this ioctl() takes a struct vis_consclear which
>>   defines the background color to be used to clear the screen.
>>
>>     struct vis_consclear {
>>             unsigned char   bg_color; /* Background color */
>>     };
>>
>>  3.2) Project private interfaces
>>
>>   The following previously defined members of the multiboot_info
>>   structure are now used to pass pointers to structures describing
>>   the VESA implementation of the system. While they are derived
>>   from an external standard, their use here is project private:
>>
>>         unsigned long vbe_control_info;
>>         unsigned long vbe_mode_info;
>>         unsigned short vbe_mode;
>>         unsigned short vbe_interface_seg;
>>         unsigned short vbe_interface_off;
>>         unsigned short vbe_interface_len;
>>
>>     They point to the following structures which are defined by the
>>     VESA spec:
>>
>>         struct VbeInfoBlock {
>>                 uint8_t         VbeSignature[4];
>>                 uint16_t        VbeVersion;
>>                 uint32_t        OemStringPtr;
>>                 uint32_t        Capabilities;
>>                 uint32_t        ModeListPtr;
>>                 uint16_t        TotalMemory;
>>                 uint16_t        OemSoftwareRev;
>>                 uint32_t        OemVendorNamePtr;
>>                 uint32_t        OemProductNamePtr;
>>                 uint32_t        OemProductRevPtr;
>>                 uint8_t         Reserved[222];
>>                 uint8_t         OemData[256];
>>         } __attribute__((packed));
>>
>>         struct ModeInfoBlock {
>>                 uint16_t        ModeAttributes;
>>                 uint8_t         WinAAttributes;
>>                 uint8_t         WinBAttributes;
>>                 uint16_t        WinGranularity;
>>                 uint16_t        WinSize;
>>                 uint16_t        WinASegment;
>>                 uint16_t        WinBSegment;
>>                 uint32_t        WinFuncPtr;
>>                 uint16_t        BytesPerScanLine;
>>
>>                 /* >= 1.2 */
>>                 uint16_t        XResolution;
>>                 uint16_t        YResolution;
>>                 uint8_t         XCharSize;
>>                 uint8_t         YCharSize;
>>                 uint8_t         NumberOfPlanes;
>>                 uint8_t         BitsPerPixel;
>>                 uint8_t         NumberOfBanks;
>>                 uint8_t         MemoryModel;
>>                 uint8_t         BankSize;
>>                 uint8_t         NumberOfImagePages;
>>                 uint8_t         Reserved1;
>>
>>                 /* direct color */
>>                 uint8_t         RedMaskSize;
>>                 uint8_t         RedFieldPosition;
>>                 uint8_t         GreenMaskSize;
>>                 uint8_t         GreenFieldPosition;
>>                 uint8_t         BlueMaskSize;
>>                 uint8_t         BlueFieldPosition;
>>                 uint8_t         RsvdMaskSize;
>>                 uint8_t         RsvdFieldPosition;
>>                 uint8_t         DirectColorModeInfo;
>>
>>                 /* >= 2.0 */
>>                 uint32_t        PhysBasePtr;
>>                 uint8_t         Reserved2[6];
>>
>>                 /* >= 3.0 */
>>                 uint16_t        LinBytesPerScanLine;
>>                 uint8_t         BnkNumberOfImagePages;
>>                 uint8_t         LinNumberOfImagePages;
>>                 uint8_t         LinRedMaskSize;
>>                 uint8_t         LinRedFieldPosition;
>>                 uint8_t         LinGreenMaskSize;
>>                 uint8_t         LinGreenFieldPosition;
>>                 uint8_t         LinBlueMaskSize;
>>                 uint8_t         LinBlueFieldPosition;
>>                 uint8_t         LinRsvdMaskSize;
>>                 uint8_t         LinRsvdFieldPosition;
>>                 uint32_t        MaxPixelClock;
>>                 uint8_t         Reserved3[189];
>>         } __attribute__((packed));
>>
>>
>>  3.3) Uncommitted interfaces
>>
>>   Service fmri and binary for the daemon. The service does
>>   not currently expose any properties.
>>
>>         vbiosd: svc:/system/vbios
>>
>>     usr/sbin/vbiosd
>>
>>
>> 4) Man page diffs
>>
>>    visual_io(7I)
>>
>> 498a499,514
>> > >      VIS_CONSCLEAR   Clear the screen. The driver is  expected to
>> > >                      paint the whole  screen  with the background
>> > >                      color   specified   in   the   vis_consclear
>> > >                      structure.
>> > >
>> > >      The argument is a pointer to  a   vis_consclear    structure
>> > >      which contains the following fields:
>> > >
>> > >      struct vis_consclear {
>> > >        unsigned char    bg_color;
>> > >      };
>> > >
>> > >      bg_color  specifies the background color to be used to paint
>> > >      the screen. Only driver that set mode to VIS_PIXEL with  the
>> > >      VIS_DEVINIT ioctl are expected to have to handle this ioctl.
>> > >
>>
>>    eeprom(1m)
>>
>> 109,116c109,120
>> <          ttyb, and text. In text mode, console output goes to the
>> <          frame buffer and input comes  from  the  keyboard.  When
>> <          this  property  is not present, the console device falls
>> <          back  to  the  device  specified  by  input-device   and
>> <          output-device.  When neither the console property or the
>> <          input-device  and  output-device   property   pair   are
>> <          present,  the  console  defaults to the frame buffer and
>> <          keyboard.
>> ---
>> > >          ttyb, text, graphics and force-text. In text mode, console
>> > >          output goes to the frame buffer and input comes from the
>> > >          keyboard. A variant of text mode, graphics displays an 
>> image
>> > >          with an animation until either a key is pressed or console
>> > >          interaction is required by console login, sulogin, or 
>> kmdb. A
>> > >          further variant of text, force-text will avoid using a VGA
>> > >          adapter as a bitmapped device setting it to VGA text mode.
>> > >          When this property is not present, the console device falls
>> > >          back to the device specified by input-device and
>> > >          output-device. When neither the console property or the
>> > >          input-device and output-device property pair are 
>> present, the
>> > >          console defaults to the frame buffer and keyboard.
>> 117a122
>> > >      screen-#columns screen-#rows
>> 118a124,129
>> > >          When screen is set to either graphics or text on a 
>> bitmapped
>> > >          device, screen-#columns and screen-#rows allow the desired
>> > >          number columns and rows of text to be specified. They 
>> default
>> > >          to 80 and 24 respectively.
>> > >
>>
>> 5) References
>>
>>    VESA BIOS EXTENSION (VBE) Core Functions Standard Version: 3.0
>>     Please contact the project team for a pointer to a copy.
>>
>>    pnglite OSR
>>     
>> https://opensourcereview.central.sun.com/app?action=ViewReq&traq_num=12682 
>>
>>
>>    uvesafb::v86d OSR
>>     
>> https://opensourcereview.central.sun.com/app?action=ViewReq&traq_num=12387 
>>
>>
>>
>>
>
>

Reply via email to