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
2390 brd->ports[0].max_baud); in mxser_initbrd()
2392 for (i = 0; i < brd->info->nports; i++) { in mxser_initbrd()
2393 info = &brd->ports[i]; in mxser_initbrd()
2396 info->board = brd; in mxser_initbrd()
2401 if (brd->chip_flag != MOXA_OTHER_UART) in mxser_initbrd()
2405 info->type = brd->uart_type; in mxser_initbrd()
2422 retval = request_irq(brd->irq, mxser_interrupt, IRQF_SHARED, "mxser", in mxser_initbrd()
2423 brd); in mxser_initbrd()
2425 for (i = 0; i < brd->info->nports; i++) in mxser_initbrd()
2426 tty_port_destroy(&brd->ports[i].port); in mxser_initbrd()
2429 brd->info->name, brd->irq); in mxser_initbrd()
2435 static void mxser_board_remove(struct mxser_board *brd) in mxser_board_remove() argument
2439 for (i = 0; i < brd->info->nports; i++) { in mxser_board_remove()
2440 tty_unregister_device(mxvar_sdriver, brd->idx + i); in mxser_board_remove()
2441 tty_port_destroy(&brd->ports[i].port); in mxser_board_remove()
2443 free_irq(brd->irq, brd); in mxser_board_remove()
2446 static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) in mxser_get_ISA_conf() argument
2452 brd->chip_flag = MOXA_OTHER_UART; in mxser_get_ISA_conf()
2457 brd->info = &mxser_cards[0]; in mxser_get_ISA_conf()
2460 brd->info = &mxser_cards[1]; in mxser_get_ISA_conf()
2463 brd->info = &mxser_cards[2]; in mxser_get_ISA_conf()
2466 brd->info = &mxser_cards[5]; in mxser_get_ISA_conf()
2469 brd->info = &mxser_cards[6]; in mxser_get_ISA_conf()
2472 brd->info = &mxser_cards[7]; in mxser_get_ISA_conf()
2481 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) { in mxser_get_ISA_conf()
2486 } else if (brd->info->nports == 4) { in mxser_get_ISA_conf()
2492 } else if (brd->info->nports == 8) { in mxser_get_ISA_conf()
2504 brd->irq = ((int)(irq & 0xF000) >> 12); in mxser_get_ISA_conf()
2506 brd->ports[i].ioaddr = (int) regs[i + 1] & 0xFFF8; in mxser_get_ISA_conf()
2511 brd->vector = (int)regs[11]; /* interrupt vector */ in mxser_get_ISA_conf()
2513 brd->vector_mask = 0x00FF; in mxser_get_ISA_conf()
2515 brd->vector_mask = 0x000F; in mxser_get_ISA_conf()
2518 brd->ports[i].baud_base = 921600; in mxser_get_ISA_conf()
2519 brd->ports[i].max_baud = 921600; in mxser_get_ISA_conf()
2521 brd->ports[i].baud_base = 115200; in mxser_get_ISA_conf()
2522 brd->ports[i].max_baud = 115200; in mxser_get_ISA_conf()
2533 brd->uart_type = PORT_16550A; in mxser_get_ISA_conf()
2535 brd->uart_type = PORT_16450; in mxser_get_ISA_conf()
2536 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports, in mxser_get_ISA_conf()
2540 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2541 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2545 ret = mxser_request_vector(brd); in mxser_get_ISA_conf()
2547 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_get_ISA_conf()
2550 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2551 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2554 return brd->info->nports; in mxser_get_ISA_conf()
2565 struct mxser_board *brd; in mxser_probe() local
2581 brd = &mxser_boards[i]; in mxser_probe()
2582 brd->idx = i * MXSER_PORTS_PER_BOARD; in mxser_probe()
2599 brd->info = &mxser_cards[ent->driver_data]; in mxser_probe()
2600 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2601 brd->ports[i].ioaddr = ioaddress + 8 * i; in mxser_probe()
2608 brd->vector = ioaddress; in mxser_probe()
2611 brd->irq = pdev->irq; in mxser_probe()
2613 brd->chip_flag = CheckIsMoxaMust(brd->ports[0].ioaddr); in mxser_probe()
2614 brd->uart_type = PORT_16550A; in mxser_probe()
2615 brd->vector_mask = 0; in mxser_probe()
2617 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2619 if (Gpci_uart_info[j].type == brd->chip_flag) { in mxser_probe()
2620 brd->ports[i].max_baud = in mxser_probe()
2624 if (brd->info->flags & MXSER_HIGHBAUD) in mxser_probe()
2625 brd->ports[i].max_baud = 921600; in mxser_probe()
2631 if (brd->chip_flag == MOXA_MUST_MU860_HWID) { in mxser_probe()
2632 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2634 brd->ports[i].opmode_ioaddr = ioaddress + 4; in mxser_probe()
2636 brd->ports[i].opmode_ioaddr = ioaddress + 0x0c; in mxser_probe()
2642 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2643 brd->vector_mask |= (1 << i); in mxser_probe()
2644 brd->ports[i].baud_base = 921600; in mxser_probe()
2648 retval = mxser_initbrd(brd, pdev); in mxser_probe()
2652 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2653 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_probe()
2654 mxvar_sdriver, brd->idx + i, &pdev->dev); in mxser_probe()
2659 brd->idx + i - 1); in mxser_probe()
2664 pci_set_drvdata(pdev, brd); in mxser_probe()
2668 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2669 tty_port_destroy(&brd->ports[i].port); in mxser_probe()
2670 free_irq(brd->irq, brd); in mxser_probe()
2674 brd->info = NULL; in mxser_probe()
2688 struct mxser_board *brd = pci_get_drvdata(pdev); in mxser_remove() local
2690 mxser_board_remove(brd); in mxser_remove()
2695 brd->info = NULL; in mxser_remove()
2708 struct mxser_board *brd; in mxser_module_init() local
2743 brd = &mxser_boards[m]; in mxser_module_init()
2744 retval = mxser_get_ISA_conf(ioaddr[b], brd); in mxser_module_init()
2746 brd->info = NULL; in mxser_module_init()
2751 brd->info->name, ioaddr[b]); in mxser_module_init()
2754 if (mxser_initbrd(brd, NULL) < 0) { in mxser_module_init()
2755 mxser_release_ISA_res(brd); in mxser_module_init()
2756 brd->info = NULL; in mxser_module_init()
2760 brd->idx = m * MXSER_PORTS_PER_BOARD; in mxser_module_init()
2761 for (i = 0; i < brd->info->nports; i++) { in mxser_module_init()
2762 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_module_init()
2763 mxvar_sdriver, brd->idx + i, NULL); in mxser_module_init()
2767 brd->idx + i - 1); in mxser_module_init()
2768 for (i = 0; i < brd->info->nports; i++) in mxser_module_init()
2769 tty_port_destroy(&brd->ports[i].port); in mxser_module_init()
2770 free_irq(brd->irq, brd); in mxser_module_init()
2771 mxser_release_ISA_res(brd); in mxser_module_init()
2772 brd->info = NULL; in mxser_module_init()
2776 if (brd->info == NULL) in mxser_module_init()