Hi ->peonages[] array is a WO variable. build/drivers/sgi/char/sgiserial.c | 49 ++++++------------------------------- build/drivers/sgi/char/sgiserial.h | 3 -- 2 files changed, 8 insertions(+), 44 deletions(-) diff -puN build/drivers/sgi/char/sgiserial.c~sgiserial_remove_pendregs build/drivers/sgi/char/sgiserial.c --- 24/build/drivers/sgi/char/sgiserial.c~sgiserial_remove_pendregs 2003-03-26 18:54:23.000000000 +0100 +++ 24-quintela/build/drivers/sgi/char/sgiserial.c 2003-03-26 18:54:23.000000000 +0100 @@ -223,11 +223,9 @@ static inline void zs_rtsdtr(struct sgi_ { if(set) { ss->curregs[5] |= (RTS | DTR); - ss->pendregs[5] = ss->curregs[5]; write_zsreg(ss->zs_channel, 5, ss->curregs[5]); } else { ss->curregs[5] &= ~(RTS | DTR); - ss->pendregs[5] = ss->curregs[5]; write_zsreg(ss->zs_channel, 5, ss->curregs[5]); } return; @@ -285,7 +283,6 @@ static void rs_stop(struct tty_struct *t save_flags(flags); cli(); if (info->curregs[5] & TxENAB) { info->curregs[5] &= ~TxENAB; - info->pendregs[5] &= ~TxENAB; write_zsreg(info->zs_channel, 5, info->curregs[5]); } restore_flags(flags); @@ -302,7 +299,6 @@ static void rs_start(struct tty_struct * save_flags(flags); cli(); if (info->xmit_cnt && info->xmit_buf && !(info->curregs[5] & TxENAB)) { info->curregs[5] |= TxENAB; - info->pendregs[5] = info->curregs[5]; write_zsreg(info->zs_channel, 5, info->curregs[5]); } restore_flags(flags); @@ -527,13 +523,11 @@ static inline void status_handle(struct if((info->tty->termios->c_cflag & CRTSCTS) && ((info->curregs[3] & AUTO_ENAB)==0)) { info->curregs[3] |= AUTO_ENAB; - info->pendregs[3] |= AUTO_ENAB; write_zsreg(info->zs_channel, 3, info->curregs[3]); } } else { if((info->curregs[3] & AUTO_ENAB)) { info->curregs[3] &= ~AUTO_ENAB; - info->pendregs[3] &= ~AUTO_ENAB; write_zsreg(info->zs_channel, 3, info->curregs[3]); } } @@ -699,14 +693,10 @@ static int startup(struct sgi_serial * i * Finally, enable sequencing and interrupts */ info->curregs[1] |= (info->curregs[1] & ~0x18) | (EXT_INT_ENAB|INT_ALL_Rx); - info->pendregs[1] = info->curregs[1]; info->curregs[3] |= (RxENABLE | Rx8); - info->pendregs[3] = info->curregs[3]; /* We enable Tx interrupts as needed. */ info->curregs[5] |= (TxENAB | Tx8); - info->pendregs[5] = info->curregs[5]; info->curregs[9] |= (NV | MIE); - info->pendregs[9] = info->curregs[9]; write_zsreg(info->zs_channel, 3, info->curregs[3]); write_zsreg(info->zs_channel, 5, info->curregs[5]); write_zsreg(info->zs_channel, 9, info->curregs[9]); @@ -808,58 +798,44 @@ static void change_speed(struct sgi_seri case CS5: info->curregs[3] &= ~(0xc0); info->curregs[3] |= Rx5; - info->pendregs[3] = info->curregs[3]; info->curregs[5] &= ~(0xe0); info->curregs[5] |= Tx5; - info->pendregs[5] = info->curregs[5]; break; case CS6: info->curregs[3] &= ~(0xc0); info->curregs[3] |= Rx6; - info->pendregs[3] = info->curregs[3]; info->curregs[5] &= ~(0xe0); info->curregs[5] |= Tx6; - info->pendregs[5] = info->curregs[5]; break; case CS7: info->curregs[3] &= ~(0xc0); info->curregs[3] |= Rx7; - info->pendregs[3] = info->curregs[3]; info->curregs[5] &= ~(0xe0); info->curregs[5] |= Tx7; - info->pendregs[5] = info->curregs[5]; break; case CS8: default: /* defaults to 8 bits */ info->curregs[3] &= ~(0xc0); info->curregs[3] |= Rx8; - info->pendregs[3] = info->curregs[3]; info->curregs[5] &= ~(0xe0); info->curregs[5] |= Tx8; - info->pendregs[5] = info->curregs[5]; break; } info->curregs[4] &= ~(0x0c); - if (cflag & CSTOPB) { + if (cflag & CSTOPB) info->curregs[4] |= SB2; - } else { + else info->curregs[4] |= SB1; - } - info->pendregs[4] = info->curregs[4]; - if (cflag & PARENB) { + + if (cflag & PARENB) info->curregs[4] |= PAR_ENA; - info->pendregs[4] |= PAR_ENA; - } else { + else info->curregs[4] &= ~PAR_ENA; - info->pendregs[4] &= ~PAR_ENA; - } - if (!(cflag & PARODD)) { + + if (!(cflag & PARODD)) info->curregs[4] |= PAR_EVEN; - info->pendregs[4] |= PAR_EVEN; - } else { + else info->curregs[4] &= ~PAR_EVEN; - info->pendregs[4] &= ~PAR_EVEN; - } /* Load up the new values */ load_zsregs(info->zs_channel, info->curregs); @@ -1037,10 +1013,8 @@ static int rs_write(struct tty_struct * */ /* Enable transmitter */ info->curregs[1] |= TxINT_ENAB|EXT_INT_ENAB; - info->pendregs[1] |= TxINT_ENAB|EXT_INT_ENAB; write_zsreg(info->zs_channel, 1, info->curregs[1]); info->curregs[5] |= TxENAB; - info->pendregs[5] |= TxENAB; write_zsreg(info->zs_channel, 5, info->curregs[5]); /* @@ -1113,10 +1087,8 @@ static void rs_flush_chars(struct tty_st /* Enable transmitter */ save_flags(flags); cli(); info->curregs[1] |= TxINT_ENAB|EXT_INT_ENAB; - info->pendregs[1] |= TxINT_ENAB|EXT_INT_ENAB; write_zsreg(info->zs_channel, 1, info->curregs[1]); info->curregs[5] |= TxENAB; - info->pendregs[5] |= TxENAB; write_zsreg(info->zs_channel, 5, info->curregs[5]); /* @@ -1166,7 +1138,6 @@ static void rs_throttle(struct tty_struc /* Turn off RTS line */ cli(); info->curregs[5] &= ~RTS; - info->pendregs[5] &= ~RTS; write_zsreg(info->zs_channel, 5, info->curregs[5]); sti(); } @@ -1194,7 +1165,6 @@ static void rs_unthrottle(struct tty_str /* Assert RTS line */ cli(); info->curregs[5] |= RTS; - info->pendregs[5] |= RTS; write_zsreg(info->zs_channel, 5, info->curregs[5]); sti(); } @@ -1521,10 +1491,8 @@ static void rs_close(struct tty_struct * */ /** if (!info->iscons) ... **/ info->curregs[3] &= ~RxENABLE; - info->pendregs[3] = info->curregs[3]; write_zsreg(info->zs_channel, 3, info->curregs[3]); info->curregs[1] &= ~(0x18); - info->pendregs[1] = info->curregs[1]; write_zsreg(info->zs_channel, 1, info->curregs[1]); ZS_CLEARFIFO(info->zs_channel); @@ -2245,7 +2213,6 @@ static int __init zs_console_setup(struc zscons_regs[12] = brg & 0xff; zscons_regs[13] = (brg >> 8) & 0xff; memcpy(info->curregs, zscons_regs, sizeof(zscons_regs)); - memcpy(info->pendregs, zscons_regs, sizeof(zscons_regs)); load_zsregs(info->zs_channel, zscons_regs); ZS_CLEARERR(info->zs_channel); ZS_CLEARFIFO(info->zs_channel); diff -puN build/drivers/sgi/char/sgiserial.h~sgiserial_remove_pendregs build/drivers/sgi/char/sgiserial.h --- 24/build/drivers/sgi/char/sgiserial.h~sgiserial_remove_pendregs 2003-03-26 18:54:23.000000000 +0100 +++ 24-quintela/build/drivers/sgi/char/sgiserial.h 2003-03-26 18:54:23.000000000 +0100 @@ -122,9 +122,6 @@ struct sgi_serial { /* Current write register values */ unsigned char curregs[NUM_ZSREGS]; - /* Values we need to set next opportunity */ - unsigned char pendregs[NUM_ZSREGS]; - char change_needed; int magic; _ -- In theory, practice and theory are the same, but in practice they are different -- Larry McVoy