X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fmoxa.c;fp=drivers%2Fchar%2Fmoxa.c;h=10ba9bfb5d2c352e33f5c1b1c28ba66da515cb95;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=d45d381d444f3e94961c5bad08c72ae50fbb52b1;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/char/moxa.c b/drivers/char/moxa.c index d45d381d4..10ba9bfb5 100644 --- a/drivers/char/moxa.c +++ b/drivers/char/moxa.c @@ -50,10 +50,10 @@ #include #include #include +#include #include #include -#include #include #define MOXA_VERSION "5.1k" @@ -142,7 +142,7 @@ typedef struct _moxa_board_conf { } moxa_board_conf; static moxa_board_conf moxa_boards[MAX_BOARDS]; -static unsigned long moxaBaseAddr[MAX_BOARDS]; +static void __iomem *moxaBaseAddr[MAX_BOARDS]; struct moxa_str { int type; @@ -201,11 +201,13 @@ static int numports[] = {0, 0, 0, 0}; MODULE_AUTHOR("William Chen"); MODULE_DESCRIPTION("MOXA Intellio Family Multiport Board Device Driver"); MODULE_LICENSE("GPL"); -MODULE_PARM(type, "1-4i"); -MODULE_PARM(baseaddr, "1-4i"); -MODULE_PARM(numports, "1-4i"); -MODULE_PARM(ttymajor, "i"); -MODULE_PARM(verbose, "i"); +#ifdef MODULE +module_param_array(type, int, NULL, 0); +module_param_array(baseaddr, int, NULL, 0); +module_param_array(numports, int, NULL, 0); +#endif +module_param(ttymajor, int, 0); +module_param(verbose, bool, 0644); static struct tty_driver *moxaDriver; static struct moxa_str moxaChannels[MAX_PORTS]; @@ -222,7 +224,7 @@ static struct semaphore moxaBuffSem; static void do_moxa_softint(void *); static int moxa_open(struct tty_struct *, struct file *); static void moxa_close(struct tty_struct *, struct file *); -static int moxa_write(struct tty_struct *, int, const unsigned char *, int); +static int moxa_write(struct tty_struct *, const unsigned char *, int); static int moxa_write_room(struct tty_struct *); static void moxa_flush_buffer(struct tty_struct *); static int moxa_chars_in_buffer(struct tty_struct *); @@ -467,7 +469,7 @@ static int __init moxa_init(void) } #endif for (i = 0; i < numBoards; i++) { - moxaBaseAddr[i] = (unsigned long) ioremap((unsigned long) moxa_boards[i].baseAddr, 0x4000); + moxaBaseAddr[i] = ioremap((unsigned long) moxa_boards[i].baseAddr, 0x4000); } return (0); @@ -492,7 +494,6 @@ static void __exit moxa_exit(void) put_tty_driver(moxaDriver); if (verbose) printk("Done\n"); - } module_init(moxa_init); @@ -625,8 +626,7 @@ static void moxa_close(struct tty_struct *tty, struct file *filp) ch->tty = NULL; if (ch->blocked_open) { if (ch->close_delay) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(ch->close_delay); + msleep_interruptible(jiffies_to_msecs(ch->close_delay)); } wake_up_interruptible(&ch->open_wait); } @@ -634,7 +634,7 @@ static void moxa_close(struct tty_struct *tty, struct file *filp) wake_up_interruptible(&ch->close_wait); } -static int moxa_write(struct tty_struct *tty, int from_user, +static int moxa_write(struct tty_struct *tty, const unsigned char *buf, int count) { struct moxa_str *ch; @@ -646,25 +646,9 @@ static int moxa_write(struct tty_struct *tty, int from_user, return (0); port = ch->port; save_flags(flags); - if (from_user) { - if (count > PAGE_SIZE) - count = PAGE_SIZE; - down(&moxaBuffSem); - if (copy_from_user(moxaXmitBuff, buf, count)) { - len = -EFAULT; - } else { - cli(); - len = MoxaPortWriteData(port, moxaXmitBuff, count); - restore_flags(flags); - } - up(&moxaBuffSem); - if (len < 0) - return len; - } else { - cli(); - len = MoxaPortWriteData(port, (unsigned char *) buf, count); - restore_flags(flags); - } + cli(); + len = MoxaPortWriteData(port, (unsigned char *) buf, count); + restore_flags(flags); /********************************************* if ( !(ch->statusflags & LOWWAIT) && @@ -694,7 +678,6 @@ static void moxa_flush_buffer(struct tty_struct *tty) return; MoxaPortFlushData(ch->port, 1); tty_wakeup(tty); - wake_up_interruptible(&tty->write_wait); } static int moxa_chars_in_buffer(struct tty_struct *tty) @@ -953,7 +936,6 @@ static void moxa_poll(unsigned long ignored) if (!tp->stopped) { ch->statusflags &= ~LOWWAIT; tty_wakeup(tp); - wake_up_interruptible(&tp->write_wait); } } } @@ -1120,7 +1102,6 @@ static void check_xmit_empty(unsigned long data) if (MoxaPortTxQueue(ch->port) == 0) { ch->statusflags &= ~EMPTYWAIT; tty_wakeup(ch->tty); - wake_up_interruptible(&ch->tty->write_wait); return; } moxaEmptyTimer[ch->port].expires = jiffies + HZ; @@ -1498,12 +1479,12 @@ typedef struct mon_str mon_st; #define DCD_oldstate 0x80 static unsigned char moxaBuff[10240]; -static unsigned long moxaIntNdx[MAX_BOARDS]; -static unsigned long moxaIntPend[MAX_BOARDS]; -static unsigned long moxaIntTable[MAX_BOARDS]; +static void __iomem *moxaIntNdx[MAX_BOARDS]; +static void __iomem *moxaIntPend[MAX_BOARDS]; +static void __iomem *moxaIntTable[MAX_BOARDS]; static char moxaChkPort[MAX_PORTS]; static char moxaLineCtrl[MAX_PORTS]; -static unsigned long moxaTableAddr[MAX_PORTS]; +static void __iomem *moxaTableAddr[MAX_PORTS]; static long moxaCurBaud[MAX_PORTS]; static char moxaDCDState[MAX_PORTS]; static char moxaLowChkFlag[MAX_PORTS]; @@ -1514,15 +1495,15 @@ static int moxaFuncTout; static ushort moxaBreakCnt[MAX_PORTS]; static void moxadelay(int); -static void moxafunc(unsigned long, int, ushort); -static void wait_finish(unsigned long); -static void low_water_check(unsigned long); +static void moxafunc(void __iomem *, int, ushort); +static void wait_finish(void __iomem *); +static void low_water_check(void __iomem *); static int moxaloadbios(int, unsigned char __user *, int); static int moxafindcard(int); static int moxaload320b(int, unsigned char __user *, int); static int moxaloadcode(int, unsigned char __user *, int); -static int moxaloadc218(int, unsigned long, int); -static int moxaloadc320(int, unsigned long, int, int *); +static int moxaloadc218(int, void __iomem *, int); +static int moxaloadc320(int, void __iomem *, int, int *); /***************************************************************************** * Driver level functions: * @@ -1580,7 +1561,7 @@ static struct dl_str dltmp; void MoxaPortFlushData(int port, int mode) { - unsigned long ofsAddr; + void __iomem *ofsAddr; if ((mode < 0) || (mode > 2)) return; ofsAddr = moxaTableAddr[port]; @@ -1712,7 +1693,8 @@ int MoxaDriverPoll(void) { register ushort temp; register int card; - unsigned long ip, ofsAddr; + void __iomem *ofsAddr; + void __iomem *ip; int port, p, ports; if (moxaCard == 0) @@ -2145,7 +2127,7 @@ int MoxaPortIsValid(int port) void MoxaPortEnable(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int MoxaPortLineStatus(int); short lowwater = 512; @@ -2168,9 +2150,8 @@ void MoxaPortEnable(int port) void MoxaPortDisable(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr = moxaTableAddr[port]; - ofsAddr = moxaTableAddr[port]; moxafunc(ofsAddr, FC_SetFlowCtl, 0); /* disable flow control */ moxafunc(ofsAddr, FC_ClrLineIrq, Magic_code); writew(0, ofsAddr + HostStat); @@ -2189,7 +2170,7 @@ long MoxaPortGetMaxBaud(int port) long MoxaPortSetBaud(int port, long baud) { - unsigned long ofsAddr; + void __iomem *ofsAddr; long max, clock; unsigned int val; @@ -2213,7 +2194,7 @@ long MoxaPortSetBaud(int port, long baud) int MoxaPortSetTermio(int port, struct termios *termio) { - unsigned long ofsAddr; + void __iomem *ofsAddr; tcflag_t cflag; long baud; tcflag_t mode = 0; @@ -2358,7 +2339,7 @@ int MoxaPortGetLineOut(int port, int *dtrState, int *rtsState) void MoxaPortLineCtrl(int port, int dtr, int rts) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int mode; ofsAddr = moxaTableAddr[port]; @@ -2373,7 +2354,7 @@ void MoxaPortLineCtrl(int port, int dtr, int rts) void MoxaPortFlowCtrl(int port, int rts, int cts, int txflow, int rxflow, int txany) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int mode; ofsAddr = moxaTableAddr[port]; @@ -2393,7 +2374,7 @@ void MoxaPortFlowCtrl(int port, int rts, int cts, int txflow, int rxflow, int tx int MoxaPortLineStatus(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int val; ofsAddr = moxaTableAddr[port]; @@ -2466,7 +2447,7 @@ int MoxaPortWriteData(int port, unsigned char * buffer, int len) int cnt; ushort head, tx_mask, spage, epage; ushort pageno, pageofs, bufhead; - unsigned long baseAddr, ofsAddr, ofs; + void __iomem *baseAddr, *ofsAddr, *ofs; ofsAddr = moxaTableAddr[port]; baseAddr = moxaBaseAddr[port / MAX_PORTS_PER_BOARD]; @@ -2529,7 +2510,7 @@ int MoxaPortReadData(int port, unsigned char * buffer, int space) int i, count, cnt, len, total, remain; ushort tail, rx_mask, spage, epage; ushort pageno, bufhead; - unsigned long baseAddr, ofsAddr, ofs; + void __iomem *baseAddr, *ofsAddr, *ofs; ofsAddr = moxaTableAddr[port]; baseAddr = moxaBaseAddr[port / MAX_PORTS_PER_BOARD]; @@ -2595,7 +2576,7 @@ int MoxaPortReadData(int port, unsigned char * buffer, int space) int MoxaPortTxQueue(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ushort rptr, wptr, mask; int len; @@ -2609,7 +2590,7 @@ int MoxaPortTxQueue(int port) int MoxaPortTxFree(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ushort rptr, wptr, mask; int len; @@ -2623,7 +2604,7 @@ int MoxaPortTxFree(int port) int MoxaPortRxQueue(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ushort rptr, wptr, mask; int len; @@ -2638,7 +2619,7 @@ int MoxaPortRxQueue(int port) void MoxaPortTxDisable(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ofsAddr = moxaTableAddr[port]; moxafunc(ofsAddr, FC_SetXoffState, Magic_code); @@ -2646,7 +2627,7 @@ void MoxaPortTxDisable(int port) void MoxaPortTxEnable(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ofsAddr = moxaTableAddr[port]; moxafunc(ofsAddr, FC_SetXonState, Magic_code); @@ -2664,7 +2645,7 @@ int MoxaPortResetBrkCnt(int port) void MoxaPortSendBreak(int port, int ms100) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ofsAddr = moxaTableAddr[port]; if (ms100) { @@ -2753,7 +2734,7 @@ static void moxadelay(int tick) while (time_before(jiffies, et)); } -static void moxafunc(unsigned long ofsAddr, int cmd, ushort arg) +static void moxafunc(void __iomem *ofsAddr, int cmd, ushort arg) { writew(arg, ofsAddr + FuncArg); @@ -2761,7 +2742,7 @@ static void moxafunc(unsigned long ofsAddr, int cmd, ushort arg) wait_finish(ofsAddr); } -static void wait_finish(unsigned long ofsAddr) +static void wait_finish(void __iomem *ofsAddr) { unsigned long i, j; @@ -2774,7 +2755,7 @@ static void wait_finish(unsigned long ofsAddr) } } -static void low_water_check(unsigned long ofsAddr) +static void low_water_check(void __iomem *ofsAddr) { int len; ushort rptr, wptr, mask; @@ -2791,7 +2772,7 @@ static void low_water_check(unsigned long ofsAddr) static int moxaloadbios(int cardno, unsigned char __user *tmp, int len) { - unsigned long baseAddr; + void __iomem *baseAddr; int i; if(copy_from_user(moxaBuff, tmp, len)) @@ -2809,7 +2790,7 @@ static int moxaloadbios(int cardno, unsigned char __user *tmp, int len) static int moxafindcard(int cardno) { - unsigned long baseAddr; + void __iomem *baseAddr; ushort tmp; baseAddr = moxaBaseAddr[cardno]; @@ -2838,7 +2819,7 @@ static int moxafindcard(int cardno) static int moxaload320b(int cardno, unsigned char __user *tmp, int len) { - unsigned long baseAddr; + void __iomem *baseAddr; int i; if(len > sizeof(moxaBuff)) @@ -2858,7 +2839,7 @@ static int moxaload320b(int cardno, unsigned char __user *tmp, int len) static int moxaloadcode(int cardno, unsigned char __user *tmp, int len) { - unsigned long baseAddr, ofsAddr; + void __iomem *baseAddr, *ofsAddr; int retval, port, i; if(copy_from_user(moxaBuff, tmp, len)) @@ -2938,7 +2919,7 @@ static int moxaloadcode(int cardno, unsigned char __user *tmp, int len) return (0); } -static int moxaloadc218(int cardno, unsigned long baseAddr, int len) +static int moxaloadc218(int cardno, void __iomem *baseAddr, int len) { char retry; int i, j, len1, len2; @@ -3014,7 +2995,7 @@ static int moxaloadc218(int cardno, unsigned long baseAddr, int len) return (0); } -static int moxaloadc320(int cardno, unsigned long baseAddr, int len, int *numPorts) +static int moxaloadc320(int cardno, void __iomem *baseAddr, int len, int *numPorts) { ushort usum; int i, j, wlen, len2, retry; @@ -3119,7 +3100,7 @@ long MoxaPortGetCurBaud(int port) static void MoxaSetFifo(int port, int enable) { - unsigned long ofsAddr = moxaTableAddr[port]; + void __iomem *ofsAddr = moxaTableAddr[port]; if (!enable) { moxafunc(ofsAddr, FC_SetRxFIFOTrig, 0); @@ -3133,7 +3114,7 @@ static void MoxaSetFifo(int port, int enable) #if 0 int MoxaPortSetMode(int port, int databits, int stopbits, int parity) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int val; val = 0; @@ -3192,7 +3173,7 @@ int MoxaPortSetMode(int port, int databits, int stopbits, int parity) int MoxaPortTxBufSize(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int size; ofsAddr = moxaTableAddr[port]; @@ -3202,7 +3183,7 @@ int MoxaPortTxBufSize(int port) int MoxaPortRxBufSize(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int size; ofsAddr = moxaTableAddr[port]; @@ -3212,7 +3193,7 @@ int MoxaPortRxBufSize(int port) int MoxaPortRxFree(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ushort rptr, wptr, mask; int len; @@ -3230,7 +3211,7 @@ int MoxaPortGetBrkCnt(int port) void MoxaPortSetXonXoff(int port, int xonValue, int xoffValue) { - unsigned long ofsAddr; + void __iomem *ofsAddr; ofsAddr = moxaTableAddr[port]; writew(xonValue, ofsAddr + FuncArg); @@ -3241,7 +3222,7 @@ void MoxaPortSetXonXoff(int port, int xonValue, int xoffValue) int MoxaPortIsTxHold(int port) { - unsigned long ofsAddr; + void __iomem *ofsAddr; int val; ofsAddr = moxaTableAddr[port];