1*4c27a833SDavid van Moolenbroek /* libsockevent - sockevent_proc.c - process suspension state management */ 2*4c27a833SDavid van Moolenbroek 3*4c27a833SDavid van Moolenbroek #include <minix/drivers.h> 4*4c27a833SDavid van Moolenbroek #include <minix/sockdriver.h> 5*4c27a833SDavid van Moolenbroek 6*4c27a833SDavid van Moolenbroek #include "sockevent_proc.h" 7*4c27a833SDavid van Moolenbroek 8*4c27a833SDavid van Moolenbroek static struct sockevent_proc sockevent_procs[NR_PROCS]; 9*4c27a833SDavid van Moolenbroek static struct sockevent_proc *sockevent_freeprocs; 10*4c27a833SDavid van Moolenbroek 11*4c27a833SDavid van Moolenbroek /* 12*4c27a833SDavid van Moolenbroek * Initialize the process suspension table. 13*4c27a833SDavid van Moolenbroek */ 14*4c27a833SDavid van Moolenbroek void sockevent_proc_init(void)15*4c27a833SDavid van Moolenbroeksockevent_proc_init(void) 16*4c27a833SDavid van Moolenbroek { 17*4c27a833SDavid van Moolenbroek unsigned int slot; 18*4c27a833SDavid van Moolenbroek 19*4c27a833SDavid van Moolenbroek for (slot = 0; slot < __arraycount(sockevent_procs); slot++) { 20*4c27a833SDavid van Moolenbroek sockevent_procs[slot].spr_next = sockevent_freeprocs; 21*4c27a833SDavid van Moolenbroek sockevent_freeprocs = &sockevent_procs[slot]; 22*4c27a833SDavid van Moolenbroek } 23*4c27a833SDavid van Moolenbroek } 24*4c27a833SDavid van Moolenbroek 25*4c27a833SDavid van Moolenbroek /* 26*4c27a833SDavid van Moolenbroek * Allocate and return a new socket process suspension entry. Return NULL if 27*4c27a833SDavid van Moolenbroek * no entries are available. 28*4c27a833SDavid van Moolenbroek */ 29*4c27a833SDavid van Moolenbroek struct sockevent_proc * sockevent_proc_alloc(void)30*4c27a833SDavid van Moolenbroeksockevent_proc_alloc(void) 31*4c27a833SDavid van Moolenbroek { 32*4c27a833SDavid van Moolenbroek struct sockevent_proc *spr; 33*4c27a833SDavid van Moolenbroek 34*4c27a833SDavid van Moolenbroek if ((spr = sockevent_freeprocs) == NULL) 35*4c27a833SDavid van Moolenbroek return NULL; 36*4c27a833SDavid van Moolenbroek 37*4c27a833SDavid van Moolenbroek sockevent_freeprocs = spr->spr_next; 38*4c27a833SDavid van Moolenbroek spr->spr_next = NULL; 39*4c27a833SDavid van Moolenbroek 40*4c27a833SDavid van Moolenbroek return spr; 41*4c27a833SDavid van Moolenbroek } 42*4c27a833SDavid van Moolenbroek 43*4c27a833SDavid van Moolenbroek /* 44*4c27a833SDavid van Moolenbroek * Free up a previously allocated socket process suspension entry for reuse. 45*4c27a833SDavid van Moolenbroek */ 46*4c27a833SDavid van Moolenbroek void sockevent_proc_free(struct sockevent_proc * spr)47*4c27a833SDavid van Moolenbroeksockevent_proc_free(struct sockevent_proc * spr) 48*4c27a833SDavid van Moolenbroek { 49*4c27a833SDavid van Moolenbroek 50*4c27a833SDavid van Moolenbroek spr->spr_next = sockevent_freeprocs; 51*4c27a833SDavid van Moolenbroek sockevent_freeprocs = spr; 52*4c27a833SDavid van Moolenbroek } 53