|
KSEG_TO_PHYS(9r)
Contents
|
KSEG_TO_PHYS - General: Converts a kernel-unmapped virtual
address to a physical address
vm_offset_t KSEG_TO_PHYS(
vm_offset_t addr );
Specifies the buffer virtual address to convert to a physical
address.
The KSEG_TO_PHYS routine converts a kernel-unmapped virtual
address to a kernel physical address. Device drivers
can use this physical address in DMA operations. Prior to
calling KSEG_TO_PHYS, device driver writers often call one
of the following routines to determine whether the address
passed is a virtual address in the addressed kernel segment:
IS_KSEG_VA
Determines if the specified address is located in
the kernel-unmapped address space. IS_SEG0_VA
Determines if the specified address is located in
the user-mapped address space. IS_SEG1_VA
Determines if the specified address is located in
the kernel-mapped address space.
Upon successful completion, KSEG_TO_PHYS returns the physical
address.
The following code fragment shows a call to KSEG_TO_PHYS:
. . .
caddr_t virt_addr; [1] unsigned phys_addr; [2]
. . .
if(IS_KSEG_VA(virt_addr)) { [3]
phys_addr = KSEG_TO_PHYS(virt_addr); [4]
. . .
Declares a variable to store the user buffer's virtual
address. Declares a variable to store the physical
address returned by KSEG_TO_PHYS. Before calling
KSEG_TO_PHYS, calls IS_KSEG_VA to determine if the virtual
address is from the kernel-unmapped address space. If the
virtual address is from the kernel-unmapped address space,
then calls KSEG_TO_PHYS to convert the address to a corresponding
physical address.
Routines: IS_KSEG_VA(9r), PHYS_TO_KSEG(9r)
KSEG_TO_PHYS(9r)
[ Back ] |