Lines Matching refs:brd
2212 struct mxser_board *brd = NULL; in mxser_interrupt() local
2221 brd = dev_id; in mxser_interrupt()
2227 if (brd == NULL) in mxser_interrupt()
2229 max = brd->info->nports; in mxser_interrupt()
2231 irqbits = inb(brd->vector) & brd->vector_mask; in mxser_interrupt()
2232 if (irqbits == brd->vector_mask) in mxser_interrupt()
2237 if (irqbits == brd->vector_mask) in mxser_interrupt()
2241 port = &brd->ports[i]; in mxser_interrupt()
2348 static bool mxser_overlapping_vector(struct mxser_board *brd) in mxser_overlapping_vector() argument
2351 brd->vector >= brd->ports[0].ioaddr && in mxser_overlapping_vector()
2352 brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports; in mxser_overlapping_vector()
2355 static int mxser_request_vector(struct mxser_board *brd) in mxser_request_vector() argument
2357 if (mxser_overlapping_vector(brd)) in mxser_request_vector()
2359 return request_region(brd->vector, 1, "mxser(vector)") ? 0 : -EIO; in mxser_request_vector()
2362 static void mxser_release_vector(struct mxser_board *brd) in mxser_release_vector() argument
2364 if (mxser_overlapping_vector(brd)) in mxser_release_vector()
2366 release_region(brd->vector, 1); in mxser_release_vector()
2369 static void mxser_release_ISA_res(struct mxser_board *brd) in mxser_release_ISA_res() argument
2371 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_release_ISA_res()
2372 mxser_release_vector(brd); in mxser_release_ISA_res()
2375 static int mxser_initbrd(struct mxser_board *brd) in mxser_initbrd() argument
2382 brd->ports[0].max_baud); in mxser_initbrd()
2384 for (i = 0; i < brd->info->nports; i++) { in mxser_initbrd()
2385 info = &brd->ports[i]; in mxser_initbrd()
2388 info->board = brd; in mxser_initbrd()
2393 if (brd->chip_flag != MOXA_OTHER_UART) in mxser_initbrd()
2396 info->type = brd->uart_type; in mxser_initbrd()
2413 retval = request_irq(brd->irq, mxser_interrupt, IRQF_SHARED, "mxser", in mxser_initbrd()
2414 brd); in mxser_initbrd()
2416 for (i = 0; i < brd->info->nports; i++) in mxser_initbrd()
2417 tty_port_destroy(&brd->ports[i].port); in mxser_initbrd()
2420 brd->info->name, brd->irq); in mxser_initbrd()
2426 static void mxser_board_remove(struct mxser_board *brd) in mxser_board_remove() argument
2430 for (i = 0; i < brd->info->nports; i++) { in mxser_board_remove()
2431 tty_unregister_device(mxvar_sdriver, brd->idx + i); in mxser_board_remove()
2432 tty_port_destroy(&brd->ports[i].port); in mxser_board_remove()
2434 free_irq(brd->irq, brd); in mxser_board_remove()
2437 static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) in mxser_get_ISA_conf() argument
2443 brd->chip_flag = MOXA_OTHER_UART; in mxser_get_ISA_conf()
2448 brd->info = &mxser_cards[0]; in mxser_get_ISA_conf()
2451 brd->info = &mxser_cards[1]; in mxser_get_ISA_conf()
2454 brd->info = &mxser_cards[2]; in mxser_get_ISA_conf()
2457 brd->info = &mxser_cards[5]; in mxser_get_ISA_conf()
2460 brd->info = &mxser_cards[6]; in mxser_get_ISA_conf()
2463 brd->info = &mxser_cards[7]; in mxser_get_ISA_conf()
2472 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) { in mxser_get_ISA_conf()
2477 } else if (brd->info->nports == 4) { in mxser_get_ISA_conf()
2483 } else if (brd->info->nports == 8) { in mxser_get_ISA_conf()
2495 brd->irq = ((int)(irq & 0xF000) >> 12); in mxser_get_ISA_conf()
2497 brd->ports[i].ioaddr = (int) regs[i + 1] & 0xFFF8; in mxser_get_ISA_conf()
2502 brd->vector = (int)regs[11]; /* interrupt vector */ in mxser_get_ISA_conf()
2504 brd->vector_mask = 0x00FF; in mxser_get_ISA_conf()
2506 brd->vector_mask = 0x000F; in mxser_get_ISA_conf()
2509 brd->ports[i].baud_base = 921600; in mxser_get_ISA_conf()
2510 brd->ports[i].max_baud = 921600; in mxser_get_ISA_conf()
2512 brd->ports[i].baud_base = 115200; in mxser_get_ISA_conf()
2513 brd->ports[i].max_baud = 115200; in mxser_get_ISA_conf()
2524 brd->uart_type = PORT_16550A; in mxser_get_ISA_conf()
2526 brd->uart_type = PORT_16450; in mxser_get_ISA_conf()
2527 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports, in mxser_get_ISA_conf()
2531 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2532 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2536 ret = mxser_request_vector(brd); in mxser_get_ISA_conf()
2538 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_get_ISA_conf()
2541 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2542 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2545 return brd->info->nports; in mxser_get_ISA_conf()
2556 struct mxser_board *brd; in mxser_probe() local
2572 brd = &mxser_boards[i]; in mxser_probe()
2573 brd->idx = i * MXSER_PORTS_PER_BOARD; in mxser_probe()
2590 brd->info = &mxser_cards[ent->driver_data]; in mxser_probe()
2591 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2592 brd->ports[i].ioaddr = ioaddress + 8 * i; in mxser_probe()
2599 brd->vector = ioaddress; in mxser_probe()
2602 brd->irq = pdev->irq; in mxser_probe()
2604 brd->chip_flag = CheckIsMoxaMust(brd->ports[0].ioaddr); in mxser_probe()
2605 brd->uart_type = PORT_16550A; in mxser_probe()
2606 brd->vector_mask = 0; in mxser_probe()
2608 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2610 if (Gpci_uart_info[j].type == brd->chip_flag) { in mxser_probe()
2611 brd->ports[i].max_baud = in mxser_probe()
2615 if (brd->info->flags & MXSER_HIGHBAUD) in mxser_probe()
2616 brd->ports[i].max_baud = 921600; in mxser_probe()
2622 if (brd->chip_flag == MOXA_MUST_MU860_HWID) { in mxser_probe()
2623 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2625 brd->ports[i].opmode_ioaddr = ioaddress + 4; in mxser_probe()
2627 brd->ports[i].opmode_ioaddr = ioaddress + 0x0c; in mxser_probe()
2633 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2634 brd->vector_mask |= (1 << i); in mxser_probe()
2635 brd->ports[i].baud_base = 921600; in mxser_probe()
2639 retval = mxser_initbrd(brd); in mxser_probe()
2643 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2644 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_probe()
2645 mxvar_sdriver, brd->idx + i, &pdev->dev); in mxser_probe()
2650 brd->idx + i - 1); in mxser_probe()
2655 pci_set_drvdata(pdev, brd); in mxser_probe()
2659 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2660 tty_port_destroy(&brd->ports[i].port); in mxser_probe()
2661 free_irq(brd->irq, brd); in mxser_probe()
2665 brd->info = NULL; in mxser_probe()
2679 struct mxser_board *brd = pci_get_drvdata(pdev); in mxser_remove() local
2681 mxser_board_remove(brd); in mxser_remove()
2686 brd->info = NULL; in mxser_remove()
2699 struct mxser_board *brd; in mxser_module_init() local
2734 brd = &mxser_boards[m]; in mxser_module_init()
2735 retval = mxser_get_ISA_conf(ioaddr[b], brd); in mxser_module_init()
2737 brd->info = NULL; in mxser_module_init()
2742 brd->info->name, ioaddr[b]); in mxser_module_init()
2745 if (mxser_initbrd(brd) < 0) { in mxser_module_init()
2746 mxser_release_ISA_res(brd); in mxser_module_init()
2747 brd->info = NULL; in mxser_module_init()
2751 brd->idx = m * MXSER_PORTS_PER_BOARD; in mxser_module_init()
2752 for (i = 0; i < brd->info->nports; i++) { in mxser_module_init()
2753 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_module_init()
2754 mxvar_sdriver, brd->idx + i, NULL); in mxser_module_init()
2758 brd->idx + i - 1); in mxser_module_init()
2759 for (i = 0; i < brd->info->nports; i++) in mxser_module_init()
2760 tty_port_destroy(&brd->ports[i].port); in mxser_module_init()
2761 free_irq(brd->irq, brd); in mxser_module_init()
2762 mxser_release_ISA_res(brd); in mxser_module_init()
2763 brd->info = NULL; in mxser_module_init()
2767 if (brd->info == NULL) in mxser_module_init()