isdnhdlc.h (1732B)
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * hdlc.h -- General purpose ISDN HDLC decoder. 4 * 5 * Implementation of a HDLC decoder/encoder in software. 6 * Necessary because some ISDN devices don't have HDLC 7 * controllers. 8 * 9 * Copyright (C) 10 * 2009 Karsten Keil <keil@b1-systems.de> 11 * 2002 Wolfgang Mües <wolfgang@iksw-muees.de> 12 * 2001 Frode Isaksen <fisaksen@bewan.com> 13 * 2001 Kai Germaschewski <kai.germaschewski@gmx.de> 14 */ 15 16#ifndef __ISDNHDLC_H__ 17#define __ISDNHDLC_H__ 18 19struct isdnhdlc_vars { 20 int bit_shift; 21 int hdlc_bits1; 22 int data_bits; 23 int ffbit_shift; /* encoding only */ 24 int state; 25 int dstpos; 26 27 u16 crc; 28 29 u8 cbin; 30 u8 shift_reg; 31 u8 ffvalue; 32 33 /* set if transferring data */ 34 u32 data_received:1; 35 /* set if D channel (send idle instead of flags) */ 36 u32 dchannel:1; 37 /* set if 56K adaptation */ 38 u32 do_adapt56:1; 39 /* set if in closing phase (need to send CRC + flag) */ 40 u32 do_closing:1; 41 /* set if data is bitreverse */ 42 u32 do_bitreverse:1; 43}; 44 45/* Feature Flags */ 46#define HDLC_56KBIT 0x01 47#define HDLC_DCHANNEL 0x02 48#define HDLC_BITREVERSE 0x04 49 50/* 51 The return value from isdnhdlc_decode is 52 the frame length, 0 if no complete frame was decoded, 53 or a negative error number 54*/ 55#define HDLC_FRAMING_ERROR 1 56#define HDLC_CRC_ERROR 2 57#define HDLC_LENGTH_ERROR 3 58 59extern void isdnhdlc_rcv_init(struct isdnhdlc_vars *hdlc, u32 features); 60 61extern int isdnhdlc_decode(struct isdnhdlc_vars *hdlc, const u8 *src, 62 int slen, int *count, u8 *dst, int dsize); 63 64extern void isdnhdlc_out_init(struct isdnhdlc_vars *hdlc, u32 features); 65 66extern int isdnhdlc_encode(struct isdnhdlc_vars *hdlc, const u8 *src, 67 u16 slen, int *count, u8 *dst, int dsize); 68 69#endif /* __ISDNHDLC_H__ */