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

db_alloc(D3oddi)


db_alloc, db_free -- allocate and free physically contiguous memory

Synopsis

   #include <sys/devbuf.h>
   

int db_alloc(struct devbuf *dv);

int db_free(struct devbuf *dv)

Description

db_alloc allocates physically contiguous memory necessary for performing DMA transfers. It was used by tape drives and other devices tha need large amounts of memory for buffers.

db_free releases the previously allocated memory.

Arguments


dv
Pointer to a devbuf structure, defined in the <sys/devbuf.h> header file as:
   struct devbuf {
   	paddr_t	bufptr;		/* pointer to start of buffer */
   	paddr_t	bufend;		/* pointer to end of buffer   */
   	long 	size;		/* size of buffer             */
   	paddr_t	head;		/* put buffer data here       */
   	paddr_t	tail;		/* get buffer data here       */
   }
Except for size, all members of the devbuf structure are read-only. Set the size member of the devbuf structure to the block size required before calling db_alloc.

Return values

db_alloc returns zero (0) if no memory is available; otherwise, 1 is returned.

db_free always returns zero (0).

Usage

Use the db_read(D3oddi) and db_write(D3oddi) functions to read from and write to memory areas allocated with db_alloc(D3oddi).

Context and synchronization

User or blockable context.

Hardware applicability

All

Version applicability

oddi: 1, 2

Differences between versions

Current drivers should call the getcpages(D3oddi) function to allocate DMAable memory. See ``Memory allocation'' in HDK Technical Reference for a list of other facilities that can be used to allocate memory.

SVR5 DDI compatibility

This function is not supported in DDI. Instead, populate a physreq(D4) structure, call the physreq_alloc(D3) and physreq_prep(D3) functions to allocate and prepare the physreq structure, then allocate the memory with kmem_alloc_phys(D3), kmem_alloc_physreq(D3), or kmem_zalloc_physreq(D3) function. See ``Memory allocation'' in HDK Technical Reference for more information about DDI facilities for allocating memory.

References

db_read(D3oddi), db_write(D3oddi)

``Memory allocation'' in HDK Technical Reference

Examples

The following example allocates a single 120K buffer:
   struct devbuf dv;
   dv.size = (long) (120 * 1024);  /* 120K bytes */
   if (db_alloc(&dv) == 0) {
           cmn_err(CE_NOTE, "db_alloc failed");
           return(-1);
   }
   

The following example releases previously allocated memory:
   struct devbuf dv;
   db_free(&dv);

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