volatile st_cpc_rx_buf * buf; 
volatile st_cpc_rx_buf *buf; 
static void cpc_tty_rx_work(void * data){	unsigned long port;	int i, j;	st_cpc_tty_area *cpc_tty; 	volatile st_cpc_rx_buf * buf;	char flags=0,flg_rx=1; 	struct tty_ldisc *ld;	if (cpc_tty_cnt == 0) return;		for (i=0; (i < 4) && flg_rx ; i++) {		flg_rx = 0;		port = (unsigned long)data;		for (j=0; j < CPC_TTY_NPORTS; j++) {			cpc_tty = &cpc_tty_area[port];					if ((buf=cpc_tty->buf_rx.first) != 0) {				if(cpc_tty->tty) {					ld = tty_ldisc_ref(cpc_tty->tty);					if(ld) {						if (ld->receive_buf) {							CPC_TTY_DBG("%s: call line disc. receive_buf\n",cpc_tty->name);							ld->receive_buf(cpc_tty->tty, (char *)(buf->data), &flags, buf->size);						}						tty_ldisc_deref(ld);					}				}					cpc_tty->buf_rx.first = cpc_tty->buf_rx.first->next;				kfree((unsigned char *)buf);				buf = cpc_tty->buf_rx.first;				flg_rx = 1;			}			if (++port == CPC_TTY_NPORTS) port = 0;		}	}} 
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/6a5d362120a61a719095443194cc2d5e9a7027dd/pc300_tty.c/clean/drivers/net/wan/pc300_tty.c