Commit 0077d45e authored by Russell King's avatar Russell King Committed by Russell King

[SERIAL] Make uart_port flags a bitwise type

Same reasoning as commit 747c8a55
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: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 27ae7a74
...@@ -332,7 +332,7 @@ uart_get_baud_rate(struct uart_port *port, struct termios *termios, ...@@ -332,7 +332,7 @@ uart_get_baud_rate(struct uart_port *port, struct termios *termios,
struct termios *old, unsigned int min, unsigned int max) struct termios *old, unsigned int min, unsigned int max)
{ {
unsigned int try, baud, altbaud = 38400; 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) if (flags == UPF_SPD_HI)
altbaud = 57600; altbaud = 57600;
...@@ -615,8 +615,9 @@ static int uart_set_info(struct uart_state *state, ...@@ -615,8 +615,9 @@ static int uart_set_info(struct uart_state *state,
struct serial_struct new_serial; struct serial_struct new_serial;
struct uart_port *port = state->port; struct uart_port *port = state->port;
unsigned long new_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; unsigned int old_custom_divisor, close_delay;
upf_t old_flags, new_flags;
int retval = 0; int retval = 0;
if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
...@@ -655,6 +656,7 @@ static int uart_set_info(struct uart_state *state, ...@@ -655,6 +656,7 @@ static int uart_set_info(struct uart_state *state,
new_serial.type != port->type; new_serial.type != port->type;
old_flags = port->flags; old_flags = port->flags;
new_flags = new_serial.flags;
old_custom_divisor = port->custom_divisor; old_custom_divisor = port->custom_divisor;
if (!capable(CAP_SYS_ADMIN)) { if (!capable(CAP_SYS_ADMIN)) {
...@@ -664,10 +666,10 @@ static int uart_set_info(struct uart_state *state, ...@@ -664,10 +666,10 @@ static int uart_set_info(struct uart_state *state,
(close_delay != state->close_delay) || (close_delay != state->close_delay) ||
(closing_wait != state->closing_wait) || (closing_wait != state->closing_wait) ||
(new_serial.xmit_fifo_size != port->fifosize) || (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; goto exit;
port->flags = ((port->flags & ~UPF_USR_MASK) | 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; port->custom_divisor = new_serial.custom_divisor;
goto check_and_exit; goto check_and_exit;
} }
...@@ -764,7 +766,7 @@ static int uart_set_info(struct uart_state *state, ...@@ -764,7 +766,7 @@ static int uart_set_info(struct uart_state *state,
port->irq = new_serial.irq; port->irq = new_serial.irq;
port->uartclk = new_serial.baud_base * 16; port->uartclk = new_serial.baud_base * 16;
port->flags = (port->flags & ~UPF_CHANGE_MASK) | 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; port->custom_divisor = new_serial.custom_divisor;
state->close_delay = close_delay; state->close_delay = close_delay;
state->closing_wait = closing_wait; state->closing_wait = closing_wait;
......
...@@ -26,7 +26,7 @@ struct plat_serial8250_port { ...@@ -26,7 +26,7 @@ struct plat_serial8250_port {
unsigned char regshift; /* register shift */ unsigned char regshift; /* register shift */
unsigned char iotype; /* UPIO_* */ unsigned char iotype; /* UPIO_* */
unsigned char hub6; unsigned char hub6;
unsigned int flags; /* UPF_* flags */ upf_t flags; /* UPF_* flags */
}; };
/* /*
......
...@@ -203,6 +203,8 @@ struct uart_icount { ...@@ -203,6 +203,8 @@ struct uart_icount {
__u32 buf_overrun; __u32 buf_overrun;
}; };
typedef unsigned int __bitwise__ upf_t;
struct uart_port { struct uart_port {
spinlock_t lock; /* port lock */ spinlock_t lock; /* port lock */
unsigned int iobase; /* in/out[bwl] */ unsigned int iobase; /* in/out[bwl] */
...@@ -230,29 +232,29 @@ struct uart_port { ...@@ -230,29 +232,29 @@ struct uart_port {
unsigned long sysrq; /* sysrq timeout */ unsigned long sysrq; /* sysrq timeout */
#endif #endif
unsigned int flags; upf_t flags;
#define UPF_FOURPORT (1 << 1) #define UPF_FOURPORT ((__force upf_t) (1 << 1))
#define UPF_SAK (1 << 2) #define UPF_SAK ((__force upf_t) (1 << 2))
#define UPF_SPD_MASK (0x1030) #define UPF_SPD_MASK ((__force upf_t) (0x1030))
#define UPF_SPD_HI (0x0010) #define UPF_SPD_HI ((__force upf_t) (0x0010))
#define UPF_SPD_VHI (0x0020) #define UPF_SPD_VHI ((__force upf_t) (0x0020))
#define UPF_SPD_CUST (0x0030) #define UPF_SPD_CUST ((__force upf_t) (0x0030))
#define UPF_SPD_SHI (0x1000) #define UPF_SPD_SHI ((__force upf_t) (0x1000))
#define UPF_SPD_WARP (0x1010) #define UPF_SPD_WARP ((__force upf_t) (0x1010))
#define UPF_SKIP_TEST (1 << 6) #define UPF_SKIP_TEST ((__force upf_t) (1 << 6))
#define UPF_AUTO_IRQ (1 << 7) #define UPF_AUTO_IRQ ((__force upf_t) (1 << 7))
#define UPF_HARDPPS_CD (1 << 11) #define UPF_HARDPPS_CD ((__force upf_t) (1 << 11))
#define UPF_LOW_LATENCY (1 << 13) #define UPF_LOW_LATENCY ((__force upf_t) (1 << 13))
#define UPF_BUGGY_UART (1 << 14) #define UPF_BUGGY_UART ((__force upf_t) (1 << 14))
#define UPF_MAGIC_MULTIPLIER (1 << 16) #define UPF_MAGIC_MULTIPLIER ((__force upf_t) (1 << 16))
#define UPF_CONS_FLOW (1 << 23) #define UPF_CONS_FLOW ((__force upf_t) (1 << 23))
#define UPF_SHARE_IRQ (1 << 24) #define UPF_SHARE_IRQ ((__force upf_t) (1 << 24))
#define UPF_BOOT_AUTOCONF (1 << 28) #define UPF_BOOT_AUTOCONF ((__force upf_t) (1 << 28))
#define UPF_IOREMAP (1 << 31) #define UPF_IOREMAP ((__force upf_t) (1 << 31))
#define UPF_CHANGE_MASK (0x17fff) #define UPF_CHANGE_MASK ((__force upf_t) (0x17fff))
#define UPF_USR_MASK (UPF_SPD_MASK|UPF_LOW_LATENCY) #define UPF_USR_MASK ((__force upf_t) (UPF_SPD_MASK|UPF_LOW_LATENCY))
unsigned int mctrl; /* current modem ctrl settings */ unsigned int mctrl; /* current modem ctrl settings */
unsigned int timeout; /* character-based timeout */ unsigned int timeout; /* character-based timeout */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment