Lines Matching refs:brd
2219 struct mxser_board *brd = NULL; in mxser_interrupt() local
2228 brd = dev_id; in mxser_interrupt()
2234 if (brd == NULL) in mxser_interrupt()
2236 max = brd->info->nports; in mxser_interrupt()
2238 irqbits = inb(brd->vector) & brd->vector_mask; in mxser_interrupt()
2239 if (irqbits == brd->vector_mask) in mxser_interrupt()
2244 if (irqbits == brd->vector_mask) in mxser_interrupt()
2248 port = &brd->ports[i]; in mxser_interrupt()
2355 static bool mxser_overlapping_vector(struct mxser_board *brd) in mxser_overlapping_vector() argument
2358 brd->vector >= brd->ports[0].ioaddr && in mxser_overlapping_vector()
2359 brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports; in mxser_overlapping_vector()
2362 static int mxser_request_vector(struct mxser_board *brd) in mxser_request_vector() argument
2364 if (mxser_overlapping_vector(brd)) in mxser_request_vector()
2366 return request_region(brd->vector, 1, "mxser(vector)") ? 0 : -EIO; in mxser_request_vector()
2369 static void mxser_release_vector(struct mxser_board *brd) in mxser_release_vector() argument
2371 if (mxser_overlapping_vector(brd)) in mxser_release_vector()
2373 release_region(brd->vector, 1); in mxser_release_vector()
2376 static void mxser_release_ISA_res(struct mxser_board *brd) in mxser_release_ISA_res() argument
2378 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_release_ISA_res()
2379 mxser_release_vector(brd); in mxser_release_ISA_res()
2382 static int mxser_initbrd(struct mxser_board *brd) in mxser_initbrd() argument
2389 brd->ports[0].max_baud); in mxser_initbrd()
2391 for (i = 0; i < brd->info->nports; i++) { in mxser_initbrd()
2392 info = &brd->ports[i]; in mxser_initbrd()
2395 info->board = brd; in mxser_initbrd()
2400 if (brd->chip_flag != MOXA_OTHER_UART) in mxser_initbrd()
2403 info->type = brd->uart_type; in mxser_initbrd()
2420 retval = request_irq(brd->irq, mxser_interrupt, IRQF_SHARED, "mxser", in mxser_initbrd()
2421 brd); in mxser_initbrd()
2423 for (i = 0; i < brd->info->nports; i++) in mxser_initbrd()
2424 tty_port_destroy(&brd->ports[i].port); in mxser_initbrd()
2427 brd->info->name, brd->irq); in mxser_initbrd()
2433 static void mxser_board_remove(struct mxser_board *brd) in mxser_board_remove() argument
2437 for (i = 0; i < brd->info->nports; i++) { in mxser_board_remove()
2438 tty_unregister_device(mxvar_sdriver, brd->idx + i); in mxser_board_remove()
2439 tty_port_destroy(&brd->ports[i].port); in mxser_board_remove()
2441 free_irq(brd->irq, brd); in mxser_board_remove()
2444 static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) in mxser_get_ISA_conf() argument
2450 brd->chip_flag = MOXA_OTHER_UART; in mxser_get_ISA_conf()
2455 brd->info = &mxser_cards[0]; in mxser_get_ISA_conf()
2458 brd->info = &mxser_cards[1]; in mxser_get_ISA_conf()
2461 brd->info = &mxser_cards[2]; in mxser_get_ISA_conf()
2464 brd->info = &mxser_cards[5]; in mxser_get_ISA_conf()
2467 brd->info = &mxser_cards[6]; in mxser_get_ISA_conf()
2470 brd->info = &mxser_cards[7]; in mxser_get_ISA_conf()
2479 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) { in mxser_get_ISA_conf()
2484 } else if (brd->info->nports == 4) { in mxser_get_ISA_conf()
2490 } else if (brd->info->nports == 8) { in mxser_get_ISA_conf()
2502 brd->irq = ((int)(irq & 0xF000) >> 12); in mxser_get_ISA_conf()
2504 brd->ports[i].ioaddr = (int) regs[i + 1] & 0xFFF8; in mxser_get_ISA_conf()
2509 brd->vector = (int)regs[11]; /* interrupt vector */ in mxser_get_ISA_conf()
2511 brd->vector_mask = 0x00FF; in mxser_get_ISA_conf()
2513 brd->vector_mask = 0x000F; in mxser_get_ISA_conf()
2516 brd->ports[i].baud_base = 921600; in mxser_get_ISA_conf()
2517 brd->ports[i].max_baud = 921600; in mxser_get_ISA_conf()
2519 brd->ports[i].baud_base = 115200; in mxser_get_ISA_conf()
2520 brd->ports[i].max_baud = 115200; in mxser_get_ISA_conf()
2531 brd->uart_type = PORT_16550A; in mxser_get_ISA_conf()
2533 brd->uart_type = PORT_16450; in mxser_get_ISA_conf()
2534 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports, in mxser_get_ISA_conf()
2538 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2539 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2543 ret = mxser_request_vector(brd); in mxser_get_ISA_conf()
2545 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_get_ISA_conf()
2548 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2549 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2552 return brd->info->nports; in mxser_get_ISA_conf()
2563 struct mxser_board *brd; in mxser_probe() local
2579 brd = &mxser_boards[i]; in mxser_probe()
2580 brd->idx = i * MXSER_PORTS_PER_BOARD; in mxser_probe()
2597 brd->info = &mxser_cards[ent->driver_data]; in mxser_probe()
2598 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2599 brd->ports[i].ioaddr = ioaddress + 8 * i; in mxser_probe()
2606 brd->vector = ioaddress; in mxser_probe()
2609 brd->irq = pdev->irq; in mxser_probe()
2611 brd->chip_flag = CheckIsMoxaMust(brd->ports[0].ioaddr); in mxser_probe()
2612 brd->uart_type = PORT_16550A; in mxser_probe()
2613 brd->vector_mask = 0; in mxser_probe()
2615 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2617 if (Gpci_uart_info[j].type == brd->chip_flag) { in mxser_probe()
2618 brd->ports[i].max_baud = in mxser_probe()
2622 if (brd->info->flags & MXSER_HIGHBAUD) in mxser_probe()
2623 brd->ports[i].max_baud = 921600; in mxser_probe()
2629 if (brd->chip_flag == MOXA_MUST_MU860_HWID) { in mxser_probe()
2630 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2632 brd->ports[i].opmode_ioaddr = ioaddress + 4; in mxser_probe()
2634 brd->ports[i].opmode_ioaddr = ioaddress + 0x0c; in mxser_probe()
2640 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2641 brd->vector_mask |= (1 << i); in mxser_probe()
2642 brd->ports[i].baud_base = 921600; in mxser_probe()
2646 retval = mxser_initbrd(brd); in mxser_probe()
2650 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2651 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_probe()
2652 mxvar_sdriver, brd->idx + i, &pdev->dev); in mxser_probe()
2657 brd->idx + i - 1); in mxser_probe()
2662 pci_set_drvdata(pdev, brd); in mxser_probe()
2666 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2667 tty_port_destroy(&brd->ports[i].port); in mxser_probe()
2668 free_irq(brd->irq, brd); in mxser_probe()
2672 brd->info = NULL; in mxser_probe()
2686 struct mxser_board *brd = pci_get_drvdata(pdev); in mxser_remove() local
2688 mxser_board_remove(brd); in mxser_remove()
2693 brd->info = NULL; in mxser_remove()
2706 struct mxser_board *brd; in mxser_module_init() local
2741 brd = &mxser_boards[m]; in mxser_module_init()
2742 retval = mxser_get_ISA_conf(ioaddr[b], brd); in mxser_module_init()
2744 brd->info = NULL; in mxser_module_init()
2749 brd->info->name, ioaddr[b]); in mxser_module_init()
2752 if (mxser_initbrd(brd) < 0) { in mxser_module_init()
2753 mxser_release_ISA_res(brd); in mxser_module_init()
2754 brd->info = NULL; in mxser_module_init()
2758 brd->idx = m * MXSER_PORTS_PER_BOARD; in mxser_module_init()
2759 for (i = 0; i < brd->info->nports; i++) { in mxser_module_init()
2760 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_module_init()
2761 mxvar_sdriver, brd->idx + i, NULL); in mxser_module_init()
2765 brd->idx + i - 1); in mxser_module_init()
2766 for (i = 0; i < brd->info->nports; i++) in mxser_module_init()
2767 tty_port_destroy(&brd->ports[i].port); in mxser_module_init()
2768 free_irq(brd->irq, brd); in mxser_module_init()
2769 mxser_release_ISA_res(brd); in mxser_module_init()
2770 brd->info = NULL; in mxser_module_init()
2774 if (brd->info == NULL) in mxser_module_init()