Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 25564
b: refs/heads/master
c: 714e823
h: refs/heads/master
v: v3
  • Loading branch information
Tilman Schmidt authored and Linus Torvalds committed Apr 11, 2006
1 parent 37c81af commit d8f79d3
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 41 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d48c77841a71ba552ef4e6a862642073652f4473
refs/heads/master: 714e8236e5ea9d39169761c546274ceb7eeb765f
41 changes: 41 additions & 0 deletions trunk/drivers/isdn/gigaset/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,47 @@ static void gigaset_inbuf_init(struct inbuf_t *inbuf, struct bc_state *bcs,
inbuf->inputstate = inputstate;
}

/* append received bytes to inbuf */
int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src,
unsigned numbytes)
{
unsigned n, head, tail, bytesleft;

gig_dbg(DEBUG_INTR, "received %u bytes", numbytes);

if (!numbytes)
return 0;

bytesleft = numbytes;
tail = atomic_read(&inbuf->tail);
head = atomic_read(&inbuf->head);
gig_dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail);

while (bytesleft) {
if (head > tail)
n = head - 1 - tail;
else if (head == 0)
n = (RBUFSIZE-1) - tail;
else
n = RBUFSIZE - tail;
if (!n) {
dev_err(inbuf->cs->dev,
"buffer overflow (%u bytes lost)", bytesleft);
break;
}
if (n > bytesleft)
n = bytesleft;
memcpy(inbuf->data + tail, src, n);
bytesleft -= n;
tail = (tail + n) % RBUFSIZE;
src += n;
}
gig_dbg(DEBUG_INTR, "setting tail to %u", tail);
atomic_set(&inbuf->tail, tail);
return numbytes != bytesleft;
}
EXPORT_SYMBOL_GPL(gigaset_fill_inbuf);

/* Initialize the b-channel structure */
static struct bc_state *gigaset_initbcs(struct bc_state *bcs,
struct cardstate *cs, int channel)
Expand Down
42 changes: 2 additions & 40 deletions trunk/drivers/isdn/gigaset/gigaset.h
Original file line number Diff line number Diff line change
Expand Up @@ -902,47 +902,9 @@ static inline void gigaset_rcv_error(struct sk_buff *procskb,
/* bitwise byte inversion table */
extern __u8 gigaset_invtab[]; /* in common.c */


/* append received bytes to inbuf */
static inline int gigaset_fill_inbuf(struct inbuf_t *inbuf,
const unsigned char *src,
unsigned numbytes)
{
unsigned n, head, tail, bytesleft;

gig_dbg(DEBUG_INTR, "received %u bytes", numbytes);

if (!numbytes)
return 0;

bytesleft = numbytes;
tail = atomic_read(&inbuf->tail);
head = atomic_read(&inbuf->head);
gig_dbg(DEBUG_INTR, "buffer state: %u -> %u", head, tail);

while (bytesleft) {
if (head > tail)
n = head - 1 - tail;
else if (head == 0)
n = (RBUFSIZE-1) - tail;
else
n = RBUFSIZE - tail;
if (!n) {
dev_err(inbuf->cs->dev,
"buffer overflow (%u bytes lost)", bytesleft);
break;
}
if (n > bytesleft)
n = bytesleft;
memcpy(inbuf->data + tail, src, n);
bytesleft -= n;
tail = (tail + n) % RBUFSIZE;
src += n;
}
gig_dbg(DEBUG_INTR, "setting tail to %u", tail);
atomic_set(&inbuf->tail, tail);
return numbytes != bytesleft;
}
int gigaset_fill_inbuf(struct inbuf_t *inbuf, const unsigned char *src,
unsigned numbytes);

/* ===========================================================================
* Functions implemented in interface.c
Expand Down

0 comments on commit d8f79d3

Please sign in to comment.