Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3224111 authored by Bill Pemberton's avatar Bill Pemberton Committed by Greg Kroah-Hartman
Browse files

staging: dgrp: remove use of real_raw and read_cnt in dgrp_input



dgrp_input used real_raw and read_cnt from struct tty_struct.  Those
members have gone away.  Rework the code to not use them.

Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
Signed-off-by: default avatarBill Pemberton <wfp5p@virginia.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a1c25f2b
Loading
Loading
Loading
Loading
+8 −59
Original line number Diff line number Diff line
@@ -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;

@@ -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) &&
@@ -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 ((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);
		}

		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.