The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

ddi_model_convert_from (9)
  • >> ddi_model_convert_from (9) ( Solaris man: Ядро )
  •  

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


     

    Index

    NAME
    SYNOPSIS
    INTERFACE LEVEL
    PARAMETERS
    DESCRIPTION
    RETURN VALUES
    CONTEXT
    EXAMPLES
    SEE ALSO


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру