/* * rio_linux.h * * Copyright (C) 1998,1999,2000 R.E.Wolff@BitWizard.nl * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * RIO serial driver. * * Version 1.0 -- July, 1999. * */ #define RIO_NBOARDS 4 #define RIO_PORTSPERBOARD 128 #define RIO_NPORTS (RIO_NBOARDS * RIO_PORTSPERBOARD) #define MODEM_SUPPORT #ifdef __KERNEL__ #define RIO_MAGIC 0x12345678 struct vpd_prom { unsigned short id; char hwrev; char hwass; int uniqid; char myear; char mweek; char hw_feature[5]; char oem_id; char identifier[16]; }; #define RIO_DEBUG_ALL 0xffffffff #define O_OTHER(tty) \ ((O_OLCUC(tty)) ||\ (O_ONLCR(tty)) ||\ (O_OCRNL(tty)) ||\ (O_ONOCR(tty)) ||\ (O_ONLRET(tty)) ||\ (O_OFILL(tty)) ||\ (O_OFDEL(tty)) ||\ (O_NLDLY(tty)) ||\ (O_CRDLY(tty)) ||\ (O_TABDLY(tty)) ||\ (O_BSDLY(tty)) ||\ (O_VTDLY(tty)) ||\ (O_FFDLY(tty))) /* Same for input. */ #define I_OTHER(tty) \ ((I_INLCR(tty)) ||\ (I_IGNCR(tty)) ||\ (I_ICRNL(tty)) ||\ (I_IUCLC(tty)) ||\ (L_ISIG(tty))) #endif /* __KERNEL__ */ #define RIO_BOARD_INTR_LOCK 1 #ifndef RIOCTL_MISC_MINOR /* Allow others to gather this into "major.h" or something like that */ #define RIOCTL_MISC_MINOR 169 #endif /* Allow us to debug "in the field" without requiring clients to recompile.... */ #if 1 #define rio_spin_lock_irqsave(sem, flags) do { \ rio_dprintk (RIO_DEBUG_SPINLOCK, "spinlockirqsave: %p %s:%d\n", \ sem, __FILE__, __LINE__);\ spin_lock_irqsave(sem, flags);\ } while (0) #define rio_spin_unlock_irqrestore(sem, flags) do { \ rio_dprintk (RIO_DEBUG_SPINLOCK, "spinunlockirqrestore: %p %s:%d\n",\ sem, __FILE__, __LINE__);\ spin_unlock_irqrestore(sem, flags);\ } while (0) #define rio_spin_lock(sem) do { \ rio_dprintk (RIO_DEBUG_SPINLOCK, "spinlock: %p %s:%d\n",\ sem, __FILE__, __LINE__);\ spin_lock(sem);\ } while (0) #define rio_spin_unlock(sem) do { \ rio_dprintk (RIO_DEBUG_SPINLOCK, "spinunlock: %p %s:%d\n",\ sem, __FILE__, __LINE__);\ spin_unlock(sem);\ } while (0) #else #define rio_spin_lock_irqsave(sem, flags) \ spin_lock_irqsave(sem, flags) #define rio_spin_unlock_irqrestore(sem, flags) \ spin_unlock_irqrestore(sem, flags) #define rio_spin_lock(sem) \ spin_lock(sem) #define rio_spin_unlock(sem) \ spin_unlock(sem) #endif #ifdef CONFIG_RIO_OLDPCI static inline void __iomem *rio_memcpy_toio(void __iomem *dummy, void __iomem *dest, void *source, int n) { char __iomem *dst = dest; char *src = source; while (n--) { writeb(*src++, dst++); (void) readb(dummy); } return dest; } static inline void __iomem *rio_copy_toio(void __iomem *dest, void *source, int n) { char __iomem *dst = dest; char *src = source; while (n--) writeb(*src++, dst++); return dest; } static inline void *rio_memcpy_fromio(void *dest, void __iomem *source, int n) { char *dst = dest; char __iomem *src = source; while (n--) *dst++ = readb(src++); return dest; } #else #define rio_memcpy_toio(dummy,dest,source,n) memcpy_toio(dest, source, n) #define rio_copy_toio memcpy_toio #define rio_memcpy_fromio memcpy_fromio #endif #define DEBUG 1 /* This driver can spew a whole lot of debugging output at you. If you need maximum performance, you should disable the DEBUG define. To aid in debugging in the field, I'm leaving the compile-time debug features enabled, and disable them "runtime". That allows me to instruct people with problems to enable debugging without requiring them to recompile... */ #ifdef DEBUG #define rio_dprintk(f, str...) do { if (rio_debug & f) printk (str);} while (0) #define func_enter() rio_dprintk (RIO_DEBUG_FLOW, "rio: enter %s\n", __FUNCTION__) #define func_exit() rio_dprintk (RIO_DEBUG_FLOW, "rio: exit %s\n", __FUNCTION__) #define func_enter2() rio_dprintk (RIO_DEBUG_FLOW, "rio: enter %s (port %d)\n",__FUNCTION__, port->line) #else #define rio_dprintk(f, str...) /* nothing */ #define func_enter() #define func_exit() #define func_enter2() #endif