rio_linux.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:42k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* rio_linux.c -- Linux driver for the Specialix RIO series cards. 
  2.  *
  3.  *
  4.  *   (C) 1999 R.E.Wolff@BitWizard.nl
  5.  *
  6.  * Specialix pays for the development and support of this driver.
  7.  * Please DO contact support@specialix.co.uk if you require
  8.  * support. But please read the documentation (rio.txt) first.
  9.  *
  10.  *
  11.  *
  12.  *      This program is free software; you can redistribute it and/or
  13.  *      modify it under the terms of the GNU General Public License as
  14.  *      published by the Free Software Foundation; either version 2 of
  15.  *      the License, or (at your option) any later version.
  16.  *
  17.  *      This program is distributed in the hope that it will be
  18.  *      useful, but WITHOUT ANY WARRANTY; without even the implied
  19.  *      warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  20.  *      PURPOSE.  See the GNU General Public License for more details.
  21.  *
  22.  *      You should have received a copy of the GNU General Public
  23.  *      License along with this program; if not, write to the Free
  24.  *      Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  25.  *      USA.
  26.  *
  27.  * Revision history:
  28.  * $Log: rio.c,v $
  29.  * Revision 1.1  1999/07/11 10:13:54  wolff
  30.  * Initial revision
  31.  *
  32.  * */
  33. #define RCS_ID "$Id: rio.c,v 1.1 1999/07/11 10:13:54 wolff Exp wolff $"
  34. #define RCS_REV "$Revision: 1.1 $"
  35. #include <linux/module.h>
  36. #include <linux/config.h> 
  37. #include <linux/kdev_t.h>
  38. #include <asm/io.h>
  39. #include <linux/kernel.h>
  40. #include <linux/sched.h>
  41. #include <linux/ioport.h>
  42. #include <linux/interrupt.h>
  43. #include <linux/errno.h>
  44. #include <linux/tty.h>
  45. #include <linux/tty_flip.h>
  46. #include <linux/mm.h>
  47. #include <linux/serial.h>
  48. #include <linux/fcntl.h>
  49. #include <linux/major.h>
  50. #include <linux/delay.h>
  51. #include <linux/tqueue.h>
  52. #include <linux/version.h>
  53. #include <linux/pci.h>
  54. #include <linux/slab.h>
  55. #include <linux/miscdevice.h>
  56. #include <linux/init.h>
  57. #include <linux/compatmac.h>
  58. #include <linux/generic_serial.h>
  59. #if BITS_PER_LONG != 32
  60. #  error FIXME: this driver only works on 32-bit platforms
  61. #endif
  62. #include "linux_compat.h"
  63. #include "typdef.h"
  64. #include "pkt.h"
  65. #include "daemon.h"
  66. #include "rio.h"
  67. #include "riospace.h"
  68. #include "top.h"
  69. #include "cmdpkt.h"
  70. #include "map.h"
  71. #include "riotypes.h"
  72. #include "rup.h"
  73. #include "port.h"
  74. #include "riodrvr.h"
  75. #include "rioinfo.h"
  76. #include "func.h"
  77. #include "errors.h"
  78. #include "pci.h"
  79. #include "parmmap.h"
  80. #include "unixrup.h"
  81. #include "board.h"
  82. #include "host.h"
  83. #include "error.h"
  84. #include "phb.h"
  85. #include "link.h"
  86. #include "cmdblk.h"
  87. #include "route.h"
  88. #include "control.h"
  89. #include "cirrus.h"
  90. #include "rioioctl.h"
  91. #include "param.h"
  92. #include "list.h"
  93. #include "sam.h"
  94. #include "protsts.h"
  95. #include "rioboard.h"
  96. #include "rio_linux.h"
  97. /* I don't think that this driver can handle more than 512 ports on
  98. one machine.  Specialix specifies max 4 boards in one machine. I don't
  99. know why. If you want to try anyway you'll have to increase the number
  100. of boards in rio.h.  You'll have to allocate more majors if you need
  101. more than 512 ports.... */
  102. /* Why the hell am I defining these here? */
  103. #define RIO_TYPE_NORMAL 1
  104. #define RIO_TYPE_CALLOUT 2
  105. #ifndef RIO_NORMAL_MAJOR0
  106. /* This allows overriding on the compiler commandline, or in a "major.h" 
  107.    include or something like that */
  108. #define RIO_NORMAL_MAJOR0  154
  109. #define RIO_CALLOUT_MAJOR0 155
  110. #define RIO_NORMAL_MAJOR1  156
  111. #define RIO_CALLOUT_MAJOR1 157
  112. #endif
  113. #ifndef PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8
  114. #define PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8 0x2000
  115. #endif
  116. #ifndef RIO_WINDOW_LEN 
  117. #define RIO_WINDOW_LEN 0x10000
  118. #endif
  119. /* Configurable options: 
  120.    (Don't be too sure that it'll work if you toggle them) */
  121. /* Am I paranoid or not ? ;-) */
  122. #undef RIO_PARANOIA_CHECK
  123. /* 20 -> 2000 per second. The card should rate-limit interrupts at 1000
  124.    Hz, but it is user configurable. I don't recommend going above 1000
  125.    Hz. The interrupt ratelimit might trigger if the interrupt is
  126.    shared with a very active other device. 
  127.    undef this if you want to disable the check....
  128. */
  129. #define IRQ_RATE_LIMIT 200
  130. #if 0
  131. /* Not implemented */
  132. /* 
  133.  * The following defines are mostly for testing purposes. But if you need
  134.  * some nice reporting in your syslog, you can define them also.
  135.  */
  136. #define RIO_REPORT_FIFO
  137. #define RIO_REPORT_OVERRUN
  138. #endif 
  139. /* These constants are derived from SCO Source */
  140. static struct Conf
  141. RIOConf =
  142. {
  143.   /* locator */         "RIO Config here",
  144.   /* startuptime */     HZ*2,           /* how long to wait for card to run */
  145.   /* slowcook */        0,              /* TRUE -> always use line disc. */
  146.   /* intrpolltime */    1,              /* The frequency of OUR polls */
  147.   /* breakinterval */   25,             /* x10 mS XXX: units seem to be 1ms not 10! -- REW*/
  148.   /* timer */           10,             /* mS */
  149.   /* RtaLoadBase */     0x7000,
  150.   /* HostLoadBase */    0x7C00,
  151.   /* XpHz */            5,              /* number of Xprint hits per second */
  152.   /* XpCps */           120,            /* Xprint characters per second */
  153.   /* XpOn */            "33d#",       /* start Xprint for a wyse 60 */
  154.   /* XpOff */           "24",         /* end Xprint for a wyse 60 */
  155.   /* MaxXpCps */        2000,           /* highest Xprint speed */
  156.   /* MinXpCps */        10,             /* slowest Xprint speed */
  157.   /* SpinCmds */        1,              /* non-zero for mega fast boots */
  158.   /* First Addr */      0x0A0000,       /* First address to look at */
  159.   /* Last Addr */       0xFF0000,       /* Last address looked at */
  160.   /* BufferSize */      1024,           /* Bytes per port of buffering */
  161.   /* LowWater */        256,            /* how much data left before wakeup */
  162.   /* LineLength */      80,             /* how wide is the console? */
  163.   /* CmdTimeout */      HZ,             /* how long a close command may take */
  164. };
  165. /* Function prototypes */
  166. static void rio_disable_tx_interrupts (void * ptr); 
  167. static void rio_enable_tx_interrupts (void * ptr); 
  168. static void rio_disable_rx_interrupts (void * ptr); 
  169. static void rio_enable_rx_interrupts (void * ptr); 
  170. static int  rio_get_CD (void * ptr); 
  171. static void rio_shutdown_port (void * ptr);
  172. static int  rio_set_real_termios (void  *ptr);
  173. static void rio_hungup (void  *ptr);
  174. static void rio_close (void  *ptr);
  175. static int rio_chars_in_buffer (void * ptr);
  176. static int rio_fw_ioctl (struct inode *inode, struct file *filp,
  177.          unsigned int cmd, unsigned long arg);
  178. static int rio_init_drivers(void);
  179. void my_hd (void *addr, int len);
  180. static struct tty_driver rio_driver, rio_callout_driver;
  181. static struct tty_driver rio_driver2, rio_callout_driver2;
  182. static struct tty_struct * rio_table[RIO_NPORTS];
  183. static struct termios ** rio_termios;
  184. static struct termios ** rio_termios_locked;
  185. /* The name "p" is a bit non-descript. But that's what the rio-lynxos
  186. sources use all over the place. */
  187. struct rio_info *p;
  188. /* struct rio_board boards[RIO_HOSTS]; */
  189. struct rio_port *rio_ports;
  190. int rio_refcount;
  191. int rio_initialized;
  192. int rio_nports;
  193. int rio_debug;
  194. /* You can have the driver poll your card. 
  195.     - Set rio_poll to 1 to poll every timer tick (10ms on Intel). 
  196.       This is used when the card cannot use an interrupt for some reason.
  197. */
  198. int rio_poll = 1;
  199. /* These are the only open spaces in my computer. Yours may have more
  200.    or less.... */
  201. int rio_probe_addrs[]= {0xc0000, 0xd0000, 0xe0000};
  202. #define NR_RIO_ADDRS (sizeof(rio_probe_addrs)/sizeof (int))
  203. /* Set the mask to all-ones. This alas, only supports 32 interrupts. 
  204.    Some architectures may need more. -- Changed to LONG to
  205.    support up to 64 bits on 64bit architectures. -- REW 20/06/99 */
  206. long rio_irqmask = -1;
  207. #ifndef TWO_ZERO
  208. MODULE_AUTHOR("Rogier Wolff <R.E.Wolff@bitwizard.nl>, Patrick van de Lageweg <patrick@bitwizard.nl>");
  209. MODULE_DESCRIPTION("RIO driver");
  210. MODULE_LICENSE("GPL");
  211. MODULE_PARM(rio_poll, "i");
  212. MODULE_PARM(rio_debug, "i");
  213. MODULE_PARM(rio_irqmask, "i");
  214. #endif
  215. static struct real_driver rio_real_driver = {
  216.   rio_disable_tx_interrupts,
  217.   rio_enable_tx_interrupts,
  218.   rio_disable_rx_interrupts,
  219.   rio_enable_rx_interrupts,
  220.   rio_get_CD,
  221.   rio_shutdown_port, 
  222.   rio_set_real_termios, 
  223.   rio_chars_in_buffer,
  224.   rio_close,
  225.   rio_hungup,
  226.   NULL
  227. };
  228. /* 
  229.  *  Firmware loader driver specific routines
  230.  *
  231.  */
  232. static struct file_operations rio_fw_fops = {
  233. owner: THIS_MODULE,
  234. ioctl: rio_fw_ioctl,
  235. };
  236. struct miscdevice rio_fw_device = {
  237. RIOCTL_MISC_MINOR, "rioctl", &rio_fw_fops
  238. };
  239. #ifdef RIO_PARANOIA_CHECK
  240. /* This doesn't work. Who's paranoid around here? Not me! */
  241. static inline int rio_paranoia_check(struct rio_port const * port,
  242.     kdev_t device, const char *routine)
  243. {
  244.   static const char *badmagic =
  245.     KERN_ERR "rio: Warning: bad rio port magic number for device %s in %sn";
  246.   static const char *badinfo =
  247.     KERN_ERR "rio: Warning: null rio port for device %s in %sn";
  248.  
  249.   if (!port) {
  250.     printk (badinfo, kdevname(device), routine);
  251.     return 1;
  252.   }
  253.   if (port->magic != RIO_MAGIC) {
  254.     printk (badmagic, kdevname(device), routine);
  255.     return 1;
  256.   }
  257.   return 0;
  258. }
  259. #else
  260. #define rio_paranoia_check(a,b,c) 0
  261. #endif
  262. #ifdef DEBUG
  263. void my_hd (void *ad, int len)
  264. {
  265.   int i, j, ch;
  266.   unsigned char *addr = ad;
  267.   
  268.   for (i=0;i<len;i+=16) {
  269.     rio_dprintk (RIO_DEBUG_PARAM, "%08x ", (int) addr+i);
  270.     for (j=0;j<16;j++) {
  271.       rio_dprintk (RIO_DEBUG_PARAM, "%02x %s", addr[j+i], (j==7)?" ":"");
  272.     }
  273.     for (j=0;j<16;j++) {
  274.       ch = addr[j+i];
  275.       rio_dprintk (RIO_DEBUG_PARAM, "%c", (ch < 0x20)?'.':((ch > 0x7f)?'.':ch));
  276.     }
  277.     rio_dprintk (RIO_DEBUG_PARAM, "n");
  278.   }
  279. }
  280. #else
  281. #define my_hd(ad,len) do{/* nothing*/ } while (0)
  282. #endif
  283. /* Delay a number of jiffies, allowing a signal to interrupt */ 
  284. int RIODelay (struct Port *PortP, int njiffies)
  285. {
  286.   func_enter ();
  287.   rio_dprintk (RIO_DEBUG_DELAY, "delaying %d jiffiesn", njiffies);  
  288.   current->state = TASK_INTERRUPTIBLE;
  289.   schedule_timeout(njiffies);
  290.   current->state = TASK_RUNNING;
  291.   func_exit();
  292.   if (signal_pending(current))
  293.     return RIO_FAIL;
  294.   else
  295.     return !RIO_FAIL;
  296. }
  297. /* Delay a number of jiffies, disallowing a signal to interrupt */ 
  298. int RIODelay_ni (struct Port *PortP, int njiffies)
  299. {
  300.   func_enter ();
  301.   rio_dprintk (RIO_DEBUG_DELAY, "delaying %d jiffies (ni)n", njiffies);  
  302.   current->state = TASK_UNINTERRUPTIBLE;
  303.   schedule_timeout(njiffies);
  304.   current->state = TASK_RUNNING;
  305.   func_exit();
  306.   return !RIO_FAIL;
  307. }
  308. int rio_minor (kdev_t device)
  309. {
  310.   return MINOR (device) + 
  311.     256 * ((MAJOR (device) == RIO_NORMAL_MAJOR1) ||
  312.    (MAJOR (device) == RIO_CALLOUT_MAJOR1));
  313. }
  314. int rio_ismodem (kdev_t device)
  315. {
  316.   return (MAJOR (device) == RIO_NORMAL_MAJOR0) ||
  317.          (MAJOR (device) == RIO_NORMAL_MAJOR1);
  318. }
  319. void rio_udelay (int usecs)
  320. {
  321.   udelay (usecs);
  322. }
  323. void rio_inc_mod_count (void)
  324. {
  325. #ifdef MODULE
  326.   func_enter ();
  327.   rio_dprintk (RIO_DEBUG_MOD_COUNT, "rio_inc_mod_countn");
  328.   MOD_INC_USE_COUNT; 
  329.   func_exit ();
  330. #endif
  331. }
  332. void rio_dec_mod_count (void)
  333. {
  334. #ifdef MODULE
  335.   func_enter ();
  336.   rio_dprintk (RIO_DEBUG_MOD_COUNT, "rio_dec_mod_countn");
  337.   MOD_DEC_USE_COUNT; 
  338.   func_exit ();
  339. #endif
  340. }
  341. static int rio_set_real_termios (void *ptr)
  342. {
  343.   int rv, modem;
  344.   struct tty_struct *tty;
  345.   func_enter();
  346.   tty = ((struct Port *)ptr)->gs.tty;
  347.   modem = (MAJOR(tty->device) == RIO_NORMAL_MAJOR0) || (MAJOR(tty->device) == RIO_NORMAL_MAJOR1);
  348.   rv = RIOParam( (struct Port *) ptr, CONFIG, modem, 1);
  349.   func_exit ();
  350.   return rv;
  351. }
  352. void rio_reset_interrupt (struct Host *HostP)
  353. {
  354.   func_enter();
  355.   switch( HostP->Type ) {
  356.   case RIO_AT:
  357.   case RIO_MCA:
  358.   case RIO_PCI:
  359.     WBYTE(HostP->ResetInt , 0xff);
  360.   }
  361.   func_exit();
  362. }
  363. static void rio_interrupt (int irq, void *ptr, struct pt_regs *regs)
  364. {
  365.   struct Host *HostP;
  366.   func_enter ();
  367.   HostP = (struct Host*)ptr; /* &p->RIOHosts[(long)ptr]; */
  368.   rio_dprintk (RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)n", 
  369.                irq, HostP->Ivec); 
  370.   /* AAargh! The order in which to do these things is essential and
  371.      not trivial. 
  372.      
  373.      - Rate limit goes before "recursive". Otherwise a series of
  374.        recursive calls will hang the machine in the interrupt routine. 
  375.      - hardware twiddling goes before "recursive". Otherwise when we
  376.        poll the card, and a recursive interrupt happens, we wont
  377.        ack the card, so it might keep on interrupting us. (especially
  378.        level sensitive interrupt systems like PCI).
  379.      - Rate limit goes before hardware twiddling. Otherwise we won't
  380.        catch a card that has gone bonkers.
  381.      - The "initialized" test goes after the hardware twiddling. Otherwise
  382.        the card will stick us in the interrupt routine again.
  383.      - The initialized test goes before recursive. 
  384.   */
  385. #ifdef IRQ_RATE_LIMIT
  386.   /* Aaargh! I'm ashamed. This costs more lines-of-code than the
  387.      actual interrupt routine!. (Well, used to when I wrote that comment) */
  388.   {
  389.     static int lastjif;
  390.     static int nintr=0;
  391.     if (lastjif == jiffies) {
  392.       if (++nintr > IRQ_RATE_LIMIT) {
  393.         free_irq (HostP->Ivec, ptr);
  394.         printk (KERN_ERR "rio: Too many interrupts. Turning off interrupt %d.n", 
  395.                 HostP->Ivec);
  396.       }
  397.     } else {
  398.       lastjif = jiffies;
  399.       nintr = 0;
  400.     }
  401.   }
  402. #endif
  403.   rio_dprintk (RIO_DEBUG_IFLOW, "rio: We've have noticed the interruptn"); 
  404.   if (HostP->Ivec == irq) {
  405.     /* Tell the card we've noticed the interrupt. */
  406.     rio_reset_interrupt (HostP);
  407.   }
  408.   if ((HostP->Flags & RUN_STATE) != RC_RUNNING) return;
  409.   if (test_and_set_bit (RIO_BOARD_INTR_LOCK, &HostP->locks)) {
  410.     printk (KERN_ERR "Recursive interrupt! (host %d/irq%d)n", 
  411.             (int) ptr, HostP->Ivec);
  412.     return;
  413.   }
  414.   RIOServiceHost(p, HostP, irq);
  415.   rio_dprintk ( RIO_DEBUG_IFLOW, "riointr() doing host %d type %dn", 
  416.                 (int) ptr, HostP->Type);
  417.   clear_bit (RIO_BOARD_INTR_LOCK, &HostP->locks);
  418.   rio_dprintk (RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)n", 
  419.                irq, HostP->Ivec); 
  420.   func_exit ();
  421. }
  422. static void rio_pollfunc (unsigned long data)
  423. {
  424.   func_enter ();
  425.   rio_interrupt (0, &p->RIOHosts[data], NULL);
  426.   p->RIOHosts[data].timer.expires = jiffies + rio_poll;
  427.   add_timer (&p->RIOHosts[data].timer);
  428.   func_exit ();
  429. }
  430. /* ********************************************************************** *
  431.  *                Here are the routines that actually                     *
  432.  *              interface with the generic_serial driver                  *
  433.  * ********************************************************************** */
  434. /* Ehhm. I don't know how to fiddle with interrupts on the Specialix 
  435.    cards. ....   Hmm. Ok I figured it out. You don't.  -- REW */
  436. static void rio_disable_tx_interrupts (void * ptr) 
  437. {
  438.   func_enter();
  439.   /*  port->gs.flags &= ~GS_TX_INTEN; */
  440.   func_exit();
  441. }
  442. static void rio_enable_tx_interrupts (void * ptr) 
  443. {
  444.   struct Port *PortP = ptr;
  445.   /* int hn; */
  446.   func_enter();
  447.   /* hn = PortP->HostP - p->RIOHosts;
  448.      rio_dprintk (RIO_DEBUG_TTY, "Pushing host %dn", hn);
  449.      rio_interrupt (-1,(void *) hn, NULL); */
  450.   RIOTxEnable((char *) PortP);
  451.   /* 
  452.    * In general we cannot count on "tx empty" interrupts, although
  453.    * the interrupt routine seems to be able to tell the difference. 
  454.    */
  455.   PortP->gs.flags &= ~GS_TX_INTEN;
  456.   func_exit();
  457. }
  458. static void rio_disable_rx_interrupts (void * ptr) 
  459. {
  460.   func_enter();
  461.   func_exit();
  462. }
  463. static void rio_enable_rx_interrupts (void * ptr) 
  464. {
  465.   /*  struct rio_port *port = ptr; */
  466.   func_enter();
  467.   func_exit();
  468. }
  469. /* Jeez. Isn't this simple?  */
  470. static int rio_get_CD (void * ptr) 
  471. {
  472.   struct Port *PortP = ptr;
  473.   int rv;
  474.   func_enter();
  475.   rv = (PortP->ModemState & MSVR1_CD) != 0;
  476.   rio_dprintk (RIO_DEBUG_INIT, "Getting CD status: %dn", rv);
  477.   
  478.   func_exit();  
  479.   return rv;
  480. }
  481. /* Jeez. Isn't this simple? Actually, we can sync with the actual port
  482.    by just pushing stuff into the queue going to the port... */
  483. static int rio_chars_in_buffer (void * ptr) 
  484. {
  485.   func_enter();
  486.   func_exit();  
  487.   return 0;
  488. }
  489. /* Nothing special here... */
  490. static void rio_shutdown_port (void * ptr) 
  491. {
  492.   struct Port *PortP;
  493.   func_enter();
  494.   PortP = (struct Port *)ptr;
  495.   PortP->gs.tty = NULL;
  496. #if 0
  497.   port->gs.flags &= ~ GS_ACTIVE;
  498.   if (!port->gs.tty) {
  499.     rio_dprintk (RIO_DBUG_TTY, "No tty.n");
  500.     return;
  501.   }
  502.   if (!port->gs.tty->termios) {
  503.     rio_dprintk (RIO_DEBUG_TTY, "No termios.n");
  504.     return;
  505.   }
  506.   if (port->gs.tty->termios->c_cflag & HUPCL) {
  507.     rio_setsignals (port, 0, 0);
  508.   }
  509. #endif
  510.   func_exit();
  511. }
  512. /* I haven't the foggiest why the decrement use count has to happen
  513.    here. The whole linux serial drivers stuff needs to be redesigned.
  514.    My guess is that this is a hack to minimize the impact of a bug
  515.    elsewhere. Thinking about it some more. (try it sometime) Try
  516.    running minicom on a serial port that is driven by a modularized
  517.    driver. Have the modem hangup. Then remove the driver module. Then
  518.    exit minicom.  I expect an "oops".  -- REW */
  519. static void rio_hungup (void *ptr)
  520. {
  521.   struct Port *PortP;
  522.   func_enter();
  523.   
  524.   PortP = (struct Port *)ptr;
  525.   PortP->gs.tty = NULL;
  526.   rio_dec_mod_count (); 
  527.   func_exit ();
  528. }
  529. /* The standard serial_close would become shorter if you'd wrap it like
  530.    this. 
  531.    rs_close (...){save_flags;cli;real_close();dec_use_count;restore_flags;}
  532.  */
  533. static void rio_close (void *ptr)
  534. {
  535.   struct Port *PortP;
  536.   func_enter ();
  537.   PortP = (struct Port *)ptr;
  538.   riotclose (ptr);
  539.   if(PortP->gs.count) {
  540.     printk (KERN_ERR "WARNING port count:%dn", PortP->gs.count);
  541.     PortP->gs.count = 0; 
  542.   }                
  543.   PortP->gs.tty = NULL;
  544.   rio_dec_mod_count ();
  545.   func_exit ();
  546. }
  547. static int rio_fw_ioctl (struct inode *inode, struct file *filp,
  548.          unsigned int cmd, unsigned long arg)
  549. {
  550.   int rc = 0;
  551.   func_enter();
  552.   /* The "dev" argument isn't used. */
  553.   rc = -riocontrol (p, 0, cmd, (void *)arg, suser ());
  554.   func_exit ();
  555.   return rc;
  556. }
  557. extern int RIOShortCommand(struct rio_info *p, struct Port *PortP,
  558.                int command, int len, int arg);
  559. static int rio_ioctl (struct tty_struct * tty, struct file * filp, 
  560.                      unsigned int cmd, unsigned long arg)
  561. {
  562.   int rc;
  563.   struct Port *PortP;
  564.   int ival;
  565.   func_enter();
  566.   PortP = (struct Port *)tty->driver_data;
  567.   rc  = 0;
  568.   switch (cmd) {
  569. #if 0
  570.   case TIOCGSOFTCAR:
  571.     rc = Put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0),
  572.                   (unsigned int *) arg);
  573.     break;
  574. #endif
  575.   case TIOCSSOFTCAR:
  576.     if ((rc = verify_area(VERIFY_READ, (void *) arg,
  577.                           sizeof(int))) == 0) {
  578.       Get_user(ival, (unsigned int *) arg);
  579.       tty->termios->c_cflag =
  580.         (tty->termios->c_cflag & ~CLOCAL) |
  581.         (ival ? CLOCAL : 0);
  582.     }
  583.     break;
  584.   case TIOCGSERIAL:
  585.     if ((rc = verify_area(VERIFY_WRITE, (void *) arg,
  586.                           sizeof(struct serial_struct))) == 0)
  587.       rc = gs_getserial(&PortP->gs, (struct serial_struct *) arg);
  588.     break;
  589.   case TCSBRK:
  590.     if ( PortP->State & RIO_DELETED ) {
  591.       rio_dprintk (RIO_DEBUG_TTY, "BREAK on deleted RTAn");
  592.       rc = -EIO;      
  593.     } else {
  594.       if (RIOShortCommand(p, PortP, SBREAK, 2, 250) == RIO_FAIL) {
  595.          rio_dprintk (RIO_DEBUG_INTR, "SBREAK RIOShortCommand failedn");
  596.          rc = -EIO;
  597.       }          
  598.     }
  599.     break;
  600.   case TCSBRKP:
  601.     if ( PortP->State & RIO_DELETED ) {
  602.       rio_dprintk (RIO_DEBUG_TTY, "BREAK on deleted RTAn");
  603.       rc = -EIO;      
  604.     } else {
  605.       int l;
  606.       l = arg?arg*100:250;
  607.       if (l > 255) l = 255;
  608.       if (RIOShortCommand(p, PortP, SBREAK, 2, arg?arg*100:250) == RIO_FAIL) {
  609.          rio_dprintk (RIO_DEBUG_INTR, "SBREAK RIOShortCommand failedn");
  610.          rc = -EIO;
  611.       }          
  612.     }
  613.     break;
  614.   case TIOCSSERIAL:
  615.     if ((rc = verify_area(VERIFY_READ, (void *) arg,
  616.                           sizeof(struct serial_struct))) == 0)
  617.       rc = gs_setserial(&PortP->gs, (struct serial_struct *) arg);
  618.     break;
  619. #if 0
  620.   case TIOCMGET:
  621.     if ((rc = verify_area(VERIFY_WRITE, (void *) arg,
  622.                           sizeof(unsigned int))) == 0) {
  623.       ival = rio_getsignals(port);
  624.       put_user(ival, (unsigned int *) arg);
  625.     }
  626.     break;
  627.   case TIOCMBIS:
  628.     if ((rc = verify_area(VERIFY_READ, (void *) arg,
  629.                           sizeof(unsigned int))) == 0) {
  630.       Get_user(ival, (unsigned int *) arg);
  631.       rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : -1),
  632.                            ((ival & TIOCM_RTS) ? 1 : -1));
  633.     }
  634.     break;
  635.   case TIOCMBIC:
  636.     if ((rc = verify_area(VERIFY_READ, (void *) arg,
  637.                           sizeof(unsigned int))) == 0) {
  638.       Get_user(ival, (unsigned int *) arg);
  639.       rio_setsignals(port, ((ival & TIOCM_DTR) ? 0 : -1),
  640.                            ((ival & TIOCM_RTS) ? 0 : -1));
  641.     }
  642.     break;
  643.   case TIOCMSET:
  644.     if ((rc = verify_area(VERIFY_READ, (void *) arg,
  645.                           sizeof(unsigned int))) == 0) {
  646.       Get_user(ival, (unsigned int *) arg);
  647.       rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : 0),
  648.                            ((ival & TIOCM_RTS) ? 1 : 0));
  649.     }
  650.     break;
  651. #endif
  652.   default:
  653.     rc = -ENOIOCTLCMD;
  654.     break;
  655.   }
  656.   func_exit();
  657.   return rc;
  658. }
  659. /* The throttle/unthrottle scheme for the Specialix card is different
  660.  * from other drivers and deserves some explanation. 
  661.  * The Specialix hardware takes care of XON/XOFF
  662.  * and CTS/RTS flow control itself.  This means that all we have to
  663.  * do when signalled by the upper tty layer to throttle/unthrottle is
  664.  * to make a note of it here.  When we come to read characters from the
  665.  * rx buffers on the card (rio_receive_chars()) we look to see if the
  666.  * upper layer can accept more (as noted here in rio_rx_throt[]). 
  667.  * If it can't we simply don't remove chars from the cards buffer. 
  668.  * When the tty layer can accept chars, we again note that here and when
  669.  * rio_receive_chars() is called it will remove them from the cards buffer.
  670.  * The card will notice that a ports buffer has drained below some low
  671.  * water mark and will unflow control the line itself, using whatever
  672.  * flow control scheme is in use for that port. -- Simon Allen
  673.  */
  674. static void rio_throttle (struct tty_struct * tty)
  675. {
  676.   struct Port *port = (struct Port *)tty->driver_data;
  677.   
  678.   func_enter();
  679.   /* If the port is using any type of input flow
  680.    * control then throttle the port.
  681.    */
  682.   if((tty->termios->c_cflag & CRTSCTS) || (I_IXOFF(tty)) ) {
  683.     port->State |= RIO_THROTTLE_RX;
  684.   }
  685.   func_exit();
  686. }
  687. static void rio_unthrottle (struct tty_struct * tty)
  688. {
  689.   struct Port *port = (struct Port *)tty->driver_data;
  690.   func_enter();
  691.   /* Always unthrottle even if flow control is not enabled on
  692.    * this port in case we disabled flow control while the port
  693.    * was throttled
  694.    */
  695.   port->State &= ~RIO_THROTTLE_RX;
  696.   func_exit();
  697.   return;
  698. }
  699. /* ********************************************************************** *
  700.  *                    Here are the initialization routines.               *
  701.  * ********************************************************************** */
  702. struct vpd_prom *get_VPD_PROM (struct Host *hp)
  703. {
  704.   static struct vpd_prom vpdp;
  705.   char *p;
  706.   int i;
  707.   func_enter();
  708.   rio_dprintk (RIO_DEBUG_PROBE, "Going to verify vpd prom at %p.n", 
  709.               hp->Caddr + RIO_VPD_ROM);
  710.   p = (char *) &vpdp;
  711.   for (i=0;i< sizeof (struct vpd_prom);i++)
  712.     *p++ = readb (hp->Caddr+RIO_VPD_ROM + i*2);
  713.       /* read_rio_byte (hp, RIO_VPD_ROM + i*2); */
  714.   /* Terminate the identifier string. 
  715.      *** requires one extra byte in struct vpd_prom *** */
  716.   *p++=0; 
  717.   if (rio_debug & RIO_DEBUG_PROBE)
  718.     my_hd ((char *)&vpdp, 0x20);
  719.   
  720.   func_exit();
  721.   return &vpdp;
  722. }
  723. static int rio_init_drivers(void)
  724. {
  725.   int error;
  726.   
  727.   func_enter();
  728.   memset(&rio_driver, 0, sizeof(rio_driver));
  729.   rio_driver.magic = TTY_DRIVER_MAGIC;
  730.   rio_driver.driver_name = "specialix_rio";
  731.   rio_driver.name = "ttySR";
  732.   rio_driver.major = RIO_NORMAL_MAJOR0;
  733.   rio_driver.num = 256;
  734.   rio_driver.type = TTY_DRIVER_TYPE_SERIAL;
  735.   rio_driver.subtype = RIO_TYPE_NORMAL;
  736.   rio_driver.init_termios = tty_std_termios;
  737.   rio_driver.init_termios.c_cflag =
  738.     B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  739.   rio_driver.flags = TTY_DRIVER_REAL_RAW;
  740.   rio_driver.refcount = &rio_refcount;
  741.   rio_driver.table = rio_table;
  742.   rio_driver.termios = rio_termios;
  743.   rio_driver.termios_locked = rio_termios_locked;
  744.   rio_driver.open  = riotopen;
  745.   rio_driver.close = gs_close;
  746.   rio_driver.write = gs_write;
  747.   rio_driver.put_char = gs_put_char;
  748.   rio_driver.flush_chars = gs_flush_chars;
  749.   rio_driver.write_room = gs_write_room;
  750.   rio_driver.chars_in_buffer = gs_chars_in_buffer;
  751.   rio_driver.flush_buffer = gs_flush_buffer;
  752.   rio_driver.ioctl = rio_ioctl;
  753.   rio_driver.throttle = rio_throttle;
  754.   rio_driver.unthrottle = rio_unthrottle;
  755.   rio_driver.set_termios = gs_set_termios;
  756.   rio_driver.stop = gs_stop;
  757.   rio_driver.start = gs_start;
  758.   rio_driver.hangup = gs_hangup;
  759.   rio_driver2 = rio_driver;
  760.   rio_driver.major = RIO_NORMAL_MAJOR1;
  761.   rio_callout_driver = rio_driver;
  762.   rio_callout_driver.name = "cusr";
  763.   rio_callout_driver.major = RIO_CALLOUT_MAJOR0;
  764.   rio_callout_driver.subtype = RIO_TYPE_CALLOUT;
  765.   rio_callout_driver2 = rio_callout_driver;
  766.   rio_callout_driver2.major = RIO_CALLOUT_MAJOR1;
  767.   rio_dprintk (RIO_DEBUG_INIT, "set_termios = %pn", gs_set_termios);
  768.   if ((error = tty_register_driver(&rio_driver))) goto bad1;
  769.   if ((error = tty_register_driver(&rio_driver2))) goto bad2;
  770.   if ((error = tty_register_driver(&rio_callout_driver))) goto bad3;
  771.   if ((error = tty_register_driver(&rio_callout_driver2))) goto bad4;
  772.   func_exit();
  773.   return 0;
  774.   /* 
  775.  bad5:tty_unregister_driver (&rio_callout_driver2); */
  776.  bad4:tty_unregister_driver (&rio_callout_driver);
  777.  bad3:tty_unregister_driver (&rio_driver2);
  778.  bad2:tty_unregister_driver (&rio_driver);
  779.  bad1:printk(KERN_ERR "rio: Couldn't register a rio driver, error = %dn",
  780.              error);
  781.   return 1;
  782. }
  783. static void * ckmalloc (int size)
  784. {
  785.   void *p;
  786.   p = kmalloc(size, GFP_KERNEL);
  787.   if (p) 
  788.     memset(p, 0, size);
  789.   return p;
  790. }
  791. static int rio_init_datastructures (void)
  792. {
  793.   int i;
  794.   struct Port *port;
  795.   func_enter();
  796.   /* Many drivers statically allocate the maximum number of ports
  797.      There is no reason not to allocate them dynamically. Is there? -- REW */
  798.   /* However, the RIO driver allows users to configure their first
  799.      RTA as the ports numbered 504-511. We therefore need to allocate 
  800.      the whole range. :-(   -- REW */
  801.   
  802. #define RI_SZ   sizeof(struct rio_info)
  803. #define HOST_SZ sizeof(struct Host)
  804. #define PORT_SZ sizeof(struct Port *)
  805. #define TMIO_SZ sizeof(struct termios *)
  806.   rio_dprintk (RIO_DEBUG_INIT, "getting : %d %d %d %d %d bytesn", 
  807.                RI_SZ, 
  808.                RIO_HOSTS * HOST_SZ,
  809.                RIO_PORTS * PORT_SZ,
  810.                RIO_PORTS * TMIO_SZ,
  811.                RIO_PORTS * TMIO_SZ);
  812.   
  813.   if (!(p                  = ckmalloc (              RI_SZ))) goto free0;
  814.   if (!(p->RIOHosts        = ckmalloc (RIO_HOSTS * HOST_SZ))) goto free1;
  815.   if (!(p->RIOPortp        = ckmalloc (RIO_PORTS * PORT_SZ))) goto free2;
  816.   if (!(rio_termios        = ckmalloc (RIO_PORTS * TMIO_SZ))) goto free3;
  817.   if (!(rio_termios_locked = ckmalloc (RIO_PORTS * TMIO_SZ))) goto free4;
  818.   p->RIOConf = RIOConf;
  819.   rio_dprintk (RIO_DEBUG_INIT, "Got : %p %p %p %p %pn", 
  820.                p, p->RIOHosts, p->RIOPortp, rio_termios, rio_termios);
  821.   /* Adjust the values in the "driver" */
  822.   rio_driver.termios = rio_termios;
  823.   rio_driver.termios_locked = rio_termios_locked;
  824.   
  825. #if 1
  826.   for (i = 0; i < RIO_PORTS; i++) {
  827.     port = p->RIOPortp[i] = ckmalloc (sizeof (struct Port));
  828.     if (!port) {
  829.       goto free6;
  830.     }
  831.     rio_dprintk (RIO_DEBUG_INIT, "initing port %d (%d)n", i, port->Mapped);
  832.     port->PortNum = i;
  833.     port->gs.callout_termios = tty_std_termios;
  834.     port->gs.normal_termios  = tty_std_termios;
  835.     port->gs.magic = RIO_MAGIC;
  836.     port->gs.close_delay = HZ/2;
  837.     port->gs.closing_wait = 30 * HZ;
  838.     port->gs.rd = &rio_real_driver;
  839.     port->portSem = SPIN_LOCK_UNLOCKED;
  840.     /*
  841.      * Initializing wait queue
  842.      */
  843.     init_waitqueue_head(&port->gs.open_wait);
  844.     init_waitqueue_head(&port->gs.close_wait);
  845.   }
  846. #else
  847.   /* We could postpone initializing them to when they are configured. */
  848. #endif
  849.   
  850.   if (rio_debug & RIO_DEBUG_INIT) {
  851.     my_hd (&rio_real_driver, sizeof (rio_real_driver));
  852.   }
  853.   
  854.   func_exit();
  855.   return 0;
  856.  free6:for (i--;i>=0;i--)
  857.         kfree (p->RIOPortp[i]);
  858. /*free5: */
  859.        kfree (rio_termios_locked); 
  860.  free4:kfree (rio_termios);
  861.  free3:kfree (p->RIOPortp);
  862.  free2:kfree (p->RIOHosts);
  863.  free1:
  864.   rio_dprintk (RIO_DEBUG_INIT, "Not enough memory! %p %p %p %p %pn", 
  865.                 p, p->RIOHosts, p->RIOPortp, rio_termios, rio_termios);
  866.   kfree(p);               
  867.  free0:
  868.   return -ENOMEM;
  869. }
  870. static void  __exit rio_release_drivers(void)
  871. {
  872.   func_enter();
  873.   tty_unregister_driver (&rio_callout_driver2);
  874.   tty_unregister_driver (&rio_callout_driver);
  875.   tty_unregister_driver (&rio_driver2);
  876.   tty_unregister_driver (&rio_driver);
  877.   func_exit();
  878. }
  879. #ifdef TWO_ZERO
  880. #define PDEV unsigned char pci_bus, unsigned pci_fun
  881. #define pdev pci_bus, pci_fun
  882. #else
  883. #define PDEV   struct pci_dev *pdev
  884. #endif
  885. #ifdef CONFIG_PCI
  886.  /* This was written for SX, but applies to RIO too...
  887.     (including bugs....)
  888.     There is another bit besides Bit 17. Turning that bit off
  889.     (on boards shipped with the fix in the eeprom) results in a 
  890.     hang on the next access to the card. 
  891.  */
  892.  /******************************************************** 
  893.  * Setting bit 17 in the CNTRL register of the PLX 9050  * 
  894.  * chip forces a retry on writes while a read is pending.*
  895.  * This is to prevent the card locking up on Intel Xeon  *
  896.  * multiprocessor systems with the NX chipset.    -- NV  *
  897.  ********************************************************/
  898. /* Newer cards are produced with this bit set from the configuration
  899.    EEprom.  As the bit is read/write for the CPU, we can fix it here,
  900.    if we detect that it isn't set correctly. -- REW */
  901. void fix_rio_pci (PDEV)
  902. {
  903.   unsigned int hwbase;
  904.   unsigned long rebase;
  905.   unsigned int t;
  906. #define CNTRL_REG_OFFSET        0x50
  907. #define CNTRL_REG_GOODVALUE     0x18260000
  908.   pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &hwbase);
  909.   hwbase &= PCI_BASE_ADDRESS_MEM_MASK;
  910.   rebase =  (ulong) ioremap(hwbase, 0x80);
  911.   t = readl (rebase + CNTRL_REG_OFFSET);
  912.   if (t != CNTRL_REG_GOODVALUE) {
  913.     printk (KERN_DEBUG "rio: performing cntrl reg fix: %08x -> %08xn", 
  914.             t, CNTRL_REG_GOODVALUE); 
  915.     writel (CNTRL_REG_GOODVALUE, rebase + CNTRL_REG_OFFSET);  
  916.   }
  917.   my_iounmap (hwbase, rebase);
  918. }
  919. #endif
  920. static int __init rio_init(void) 
  921. {
  922.   int found = 0;
  923.   int i;
  924.   struct Host *hp;
  925.   int retval;
  926.   struct vpd_prom *vpdp;
  927.   int okboard;
  928. #ifdef CONFIG_PCI
  929. #ifndef TWO_ZERO
  930.   struct pci_dev *pdev = NULL;
  931. #else
  932.   unsigned char pci_bus, pci_fun;
  933.   /* in 2.2.x pdev is a pointer defining a PCI device. In 2.0 its the bus/fn */
  934. #endif
  935.   unsigned int tint;
  936.   unsigned short tshort;
  937. #endif
  938.   func_enter();
  939.   rio_dprintk (RIO_DEBUG_INIT, "Initing rio module... (rio_debug=%d)n", 
  940.        rio_debug);
  941.   if (abs ((long) (&rio_debug) - rio_debug) < 0x10000) {
  942.     printk (KERN_WARNING "rio: rio_debug is an address, instead of a value. "
  943.             "Assuming -1. Was %x/%p.n", rio_debug, &rio_debug);
  944.     rio_debug=-1;
  945.   }
  946.   retval = rio_init_datastructures ();
  947.   if (retval < 0) return retval;
  948. #ifdef CONFIG_PCI
  949.   if (pci_present ()) {
  950.     /* First look for the JET devices: */
  951. #ifndef TWO_ZERO
  952.     while ((pdev = pci_find_device (PCI_VENDOR_ID_SPECIALIX, 
  953.                                     PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, 
  954.                                     pdev))) {
  955.        if (pci_enable_device(pdev)) continue;
  956. #else
  957.     for (i=0;i< RIO_NBOARDS;i++) {
  958.       if (pcibios_find_device (PCI_VENDOR_ID_SPECIALIX, 
  959.        PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, i,
  960.        &pci_bus, &pci_fun)) break;
  961. #endif
  962.       /* Specialix has a whole bunch of cards with
  963.          0x2000 as the device ID. They say its because
  964.          the standard requires it. Stupid standard. */
  965.       /* It seems that reading a word doesn't work reliably on 2.0.
  966.          Also, reading a non-aligned dword doesn't work. So we read the
  967.          whole dword at 0x2c and extract the word at 0x2e (SUBSYSTEM_ID)
  968.          ourselves */
  969.       /* I don't know why the define doesn't work, constant 0x2c does --REW */ 
  970.       pci_read_config_dword (pdev, 0x2c, &tint);
  971.       tshort = (tint >> 16) & 0xffff;
  972.       rio_dprintk (RIO_DEBUG_PROBE, "Got a specialix card: %x.n", tint);
  973.       if (tshort != 0x0100) {
  974.         rio_dprintk (RIO_DEBUG_PROBE, "But it's not a RIO card (%d)...n", 
  975.                     tshort);
  976.         continue;
  977.       }
  978.       rio_dprintk (RIO_DEBUG_PROBE, "cp1n");
  979.       pci_read_config_dword(pdev, PCI_BASE_ADDRESS_2, &tint);
  980.       hp = &p->RIOHosts[p->RIONumHosts];
  981.       hp->PaddrP =  tint & PCI_BASE_ADDRESS_MEM_MASK;
  982.       hp->Ivec = get_irq (pdev);
  983.       if (((1 << hp->Ivec) & rio_irqmask) == 0)
  984.               hp->Ivec = 0;
  985.       hp->CardP = (struct DpRam *)
  986.       hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN);
  987.       hp->Type  = RIO_PCI;
  988.       hp->Copy  = rio_pcicopy; 
  989.       hp->Mode  = RIO_PCI_BOOT_FROM_RAM;
  990.       hp->HostLock = SPIN_LOCK_UNLOCKED;
  991.       rio_reset_interrupt (hp);
  992.       rio_start_card_running (hp);
  993.       rio_dprintk (RIO_DEBUG_PROBE, "Going to test it (%p/%p).n",
  994.                    (void *)p->RIOHosts[p->RIONumHosts].PaddrP,
  995.                    p->RIOHosts[p->RIONumHosts].Caddr);
  996.       if (RIOBoardTest( p->RIOHosts[p->RIONumHosts].PaddrP,
  997.                         p->RIOHosts[p->RIONumHosts].Caddr, 
  998.                         RIO_PCI, 0 ) == RIO_SUCCESS) {
  999.               rio_dprintk (RIO_DEBUG_INIT, "Done RIOBoardTestn");
  1000.               WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff);
  1001.               p->RIOHosts[p->RIONumHosts].UniqueNum  =
  1002.                       ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0]) &0xFF)<< 0)|
  1003.                       ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1]) &0xFF)<< 8)|
  1004.                       ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2]) &0xFF)<<16)|
  1005.                       ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3]) &0xFF)<<24);
  1006.               rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.n",
  1007.                            p->RIOHosts[p->RIONumHosts].UniqueNum);
  1008.               
  1009.               fix_rio_pci (pdev);
  1010.               p->RIOLastPCISearch = RIO_SUCCESS;
  1011.               p->RIONumHosts++;
  1012.               found++;
  1013.       } else {
  1014.               my_iounmap (p->RIOHosts[p->RIONumHosts].PaddrP, 
  1015.                           p->RIOHosts[p->RIONumHosts].Caddr);
  1016.       }
  1017.       
  1018. #ifdef TWO_ZERO
  1019.     }  /* We have two variants with the opening brace, so to prevent */
  1020. #else
  1021.     }  /* Emacs from getting confused we have two closing braces too. */
  1022. #endif
  1023.     
  1024.     /* Then look for the older PCI card.... : */
  1025. #ifndef TWO_ZERO
  1026.   /* These older PCI cards have problems (only byte-mode access is
  1027.      supported), which makes them a bit awkward to support. 
  1028.      They also have problems sharing interrupts. Be careful. 
  1029.      (The driver now refuses to share interrupts for these
  1030.      cards. This should be sufficient).
  1031.   */
  1032.     /* Then look for the older RIO/PCI devices: */
  1033.     while ((pdev = pci_find_device (PCI_VENDOR_ID_SPECIALIX, 
  1034.                                     PCI_DEVICE_ID_SPECIALIX_RIO, 
  1035.                                     pdev))) {
  1036.        if (pci_enable_device(pdev)) continue;
  1037. #else
  1038.     for (i=0;i< RIO_NBOARDS;i++) {
  1039.       if (pcibios_find_device (PCI_VENDOR_ID_SPECIALIX, 
  1040.        PCI_DEVICE_ID_SPECIALIX_RIO, i,
  1041.        &pci_bus, &pci_fun)) break;
  1042. #endif
  1043. #ifdef CONFIG_RIO_OLDPCI
  1044.       pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &tint);
  1045.       hp = &p->RIOHosts[p->RIONumHosts];
  1046.       hp->PaddrP =  tint & PCI_BASE_ADDRESS_MEM_MASK;
  1047.       hp->Ivec = get_irq (pdev);
  1048.       if (((1 << hp->Ivec) & rio_irqmask) == 0) 
  1049.        hp->Ivec = 0;
  1050.       hp->Ivec |= 0x8000; /* Mark as non-sharable */
  1051.       hp->CardP = (struct DpRam *)
  1052.       hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN);
  1053.       hp->Type  = RIO_PCI;
  1054.       hp->Copy  = rio_pcicopy;
  1055.       hp->Mode  = RIO_PCI_BOOT_FROM_RAM;
  1056.       hp->HostLock = SPIN_LOCK_UNLOCKED;
  1057.       rio_dprintk (RIO_DEBUG_PROBE, "Ivec: %xn", hp->Ivec);
  1058.       rio_dprintk (RIO_DEBUG_PROBE, "Mode: %xn", hp->Mode);
  1059.       rio_reset_interrupt (hp);
  1060.       rio_start_card_running (hp);
  1061.        rio_dprintk (RIO_DEBUG_PROBE, "Going to test it (%p/%p).n",
  1062.                    (void *)p->RIOHosts[p->RIONumHosts].PaddrP,
  1063.                    p->RIOHosts[p->RIONumHosts].Caddr);
  1064.       if (RIOBoardTest( p->RIOHosts[p->RIONumHosts].PaddrP,
  1065.                         p->RIOHosts[p->RIONumHosts].Caddr, 
  1066.                         RIO_PCI, 0 ) == RIO_SUCCESS) {
  1067.         WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff);
  1068.         p->RIOHosts[p->RIONumHosts].UniqueNum  =
  1069.           ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0]) &0xFF)<< 0)|
  1070.           ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1]) &0xFF)<< 8)|
  1071.           ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2]) &0xFF)<<16)|
  1072.           ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3]) &0xFF)<<24);
  1073.         rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.n",
  1074.                    p->RIOHosts[p->RIONumHosts].UniqueNum);
  1075.         p->RIOLastPCISearch = RIO_SUCCESS;
  1076.         p->RIONumHosts++;
  1077.         found++;
  1078.       } else {
  1079.         my_iounmap (p->RIOHosts[p->RIONumHosts].PaddrP, 
  1080.                     p->RIOHosts[p->RIONumHosts].Caddr);
  1081.       }
  1082. #else
  1083.       printk (KERN_ERR "Found an older RIO PCI card, but the driver is not "
  1084.               "compiled to support it.n");
  1085. #endif
  1086. #ifdef TWO_ZERO
  1087.     }  /* We have two variants with the opening brace, so to prevent */
  1088. #else
  1089.     }  /* Emacs from getting confused we have two closing braces too. */
  1090. #endif
  1091.   }
  1092. #endif /* PCI */
  1093.   /* Now probe for ISA cards... */
  1094.   for (i=0;i<NR_RIO_ADDRS;i++) {
  1095.     hp = &p->RIOHosts[p->RIONumHosts];
  1096.     hp->PaddrP = rio_probe_addrs[i];
  1097.     /* There was something about the IRQs of these cards. 'Forget what.--REW */
  1098.     hp->Ivec = 0;
  1099.     hp->CardP = (struct DpRam *)
  1100.     hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN);
  1101.     hp->Type = RIO_AT;
  1102.     hp->Copy = rio_pcicopy; /* AT card PCI???? - PVDL
  1103.                              * -- YES! this is now a normal copy. Only the 
  1104.                              * old PCI card uses the special PCI copy. 
  1105.                              * Moreover, the ISA card will work with the 
  1106.                              * special PCI copy anyway. -- REW */
  1107.     hp->Mode = 0;
  1108.     hp->HostLock = SPIN_LOCK_UNLOCKED;
  1109.     vpdp = get_VPD_PROM (hp);
  1110.     rio_dprintk (RIO_DEBUG_PROBE, "Got VPD ROMn");
  1111.     okboard = 0;
  1112.     if ((strncmp (vpdp->identifier, RIO_ISA_IDENT, 16) == 0) ||
  1113.         (strncmp (vpdp->identifier, RIO_ISA2_IDENT, 16) == 0) ||
  1114.         (strncmp (vpdp->identifier, RIO_ISA3_IDENT, 16) == 0)) {
  1115.       /* Board is present... */
  1116.       if (RIOBoardTest (hp->PaddrP, 
  1117.                         hp->Caddr, RIO_AT, 0) == RIO_SUCCESS) {
  1118.         /* ... and feeling fine!!!! */
  1119.         rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.n",
  1120.                    p->RIOHosts[p->RIONumHosts].UniqueNum);
  1121.         if (RIOAssignAT(p, hp->PaddrP, hp->Caddr, 0)) {        
  1122.           rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, host%d uniqid = %x.n",
  1123.                        p->RIONumHosts, 
  1124.                        p->RIOHosts[p->RIONumHosts-1].UniqueNum);
  1125.           okboard++;
  1126.           found++;
  1127.         }
  1128.       }
  1129.     if (!okboard)
  1130.       my_iounmap (hp->PaddrP, hp->Caddr);
  1131.     }
  1132.   }
  1133.   for (i=0;i<p->RIONumHosts;i++) {
  1134.     hp = &p->RIOHosts[i];
  1135.     if (hp->Ivec) {
  1136.       int mode = SA_SHIRQ;
  1137.       if (hp->Ivec & 0x8000) {mode = 0; hp->Ivec &= 0x7fff;}
  1138.       rio_dprintk (RIO_DEBUG_INIT, "Requesting interrupt hp: %p rio_interrupt: %d Mode: %xn", hp,hp->Ivec, hp->Mode);
  1139.       retval = request_irq (hp->Ivec, rio_interrupt, mode, "rio", hp);
  1140.       rio_dprintk (RIO_DEBUG_INIT, "Return value from request_irq: %dn", retval);
  1141.       if (retval) {
  1142.               printk(KERN_ERR "rio: Cannot allocate irq %d.n", hp->Ivec);
  1143.               hp->Ivec = 0;
  1144.       }
  1145.       rio_dprintk (RIO_DEBUG_INIT, "Got irq %d.n", hp->Ivec);
  1146.       if (hp->Ivec != 0){
  1147.               rio_dprintk (RIO_DEBUG_INIT, "Enabling interrupts on rio card.n"); 
  1148.               hp->Mode |= RIO_PCI_INT_ENABLE;
  1149.       } else
  1150.               hp->Mode &= !RIO_PCI_INT_ENABLE;
  1151.       rio_dprintk (RIO_DEBUG_INIT, "New Mode: %xn", hp->Mode);
  1152.       rio_start_card_running (hp);
  1153.     }
  1154.     /* Init the timer "always" to make sure that it can safely be 
  1155.        deleted when we unload... */
  1156.     init_timer (&hp->timer);
  1157.     if (!hp->Ivec) {
  1158.       rio_dprintk (RIO_DEBUG_INIT, "Starting polling at %dj intervals.n", 
  1159.                    rio_poll);
  1160.       hp->timer.data = i;
  1161.       hp->timer.function = rio_pollfunc;
  1162.       hp->timer.expires = jiffies + rio_poll;
  1163.       add_timer (&hp->timer);
  1164.     }
  1165.   }
  1166.   if (found) {
  1167.     rio_dprintk (RIO_DEBUG_INIT, "rio: total of %d boards detected.n", found);
  1168.     if (misc_register(&rio_fw_device) < 0) {
  1169.       printk(KERN_ERR "RIO: Unable to register firmware loader driver.n");
  1170.       return -EIO;
  1171.     }
  1172.     rio_init_drivers ();
  1173.   }
  1174.   func_exit();
  1175.   return found?0:-EIO;
  1176. }
  1177. static void __exit rio_exit (void)
  1178. {
  1179.   int i; 
  1180.   struct Host *hp;
  1181.   
  1182.   func_enter();
  1183.   for (i=0,hp=p->RIOHosts;i<p->RIONumHosts;i++, hp++) {
  1184.     RIOHostReset (hp->Type, hp->CardP, hp->Slot);
  1185.     if (hp->Ivec) {
  1186.       free_irq (hp->Ivec, hp);
  1187.       rio_dprintk (RIO_DEBUG_INIT, "freed irq %d.n", hp->Ivec);
  1188.     }
  1189.     /* It is safe/allowed to del_timer a non-active timer */
  1190.     del_timer (&hp->timer);
  1191.   }
  1192.   if (misc_deregister(&rio_fw_device) < 0) {
  1193.     printk (KERN_INFO "rio: couldn't deregister control-devicen");
  1194.   }
  1195.   rio_dprintk (RIO_DEBUG_CLEANUP, "Cleaning up driversn");
  1196.   rio_release_drivers ();
  1197.   /* Release dynamically allocated memory */
  1198.   kfree (rio_termios_locked); 
  1199.   kfree (rio_termios);
  1200.   kfree (p->RIOPortp);
  1201.   kfree (p->RIOHosts);
  1202.   kfree (p);
  1203.   func_exit();
  1204. }
  1205. module_init(rio_init);
  1206. module_exit(rio_exit);
  1207. /*
  1208.  * Anybody who knows why this doesn't work for me, please tell me -- REW.
  1209.  * Snatched from scsi.c (fixed one spelling error):
  1210.  * Overrides for Emacs so that we follow Linus' tabbing style.
  1211.  * Emacs will notice this stuff at the end of the file and automatically
  1212.  * adjust the settings for this buffer only.  This must remain at the end
  1213.  * of the file.
  1214.  * ---------------------------------------------------------------------------
  1215.  * Local Variables:
  1216.  * c-indent-level: 4
  1217.  * c-brace-imaginary-offset: 0
  1218.  * c-brace-offset: -4
  1219.  * c-argdecl-indent: 4
  1220.  * c-label-offset: -4
  1221.  * c-continued-statement-offset: 4
  1222.  * c-continued-brace-offset: 0
  1223.  * indent-tabs-mode: nil
  1224.  * tab-width: 8
  1225.  * End:
  1226.  */