devmap_do_ctxmgt man page on OpenIndiana

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

devmap_do_ctxmgt(9F)	 Kernel Functions for Drivers	  devmap_do_ctxmgt(9F)

NAME
       devmap_do_ctxmgt - perform device context switching on a mapping

SYNOPSIS
       #include <sys/ddi.h>
       #include <sys/sunddi.h>

       int devmap_do_ctxmgt(devmap_cookie_t dhp, void *pvtp, offset_t off,
	    size_t len, uint_t type,
	    uint_t rw, int (*devmap_contextmgt)devmap_cookie_t,
	    void *, offset_t, size_t, uint_t, uint_t);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

PARAMETERS
       dhp		     An	 opaque mapping handle that the system uses to
			     describe the mapping.

       pvtp		     Driver private mapping data.

       off		     User offset within the logical device  memory  at
			     which the access begins.

       len		     Length (in bytes) of the memory being accessed.

       devmap_contextmgt     The  address  of  driver function that the system
			     will call to perform context switching on a  map‐
			     ping. See devmap_contextmgt(9E) for details.

       type		     Type    of	  access   operation.	 Provided   by
			     devmap_access(9E). Should not be modified.

       rw		     Direction	   of	  access.      Provided	    by
			     devmap_access(9E). Should not be modified.

DESCRIPTION
       Device  drivers	call devmap_do_ctxmgt() in the devmap_access(9E) entry
       point   to   perform   device   context	 switching   on	  a   mapping.
       devmap_do_ctxmgt() passes a pointer to a driver supplied callback func‐
       tion, devmap_contextmgt(9E), to the system that will perform the actual
       device  context	switching.   If	 devmap_contextmgt(9E)	is not a valid
       driver callback function, the system will fail the memory access opera‐
       tion which will result in a SIGSEGV or SIGBUS signal being delivered to
       the process.

       devmap_do_ctxmgt() performs context switching  on  the  mapping	object
       identified  by  dhp and pvtp in the range specified by off and len. The
       arguments dhp, pvtp, type, and rw are provided by the devmap_access(9E)
       entry  point  and  must	not be modified. The range from off to off+len
       must support context switching.

       The system will pass through dhp, pvtp, off,   len,  type,  and	rw  to
       devmap_contextmgt(9E)  in  order	 to  perform the actual device context
       switching.   The	 return	 value	from  devmap_contextmgt(9E)  will   be
       returned directly to devmap_do_ctxmgt().

RETURN VALUES
       0	   Successful completion.

       Non-zero	   An error occurred.

CONTEXT
       devmap_do_ctxmgt()  must	 be called from the driver's devmap_access(9E)
       entry point.

EXAMPLES
       Example 1 Using devmap_do_ctxmgt in the devmap_access entry point.

       The following shows an  example	of  using  devmap_do_ctxmgt()  in  the
       devmap_access(9E) entry point.

	 ...
	 #define OFF_DO_CTXMGT	0x40000000
	 #define OFF_NORMAL	0x40100000
	 #define CTXMGT_SIZE	0x100000
	 #define NORMAL_SIZE	0x100000

	 /*
	  * Driver devmap_contextmgt(9E) callback function.
	  */
	 static int
	 xx_context_mgt(devmap_cookie_t dhp, void *pvtp, offset_t offset,
	     size_t length, uint_t type, uint_t rw)
	 {
	     ......
	     /*
	      * see devmap_contextmgt(9E) for an example
	      */
	 }

	 /*
	  * Driver devmap_access(9E) entry point
	  */
	 static int
	 xxdevmap_access(devmap_cookie_t dhp, void *pvtp, offset_t off,
	     size_t len, uint_t type, uint_t rw)
	 {
	     offset_t diff;
	     int err;

	     /*
	      * check if off is within the range that supports
	      * context management.
	      */
	     if ((diff = off - OFF_DO_CTXMG) >= 0 && diff < CTXMGT_SIZE) {
		 /*
		  * calculates the length for context switching
		  */
		 if ((len + off) > (OFF_DO_CTXMGT + CTXMGT_SIZE))
		     return (-1);
		 /*
		  * perform context switching
		  */
		 err = devmap_do_ctxmgt(dhp, pvtp, off, len, type,
			     rw, xx_context_mgt);
	     /*
	      * check if off is within the range that does normal
	      * memory mapping.
	      */
	     } else if ((diff = off - OFF_NORMAL) >= 0 && diff < NORMAL_SIZE) {
		 if ((len + off) > (OFF_NORMAL + NORMAL_SIZE))
		     return (-1);
		 err = devmap_default_access(dhp, pvtp, off, len, type, rw);
	     } else
		 return (-1);

	     return (err);
	 }

SEE ALSO
       devmap_access(9E), devmap_contextmgt(9E), devmap_default_access(9F)

       Writing Device Drivers

SunOS 5.11			  22 Jan 1997		  devmap_do_ctxmgt(9F)
[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