svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
devmap_umem_setup(9f)
devmap_devmem_setup(9F) Kernel Functions devmap_devmem_setup(9F)
NAME
devmap_devmem_setup, devmap_umem_setup - set driver memory mapping
parameters
SYNOPSIS
#include <sys/ddi.h>
#include <sys/sunddi.h>
int devmap_devmem_setup(devmap_cookie_t dhp, dev_info_t *dip,
struct devmap_callback_ctl *callbackops, uint_t rnumber,
offset_t roff, size_t len, uint_t maxprot,
uint_t flags, ddi_device_acc_attr_t *accattrp);
int devmap_umem_setup(devmap_cookie_t dhp, dev_info_t *dip,
struct devmap_callback_ctl *callbackops, ddi_umem_cookie_t cookie,
offset_t koff, size_t len, uint_t maxprot, uint_t flags,
ddi_device_acc_attr_t *accattrp);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI).
PARAMETERS
devmap_devmem_setup() parameters:
dhp
An opaque mapping handle that the system uses to describe the map‐
ping.
dip
Pointer to the device's dev_info structure.
callbackops
Pointer to a devmap_callback_ctl(9S) structure. The structure con‐
tains pointers to device driver-supplied functions that manage
events on the device mapping. The framework will copy the structure
to the system private memory.
rnumber
Index number to the register address space set.
roff
Offset into the register address space.
len
Length (in bytes) of the mapping to be mapped.
maxprot
Maximum protection flag possible for attempted mapping. Some combi‐
nations of possible settings are:
PROT_READ Read access is allowed.
PROT_WRITE Write access is allowed.
PROT_EXEC Execute access is allowed.
PROT_USER User-level access is allowed. The mapping is done as
a result of a mmap(2) system call.
PROT_ALL All access is allowed.
flags
Used to determine the cache attribute.
Possible values of the cache attribute are:
IOMEM_DATA_CACHED
The CPU can cache the data it fetches and push it to memory at
a later time. This is the default attribute that is used if no
cache attributes are specified.
IOMEM_DATA_UC_WR_COMBINE
The CPU never caches the data, but writes can occur out of
order or can be combined. Reordering is implied.
If IOMEM_DATA_UC_WR_COMBINE is specified but not supported,
IOMEM_DATA_UNCACHED is used instead.
IOMEM_DATA_UNCACHED
The CPU never caches data, but has uncacheable access to mem‐
ory. Strict ordering is implied.
The cache attributes are mutually exclusive. Any combination of the
values leads to a failure. On the SPARC architecture, only
IOMEM_DATA_CACHED is meaningful. Others lead to a failure.
accattrp
Pointer to a ddi_device_acc_attr() structure of the device. See
ddi_device_acc_attr(9S). The value in devacc_attr_dataorder is
ignored in the current release. The value in
devacc_attr_endian_flags is meaningful on the SPARC architecture
only.
devmap_umem_setup() parameters:
dhp
An opaque data structure that the system uses to describe the map‐
ping.
dip
Pointer to the device's dev_info structure.
callbackops
Pointer to a devmap_callback_ctl(9S) structure. The structure con‐
tains pointers to device driver-supplied functions that manage
events on the device mapping.
cookie
A kernel memory cookie (see ddi_umem_alloc(9F)).
koff
Offset into the kernel memory defined by cookie.
len
Length (in bytes) of the mapping to be mapped.
maxprot
Maximum protection flag possible for attempted mapping. Some combi‐
nations of possible settings are:
PROT_READ Read access is allowed.
PROT_WRITE Write access is allowed.
PROT_EXEC Execute access is allowed.
PROT_USER User-level access is allowed (the mapping is being
done as a result of a mmap(2) system call).
PROT_ALL All access is allowed.
flags
Must be set to 0.
accattrp
Pointer to a ddi_device_acc_attr(9S) structure. Ignored in the cur‐
rent release. Reserved for future use.
DESCRIPTION
The devmap_devmem_setup() and devmap_umem_setup() functions are used in
the devmap(9E) entry point to pass mapping parameters from the driver
to the system.
The dhp argument specifies a device mapping handle that the system uses
to store all mapping parameters of a physical contiguous memory. The
system copies the data pointed to by callbackops to a system private
memory. This allows the driver to free the data after returning from
either devmap_devmem_setup() or devmap_umem_setup(). The driver is
notified of user events on the mappings via the entry points defined by
devmap_callback_ctl(9S). The driver is notified of the following user
events:
Mapping Setup User has called mmap(2) to create a mapping to the
device memory.
Access User has accessed an address in the mapping that has
no translations.
Duplication User has duplicated the mapping. Mappings are dupli‐
cated when the process calls fork(2).
Unmapping User has called munmap(2) on the mapping or is exit‐
ing, exit(2).
See devmap_map(9E), devmap_access(9E), devmap_dup(9E), and
devmap_unmap(9E) for details on these entry points.
By specifying a valid callbackops to the system, device drivers can
manage events on a device mapping. For example, the devmap_access(9E)
entry point allows the drivers to perform context switching by unload‐
ing the mappings of other processes and to load the mapping of the
calling process. Device drivers may specify NULL to callbackops which
means the drivers do not want to be notified by the system.
The maximum protection allowed for the mapping is specified in maxprot.
accattrp defines the device access attributes. See
ddi_device_acc_attr(9S) for more details.
devmap_devmem_setup() is used for device memory to map in the register
set given by rnumber and the offset into the register address space
given by roff. The system uses rnumber and roff to go up the device
tree to get the physical address that corresponds to roff. The range to
be affected is defined by len and roff. The range from roff to roff +
len must be a physical contiguous memory and page aligned.
Drivers use devmap_umem_setup() for kernel memory to map in the kernel
memory described by cookie and the offset into the kernel memory space
given by koff. cookie is a kernel memory pointer obtained from
ddi_umem_alloc(9F). If cookie is NULL, devmap_umem_setup() returns -1.
The range to be affected is defined by len and koff. The range from
koff to koff + len must be within the limits of the kernel memory
described by koff + len and must be page aligned.
Drivers use devmap_umem_setup() to export the kernel memory allocated
by ddi_umem_alloc(9F) to user space. The system selects a user virtual
address that is aligned with the kernel virtual address being mapped to
avoid cache incoherence if the mapping is not MAP_FIXED.
RETURN VALUES
0 Successful completion.
-1 An error occurred.
CONTEXT
devmap_devmem_setup() and devmap_umem_setup() can be called from user,
kernel, and interrupt context.
SEE ALSO
exit(2), fork(2), mmap(2), munmap(2), devmap(9E), ddi_umem_alloc(9F),
ddi_device_acc_attr(9S), devmap_callback_ctl(9S)
Writing Device Drivers in Oracle Solaris 11.4
Oracle Solaris 11.4 05 Jun 2006 devmap_devmem_setup(9F)