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

嵌入式Linux

开发平台:

Unix_Linux

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