visual_io man page on OpenIndiana

Man page or keyword search:  
man Server   20441 pages
apropos Keyword Search (all sections)
Output format
OpenIndiana logo
[printable version]

visual_io(7I)			Ioctl Requests			 visual_io(7I)

NAME
       visual_io - Solaris VISUAL I/O control operations

SYNOPSIS
       #include <sys/visual_io.h>

DESCRIPTION
       The  Solaris  VISUAL environment defines a small set of ioctls for con‐
       trolling graphics and imaging devices.

       The VIS_GETIDENTIFIER ioctl is mandatory and  must  be  implemented  in
       device  drivers	for graphics devices using the Solaris VISUAL environ‐
       ment. The VIS_GETIDENTIFIER ioctl is defined to return a device identi‐
       fier 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 Solaris operating environment calls
       when it is running in standalone	  mode	(for  example,	when  using  a
       stand-alone  debugger, entering	the  PROM  monitor, or when the system
       panicking). 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  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 parameter.  This structure has the form:

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

       VIS_GETCURSOR	    These  ioctls  fetch  and	set   various	cursor
       VIS_SETCURSOR	    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 elements,
       specifying the red, green, and blue values  for	foreground  and	 back‐
       ground.

       VIS_SETCURSORPOS	   These  ioctls  fetch	 and  move  the current cursor
       VIS_MOVECURSOR	   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
       driver 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 Solaris operating environment 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
       indexes to use when  the action (see below) is set to  VIS_DISPLAY_CUR‐
       SOR.

       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	 posi‐
       tion 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
       starting 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
       retangle	 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
       position 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.

   Console Standalone Entry Points  (Polled I/O Interfaces)
       Console	standalone  entry  points  are necessary only if the driver is
       implementing 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  Solaris
       operating  environment,	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
       quisced (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.  Solaris
       operating environment  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
       driver does not disturb any shared state. See  Writing  Device  Drivers
       for more information about implementing polled I/O entry points.

SEE ALSO
       ioctl(2)

       Writing Device Drivers

NOTES
       On  SPARC  systems,  compatible	drivers supporting the kernel terminal
       emulator 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 driver is compatible
		      with   the   console				kernel
		      framebuffer interface.

SunOS 5.11			  28 Oct 2009			 visual_io(7I)
[top]

List of man pages available for OpenIndiana

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net