#include <sys/types.h>
#include <sys/kmem.h>
#include <sys/mutex.h>
#include <sys/ddi.h>
#include <sys/types.h>
#include <sys/mkdev.h>
#include <sys/param.h>
#include <inet/common.h>
typedef struct inet_arena {
vmem_t *ineta_arena;
minor_t ineta_maxminor;
} inet_arena_t;
void *
inet_minor_create(char *name, dev_t min_dev, dev_t max_dev, int kmflags)
{
inet_arena_t *arena = kmem_alloc(sizeof (inet_arena_t), kmflags);
if (arena != NULL) {
arena->ineta_maxminor = max_dev;
arena->ineta_arena = vmem_create(name,
(void *)min_dev, arena->ineta_maxminor - min_dev + 1,
1, NULL, NULL, NULL, 1, kmflags | VMC_IDENTIFIER);
if (arena->ineta_arena == NULL) {
kmem_free(arena, sizeof (inet_arena_t));
arena = NULL;
}
}
return (arena);
}
void
inet_minor_destroy(void *a)
{
inet_arena_t *arena = (inet_arena_t *)a;
if (arena != NULL) {
vmem_destroy(arena->ineta_arena);
kmem_free(arena, sizeof (inet_arena_t));
}
}
dev_t
inet_minor_alloc(void *arena)
{
return ((dev_t)vmem_alloc(((inet_arena_t *)arena)->ineta_arena,
1, VM_NOSLEEP));
}
void
inet_minor_free(void *arena, dev_t dev)
{
ASSERT((dev != OPENFAIL) && (dev != 0) && (dev <= MAXMIN));
vmem_free(((inet_arena_t *)arena)->ineta_arena, (void *)dev, 1);
}
void
inet_freemsg(mblk_t *mp)
{
mblk_t *bp = mp;
for (; bp != NULL; bp = bp->b_cont) {
bp->b_prev = NULL;
bp->b_next = NULL;
}
freemsg(mp);
}