devmap_load man page on Solaris

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

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

NAME
       devmap_unload,  devmap_load  -  control	validation  of	memory address
       translations

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

       int devmap_load(devmap_cookie_t dhp, offset_t off, size_t  len,	uint_t
       type, uint_t rw);

       int devmap_unload(devmap_cookie_t dhp, offset_t off, size_t len);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

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

       off	User offset within the logical	device	memory	at  which  the
		loading or unloading of the address translations begins.

       len	Length (in bytes) of the range being affected.

   devmap_load() only
       type	Type of access operation.

       rw	Direction of access.

DESCRIPTION
       devmap_unload() and devmap_load() are used to control the validation of
       the  memory  mapping  described	by  dhp	 in   the   specified	range.
       devmap_unload()	invalidates the mapping translations and will generate
       calls to the devmap_access(9E) entry point next	time  the  mapping  is
       accessed.  The drivers use devmap_load() to validate the mapping transā€
       lations during memory access.

       A typical use of devmap_unload() and devmap_load() is in	 the  driver's
       context	management callback function, devmap_contextmgt(9E). To manage
       a device context, a device driver calls devmap_unload() on the  context
       about  to  be  switched	out.  It  switches  contexts,  and  then calls
       devmap_load() on the context switched in.   devmap_unload() can be used
       to  unload  the	mappings of other processes as well as the mappings of
       the calling process, but devmap_load() can only be  used	 to  load  the
       mappings	 of  the calling process. Attempting to load another process's
       mappings with devmap_load() will result in a system panic.

       For both routines, the range to be affected is defined by the  off  and
       len  arguments.	Requests affect the entire page containing the off and
       all pages up to and including the page  containing  the	last  byte  as
       indicated  by  off + len. The arguments type and rw are provided by the
       system to the calling function (for example, devmap_contextmgt(9E)) and
       should not be modified.

       Supplying a value of  0 for the len argument affects all addresses from
       the off to the end of the mapping.  Supplying a value of 0 for the  off
       argument	 and a value of 0 for len argument affect all addresses in the
       mapping.

       A non-zero return value from either  devmap_unload()  or	 devmap_load()
       will  cause the corresponding operation to fail. The failure may result
       in a SIGSEGV or SIGBUS signal being delivered to the process.

RETURN VALUES
       0	       Successful completion.

       Non-zero	       An error occurred.

CONTEXT
       These routines can be called from user or kernel context only.

EXAMPLES
       Example 1: Managing a One-Page Device Context

       The following shows an example of managing a device context that is one
       page in length.

       struct xx_context cur_ctx;

       static int
       xxdevmap_contextmgt(devmap_cookie_t dhp, void *pvtp, offset_t off,
	  size_t len, uint_t type, uint_t rw)
       {
	   int err;
	   devmap_cookie_t cur_dhp;
	   struct xx_pvt *p;
	   struct xx_pvt *pvp = (struct xx_pvt *)pvtp;
	   /* enable access callbacks for the current mapping */
	   if (cur_ctx != NULL && cur_ctx != pvp->ctx) {
	       p = cur_ctx->pvt;
	       /*
		* unload the region from off to the end of the mapping.
		*/
	       cur_dhp = p->dhp;
	       if ((err = devmap_unload(cur_dhp, off, len)) != 0)
		   return (err);
	   }
	   /* Switch device context - device dependent*/
	   ...
	   /* Make handle the new current mapping */
	   cur_ctx = pvp->ctx;
	   /*
	    * Disable callbacks and complete the access for the
	    * mapping that generated this callback.
	    */
	   return (devmap_load(pvp->dhp, off, len, type, rw));
       }

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

       Writing Device Drivers

SunOS 5.10			  22 Jan 1997		     devmap_unload(9F)
[top]

List of man pages available for Solaris

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