Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/isdn/hisax/fsm.h
15115 views
1
/* $Id: fsm.h,v 1.3.2.2 2001/09/23 22:24:47 kai Exp $
2
*
3
* Finite state machine
4
*
5
* Author Karsten Keil
6
* Copyright by Karsten Keil <[email protected]>
7
* by Kai Germaschewski <[email protected]>
8
*
9
* This software may be used and distributed according to the terms
10
* of the GNU General Public License, incorporated herein by reference.
11
*
12
*/
13
14
#ifndef __FSM_H__
15
#define __FSM_H__
16
17
#include <linux/timer.h>
18
19
struct FsmInst;
20
21
typedef void (* FSMFNPTR)(struct FsmInst *, int, void *);
22
23
struct Fsm {
24
FSMFNPTR *jumpmatrix;
25
int state_count, event_count;
26
char **strEvent, **strState;
27
};
28
29
struct FsmInst {
30
struct Fsm *fsm;
31
int state;
32
int debug;
33
void *userdata;
34
int userint;
35
void (*printdebug) (struct FsmInst *, char *, ...);
36
};
37
38
struct FsmNode {
39
int state, event;
40
void (*routine) (struct FsmInst *, int, void *);
41
};
42
43
struct FsmTimer {
44
struct FsmInst *fi;
45
struct timer_list tl;
46
int event;
47
void *arg;
48
};
49
50
int FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount);
51
void FsmFree(struct Fsm *fsm);
52
int FsmEvent(struct FsmInst *fi, int event, void *arg);
53
void FsmChangeState(struct FsmInst *fi, int newstate);
54
void FsmInitTimer(struct FsmInst *fi, struct FsmTimer *ft);
55
int FsmAddTimer(struct FsmTimer *ft, int millisec, int event,
56
void *arg, int where);
57
void FsmRestartTimer(struct FsmTimer *ft, int millisec, int event,
58
void *arg, int where);
59
void FsmDelTimer(struct FsmTimer *ft, int where);
60
61
#endif
62
63