serial.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:167k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. if (info->flags & ASYNC_CALLOUT_ACTIVE)
  2. return -EBUSY;
  3. info->flags |= ASYNC_NORMAL_ACTIVE;
  4. return 0;
  5. }
  6. if (info->flags & ASYNC_CALLOUT_ACTIVE) {
  7. if (state->normal_termios.c_cflag & CLOCAL)
  8. do_clocal = 1;
  9. } else {
  10. if (tty->termios->c_cflag & CLOCAL)
  11. do_clocal = 1;
  12. }
  13. /*
  14.  * Block waiting for the carrier detect and the line to become
  15.  * free (i.e., not in use by the callout).  While we are in
  16.  * this loop, state->count is dropped by one, so that
  17.  * rs_close() knows when to free things.  We restore it upon
  18.  * exit, either normal or abnormal.
  19.  */
  20. retval = 0;
  21. add_wait_queue(&info->open_wait, &wait);
  22. #ifdef SERIAL_DEBUG_OPEN
  23. printk("block_til_ready before block: ttys%d, count = %dn",
  24.        state->line, state->count);
  25. #endif
  26. save_flags(flags); cli();
  27. if (!tty_hung_up_p(filp)) {
  28. extra_count = 1;
  29. state->count--;
  30. }
  31. restore_flags(flags);
  32. info->blocked_open++;
  33. while (1) {
  34. save_flags(flags); cli();
  35. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  36.     (tty->termios->c_cflag & CBAUD))
  37. serial_out(info, UART_MCR,
  38.    serial_inp(info, UART_MCR) |
  39.    (UART_MCR_DTR | UART_MCR_RTS));
  40. restore_flags(flags);
  41. set_current_state(TASK_INTERRUPTIBLE);
  42. if (tty_hung_up_p(filp) ||
  43.     !(info->flags & ASYNC_INITIALIZED)) {
  44. #ifdef SERIAL_DO_RESTART
  45. if (info->flags & ASYNC_HUP_NOTIFY)
  46. retval = -EAGAIN;
  47. else
  48. retval = -ERESTARTSYS;
  49. #else
  50. retval = -EAGAIN;
  51. #endif
  52. break;
  53. }
  54. if (!(info->flags & ASYNC_CALLOUT_ACTIVE) &&
  55.     !(info->flags & ASYNC_CLOSING) &&
  56.     (do_clocal || (serial_in(info, UART_MSR) &
  57.    UART_MSR_DCD)))
  58. break;
  59. if (signal_pending(current)) {
  60. retval = -ERESTARTSYS;
  61. break;
  62. }
  63. #ifdef SERIAL_DEBUG_OPEN
  64. printk("block_til_ready blocking: ttys%d, count = %dn",
  65.        info->line, state->count);
  66. #endif
  67. schedule();
  68. }
  69. set_current_state(TASK_RUNNING);
  70. remove_wait_queue(&info->open_wait, &wait);
  71. if (extra_count)
  72. state->count++;
  73. info->blocked_open--;
  74. #ifdef SERIAL_DEBUG_OPEN
  75. printk("block_til_ready after blocking: ttys%d, count = %dn",
  76.        info->line, state->count);
  77. #endif
  78. if (retval)
  79. return retval;
  80. info->flags |= ASYNC_NORMAL_ACTIVE;
  81. return 0;
  82. }
  83. static int get_async_struct(int line, struct async_struct **ret_info)
  84. {
  85. struct async_struct *info;
  86. struct serial_state *sstate;
  87. sstate = rs_table + line;
  88. sstate->count++;
  89. if (sstate->info) {
  90. *ret_info = sstate->info;
  91. return 0;
  92. }
  93. info = kmalloc(sizeof(struct async_struct), GFP_KERNEL);
  94. if (!info) {
  95. sstate->count--;
  96. return -ENOMEM;
  97. }
  98. memset(info, 0, sizeof(struct async_struct));
  99. init_waitqueue_head(&info->open_wait);
  100. init_waitqueue_head(&info->close_wait);
  101. init_waitqueue_head(&info->delta_msr_wait);
  102. info->magic = SERIAL_MAGIC;
  103. info->port = sstate->port;
  104. info->flags = sstate->flags;
  105. info->io_type = sstate->io_type;
  106. info->iomem_base = sstate->iomem_base;
  107. info->iomem_reg_shift = sstate->iomem_reg_shift;
  108. info->xmit_fifo_size = sstate->xmit_fifo_size;
  109. info->line = line;
  110. info->tqueue.routine = do_softint;
  111. info->tqueue.data = info;
  112. info->state = sstate;
  113. if (sstate->info) {
  114. kfree(info);
  115. *ret_info = sstate->info;
  116. return 0;
  117. }
  118. *ret_info = sstate->info = info;
  119. return 0;
  120. }
  121. /*
  122.  * This routine is called whenever a serial port is opened.  It
  123.  * enables interrupts for a serial port, linking in its async structure into
  124.  * the IRQ chain.   It also performs the serial-specific
  125.  * initialization for the tty structure.
  126.  *
  127.  * Note that on failure, we don't decrement the module use count - the tty
  128.  * later will call rs_close, which will decrement it for us as long as
  129.  * tty->driver_data is set non-NULL. --rmk
  130.  */
  131. static int rs_open(struct tty_struct *tty, struct file * filp)
  132. {
  133. struct async_struct *info;
  134. int  retval, line;
  135. unsigned long page;
  136. MOD_INC_USE_COUNT;
  137. line = MINOR(tty->device) - tty->driver.minor_start;
  138. if ((line < 0) || (line >= NR_PORTS)) {
  139. MOD_DEC_USE_COUNT;
  140. return -ENODEV;
  141. }
  142. retval = get_async_struct(line, &info);
  143. if (retval) {
  144. MOD_DEC_USE_COUNT;
  145. return retval;
  146. }
  147. tty->driver_data = info;
  148. info->tty = tty;
  149. if (serial_paranoia_check(info, tty->device, "rs_open"))
  150. return -ENODEV;
  151. #ifdef SERIAL_DEBUG_OPEN
  152. printk("rs_open %s%d, count = %dn", tty->driver.name, info->line,
  153.        info->state->count);
  154. #endif
  155. #if (LINUX_VERSION_CODE > 0x20100)
  156. info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
  157. #endif
  158. /*
  159.  * This relies on lock_kernel() stuff so wants tidying for 2.5
  160.  */
  161. if (!tmp_buf) {
  162. page = get_zeroed_page(GFP_KERNEL);
  163. if (!page)
  164. return -ENOMEM;
  165. if (tmp_buf)
  166. free_page(page);
  167. else
  168. tmp_buf = (unsigned char *) page;
  169. }
  170. /*
  171.  * If the port is the middle of closing, bail out now
  172.  */
  173. if (tty_hung_up_p(filp) ||
  174.     (info->flags & ASYNC_CLOSING)) {
  175. if (info->flags & ASYNC_CLOSING)
  176. interruptible_sleep_on(&info->close_wait);
  177. #ifdef SERIAL_DO_RESTART
  178. return ((info->flags & ASYNC_HUP_NOTIFY) ?
  179. -EAGAIN : -ERESTARTSYS);
  180. #else
  181. return -EAGAIN;
  182. #endif
  183. }
  184. /*
  185.  * Start up serial port
  186.  */
  187. retval = startup(info);
  188. if (retval)
  189. return retval;
  190. retval = block_til_ready(tty, filp, info);
  191. if (retval) {
  192. #ifdef SERIAL_DEBUG_OPEN
  193. printk("rs_open returning after block_til_ready with %dn",
  194.        retval);
  195. #endif
  196. return retval;
  197. }
  198. if ((info->state->count == 1) &&
  199.     (info->flags & ASYNC_SPLIT_TERMIOS)) {
  200. if (tty->driver.subtype == SERIAL_TYPE_NORMAL)
  201. *tty->termios = info->state->normal_termios;
  202. else 
  203. *tty->termios = info->state->callout_termios;
  204. change_speed(info, 0);
  205. }
  206. #ifdef CONFIG_SERIAL_CONSOLE
  207. if (sercons.cflag && sercons.index == line) {
  208. tty->termios->c_cflag = sercons.cflag;
  209. sercons.cflag = 0;
  210. change_speed(info, 0);
  211. }
  212. #endif
  213. info->session = current->session;
  214. info->pgrp = current->pgrp;
  215. #ifdef SERIAL_DEBUG_OPEN
  216. printk("rs_open ttys%d successful...", info->line);
  217. #endif
  218. return 0;
  219. }
  220. /*
  221.  * /proc fs routines....
  222.  */
  223. static inline int line_info(char *buf, struct serial_state *state)
  224. {
  225. struct async_struct *info = state->info, scr_info;
  226. char stat_buf[30], control, status;
  227. int ret;
  228. unsigned long flags;
  229. /*
  230.  * Return zero characters for ports not claimed by driver.
  231.  */
  232. if (state->type == PORT_UNKNOWN) {
  233. return 0; /* ignore unused ports */
  234. }
  235. ret = sprintf(buf, "%d: uart:%s port:%lX irq:%d",
  236.       state->line, uart_config[state->type].name, 
  237.       (state->port ? state->port : (long)state->iomem_base),
  238.       state->irq);
  239. /*
  240.  * Figure out the current RS-232 lines
  241.  */
  242. if (!info) {
  243. info = &scr_info; /* This is just for serial_{in,out} */
  244. info->magic = SERIAL_MAGIC;
  245. info->port = state->port;
  246. info->flags = state->flags;
  247. info->hub6 = state->hub6;
  248. info->io_type = state->io_type;
  249. info->iomem_base = state->iomem_base;
  250. info->iomem_reg_shift = state->iomem_reg_shift;
  251. info->quot = 0;
  252. info->tty = 0;
  253. }
  254. save_flags(flags); cli();
  255. status = serial_in(info, UART_MSR);
  256. control = info != &scr_info ? info->MCR : serial_in(info, UART_MCR);
  257. restore_flags(flags); 
  258. stat_buf[0] = 0;
  259. stat_buf[1] = 0;
  260. if (control & UART_MCR_RTS)
  261. strcat(stat_buf, "|RTS");
  262. if (status & UART_MSR_CTS)
  263. strcat(stat_buf, "|CTS");
  264. if (control & UART_MCR_DTR)
  265. strcat(stat_buf, "|DTR");
  266. if (status & UART_MSR_DSR)
  267. strcat(stat_buf, "|DSR");
  268. if (status & UART_MSR_DCD)
  269. strcat(stat_buf, "|CD");
  270. if (status & UART_MSR_RI)
  271. strcat(stat_buf, "|RI");
  272. if (info->quot) {
  273. ret += sprintf(buf+ret, " baud:%d",
  274.        state->baud_base / info->quot);
  275. }
  276. ret += sprintf(buf+ret, " tx:%d rx:%d",
  277.       state->icount.tx, state->icount.rx);
  278. if (state->icount.frame)
  279. ret += sprintf(buf+ret, " fe:%d", state->icount.frame);
  280. if (state->icount.parity)
  281. ret += sprintf(buf+ret, " pe:%d", state->icount.parity);
  282. if (state->icount.brk)
  283. ret += sprintf(buf+ret, " brk:%d", state->icount.brk);
  284. if (state->icount.overrun)
  285. ret += sprintf(buf+ret, " oe:%d", state->icount.overrun);
  286. /*
  287.  * Last thing is the RS-232 status lines
  288.  */
  289. ret += sprintf(buf+ret, " %sn", stat_buf+1);
  290. return ret;
  291. }
  292. static int rs_read_proc(char *page, char **start, off_t off, int count,
  293. int *eof, void *data)
  294. {
  295. int i, len = 0, l;
  296. off_t begin = 0;
  297. len += sprintf(page, "serinfo:1.0 driver:%s%s revision:%sn",
  298.        serial_version, LOCAL_VERSTRING, serial_revdate);
  299. for (i = 0; i < NR_PORTS && len < 4000; i++) {
  300. l = line_info(page + len, &rs_table[i]);
  301. len += l;
  302. if (len+begin > off+count)
  303. goto done;
  304. if (len+begin < off) {
  305. begin += len;
  306. len = 0;
  307. }
  308. }
  309. *eof = 1;
  310. done:
  311. if (off >= len+begin)
  312. return 0;
  313. *start = page + (off-begin);
  314. return ((count < begin+len-off) ? count : begin+len-off);
  315. }
  316. /*
  317.  * ---------------------------------------------------------------------
  318.  * rs_init() and friends
  319.  *
  320.  * rs_init() is called at boot-time to initialize the serial driver.
  321.  * ---------------------------------------------------------------------
  322.  */
  323. /*
  324.  * This routine prints out the appropriate serial driver version
  325.  * number, and identifies which options were configured into this
  326.  * driver.
  327.  */
  328. static char serial_options[] __initdata =
  329. #ifdef CONFIG_HUB6
  330.        " HUB-6"
  331. #define SERIAL_OPT
  332. #endif
  333. #ifdef CONFIG_SERIAL_MANY_PORTS
  334.        " MANY_PORTS"
  335. #define SERIAL_OPT
  336. #endif
  337. #ifdef CONFIG_SERIAL_MULTIPORT
  338.        " MULTIPORT"
  339. #define SERIAL_OPT
  340. #endif
  341. #ifdef CONFIG_SERIAL_SHARE_IRQ
  342.        " SHARE_IRQ"
  343. #define SERIAL_OPT
  344. #endif
  345. #ifdef CONFIG_SERIAL_DETECT_IRQ
  346.        " DETECT_IRQ"
  347. #define SERIAL_OPT
  348. #endif
  349. #ifdef ENABLE_SERIAL_PCI
  350.        " SERIAL_PCI"
  351. #define SERIAL_OPT
  352. #endif
  353. #ifdef ENABLE_SERIAL_PNP
  354.        " ISAPNP"
  355. #define SERIAL_OPT
  356. #endif
  357. #ifdef ENABLE_SERIAL_ACPI
  358.        " SERIAL_ACPI"
  359. #define SERIAL_OPT
  360. #endif
  361. #ifdef SERIAL_OPT
  362.        " enabledn";
  363. #else
  364.        " no serial options enabledn";
  365. #endif
  366. #undef SERIAL_OPT
  367. static _INLINE_ void show_serial_version(void)
  368. {
  369.   printk(KERN_INFO "%s version %s%s (%s) with%s", serial_name,
  370.        serial_version, LOCAL_VERSTRING, serial_revdate,
  371.        serial_options);
  372. }
  373. /*
  374.  * This routine detect the IRQ of a serial port by clearing OUT2 when
  375.  * no UART interrupt are requested (IER = 0) (*GPL*). This seems to work at
  376.  * each time, as long as no other device permanently request the IRQ.
  377.  * If no IRQ is detected, or multiple IRQ appear, this function returns 0.
  378.  * The variable "state" and the field "state->port" should not be null.
  379.  */
  380. static unsigned detect_uart_irq (struct serial_state * state)
  381. {
  382. int irq;
  383. unsigned long irqs;
  384. unsigned char save_mcr, save_ier;
  385. struct async_struct scr_info; /* serial_{in,out} because HUB6 */
  386. #ifdef CONFIG_SERIAL_MANY_PORTS
  387. unsigned char save_ICP=0; /* no warning */
  388. unsigned short ICP=0;
  389. if (state->flags & ASYNC_FOURPORT)  {
  390. ICP = (state->port & 0xFE0) | 0x01F;
  391. save_ICP = inb_p(ICP);
  392. outb_p(0x80, ICP);
  393. (void) inb_p(ICP);
  394. }
  395. #endif
  396. scr_info.magic = SERIAL_MAGIC;
  397. scr_info.state = state;
  398. scr_info.port = state->port;
  399. scr_info.flags = state->flags;
  400. #ifdef CONFIG_HUB6
  401. scr_info.hub6 = state->hub6;
  402. #endif
  403. scr_info.io_type = state->io_type;
  404. scr_info.iomem_base = state->iomem_base;
  405. scr_info.iomem_reg_shift = state->iomem_reg_shift;
  406. /* forget possible initially masked and pending IRQ */
  407. probe_irq_off(probe_irq_on());
  408. save_mcr = serial_inp(&scr_info, UART_MCR);
  409. save_ier = serial_inp(&scr_info, UART_IER);
  410. serial_outp(&scr_info, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2);
  411. irqs = probe_irq_on();
  412. serial_outp(&scr_info, UART_MCR, 0);
  413. udelay (10);
  414. if (state->flags & ASYNC_FOURPORT)  {
  415. serial_outp(&scr_info, UART_MCR,
  416.     UART_MCR_DTR | UART_MCR_RTS);
  417. } else {
  418. serial_outp(&scr_info, UART_MCR,
  419.     UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
  420. }
  421. serial_outp(&scr_info, UART_IER, 0x0f); /* enable all intrs */
  422. (void)serial_inp(&scr_info, UART_LSR);
  423. (void)serial_inp(&scr_info, UART_RX);
  424. (void)serial_inp(&scr_info, UART_IIR);
  425. (void)serial_inp(&scr_info, UART_MSR);
  426. serial_outp(&scr_info, UART_TX, 0xFF);
  427. udelay (20);
  428. irq = probe_irq_off(irqs);
  429. serial_outp(&scr_info, UART_MCR, save_mcr);
  430. serial_outp(&scr_info, UART_IER, save_ier);
  431. #ifdef CONFIG_SERIAL_MANY_PORTS
  432. if (state->flags & ASYNC_FOURPORT)
  433. outb_p(save_ICP, ICP);
  434. #endif
  435. return (irq > 0)? irq : 0;
  436. }
  437. /*
  438.  * This is a quickie test to see how big the FIFO is.
  439.  * It doesn't work at all the time, more's the pity.
  440.  */
  441. static int size_fifo(struct async_struct *info)
  442. {
  443. unsigned char old_fcr, old_mcr, old_dll, old_dlm;
  444. int count;
  445. old_fcr = serial_inp(info, UART_FCR);
  446. old_mcr = serial_inp(info, UART_MCR);
  447. serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO |
  448.     UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
  449. serial_outp(info, UART_MCR, UART_MCR_LOOP);
  450. serial_outp(info, UART_LCR, UART_LCR_DLAB);
  451. old_dll = serial_inp(info, UART_DLL);
  452. old_dlm = serial_inp(info, UART_DLM);
  453. serial_outp(info, UART_DLL, 0x01);
  454. serial_outp(info, UART_DLM, 0x00);
  455. serial_outp(info, UART_LCR, 0x03);
  456. for (count = 0; count < 256; count++)
  457. serial_outp(info, UART_TX, count);
  458. mdelay(20);
  459. for (count = 0; (serial_inp(info, UART_LSR) & UART_LSR_DR) &&
  460.      (count < 256); count++)
  461. serial_inp(info, UART_RX);
  462. serial_outp(info, UART_FCR, old_fcr);
  463. serial_outp(info, UART_MCR, old_mcr);
  464. serial_outp(info, UART_LCR, UART_LCR_DLAB);
  465. serial_outp(info, UART_DLL, old_dll);
  466. serial_outp(info, UART_DLM, old_dlm);
  467. return count;
  468. }
  469. /*
  470.  * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
  471.  * When this function is called we know it is at least a StarTech
  472.  * 16650 V2, but it might be one of several StarTech UARTs, or one of
  473.  * its clones.  (We treat the broken original StarTech 16650 V1 as a
  474.  * 16550, and why not?  Startech doesn't seem to even acknowledge its
  475.  * existence.)
  476.  * 
  477.  * What evil have men's minds wrought...
  478.  */
  479. static void autoconfig_startech_uarts(struct async_struct *info,
  480.       struct serial_state *state,
  481.       unsigned long flags)
  482. {
  483. unsigned char scratch, scratch2, scratch3, scratch4;
  484. /*
  485.  * First we check to see if it's an Oxford Semiconductor UART.
  486.  *
  487.  * If we have to do this here because some non-National
  488.  * Semiconductor clone chips lock up if you try writing to the
  489.  * LSR register (which serial_icr_read does)
  490.  */
  491. if (state->type == PORT_16550A) {
  492. /*
  493.  * EFR [4] must be set else this test fails
  494.  *
  495.  * This shouldn't be necessary, but Mike Hudson
  496.  * (Exoray@isys.ca) claims that it's needed for 952
  497.  * dual UART's (which are not recommended for new designs).
  498.  */
  499. info->ACR = 0;
  500. serial_out(info, UART_LCR, 0xBF);
  501. serial_out(info, UART_EFR, 0x10);
  502. serial_out(info, UART_LCR, 0x00);
  503. /* Check for Oxford Semiconductor 16C950 */
  504. scratch = serial_icr_read(info, UART_ID1);
  505. scratch2 = serial_icr_read(info, UART_ID2);
  506. scratch3 = serial_icr_read(info, UART_ID3);
  507. if (scratch == 0x16 && scratch2 == 0xC9 &&
  508.     (scratch3 == 0x50 || scratch3 == 0x52 ||
  509.      scratch3 == 0x54)) {
  510. state->type = PORT_16C950;
  511. state->revision = serial_icr_read(info, UART_REV) |
  512. (scratch3 << 8);
  513. return;
  514. }
  515. }
  516. /*
  517.  * We check for a XR16C850 by setting DLL and DLM to 0, and
  518.  * then reading back DLL and DLM.  If DLM reads back 0x10,
  519.  * then the UART is a XR16C850 and the DLL contains the chip
  520.  * revision.  If DLM reads back 0x14, then the UART is a
  521.  * XR16C854.
  522.  * 
  523.  */
  524. /* Save the DLL and DLM */
  525. serial_outp(info, UART_LCR, UART_LCR_DLAB);
  526. scratch3 = serial_inp(info, UART_DLL);
  527. scratch4 = serial_inp(info, UART_DLM);
  528. serial_outp(info, UART_DLL, 0);
  529. serial_outp(info, UART_DLM, 0);
  530. scratch2 = serial_inp(info, UART_DLL);
  531. scratch = serial_inp(info, UART_DLM);
  532. serial_outp(info, UART_LCR, 0);
  533. if (scratch == 0x10 || scratch == 0x14) {
  534. if (scratch == 0x10)
  535. state->revision = scratch2;
  536. state->type = PORT_16850;
  537. return;
  538. }
  539. /* Restore the DLL and DLM */
  540. serial_outp(info, UART_LCR, UART_LCR_DLAB);
  541. serial_outp(info, UART_DLL, scratch3);
  542. serial_outp(info, UART_DLM, scratch4);
  543. serial_outp(info, UART_LCR, 0);
  544. /*
  545.  * We distinguish between the '654 and the '650 by counting
  546.  * how many bytes are in the FIFO.  I'm using this for now,
  547.  * since that's the technique that was sent to me in the
  548.  * serial driver update, but I'm not convinced this works.
  549.  * I've had problems doing this in the past.  -TYT
  550.  */
  551. if (size_fifo(info) == 64)
  552. state->type = PORT_16654;
  553. else
  554. state->type = PORT_16650V2;
  555. }
  556. /*
  557.  * This routine is called by rs_init() to initialize a specific serial
  558.  * port.  It determines what type of UART chip this serial port is
  559.  * using: 8250, 16450, 16550, 16550A.  The important question is
  560.  * whether or not this UART is a 16550A or not, since this will
  561.  * determine whether or not we can use its FIFO features or not.
  562.  */
  563. static void autoconfig(struct serial_state * state)
  564. {
  565. unsigned char status1, status2, scratch, scratch2, scratch3;
  566. unsigned char save_lcr, save_mcr;
  567. struct async_struct *info, scr_info;
  568. unsigned long flags;
  569. state->type = PORT_UNKNOWN;
  570. #ifdef SERIAL_DEBUG_AUTOCONF
  571. printk("Testing ttyS%d (0x%04lx, 0x%04x)...n", state->line,
  572.        state->port, (unsigned) state->iomem_base);
  573. #endif
  574. if (!CONFIGURED_SERIAL_PORT(state))
  575. return;
  576. info = &scr_info; /* This is just for serial_{in,out} */
  577. info->magic = SERIAL_MAGIC;
  578. info->state = state;
  579. info->port = state->port;
  580. info->flags = state->flags;
  581. #ifdef CONFIG_HUB6
  582. info->hub6 = state->hub6;
  583. #endif
  584. info->io_type = state->io_type;
  585. info->iomem_base = state->iomem_base;
  586. info->iomem_reg_shift = state->iomem_reg_shift;
  587. save_flags(flags); cli();
  588. if (!(state->flags & ASYNC_BUGGY_UART) &&
  589.     !state->iomem_base) {
  590. /*
  591.  * Do a simple existence test first; if we fail this,
  592.  * there's no point trying anything else.
  593.  * 
  594.  * 0x80 is used as a nonsense port to prevent against
  595.  * false positives due to ISA bus float.  The
  596.  * assumption is that 0x80 is a non-existent port;
  597.  * which should be safe since include/asm/io.h also
  598.  * makes this assumption.
  599.  */
  600. scratch = serial_inp(info, UART_IER);
  601. serial_outp(info, UART_IER, 0);
  602. #ifdef __i386__
  603. outb(0xff, 0x080);
  604. #endif
  605. scratch2 = serial_inp(info, UART_IER);
  606. serial_outp(info, UART_IER, 0x0F);
  607. #ifdef __i386__
  608. outb(0, 0x080);
  609. #endif
  610. scratch3 = serial_inp(info, UART_IER);
  611. serial_outp(info, UART_IER, scratch);
  612. if (scratch2 || scratch3 != 0x0F) {
  613. #ifdef SERIAL_DEBUG_AUTOCONF
  614. printk("serial: ttyS%d: simple autoconfig failed "
  615.        "(%02x, %02x)n", state->line, 
  616.        scratch2, scratch3);
  617. #endif
  618. restore_flags(flags);
  619. return; /* We failed; there's nothing here */
  620. }
  621. }
  622. save_mcr = serial_in(info, UART_MCR);
  623. save_lcr = serial_in(info, UART_LCR);
  624. /* 
  625.  * Check to see if a UART is really there.  Certain broken
  626.  * internal modems based on the Rockwell chipset fail this
  627.  * test, because they apparently don't implement the loopback
  628.  * test mode.  So this test is skipped on the COM 1 through
  629.  * COM 4 ports.  This *should* be safe, since no board
  630.  * manufacturer would be stupid enough to design a board
  631.  * that conflicts with COM 1-4 --- we hope!
  632.  */
  633. if (!(state->flags & ASYNC_SKIP_TEST)) {
  634. serial_outp(info, UART_MCR, UART_MCR_LOOP | 0x0A);
  635. status1 = serial_inp(info, UART_MSR) & 0xF0;
  636. serial_outp(info, UART_MCR, save_mcr);
  637. if (status1 != 0x90) {
  638. #ifdef SERIAL_DEBUG_AUTOCONF
  639. printk("serial: ttyS%d: no UART loopback failedn",
  640.        state->line);
  641. #endif
  642. restore_flags(flags);
  643. return;
  644. }
  645. }
  646. serial_outp(info, UART_LCR, 0xBF); /* set up for StarTech test */
  647. serial_outp(info, UART_EFR, 0); /* EFR is the same as FCR */
  648. serial_outp(info, UART_LCR, 0);
  649. serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
  650. scratch = serial_in(info, UART_IIR) >> 6;
  651. switch (scratch) {
  652. case 0:
  653. state->type = PORT_16450;
  654. break;
  655. case 1:
  656. state->type = PORT_UNKNOWN;
  657. break;
  658. case 2:
  659. state->type = PORT_16550;
  660. break;
  661. case 3:
  662. state->type = PORT_16550A;
  663. break;
  664. }
  665. if (state->type == PORT_16550A) {
  666. /* Check for Startech UART's */
  667. serial_outp(info, UART_LCR, UART_LCR_DLAB);
  668. if (serial_in(info, UART_EFR) == 0) {
  669. state->type = PORT_16650;
  670. } else {
  671. serial_outp(info, UART_LCR, 0xBF);
  672. if (serial_in(info, UART_EFR) == 0)
  673. autoconfig_startech_uarts(info, state, flags);
  674. }
  675. }
  676. if (state->type == PORT_16550A) {
  677. /* Check for TI 16750 */
  678. serial_outp(info, UART_LCR, save_lcr | UART_LCR_DLAB);
  679. serial_outp(info, UART_FCR,
  680.     UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
  681. scratch = serial_in(info, UART_IIR) >> 5;
  682. if (scratch == 7) {
  683. /*
  684.  * If this is a 16750, and not a cheap UART
  685.  * clone, then it should only go into 64 byte
  686.  * mode if the UART_FCR7_64BYTE bit was set
  687.  * while UART_LCR_DLAB was latched.
  688.  */
  689.   serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
  690. serial_outp(info, UART_LCR, 0);
  691. serial_outp(info, UART_FCR,
  692.     UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
  693. scratch = serial_in(info, UART_IIR) >> 5;
  694. if (scratch == 6)
  695. state->type = PORT_16750;
  696. }
  697. serial_outp(info, UART_FCR, UART_FCR_ENABLE_FIFO);
  698. }
  699. #if defined(CONFIG_SERIAL_RSA) && defined(MODULE)
  700. if (state->type == PORT_16550A) {
  701. int i;
  702. for (i = 0 ; i < PORT_RSA_MAX ; ++i) {
  703. if (!probe_rsa[i] && !force_rsa[i])
  704. break;
  705. if (((probe_rsa[i] != state->port) ||
  706.      check_region(state->port + UART_RSA_BASE, 16)) &&
  707.     (force_rsa[i] != state->port))
  708. continue;
  709. if (!enable_rsa(info))
  710. continue;
  711. state->type = PORT_RSA;
  712. state->baud_base = SERIAL_RSA_BAUD_BASE;
  713. break;
  714. }
  715. }
  716. #endif
  717. serial_outp(info, UART_LCR, save_lcr);
  718. if (state->type == PORT_16450) {
  719. scratch = serial_in(info, UART_SCR);
  720. serial_outp(info, UART_SCR, 0xa5);
  721. status1 = serial_in(info, UART_SCR);
  722. serial_outp(info, UART_SCR, 0x5a);
  723. status2 = serial_in(info, UART_SCR);
  724. serial_outp(info, UART_SCR, scratch);
  725. if ((status1 != 0xa5) || (status2 != 0x5a))
  726. state->type = PORT_8250;
  727. }
  728. state->xmit_fifo_size = uart_config[state->type].dfl_xmit_fifo_size;
  729. if (state->type == PORT_UNKNOWN) {
  730. restore_flags(flags);
  731. return;
  732. }
  733. if (info->port) {
  734. #ifdef CONFIG_SERIAL_RSA
  735. if (state->type == PORT_RSA)
  736. request_region(info->port + UART_RSA_BASE, 16,
  737.        "serial_rsa(auto)");
  738. else
  739. #endif
  740. request_region(info->port,8,"serial(auto)");
  741. }
  742. /*
  743.  * Reset the UART.
  744.  */
  745. #ifdef CONFIG_SERIAL_RSA
  746. if (state->type == PORT_RSA)
  747. serial_outp(info, UART_RSA_FRR, 0);
  748. #endif
  749. serial_outp(info, UART_MCR, save_mcr);
  750. serial_outp(info, UART_FCR, (UART_FCR_ENABLE_FIFO |
  751.      UART_FCR_CLEAR_RCVR |
  752.      UART_FCR_CLEAR_XMIT));
  753. serial_outp(info, UART_FCR, 0);
  754. (void)serial_in(info, UART_RX);
  755. serial_outp(info, UART_IER, 0);
  756. restore_flags(flags);
  757. }
  758. int register_serial(struct serial_struct *req);
  759. void unregister_serial(int line);
  760. #if (LINUX_VERSION_CODE > 0x20100)
  761. EXPORT_SYMBOL(register_serial);
  762. EXPORT_SYMBOL(unregister_serial);
  763. #else
  764. static struct symbol_table serial_syms = {
  765. #include <linux/symtab_begin.h>
  766. X(register_serial),
  767. X(unregister_serial),
  768. #include <linux/symtab_end.h>
  769. };
  770. #endif
  771. #if defined(ENABLE_SERIAL_PCI) || defined(ENABLE_SERIAL_PNP) 
  772. static void __devinit printk_pnp_dev_id(unsigned short vendor,
  773.      unsigned short device)
  774. {
  775. printk("%c%c%c%x%x%x%x",
  776.        'A' + ((vendor >> 2) & 0x3f) - 1,
  777.        'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1,
  778.        'A' + ((vendor >> 8) & 0x1f) - 1,
  779.        (device >> 4) & 0x0f,
  780.        device & 0x0f,
  781.        (device >> 12) & 0x0f,
  782.        (device >> 8) & 0x0f);
  783. }
  784. static _INLINE_ int get_pci_port(struct pci_dev *dev,
  785.   struct pci_board *board,
  786.   struct serial_struct *req,
  787.   int idx)
  788. {
  789. unsigned long port;
  790. int base_idx;
  791. int max_port;
  792. int offset;
  793. base_idx = SPCI_FL_GET_BASE(board->flags);
  794. if (board->flags & SPCI_FL_BASE_TABLE)
  795. base_idx += idx;
  796. if (board->flags & SPCI_FL_REGION_SZ_CAP) {
  797. max_port = pci_resource_len(dev, base_idx) / 8;
  798. if (idx >= max_port)
  799. return 1;
  800. }
  801. offset = board->first_uart_offset;
  802. /* Timedia/SUNIX uses a mixture of BARs and offsets */
  803. /* Ugh, this is ugly as all hell --- TYT */
  804. if(dev->vendor == PCI_VENDOR_ID_TIMEDIA )  /* 0x1409 */
  805. switch(idx) {
  806. case 0: base_idx=0;
  807. break;
  808. case 1: base_idx=0; offset=8;
  809. break;
  810. case 2: base_idx=1; 
  811. break;
  812. case 3: base_idx=1; offset=8;
  813. break;
  814. case 4: /* BAR 2*/
  815. case 5: /* BAR 3 */
  816. case 6: /* BAR 4*/
  817. case 7: base_idx=idx-2; /* BAR 5*/
  818. }
  819. /* Some Titan cards are also a little weird */
  820. if (dev->vendor == PCI_VENDOR_ID_TITAN &&
  821.     (dev->device == PCI_DEVICE_ID_TITAN_400L ||
  822.      dev->device == PCI_DEVICE_ID_TITAN_800L)) {
  823. switch (idx) {
  824. case 0: base_idx = 1;
  825. break;
  826. case 1: base_idx = 2;
  827. break;
  828. default:
  829. base_idx = 4;
  830. offset = 8 * (idx - 2);
  831. }
  832. }
  833.   
  834. /* HP's Diva chip puts the 4th/5th serial port further out, and
  835.  * some serial ports are supposed to be hidden on certain models.
  836.  */
  837. if (dev->vendor == PCI_VENDOR_ID_HP &&
  838. dev->device == PCI_DEVICE_ID_HP_SAS) {
  839. switch (dev->subsystem_device) {
  840. case 0x104B: /* Maestro */
  841. if (idx == 3) idx++;
  842. break;
  843. case 0x1282: /* Everest / Longs Peak */
  844. if (idx > 0) idx++;
  845. if (idx > 2) idx++;
  846. break;
  847. }
  848. if (idx > 2) {
  849. offset = 0x18;
  850. }
  851. }
  852. port =  pci_resource_start(dev, base_idx) + offset;
  853. if ((board->flags & SPCI_FL_BASE_TABLE) == 0)
  854. port += idx * (board->uart_offset ? board->uart_offset : 8);
  855. if (IS_PCI_REGION_IOPORT(dev, base_idx)) {
  856. req->port = port;
  857. if (HIGH_BITS_OFFSET)
  858. req->port_high = port >> HIGH_BITS_OFFSET;
  859. else
  860. req->port_high = 0;
  861. return 0;
  862. }
  863. req->io_type = SERIAL_IO_MEM;
  864. req->iomem_base = ioremap(port, board->uart_offset);
  865. req->iomem_reg_shift = board->reg_shift;
  866. req->port = 0;
  867. return 0;
  868. }
  869. static _INLINE_ int get_pci_irq(struct pci_dev *dev,
  870. struct pci_board *board,
  871. int idx)
  872. {
  873. int base_idx;
  874. if ((board->flags & SPCI_FL_IRQRESOURCE) == 0)
  875. return dev->irq;
  876. base_idx = SPCI_FL_GET_IRQBASE(board->flags);
  877. if (board->flags & SPCI_FL_IRQ_TABLE)
  878. base_idx += idx;
  879. return PCI_IRQ_RESOURCE(dev, base_idx);
  880. }
  881. /*
  882.  * Common enabler code shared by both PCI and ISAPNP probes
  883.  */
  884. static void __devinit start_pci_pnp_board(struct pci_dev *dev,
  885.        struct pci_board *board)
  886. {
  887. int k, line;
  888. struct serial_struct serial_req;
  889. int base_baud;
  890.        if (PREPARE_FUNC(dev) && (PREPARE_FUNC(dev))(dev) < 0) {
  891.        printk("serial: PNP device '");
  892.        printk_pnp_dev_id(dev->vendor, dev->device);
  893.        printk("' prepare failedn");
  894.        return;
  895.        }
  896.        if (ACTIVATE_FUNC(dev) && (ACTIVATE_FUNC(dev))(dev) < 0) {
  897.        printk("serial: PNP device '");
  898.        printk_pnp_dev_id(dev->vendor, dev->device);
  899.        printk("' activate failedn");
  900.        return;
  901.        }
  902. /*
  903.  * Run the initialization function, if any
  904.  */
  905. if (board->init_fn && ((board->init_fn)(dev, board, 1) != 0))
  906. return;
  907. /*
  908.  * Register the serial board in the array if we need to
  909.  * shutdown the board on a module unload or card removal
  910.  */
  911. if (DEACTIVATE_FUNC(dev) || board->init_fn) {
  912. for (k=0; k < NR_PCI_BOARDS; k++)
  913. if (serial_pci_board[k].dev == 0)
  914. break;
  915. if (k >= NR_PCI_BOARDS)
  916. return;
  917. serial_pci_board[k].board = *board;
  918. serial_pci_board[k].dev = dev;
  919. }
  920. base_baud = board->base_baud;
  921. if (!base_baud)
  922. base_baud = BASE_BAUD;
  923. memset(&serial_req, 0, sizeof(serial_req));
  924. for (k=0; k < board->num_ports; k++) {
  925. serial_req.irq = get_pci_irq(dev, board, k);
  926. if (get_pci_port(dev, board, &serial_req, k))
  927. break;
  928. serial_req.flags = ASYNC_SKIP_TEST | ASYNC_AUTOPROBE;
  929. #ifdef SERIAL_DEBUG_PCI
  930. printk("Setup PCI/PNP port: port %x, irq %d, type %dn",
  931.        serial_req.port, serial_req.irq, serial_req.io_type);
  932. #endif
  933. line = register_serial(&serial_req);
  934. if (line < 0)
  935. break;
  936. rs_table[line].baud_base = base_baud;
  937. rs_table[line].dev = dev;
  938. }
  939. }
  940. #endif /* ENABLE_SERIAL_PCI || ENABLE_SERIAL_PNP */
  941. #ifdef ENABLE_SERIAL_PCI
  942. /*
  943.  * Some PCI serial cards using the PLX 9050 PCI interface chip require
  944.  * that the card interrupt be explicitly enabled or disabled.  This
  945.  * seems to be mainly needed on card using the PLX which also use I/O
  946.  * mapped memory.
  947.  */
  948. static int __devinit
  949. pci_plx9050_fn(struct pci_dev *dev, struct pci_board *board, int enable)
  950. {
  951. u8 data, *p, irq_config;
  952. int pci_config;
  953. irq_config = 0x41;
  954. pci_config = PCI_COMMAND_MEMORY;
  955. if (dev->vendor == PCI_VENDOR_ID_PANACOM)
  956. irq_config = 0x43;
  957. if ((dev->vendor == PCI_VENDOR_ID_PLX) &&
  958.     (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) {
  959. /*
  960.  * As the megawolf cards have the int pins active
  961.  * high, and have 2 UART chips, both ints must be
  962.  * enabled on the 9050. Also, the UARTS are set in
  963.  * 16450 mode by default, so we have to enable the
  964.  * 16C950 'enhanced' mode so that we can use the deep
  965.  * FIFOs
  966.  */
  967. irq_config = 0x5b;
  968. pci_config = PCI_COMMAND_MEMORY | PCI_COMMAND_IO;
  969. }
  970. pci_read_config_byte(dev, PCI_COMMAND, &data);
  971. if (enable)
  972. pci_write_config_byte(dev, PCI_COMMAND,
  973.       data | pci_config);
  974. /* enable/disable interrupts */
  975. p = ioremap(pci_resource_start(dev, 0), 0x80);
  976. writel(enable ? irq_config : 0x00, (unsigned long)p + 0x4c);
  977. iounmap(p);
  978. if (!enable)
  979. pci_write_config_byte(dev, PCI_COMMAND,
  980.       data & ~pci_config);
  981. return 0;
  982. }
  983. /*
  984.  * SIIG serial cards have an PCI interface chip which also controls
  985.  * the UART clocking frequency. Each UART can be clocked independently
  986.  * (except cards equiped with 4 UARTs) and initial clocking settings
  987.  * are stored in the EEPROM chip. It can cause problems because this
  988.  * version of serial driver doesn't support differently clocked UART's
  989.  * on single PCI card. To prevent this, initialization functions set
  990.  * high frequency clocking for all UART's on given card. It is safe (I
  991.  * hope) because it doesn't touch EEPROM settings to prevent conflicts
  992.  * with other OSes (like M$ DOS).
  993.  *
  994.  *  SIIG support added by Andrey Panin <pazke@mail.tp.ru>, 10/1999
  995.  * 
  996.  * There is two family of SIIG serial cards with different PCI
  997.  * interface chip and different configuration methods:
  998.  *     - 10x cards have control registers in IO and/or memory space;
  999.  *     - 20x cards have control registers in standard PCI configuration space.
  1000.  *
  1001.  * SIIG initialization functions exported for use by parport_serial.c module.
  1002.  */
  1003. #define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
  1004. #define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
  1005. int __devinit
  1006. pci_siig10x_fn(struct pci_dev *dev, struct pci_board *board, int enable)
  1007. {
  1008.        u16 data, *p;
  1009.        if (!enable) return 0;
  1010.        p = ioremap(pci_resource_start(dev, 0), 0x80);
  1011.        switch (dev->device & 0xfff8) {
  1012.                case PCI_DEVICE_ID_SIIG_1S_10x:         /* 1S */
  1013.                        data = 0xffdf;
  1014.                        break;
  1015.                case PCI_DEVICE_ID_SIIG_2S_10x:         /* 2S, 2S1P */
  1016.                        data = 0xf7ff;
  1017.                        break;
  1018.                default:                                /* 1S1P, 4S */
  1019.                        data = 0xfffb;
  1020.                        break;
  1021.        }
  1022.        writew(readw((unsigned long) p + 0x28) & data, (unsigned long) p + 0x28);
  1023.        iounmap(p);
  1024.        return 0;
  1025. }
  1026. EXPORT_SYMBOL(pci_siig10x_fn);
  1027. #define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
  1028. #define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
  1029. int __devinit
  1030. pci_siig20x_fn(struct pci_dev *dev, struct pci_board *board, int enable)
  1031. {
  1032.        u8 data;
  1033.        if (!enable) return 0;
  1034.        /* Change clock frequency for the first UART. */
  1035.        pci_read_config_byte(dev, 0x6f, &data);
  1036.        pci_write_config_byte(dev, 0x6f, data & 0xef);
  1037.        /* If this card has 2 UART, we have to do the same with second UART. */
  1038.        if (((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S_20x) ||
  1039.            ((dev->device & 0xfffc) == PCI_DEVICE_ID_SIIG_2S1P_20x)) {
  1040.                pci_read_config_byte(dev, 0x73, &data);
  1041.                pci_write_config_byte(dev, 0x73, data & 0xef);
  1042.        }
  1043.        return 0;
  1044. }
  1045. EXPORT_SYMBOL(pci_siig20x_fn);
  1046. /* Added for EKF Intel i960 serial boards */
  1047. static int __devinit
  1048. pci_inteli960ni_fn(struct pci_dev *dev,
  1049.    struct pci_board *board,
  1050.    int enable)
  1051. {
  1052. unsigned long oldval;
  1053. if (!(pci_get_subdevice(dev) & 0x1000))
  1054. return(-1);
  1055. if (!enable) /* is there something to deinit? */
  1056. return(0);
  1057.    
  1058. #ifdef SERIAL_DEBUG_PCI
  1059. printk(KERN_DEBUG " Subsystem ID %lx (intel 960)n",
  1060.        (unsigned long) board->subdevice);
  1061. #endif
  1062. /* is firmware started? */
  1063. pci_read_config_dword(dev, 0x44, (void*) &oldval); 
  1064. if (oldval == 0x00001000L) { /* RESET value */ 
  1065. printk(KERN_DEBUG "Local i960 firmware missing");
  1066. return(-1); 
  1067. }
  1068. return(0);
  1069. }
  1070. /*
  1071.  * Timedia has an explosion of boards, and to avoid the PCI table from
  1072.  * growing *huge*, we use this function to collapse some 70 entries
  1073.  * in the PCI table into one, for sanity's and compactness's sake.
  1074.  */
  1075. static unsigned short timedia_single_port[] = {
  1076. 0x4025, 0x4027, 0x4028, 0x5025, 0x5027, 0 };
  1077. static unsigned short timedia_dual_port[] = {
  1078. 0x0002, 0x4036, 0x4037, 0x4038, 0x4078, 0x4079, 0x4085,
  1079. 0x4088, 0x4089, 0x5037, 0x5078, 0x5079, 0x5085, 0x6079, 
  1080. 0x7079, 0x8079, 0x8137, 0x8138, 0x8237, 0x8238, 0x9079, 
  1081. 0x9137, 0x9138, 0x9237, 0x9238, 0xA079, 0xB079, 0xC079,
  1082. 0xD079, 0 };
  1083. static unsigned short timedia_quad_port[] = {
  1084. 0x4055, 0x4056, 0x4095, 0x4096, 0x5056, 0x8156, 0x8157, 
  1085. 0x8256, 0x8257, 0x9056, 0x9156, 0x9157, 0x9158, 0x9159, 
  1086. 0x9256, 0x9257, 0xA056, 0xA157, 0xA158, 0xA159, 0xB056,
  1087. 0xB157, 0 };
  1088. static unsigned short timedia_eight_port[] = {
  1089. 0x4065, 0x4066, 0x5065, 0x5066, 0x8166, 0x9066, 0x9166, 
  1090. 0x9167, 0x9168, 0xA066, 0xA167, 0xA168, 0 };
  1091. static struct timedia_struct {
  1092. int num;
  1093. unsigned short *ids;
  1094. } timedia_data[] = {
  1095. { 1, timedia_single_port },
  1096. { 2, timedia_dual_port },
  1097. { 4, timedia_quad_port },
  1098. { 8, timedia_eight_port },
  1099. { 0, 0 }
  1100. };
  1101. static int __devinit
  1102. pci_timedia_fn(struct pci_dev *dev, struct pci_board *board, int enable)
  1103. {
  1104. int i, j;
  1105. unsigned short *ids;
  1106. if (!enable)
  1107. return 0;
  1108. for (i=0; timedia_data[i].num; i++) {
  1109. ids = timedia_data[i].ids;
  1110. for (j=0; ids[j]; j++) {
  1111. if (pci_get_subdevice(dev) == ids[j]) {
  1112. board->num_ports = timedia_data[i].num;
  1113. return 0;
  1114. }
  1115. }
  1116. }
  1117. return 0;
  1118. }
  1119. /*
  1120.  * HP's Remote Management Console.  The Diva chip came in several
  1121.  * different versions.  N-class, L2000 and A500 have two Diva chips, each
  1122.  * with 3 UARTs (the third UART on the second chip is unused).  Superdome
  1123.  * and Keystone have one Diva chip with 3 UARTs.  Some later machines have
  1124.  * one Diva chip, but it has been expanded to 5 UARTs.
  1125.  */
  1126. static int __devinit
  1127. pci_hp_diva(struct pci_dev *dev, struct pci_board *board, int enable)
  1128. {
  1129. if (!enable)
  1130. return 0;
  1131. switch (dev->subsystem_device) {
  1132. case 0x1049: /* Prelude Diva 1 */
  1133. case 0x1223: /* Superdome */
  1134. case 0x1226: /* Keystone */
  1135. case 0x1282: /* Everest / Longs Peak */
  1136. board->num_ports = 3;
  1137. break;
  1138. case 0x104A: /* Prelude Diva 2 */
  1139. board->num_ports = 2;
  1140. break;
  1141. case 0x104B: /* Maestro */
  1142. board->num_ports = 4;
  1143. break;
  1144. case 0x1227: /* Powerbar */
  1145. board->num_ports = 1;
  1146. break;
  1147. }
  1148. return 0;
  1149. }
  1150. static int __devinit
  1151. pci_xircom_fn(struct pci_dev *dev, struct pci_board *board, int enable)
  1152. {
  1153. __set_current_state(TASK_UNINTERRUPTIBLE);
  1154. schedule_timeout(HZ/10);
  1155. return 0;
  1156. }
  1157. /*
  1158.  * This is the configuration table for all of the PCI serial boards
  1159.  * which we support.  It is directly indexed by the pci_board_num_t enum
  1160.  * value, which is encoded in the pci_device_id PCI probe table's
  1161.  * driver_data member.
  1162.  */
  1163. enum pci_board_num_t {
  1164. pbn_b0_1_115200,
  1165. pbn_default = 0,
  1166. pbn_b0_2_115200,
  1167. pbn_b0_4_115200,
  1168. pbn_b0_1_921600,
  1169. pbn_b0_2_921600,
  1170. pbn_b0_4_921600,
  1171. pbn_b0_bt_1_115200,
  1172. pbn_b0_bt_2_115200,
  1173. pbn_b0_bt_1_460800,
  1174. pbn_b0_bt_2_460800,
  1175. pbn_b0_bt_2_921600,
  1176. pbn_b1_1_115200,
  1177. pbn_b1_2_115200,
  1178. pbn_b1_4_115200,
  1179. pbn_b1_8_115200,
  1180. pbn_b1_2_921600,
  1181. pbn_b1_4_921600,
  1182. pbn_b1_8_921600,
  1183. pbn_b1_2_1382400,
  1184. pbn_b1_4_1382400,
  1185. pbn_b1_8_1382400,
  1186. pbn_b2_1_115200,
  1187. pbn_b2_8_115200,
  1188. pbn_b2_4_460800,
  1189. pbn_b2_8_460800,
  1190. pbn_b2_16_460800,
  1191. pbn_b2_4_921600,
  1192. pbn_b2_8_921600,
  1193. pbn_b2_bt_1_115200,
  1194. pbn_b2_bt_2_115200,
  1195. pbn_b2_bt_4_115200,
  1196. pbn_b2_bt_2_921600,
  1197. pbn_panacom,
  1198. pbn_panacom2,
  1199. pbn_panacom4,
  1200. pbn_plx_romulus,
  1201. pbn_oxsemi,
  1202. pbn_timedia,
  1203. pbn_intel_i960,
  1204. pbn_sgi_ioc3,
  1205. pbn_hp_diva,
  1206. #ifdef CONFIG_DDB5074
  1207. pbn_nec_nile4,
  1208. #endif
  1209. #if 0
  1210. pbn_dci_pccom8,
  1211. #endif
  1212. pbn_xircom_combo,
  1213. pbn_siig10x_0,
  1214. pbn_siig10x_1,
  1215. pbn_siig10x_2,
  1216. pbn_siig10x_4,
  1217. pbn_siig20x_0,
  1218. pbn_siig20x_2,
  1219. pbn_siig20x_4,
  1220. pbn_computone_4,
  1221. pbn_computone_6,
  1222. pbn_computone_8,
  1223. };
  1224. static struct pci_board pci_boards[] __devinitdata = {
  1225. /*
  1226.  * PCI Flags, Number of Ports, Base (Maximum) Baud Rate,
  1227.  * Offset to get to next UART's registers,
  1228.  * Register shift to use for memory-mapped I/O,
  1229.  * Initialization function, first UART offset
  1230.  */
  1231. /* Generic serial board, pbn_b0_1_115200, pbn_default */
  1232. { SPCI_FL_BASE0, 1, 115200 }, /* pbn_b0_1_115200,
  1233.    pbn_default */
  1234. { SPCI_FL_BASE0, 2, 115200 }, /* pbn_b0_2_115200 */
  1235. { SPCI_FL_BASE0, 4, 115200 }, /* pbn_b0_4_115200 */
  1236. { SPCI_FL_BASE0, 1, 921600 }, /* pbn_b0_1_921600 */
  1237. { SPCI_FL_BASE0, 2, 921600 }, /* pbn_b0_2_921600 */
  1238. { SPCI_FL_BASE0, 4, 921600 }, /* pbn_b0_4_921600 */
  1239. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, /* pbn_b0_bt_1_115200 */
  1240. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 115200 }, /* pbn_b0_bt_2_115200 */
  1241. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 460800 }, /* pbn_b0_bt_1_460800 */
  1242. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 460800 }, /* pbn_b0_bt_2_460800 */
  1243. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 921600 }, /* pbn_b0_bt_2_921600 */
  1244. { SPCI_FL_BASE1, 1, 115200 }, /* pbn_b1_1_115200 */
  1245. { SPCI_FL_BASE1, 2, 115200 }, /* pbn_b1_2_115200 */
  1246. { SPCI_FL_BASE1, 4, 115200 }, /* pbn_b1_4_115200 */
  1247. { SPCI_FL_BASE1, 8, 115200 }, /* pbn_b1_8_115200 */
  1248. { SPCI_FL_BASE1, 2, 921600 }, /* pbn_b1_2_921600 */
  1249. { SPCI_FL_BASE1, 4, 921600 }, /* pbn_b1_4_921600 */
  1250. { SPCI_FL_BASE1, 8, 921600 }, /* pbn_b1_8_921600 */
  1251. { SPCI_FL_BASE1, 2, 1382400 }, /* pbn_b1_2_1382400 */
  1252. { SPCI_FL_BASE1, 4, 1382400 }, /* pbn_b1_4_1382400 */
  1253. { SPCI_FL_BASE1, 8, 1382400 }, /* pbn_b1_8_1382400 */
  1254. { SPCI_FL_BASE2, 1, 115200 }, /* pbn_b2_1_115200 */
  1255. { SPCI_FL_BASE2, 8, 115200 }, /* pbn_b2_8_115200 */
  1256. { SPCI_FL_BASE2, 4, 460800 }, /* pbn_b2_4_460800 */
  1257. { SPCI_FL_BASE2, 8, 460800 }, /* pbn_b2_8_460800 */
  1258. { SPCI_FL_BASE2, 16, 460800 }, /* pbn_b2_16_460800 */
  1259. { SPCI_FL_BASE2, 4, 921600 }, /* pbn_b2_4_921600 */
  1260. { SPCI_FL_BASE2, 8, 921600 }, /* pbn_b2_8_921600 */
  1261. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 1, 115200 }, /* pbn_b2_bt_1_115200 */
  1262. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 2, 115200 }, /* pbn_b2_bt_2_115200 */
  1263. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 4, 115200 }, /* pbn_b2_bt_4_115200 */
  1264. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 2, 921600 }, /* pbn_b2_bt_2_921600 */
  1265. { SPCI_FL_BASE2, 2, 921600, /* IOMEM */    /* pbn_panacom */
  1266. 0x400, 7, pci_plx9050_fn },
  1267. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 2, 921600,   /* pbn_panacom2 */
  1268. 0x400, 7, pci_plx9050_fn },
  1269. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 4, 921600,   /* pbn_panacom4 */
  1270. 0x400, 7, pci_plx9050_fn },
  1271. { SPCI_FL_BASE2, 4, 921600,    /* pbn_plx_romulus */
  1272. 0x20, 2, pci_plx9050_fn, 0x03 },
  1273. /* This board uses the size of PCI Base region 0 to
  1274.  * signal now many ports are available */
  1275. { SPCI_FL_BASE0 | SPCI_FL_REGION_SZ_CAP, 32, 115200 }, /* pbn_oxsemi */
  1276. { SPCI_FL_BASE_TABLE, 1, 921600,    /* pbn_timedia */
  1277. 0, 0, pci_timedia_fn },
  1278. /* EKF addition for i960 Boards form EKF with serial port */
  1279. { SPCI_FL_BASE0, 32, 921600, /* max 256 ports */   /* pbn_intel_i960 */
  1280. 8<<2, 2, pci_inteli960ni_fn, 0x10000},
  1281. { SPCI_FL_BASE0 | SPCI_FL_IRQRESOURCE,    /* pbn_sgi_ioc3 */
  1282. 1, 458333, 0, 0, 0, 0x20178 },
  1283. { SPCI_FL_BASE0, 5, 115200, 8, 0, pci_hp_diva, 0},   /* pbn_hp_diva */
  1284. #ifdef CONFIG_DDB5074
  1285. /*
  1286.  * NEC Vrc-5074 (Nile 4) builtin UART.
  1287.  * Conditionally compiled in since this is a motherboard device.
  1288.  */
  1289. { SPCI_FL_BASE0, 1, 520833,    /* pbn_nec_nile4 */
  1290. 64, 3, NULL, 0x300 },
  1291. #endif
  1292. #if 0 /* PCI_DEVICE_ID_DCI_PCCOM8 ? */    /* pbn_dci_pccom8 */
  1293. { SPCI_FL_BASE3, 8, 115200, 8 },
  1294. #endif
  1295. { SPCI_FL_BASE0, 1, 115200,   /* pbn_xircom_combo */
  1296. 0, 0, pci_xircom_fn },
  1297. { SPCI_FL_BASE2, 1, 460800,    /* pbn_siig10x_0 */
  1298. 0, 0, pci_siig10x_fn },
  1299. { SPCI_FL_BASE2, 1, 921600,    /* pbn_siig10x_1 */
  1300. 0, 0, pci_siig10x_fn },
  1301. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 2, 921600,   /* pbn_siig10x_2 */
  1302. 0, 0, pci_siig10x_fn },
  1303. { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 4, 921600,   /* pbn_siig10x_4 */
  1304. 0, 0, pci_siig10x_fn },
  1305. { SPCI_FL_BASE0, 1, 921600,    /* pbn_siix20x_0 */
  1306. 0, 0, pci_siig20x_fn },
  1307. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 2, 921600,   /* pbn_siix20x_2 */
  1308. 0, 0, pci_siig20x_fn },
  1309. { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 4, 921600,   /* pbn_siix20x_4 */
  1310. 0, 0, pci_siig20x_fn },
  1311. { SPCI_FL_BASE0, 4, 921600, /* IOMEM */    /* pbn_computone_4 */
  1312. 0x40, 2, NULL, 0x200 },
  1313. { SPCI_FL_BASE0, 6, 921600, /* IOMEM */    /* pbn_computone_6 */
  1314. 0x40, 2, NULL, 0x200 },
  1315. { SPCI_FL_BASE0, 8, 921600, /* IOMEM */    /* pbn_computone_8 */
  1316. 0x40, 2, NULL, 0x200 },
  1317. };
  1318. /*
  1319.  * Given a complete unknown PCI device, try to use some heuristics to
  1320.  * guess what the configuration might be, based on the pitiful PCI
  1321.  * serial specs.  Returns 0 on success, 1 on failure.
  1322.  */
  1323. static int __devinit serial_pci_guess_board(struct pci_dev *dev,
  1324.    struct pci_board *board)
  1325. {
  1326. int num_iomem = 0, num_port = 0, first_port = -1;
  1327. int i;
  1328. /*
  1329.  * If it is not a communications device or the programming
  1330.  * interface is greater than 6, give up.
  1331.  *
  1332.  * (Should we try to make guesses for multiport serial devices
  1333.  * later?) 
  1334.  */
  1335. if ((((dev->class >> 8) != PCI_CLASS_COMMUNICATION_SERIAL) &&
  1336.     ((dev->class >> 8) != PCI_CLASS_COMMUNICATION_MODEM)) ||
  1337.     (dev->class & 0xff) > 6)
  1338. return 1;
  1339. for (i=0; i < 6; i++) {
  1340. if (IS_PCI_REGION_IOPORT(dev, i)) {
  1341. num_port++;
  1342. if (first_port == -1)
  1343. first_port = i;
  1344. }
  1345. if (IS_PCI_REGION_IOMEM(dev, i))
  1346. num_iomem++;
  1347. }
  1348. /*
  1349.  * If there is 1 or 0 iomem regions, and exactly one port, use
  1350.  * it.
  1351.  */
  1352. if (num_iomem <= 1 && num_port == 1) {
  1353. board->flags = first_port;
  1354. return 0;
  1355. }
  1356. return 1;
  1357. }
  1358. static int __devinit serial_init_one(struct pci_dev *dev,
  1359.      const struct pci_device_id *ent)
  1360. {
  1361. struct pci_board *board, tmp;
  1362. int rc;
  1363. board = &pci_boards[ent->driver_data];
  1364. rc = pci_enable_device(dev);
  1365. if (rc) return rc;
  1366. if (ent->driver_data == pbn_default &&
  1367.     serial_pci_guess_board(dev, board))
  1368. return -ENODEV;
  1369. else if (serial_pci_guess_board(dev, &tmp) == 0) {
  1370. printk(KERN_INFO "Redundant entry in serial pci_table.  "
  1371.        "Please send the output ofn"
  1372.        "lspci -vv, this message (%04x,%04x,%04x,%04x)n"
  1373.        "and the manufacturer and name of "
  1374.        "serial board or modem boardn"
  1375.        "to serial-pci-info@lists.sourceforge.net.n",
  1376.        dev->vendor, dev->device,
  1377.        pci_get_subvendor(dev), pci_get_subdevice(dev));
  1378. }
  1379.        
  1380. start_pci_pnp_board(dev, board);
  1381. return 0;
  1382. }
  1383. static void __devexit serial_remove_one(struct pci_dev *dev)
  1384. {
  1385. int i;
  1386. /*
  1387.  * Iterate through all of the ports finding those that belong
  1388.  * to this PCI device.
  1389.  */
  1390. for(i = 0; i < NR_PORTS; i++) {
  1391. if (rs_table[i].dev != dev)
  1392. continue;
  1393. unregister_serial(i);
  1394. rs_table[i].dev = 0;
  1395. }
  1396. /*
  1397.  * Now execute any board-specific shutdown procedure
  1398.  */
  1399. for (i=0; i < NR_PCI_BOARDS; i++) {
  1400. struct pci_board_inst *brd = &serial_pci_board[i];
  1401. if (serial_pci_board[i].dev != dev)
  1402. continue;
  1403. if (brd->board.init_fn)
  1404. (brd->board.init_fn)(brd->dev, &brd->board, 0);
  1405. if (DEACTIVATE_FUNC(brd->dev))
  1406. (DEACTIVATE_FUNC(brd->dev))(brd->dev);
  1407. serial_pci_board[i].dev = 0;
  1408. }
  1409. }
  1410. static struct pci_device_id serial_pci_tbl[] __devinitdata = {
  1411. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
  1412. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1413. PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
  1414. pbn_b1_8_1382400 },
  1415. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
  1416. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1417. PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
  1418. pbn_b1_4_1382400 },
  1419. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,
  1420. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1421. PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
  1422. pbn_b1_2_1382400 },
  1423. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1424. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1425. PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,
  1426. pbn_b1_8_1382400 },
  1427. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1428. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1429. PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,
  1430. pbn_b1_4_1382400 },
  1431. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1432. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1433. PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,
  1434. pbn_b1_2_1382400 },
  1435. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1436. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1437. PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,
  1438. pbn_b1_8_921600 },
  1439. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1440. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1441. PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,
  1442. pbn_b1_8_921600 },
  1443. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1444. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1445. PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,
  1446. pbn_b1_4_921600 },
  1447. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1448. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1449. PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,
  1450. pbn_b1_4_921600 },
  1451. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1452. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1453. PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,
  1454. pbn_b1_2_921600 },
  1455. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1456. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1457. PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,
  1458. pbn_b1_8_921600 },
  1459. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1460. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1461. PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,
  1462. pbn_b1_8_921600 },
  1463. { PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,
  1464. PCI_SUBVENDOR_ID_CONNECT_TECH,
  1465. PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,
  1466. pbn_b1_4_921600 },
  1467. { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,
  1468. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1469. pbn_b2_bt_1_115200 },
  1470. { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,
  1471. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1472. pbn_b2_bt_2_115200 },
  1473. { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,
  1474. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1475. pbn_b2_bt_4_115200 },
  1476. { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,
  1477. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1478. pbn_b2_bt_2_115200 },
  1479. { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,
  1480. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1481. pbn_b2_bt_4_115200 },
  1482. { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
  1483. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1484. pbn_b2_8_115200 },
  1485. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,
  1486. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1487. pbn_b2_bt_2_115200 },
  1488. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,
  1489. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1490. pbn_b2_bt_2_921600 },
  1491. /* VScom SPCOM800, from sl@s.pl */
  1492. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800, 
  1493. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1494. pbn_b2_8_921600 },
  1495. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,
  1496. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1497. pbn_b2_4_921600 },
  1498. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1499. PCI_SUBVENDOR_ID_KEYSPAN,
  1500. PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,
  1501. pbn_panacom },
  1502. { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,
  1503. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1504. pbn_panacom4 },
  1505. { PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,
  1506. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1507. pbn_panacom2 },
  1508. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1509. PCI_SUBVENDOR_ID_CHASE_PCIFAST,
  1510. PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0, 
  1511. pbn_b2_4_460800 },
  1512. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1513. PCI_SUBVENDOR_ID_CHASE_PCIFAST,
  1514. PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0, 
  1515. pbn_b2_8_460800 },
  1516. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1517. PCI_SUBVENDOR_ID_CHASE_PCIFAST,
  1518. PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0, 
  1519. pbn_b2_16_460800 },
  1520. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1521. PCI_SUBVENDOR_ID_CHASE_PCIFAST,
  1522. PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0, 
  1523. pbn_b2_16_460800 },
  1524. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1525. PCI_SUBVENDOR_ID_CHASE_PCIRAS,
  1526. PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0, 
  1527. pbn_b2_4_460800 },
  1528. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  1529. PCI_SUBVENDOR_ID_CHASE_PCIRAS,
  1530. PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, 
  1531. pbn_b2_8_460800 },
  1532. /* Megawolf Romulus PCI Serial Card, from Mike Hudson */
  1533. /* (Exoray@isys.ca) */
  1534. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,
  1535. 0x10b5, 0x106a, 0, 0,
  1536. pbn_plx_romulus },
  1537. { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,
  1538. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1539. pbn_b1_4_115200 },
  1540. { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,
  1541. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1542. pbn_b1_2_115200 },
  1543. { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,
  1544. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1545. pbn_b1_8_115200 },
  1546. { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,
  1547. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1548. pbn_b1_8_115200 },
  1549. { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,
  1550. PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0, 
  1551. pbn_b0_4_921600 },
  1552. { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,
  1553. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1554. pbn_b0_4_115200 },
  1555. { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,
  1556. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1557. pbn_b0_bt_2_921600 },
  1558. /* Digitan DS560-558, from jimd@esoft.com */
  1559. { PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,
  1560. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1561. pbn_b1_1_115200 },
  1562. /* 3Com US Robotics 56k Voice Internal PCI model 5610 */
  1563. { PCI_VENDOR_ID_USR, 0x1008,
  1564. PCI_ANY_ID, PCI_ANY_ID, },
  1565. /* Titan Electronic cards */
  1566. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,
  1567. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1568. pbn_b0_1_921600 },
  1569. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,
  1570. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1571. pbn_b0_2_921600 },
  1572. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,
  1573. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1574. pbn_b0_4_921600 },
  1575. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,
  1576. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 
  1577. pbn_b0_4_921600 },
  1578. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,
  1579. PCI_ANY_ID, PCI_ANY_ID,
  1580. SPCI_FL_BASE1, 1, 921600 },
  1581. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,
  1582. PCI_ANY_ID, PCI_ANY_ID,
  1583. SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 2, 921600 },
  1584. /* The 400L and 800L have a custom hack in get_pci_port */
  1585. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,
  1586. PCI_ANY_ID, PCI_ANY_ID,
  1587. SPCI_FL_BASE_TABLE, 4, 921600 },
  1588. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,
  1589. PCI_ANY_ID, PCI_ANY_ID,
  1590. SPCI_FL_BASE_TABLE, 8, 921600 },
  1591. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,
  1592. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1593. pbn_siig10x_0 },
  1594. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,
  1595. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1596. pbn_siig10x_0 },
  1597. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,
  1598. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1599. pbn_siig10x_0 },
  1600. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,
  1601. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1602. pbn_siig10x_2 },
  1603. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,
  1604. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1605. pbn_siig10x_2 },
  1606. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,
  1607. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1608. pbn_siig10x_2 },
  1609. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,
  1610. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1611. pbn_siig10x_4 },
  1612. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,
  1613. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1614. pbn_siig10x_4 },
  1615. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,
  1616. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1617. pbn_siig10x_4 },
  1618. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,
  1619. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1620. pbn_siig20x_0 },
  1621. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,
  1622. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1623. pbn_siig20x_0 },
  1624. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,
  1625. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1626. pbn_siig20x_0 },
  1627. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,
  1628. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1629. pbn_siig20x_2 },
  1630. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,
  1631. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1632. pbn_siig20x_2 },
  1633. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,
  1634. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1635. pbn_siig20x_2 },
  1636. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,
  1637. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1638. pbn_siig20x_4 },
  1639. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,
  1640. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1641. pbn_siig20x_4 },
  1642. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,
  1643. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1644. pbn_siig20x_4 },
  1645. /* Computone devices submitted by Doug McNash dmcnash@computone.com */
  1646. { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
  1647. PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,
  1648. 0, 0, pbn_computone_4 },
  1649. { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
  1650. PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,
  1651. 0, 0, pbn_computone_8 },
  1652. { PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,
  1653. PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,
  1654. 0, 0, pbn_computone_6 },
  1655. { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,
  1656. PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_oxsemi },
  1657. { PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,
  1658. PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0, pbn_timedia },
  1659. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,
  1660. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1661. pbn_b0_bt_2_115200 },
  1662. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,
  1663. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1664. pbn_b0_bt_2_115200 },
  1665. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,
  1666. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1667. pbn_b0_bt_2_115200 },
  1668. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,
  1669. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1670. pbn_b0_bt_2_460800 },
  1671. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,
  1672. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1673. pbn_b0_bt_2_460800 },
  1674. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,
  1675. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1676. pbn_b0_bt_2_460800 },
  1677. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,
  1678. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1679. pbn_b0_bt_1_115200 },
  1680. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,
  1681. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1682. pbn_b0_bt_1_460800 },
  1683. /* RAStel 2 port modem, gerg@moreton.com.au */
  1684. { PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,
  1685. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1686. pbn_b2_bt_2_115200 },
  1687. /* EKF addition for i960 Boards form EKF with serial port */
  1688. { PCI_VENDOR_ID_INTEL, 0x1960,
  1689. 0xE4BF, PCI_ANY_ID, 0, 0,
  1690. pbn_intel_i960 },
  1691. /* Xircom Cardbus/Ethernet combos */
  1692. { PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,
  1693. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1694. pbn_xircom_combo },
  1695. /*
  1696.  * Untested PCI modems, sent in from various folks...
  1697.  */
  1698. /* Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de> */
  1699. { PCI_VENDOR_ID_ROCKWELL, 0x1004,
  1700. 0x1048, 0x1500, 0, 0,
  1701. pbn_b1_1_115200 },
  1702. { PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
  1703. 0xFF00, 0, 0, 0,
  1704. pbn_sgi_ioc3 },
  1705. /* HP Diva card */
  1706. { PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_SAS,
  1707. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1708. pbn_hp_diva },
  1709. { PCI_VENDOR_ID_HP, 0x1290,
  1710. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1711. pbn_b2_1_115200 },
  1712. #ifdef CONFIG_DDB5074
  1713. /*
  1714.  * NEC Vrc-5074 (Nile 4) builtin UART.
  1715.  * Conditionally compiled in since this is a motherboard device.
  1716.  */
  1717. { PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_NILE4,
  1718. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1719. pbn_nec_nile4 },
  1720. #endif
  1721. #if 0 /* PCI_DEVICE_ID_DCI_PCCOM8 ? */
  1722. { PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,
  1723. PCI_ANY_ID, PCI_ANY_ID, 0, 0,
  1724. pbn_dci_pccom8 },
  1725. #endif
  1726.        { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
  1727.  PCI_CLASS_COMMUNICATION_SERIAL << 8, 0xffff00, },
  1728.        { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
  1729.  PCI_CLASS_COMMUNICATION_MODEM << 8, 0xffff00, },
  1730.        { 0, }
  1731. };
  1732. MODULE_DEVICE_TABLE(pci, serial_pci_tbl);
  1733. static struct pci_driver serial_pci_driver = {
  1734.        name:           "serial",
  1735.        probe:          serial_init_one,
  1736.        remove:        __devexit_p(serial_remove_one),
  1737.        id_table:       serial_pci_tbl,
  1738. };
  1739. /*
  1740.  * Query PCI space for known serial boards
  1741.  * If found, add them to the PCI device space in rs_table[]
  1742.  *
  1743.  * Accept a maximum of eight boards
  1744.  *
  1745.  */
  1746. static void __devinit probe_serial_pci(void) 
  1747. {
  1748. #ifdef SERIAL_DEBUG_PCI
  1749. printk(KERN_DEBUG "Entered probe_serial_pci()n");
  1750. #endif
  1751. /* Register call PCI serial devices.  Null out
  1752.  * the driver name upon failure, as a signal
  1753.  * not to attempt to unregister the driver later
  1754.  */
  1755. if (pci_module_init (&serial_pci_driver) != 0)
  1756. serial_pci_driver.name = "";
  1757. #ifdef SERIAL_DEBUG_PCI
  1758. printk(KERN_DEBUG "Leaving probe_serial_pci() (probe finished)n");
  1759. #endif
  1760. return;
  1761. }
  1762. #endif /* ENABLE_SERIAL_PCI */
  1763. #ifdef ENABLE_SERIAL_PNP
  1764. struct pnp_board {
  1765. unsigned short vendor;
  1766. unsigned short device;
  1767. };
  1768. static struct pnp_board pnp_devices[] __devinitdata = {
  1769. /* Archtek America Corp. */
  1770. /* Archtek SmartLink Modem 3334BT Plug & Play */
  1771. { ISAPNP_VENDOR('A', 'A', 'C'), ISAPNP_DEVICE(0x000F) },
  1772. /* Anchor Datacomm BV */
  1773. /* SXPro 144 External Data Fax Modem Plug & Play */
  1774. { ISAPNP_VENDOR('A', 'D', 'C'), ISAPNP_DEVICE(0x0001) },
  1775. /* SXPro 288 External Data Fax Modem Plug & Play */
  1776. { ISAPNP_VENDOR('A', 'D', 'C'), ISAPNP_DEVICE(0x0002) },
  1777. /* Rockwell 56K ACF II Fax+Data+Voice Modem */
  1778. { ISAPNP_VENDOR('A', 'K', 'Y'), ISAPNP_DEVICE(0x1021) },
  1779. /* AZT3005 PnP SOUND DEVICE */
  1780. { ISAPNP_VENDOR('A', 'Z', 'T'), ISAPNP_DEVICE(0x4001) },
  1781. /* Best Data Products Inc. Smart One 336F PnP Modem */
  1782. { ISAPNP_VENDOR('B', 'D', 'P'), ISAPNP_DEVICE(0x3336) },
  1783. /*  Boca Research */
  1784. /* Boca Complete Ofc Communicator 14.4 Data-FAX */
  1785. { ISAPNP_VENDOR('B', 'R', 'I'), ISAPNP_DEVICE(0x0A49) },
  1786. /* Boca Research 33,600 ACF Modem */
  1787. { ISAPNP_VENDOR('B', 'R', 'I'), ISAPNP_DEVICE(0x1400) },
  1788. /* Boca 33.6 Kbps Internal FD34FSVD */
  1789. { ISAPNP_VENDOR('B', 'R', 'I'), ISAPNP_DEVICE(0x3400) },
  1790. /* Boca 33.6 Kbps Internal FD34FSVD */
  1791. { ISAPNP_VENDOR('B', 'R', 'I'), ISAPNP_DEVICE(0x0A49) },
  1792. /* Best Data Products Inc. Smart One 336F PnP Modem */
  1793. { ISAPNP_VENDOR('B', 'D', 'P'), ISAPNP_DEVICE(0x3336) },
  1794. /* Computer Peripherals Inc */
  1795. /* EuroViVa CommCenter-33.6 SP PnP */
  1796. { ISAPNP_VENDOR('C', 'P', 'I'), ISAPNP_DEVICE(0x4050) },
  1797. /* Creative Labs */
  1798. /* Creative Labs Phone Blaster 28.8 DSVD PnP Voice */
  1799. { ISAPNP_VENDOR('C', 'T', 'L'), ISAPNP_DEVICE(0x3001) },
  1800. /* Creative Labs Modem Blaster 28.8 DSVD PnP Voice */
  1801. { ISAPNP_VENDOR('C', 'T', 'L'), ISAPNP_DEVICE(0x3011) },
  1802. /* Creative */
  1803. /* Creative Modem Blaster Flash56 DI5601-1 */
  1804. { ISAPNP_VENDOR('D', 'M', 'B'), ISAPNP_DEVICE(0x1032) },
  1805. /* Creative Modem Blaster V.90 DI5660 */
  1806. { ISAPNP_VENDOR('D', 'M', 'B'), ISAPNP_DEVICE(0x2001) },
  1807. /* FUJITSU */
  1808. /* Fujitsu 33600 PnP-I2 R Plug & Play */
  1809. { ISAPNP_VENDOR('F', 'U', 'J'), ISAPNP_DEVICE(0x0202) },
  1810. /* Fujitsu FMV-FX431 Plug & Play */
  1811. { ISAPNP_VENDOR('F', 'U', 'J'), ISAPNP_DEVICE(0x0205) },
  1812. /* Fujitsu 33600 PnP-I4 R Plug & Play */
  1813. { ISAPNP_VENDOR('F', 'U', 'J'), ISAPNP_DEVICE(0x0206) },
  1814. /* Fujitsu Fax Voice 33600 PNP-I5 R Plug & Play */
  1815. { ISAPNP_VENDOR('F', 'U', 'J'), ISAPNP_DEVICE(0x0209) },
  1816. /* Archtek America Corp. */
  1817. /* Archtek SmartLink Modem 3334BT Plug & Play */
  1818. { ISAPNP_VENDOR('G', 'V', 'C'), ISAPNP_DEVICE(0x000F) },
  1819. /* Hayes */
  1820. /* Hayes Optima 288 V.34-V.FC + FAX + Voice Plug & Play */
  1821. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0x0001) },
  1822. /* Hayes Optima 336 V.34 + FAX + Voice PnP */
  1823. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0x000C) },
  1824. /* Hayes Optima 336B V.34 + FAX + Voice PnP */
  1825. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0x000D) },
  1826. /* Hayes Accura 56K Ext Fax Modem PnP */
  1827. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0x5670) },
  1828. /* Hayes Accura 56K Ext Fax Modem PnP */
  1829. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0x5674) },
  1830. /* Hayes Accura 56K Fax Modem PnP */
  1831. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0x5675) },
  1832. /* Hayes 288, V.34 + FAX */
  1833. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0xF000) },
  1834. /* Hayes Optima 288 V.34 + FAX + Voice, Plug & Play */
  1835. { ISAPNP_VENDOR('H', 'A', 'Y'), ISAPNP_DEVICE(0xF001) },
  1836. /* IBM */
  1837. /* IBM Thinkpad 701 Internal Modem Voice */
  1838. { ISAPNP_VENDOR('I', 'B', 'M'), ISAPNP_DEVICE(0x0033) },
  1839. /* Intertex */
  1840. /* Intertex 28k8 33k6 Voice EXT PnP */
  1841. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xC801) },
  1842. /* Intertex 33k6 56k Voice EXT PnP */
  1843. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xC901) },
  1844. /* Intertex 28k8 33k6 Voice SP EXT PnP */
  1845. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xD801) },
  1846. /* Intertex 33k6 56k Voice SP EXT PnP */
  1847. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xD901) },
  1848. /* Intertex 28k8 33k6 Voice SP INT PnP */
  1849. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xF401) },
  1850. /* Intertex 28k8 33k6 Voice SP EXT PnP */
  1851. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xF801) },
  1852. /* Intertex 33k6 56k Voice SP EXT PnP */
  1853. { ISAPNP_VENDOR('I', 'X', 'D'), ISAPNP_DEVICE(0xF901) },
  1854. /* Kortex International */
  1855. /* KORTEX 28800 Externe PnP */
  1856. { ISAPNP_VENDOR('K', 'O', 'R'), ISAPNP_DEVICE(0x4522) },
  1857. /* KXPro 33.6 Vocal ASVD PnP */
  1858. { ISAPNP_VENDOR('K', 'O', 'R'), ISAPNP_DEVICE(0xF661) },
  1859. /* Lasat */
  1860. /* LASAT Internet 33600 PnP */
  1861. { ISAPNP_VENDOR('L', 'A', 'S'), ISAPNP_DEVICE(0x4040) },
  1862. /* Lasat Safire 560 PnP */
  1863. { ISAPNP_VENDOR('L', 'A', 'S'), ISAPNP_DEVICE(0x4540) },
  1864. /* Lasat Safire 336  PnP */
  1865. { ISAPNP_VENDOR('L', 'A', 'S'), ISAPNP_DEVICE(0x5440) },
  1866. /* Microcom, Inc. */
  1867. /* Microcom TravelPorte FAST V.34 Plug & Play */
  1868. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x281) },
  1869. /* Microcom DeskPorte V.34 FAST or FAST+ Plug & Play */
  1870. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x0336) },
  1871. /* Microcom DeskPorte FAST EP 28.8 Plug & Play */
  1872. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x0339) },
  1873. /* Microcom DeskPorte 28.8P Plug & Play */
  1874. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x0342) },
  1875. /* Microcom DeskPorte FAST ES 28.8 Plug & Play */
  1876. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x0500) },
  1877. /* Microcom DeskPorte FAST ES 28.8 Plug & Play */
  1878. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x0501) },
  1879. /* Microcom DeskPorte 28.8S Internal Plug & Play */
  1880. { ISAPNP_VENDOR('M', 'N', 'P'), ISAPNP_DEVICE(0x0502) },
  1881. /* Motorola */
  1882. /* Motorola BitSURFR Plug & Play */
  1883. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1105) },
  1884. /* Motorola TA210 Plug & Play */
  1885. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1111) },
  1886. /* Motorola HMTA 200 (ISDN) Plug & Play */
  1887. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1114) },
  1888. /* Motorola BitSURFR Plug & Play */
  1889. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1115) },
  1890. /* Motorola Lifestyle 28.8 Internal */
  1891. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1190) },
  1892. /* Motorola V.3400 Plug & Play */
  1893. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1501) },
  1894. /* Motorola Lifestyle 28.8 V.34 Plug & Play */
  1895. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1502) },
  1896. /* Motorola Power 28.8 V.34 Plug & Play */
  1897. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1505) },
  1898. /* Motorola ModemSURFR External 28.8 Plug & Play */
  1899. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1509) },
  1900. /* Motorola Premier 33.6 Desktop Plug & Play */
  1901. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x150A) },
  1902. /* Motorola VoiceSURFR 56K External PnP */
  1903. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x150F) },
  1904. /* Motorola ModemSURFR 56K External PnP */
  1905. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1510) },
  1906. /* Motorola ModemSURFR 56K Internal PnP */
  1907. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1550) },
  1908. /* Motorola ModemSURFR Internal 28.8 Plug & Play */
  1909. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1560) },
  1910. /* Motorola Premier 33.6 Internal Plug & Play */
  1911. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x1580) },
  1912. /* Motorola OnlineSURFR 28.8 Internal Plug & Play */
  1913. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x15B0) },
  1914. /* Motorola VoiceSURFR 56K Internal PnP */
  1915. { ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x15F0) },
  1916. /* Com 1 */
  1917. /*  Deskline K56 Phone System PnP */
  1918. { ISAPNP_VENDOR('M', 'V', 'X'), ISAPNP_DEVICE(0x00A1) },
  1919. /* PC Rider K56 Phone System PnP */
  1920. { ISAPNP_VENDOR('M', 'V', 'X'), ISAPNP_DEVICE(0x00F2) },
  1921. /* Pace 56 Voice Internal Plug & Play Modem */
  1922. { ISAPNP_VENDOR('P', 'M', 'C'), ISAPNP_DEVICE(0x2430) },
  1923. /* Generic */
  1924. /* Generic standard PC COM port  */
  1925. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0x0500) },
  1926. /* Generic 16550A-compatible COM port */
  1927. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0x0501) },
  1928. /* Compaq 14400 Modem */
  1929. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC000) },
  1930. /* Compaq 2400/9600 Modem */
  1931. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC001) },
  1932. /* Dial-Up Networking Serial Cable between 2 PCs */
  1933. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC031) },
  1934. /* Dial-Up Networking Parallel Cable between 2 PCs */
  1935. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC032) },
  1936. /* Standard 9600 bps Modem */
  1937. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC100) },
  1938. /* Standard 14400 bps Modem */
  1939. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC101) },
  1940. /*  Standard 28800 bps Modem*/
  1941. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC102) },
  1942. /*  Standard Modem*/
  1943. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC103) },
  1944. /*  Standard 9600 bps Modem*/
  1945. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC104) },
  1946. /*  Standard 14400 bps Modem*/
  1947. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC105) },
  1948. /*  Standard 28800 bps Modem*/
  1949. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC106) },
  1950. /*  Standard Modem */
  1951. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC107) },
  1952. /* Standard 9600 bps Modem */
  1953. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC108) },
  1954. /* Standard 14400 bps Modem */
  1955. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC109) },
  1956. /* Standard 28800 bps Modem */
  1957. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC10A) },
  1958. /* Standard Modem */
  1959. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC10B) },
  1960. /* Standard 9600 bps Modem */
  1961. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC10C) },
  1962. /* Standard 14400 bps Modem */
  1963. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC10D) },
  1964. /* Standard 28800 bps Modem */
  1965. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC10E) },
  1966. /* Standard Modem */
  1967. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0xC10F) },
  1968. /* Standard PCMCIA Card Modem */
  1969. { ISAPNP_VENDOR('P', 'N', 'P'), ISAPNP_DEVICE(0x2000) },
  1970. /* Rockwell */
  1971. /* Modular Technology */
  1972. /* Rockwell 33.6 DPF Internal PnP */
  1973. /* Modular Technology 33.6 Internal PnP */
  1974. { ISAPNP_VENDOR('R', 'O', 'K'), ISAPNP_DEVICE(0x0030) },
  1975. /* Kortex International */
  1976. /* KORTEX 14400 Externe PnP */
  1977. { ISAPNP_VENDOR('R', 'O', 'K'), ISAPNP_DEVICE(0x0100) },
  1978. /* Viking Components, Inc */
  1979. /* Viking 28.8 INTERNAL Fax+Data+Voice PnP */
  1980. { ISAPNP_VENDOR('R', 'O', 'K'), ISAPNP_DEVICE(0x4920) },
  1981. /* Rockwell */
  1982. /* British Telecom */
  1983. /* Modular Technology */
  1984. /* Rockwell 33.6 DPF External PnP */
  1985. /* BT Prologue 33.6 External PnP */
  1986. /* Modular Technology 33.6 External PnP */
  1987. { ISAPNP_VENDOR('R', 'S', 'S'), ISAPNP_DEVICE(0x00A0) },
  1988. /* Viking 56K FAX INT */
  1989. { ISAPNP_VENDOR('R', 'S', 'S'), ISAPNP_DEVICE(0x0262) },
  1990. /* SupraExpress 28.8 Data/Fax PnP modem */
  1991. { ISAPNP_VENDOR('S', 'U', 'P'), ISAPNP_DEVICE(0x1310) },
  1992. /* SupraExpress 33.6 Data/Fax PnP modem */
  1993. { ISAPNP_VENDOR('S', 'U', 'P'), ISAPNP_DEVICE(0x1421) },
  1994. /* SupraExpress 33.6 Data/Fax PnP modem */
  1995. { ISAPNP_VENDOR('S', 'U', 'P'), ISAPNP_DEVICE(0x1590) },
  1996. /* SupraExpress 33.6 Data/Fax PnP modem */
  1997. { ISAPNP_VENDOR('S', 'U', 'P'), ISAPNP_DEVICE(0x1760) },
  1998. /* Phoebe Micro */
  1999. /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */
  2000. { ISAPNP_VENDOR('T', 'E', 'X'), ISAPNP_DEVICE(0x0011) },
  2001. /* Archtek America Corp. */
  2002. /* Archtek SmartLink Modem 3334BT Plug & Play */
  2003. { ISAPNP_VENDOR('U', 'A', 'C'), ISAPNP_DEVICE(0x000F) },
  2004. /* 3Com Corp. */
  2005. /* Gateway Telepath IIvi 33.6 */
  2006. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x0000) },
  2007. /*  Sportster Vi 14.4 PnP FAX Voicemail */
  2008. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x0004) },
  2009. /* U.S. Robotics 33.6K Voice INT PnP */
  2010. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x0006) },
  2011. /* U.S. Robotics 33.6K Voice EXT PnP */
  2012. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x0007) },
  2013. /* U.S. Robotics 33.6K Voice INT PnP */
  2014. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x2002) },
  2015. /* U.S. Robotics 56K Voice INT PnP */
  2016. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x2070) },
  2017. /* U.S. Robotics 56K Voice EXT PnP */
  2018. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x2080) },
  2019. /* U.S. Robotics 56K FAX INT */
  2020. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x3031) },
  2021. /* U.S. Robotics 56K Voice INT PnP */
  2022. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x3070) },
  2023. /* U.S. Robotics 56K Voice EXT PnP */
  2024. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x3080) },
  2025. /* U.S. Robotics 56K Voice INT PnP */
  2026. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x3090) },
  2027. /* U.S. Robotics 56K Message  */
  2028. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x9100) },
  2029. /*  U.S. Robotics 56K FAX EXT PnP*/
  2030. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x9160) },
  2031. /*  U.S. Robotics 56K FAX INT PnP*/
  2032. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x9170) },
  2033. /*  U.S. Robotics 56K Voice EXT PnP*/
  2034. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x9180) },
  2035. /*  U.S. Robotics 56K Voice INT PnP*/
  2036. { ISAPNP_VENDOR('U', 'S', 'R'), ISAPNP_DEVICE(0x9190) },
  2037. { 0, }
  2038. };
  2039. static inline void avoid_irq_share(struct pci_dev *dev)
  2040. {
  2041. int i, map = 0x1FF8;
  2042. struct serial_state *state = rs_table;
  2043. struct isapnp_irq *irq;
  2044. struct isapnp_resources *res = dev->sysdata;
  2045. for (i = 0; i < NR_PORTS; i++) {
  2046. if (state->type != PORT_UNKNOWN)
  2047. clear_bit(state->irq, &map);
  2048. state++;
  2049. }
  2050. for ( ; res; res = res->alt)
  2051. for(irq = res->irq; irq; irq = irq->next)
  2052. irq->map = map;
  2053. }
  2054. static char *modem_names[] __devinitdata = {
  2055.        "MODEM", "Modem", "modem", "FAX", "Fax", "fax",
  2056.        "56K", "56k", "K56", "33.6", "28.8", "14.4",
  2057.        "33,600", "28,800", "14,400", "33.600", "28.800", "14.400",
  2058.        "33600", "28800", "14400", "V.90", "V.34", "V.32", 0
  2059. };
  2060. static int __devinit check_name(char *name)
  2061. {
  2062.        char **tmp = modem_names;
  2063.        while (*tmp) {
  2064.                if (strstr(name, *tmp))
  2065.                        return 1;
  2066.                tmp++;
  2067.        }
  2068.        return 0;
  2069. }
  2070. static inline int check_compatible_id(struct pci_dev *dev)
  2071. {
  2072.        int i;
  2073.        for (i = 0; i < DEVICE_COUNT_COMPATIBLE; i++)
  2074.        if ((dev->vendor_compatible[i] ==
  2075.     ISAPNP_VENDOR('P', 'N', 'P')) &&
  2076.    (swab16(dev->device_compatible[i]) >= 0xc000) &&
  2077.    (swab16(dev->device_compatible[i]) <= 0xdfff))
  2078.        return 0;
  2079.        return 1;
  2080. }
  2081. /*
  2082.  * Given a complete unknown ISA PnP device, try to use some heuristics to
  2083.  * detect modems. Currently use such heuristic set:
  2084.  *     - dev->name or dev->bus->name must contain "modem" substring;
  2085.  *     - device must have only one IO region (8 byte long) with base adress
  2086.  *       0x2e8, 0x3e8, 0x2f8 or 0x3f8.
  2087.  *
  2088.  * Such detection looks very ugly, but can detect at least some of numerous
  2089.  * ISA PnP modems, alternatively we must hardcode all modems in pnp_devices[]
  2090.  * table.
  2091.  */
  2092. static int _INLINE_ serial_pnp_guess_board(struct pci_dev *dev,
  2093.   struct pci_board *board)
  2094. {
  2095.        struct isapnp_resources *res = (struct isapnp_resources *)dev->sysdata;
  2096.        struct isapnp_resources *resa;
  2097.        if (!(check_name(dev->name) || check_name(dev->bus->name)) &&
  2098.    !(check_compatible_id(dev)))
  2099.        return 1;
  2100.        if (!res || res->next)
  2101.        return 1;
  2102.        for (resa = res->alt; resa; resa = resa->alt) {
  2103.        struct isapnp_port *port;
  2104.        for (port = res->port; port; port = port->next)
  2105.        if ((port->size == 8) &&
  2106.    ((port->min == 0x2f8) ||
  2107.     (port->min == 0x3f8) ||
  2108.     (port->min == 0x2e8) ||
  2109.     (port->min == 0x3e8)))
  2110.        return 0;
  2111.        }
  2112.        return 1;
  2113. }
  2114. static void __devinit probe_serial_pnp(void)
  2115. {
  2116.        struct pci_dev *dev = NULL;
  2117.        struct pnp_board *pnp_board;
  2118.        struct pci_board board;
  2119. #ifdef SERIAL_DEBUG_PNP
  2120.        printk("Entered probe_serial_pnp()n");
  2121. #endif
  2122.        if (!isapnp_present()) {
  2123. #ifdef SERIAL_DEBUG_PNP
  2124.                printk("Leaving probe_serial_pnp() (no isapnp)n");
  2125. #endif
  2126.                return;
  2127.        }
  2128.        isapnp_for_each_dev(dev) {
  2129.        if (dev->active)
  2130.        continue;
  2131.        memset(&board, 0, sizeof(board));
  2132.        board.flags = SPCI_FL_BASE0 | SPCI_FL_PNPDEFAULT;
  2133.        board.num_ports = 1;
  2134.        board.base_baud = 115200;
  2135.        
  2136.        for (pnp_board = pnp_devices; pnp_board->vendor; pnp_board++)
  2137.        if ((dev->vendor == pnp_board->vendor) &&
  2138.    (dev->device == pnp_board->device))
  2139.        break;
  2140.        if (pnp_board->vendor) {
  2141.        /* Special case that's more efficient to hardcode */
  2142.        if ((pnp_board->vendor == ISAPNP_VENDOR('A', 'K', 'Y') &&
  2143.     pnp_board->device == ISAPNP_DEVICE(0x1021)))
  2144.        board.flags |= SPCI_FL_NO_SHIRQ;
  2145.        } else {
  2146.        if (serial_pnp_guess_board(dev, &board))
  2147.        continue;
  2148.        }
  2149.        
  2150.        if (board.flags & SPCI_FL_NO_SHIRQ)
  2151.        avoid_irq_share(dev);
  2152.        start_pci_pnp_board(dev, &board);
  2153.        }
  2154. #ifdef SERIAL_DEBUG_PNP
  2155.        printk("Leaving probe_serial_pnp() (probe finished)n");
  2156. #endif
  2157.        return;
  2158. }
  2159. #endif /* ENABLE_SERIAL_PNP */
  2160. /*
  2161.  * The serial driver boot-time initialization code!
  2162.  */
  2163. static int __init rs_init(void)
  2164. {
  2165. int i;
  2166. struct serial_state * state;
  2167. init_bh(SERIAL_BH, do_serial_bh);
  2168. init_timer(&serial_timer);
  2169. serial_timer.function = rs_timer;
  2170. mod_timer(&serial_timer, jiffies + RS_STROBE_TIME);
  2171. for (i = 0; i < NR_IRQS; i++) {
  2172. IRQ_ports[i] = 0;
  2173. IRQ_timeout[i] = 0;
  2174. #ifdef CONFIG_SERIAL_MULTIPORT
  2175. memset(&rs_multiport[i], 0,
  2176.        sizeof(struct rs_multiport_struct));
  2177. #endif
  2178. }
  2179. #ifdef CONFIG_SERIAL_CONSOLE
  2180. /*
  2181.  * The interrupt of the serial console port
  2182.  * can't be shared.
  2183.  */
  2184. if (sercons.flags & CON_CONSDEV) {
  2185. for(i = 0; i < NR_PORTS; i++)
  2186. if (i != sercons.index &&
  2187.     rs_table[i].irq == rs_table[sercons.index].irq)
  2188. rs_table[i].irq = 0;
  2189. }
  2190. #endif
  2191. show_serial_version();
  2192. /* Initialize the tty_driver structure */
  2193. memset(&serial_driver, 0, sizeof(struct tty_driver));
  2194. serial_driver.magic = TTY_DRIVER_MAGIC;
  2195. #if (LINUX_VERSION_CODE > 0x20100)
  2196. serial_driver.driver_name = "serial";
  2197. #endif
  2198. #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
  2199. serial_driver.name = "tts/%d";
  2200. #else
  2201. serial_driver.name = "ttyS";
  2202. #endif
  2203. serial_driver.major = TTY_MAJOR;
  2204. serial_driver.minor_start = 64 + SERIAL_DEV_OFFSET;
  2205. serial_driver.name_base = SERIAL_DEV_OFFSET;
  2206. serial_driver.num = NR_PORTS;
  2207. serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
  2208. serial_driver.subtype = SERIAL_TYPE_NORMAL;
  2209. serial_driver.init_termios = tty_std_termios;
  2210. serial_driver.init_termios.c_cflag =
  2211. B9600 | CS8 | CREAD | HUPCL | CLOCAL;
  2212. serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
  2213. serial_driver.refcount = &serial_refcount;
  2214. serial_driver.table = serial_table;
  2215. serial_driver.termios = serial_termios;
  2216. serial_driver.termios_locked = serial_termios_locked;
  2217. serial_driver.open = rs_open;
  2218. serial_driver.close = rs_close;
  2219. serial_driver.write = rs_write;
  2220. serial_driver.put_char = rs_put_char;
  2221. serial_driver.flush_chars = rs_flush_chars;
  2222. serial_driver.write_room = rs_write_room;
  2223. serial_driver.chars_in_buffer = rs_chars_in_buffer;
  2224. serial_driver.flush_buffer = rs_flush_buffer;
  2225. serial_driver.ioctl = rs_ioctl;
  2226. serial_driver.throttle = rs_throttle;
  2227. serial_driver.unthrottle = rs_unthrottle;
  2228. serial_driver.set_termios = rs_set_termios;
  2229. serial_driver.stop = rs_stop;
  2230. serial_driver.start = rs_start;
  2231. serial_driver.hangup = rs_hangup;
  2232. #if (LINUX_VERSION_CODE >= 131394) /* Linux 2.1.66 */
  2233. serial_driver.break_ctl = rs_break;
  2234. #endif
  2235. #if (LINUX_VERSION_CODE >= 131343)
  2236. serial_driver.send_xchar = rs_send_xchar;
  2237. serial_driver.wait_until_sent = rs_wait_until_sent;
  2238. serial_driver.read_proc = rs_read_proc;
  2239. #endif
  2240. /*
  2241.  * The callout device is just like normal device except for
  2242.  * major number and the subtype code.
  2243.  */
  2244. callout_driver = serial_driver;
  2245. #if (LINUX_VERSION_CODE > 0x2032D && defined(CONFIG_DEVFS_FS))
  2246. callout_driver.name = "cua/%d";
  2247. #else
  2248. callout_driver.name = "cua";
  2249. #endif
  2250. callout_driver.major = TTYAUX_MAJOR;
  2251. callout_driver.subtype = SERIAL_TYPE_CALLOUT;
  2252. #if (LINUX_VERSION_CODE >= 131343)
  2253. callout_driver.read_proc = 0;
  2254. callout_driver.proc_entry = 0;
  2255. #endif
  2256. if (tty_register_driver(&serial_driver))
  2257. panic("Couldn't register serial drivern");
  2258. if (tty_register_driver(&callout_driver))
  2259. panic("Couldn't register callout drivern");
  2260. for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
  2261. state->magic = SSTATE_MAGIC;
  2262. state->line = i;
  2263. state->type = PORT_UNKNOWN;
  2264. state->custom_divisor = 0;
  2265. state->close_delay = 5*HZ/10;
  2266. state->closing_wait = 30*HZ;
  2267. state->callout_termios = callout_driver.init_termios;
  2268. state->normal_termios = serial_driver.init_termios;
  2269. state->icount.cts = state->icount.dsr = 
  2270. state->icount.rng = state->icount.dcd = 0;
  2271. state->icount.rx = state->icount.tx = 0;
  2272. state->icount.frame = state->icount.parity = 0;
  2273. state->icount.overrun = state->icount.brk = 0;
  2274. state->irq = irq_cannonicalize(state->irq);
  2275. if (state->hub6)
  2276. state->io_type = SERIAL_IO_HUB6;
  2277. if (state->port && check_region(state->port,8))
  2278. continue;
  2279. #ifdef CONFIG_MCA
  2280. if ((state->flags & ASYNC_BOOT_ONLYMCA) && !MCA_bus)
  2281. continue;
  2282. #endif
  2283. if (state->flags & ASYNC_BOOT_AUTOCONF)
  2284. autoconfig(state);
  2285. }
  2286. for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
  2287. if (state->type == PORT_UNKNOWN)
  2288. continue;
  2289. if (   (state->flags & ASYNC_BOOT_AUTOCONF)
  2290.     && (state->flags & ASYNC_AUTO_IRQ)
  2291.     && (state->port != 0 || state->iomem_base != 0))
  2292. state->irq = detect_uart_irq(state);
  2293. if (state->io_type == SERIAL_IO_MEM) {
  2294. printk(KERN_INFO"ttyS%02d%s at 0x%p (irq = %d) is a %sn",
  2295.          state->line + SERIAL_DEV_OFFSET,
  2296.        (state->flags & ASYNC_FOURPORT) ? " FourPort" : "",
  2297.        state->iomem_base, state->irq,
  2298.        uart_config[state->type].name);
  2299. }
  2300. else {
  2301. printk(KERN_INFO "ttyS%02d%s at 0x%04lx (irq = %d) is a %sn",
  2302.          state->line + SERIAL_DEV_OFFSET,
  2303.        (state->flags & ASYNC_FOURPORT) ? " FourPort" : "",
  2304.        state->port, state->irq,
  2305.        uart_config[state->type].name);
  2306. }
  2307. tty_register_devfs(&serial_driver, 0,
  2308.    serial_driver.minor_start + state->line);
  2309. tty_register_devfs(&callout_driver, 0,
  2310.    callout_driver.minor_start + state->line);
  2311. }
  2312. #ifdef ENABLE_SERIAL_PCI
  2313. probe_serial_pci();
  2314. #endif
  2315. #ifdef ENABLE_SERIAL_PNP
  2316.        probe_serial_pnp();
  2317. #endif
  2318. return 0;
  2319. }
  2320. /*
  2321.  * This is for use by architectures that know their serial console 
  2322.  * attributes only at run time. Not to be invoked after rs_init().
  2323.  */
  2324. int __init early_serial_setup(struct serial_struct *req)
  2325. {
  2326. int i = req->line;
  2327. if (i >= NR_IRQS)
  2328. return(-ENOENT);
  2329. rs_table[i].magic = 0;
  2330. rs_table[i].baud_base = req->baud_base;
  2331. rs_table[i].port = req->port;
  2332. if (HIGH_BITS_OFFSET)
  2333. rs_table[i].port += (unsigned long) req->port_high << 
  2334. HIGH_BITS_OFFSET;
  2335. rs_table[i].irq = req->irq;
  2336. rs_table[i].flags = req->flags;
  2337. rs_table[i].close_delay = req->close_delay;
  2338. rs_table[i].io_type = req->io_type;
  2339. rs_table[i].hub6 = req->hub6;
  2340. rs_table[i].iomem_base = req->iomem_base;
  2341. rs_table[i].iomem_reg_shift = req->iomem_reg_shift;
  2342. rs_table[i].type = req->type;
  2343. rs_table[i].xmit_fifo_size = req->xmit_fifo_size;
  2344. rs_table[i].custom_divisor = req->custom_divisor;
  2345. rs_table[i].closing_wait = req->closing_wait;
  2346. return(0);
  2347. }
  2348. /*
  2349.  * register_serial and unregister_serial allows for 16x50 serial ports to be
  2350.  * configured at run-time, to support PCMCIA modems.
  2351.  */
  2352.  
  2353. /**
  2354.  * register_serial - configure a 16x50 serial port at runtime
  2355.  * @req: request structure
  2356.  *
  2357.  * Configure the serial port specified by the request. If the
  2358.  * port exists and is in use an error is returned. If the port
  2359.  * is not currently in the table it is added.
  2360.  *
  2361.  * The port is then probed and if neccessary the IRQ is autodetected
  2362.  * If this fails an error is returned.
  2363.  *
  2364.  * On success the port is ready to use and the line number is returned.
  2365.  */
  2366.  
  2367. int register_serial(struct serial_struct *req)
  2368. {
  2369. int i;
  2370. unsigned long flags;
  2371. struct serial_state *state;
  2372. struct async_struct *info;
  2373. unsigned long port;
  2374. port = req->port;
  2375. if (HIGH_BITS_OFFSET)
  2376. port += (unsigned long) req->port_high << HIGH_BITS_OFFSET;
  2377. save_flags(flags); cli();
  2378. for (i = 0; i < NR_PORTS; i++) {
  2379. if ((rs_table[i].port == port) &&
  2380.     (rs_table[i].iomem_base == req->iomem_base))
  2381. break;
  2382. }
  2383. #ifdef __i386__
  2384. if (i == NR_PORTS) {
  2385. for (i = 4; i < NR_PORTS; i++)
  2386. if ((rs_table[i].type == PORT_UNKNOWN) &&
  2387.     (rs_table[i].count == 0))
  2388. break;
  2389. }
  2390. #endif
  2391. if (i == NR_PORTS) {
  2392. for (i = 0; i < NR_PORTS; i++)
  2393. if ((rs_table[i].type == PORT_UNKNOWN) &&
  2394.     (rs_table[i].count == 0))
  2395. break;
  2396. }
  2397. if (i == NR_PORTS) {
  2398. restore_flags(flags);
  2399. return -1;
  2400. }
  2401. state = &rs_table[i];
  2402. if (rs_table[i].count) {
  2403. restore_flags(flags);
  2404. printk("Couldn't configure serial #%d (port=%ld,irq=%d): "
  2405.        "device already openn", i, port, req->irq);
  2406. return -1;
  2407. }
  2408. state->irq = req->irq;
  2409. state->port = port;
  2410. state->flags = req->flags;
  2411. state->io_type = req->io_type;
  2412. state->iomem_base = req->iomem_base;
  2413. state->iomem_reg_shift = req->iomem_reg_shift;
  2414. if (req->baud_base)
  2415. state->baud_base = req->baud_base;
  2416. if ((info = state->info) != NULL) {
  2417. info->port = port;
  2418. info->flags = req->flags;
  2419. info->io_type = req->io_type;
  2420. info->iomem_base = req->iomem_base;
  2421. info->iomem_reg_shift = req->iomem_reg_shift;
  2422. }
  2423. autoconfig(state);
  2424. if (state->type == PORT_UNKNOWN) {
  2425. restore_flags(flags);
  2426. printk("register_serial(): autoconfig failedn");
  2427. return -1;
  2428. }
  2429. restore_flags(flags);
  2430. if ((state->flags & ASYNC_AUTO_IRQ) && CONFIGURED_SERIAL_PORT(state))
  2431. state->irq = detect_uart_irq(state);
  2432.        printk(KERN_INFO "ttyS%02d at %s 0x%04lx (irq = %d) is a %sn",
  2433.       state->line + SERIAL_DEV_OFFSET,
  2434.       state->iomem_base ? "iomem" : "port",
  2435.       state->iomem_base ? (unsigned long)state->iomem_base :
  2436.       state->port, state->irq, uart_config[state->type].name);
  2437. tty_register_devfs(&serial_driver, 0,
  2438.    serial_driver.minor_start + state->line); 
  2439. tty_register_devfs(&callout_driver, 0,
  2440.    callout_driver.minor_start + state->line);
  2441. return state->line + SERIAL_DEV_OFFSET;
  2442. }
  2443. /**
  2444.  * unregister_serial - deconfigure a 16x50 serial port
  2445.  * @line: line to deconfigure
  2446.  *
  2447.  * The port specified is deconfigured and its resources are freed. Any
  2448.  * user of the port is disconnected as if carrier was dropped. Line is
  2449.  * the port number returned by register_serial().
  2450.  */
  2451. void unregister_serial(int line)
  2452. {
  2453. unsigned long flags;
  2454. struct serial_state *state = &rs_table[line];
  2455. save_flags(flags); cli();
  2456. if (state->info && state->info->tty)
  2457. tty_hangup(state->info->tty);
  2458. state->type = PORT_UNKNOWN;
  2459. printk(KERN_INFO "ttyS%02d unloadedn", state->line);
  2460. /* These will be hidden, because they are devices that will no longer
  2461.  * be available to the system. (ie, PCMCIA modems, once ejected)
  2462.  */
  2463. tty_unregister_devfs(&serial_driver,
  2464.      serial_driver.minor_start + state->line);
  2465. tty_unregister_devfs(&callout_driver,
  2466.      callout_driver.minor_start + state->line);
  2467. restore_flags(flags);
  2468. }
  2469. static void __exit rs_fini(void) 
  2470. {
  2471. unsigned long flags;
  2472. int e1, e2;
  2473. int i;
  2474. struct async_struct *info;
  2475. /* printk("Unloading %s: version %sn", serial_name, serial_version); */
  2476. del_timer_sync(&serial_timer);
  2477. save_flags(flags); cli();
  2478.         remove_bh(SERIAL_BH);
  2479. if ((e1 = tty_unregister_driver(&serial_driver)))
  2480. printk("serial: failed to unregister serial driver (%d)n",
  2481.        e1);
  2482. if ((e2 = tty_unregister_driver(&callout_driver)))
  2483. printk("serial: failed to unregister callout driver (%d)n", 
  2484.        e2);
  2485. restore_flags(flags);
  2486. for (i = 0; i < NR_PORTS; i++) {
  2487. if ((info = rs_table[i].info)) {
  2488. rs_table[i].info = NULL;
  2489. kfree(info);
  2490. }
  2491. if ((rs_table[i].type != PORT_UNKNOWN) && rs_table[i].port) {
  2492. #ifdef CONFIG_SERIAL_RSA
  2493. if (rs_table[i].type == PORT_RSA)
  2494. release_region(rs_table[i].port +
  2495.        UART_RSA_BASE, 16);
  2496. else
  2497. #endif
  2498. release_region(rs_table[i].port, 8);
  2499. }
  2500. #if defined(ENABLE_SERIAL_PCI) || defined(ENABLE_SERIAL_PNP)
  2501. if (rs_table[i].iomem_base)
  2502. iounmap(rs_table[i].iomem_base);
  2503. #endif
  2504. }
  2505. #if defined(ENABLE_SERIAL_PCI) || defined(ENABLE_SERIAL_PNP)
  2506. for (i=0; i < NR_PCI_BOARDS; i++) {
  2507. struct pci_board_inst *brd = &serial_pci_board[i];
  2508. if (serial_pci_board[i].dev == 0)
  2509. continue;
  2510. if (brd->board.init_fn)
  2511. (brd->board.init_fn)(brd->dev, &brd->board, 0);
  2512. if (DEACTIVATE_FUNC(brd->dev))
  2513. (DEACTIVATE_FUNC(brd->dev))(brd->dev);
  2514. }
  2515. #endif
  2516. if (tmp_buf) {
  2517. unsigned long pg = (unsigned long) tmp_buf;
  2518. tmp_buf = NULL;
  2519. free_page(pg);
  2520. }
  2521. #ifdef ENABLE_SERIAL_PCI
  2522. if (serial_pci_driver.name[0])
  2523. pci_unregister_driver (&serial_pci_driver);
  2524. #endif
  2525. }
  2526. module_init(rs_init);
  2527. module_exit(rs_fini);
  2528. MODULE_DESCRIPTION("Standard/generic (dumb) serial driver");
  2529. MODULE_AUTHOR("Theodore Ts'o <tytso@mit.edu>");
  2530. MODULE_LICENSE("GPL");
  2531. /*
  2532.  * ------------------------------------------------------------
  2533.  * Serial console driver
  2534.  * ------------------------------------------------------------
  2535.  */
  2536. #ifdef CONFIG_SERIAL_CONSOLE
  2537. #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
  2538. static struct async_struct async_sercons;
  2539. /*
  2540.  * Wait for transmitter & holding register to empty
  2541.  */
  2542. static inline void wait_for_xmitr(struct async_struct *info)
  2543. {
  2544. unsigned int status, tmout = 1000000;
  2545. do {
  2546. status = serial_in(info, UART_LSR);
  2547. if (status & UART_LSR_BI)
  2548. lsr_break_flag = UART_LSR_BI;
  2549. if (--tmout == 0)
  2550. break;
  2551. } while((status & BOTH_EMPTY) != BOTH_EMPTY);
  2552. /* Wait for flow control if necessary */
  2553. if (info->flags & ASYNC_CONS_FLOW) {
  2554. tmout = 1000000;
  2555. while (--tmout &&
  2556.        ((serial_in(info, UART_MSR) & UART_MSR_CTS) == 0));
  2557. }
  2558. }
  2559. /*
  2560.  * Print a string to the serial port trying not to disturb
  2561.  * any possible real use of the port...
  2562.  *
  2563.  * The console must be locked when we get here.
  2564.  */
  2565. static void serial_console_write(struct console *co, const char *s,
  2566. unsigned count)
  2567. {
  2568. static struct async_struct *info = &async_sercons;
  2569. int ier;
  2570. unsigned i;
  2571. /*
  2572.  * First save the IER then disable the interrupts
  2573.  */
  2574. ier = serial_in(info, UART_IER);
  2575. serial_out(info, UART_IER, 0x00);
  2576. /*
  2577.  * Now, do each character
  2578.  */
  2579. for (i = 0; i < count; i++, s++) {
  2580. wait_for_xmitr(info);
  2581. /*
  2582.  * Send the character out.
  2583.  * If a LF, also do CR...
  2584.  */
  2585. serial_out(info, UART_TX, *s);
  2586. if (*s == 10) {
  2587. wait_for_xmitr(info);
  2588. serial_out(info, UART_TX, 13);
  2589. }
  2590. }
  2591. /*
  2592.  * Finally, Wait for transmitter & holding register to empty
  2593.  *  and restore the IER
  2594.  */
  2595. wait_for_xmitr(info);
  2596. serial_out(info, UART_IER, ier);
  2597. }
  2598. static kdev_t serial_console_device(struct console *c)
  2599. {
  2600. return MKDEV(TTY_MAJOR, 64 + c->index);
  2601. }
  2602. /*
  2603.  * Setup initial baud/bits/parity/flow control. We do two things here:
  2604.  * - construct a cflag setting for the first rs_open()
  2605.  * - initialize the serial port
  2606.  * Return non-zero if we didn't find a serial port.
  2607.  */
  2608. static int __init serial_console_setup(struct console *co, char *options)
  2609. {
  2610. static struct async_struct *info;
  2611. struct serial_state *state;
  2612. unsigned cval;
  2613. int baud = 9600;
  2614. int bits = 8;
  2615. int parity = 'n';
  2616. int doflow = 0;
  2617. int cflag = CREAD | HUPCL | CLOCAL;
  2618. int quot = 0;
  2619. char *s;
  2620. if (options) {
  2621. baud = simple_strtoul(options, NULL, 10);
  2622. s = options;
  2623. while(*s >= '0' && *s <= '9')
  2624. s++;
  2625. if (*s) parity = *s++;
  2626. if (*s) bits   = *s++ - '0';
  2627. if (*s) doflow = (*s++ == 'r');
  2628. }
  2629. /*
  2630.  * Now construct a cflag setting.
  2631.  */
  2632. switch(baud) {
  2633. case 1200:
  2634. cflag |= B1200;
  2635. break;
  2636. case 2400:
  2637. cflag |= B2400;
  2638. break;
  2639. case 4800:
  2640. cflag |= B4800;
  2641. break;
  2642. case 19200:
  2643. cflag |= B19200;
  2644. break;
  2645. case 38400:
  2646. cflag |= B38400;
  2647. break;
  2648. case 57600:
  2649. cflag |= B57600;
  2650. break;
  2651. case 115200:
  2652. cflag |= B115200;
  2653. break;
  2654. case 9600:
  2655. default:
  2656. cflag |= B9600;
  2657. /*
  2658.  * Set this to a sane value to prevent a divide error
  2659.  */
  2660. baud  = 9600;
  2661. break;
  2662. }
  2663. switch(bits) {
  2664. case 7:
  2665. cflag |= CS7;
  2666. break;
  2667. default:
  2668. case 8:
  2669. cflag |= CS8;
  2670. break;
  2671. }
  2672. switch(parity) {
  2673. case 'o': case 'O':
  2674. cflag |= PARODD;
  2675. break;
  2676. case 'e': case 'E':
  2677. cflag |= PARENB;
  2678. break;
  2679. }
  2680. co->cflag = cflag;
  2681. /*
  2682.  * Divisor, bytesize and parity
  2683.  */
  2684. state = rs_table + co->index;
  2685. if (doflow)
  2686. state->flags |= ASYNC_CONS_FLOW;
  2687. info = &async_sercons;
  2688. info->magic = SERIAL_MAGIC;
  2689. info->state = state;
  2690. info->port = state->port;
  2691. info->flags = state->flags;
  2692. #ifdef CONFIG_HUB6
  2693. info->hub6 = state->hub6;
  2694. #endif
  2695. info->io_type = state->io_type;
  2696. info->iomem_base = state->iomem_base;
  2697. info->iomem_reg_shift = state->iomem_reg_shift;
  2698. quot = state->baud_base / baud;
  2699. cval = cflag & (CSIZE | CSTOPB);
  2700. #if defined(__powerpc__) || defined(__alpha__)
  2701. cval >>= 8;
  2702. #else /* !__powerpc__ && !__alpha__ */
  2703. cval >>= 4;
  2704. #endif /* !__powerpc__ && !__alpha__ */
  2705. if (cflag & PARENB)
  2706. cval |= UART_LCR_PARITY;
  2707. if (!(cflag & PARODD))
  2708. cval |= UART_LCR_EPAR;
  2709. /*
  2710.  * Disable UART interrupts, set DTR and RTS high
  2711.  * and set speed.
  2712.  */
  2713. serial_out(info, UART_LCR, cval | UART_LCR_DLAB); /* set DLAB */
  2714. serial_out(info, UART_DLL, quot & 0xff); /* LS of divisor */
  2715. serial_out(info, UART_DLM, quot >> 8); /* MS of divisor */
  2716. serial_out(info, UART_LCR, cval); /* reset DLAB */
  2717. serial_out(info, UART_IER, 0);
  2718. serial_out(info, UART_MCR, UART_MCR_DTR | UART_MCR_RTS);
  2719. /*
  2720.  * If we read 0xff from the LSR, there is no UART here.
  2721.  */
  2722. if (serial_in(info, UART_LSR) == 0xff)
  2723. return -1;
  2724. return 0;
  2725. }
  2726. static struct console sercons = {
  2727. name: "ttyS",
  2728. write: serial_console_write,
  2729. device: serial_console_device,
  2730. setup: serial_console_setup,
  2731. flags: CON_PRINTBUFFER,
  2732. index: -1,
  2733. };
  2734. /*
  2735.  * Register console.
  2736.  */
  2737. void __init serial_console_init(void)
  2738. {
  2739. register_console(&sercons);
  2740. }
  2741. #endif
  2742. /*
  2743.   Local variables:
  2744.   compile-command: "gcc -D__KERNEL__ -I../../include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe -fno-strength-reduce -march=i586 -DMODULE -DMODVERSIONS -include ../../include/linux/modversions.h   -DEXPORT_SYMTAB -c serial.c"
  2745.   End:
  2746. */