DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 
SCO OpenServer

vas(D3oddi)


vas: vasbind, vasmalloc, vasmapped, vasunbind -- virtual address space memory function

vasbind- bind a specified virtual address to a physical address

vasmalloc- allocate virtual memory

vasmapped- determine if mapping is in place for specified memory range

vasunbind- undo a mapping

Synopsis

int vasbind(paddr_t paddr, caddr_t vaddr, unsigned int nbytes);

caddr_t vasmalloc(paddr_t paddr, unsigned int nbytes);

caddr_t vasmapped(paddr_t paddr, unsigned int nbytes);

int vasunbind(caddr_t vaddr, unsigned int nbytes);

Description

These functions allow a driver to map physical memory so that it can be read from or be written to by both a driver and a calling user process.


vasmalloc
Allocate virtual memory.

vasbind
Bind a specified virtual address to a physical address.

vasmapped
Determine if a mapping is already in place for the memory range specified by paddr and nbytes.

vasunbind
Undo a mapping and free the memory pages associated with the mapped region.

These functions are generally used to allow user processes to access video adapter memory directly. Memory that has been mapped using these functions is visible to the kernel and to a calling process. However, the mapping is not globally visible to all processes.

Arguments

Not specifying this argument is not permissible.

paddr
set to 0 (zero) in code written for SCO OpenServer. vasmalloc( ) returns an address to virtual user memory; no actual physical memory is allocated by this function for SCO OpenServer systems.


vaddr
specifies the virtual address to bind to or unbind from physical memory.

nbytes
specifies the number of bytes of memory to allocate, bind, or unbind. For vasmalloc, nbytes can be specified as 1 to allocate 4MB, although a value less than 0x1 or greater than 0x400000 will cause vasmalloc to return a NULL pointer.

Return values

vasbind returns -1 if an error occurs (that is, if a region could not be allocated, could not be attached to the user process or could not be grown to the required size) or if an error is found in u.u_error.

vasmalloc returns a virtual address, which will be set to NULL if the nbytes parameter was invalid.

vasunbind returns -1 if the virtual address could not be found.

vasmapped returns the virtual address at which the supplied physical address is bound, or a NULL pointer if the physical address is not bound.

Usage

vasmalloc allocates virtual memory. Use this function to obtain virtual address space that is not currently in use. vasmalloc can only allocate 4 megabytes of virtual address space on each call. A call to vasmalloc is usually preceded by a call to vasmapped to see if the physical memory has already been mapped, and followed by a call to vasbind to bind the virtual to the physical address.

vasbind binds a specified virtual address to a physical address. This function ensures that a problem will not occur with the bound memory being swapped out, causing a page fault and panic in the kernel. This function is normally used to bind the virtual address returned by vasmalloc to physical memory. Before using vasbind, vasmapped should be used to determine if the physical memory range required has already been mapped for the calling process.

Note that although vasmalloc returns the address to a free area of 4MB of user virtual memory, the size of the area of physical memory associated with that pointer by vasbind, using the parameter nbytes, may be any value between 1 byte and 4MB.

When vasbind completes, the driver must pass the virtual address returned by vasmalloc back to the user process using copyout(D3oddi) or another similar function. Calls to vasbind must not specify an address in the text, data, or shared data segments of a user process.

The upper limit for user virtual memory is set by the constant KVBASE (defined in <sys/immu.h>); kernel virtual address space lies above KVBASE. The virtual address supplied to vasbind must be in user virtual memory (below KVBASE), and must not be in use by the current process.

Context and synchronization

User context

Hardware applicability

All.

Version applicability

oddi: 1, 2, 2mp, 3, 3mp, 4, 4mp, 5, 5mp, 6, 6mp

Differences between versions

For XENIX systems, the paddr argument gives the physical address at which the specified virtual address is to be bound. When calling vasbind, paddr can be set to -1 to indicate that the requested user virtual memory is to be allocated from the kernel free memory pool or ``heap.'' The physical address supplied to vasbind is usually a memory-mapped I/O address.

SVR5 DDI compatibility

These functions are not supported for DDI drivers. See ``Memory allocation'' in HDK Technical Reference for information about allocating and mapping memory for DDI drivers and current ODDI drivers.

References

copyout(D3oddi), memget(D3oddi), sptalloc(D3oddi), video(D3oddi)

``Memory allocation'' in HDK Technical Reference


19 June 2005
© 2005 The SCO Group, Inc. All rights reserved.
OpenServer 5 HDK - June 2005