visual_io(4i) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

visual_io(4i)

visual_io(4I)     Ioctls for a class of drivers or subsystems    visual_io(4I)

NAME
       visual_io - Oracle Solaris VISUAL I/O control operations

SYNOPSIS
       #include <sys/visual_io.h>

DESCRIPTION
       The Oracle Solaris VISUAL environment defines a small set of ioctls for
       controlling graphics and imaging devices.


       The VIS_GETIDENTIFIER ioctl is mandatory and must be implemented in de‐
       vice drivers for graphics devices using the Oracle Solaris VISUAL envi‐
       ronment.  The  VIS_GETIDENTIFIER  ioctl  is  defined to return a device
       identifier from the device driver. This identifier must be a  uniquely-
       defined string.


       There  are  two  additional sets of ioctls. One supports mouse tracking
       via hardware cursor operations. Use of this set is  optional,  however,
       if  a  graphics device has hardware cursor support and implements these
       ioctls, the mouse tracking performance is improved. The  remaining  set
       supports  the  device  acting as the system console device. Use of this
       set is optional, but if a graphics device is to be used as  the  system
       console device, it must implement these ioctls.


       The  VISUAL  environment  also  defines  interfaces for non-ioctl entry
       points into the driver that the Oracle Solaris operating  system  calls
       when it is running in standalone mode (for example, when using a stand‐
       alone  debugger,  entering the PROM monitor, or when the system is pan‐
       icking). These are also known as Polled I/O entry points, which operate
       under an explicit set of restrictions, described below.

IOCTLS
       VIS_GETIDENTIFIER

           This ioctl() returns an identifier string to  uniquely  identify  a
           device  used  in  the  Oracle Solaris VISUAL environment. This is a
           mandatory ioctl and must return a unique string.  We  suggest  that
           the name be formed as <companysymbol><devicetype>.

           VIS_GETIDENTIFIER  takes  a vis_identifier structure as its parame‐
           ter. This structure has the form:

             #define VIS_MAXNAMELEN 128
             struct vis_identifier {
                    char name[VIS_MAXNAMELEN];
             };



       VIS_GETCURSOR
       VIS_SETCURSOR

           These ioctls fetch and set various  cursor  attributes,  using  the
           vis_cursor structure.




             struct vis_cursorpos {
                     short  x;        /* cursor x coordinate */
                     short  y;        /* cursor y coordinate */
             };

             struct vis_cursorcmap {
                    int     version;           /* version */
                    int     reserved;
                    unsigned char *red;  /* red color map elements */
                    unsigned char *green;/* green color map elements */
                    unsigned char *blue; /* blue color map elements */
             };

             #define VIS_CURSOR_SETCURSOR   0x01  /* set cursor */
             #define VIS_CURSOR_SETPOSITION 0x02  /* set cursor position */
             #define VIS_CURSOR_SETHOTSPOT  0x04  /* set cursor hot spot */
             #define VIS_CURSOR_SETCOLORMAP 0x08  /* set cursor colormap */
             #define VIS_CURSOR_SETSHAPE    0x10  /* set cursor shape */
             #define VIS_CURSOR_SETALL     \
                 (VIS_CURSOR_SETCURSOR | VIS_CURSOR_SETPOSITION | \
                 VIS_CURSOR_SETHOTSPOT | VIS_CURSOR_SETCOLORMAP | \
                 VIS_CURSOR_SETSHAPE)

             struct vis_cursor {
                 short set;                    /* what to set */
                 short enable;                 /* cursor on/off */
                 struct vis_cursorpos pos;     /* cursor position */
                 struct vis_cursorpos hot;     /* cursor hot spot */
                 struct vis_cursorcmap cmap;   /* color map info */
                 struct vis_cursorpos size;    /* cursor bitmap size */
                 char  *image;                 /* cursor image bits */
                 char  *mask;                  /* cursor mask bits */
             };

           The  vis_cursorcmap  structure  should contain pointers to two ele‐
           ments, specifying the red, green, and blue  values  for  foreground
           and background.



       VIS_SETCURSORPOS
       VIS_MOVECURSOR

           These  ioctls fetch and move the current cursor position, using the
           vis_cursorpos structure.



   Console Optional Ioctls
       The following ioctl sets are used by graphics drivers that are part  of
       the  system console device. All of the ioctls must be implemented to be
       a console device. In addition, if the system does not have  a  prom  or
       the  prom  goes away during boot, the special standalone ioctls (listed
       below) must also be implemented.


       The coordinate system for the console device places 0,0  at  the  upper
       left  corner  of  the device, with rows increasing toward the bottom of
       the device and columns increasing from left to right.

       VIS_PUTCMAP    Set or get color map entries.
       VIS_GETCMAP



       The argument is a pointer to a vis_cmap structure, which  contains  the
       following fields:

         struct vis_cmap {
             int  index;
             int  count;
             uchar_t   *red;
             uchar_t   *green;
             uchar_t   *blue;
         }



       index  is  the  starting index in the color map where you want to start
       setting or getting color map entries.


       count is the number of color map entries to set or get. It also is  the
       size of the red, green, and blue color arrays.


       *red, *green, and *blue are pointers to unsigned character arrays which
       contain the color map info to set or where the color map info is placed
       on a get.

       VIS_DEVINIT    Initializes the graphics driver as a console device.



       The argument is a pointer to a vis_devinit structure. The graphics dri‐
       ver  is expected to allocate any local state information needed to be a
       console device and fill in this structure.

         struct vis_devinit {
             int                    version;
             screen_size_t          width;
             screen_size_t          height;
             screen_size_t          linebytes;
             unit_t                 size;
             int                    depth;
             short                  mode;
             struct vis_polledio    *polledio;
             vis_modechg_cb_t       modechg_cb;
             struct vis_modechg_arg *modechg_arg;
         };



       version is  the  version  of  this  structure  and  should  be  set  to
       VIS_CONS_REV.


       width  and  height are the width and height of the device. If mode (see
       below) is VIS_TEXT then width and height are the number  of  characters
       wide and high of the device. If mode is VIS_PIXEL then width and height
       are the number of pixels wide and high of the device.


       linebytes is the number of bytes per line of the device.


       size is the total size of the device in pixels.


       depth  is  the  pixel  depth in device bits. Currently supported depths
       are: 1, 4, 8 and 24.


       mode is the mode of the device. Either VIS_PIXEL (data to be  displayed
       is in bitmap format) or VIS_TEXT (data to be displayed is in ascii for‐
       mat).


       polledio  is  used  to pass the address of the structure containing the
       standalone mode polled I/O entry points to the device  driver  back  to
       the terminal emulator. The vis_polledio interfaces are described in the
       Console  Standalone  Entry  Points section of this manpage. These entry
       points are where the operating system enters the driver when the system
       is running in standalone mode. These functions perform  identically  to
       the  VIS_CONSDISPLAY,  VIS_CONSCURSOR  and VIS_CONSCOPY ioctls, but are
       called directly by the Oracle Solaris operating system and must operate
       under a very strict set of assumptions.


       modechg_cb is a callback function passed from the terminal emulator  to
       the framebuffer driver which the frame-buffer driver must call whenever
       a  video mode change event occurs that changes the screen height, width
       or depth. The callback takes two  arguments,  an  opaque  handle,  mod‐
       echg_arg,  and  the  address of a vis_devinit struct containing the new
       video mode information.


       modechg_arg is an opaque handle passed from the  terminal  emulator  to
       the driver, which the driver must pass back to the terminal emulator as
       an  argument  to  the  modechg_cb function when the driver notifies the
       terminal emulator of a video mode change.

       VIS_DEVFINI       Tells the graphics driver that it is  no  longer  the
                         system  console  device. There is no argument to this
                         ioctl. The driver is expected  to  free  any  locally
                         kept state information related to the console.


       VIS_CONSCURSOR    Describes the size and placement of the cursor on the
                         screen. The graphics driver is expected to display or
                         hide the cursor at the indicated position.



       The  argument is a pointer to a vis_conscursor structure which contains
       the following fields:

         struct vis_conscursor {
             screen_pos_t   row;
             screen_pos_t   col;
             screen_size_t  width;
             screen_size_t  height
             color_t        fg_color;
             color_t        bg_color;
             short          action;
         };



       row and col are the first row and column (upper left corner of the cur‐
       sor).


       width and height are the width and height of the cursor.


       If mode in the VIS_DEVINIT ioctl is set to VIS_PIXEL,  then  col,  row,
       width  and  height  are in pixels. If mode in the VIS_DEVINIT ioctl was
       set to VIS_TEXT, then col, row, width and height are in characters.


       fg_color and bg_color are the foreground and background color  map  in‐
       dexes to use when the action (see below) is set to VIS_DISPLAY_CURSOR.


       action  indicates  whether  to display or hide the cursor. It is set to
       either VIS_HIDE_CURSOR or VIS_DISPLAY_CURSOR.

       VIS_CONSDISPLAY    Display data on the graphics  device.  The  graphics
                          driver  is expected to display the data contained in
                          the vis_display structure at the specified  position
                          on the console.



       The vis_display structure contains the following fields:



         struct vis_display {
             screen_pos_t   row;
             screen_pos_t   col;
             screen_size_t  width;
             screen_size_t  height;
             uchar_t        *data;
             color_t        fg_color;
             color_t        bg_color;
         };



       row  and col specify at which starting row and column the date is to be
       displayed. If mode in the VIS_DEVINIT ioctl was set  to  VIS_TEXT,  row
       and col are defined to be a character offset from the starting position
       of  the  console  device.  If  mode in the VIS_DEVINIT ioctl was set to
       VIS_PIXEL, row and col are defined to be a pixel offset from the start‐
       ing position of the console device.


       width and height specify the size of the data to be displayed. If  mode
       in  the  VIS_DEVINIT ioctl was set to VIS_TEXT, width and height define
       the size of data as a rectangle  that  is  width  characters  wide  and
       height  characters  high.  If  mode in the VIS_DEVINIT ioctl was set to
       VIS_PIXEL, width and height define the size of data as a rectangle that
       is width pixels wide and height pixels high.


       *data is a pointer to the data to be displayed on the  console  device.
       If  mode in the VIS_DEVINIT ioctl was set to VIS_TEXT, data is an array
       of ASCII characters to be displayed on the console device.  The  driver
       must  break these characters up appropriately and display it in the re‐
       tangle defined  by  row,  col,  width,  and  height.  If  mode  in  the
       VIS_DEVINIT ioctl was set to VIS_PIXEL, data is an array of bitmap data
       to  be displayed on the console device. The driver must break this data
       up appropriately and display it in the retangle defined  by  row,  col,
       width, and height.


       The  fg_color  and bg_color fields define the foreground and background
       color map indexes to use when displaying the data. fb_color is used for
       on pixels and bg_color is used for off pixels.

       VIS_CONSCOPY    Copy data from one location on the device  to  another.
                       The  driver is expected to copy the specified data. The
                       source data should not be modified.  Any  modifications
                       to  the  source  data should be as a side effect of the
                       copy destination overlapping the copy source.



       The argument is a pointer to a vis_copy structure  which  contains  the
       following fields:

         struct vis_copy {
             screen_pos_t  s_row;
             screen_pos_t  s_col;
             screen_pos_t  e_row;
             screen_pos_t  e_col;
             screen_pos_t  t_row;
             screen_pos_t  t_col;
             short         direction;
         };



       s_row, s_col, e_row, and e_col define the source rectangle of the copy.
       s_row  and  s_col  are  the  upper left corner of the source rectangle.
       e_row and e_col are the lower right corner of the source rectangle.  If
       mode  in  the  VIS_DEVINIT   ioctl() was set to VIS_TEXT, s_row, s_col,
       e_row, and e_col are defined to be character offsets from the  starting
       position  of  the  console device. If mode in the VIS_DEVINIT ioctl was
       set to VIS_PIXEL, s_row, s_col, e_row, and  e_col  are  defined  to  be
       pixel offsets from the starting position of the console device.


       t_row and t_col define the upper left corner of the destination rectan‐
       gle  of  the  copy. The entire rectangle is copied to this location. If
       mode in the VIS_DEVINIT ioctl was set to VIS_TEXT, t_row, and t_col are
       defined to be character offsets from the starting position of the  con‐
       sole  device.  If  mode  in the VIS_DEVINIT ioctl was set to VIS_PIXEL,
       t_row, and t_col are defined to be pixel offsets from the starting  po‐
       sition of the console device.


       direction  specifies  which  way  to  do  the  copy.  If  direction  is
       VIS_COPY_FORWARD the graphics driver should  copy  data  from  position
       (s_row,  s_col)  in  the source rectangle to position (t_row, t_col) in
       the destination  rectangle.  If  direction  is  VIS_COPY_BACKWARDS  the
       graphics  driver  should  copy data from position (e_row, e_col) in the
       source rectangle to position (t_row+(e_row-s_row), t_col+(e_col-s_col))
       in the destination rectangle.

       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.

   Console Standalone Entry Points  (Polled I/O Interfaces)
       Console standalone entry points are necessary only if the driver is im‐
       plementing console-compatible extensions. All console  vectored  stand‐
       alone  entry  points must be implemented along with all console-related
       ioctls if the console extension is implemented.



         struct vis_polledio {
             struct vis_polledio_arg *arg;
             void    (*display)(vis_polledio_arg *, struct vis_consdisplay *);
             void    (*copy)(vis_polledio_arg *, struct vis_conscopy *);
             void    (*cursor)(vis_polledio_arg *, struct vis_conscursor *);
         };



       The vis_polledio structure is passed from the driver to the Oracle  So‐
       laris  operating  system,  conveying the entry point addresses of three
       functions which perform the same operations of  their  similarly  named
       ioctl  counterparts.  The rendering parameters for each entry point are
       derived from the same structure passed as the respective ioctl. See the
       Console Optional Ioctls section of this manpage for an  explanation  of
       the  specific  function each of the entry points, display(), copy() and
       cursor() are required to implement. In addition to performing the  pre‐
       scribed  function  of  their ioctl counterparts, the standalone vectors
       operate in a special context and must adhere to a strict set of  rules.
       The  polled I/O vectors are called directly whenever the system is qui‐
       esced (running in a limited context) and must send output to  the  dis‐
       play.  Standalone  mode describes the state in which the system is run‐
       ning in single-threaded mode and only one processor is  active.  Oracle
       Solaris  operating  system  services  are stopped, along with all other
       threads on the system, prior to entering any of the polled  I/O  inter‐
       faces.  The polled I/O vectors are called when the system is running in
       a standalone debugger, when executing the PROM monitor  (OBP)  or  when
       panicking.


       The  following  restrictions  must  be observed in the polled I/O func‐
       tions:

           1.     The driver must not allocate memory.


           2.     The driver must not wait on mutexes.


           3.     The driver must not wait for interrupts.


           4.     The driver must not call any DDI or LDI services.


           5.     The driver must not call any system services.




       The system is single-threaded when  calling  these  functions,  meaning
       that  all  other threads are effectively halted. Single-threading makes
       mutexes (which cannot be held) easier to deal with, so long as the dri‐
       ver does not disturb any shared state. See Writing  Device  Drivers  in
       Oracle  Solaris 11.4 for more information about implementing polled I/O
       entry points.

SEE ALSO
       ioctl(2)


       Writing Device Drivers in Oracle Solaris 11.4

NOTES
       On SPARC systems, compatible drivers supporting the kernel terminal em‐
       ulator should export the tem-support DDI  property.  tem-support  indi‐
       cates that the driver supports the kernel terminal emulator. By export‐
       ing  tem-support it's possible to avoid premature handling of an incom‐
       patible driver.

       tem-support    This DDI property, set to 1, means the driver is compat‐
                      ible with the console kernel framebuffer interface.


Oracle Solaris 11.4               11 May 2021                    visual_io(4I)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3