Lines Matching refs:iwb
24 void gigaset_isowbuf_init(struct isowbuf_t *iwb, unsigned char idle) in gigaset_isowbuf_init() argument
26 iwb->read = 0; in gigaset_isowbuf_init()
27 iwb->nextread = 0; in gigaset_isowbuf_init()
28 iwb->write = 0; in gigaset_isowbuf_init()
29 atomic_set(&iwb->writesem, 1); in gigaset_isowbuf_init()
30 iwb->wbits = 0; in gigaset_isowbuf_init()
31 iwb->idle = idle; in gigaset_isowbuf_init()
32 memset(iwb->data + BAS_OUTBUFSIZE, idle, BAS_OUTBUFPAD); in gigaset_isowbuf_init()
38 static inline int isowbuf_freebytes(struct isowbuf_t *iwb) in isowbuf_freebytes() argument
42 read = iwb->read; in isowbuf_freebytes()
43 write = iwb->write; in isowbuf_freebytes()
61 static inline int isowbuf_startwrite(struct isowbuf_t *iwb) in isowbuf_startwrite() argument
63 if (!atomic_dec_and_test(&iwb->writesem)) { in isowbuf_startwrite()
64 atomic_inc(&iwb->writesem); in isowbuf_startwrite()
71 __func__, iwb->data[iwb->write], iwb->wbits); in isowbuf_startwrite()
79 static inline int isowbuf_donewrite(struct isowbuf_t *iwb) in isowbuf_donewrite() argument
81 int write = iwb->write; in isowbuf_donewrite()
82 atomic_inc(&iwb->writesem); in isowbuf_donewrite()
93 static inline void isowbuf_putbits(struct isowbuf_t *iwb, u32 data, int nbits) in isowbuf_putbits() argument
95 int write = iwb->write; in isowbuf_putbits()
96 data <<= iwb->wbits; in isowbuf_putbits()
97 data |= iwb->data[write]; in isowbuf_putbits()
98 nbits += iwb->wbits; in isowbuf_putbits()
100 iwb->data[write++] = data & 0xff; in isowbuf_putbits()
105 iwb->wbits = nbits; in isowbuf_putbits()
106 iwb->data[write] = data & 0xff; in isowbuf_putbits()
107 iwb->write = write; in isowbuf_putbits()
114 static inline void isowbuf_putflag(struct isowbuf_t *iwb) in isowbuf_putflag() argument
119 isowbuf_putbits(iwb, 0x7e7e, 8); in isowbuf_putflag()
121 write = iwb->write; in isowbuf_putflag()
122 iwb->idle = iwb->data[write]; in isowbuf_putflag()
123 gig_dbg(DEBUG_ISO, "idle fill byte %02x", iwb->idle); in isowbuf_putflag()
125 iwb->data[write] &= (1 << iwb->wbits) - 1; in isowbuf_putflag()
134 int gigaset_isowbuf_getbytes(struct isowbuf_t *iwb, int size) in gigaset_isowbuf_getbytes() argument
139 read = iwb->nextread; in gigaset_isowbuf_getbytes()
140 write = iwb->write; in gigaset_isowbuf_getbytes()
161 if (isowbuf_startwrite(iwb) < 0) in gigaset_isowbuf_getbytes()
164 write = iwb->write; in gigaset_isowbuf_getbytes()
166 pbyte = iwb->data[write]; /* save in gigaset_isowbuf_getbytes()
171 __func__, write, limit, iwb->idle); in gigaset_isowbuf_getbytes()
173 memset(iwb->data + write, iwb->idle, in gigaset_isowbuf_getbytes()
177 memset(iwb->data + write, iwb->idle, in gigaset_isowbuf_getbytes()
185 iwb->data[limit] = pbyte; /* restore in gigaset_isowbuf_getbytes()
187 iwb->write = limit; in gigaset_isowbuf_getbytes()
189 isowbuf_donewrite(iwb); in gigaset_isowbuf_getbytes()
198 iwb->data[dst++] = iwb->data[src++]; in gigaset_isowbuf_getbytes()
201 memset(iwb->data + dst, iwb->idle, in gigaset_isowbuf_getbytes()
207 iwb->nextread = limit; in gigaset_isowbuf_getbytes()
354 static inline int hdlc_bitstuff_byte(struct isowbuf_t *iwb, unsigned char cin, in hdlc_bitstuff_byte() argument
371 isowbuf_putbits(iwb, stuff, 8 + shiftinc); in hdlc_bitstuff_byte()
397 static inline int hdlc_buildframe(struct isowbuf_t *iwb, in hdlc_buildframe() argument
405 if (isowbuf_freebytes(iwb) < count + count / 5 + 6 || in hdlc_buildframe()
406 isowbuf_startwrite(iwb) < 0) { in hdlc_buildframe()
408 __func__, isowbuf_freebytes(iwb)); in hdlc_buildframe()
419 ones = hdlc_bitstuff_byte(iwb, c, ones); in hdlc_buildframe()
426 ones = hdlc_bitstuff_byte(iwb, fcs & 0x00ff, ones); in hdlc_buildframe()
427 ones = hdlc_bitstuff_byte(iwb, (fcs >> 8) & 0x00ff, ones); in hdlc_buildframe()
430 isowbuf_putflag(iwb); in hdlc_buildframe()
431 end = isowbuf_donewrite(iwb); in hdlc_buildframe()
450 static inline int trans_buildframe(struct isowbuf_t *iwb, in trans_buildframe() argument
457 return iwb->write; in trans_buildframe()
459 if (isowbuf_freebytes(iwb) < count || in trans_buildframe()
460 isowbuf_startwrite(iwb) < 0) { in trans_buildframe()
468 write = iwb->write; in trans_buildframe()
471 iwb->data[write++] = c; in trans_buildframe()
474 iwb->write = write; in trans_buildframe()
475 iwb->idle = c; in trans_buildframe()
477 return isowbuf_donewrite(iwb); in trans_buildframe()