OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/drivers/sdli/cdi_mod.c#ident "@(#) $RCSfile: cdi_mod.c,v $ $Name: $($Revision: 0.8.2.2 $) $Date: 2003/06/16 09:03:59 $" static char const ident[] = "$RCSfile: cdi_mod.c,v $ $Name: $($Revision: 0.8.2.2 $) $Date: 2003/06/16 09:03:59 $"; #include <linux/config.h> #include <linux/version.h> #ifdef MODVERSIONS #include <linux/modversions.h> #endif #include <linux/module.h> #include <sys/stream.h> #include <sys/strops.h> #include <sys/cmn_err.h> #include <sys/dki.h> #include <sys/cdi.h> #include "../lock.h" #include "../debug.h" #include "../bufq.h" #define CDI_DESCRIP "CDI SIGNALLING DATA LINK (SDL) STREAMS MODULE." #define CDI_COPYRIGHT "Copyright (c) 1997-2002 OpenSS7 Corporation. All Rights Reserved." #define CDI_DEVICE "Part of the OpenSS7 Stack for LiS STREAMS." #define CDI_CONTACT "Brian Bidulock <bidulock@openss7.org>" #define CDI_LICENSE "GPL" #define CDI_BANNER CDI_DESCRIP "\n" \ CDI_COPYRIGHT "\n" \ CDI_DEVICE "\n" \ CDI_CONTACT "\n" MODULE_AUTHOR(CDI_CONTACT); MODULE_DESCRIPTION(CDI_DESCRIP); MODULE_SUPPORTED_DEVICE(CDI_DEVICE); #ifdef MODULE_LICENSE MODULE_LICENSE(CDI_LICENSE); #endif #ifdef LINUX_2_4 #define INT int #else #define INT void #endif /* * ======================================================================= * * Private Structure allocation, deallocation and cache * * ======================================================================= */ STATIC kmem_cache_t *cd_cachep = NULL; STATIC INLINE void cd_init_caches(void) { if (!cd_cachep) if (!(cd_cachep = kmem_find_general_cachep(sizeof(cdi_t), GFP_ATOMIC))) if (! (cd_cachep = kmem_cache_create("cd_cachep", sizeof(cdi_t), 0, SLAB_HWCACHE_ALIGN, NULL, NULL))) panic("%s: Cannot allocate cd_cache\n", __FUNCTION__); return; } STATIC INLINE void cd_term_caches(void) { return; } extern cdi_t *cd_alloc_priv(queue_t * q) { cdi_t *cd; if ((cd = kmem_cache_alloc(cd_cachep, SLAB_ATOMIC))) { MOD_INC_USE_COUNT; bzero(cd, sizeof(*cd)); RD(q)->q_ptr = WR(q)->q_ptr = cd; cd->rq = RD(q); cd->wq = WR(q); cd->version = C_VERSION; cd->i_state = CS_IDLE; cd_init_lock(q); } return (cd); } extern void cd_free_priv(queue_t * q) { cdi_t *cd = CD_PRIV(q); MOD_DEC_USE_COUNT; if (cd->rbid) unbufcall(xchg(&cd->rbid, 0)); if (cd->wbid) unbufcall(xchg(&cd->wbid, 0)); kmem_cache_free(cd_cachep, cd); return; } /* * ======================================================================= * * LiS Module Initialization * * ======================================================================= */ STATIC INLINE void cd_init(void) { int modnum; unless(cd_minfo.mi_idnum, return); cmn_err(CE_NOTE, SDL_BANNER); /* console splash */ cd_init_caches(); if (!(modnum = lis_register_strmod(&cd_info, cd_minfo.mi_idname))) { cd_minfo.mi_idnum = 0; cmn_err(CE_NOTE, "cdi-sdl: couldn't register module\n"); return; } cd_minfo.mi_idnum = modnum; return; } STATIC INLINE void cd_terminate(void) { ensure(cd_minfo.mi_idnum, return); if ((cd_minfo.mi_idnum = lis_unregister_strmod(&cd_info))) cmn_err(CE_WARN, "cdi-sdl: couldn't unregister as module\n"); cd_term_caches(); return; } /* * ========================================================================= * * Linux Kernel Module Initialization * * ========================================================================= */ int init_module(void) { cd_init(); return (0); } void cleanup_module(void) { cd_terminate(); return; }
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |