Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Layer 2 defines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright 2008  by Karsten Keil <kkeil@novell.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <linux/mISDNif.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include "fsm.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define MAX_WINDOW	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) struct manager {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	struct mISDNchannel	ch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	struct mISDNchannel	bcast;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	u_long			options;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 	struct list_head	layer2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	rwlock_t		lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	struct FsmInst		deact;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 	struct FsmTimer		datimer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	struct sk_buff_head	sendq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	struct mISDNchannel	*up;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	u_int			nextid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	u_int			lastid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) struct teimgr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	int			ri;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	int			rcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	struct FsmInst		tei_m;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	struct FsmTimer		timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	int			tval, nval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	struct layer2		*l2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	struct manager		*mgr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) struct laddr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	u_char	A;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	u_char	B;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) struct layer2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	struct list_head	list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	struct mISDNchannel	ch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	u_long			flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	int			id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	struct mISDNchannel	*up;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	signed char		sapi;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	signed char		tei;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	struct laddr		addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	u_int			maxlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	struct teimgr		*tm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	u_int			vs, va, vr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	int			rc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	u_int			window;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	u_int			sow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	struct FsmInst		l2m;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	struct FsmTimer		t200, t203;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	int			T200, N200, T203;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	u_int			next_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	u_int			down_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	struct sk_buff		*windowar[MAX_WINDOW];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	struct sk_buff_head	i_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	struct sk_buff_head	ui_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	struct sk_buff_head	down_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	struct sk_buff_head	tmp_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	ST_L2_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	ST_L2_2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	ST_L2_3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	ST_L2_4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	ST_L2_5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	ST_L2_6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	ST_L2_7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	ST_L2_8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define L2_STATE_COUNT (ST_L2_8 + 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) extern struct layer2	*create_l2(struct mISDNchannel *, u_int,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 				   u_long, int, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) extern int		tei_l2(struct layer2 *, u_int, u_long arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) /* from tei.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) extern int		l2_tei(struct layer2 *, u_int, u_long arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) extern void		TEIrelease(struct layer2 *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) extern int		TEIInit(u_int *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) extern void		TEIFree(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define MAX_L2HEADER_LEN 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define RR	0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define RNR	0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define REJ	0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define SABME	0x6f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define SABM	0x2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define DM	0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define UI	0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define DISC	0x43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define UA	0x63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define FRMR	0x87
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define XID	0xaf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define CMD	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define RSP	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define LC_FLUSH_WAIT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define FLG_LAPB	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define FLG_LAPD	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define FLG_ORIG	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define FLG_MOD128	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define FLG_PEND_REL	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define FLG_L3_INIT	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define FLG_T200_RUN	6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define FLG_ACK_PEND	7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define FLG_REJEXC	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define FLG_OWN_BUSY	9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define FLG_PEER_BUSY	10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define FLG_DCHAN_BUSY	11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define FLG_L1_ACTIV	12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define FLG_ESTAB_PEND	13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define FLG_PTP		14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define FLG_FIXED_TEI	15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define FLG_L2BLOCK	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define FLG_L1_NOTREADY	17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define FLG_LAPD_NET	18