1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
/*
* Copyright (C) 2003 Philippe Gerum <rpm@xenomai.org>.
*
* Xenomai is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Xenomai is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Xenomai; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <xenomai/pod.h>
#include <xenomai/mutex.h>
#include <xenomai/fusion.h>
MODULE_DESCRIPTION("XENOMAI-based FUSION interface");
MODULE_AUTHOR("rpm@xenomai.org");
MODULE_LICENSE("GPL");
static u_long tick_hz_arg = 1000; /* Default tick = 1ms, 1kHz */
MODULE_PARM(tick_hz_arg,"i");
MODULE_PARM_DESC(tick_hz_arg,"Clock tick frequency (Hz)");
int fusion_register_skin(void);
void fusion_unregister_skin(void);
int __init dbridge_init(void);
int __exit dbridge_exit(void);
static xnpod_t pod;
xnmutex_t __imutex;
static void fusion_shutdown (int xtype)
{
xnpod_stop_timer();
xnpod_shutdown(xtype);
}
int __rtai_xeno_init (void)
{
u_long nstick = XNPOD_DEFAULT_TICK;
int err;
err = xnpod_init(&pod,FUSION_LOW_PRI,FUSION_HIGH_PRI,0);
if (err != XN_OK)
return err;
xnmutex_init(&__imutex);
if (MODULE_PARM_VALUE(tick_hz_arg) > 0)
nstick = 1000000000 / MODULE_PARM_VALUE(tick_hz_arg);
err = xnpod_start_timer(nstick,XNPOD_DEFAULT_TICKHANDLER);
pod.svctable.shutdown = &fusion_shutdown;
err = fusion_register_skin();
if (err == XN_OK)
err = dbridge_init();
if (err != XN_OK)
xnpod_shutdown(XNPOD_FATAL_EXIT);
xnprintf("RTAI/fusion: interface loaded (tick=%luus)\n",nstick / 1000);
return err;
}
void __rtai_xeno_exit (void)
{
dbridge_exit();
xnprintf("RTAI/fusion: interface unloaded\n");
fusion_unregister_skin();
fusion_shutdown(XNPOD_NORMAL_EXIT);
}
module_init(__rtai_xeno_init);
module_exit(__rtai_xeno_exit);
|