Skip to content

Commit

Permalink
[PATCH] isdn4linux: Siemens Gigaset drivers: uninline
Browse files Browse the repository at this point in the history
With Hansjoerg Lipp <hjlipp@web.de>

Uninline a function which was slightly too big to warrant inlining.

Signed-off-by: Hansjoerg Lipp <hjlipp@web.de>
Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Cc: Karsten Keil <kkeil@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Tilman Schmidt authored and Linus Torvalds committed Apr 11, 2006
1 parent d48c778 commit 714e823
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 40 deletions.
41 changes: 41 additions & 0 deletions 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 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 714e823

Please sign in to comment.