id32_alloc man page on SmartOS

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

ID32_ALLOC(9F)							ID32_ALLOC(9F)

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

       #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);

       Solaris architecture specific (Solaris DDI).

		any valid 32- or 64-bit pointer

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

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

       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

       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.

       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.


       Writing Device Drivers

				 Dec 12, 2001			ID32_ALLOC(9F)

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]
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