59 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 *4 * Author Karsten Keil <kkeil@novell.com>5 *6 * Thanks to Jan den Ouden7 * Fritz Elfert8 * Copyright 2008 by Karsten Keil <kkeil@novell.com>9 */10 11#ifndef _MISDN_FSM_H12#define _MISDN_FSM_H13 14#include <linux/timer.h>15 16/* Statemachine */17 18struct FsmInst;19 20typedef void (*FSMFNPTR)(struct FsmInst *, int, void *);21 22struct Fsm {23 FSMFNPTR *jumpmatrix;24 int state_count, event_count;25 char **strEvent, **strState;26};27 28struct FsmInst {29 struct Fsm *fsm;30 int state;31 int debug;32 void *userdata;33 int userint;34 void (*printdebug) (struct FsmInst *, char *, ...);35};36 37struct FsmNode {38 int state, event;39 void (*routine) (struct FsmInst *, int, void *);40};41 42struct FsmTimer {43 struct FsmInst *fi;44 struct timer_list tl;45 int event;46 void *arg;47};48 49extern int mISDN_FsmNew(struct Fsm *, struct FsmNode *, int);50extern void mISDN_FsmFree(struct Fsm *);51extern int mISDN_FsmEvent(struct FsmInst *, int , void *);52extern void mISDN_FsmChangeState(struct FsmInst *, int);53extern void mISDN_FsmInitTimer(struct FsmInst *, struct FsmTimer *);54extern int mISDN_FsmAddTimer(struct FsmTimer *, int, int, void *, int);55extern void mISDN_FsmRestartTimer(struct FsmTimer *, int, int, void *, int);56extern void mISDN_FsmDelTimer(struct FsmTimer *, int);57 58#endif59