Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (58 commits)
  tty: split the lock up a bit further
  tty: Move the leader test in disassociate
  tty: Push the bkl down a bit in the hangup code
  tty: Push the lock down further into the ldisc code
  tty: push the BKL down into the handlers a bit
  tty: moxa: split open lock
  tty: moxa: Kill the use of lock_kernel
  tty: moxa: Fix modem op locking
  tty: moxa: Kill off the throttle method
  tty: moxa: Locking clean up
  tty: moxa: rework the locking a bit
  tty: moxa: Use more tty_port ops
  tty: isicom: fix deadlock on shutdown
  tty: mxser: Use the new locking rules to fix setserial properly
  tty: mxser: use the tty_port_open method
  tty: isicom: sort out the board init logic
  tty: isicom: switch to the new tty_port_open helper
  tty: tty_port: Add a kref object to the tty port
  tty: istallion: tty port open/close methods
  tty: stallion: Convert to the tty_port_open/close methods
  ...
This commit is contained in:
Linus Torvalds
2009-12-11 15:34:40 -08:00
36 changed files with 929 additions and 3828 deletions
-1
View File
@@ -214,7 +214,6 @@ unifdef-y += futex.h
unifdef-y += fs.h
unifdef-y += gameport.h
unifdef-y += generic_serial.h
unifdef-y += hayesesp.h
unifdef-y += hdlcdrv.h
unifdef-y += hdlc.h
unifdef-y += hdreg.h
-114
View File
@@ -1,114 +0,0 @@
#ifndef HAYESESP_H
#define HAYESESP_H
struct hayes_esp_config {
short flow_on;
short flow_off;
short rx_trigger;
short tx_trigger;
short pio_threshold;
unsigned char rx_timeout;
char dma_channel;
};
#ifdef __KERNEL__
#define ESP_DMA_CHANNEL 0
#define ESP_RX_TRIGGER 768
#define ESP_TX_TRIGGER 768
#define ESP_FLOW_OFF 1016
#define ESP_FLOW_ON 944
#define ESP_RX_TMOUT 128
#define ESP_PIO_THRESHOLD 32
#define ESP_IN_MAJOR 57 /* major dev # for dial in */
#define ESP_OUT_MAJOR 58 /* major dev # for dial out */
#define ESPC_SCALE 3
#define UART_ESI_BASE 0x00
#define UART_ESI_SID 0x01
#define UART_ESI_RX 0x02
#define UART_ESI_TX 0x02
#define UART_ESI_CMD1 0x04
#define UART_ESI_CMD2 0x05
#define UART_ESI_STAT1 0x04
#define UART_ESI_STAT2 0x05
#define UART_ESI_RWS 0x07
#define UART_IER_DMA_TMOUT 0x80
#define UART_IER_DMA_TC 0x08
#define ESI_SET_IRQ 0x04
#define ESI_SET_DMA_TMOUT 0x05
#define ESI_SET_SRV_MASK 0x06
#define ESI_SET_ERR_MASK 0x07
#define ESI_SET_FLOW_CNTL 0x08
#define ESI_SET_FLOW_CHARS 0x09
#define ESI_SET_FLOW_LVL 0x0a
#define ESI_SET_TRIGGER 0x0b
#define ESI_SET_RX_TIMEOUT 0x0c
#define ESI_SET_FLOW_TMOUT 0x0d
#define ESI_WRITE_UART 0x0e
#define ESI_READ_UART 0x0f
#define ESI_SET_MODE 0x10
#define ESI_GET_ERR_STAT 0x12
#define ESI_GET_UART_STAT 0x13
#define ESI_GET_RX_AVAIL 0x14
#define ESI_GET_TX_AVAIL 0x15
#define ESI_START_DMA_RX 0x16
#define ESI_START_DMA_TX 0x17
#define ESI_ISSUE_BREAK 0x1a
#define ESI_FLUSH_RX 0x1b
#define ESI_FLUSH_TX 0x1c
#define ESI_SET_BAUD 0x1d
#define ESI_SET_ENH_IRQ 0x1f
#define ESI_SET_REINTR 0x20
#define ESI_SET_PRESCALAR 0x23
#define ESI_NO_COMMAND 0xff
#define ESP_STAT_RX_TIMEOUT 0x01
#define ESP_STAT_DMA_RX 0x02
#define ESP_STAT_DMA_TX 0x04
#define ESP_STAT_NEVER_DMA 0x08
#define ESP_STAT_USE_PIO 0x10
#define ESP_MAGIC 0x53ee
#define ESP_XMIT_SIZE 4096
struct esp_struct {
int magic;
struct tty_port port;
spinlock_t lock;
int io_port;
int irq;
int read_status_mask;
int ignore_status_mask;
int timeout;
int stat_flags;
int custom_divisor;
int close_delay;
unsigned short closing_wait;
unsigned short closing_wait2;
int IER; /* Interrupt Enable Register */
int MCR; /* Modem control register */
unsigned long last_active;
int line;
unsigned char *xmit_buf;
int xmit_head;
int xmit_tail;
int xmit_cnt;
wait_queue_head_t break_wait;
struct async_icount icount; /* kernel counters for the 4 input interrupts */
struct hayes_esp_config config; /* port configuration */
struct esp_struct *next_port; /* For the linked list */
};
struct esp_pio_buffer {
unsigned char data[1024];
struct esp_pio_buffer *next;
};
#endif /* __KERNEL__ */
#endif /* ESP_H */
+1
View File
@@ -67,6 +67,7 @@
#define FIRMWARE_LOADED 0x0001
#define BOARD_ACTIVE 0x0002
#define BOARD_INIT 0x0004
/* isi_port status bitmap */
+23 -2
View File
@@ -190,9 +190,17 @@ struct tty_port_operations {
/* Control the DTR line */
void (*dtr_rts)(struct tty_port *port, int raise);
/* Called when the last close completes or a hangup finishes
IFF the port was initialized. Do not use to free resources */
IFF the port was initialized. Do not use to free resources. Called
under the port mutex to serialize against activate/shutdowns */
void (*shutdown)(struct tty_port *port);
void (*drop)(struct tty_port *port);
/* Called under the port mutex from tty_port_open, serialized using
the port mutex */
/* FIXME: long term getting the tty argument *out* of this would be
good for consoles */
int (*activate)(struct tty_port *port, struct tty_struct *tty);
/* Called on the final put of a port */
void (*destruct)(struct tty_port *port);
};
struct tty_port {
@@ -206,12 +214,14 @@ struct tty_port {
wait_queue_head_t delta_msr_wait; /* Modem status change */
unsigned long flags; /* TTY flags ASY_*/
struct mutex mutex; /* Locking */
struct mutex buf_mutex; /* Buffer alloc lock */
unsigned char *xmit_buf; /* Optional buffer */
unsigned int close_delay; /* Close port delay */
unsigned int closing_wait; /* Delay for output */
int drain_delay; /* Set to zero if no pure time
based drain is needed else
set to size of fifo */
struct kref kref; /* Ref counter */
};
/*
@@ -439,7 +449,7 @@ extern void initialize_tty_struct(struct tty_struct *tty,
struct tty_driver *driver, int idx);
extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx,
int first_ok);
extern void tty_release_dev(struct file *filp);
extern int tty_release(struct inode *inode, struct file *filp);
extern int tty_init_termios(struct tty_struct *tty);
extern struct tty_struct *tty_pair_get_tty(struct tty_struct *tty);
@@ -454,6 +464,15 @@ extern int tty_write_lock(struct tty_struct *tty, int ndelay);
extern void tty_port_init(struct tty_port *port);
extern int tty_port_alloc_xmit_buf(struct tty_port *port);
extern void tty_port_free_xmit_buf(struct tty_port *port);
extern void tty_port_put(struct tty_port *port);
extern inline struct tty_port *tty_port_get(struct tty_port *port)
{
if (port)
kref_get(&port->kref);
return port;
}
extern struct tty_struct *tty_port_tty_get(struct tty_port *port);
extern void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty);
extern int tty_port_carrier_raised(struct tty_port *port);
@@ -467,6 +486,8 @@ extern int tty_port_close_start(struct tty_port *port,
extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty);
extern void tty_port_close(struct tty_port *port,
struct tty_struct *tty, struct file *filp);
extern int tty_port_open(struct tty_port *port,
struct tty_struct *tty, struct file *filp);
extern inline int tty_port_users(struct tty_port *port)
{
return port->count + port->blocked_open;
-3
View File
@@ -39,8 +39,6 @@ enum port_dev_state {
* @serial: pointer back to the struct usb_serial owner of this port.
* @port: pointer to the corresponding tty_port for this port.
* @lock: spinlock to grab when updating portions of this structure.
* @mutex: mutex used to synchronize serial_open() and serial_close()
* access for this port.
* @number: the number of the port (the minor number).
* @interrupt_in_buffer: pointer to the interrupt in buffer for this port.
* @interrupt_in_urb: pointer to the interrupt in struct urb for this port.
@@ -77,7 +75,6 @@ struct usb_serial_port {
struct usb_serial *serial;
struct tty_port port;
spinlock_t lock;
struct mutex mutex;
unsigned char number;
unsigned char *interrupt_in_buffer;