diff options
| author | Tony Lindgren <tony@atomide.com> | 2012-09-16 15:35:06 -0700 | 
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2012-09-16 15:35:06 -0700 | 
| commit | 6bfc82ff589a00e5fbc12b958c649d703d273c86 (patch) | |
| tree | 9326c7213d5ccee556bff1831e8f88681a27e57c /include/linux/tty_driver.h | |
| parent | 26638c667e645de368cd68cade716ed0faef6269 (diff) | |
| parent | 68cb700c59fae6cd539c9dc1e9f2584f671935a0 (diff) | |
| download | olio-linux-3.10-6bfc82ff589a00e5fbc12b958c649d703d273c86.tar.xz olio-linux-3.10-6bfc82ff589a00e5fbc12b958c649d703d273c86.zip  | |
Merge tag 'omap-cleanup-sparseirq-for-v3.7' into devel-dt
This branch contains changes needed to make omap2+
work properly with sparse IRQ. It also removes
dependencies to mach/hardware.h. These help moving
things towards ARM single zImage support.
This branch is based on a commit in tty-next
branch with omap-devel-gpmc-fixed-for-v3.7 and
cleanup-omap-tags-for-v3.7 merged in to keep things
compiling and sort out some merge conflicts.
Conflicts:
	arch/arm/mach-omap2/omap4-common.c
	drivers/gpio/gpio-twl4030.c
Diffstat (limited to 'include/linux/tty_driver.h')
| -rw-r--r-- | include/linux/tty_driver.h | 47 | 
1 files changed, 34 insertions, 13 deletions
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h index 6e6dbb7447b..dd976cfb613 100644 --- a/include/linux/tty_driver.h +++ b/include/linux/tty_driver.h @@ -45,14 +45,9 @@   *   * void (*shutdown)(struct tty_struct * tty);   * - * 	This routine is called synchronously when a particular tty device - *	is closed for the last time freeing up the resources. - *	Note that tty_shutdown() is not called if ops->shutdown is defined. - *	This means one is responsible to take care of calling ops->remove (e.g. - *	via tty_driver_remove_tty) and releasing tty->termios. - *	Note that this hook may be called from *all* the contexts where one - *	uses tty refcounting (e.g. tty_port_tty_get). - * + * 	This routine is called under the tty lock when a particular tty device + *	is closed for the last time. It executes before the tty resources + *	are freed so may execute while another function holds a tty kref.   *   * void (*cleanup)(struct tty_struct * tty);   * @@ -294,18 +289,18 @@ struct tty_operations {  struct tty_driver {  	int	magic;		/* magic number for this structure */  	struct kref kref;	/* Reference management */ -	struct cdev cdev; +	struct cdev *cdevs;  	struct module	*owner;  	const char	*driver_name;  	const char	*name;  	int	name_base;	/* offset of printed name */  	int	major;		/* major device number */  	int	minor_start;	/* start of minor device number */ -	int	num;		/* number of devices allocated */ +	unsigned int	num;	/* number of devices allocated */  	short	type;		/* type of tty driver */  	short	subtype;	/* subtype of tty driver */  	struct ktermios init_termios; /* Initial termios */ -	int	flags;		/* tty driver flags */ +	unsigned long	flags;		/* tty driver flags */  	struct proc_dir_entry *proc_entry; /* /proc fs entry */  	struct tty_driver *other; /* only used for the PTY driver */ @@ -313,6 +308,7 @@ struct tty_driver {  	 * Pointer to the tty data structures  	 */  	struct tty_struct **ttys; +	struct tty_port **ports;  	struct ktermios **termios;  	void *driver_state; @@ -326,7 +322,8 @@ struct tty_driver {  extern struct list_head tty_drivers; -extern struct tty_driver *__alloc_tty_driver(int lines, struct module *owner); +extern struct tty_driver *__tty_alloc_driver(unsigned int lines, +		struct module *owner, unsigned long flags);  extern void put_tty_driver(struct tty_driver *driver);  extern void tty_set_operations(struct tty_driver *driver,  			const struct tty_operations *op); @@ -334,7 +331,21 @@ extern struct tty_driver *tty_find_polling_driver(char *name, int *line);  extern void tty_driver_kref_put(struct tty_driver *driver); -#define alloc_tty_driver(lines) __alloc_tty_driver(lines, THIS_MODULE) +/* Use TTY_DRIVER_* flags below */ +#define tty_alloc_driver(lines, flags) \ +		__tty_alloc_driver(lines, THIS_MODULE, flags) + +/* + * DEPRECATED Do not use this in new code, use tty_alloc_driver instead. + * (And change the return value checks.) + */ +static inline struct tty_driver *alloc_tty_driver(unsigned int lines) +{ +	struct tty_driver *ret = tty_alloc_driver(lines, 0); +	if (IS_ERR(ret)) +		return NULL; +	return ret; +}  static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)  { @@ -380,6 +391,14 @@ static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)   *	the requested timeout to the caller instead of using a simple   *	on/off interface.   * + * TTY_DRIVER_DYNAMIC_ALLOC -- do not allocate structures which are + *	needed per line for this driver as it would waste memory. + *	The driver will take care. + * + * TTY_DRIVER_UNNUMBERED_NODE -- do not create numbered /dev nodes. In + *	other words create /dev/ttyprintk and not /dev/ttyprintk0. + *	Applicable only when a driver for a single tty device is + *	being allocated.   */  #define TTY_DRIVER_INSTALLED		0x0001  #define TTY_DRIVER_RESET_TERMIOS	0x0002 @@ -387,6 +406,8 @@ static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)  #define TTY_DRIVER_DYNAMIC_DEV		0x0008  #define TTY_DRIVER_DEVPTS_MEM		0x0010  #define TTY_DRIVER_HARDWARE_BREAK	0x0020 +#define TTY_DRIVER_DYNAMIC_ALLOC	0x0040 +#define TTY_DRIVER_UNNUMBERED_NODE	0x0080  /* tty driver types */  #define TTY_DRIVER_TYPE_SYSTEM		0x0001  |