Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/isdn/mISDN/fsm.h
15111 views
1
/*
2
*
3
* Author Karsten Keil <[email protected]>
4
*
5
* Thanks to Jan den Ouden
6
* Fritz Elfert
7
* Copyright 2008 by Karsten Keil <[email protected]>
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License version 2 as
11
* published by the Free Software Foundation.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
*/
19
20
#ifndef _MISDN_FSM_H
21
#define _MISDN_FSM_H
22
23
#include <linux/timer.h>
24
25
/* Statemachine */
26
27
struct FsmInst;
28
29
typedef void (*FSMFNPTR)(struct FsmInst *, int, void *);
30
31
struct Fsm {
32
FSMFNPTR *jumpmatrix;
33
int state_count, event_count;
34
char **strEvent, **strState;
35
};
36
37
struct FsmInst {
38
struct Fsm *fsm;
39
int state;
40
int debug;
41
void *userdata;
42
int userint;
43
void (*printdebug) (struct FsmInst *, char *, ...);
44
};
45
46
struct FsmNode {
47
int state, event;
48
void (*routine) (struct FsmInst *, int, void *);
49
};
50
51
struct FsmTimer {
52
struct FsmInst *fi;
53
struct timer_list tl;
54
int event;
55
void *arg;
56
};
57
58
extern void mISDN_FsmNew(struct Fsm *, struct FsmNode *, int);
59
extern void mISDN_FsmFree(struct Fsm *);
60
extern int mISDN_FsmEvent(struct FsmInst *, int , void *);
61
extern void mISDN_FsmChangeState(struct FsmInst *, int);
62
extern void mISDN_FsmInitTimer(struct FsmInst *, struct FsmTimer *);
63
extern int mISDN_FsmAddTimer(struct FsmTimer *, int, int, void *, int);
64
extern void mISDN_FsmRestartTimer(struct FsmTimer *, int, int, void *, int);
65
extern void mISDN_FsmDelTimer(struct FsmTimer *, int);
66
67
#endif
68
69