diff options
| author | Arve Hjønnevåg <arve@android.com> | 2013-01-15 15:10:31 -0800 | 
|---|---|---|
| committer | Arve Hjønnevåg <arve@android.com> | 2013-07-01 15:51:50 -0700 | 
| commit | 4b4559062472f7e81d0a6831538686d989226864 (patch) | |
| tree | b5091b6738c2d8bdde55888590d2791ed8486f86 | |
| parent | c2b48c1f48e187445f6e868e8838a87f783a1e25 (diff) | |
| download | olio-linux-3.10-4b4559062472f7e81d0a6831538686d989226864.tar.xz olio-linux-3.10-4b4559062472f7e81d0a6831538686d989226864.zip | |
ARM: fiq_debugger: Update tty code for 3.9
Signed-off-by: Arve Hjønnevåg <arve@android.com>
| -rw-r--r-- | arch/arm/common/fiq_debugger.c | 63 | 
1 files changed, 34 insertions, 29 deletions
| diff --git a/arch/arm/common/fiq_debugger.c b/arch/arm/common/fiq_debugger.c index eabd94b98f4..65b943c7630 100644 --- a/arch/arm/common/fiq_debugger.c +++ b/arch/arm/common/fiq_debugger.c @@ -89,8 +89,7 @@ struct fiq_debugger_state {  #ifdef CONFIG_FIQ_DEBUGGER_CONSOLE  	spinlock_t console_lock;  	struct console console; -	struct tty_struct *tty; -	int tty_open_count; +	struct tty_port tty_port;  	struct fiq_debugger_ringbuf *tty_rbuf;  	bool syslog_dumping;  #endif @@ -768,30 +767,34 @@ static irqreturn_t wakeup_irq_handler(int irq, void *dev)  	return IRQ_HANDLED;  } - -static void debug_handle_irq_context(struct fiq_debugger_state *state) +static void debug_handle_console_irq_context(struct fiq_debugger_state *state)  { -	if (!state->no_sleep) { -		unsigned long flags; - -		spin_lock_irqsave(&state->sleep_timer_lock, flags); -		wake_lock(&state->debugger_wake_lock); -		mod_timer(&state->sleep_timer, jiffies + HZ * 5); -		spin_unlock_irqrestore(&state->sleep_timer_lock, flags); -	}  #if defined(CONFIG_FIQ_DEBUGGER_CONSOLE) -	if (state->tty) { +	if (state->tty_port.ops) {  		int i;  		int count = fiq_debugger_ringbuf_level(state->tty_rbuf);  		for (i = 0; i < count; i++) {  			int c = fiq_debugger_ringbuf_peek(state->tty_rbuf, 0); -			tty_insert_flip_char(state->tty, c, TTY_NORMAL); +			tty_insert_flip_char(&state->tty_port, c, TTY_NORMAL);  			if (!fiq_debugger_ringbuf_consume(state->tty_rbuf, 1))  				pr_warn("fiq tty failed to consume byte\n");  		} -		tty_flip_buffer_push(state->tty); +		tty_flip_buffer_push(&state->tty_port);  	}  #endif +} + +static void debug_handle_irq_context(struct fiq_debugger_state *state) +{ +	if (!state->no_sleep) { +		unsigned long flags; + +		spin_lock_irqsave(&state->sleep_timer_lock, flags); +		wake_lock(&state->debugger_wake_lock); +		mod_timer(&state->sleep_timer, jiffies + HZ * 5); +		spin_unlock_irqrestore(&state->sleep_timer_lock, flags); +	} +	debug_handle_console_irq_context(state);  	if (state->debug_busy) {  		debug_irq_exec(state, state->debug_cmd);  		if (!state->console_enable) @@ -995,26 +998,21 @@ int fiq_tty_open(struct tty_struct *tty, struct file *filp)  	int line = tty->index;  	struct fiq_debugger_state **states = tty->driver->driver_state;  	struct fiq_debugger_state *state = states[line]; -	if (state->tty_open_count++) -		return 0; -	tty->driver_data = state; -	state->tty = tty; -	return 0; +	return tty_port_open(&state->tty_port, tty, filp);  }  void fiq_tty_close(struct tty_struct *tty, struct file *filp)  { -	struct fiq_debugger_state *state = tty->driver_data; -	if (--state->tty_open_count) -		return; -	state->tty = NULL; +	tty_port_close(tty->port, tty, filp);  }  int  fiq_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)  {  	int i; -	struct fiq_debugger_state *state = tty->driver_data; +	int line = tty->index; +	struct fiq_debugger_state **states = tty->driver->driver_state; +	struct fiq_debugger_state *state = states[line];  	if (!state->console_enable)  		return count; @@ -1042,7 +1040,8 @@ static int fiq_tty_poll_init(struct tty_driver *driver, int line, char *options)  static int fiq_tty_poll_get_char(struct tty_driver *driver, int line)  { -	struct fiq_debugger_state *state = driver->ttys[line]->driver_data; +	struct fiq_debugger_state **states = driver->driver_state; +	struct fiq_debugger_state *state = states[line];  	int c = NO_POLL_CHAR;  	debug_uart_enable(state); @@ -1064,13 +1063,16 @@ static int fiq_tty_poll_get_char(struct tty_driver *driver, int line)  static void fiq_tty_poll_put_char(struct tty_driver *driver, int line, char ch)  { -	struct fiq_debugger_state *state = driver->ttys[line]->driver_data; +	struct fiq_debugger_state **states = driver->driver_state; +	struct fiq_debugger_state *state = states[line];  	debug_uart_enable(state);  	debug_putc(state, ch);  	debug_uart_disable(state);  }  #endif +static const struct tty_port_operations fiq_tty_port_ops; +  static const struct tty_operations fiq_tty_driver_ops = {  	.write = fiq_tty_write,  	.write_room = fiq_tty_write_room, @@ -1150,8 +1152,11 @@ static int fiq_debugger_tty_init_one(struct fiq_debugger_state *state)  		goto err;  	} -	tty_dev = tty_register_device(fiq_tty_driver, state->pdev->id, -		&state->pdev->dev); +	tty_port_init(&state->tty_port); +	state->tty_port.ops = &fiq_tty_port_ops; + +	tty_dev = tty_port_register_device(&state->tty_port, fiq_tty_driver, +					   state->pdev->id, &state->pdev->dev);  	if (IS_ERR(tty_dev)) {  		pr_err("Failed to register fiq debugger tty device\n");  		ret = PTR_ERR(tty_dev); |