[PATCH] jsm fixes
a) jsm depends on PCI. Kconfig fixed.
b) spin_lock_irqsave() et.al. expect unsigned long, not u64.
c) pointer arithmetics works just fine without casts to u64, thank
you very much.
d) iomem annotations added.
e) jsm_get_mstat() lost bits - among other things it did
if (mstat & UART_MSR_DSR)
result |= TIOCM_DSR;
and ended with return result; since TIOCM_DSR is 256 on e.g. i386,
declaring result as unsigned char was a bad idea (function itself
returns int).
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index cdf110f..6e44b46 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -829,6 +829,7 @@
config SERIAL_JSM
tristate "Digi International NEO PCI Support"
+ depends on PCI
select SERIAL_CORE
help
This is a driver for Digi International's Neo series
diff --git a/drivers/serial/jsm/jsm.h b/drivers/serial/jsm/jsm.h
index 6926b10..b12ee02 100644
--- a/drivers/serial/jsm/jsm.h
+++ b/drivers/serial/jsm/jsm.h
@@ -171,7 +171,7 @@
u64 membase; /* Start of base memory of the card */
u64 membase_end; /* End of base memory of the card */
- u8 *re_map_membase;/* Remapped memory of the card */
+ u8 __iomem *re_map_membase;/* Remapped memory of the card */
u64 iobase; /* Start of io base of the card */
u64 iobase_end; /* End of io base of the card */
@@ -254,7 +254,7 @@
u8 ch_mostat; /* FEP output modem status */
u8 ch_mistat; /* FEP input modem status */
- struct neo_uart_struct *ch_neo_uart; /* Pointer to the "mapped" UART struct */
+ struct neo_uart_struct __iomem *ch_neo_uart; /* Pointer to the "mapped" UART struct */
u8 ch_cached_lsr; /* Cached value of the LSR register */
u8 *ch_rqueue; /* Our read queue buffer - malloc'ed */
diff --git a/drivers/serial/jsm/jsm_neo.c b/drivers/serial/jsm/jsm_neo.c
index 0511d6b..9b79c1f 100644
--- a/drivers/serial/jsm/jsm_neo.c
+++ b/drivers/serial/jsm/jsm_neo.c
@@ -690,7 +690,7 @@
*/
void neo_clear_break(struct jsm_channel *ch, int force)
{
- u64 lock_flags;
+ unsigned long lock_flags;
spin_lock_irqsave(&ch->ch_lock, lock_flags);
@@ -717,7 +717,7 @@
struct jsm_channel *ch;
u8 isr;
u8 cause;
- u64 lock_flags;
+ unsigned long lock_flags;
if (!brd)
return;
@@ -830,7 +830,7 @@
{
struct jsm_channel *ch;
int linestatus;
- u64 lock_flags;
+ unsigned long lock_flags;
if (!brd)
return;
diff --git a/drivers/serial/jsm/jsm_tty.c b/drivers/serial/jsm/jsm_tty.c
index b6bc881..7fb7cc0 100644
--- a/drivers/serial/jsm/jsm_tty.c
+++ b/drivers/serial/jsm/jsm_tty.c
@@ -34,7 +34,7 @@
static inline int jsm_get_mstat(struct jsm_channel *ch)
{
unsigned char mstat;
- unsigned char result;
+ unsigned result;
jsm_printk(IOCTL, INFO, &ch->ch_bd->pci_dev, "start\n");
@@ -359,7 +359,7 @@
int jsm_tty_init(struct jsm_board *brd)
{
int i;
- u8 *vaddr;
+ void __iomem *vaddr;
struct jsm_channel *ch;
if (!brd)
@@ -371,8 +371,6 @@
* Initialize board structure elements.
*/
- vaddr = brd->re_map_membase;
-
brd->nasync = brd->maxports;
/*
@@ -408,8 +406,7 @@
spin_lock_init(&ch->ch_lock);
if (brd->bd_uart_offset == 0x200)
- ch->ch_neo_uart = (struct neo_uart_struct *) ((u64) vaddr
- + (brd->bd_uart_offset * i));
+ ch->ch_neo_uart = vaddr + (brd->bd_uart_offset * i);
ch->ch_bd = brd;
ch->ch_portnum = i;
@@ -427,7 +424,6 @@
int jsm_uart_port_init(struct jsm_board *brd)
{
int i;
- u8 *vaddr;
struct jsm_channel *ch;
if (!brd)
@@ -439,7 +435,6 @@
* Initialize board structure elements.
*/
- vaddr = brd->re_map_membase;
brd->nasync = brd->maxports;
/* Set up channel variables */
@@ -504,7 +499,7 @@
u16 head;
u16 tail;
int data_len;
- u64 lock_flags;
+ unsigned long lock_flags;
int flip_len;
int len = 0;
int n = 0;