#include <linux/delay.h>
#include <linux/pci.h>
#include <linux/init.h>
+#include <linux/bitops.h>
#include <asm/system.h>
#include <asm/io.h>
-#include <asm/bitops.h>
#include <asm/uaccess.h>
#define MOXA_VERSION "5.1k"
} 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;
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];
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 *);
}
#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);
put_tty_driver(moxaDriver);
if (verbose)
printk("Done\n");
-
}
module_init(moxa_init);
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);
}
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;
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) &&
#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];
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: *
void MoxaPortFlushData(int port, int mode)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
if ((mode < 0) || (mode > 2))
return;
ofsAddr = moxaTableAddr[port];
{
register ushort temp;
register int card;
- unsigned long ip, ofsAddr;
+ void __iomem *ofsAddr;
+ void __iomem *ip;
int port, p, ports;
if (moxaCard == 0)
void MoxaPortEnable(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int MoxaPortLineStatus(int);
short lowwater = 512;
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);
long MoxaPortSetBaud(int port, long baud)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
long max, clock;
unsigned int val;
int MoxaPortSetTermio(int port, struct termios *termio)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
tcflag_t cflag;
long baud;
tcflag_t mode = 0;
void MoxaPortLineCtrl(int port, int dtr, int rts)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int mode;
ofsAddr = moxaTableAddr[port];
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];
int MoxaPortLineStatus(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int val;
ofsAddr = moxaTableAddr[port];
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];
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];
int MoxaPortTxQueue(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ushort rptr, wptr, mask;
int len;
int MoxaPortTxFree(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ushort rptr, wptr, mask;
int len;
int MoxaPortRxQueue(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ushort rptr, wptr, mask;
int len;
void MoxaPortTxDisable(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ofsAddr = moxaTableAddr[port];
moxafunc(ofsAddr, FC_SetXoffState, Magic_code);
void MoxaPortTxEnable(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ofsAddr = moxaTableAddr[port];
moxafunc(ofsAddr, FC_SetXonState, Magic_code);
void MoxaPortSendBreak(int port, int ms100)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ofsAddr = moxaTableAddr[port];
if (ms100) {
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);
wait_finish(ofsAddr);
}
-static void wait_finish(unsigned long ofsAddr)
+static void wait_finish(void __iomem *ofsAddr)
{
unsigned long i, j;
}
}
-static void low_water_check(unsigned long ofsAddr)
+static void low_water_check(void __iomem *ofsAddr)
{
int len;
ushort rptr, wptr, mask;
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))
static int moxafindcard(int cardno)
{
- unsigned long baseAddr;
+ void __iomem *baseAddr;
ushort tmp;
baseAddr = moxaBaseAddr[cardno];
static int moxaload320b(int cardno, unsigned char __user *tmp, int len)
{
- unsigned long baseAddr;
+ void __iomem *baseAddr;
int i;
if(len > sizeof(moxaBuff))
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))
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;
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;
static void MoxaSetFifo(int port, int enable)
{
- unsigned long ofsAddr = moxaTableAddr[port];
+ void __iomem *ofsAddr = moxaTableAddr[port];
if (!enable) {
moxafunc(ofsAddr, FC_SetRxFIFOTrig, 0);
#if 0
int MoxaPortSetMode(int port, int databits, int stopbits, int parity)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int val;
val = 0;
int MoxaPortTxBufSize(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int size;
ofsAddr = moxaTableAddr[port];
int MoxaPortRxBufSize(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int size;
ofsAddr = moxaTableAddr[port];
int MoxaPortRxFree(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ushort rptr, wptr, mask;
int len;
void MoxaPortSetXonXoff(int port, int xonValue, int xoffValue)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
ofsAddr = moxaTableAddr[port];
writew(xonValue, ofsAddr + FuncArg);
int MoxaPortIsTxHold(int port)
{
- unsigned long ofsAddr;
+ void __iomem *ofsAddr;
int val;
ofsAddr = moxaTableAddr[port];