162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Author Karsten Keil <kkeil@novell.com> 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Thanks to Jan den Ouden 762306a36Sopenharmony_ci * Fritz Elfert 862306a36Sopenharmony_ci * Copyright 2008 by Karsten Keil <kkeil@novell.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef _MISDN_FSM_H 1262306a36Sopenharmony_ci#define _MISDN_FSM_H 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/timer.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci/* Statemachine */ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct FsmInst; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_citypedef void (*FSMFNPTR)(struct FsmInst *, int, void *); 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct Fsm { 2362306a36Sopenharmony_ci FSMFNPTR *jumpmatrix; 2462306a36Sopenharmony_ci int state_count, event_count; 2562306a36Sopenharmony_ci char **strEvent, **strState; 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct FsmInst { 2962306a36Sopenharmony_ci struct Fsm *fsm; 3062306a36Sopenharmony_ci int state; 3162306a36Sopenharmony_ci int debug; 3262306a36Sopenharmony_ci void *userdata; 3362306a36Sopenharmony_ci int userint; 3462306a36Sopenharmony_ci void (*printdebug) (struct FsmInst *, char *, ...); 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct FsmNode { 3862306a36Sopenharmony_ci int state, event; 3962306a36Sopenharmony_ci void (*routine) (struct FsmInst *, int, void *); 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistruct FsmTimer { 4362306a36Sopenharmony_ci struct FsmInst *fi; 4462306a36Sopenharmony_ci struct timer_list tl; 4562306a36Sopenharmony_ci int event; 4662306a36Sopenharmony_ci void *arg; 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciextern int mISDN_FsmNew(struct Fsm *, struct FsmNode *, int); 5062306a36Sopenharmony_ciextern void mISDN_FsmFree(struct Fsm *); 5162306a36Sopenharmony_ciextern int mISDN_FsmEvent(struct FsmInst *, int , void *); 5262306a36Sopenharmony_ciextern void mISDN_FsmChangeState(struct FsmInst *, int); 5362306a36Sopenharmony_ciextern void mISDN_FsmInitTimer(struct FsmInst *, struct FsmTimer *); 5462306a36Sopenharmony_ciextern int mISDN_FsmAddTimer(struct FsmTimer *, int, int, void *, int); 5562306a36Sopenharmony_ciextern void mISDN_FsmRestartTimer(struct FsmTimer *, int, int, void *, int); 5662306a36Sopenharmony_ciextern void mISDN_FsmDelTimer(struct FsmTimer *, int); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#endif 59