User Tools

Site Tools


solaris:ddi_mmap_get_model.9f

ddi_mmap_get_model


NAME

ddi_mmap_get_model - return data model type of current thread

SYNOPSIS

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

uint_t ddi_mmap_get_model(void);

INTERFACE LEVEL

Solaris DDI specific (Solaris DDI).

DESCRIPTION

ddi_mmap_get_model() returns the C Language Type Model which the current thread expects. ddi_mmap_get_model() is used in combination with ddi_model_convert_from(9F) in the mmap(9E) driver entry point to determine whether there is a data model mismatch between the current thread and the device driver. The device driver might have to adjust the shape of data structures before exporting them to a user thread which supports a different data model.

RETURN VALUES

DDI_MODEL_ILP32

Current thread expects 32-bit (ILP32) semantics.

DDI_MODEL_LP64

Current thread expects 64-bit (LP64) semantics.

DDI_FAILURE

The ddi_mmap_get_model() function was not called from the mmap(9E) entry point.

CONTEXT

The ddi_mmap_get_model() function can only be called from the mmap(9E) driver entry point.

EXAMPLES

Example 1 : Using ddi_mmap_get_model()

The following is an example of the mmap(9E) entry point and how to support 32-bit and 64-bit applications with the same device driver.

struct data32 {
int len;
caddr32_t addr;
};

struct data {
int len;
caddr_t addr;
};
xxmmap(dev_t dev, off_t off, int prot) {
struct data dtc; /* a local copy for clash resolution */
struct data *dp = (struct data *)shared_area;

switch (ddi_model_convert_from(ddi_mmap_get_model())) {
case DDI_MODEL_ILP32:
{
struct data32 *da32p;

da32p = (struct data32 *)shared_area;
dp = &dtc;
dp→len = da32p→len;
dp→address = da32→address;
break;
}
case DDI_MODEL_NONE:
break;
}
/* continues along using dp */

}

SEE ALSO

mmap(9E), ddi_model_convert_from(9F)

Writing Device Drivers in Oracle Solaris 11.4


solaris/ddi_mmap_get_model.9f.txt · Last modified: 2023/07/19 08:57 by A User Not Logged in