ovbcopy --
copy data between overlapping address locations in the kernel
Synopsis
#include <sys/types.h>
#include <sys/ddi.h>
void ovbcopy(caddr_t from, caddr_t to, size_t bcount);
Description
ovbcopy, like
bcopy(D3),
copies bcount bytes
from one kernel address to another.
However, unlike bcopy,
with ovbcopy
the source address from
and destination address to can overlap.
Arguments
from
Source address from which the copy is made.
to
Destination address to which the copy is made.
bcount
Number of bytes to be copied.
Return values
None
Usage
The source and destination address ranges must both be
within the kernel address space and must be memory resident.
No range checking is done.
Since there is no mechanism by which drivers that conform to the
rules of the DDI can obtain and use a kernel address which is not
memory resident (an address which is paged out),
DDI conforming drivers can assume that any address to which they
have access is memory resident and therefore a valid argument to ovbcopy.
Addresses within user address space are not valid arguments,
and specifying such an address may cause the driver to corrupt the system in an
unpredictable way.
For copying between kernel and user space, drivers must use
an appropriate function defined for that purpose (for example,
copyin(D3),
copyout(D3),
uiomove(D3),
ureadc(D3),
or
uwritec(D3)).