Hmm, this patch itself seems to have a few typos, but so does
the 2.6.13-mm{1,2,3}.
Quoting Alan Cox ([email protected]):
> --- drivers/serial/icom.c~ 2005-09-01 22:37:16.986829264 +0100
> +++ drivers/serial/icom.c 2005-09-01 22:37:16.986829264 +0100
> @@ -737,6 +737,7 @@
>
> status = cpu_to_le16(icom_port->statStg->rcv[rcv_buff].flags);
> while (status & SA_FL_RCV_DONE) {
> + int first = -1;
>
> trace(icom_port, "FID_STATUS", status);
> count = cpu_to_le16(icom_port->statStg->rcv[rcv_buff].leLength);
> @@ -751,15 +752,17 @@
> icom_port->recv_buf_pci;
>
> /* Block copy all but the last byte as this may have status */
> - if(count > 0)
> + if(count > 0) {
> + first = icon->recv_buf[offset];
s/icon/icom_port/ ?
> tty_insert_flip_string(tty, icon_port->recv_buf + offset, count - 1);
s/icon_port/icom_port/ ?
> + }
>
> icount = &icom_port->uart_port.icount;
> icount->rx += count;
>
> /* Break detect logic */
> if ((status & SA_FLAGS_FRAME_ERROR)
> - && (tty->flip.char_buf_ptr[0] == 0x00)) {
> + && first == 0) {
> status &= ~SA_FLAGS_FRAME_ERROR;
> status |= SA_FLAGS_BREAK_DET;
> trace(icom_port, "BREAK_DET", 0);
And in 2.6.13-mm3, we have:
@@ -798,33 +792,26 @@ static void recv_interrupt(u16 port_int_
status &= icom_port->read_status_mask;
if (status & SA_FLAGS_BREAK_DET) {
- *tty->flip.flag_buf_ptr = TTY_BREAK;
+ flag = TTY_BREAK;
} else if (status & SA_FLAGS_PARITY_ERROR) {
trace(icom_port, "PARITY_ERROR", 0);
- *tty->flip.flag_buf_ptr = TTY_PARITY;
+ flag = TTY_PARITY;
} else if (status & SA_FLAGS_FRAME_ERROR)
- *tty->flip.flag_buf_ptr = TTY_FRAME;
+ flag = TTY_FRAME;
- if (status & SA_FLAGS_OVERRUN) {
- /*
- * Overrun is special, since it's
- * reported immediately, and doesn't
- * affect the current character
- */
- if (tty->flip.count < TTY_FLIPBUF_SIZE) {
- tty->flip.count++;
- tty->flip.flag_buf_ptr++;
- tty->flip.char_buf_ptr++;
- *tty->flip.flag_buf_ptr = TTY_OVERRUN;
- }
- }
}
- tty->flip.flag_buf_ptr++;
- tty->flip.char_buf_ptr++;
- tty->flip.count++;
- ignore_char:
- icom_port->statStg->rcv[rcv_buff].flags = 0;
+ tty_insert_flip_char(tty, icon_port->recv_buf + offset + count - 1, flag);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Is this meant to be
tty_insert_flip_char(tty, *(icon_port->recv_buf + offset + count - 1), flag);
?
+
+ if (status & SA_FLAGS_OVERRUN)
+ /*
+ * Overrun is special, since it's
+ * reported immediately, and doesn't
+ * affect the current character
+ */
+ tty_insert_flip_char(tty, 0, TTY_OVERRUN);
+ignore_char:
+ icom_port->statStg->rcv[rcv_buff].flags = 0;
icom_port->statStg->rcv[rcv_buff].leLength = 0;
icom_port->statStg->rcv[rcv_buff].WorkingLength =
(unsigned short int) cpu_to_le16(RCV_BUFF_SZ);
Again, sorry I didn't catch this back in -mm1 or -mm2...
thanks,
-serge
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|