esballoc - STREAMS: Allocates a message block with a
shared buffer
#include <sys/stream.h>
mblk_t * esballoc(
unsigned char *base,
int size,
int pri,
frtn_t *free_rtnp );
Specifies the address of the user-supplied data buffer.
Specifies the number of bytes in the data buffer. Specifies
the priority of the allocation request (to be used by
the allocb interface, which esballoc calls). Specifies
the free interface (routine) data structure.
The esballoc interface creates a STREAMS message and
attaches a user-supplied data buffer in place of a STREAMS
data buffer. The interface calls allocb to obtain a message
and data block header. The user-supplied data buffer,
pointed to by the base argument, is used as the data
buffer for the message.
The free_rtn structure is referenced by the dp_freep member
of the datab structure. When the freeb interface is
called to free the message, the driver's message free
interface (referenced through the free_rtn structure) is
called, with arguments, to free the data buffer.
The free_rtn structure is defined as follows:
/* Free return structure for esballoc */ typedef struct
free_rtn {
void (*free_func)(char *, char *); /* Interface to
free buffer */
char * free_arg; /* Parameter to
free_func */ } frtn_t;
Instead of requiring a specific number of arguments, the
free_arg member is of type char *. This way, the driver
can pass a pointer to a structure if more than one argument
is needed.
The free_func interface must be defined in kernel space
and should be declared void. It has no user context and
must not sleep.
Upon successful completion, the esballoc interface returns
a pointer to the newly allocated message block. This message
block is of type struct msgb *. The msgb data structure
is defined in the /usr/sys/include/sys/stream.h file.
On failure, esballoc returns a NULL pointer.
Kernel Interfaces: allocb(9r), freeb(9r)
Programmer's Guide: STREAMS
esballoc(9r)
[ Back ] |