ddi_model_convert_from man page on Solaris

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

ddi_model_convert_from(9FKernel Functions for Driverddi_model_convert_from(9F)

NAME
       ddi_model_convert_from - determine data model type mismatch

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

	uint_tddi_model_convert_from(uint_t model);

INTERFACE LEVEL
       Solaris DDI specific (Solaris DDI).

PARAMETERS
       model	       The data model type of the current thread.

DESCRIPTION
       ddi_model_convert_from()	 is  used  to  determine if the current thread
       uses a different C Language Type Model  than  the  device  driver.  The
       64-bit  version of Solaris will require a 64-bit kernel to support both
       64-bit and 32-bit user mode programs. The difference between  a	32-bit
       program	and a 64-bit program is in its C Language Type Model: a 32-bit
       program is ILP32 (integer, longs, and pointers are 32-bit) and a 64-bit
       program	is LP64 (longs and pointers are 64-bit). There are a number of
       driver entry points such as ioctl(9E) and mmap(9E) where it  is	neces‐
       sary  to identify the C Language Type Model of the user-mode originator
       of an kernel event. For example any data which flows  between  programs
       and  the	 device driver or vice versa need to be identical in format. A
       64-bit device driver may need to modify the format of the  data	before
       sending it to a 32-bit application. ddi_model_convert_from() is used to
       determine if data that is passed between	 the  device  driver  and  the
       application requires reformatting to any non-native data model.

RETURN VALUES
       DDI_MODEL_ILP32		       A  conversion  to/from  ILP32 is neces‐
				       sary.

       DDI_MODEL_NONE		       No  conversion  is  necessary.  Current
				       thread  and  driver  use	 the same data
				       model.

CONTEXT
       ddi_model_convert_from() can be called from any context.

EXAMPLES
       Example 1: : Using ddi_model_convert_from() in the ioctl() entry	 point
       to support both 32-bit and 64-bit applications.

       The  following is an example how to use ddi_model_convert_from() in the
       ioctl() entry point to support both 32-bit and 64-bit applications.

       struct passargs32 {
	       int len;
	       caddr32_t addr;
       };

       struct passargs {
	       int len;
	       caddr_t addr;
       };
       xxioctl(dev_t dev, int cmd, intptr_t arg, int mode,
	   cred_t *credp, int *rvalp) {
	       struct passargs pa;

	       switch (ddi_model_convert_from(mode & FMODELS)) {
		   case DDI_MODEL_ILP32:
		   {
		       struct passargs32 pa32;

		       ddi_copyin(arg, &pa32, sizeof (struct passargs32), mode);
		       pa.len = pa32.len;
		       pa.address = pa32.address;
		       break;
		   }
		   case DDI_MODEL_NONE:
		       ddi_copyin(arg, &pa, sizeof (struct passargs), mode);
		       break;
	       }

	       do_ioctl(&pa);
	       ....
       }

SEE ALSO
       ioctl(9E), mmap(9E), ddi_mmap_get_model(9F)

       Writing Device Drivers

SunOS 5.10			  8 Feb 2001	    ddi_model_convert_from(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