[SERIAL] Make uart_port flags a bitwise type
Same reasoning as commit 747c8a5594
but this time we're making uart_port flags a bitwise type - not
all of these flags correspond with the old ASYNC_ flags, so there
is the possibility for bugs if the wrong ASYNC_* constants are
used. Always use UPF_* constants for uart_port->flags.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
27ae7a7435
commit
0077d45e46
3 changed files with 31 additions and 27 deletions
|
@ -332,7 +332,7 @@ uart_get_baud_rate(struct uart_port *port, struct termios *termios,
|
|||
struct termios *old, unsigned int min, unsigned int max)
|
||||
{
|
||||
unsigned int try, baud, altbaud = 38400;
|
||||
unsigned int flags = port->flags & UPF_SPD_MASK;
|
||||
upf_t flags = port->flags & UPF_SPD_MASK;
|
||||
|
||||
if (flags == UPF_SPD_HI)
|
||||
altbaud = 57600;
|
||||
|
@ -615,8 +615,9 @@ static int uart_set_info(struct uart_state *state,
|
|||
struct serial_struct new_serial;
|
||||
struct uart_port *port = state->port;
|
||||
unsigned long new_port;
|
||||
unsigned int change_irq, change_port, old_flags, closing_wait;
|
||||
unsigned int change_irq, change_port, closing_wait;
|
||||
unsigned int old_custom_divisor, close_delay;
|
||||
upf_t old_flags, new_flags;
|
||||
int retval = 0;
|
||||
|
||||
if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
|
||||
|
@ -655,6 +656,7 @@ static int uart_set_info(struct uart_state *state,
|
|||
new_serial.type != port->type;
|
||||
|
||||
old_flags = port->flags;
|
||||
new_flags = new_serial.flags;
|
||||
old_custom_divisor = port->custom_divisor;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
|
@ -664,10 +666,10 @@ static int uart_set_info(struct uart_state *state,
|
|||
(close_delay != state->close_delay) ||
|
||||
(closing_wait != state->closing_wait) ||
|
||||
(new_serial.xmit_fifo_size != port->fifosize) ||
|
||||
(((new_serial.flags ^ old_flags) & ~UPF_USR_MASK) != 0))
|
||||
(((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
|
||||
goto exit;
|
||||
port->flags = ((port->flags & ~UPF_USR_MASK) |
|
||||
(new_serial.flags & UPF_USR_MASK));
|
||||
(new_flags & UPF_USR_MASK));
|
||||
port->custom_divisor = new_serial.custom_divisor;
|
||||
goto check_and_exit;
|
||||
}
|
||||
|
@ -764,7 +766,7 @@ static int uart_set_info(struct uart_state *state,
|
|||
port->irq = new_serial.irq;
|
||||
port->uartclk = new_serial.baud_base * 16;
|
||||
port->flags = (port->flags & ~UPF_CHANGE_MASK) |
|
||||
(new_serial.flags & UPF_CHANGE_MASK);
|
||||
(new_flags & UPF_CHANGE_MASK);
|
||||
port->custom_divisor = new_serial.custom_divisor;
|
||||
state->close_delay = close_delay;
|
||||
state->closing_wait = closing_wait;
|
||||
|
|
|
@ -26,7 +26,7 @@ struct plat_serial8250_port {
|
|||
unsigned char regshift; /* register shift */
|
||||
unsigned char iotype; /* UPIO_* */
|
||||
unsigned char hub6;
|
||||
unsigned int flags; /* UPF_* flags */
|
||||
upf_t flags; /* UPF_* flags */
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -203,6 +203,8 @@ struct uart_icount {
|
|||
__u32 buf_overrun;
|
||||
};
|
||||
|
||||
typedef unsigned int __bitwise__ upf_t;
|
||||
|
||||
struct uart_port {
|
||||
spinlock_t lock; /* port lock */
|
||||
unsigned int iobase; /* in/out[bwl] */
|
||||
|
@ -230,29 +232,29 @@ struct uart_port {
|
|||
unsigned long sysrq; /* sysrq timeout */
|
||||
#endif
|
||||
|
||||
unsigned int flags;
|
||||
upf_t flags;
|
||||
|
||||
#define UPF_FOURPORT (1 << 1)
|
||||
#define UPF_SAK (1 << 2)
|
||||
#define UPF_SPD_MASK (0x1030)
|
||||
#define UPF_SPD_HI (0x0010)
|
||||
#define UPF_SPD_VHI (0x0020)
|
||||
#define UPF_SPD_CUST (0x0030)
|
||||
#define UPF_SPD_SHI (0x1000)
|
||||
#define UPF_SPD_WARP (0x1010)
|
||||
#define UPF_SKIP_TEST (1 << 6)
|
||||
#define UPF_AUTO_IRQ (1 << 7)
|
||||
#define UPF_HARDPPS_CD (1 << 11)
|
||||
#define UPF_LOW_LATENCY (1 << 13)
|
||||
#define UPF_BUGGY_UART (1 << 14)
|
||||
#define UPF_MAGIC_MULTIPLIER (1 << 16)
|
||||
#define UPF_CONS_FLOW (1 << 23)
|
||||
#define UPF_SHARE_IRQ (1 << 24)
|
||||
#define UPF_BOOT_AUTOCONF (1 << 28)
|
||||
#define UPF_IOREMAP (1 << 31)
|
||||
#define UPF_FOURPORT ((__force upf_t) (1 << 1))
|
||||
#define UPF_SAK ((__force upf_t) (1 << 2))
|
||||
#define UPF_SPD_MASK ((__force upf_t) (0x1030))
|
||||
#define UPF_SPD_HI ((__force upf_t) (0x0010))
|
||||
#define UPF_SPD_VHI ((__force upf_t) (0x0020))
|
||||
#define UPF_SPD_CUST ((__force upf_t) (0x0030))
|
||||
#define UPF_SPD_SHI ((__force upf_t) (0x1000))
|
||||
#define UPF_SPD_WARP ((__force upf_t) (0x1010))
|
||||
#define UPF_SKIP_TEST ((__force upf_t) (1 << 6))
|
||||
#define UPF_AUTO_IRQ ((__force upf_t) (1 << 7))
|
||||
#define UPF_HARDPPS_CD ((__force upf_t) (1 << 11))
|
||||
#define UPF_LOW_LATENCY ((__force upf_t) (1 << 13))
|
||||
#define UPF_BUGGY_UART ((__force upf_t) (1 << 14))
|
||||
#define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16))
|
||||
#define UPF_CONS_FLOW ((__force upf_t) (1 << 23))
|
||||
#define UPF_SHARE_IRQ ((__force upf_t) (1 << 24))
|
||||
#define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28))
|
||||
#define UPF_IOREMAP ((__force upf_t) (1 << 31))
|
||||
|
||||
#define UPF_CHANGE_MASK (0x17fff)
|
||||
#define UPF_USR_MASK (UPF_SPD_MASK|UPF_LOW_LATENCY)
|
||||
#define UPF_CHANGE_MASK ((__force upf_t) (0x17fff))
|
||||
#define UPF_USR_MASK ((__force upf_t) (UPF_SPD_MASK|UPF_LOW_LATENCY))
|
||||
|
||||
unsigned int mctrl; /* current modem ctrl settings */
|
||||
unsigned int timeout; /* character-based timeout */
|
||||
|
|
Loading…
Reference in a new issue