static void sx_shutdown_port(struct specialix_board *bp, struct specialix_port *port){	struct tty_struct *tty;	int i;	unsigned long flags;		func_enter();	if (!(port->flags & ASYNC_INITIALIZED)) {		func_exit();		return;	}		if (sx_debug & SX_DEBUG_FIFO) {		dprintk(SX_DEBUG_FIFO, "sx%d: port %d: %ld overruns, FIFO hits [ ",			board_No(bp), port_No(port), port->overrun);		for (i = 0; i < 10; i++) {			dprintk(SX_DEBUG_FIFO, "%ld ", port->hits[i]);		}		dprintk(SX_DEBUG_FIFO, "].\n");	}	if (port->xmit_buf) {		free_page((unsigned long) port->xmit_buf);		port->xmit_buf = NULL;	}	/* Select port */	spin_lock_irqsave(&bp->lock, flags);	sx_out(bp, CD186x_CAR, port_No(port));	if (!(tty = port->tty) || C_HUPCL(tty)) {		/* Drop DTR */		sx_out(bp, CD186x_MSVDTR, 0);	}	spin_unlock_irqrestore(&bp->lock, flags);	/* Reset port */	sx_wait_CCR(bp);	spin_lock_irqsave(&bp->lock, flags);	sx_out(bp, CD186x_CCR, CCR_SOFTRESET);	/* Disable all interrupts from this port */	port->IER = 0;	sx_out(bp, CD186x_IER, port->IER);	spin_unlock_irqrestore(&bp->lock, flags);	if (tty)		set_bit(TTY_IO_ERROR, &tty->flags);	port->flags &= ~ASYNC_INITIALIZED;		if (!bp->count) 		sx_shutdown_board(bp);	func_exit();}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d61780c0d384939ef31c46b47442854d5def4623/specialix.c/buggy/drivers/char/specialix.c