Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 338379
b: refs/heads/master
c: e322411
h: refs/heads/master
i:
  338377: 29190be
  338375: b39da69
v: v3
  • Loading branch information
Bill Pemberton authored and Greg Kroah-Hartman committed Oct 25, 2012
1 parent feb0f49 commit b73ff50
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 60 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: a1c25f2b98e10038f7d198704d033eb73bad0677
refs/heads/master: e3224111b3a527eb8f9b9b6deed83b727522941e
67 changes: 8 additions & 59 deletions trunk/drivers/staging/dgrp/dgrp_net_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,20 +151,15 @@ static void dgrp_read_data_block(struct ch_struct *ch, u8 *flipbuf,
* Copys the rbuf to the flipbuf and sends to line discipline.
* Sends input buffer data to the line discipline.
*
* There are several modes to consider here:
* rawreadok, tty->real_raw, and IF_PARMRK
*/
static void dgrp_input(struct ch_struct *ch)
{
struct nd_struct *nd;
struct tty_struct *tty;
int remain;
int data_len;
int len;
int flip_len;
int tty_count;
ulong lock_flags;
struct tty_ldisc *ld;
u8 *myflipbuf;
u8 *myflipflagbuf;

Expand Down Expand Up @@ -212,37 +207,11 @@ static void dgrp_input(struct ch_struct *ch)

spin_unlock_irqrestore(&nd->nd_lock, lock_flags);

/* Decide how much data we can send into the tty layer */
if (dgrp_rawreadok && tty->real_raw)
flip_len = MYFLIPLEN;
else
flip_len = TTY_FLIPBUF_SIZE;

/* data_len should be the number of chars that we read in */
data_len = (ch->ch_rin - ch->ch_rout) & RBUF_MASK;
remain = data_len;

/* len is the amount of data we are going to transfer here */
len = min(data_len, flip_len);

/* take into consideration length of ldisc */
len = min(len, (N_TTY_BUF_SIZE - 1) - tty->read_cnt);

ld = tty_ldisc_ref(tty);

/*
* If we were unable to get a reference to the ld,
* don't flush our buffer, and act like the ld doesn't
* have any space to put the data right now.
*/
if (!ld) {
len = 0;
} else if (!ld->ops->receive_buf) {
spin_lock_irqsave(&nd->nd_lock, lock_flags);
ch->ch_rout = ch->ch_rin;
spin_unlock_irqrestore(&nd->nd_lock, lock_flags);
len = 0;
}
len = tty_buffer_request_room(tty, data_len);

/* Check DPA flow control */
if ((nd->nd_dpa_debug) &&
Expand All @@ -254,42 +223,22 @@ static void dgrp_input(struct ch_struct *ch)

dgrp_read_data_block(ch, myflipbuf, len);

/*
* In high performance mode, we don't have to update
* flag_buf or any of the counts or pointers into flip buf.
*/
if (!dgrp_rawreadok || !tty->real_raw) {
if (I_PARMRK(tty) || I_BRKINT(tty) || I_INPCK(tty))
parity_scan(ch, myflipbuf, myflipflagbuf, &len);
else
memset(myflipflagbuf, TTY_NORMAL, len);
}
if (I_PARMRK(tty) || I_BRKINT(tty) || I_INPCK(tty))
parity_scan(ch, myflipbuf, myflipflagbuf, &len);
else
memset(myflipflagbuf, TTY_NORMAL, len);

if ((nd->nd_dpa_debug) &&
(nd->nd_dpa_port == PORT_NUM(MINOR(tty_devnum(tty)))))
dgrp_dpa_data(nd, 1, myflipbuf, len);

/*
* If we're doing raw reads, jam it right into the
* line disc bypassing the flip buffers.
*/
if (dgrp_rawreadok && tty->real_raw)
ld->ops->receive_buf(tty, myflipbuf, NULL, len);
else {
len = tty_buffer_request_room(tty, len);
tty_insert_flip_string_flags(tty, myflipbuf,
myflipflagbuf, len);

/* Tell the tty layer its okay to "eat" the data now */
tty_flip_buffer_push(tty);
}
tty_insert_flip_string_flags(tty, myflipbuf,
myflipflagbuf, len);
tty_flip_buffer_push(tty);

ch->ch_rxcount += len;
}

if (ld)
tty_ldisc_deref(ld);

/*
* Wake up any sleepers (maybe dgrp close) that might be waiting
* for a channel flag state change.
Expand Down

0 comments on commit b73ff50

Please sign in to comment.