id32_lookup man page on SmartOS

Printed from http://www.polarhome.com/service/man/?qf=id32_lookup&af=0&tf=2&of=SmartOS

ID32_ALLOC(9F)							ID32_ALLOC(9F)

NAME
       id32_alloc,  id32_free,	id32_lookup - 32-bit driver ID management rou‐
       tines

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

       uint32_t id32_alloc(void *ptr, int flag);

       void id32_free(uint32_t token);

       void *id32_lookup(uint32_t token);

INTERFACE LEVEL
       Solaris architecture specific (Solaris DDI).

PARAMETERS
       ptr
		any valid 32- or 64-bit pointer

       flag
		determines  whether  caller  can   sleep   for	 memory	  (see
		kmem_alloc(9F) for a description)

DESCRIPTION
       These  routines	were originally developed so that device drivers could
       manage 64-bit pointers on devices  that	save  space  only  for	32-bit
       pointers.

       Many  device  drivers  need to pass a 32-bit value to the hardware when
       attempting I/O.	Later, when that  I/O  completes,  the	only  way  the
       driver  has  to	identify  the request that generated that I/O is via a
       "token". When the I/O is initiated, the driver passes this token to the
       hardware.  When	the I/O completes the hardware passes back this 32-bit
       token.

       Before Solaris supported 64-bit pointers, device drivers just passed  a
       raw  32-bit  pointer  to the hardware. When pointers grew to be 64 bits
       this was no longer possible. The id32_*() routines were created to help
       drivers translate between 64-bit pointers and a 32-bit token.

       Given  a	 32-  or  64-bit pointer, the routine id32_alloc() allocates a
       32-bit token, returning 0 if KM_NOSLEEP was specified and memory	 could
       not  be	allocated. The allocated token is passed back to id32_lookup()
       to obtain the original 32- or 64-bit pointer.

       The routine id32_free() is  used	 to  free  an  allocated  token.  Once
       id32_free() is called, the supplied token is no longer valid.

       Note  that  these  routines have some degree of error checking. This is
       done so that an invalid token  passed  to  id32_lookup()	 will  not  be
       accepted	 as  valid.  When  id32_lookup()  detects  an invalid token it
       returns NULL.  Calling routines should check for this return  value  so
       that they do not try to dereference a NULL pointer.

CONTEXT
       These  functions can be called from user or interrupt context. The rou‐
       tine id32_alloc() should not be called from interrupt context when  the
       KM_SLEEP	 flag  is  passed  in.	All  other routines can be called from
       interrupt or kernel context.

SEE ALSO
       kmem_alloc(9F)

       Writing Device Drivers

				 Dec 12, 2001			ID32_ALLOC(9F)
[top]

List of man pages available for SmartOS

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