| Current File : //usr/share/man/man9f/ddi_mmap_get_model.9f |
'\" te
.\" Copyright (c) 2001 Sun Microsystems, Inc. All Rights Reserved.
.TH ddi_mmap_get_model 9F "8 Feb 2001" "SunOS 5.11" "Kernel Functions for Drivers"
.SH NAME
ddi_mmap_get_model \- return data model type of current thread
.SH SYNOPSIS
.LP
.nf
#include <sys/ddi.h>
#include <sys/sunddi.h>
\fBuint_t\fR \fBddi_mmap_get_model\fR(\fBvoid\fR);
.fi
.SH INTERFACE LEVEL
.sp
.LP
Solaris DDI specific (Solaris DDI).
.SH DESCRIPTION
.sp
.LP
\fBddi_mmap_get_model()\fR returns the \fIC\fR Language Type Model which the current thread expects. \fBddi_mmap_get_model()\fR is used in combination with \fBddi_model_convert_from\fR(9F) in the \fBmmap\fR(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.
.SH RETURN VALUES
.sp
.ne 2
.mk
.na
\fB\fBDDI_MODEL_ILP32\fR \fR
.ad
.RS 20n
.rt
Current thread expects 32-bit \fI(ILP32)\fR semantics.
.RE
.sp
.ne 2
.mk
.na
\fB\fBDDI_MODEL_LP64\fR \fR
.ad
.RS 20n
.rt
Current thread expects 64-bit \fI(LP64)\fR semantics.
.RE
.sp
.ne 2
.mk
.na
\fB\fBDDI_FAILURE\fR \fR
.ad
.RS 20n
.rt
The \fBddi_mmap_get_model()\fR function was not called from the \fBmmap\fR(9E) entry point.
.RE
.SH CONTEXT
.sp
.LP
The \fBddi_mmap_get_model()\fR function can only be called from the \fBmmap\fR(9E) driver entry point.
.SH EXAMPLES
.LP
\fBExample 1 \fR: Using \fBddi_mmap_get_model()\fR
.sp
.LP
The following is an example of the \fBmmap\fR(9E) entry point and how to support 32-bit and 64-bit applications with the same device driver.
.sp
.in +2
.nf
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 */
\&.\|.\|.
}
.fi
.in -2
.SH SEE ALSO
.sp
.LP
\fBmmap\fR(9E), \fBddi_model_convert_from\fR(9F)
.sp
.LP
\fIWriting Device Drivers for Oracle Solaris 11.2\fR