Print this page
10562 Convert visual_io(7I) to mandoc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man7i/visual_io.7i.man.txt
          +++ new/usr/src/man/man7i/visual_io.7i.man.txt
   1    1  VISUAL_IO(7I)                   Ioctl Requests                   VISUAL_IO(7I)
   2    2  
   3      -
   4      -
   5    3  NAME
   6      -       visual_io - Solaris VISUAL I/O control operations
        4 +     visual_io - illumos VISUAL I/O control operations
   7    5  
   8    6  SYNOPSIS
   9      -       #include <sys/visual_io.h>
        7 +     #include <sys/visual_io.h>
  10    8  
  11      -
  12    9  DESCRIPTION
  13      -       The Solaris VISUAL environment defines a small set of ioctls for
  14      -       controlling graphics and imaging devices.
       10 +     The illumos VISUAL environment defines a small set of ioctls for
       11 +     controlling graphics and imaging devices.
  15   12  
       13 +     The VIS_GETIDENTIFIER ioctl is mandatory and must be implemented in
       14 +     device drivers for graphics devices using the illumos VISUAL environment.
       15 +     The VIS_GETIDENTIFIER ioctl is defined to return a device identifier from
       16 +     the device driver.  This identifier must be a uniquely-defined string.
  16   17  
  17      -       The VIS_GETIDENTIFIER ioctl is mandatory and must be implemented in
  18      -       device drivers for graphics devices using the Solaris VISUAL
  19      -       environment. The VIS_GETIDENTIFIER ioctl is defined to return a device
  20      -       identifier from the device driver. This identifier must be a uniquely-
  21      -       defined string.
       18 +     There are two additional sets of ioctls.  One supports mouse tracking via
       19 +     hardware cursor operations.  Use of this set is optional, however, if a
       20 +     graphics device has hardware cursor support and implements these ioctls,
       21 +     the mouse tracking performance is improved.  The remaining set supports
       22 +     the device acting as the system console device.  Use of this set is
       23 +     optional, but if a graphics device is to be used as the system console
       24 +     device, it must implement these ioctls.
  22   25  
       26 +     The VISUAL environment also defines interfaces for non-ioctl entry points
       27 +     into the driver that the illumos operating environment calls when it is
       28 +     running in standalone mode (for example, when using a stand-alone
       29 +     debugger, entering the PROM monitor, or when the system panicking).
       30 +     These are also known as "Polled I/O" entry points, which operate under an
       31 +     an explicit set of restrictions, described below.
  23   32  
  24      -       There are two additional sets of ioctls. One supports mouse tracking
  25      -       via hardware cursor operations. Use of this set is optional, however,
  26      -       if a graphics device has hardware cursor support and implements these
  27      -       ioctls, the mouse tracking performance is improved. The remaining set
  28      -       supports the device acting as the system console device. Use of this
  29      -       set is optional, but if a graphics device is to be used as the system
  30      -       console device, it must implement these ioctls.
  31      -
  32      -
  33      -       The VISUAL environment also defines interfaces for non-ioctl entry
  34      -       points into the driver that the Solaris operating environment calls
  35      -       when it is running in standalone  mode (for example, when using a
  36      -       stand-alone  debugger, entering the  PROM  monitor, or when the system
  37      -       panicking). These are also known as "Polled I/O" entry points, which
  38      -       operate under an an explicit set of restrictions, described below.
  39      -
  40   33  IOCTLS
  41      -       VIS_GETIDENTIFIER
  42      -                            This ioctl() returns an identifier string to
  43      -                            uniquely identify a device used in the Solaris
  44      -                            VISUAL environment.  This is a mandatory ioctl and
  45      -                            must return a unique string. We suggest that the
  46      -                            name be formed as <companysymbol><devicetype>. For
  47      -                            example, the cgsix driver returns SUNWcg6.
       34 +     VIS_GETIDENTIFIER  This ioctl(2) returns an identifier string to uniquely
       35 +                        identify a device used in the illumos VISUAL
       36 +                        environment.  This is a mandatory ioctl and must
       37 +                        return a unique string.  We suggest that the name be
       38 +                        formed as <companysymbol><devicetype>.  For example,
       39 +                        the cgsix(7D) driver returns SUNWcg6.
  48   40  
  49      -                            VIS_GETIDENTIFIER takes a vis_identifier structure
  50      -                            as its parameter.  This structure has the form:
       41 +                        VIS_GETIDENTIFIER takes a vis_identifier structure as
       42 +                        its parameter.  This structure has the form:
  51   43  
  52      -                              #define VIS_MAXNAMELEN 128
  53      -                              struct vis_identifier {
  54      -                                     char name[VIS_MAXNAMELEN];
  55      -                              };
       44 +                          #define VIS_MAXNAMELEN 128
       45 +                          struct vis_identifier {
       46 +                                 char name[VIS_MAXNAMELEN];
       47 +                          };
  56   48  
       49 +     VIS_GETCURSOR
       50 +     VIS_SETCURSOR      These ioctls fetch and set various cursor attributes,
       51 +                        using the vis_cursor structure.
  57   52  
       53 +                          struct vis_cursorpos {
       54 +                             short x; /* cursor x coordinate */
       55 +                             short y; /* cursor y coordinate */
       56 +                          };
  58   57  
  59      -       VIS_GETCURSOR
  60      -       VIS_SETCURSOR
  61      -                            These ioctls fetch and set various cursor
  62      -                            attributes, using the vis_cursor structure.
       58 +                          struct vis_cursorcmap {
       59 +                              int version;          /* version */
       60 +                              int reserved;
       61 +                              /* red color map elements */
       62 +                              unsigned char *red;
       63 +                              /* green color map elements */
       64 +                              unsigned char *green;
       65 +                              /* blue color map elements */
       66 +                              unsigned char *blue;
       67 +                          };
  63   68  
  64      -                              struct vis_cursorpos {
  65      -                                      short  x;        /* cursor x coordinate */
  66      -                                      short  y;        /* cursor y coordinate */
  67      -                              };
       69 +                          #define VIS_CURSOR_SETCURSOR   0x01  /* set cursor */
       70 +                                  /* set cursor position */
       71 +                          #define VIS_CURSOR_SETPOSITION 0x02
       72 +                                  /* set cursur hot spot */
       73 +                          #define VIS_CURSOR_SETHOTSPOT  0x04
       74 +                                  /* set cursor colormap */
       75 +                          #define VIS_CURSOR_SETCOLORMAP 0x08
       76 +                                  /* set cursor shape */
       77 +                          #define VIS_CURSOR_SETSHAPE 0x10
       78 +                          #define VIS_CURSOR_SETALL       \
       79 +                              (VIS_CURSOR_SETCURSOR | VIS_CURSOR_SETPOSITION | \
       80 +                              VIS_CURSOR_SETHOTSPOT | VIS_CURSOR_SETCOLORMAP | \
       81 +                              VIS_CURSOR_SETSHAPE)
  68   82  
  69      -                              struct vis_cursorcmap {
  70      -                                     int     version;           /* version */
  71      -                                     int     reserved;
  72      -                                     unsigned char *red;  /* red color map elements */
  73      -                                     unsigned char *green;/* green color map elements */
  74      -                                     unsigned char *blue; /* blue color map elements */
  75      -                              };
       83 +                          struct vis_cursor {
       84 +                              short set;                  /* what to set */
       85 +                              short enable;               /* cursor on/off */
       86 +                              struct vis_cursorpos pos;   /* cursor position */
       87 +                              struct  vis_cursorpos hot;  /* cursor hot spot */
       88 +                              struct vis_cursorcmap cmap; /* color map info */
       89 +                              /* cursor bitmap size */
       90 +                              struct vis_cursorpos size;
       91 +                              char  *image;              /* cursor image bits */
       92 +                              char  *mask;               /* cursor mask bits */
       93 +                          };
  76   94  
  77      -                              #define VIS_CURSOR_SETCURSOR   0x01  /* set cursor */
  78      -                              #define VIS_CURSOR_SETPOSITION 0x02  /* set cursor position */
  79      -                              #define VIS_CURSOR_SETHOTSPOT  0x04  /* set cursor hot spot */
  80      -                              #define VIS_CURSOR_SETCOLORMAP 0x08  /* set cursor colormap */
  81      -                              #define VIS_CURSOR_SETSHAPE 0x10     /* set cursor shape */
  82      -                              #define VIS_CURSOR_SETALL     \
  83      -                                  (VIS_CURSOR_SETCURSOR | VIS_CURSOR_SETPOSITION | \
  84      -                                  VIS_CURSOR_SETHOTSPOT | VIS_CURSOR_SETCOLORMAP | \
  85      -                                  VIS_CURSOR_SETSHAPE)
       95 +                        The vis_cursorcmap structure should contain pointers
       96 +                        to two elements, specifying the red, green, and blue
       97 +                        values for foreground and background.
  86   98  
  87      -                              struct vis_cursor {
  88      -                                  short set;                    /* what to set */
  89      -                                  short enable;                 /* cursor on/off */
  90      -                                  struct vis_cursorpos pos;     /* cursor position */
  91      -                                  struct  vis_cursorpos hot;    /* cursor hot spot */
  92      -                                  struct vis_cursorcmap cmap;   /* color map info */
  93      -                                  struct vis_cursorpos size;    /* cursor bitmap size */
  94      -                                  char  *image;                 /* cursor image bits */
  95      -                                  char  *mask;                  /* cursor mask bits */
  96      -                              };
       99 +     VIS_SETCURSORPOS
      100 +     VIS_MOVECURSOR     These ioctls fetch and move the current cursor
      101 +                        position, using the vis_cursorpos structure.
  97  102  
  98      -
  99      -
 100      -
 101      -       The vis_cursorcmap structure should contain pointers to two elements,
 102      -       specifying the red, green, and blue values for foreground and
 103      -       background.
 104      -
 105      -       VIS_SETCURSORPOS
 106      -       VIS_MOVECURSOR
 107      -                           These ioctls fetch and move the current cursor
 108      -                           position, using the vis_cursorpos structure.
 109      -
 110      -
 111  103     Console Optional Ioctls
 112      -       The following ioctl sets are used by graphics drivers that are part of
 113      -       the system console device. All of the ioctls must be implemented to be
 114      -       a  console device.  In addition, if the system does not have a prom or
 115      -       the prom goes away during boot, the special standalone ioctls (listed
 116      -       below) must also be implemented.
      104 +     The following ioctl sets are used by graphics drivers that are part of
      105 +     the system console device.  All of the ioctls must be implemented to be a
      106 +     console device.  In addition, if the system does not have a prom or the
      107 +     prom goes away during boot, the special standalone ioctls (listed below)
      108 +     must also be implemented.
 117  109  
      110 +     The coordinate system for the console device places 0,0 at the upper left
      111 +     corner of the device, with rows increasing toward the bottom of the
      112 +     device and columns increasing from left to right.
 118  113  
 119      -       The coordinate system for the console device places 0,0 at the upper
 120      -       left corner of the device, with rows increasing toward the bottom of
 121      -       the device and columns increasing from left to right.
 122      -
 123  114         VIS_PUTCMAP
 124      -       VIS_GETCMAP
 125      -                      Set or get color map entries.
      115 +       VIS_GETCMAP      Set or get color map entries.
 126  116  
      117 +                        The argument is a pointer to a vis_cmap structure,
      118 +                        which contains the following fields:
 127  119  
      120 +                          struct vis_cmap {
      121 +                              int         index;
      122 +                              int         count;
      123 +                              uchar_t     *red;
      124 +                              uchar_t     *green;
      125 +                              uchar_t     *blue;
      126 +                          }
 128  127  
 129      -       The argument is a pointer to a vis_cmap structure, which contains the
 130      -       following fields:
      128 +                        index is the starting index in the color map where you
      129 +                        want to start setting or getting color map entries.
 131  130  
 132      -         struct vis_cmap {
 133      -             int   index;
 134      -             int   count;
 135      -             uchar_t    *red;
 136      -             uchar_t    *green;
 137      -             uchar_t    *blue;
 138      -         }
      131 +                        count is the number of color map entries to set or
      132 +                        get.  It also is the size of the red, green, and blue
      133 +                        color arrays.
 139  134  
      135 +                        *red, *green, and *blue are pointers to unsigned
      136 +                        character arrays which contain the color map info to
      137 +                        set or where the color map info is placed on a get.
 140  138  
      139 +       VIS_DEVINIT      Initializes the graphics driver as a console device.
 141  140  
 142      -       index is the starting index in the color map where you want to start
 143      -       setting or getting color map entries.
      141 +                        The argument is a pointer to a vis_devinit structure.
      142 +                        The graphics driver is expected to allocate any local
      143 +                        state information needed to be a console device and
      144 +                        fill in this structure.
 144  145  
      146 +                          struct vis_devinit {
      147 +                              int  version;
      148 +                              screen_size_t  width;
      149 +                              screen_size_t  height;
      150 +                              screen_size_t  linebytes;
      151 +                              unit_t         size;
      152 +                              int            depth;
      153 +                              short          mode;
      154 +                              struct vis_polledio    *polledio;
      155 +                              vis_modechg_cb_t       modechg_cb;
      156 +                              struct vis_modechg_arg *modechg_arg;
      157 +                          };
 145  158  
 146      -       count is the number of color map entries to set or get.  It also is the
 147      -       size of the red, green, and blue color arrays.
      159 +                        version is the version of this structure and should be
      160 +                        set to VIS_CONS_REV.
 148  161  
      162 +                        width and height are the width and height of the
      163 +                        device.  If mode (see below) is VIS_TEXT then width
      164 +                        and height are the number of characters wide and high
      165 +                        of the device.  If mode is VIS_PIXEL then width and
      166 +                        height are the number of pixels wide and high of the
      167 +                        device.
 149  168  
 150      -       *red, *green, and *blue are pointers to unsigned character arrays which
 151      -       contain the color map info to set or where the color map info is placed
 152      -       on a get.
      169 +                        linebytes is the number of bytes per line of the
      170 +                        device.
 153  171  
 154      -       VIS_DEVINIT
 155      -                      Initializes the graphics driver as a console device.
      172 +                        size is the total size of the device in pixels.
 156  173  
      174 +                        depth is the pixel depth in device bits.  Currently
      175 +                        supported depths are: 1, 4, 8 and 24.
 157  176  
      177 +                        mode is the mode of the device.  Either VIS_PIXEL
      178 +                        (data to be displayed is in bitmap format) or VIS_TEXT
      179 +                        (data to be displayed is in ascii format).
 158  180  
 159      -       The argument is a pointer to a vis_devinit structure. The graphics
 160      -       driver is expected to allocate any local state information needed to be
 161      -       a console device and fill in this structure.
      181 +                        polledio is used to pass the address of the structure
      182 +                        containing the standalone mode polled I/O entry points
      183 +                        to the device driver back to the terminal emulator.
      184 +                        The vis_polledio interfaces are described in the
      185 +                        Console Standalone Entry Points section of this
      186 +                        manpage.  These entry points are where the operating
      187 +                        system enters the driver when the system is running in
      188 +                        standalone mode.  These functions perform identically
      189 +                        to the VIS_CONSDISPLAY, VIS_CONSCURSOR, and
      190 +                        VIS_CONSCOPY ioctls, but are called directly by the
      191 +                        illumos operating environment and must operate under a
      192 +                        very strict set of assumptions.
 162  193  
 163      -         struct vis_devinit {
 164      -             int  version;
 165      -             screen_size_t  width;
 166      -             screen_size_t  height;
 167      -             screen_size_t  linebytes;
 168      -             unit_t     size;
 169      -             int      depth;
 170      -             short  mode;
 171      -             struct vis_polledio    *polledio;
 172      -             vis_modechg_cb_t       modechg_cb;
 173      -             struct vis_modechg_arg *modechg_arg;
 174      -         };
      194 +                        modechg_cb is a callback function passed from the
      195 +                        terminal emulator to the framebuffer driver which the
      196 +                        frame-buffer driver must call whenever a video mode
      197 +                        change event occurs that changes the screen height,
      198 +                        width or depth.  The callback takes two arguments, an
      199 +                        opaque handle, modechg_arg, and the address of a
      200 +                        vis_devinit struct containing the new video mode
      201 +                        information.
 175  202  
      203 +                        modechg_arg is an opaque handle passed from the
      204 +                        terminal emulator to the driver, which the driver must
      205 +                        pass back to the terminal emulator as an argument to
      206 +                        the modechg_cb function when the driver notifies the
      207 +                        terminal emulator of a video mode change.
 176  208  
      209 +       VIS_DEVFINI      Tells the graphics driver that it is no longer the
      210 +                        system console device.  There is no argument to this
      211 +                        ioctl.  The driver is expected to free any locally
      212 +                        kept state information related to the console.
 177  213  
 178      -       version is the version of this structure and should be set to
 179      -       VIS_CONS_REV.
      214 +       VIS_CONSCURSOR   Describes the size and placement of the cursor on the
      215 +                        screen.  The graphics driver is expected to display or
      216 +                        hide the cursor at the indicated position.
 180  217  
      218 +                        The argument is a pointer to a vis_conscursor
      219 +                        structure which contains the following fields:
 181  220  
 182      -       width and height are the width and height of the device.  If mode (see
 183      -       below) is VIS_TEXT then width and height are the number of characters
 184      -       wide and high of the device. If mode is VIS_PIXEL then width and height
 185      -       are the number of pixels wide and high of the device.
      221 +                          struct vis_conscursor {
      222 +                              screen_pos_t   row;
      223 +                              screen_pos_t   col;
      224 +                              screen_size_t  width;
      225 +                              screen_size_t  height
      226 +                              color_t        fg_color;
      227 +                              color_t        bg_color;
      228 +                              short          action;
      229 +                          };
 186  230  
      231 +                        row and col are the first row and column (upper left
      232 +                        corner of the cursor).
 187  233  
 188      -       linebytes is the number of bytes per line of the device.
      234 +                        width and height are the width and height of the
      235 +                        cursor.
 189  236  
      237 +                        If mode in the VIS_DEVINIT ioctl is set to VIS_PIXEL,
      238 +                        then col, row, width and height are in pixels.  If
      239 +                        mode in the VIS_DEVINIT ioctl was set to VIS_TEXT,
      240 +                        then col, row, width and height are in characters.
 190  241  
 191      -       size is the total size of the device in pixels.
      242 +                        fg_color and bg_color are the foreground and
      243 +                        background color map indexes to use when the action
      244 +                        (see below) is set to VIS_DISPLAY_CURSOR.
 192  245  
      246 +                        action indicates whether to display or hide the
      247 +                        cursor.  It is set to either VIS_HIDE_CURSOR or
      248 +                        VIS_DISPLAY_CURSOR.
 193  249  
 194      -       depth is the pixel depth in device bits. Currently supported depths
 195      -       are: 1, 4, 8 and 24.
      250 +       VIS_CONSDISPLAY  Display data on the graphics device.  The graphics
      251 +                        driver is expected to display the data contained in
      252 +                        the vis_display structure at the specified position on
      253 +                        the console.
 196  254  
      255 +                        The vis_display structure contains the following
      256 +                        fields:
 197  257  
 198      -       mode is the mode of the device.  Either VIS_PIXEL (data to be displayed
 199      -       is in bitmap format) or VIS_TEXT (data to be displayed is in ascii
 200      -       format).
      258 +                          struct vis_display {
      259 +                              screen_pos_t   row;
      260 +                              screen_pos_t   col;
      261 +                              screen_size_t  width;
      262 +                              screen_size_t  height;
      263 +                              uchar_t        *data;
      264 +                              color_t        fg_color;
      265 +                              color_t        bg_color;
      266 +                          };
 201  267  
      268 +                        row and col specify at which starting row and column
      269 +                        the date is to be displayed.  If mode in the
      270 +                        VIS_DEVINIT ioctl was set to VIS_TEXT, row and col are
      271 +                        defined to be a character offset from the starting
      272 +                        position of the console device.  If mode in the
      273 +                        VIS_DEVINIT ioctl was set to VIS_PIXEL, row and col
      274 +                        are defined to be a pixel offset from the starting
      275 +                        position of the console device.
 202  276  
 203      -       polledio is used to pass the address of the structure containing the
 204      -       standalone mode polled I/O entry points to the device driver back to
 205      -       the terminal emulator. The vis_polledio interfaces are described in the
 206      -       Console Standalone Entry Points section of this manpage. These entry
 207      -       points are where the operating system enters the driver when the system
 208      -       is running in standalone mode. These functions perform identically to
 209      -       the VIS_CONSDISPLAY, VIS_CONSCURSOR and VIS_CONSCOPY ioctls, but are
 210      -       called directly by the Solaris operating environment and must operate
 211      -       under a very strict set of assumptions.
      277 +                        width and height specify the size of the data to be
      278 +                        displayed.  If mode in the VIS_DEVINIT ioctl was set
      279 +                        to VIS_TEXT, width and height define the size of data
      280 +                        as rectangle that is width characters wide and height
      281 +                        characters high.  If mode in the VIS_DEVINIT ioctl was
      282 +                        set to VIS_PIXEL, width and height define the size of
      283 +                        data as a rectangle that is width pixels wide and
      284 +                        height pixels high.
 212  285  
      286 +                        *data is a pointer to the data to be displayed on the
      287 +                        console device.  If mode in the VIS_DEVINIT ioctl was
      288 +                        set to VIS_TEXT, data is an array of ASCII characters
      289 +                        to be displayed on the console device.  The driver
      290 +                        must break these characters up appropriately and
      291 +                        display it in the rectangle defined by row, col,
      292 +                        width, and height.  If mode in the VIS_DEVINIT ioctl
      293 +                        was set to VIS_PIXEL, data is an array of bitmap data
      294 +                        to be displayed on the console device.  The driver
      295 +                        must break this data up appropriately and display it
      296 +                        in the retangle defined by row, col, width, and
      297 +                        height.
 213  298  
 214      -       modechg_cb is a callback function passed from the terminal emulator to
 215      -       the framebuffer driver which the frame-buffer driver must call whenever
 216      -       a video mode change event occurs that changes the screen height, width
 217      -       or depth. The callback takes two arguments, an opaque handle,
 218      -       modechg_arg, and the address of a vis_devinit struct containing the new
 219      -       video mode information.
      299 +                        The fg_color and bg_color fields define the foreground
      300 +                        and background color map indexes to use when
      301 +                        displaying the data.  fb_color is used for "on" pixels
      302 +                        and bg_color is used for "off" pixels.
 220  303  
      304 +       VIS_CONSCOPY     Copy data from one location on the device to another.
      305 +                        The driver is expected to copy the specified data.
      306 +                        The source data should not be modified.  Any
      307 +                        modifications to the source data should be as a side
      308 +                        effect of the copy destination overlapping the copy
      309 +                        source.
 221  310  
 222      -       modechg_arg is an opaque handle passed from the terminal emulator to
 223      -       the driver, which the driver must pass back to the terminal emulator as
 224      -       an argument to the modechg_cb function when the driver notifies the
 225      -       terminal emulator of a video mode change.
      311 +                        The argument is a pointer to a vis_copy structure
      312 +                        which contains the following fields:
 226  313  
 227      -       VIS_DEVFINI
 228      -                         Tells the graphics driver that it is no longer the
 229      -                         system console device. There is no argument to this
 230      -                         ioctl. The driver is expected to free any locally
 231      -                         kept state information related to the console.
      314 +                          struct vis_copy {
      315 +                              screen_pos_t  s_row;
      316 +                              screen_pos_t  s_col;
      317 +                              screen_pos_t  e_row;
      318 +                              screen_pos_t  e_col;
      319 +                              screen_pos_t  t_row;
      320 +                              screen_pos_t  t_col;
      321 +                              short         direction;
      322 +                          };
 232  323  
      324 +                        s_row, s_col, e_row, and e_col define the source
      325 +                        rectangle of the copy.  s_row and s_col are the upper
      326 +                        left corner of the source rectangle.  e_row and e_col
      327 +                        are the lower right corner of the source rectangle.
      328 +                        If mode in the VIS_DEVINIT ioctl() was set to
      329 +                        VIS_TEXT, s_row, s_col, e_row, and e_col are defined
      330 +                        to be character offsets from the starting position of
      331 +                        the console device.  If mode in the VIS_DEVINIT
      332 +                        ioctl() was set to VIS_PIXEL, s_row, s_col, e_row, and
      333 +                        e_col are defined to be pixel offsets from the
      334 +                        starting position of the console device.
 233  335  
 234      -       VIS_CONSCURSOR
 235      -                         Describes the size and placement of the cursor on the
 236      -                         screen. The graphics driver is expected to display or
 237      -                         hide the cursor at the indicated position.
      336 +                        t_row and t_col define the upper left corner of the
      337 +                        destination rectangle of the copy.  The entire
      338 +                        rectangle is copied to this location.  If mode in the
      339 +                        VIS_DEVINIT ioctl was set to VIS_TEXT, t_row, and
      340 +                        t_col are defined to be character offsets from the
      341 +                        starting position of the console device.  If mode in
      342 +                        the VIS_DEVINIT ioctl was set to VIS_PIXEL, t_row, and
      343 +                        t_col are defined to be pixel offsets from the
      344 +                        starting position of the onssole device.
 238  345  
      346 +                        direction specifies which way to do the copy.  If
      347 +                        direction is VIS_COPY_FORWARD the graphics driver
      348 +                        should copy data from position (s_row, s_col) in the
      349 +                        source rectangle to position (t_row, t_col) in the
      350 +                        destination rectangle.  If direction is
      351 +                        VIS_COPY_BACKWARDS the graphics driver should copy
      352 +                        data from position (e_row, e_col) in the source
      353 +                        rectangle to position (t_row+(e_row-s_row),
      354 +                        t_col+(e_col-s_col)) in the destination rectangle.
 239  355  
 240      -
 241      -       The argument is a pointer to a vis_conscursor structure which contains
 242      -       the following fields:
 243      -
 244      -         struct vis_conscursor {
 245      -             screen_pos_t   row;
 246      -             screen_pos_t   col;
 247      -             screen_size_t  width;
 248      -             screen_size_t  height
 249      -             color_t        fg_color;
 250      -             color_t        bg_color;
 251      -             short          action;
 252      -         };
 253      -
 254      -
 255      -
 256      -       row and col are the first row and column (upper left corner of the
 257      -       cursor).
 258      -
 259      -
 260      -       width and height are the width and height of the cursor.
 261      -
 262      -
 263      -       If mode in the VIS_DEVINIT ioctl is set to VIS_PIXEL, then col, row,
 264      -       width and height are in pixels. If mode in the VIS_DEVINIT ioctl was
 265      -       set to VIS_TEXT, then col, row, width and height are in characters.
 266      -
 267      -
 268      -       fg_color and bg_color are the foreground and background color map
 269      -       indexes to use when  the action (see below) is set to
 270      -       VIS_DISPLAY_CURSOR.
 271      -
 272      -
 273      -       action indicates whether to display or hide the cursor.  It is set to
 274      -       either VIS_HIDE_CURSOR or VIS_DISPLAY_CURSOR.
 275      -
 276      -       VIS_CONSDISPLAY
 277      -                          Display data on the graphics device. The graphics
 278      -                          driver is expected to display the data contained in
 279      -                          the  vis_display structure at the specified position
 280      -                          on the console.
 281      -
 282      -
 283      -
 284      -       The vis_display structure contains the following fields:
 285      -
 286      -         struct vis_display {
 287      -             screen_pos_t   row;
 288      -             screen_pos_t   col;
 289      -             screen_size_t  width;
 290      -             screen_size_t  height;
 291      -             uchar_t        *data;
 292      -             color_t        fg_color;
 293      -             color_t        bg_color;
 294      -         };
 295      -
 296      -
 297      -
 298      -       row and col specify at which starting row and column the date is to be
 299      -       displayed. If mode in the VIS_DEVINIT ioctl was set to VIS_TEXT, row
 300      -       and  col are defined to be a character offset from the starting
 301      -       position of the console device. If mode in the VIS_DEVINIT ioctl was
 302      -       set to VIS_PIXEL, row and  col are defined to be a pixel offset from
 303      -       the starting position of  the console device.
 304      -
 305      -
 306      -       width and height specify the size of the  data to be displayed. If mode
 307      -       in the VIS_DEVINIT ioctl was set to VIS_TEXT, width and height define
 308      -       the size of  data as a rectangle that is width characters wide and
 309      -       height characters high. If mode in the VIS_DEVINIT ioctl was set to
 310      -       VIS_PIXEL, width and height define the size of  data as a rectangle
 311      -       that is width pixels wide and height pixels high.
 312      -
 313      -
 314      -       *data is a pointer to the data to be displayed on the console device.
 315      -       If mode in the VIS_DEVINIT ioctl was set to VIS_TEXT, data is an array
 316      -       of ASCII characters to be displayed on the console device.  The driver
 317      -       must break these characters up appropriately and display it in  the
 318      -       retangle defined by row, col, width, and height. If mode in the
 319      -       VIS_DEVINIT ioctl was set to VIS_PIXEL, data is an array of bitmap data
 320      -       to be displayed on the console device.  The driver must break this data
 321      -       up appropriately and display it in the retangle defined by row, col,
 322      -       width, and height.
 323      -
 324      -
 325      -       The fg_color and bg_color fields define the foreground and background
 326      -       color map indexes to use when displaying the data. fb_color is used for
 327      -       "on" pixels and bg_color is used for "off" pixels.
 328      -
 329      -       VIS_CONSCOPY
 330      -                       Copy data from one location on the device to another.
 331      -                       The driver is expected to copy the specified data.  The
 332      -                       source data should not be modified. Any modifications
 333      -                       to the source data should be as a side effect of the
 334      -                       copy destination overlapping the copy source.
 335      -
 336      -
 337      -
 338      -       The argument is a pointer to a  vis_copy structure which contains the
 339      -       following fields:
 340      -
 341      -         struct vis_copy {
 342      -             screen_pos_t  s_row;
 343      -             screen_pos_t  s_col;
 344      -             screen_pos_t  e_row;
 345      -             screen_pos_t  e_col;
 346      -             screen_pos_t  t_row;
 347      -             screen_pos_t  t_col;
 348      -             short         direction;
 349      -         };
 350      -
 351      -
 352      -
 353      -       s_row, s_col, e_row, and e_col define the source rectangle of the copy.
 354      -       s_row and s_col are the upper left corner of the source rectangle.
 355      -       e_row and e_col are the lower right corner of the source rectangle. If
 356      -       mode in the VIS_DEVINIT ioctl() was set to VIS_TEXT, s_row, s_col,
 357      -       e_row, and e_col are defined to be character offsets from the starting
 358      -       position of the console device. If mode in the VIS_DEVINIT ioctl was
 359      -       set to VIS_PIXEL, s_row, s_col, e_row, and e_col are defined to be
 360      -       pixel offsets from the starting  position of the console device.
 361      -
 362      -
 363      -       t_row and t_col define the upper left corner of the destination
 364      -       rectangle of the copy. The entire rectangle is copied to this location.
 365      -       If mode in the VIS_DEVINIT ioctl was set to VIS_TEXT, t_row, and t_col
 366      -       are defined to be character offsets from the starting  position of the
 367      -       console device.   If mode in the VIS_DEVINIT ioctl was set to
 368      -       VIS_PIXEL, t_row, and t_col are defined to be pixel offsets from the
 369      -       starting  position of the console device.
 370      -
 371      -
 372      -       direction specifies which way to do the copy.  If direction is
 373      -       VIS_COPY_FORWARD the graphics driver should copy data from position
 374      -       (s_row, s_col) in the source rectangle to position (t_row, t_col) in
 375      -       the destination rectangle. If direction is VIS_COPY_BACKWARDS the
 376      -       graphics driver should copy data from position (e_row, e_col) in the
 377      -       source rectangle to position (t_row+(e_row-s_row), t_col+(e_col-s_col))
 378      -       in the destination rectangle.
 379      -
 380  356     Console Standalone Entry Points  (Polled I/O Interfaces)
 381      -       Console standalone entry points are necessary only if the driver is
 382      -       implementing console-compatible extensions. All console vectored
 383      -       standalone entry points must be implemented along with all console-
 384      -       related ioctls if the console extension is implemented.
      357 +     Console standalone entry points are necessary only if the driver is
      358 +     implementing console-compatible extensions.  All console vectored
      359 +     standalone entry points must be implemented along with all console-
      360 +     related ioctls if the console extension is implemented.
 385  361  
 386      -         struct vis_polledio {
 387      -             struct vis_polledio_arg *arg;
 388      -             void    (*display)(vis_polledio_arg *, struct vis_consdisplay *);
 389      -             void    (*copy)(vis_polledio_arg *, struct vis_conscopy *);
 390      -             void    (*cursor)(vis_polledio_arg *, struct vis_conscursor *);
 391      -         };
      362 +       struct vis_polledio {
      363 +           struct vis_polledio_arg *arg;
      364 +           void    (*display)(vis_polledio_arg *, struct vis_consdisplay *);
      365 +           void    (*copy)(vis_polledio_arg *, struct vis_conscopy *);
      366 +           void    (*cursor)(vis_polledio_arg *, struct vis_conscursor *);
      367 +       };
 392  368  
      369 +     The vis_polledio structure is passed from the driver to the illumos
      370 +     operating environment, conveying the entry point addresses of three
      371 +     functions which perform the same operations of their similarly named
      372 +     ioctl counterparts.  The rendering parameters for each entry point are
      373 +     derived from the same structure passed as the respective ioctl.  See the
      374 +     Console Optional Ioctls section of this manpage for an explanation of the
      375 +     specific function each of the entry points, display(), copy(), and
      376 +     cursor() are required to implement.  In addition to performing the
      377 +     prescribed function of their ioctl counterparts, the standalone vectors
      378 +     operate in a special context and must adhere to a strict set of rules.
      379 +     The polled I/O vectors are called directly whenever the system is quisced
      380 +     (running in a limited context) and must send output to the display.
      381 +     Standalone mode describes the state in which the system is running in
      382 +     single-threaded mode and only one processor is active.  illumos operating
      383 +     environment services are stopped, along with all other threads on the
      384 +     system, prior to entering any of the polled I/O interfaces.  The polled
      385 +     I/O vectors are called when the system is running in a standalone
      386 +     debugger, when executing the PROM monitor (OBP) or when panicking.
 393  387  
      388 +     The following restrictions must be observed in the polled I/O functions:
 394  389  
 395      -       The vis_polledio structure is passed from the driver to the Solaris
 396      -       operating environment, conveying the entry point addresses of three
 397      -       functions which perform the same operations of their similarly named
 398      -       ioctl counterparts.  The rendering parameters for each entry point are
 399      -       derived from the same structure passed as the respective ioctl. See the
 400      -       Console Optional Ioctls section of this manpage for an explanation of
 401      -       the specific function each of the entry points, display(), copy() and
 402      -       cursor() are required to implement. In addition to performing the
 403      -       prescribed function of their ioctl counterparts, the standalone vectors
 404      -       operate in a special context and must adhere to a strict set of rules.
 405      -       The polled I/O vectors are called directly whenever the system is
 406      -       quisced (running in a limited context) and must send output to the
 407      -       display.  Standalone mode describes the state in which the system is
 408      -       running in single-threaded mode and only one processor is active.
 409      -       Solaris operating environment services are stopped, along with all
 410      -       other threads on the system, prior to entering any of the polled I/O
 411      -       interfaces. The polled I/O vectors are called when the system is
 412      -       running in a standalone debugger, when executing the PROM monitor (OBP)
 413      -       or when panicking.
      390 +           1.   The driver must not allocate memory.
 414  391  
      392 +           2.   The driver must not wait on mutexes.
 415  393  
 416      -       The following restrictions must be observed in the polled I/O
 417      -       functions:
      394 +           3.   The driver must not wait for interrupts.
 418  395  
 419      -           1.     The driver must not allocate memory.
      396 +           4.   The driver must not call any DDI or LDI services.
 420  397  
 421      -           2.     The driver must not wait on mutexes.
      398 +           5.   The driver must not call any system services.
 422  399  
 423      -           3.     The driver must not wait for interrupts.
      400 +     The system is single-threaded when calling these functions, meaning that
      401 +     all other threads are effectively halted.  Single-threading makes mutexes
      402 +     (which cannot be held) easier to deal with, so long as the driver does
      403 +     not disturb any shared state.  See Writing Device Drivers for more
      404 +     information about implementing polled I/O entry points.
 424  405  
 425      -           4.     The driver must not call any DDI or LDI services.
 426      -
 427      -           5.     The driver must not call any system services.
 428      -
 429      -
 430      -       The system is single-threaded when calling these functions, meaning
 431      -       that all other threads are effectively halted. Single-threading makes
 432      -       mutexes (which cannot be held) easier to deal with, so long as the
 433      -       driver does not disturb any shared state. See Writing Device Drivers
 434      -       for more information about implementing polled I/O entry points.
 435      -
 436  406  SEE ALSO
 437      -       ioctl(2)
      407 +     ioctl(2)
 438  408  
      409 +     Writing Device Drivers.
 439  410  
 440      -       Writing Device Drivers
 441      -
 442  411  NOTES
 443      -       On SPARC systems, compatible drivers supporting the kernel terminal
 444      -       emulator should export the tem-support DDI property.tem-support
 445      -       indicates that the driver supports the kernel terminal emulator. By
 446      -       exporting tem-support it's possible to avoid premature handling of an
 447      -       incompatible driver.
      412 +     On SPARC systems, compatible drivers supporting the kernel terminal
      413 +     emulator should export the tem-support DDI property.  tem-support
      414 +     indicates that the driver supports the kernel terminal emulator.  By
      415 +     exporting tem-support it's possible to avoid premature handling of an
      416 +     incompatible driver.
 448  417  
 449      -       tem-support
 450      -                      This DDI property, set to 1, means driver is compatible
 451      -                      with the console kernel framebuffer interface.
      418 +     tem-support  This DDI property, set to 1, means driver is compatible with
      419 +                  the console kernel framebuffer interface.
 452  420  
 453      -
 454      -
 455      -
 456      -                               October 14, 2005                  VISUAL_IO(7I)
      421 +illumos                         August 31, 2018                        illumos
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX