ddi_model_convert_from man page on SmartOS

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

DDI_MODEL_CONVERT_FROM(9F)			    DDI_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 necessary.

       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

				  Feb 8, 2001	    DDI_MODEL_CONVERT_FROM(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