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()
2346 static bool mxser_overlapping_vector(struct mxser_board *brd) in mxser_overlapping_vector() argument
2349 brd->vector >= brd->ports[0].ioaddr && in mxser_overlapping_vector()
2350 brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports; in mxser_overlapping_vector()
2353 static int mxser_request_vector(struct mxser_board *brd) in mxser_request_vector() argument
2355 if (mxser_overlapping_vector(brd)) in mxser_request_vector()
2357 return request_region(brd->vector, 1, "mxser(vector)") ? 0 : -EIO; in mxser_request_vector()
2360 static void mxser_release_vector(struct mxser_board *brd) in mxser_release_vector() argument
2362 if (mxser_overlapping_vector(brd)) in mxser_release_vector()
2364 release_region(brd->vector, 1); in mxser_release_vector()
2367 static void mxser_release_ISA_res(struct mxser_board *brd) in mxser_release_ISA_res() argument
2369 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_release_ISA_res()
2370 mxser_release_vector(brd); in mxser_release_ISA_res()
2373 static int mxser_initbrd(struct mxser_board *brd) in mxser_initbrd() argument
2380 brd->ports[0].max_baud); in mxser_initbrd()
2382 for (i = 0; i < brd->info->nports; i++) { in mxser_initbrd()
2383 info = &brd->ports[i]; in mxser_initbrd()
2386 info->board = brd; in mxser_initbrd()
2391 if (brd->chip_flag != MOXA_OTHER_UART) in mxser_initbrd()
2394 info->type = brd->uart_type; in mxser_initbrd()
2411 retval = request_irq(brd->irq, mxser_interrupt, IRQF_SHARED, "mxser", in mxser_initbrd()
2412 brd); in mxser_initbrd()
2414 for (i = 0; i < brd->info->nports; i++) in mxser_initbrd()
2415 tty_port_destroy(&brd->ports[i].port); in mxser_initbrd()
2418 brd->info->name, brd->irq); in mxser_initbrd()
2424 static void mxser_board_remove(struct mxser_board *brd) in mxser_board_remove() argument
2428 for (i = 0; i < brd->info->nports; i++) { in mxser_board_remove()
2429 tty_unregister_device(mxvar_sdriver, brd->idx + i); in mxser_board_remove()
2430 tty_port_destroy(&brd->ports[i].port); in mxser_board_remove()
2432 free_irq(brd->irq, brd); in mxser_board_remove()
2435 static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) in mxser_get_ISA_conf() argument
2441 brd->chip_flag = MOXA_OTHER_UART; in mxser_get_ISA_conf()
2446 brd->info = &mxser_cards[0]; in mxser_get_ISA_conf()
2449 brd->info = &mxser_cards[1]; in mxser_get_ISA_conf()
2452 brd->info = &mxser_cards[2]; in mxser_get_ISA_conf()
2455 brd->info = &mxser_cards[5]; in mxser_get_ISA_conf()
2458 brd->info = &mxser_cards[6]; in mxser_get_ISA_conf()
2461 brd->info = &mxser_cards[7]; in mxser_get_ISA_conf()
2470 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) { in mxser_get_ISA_conf()
2475 } else if (brd->info->nports == 4) { in mxser_get_ISA_conf()
2481 } else if (brd->info->nports == 8) { in mxser_get_ISA_conf()
2493 brd->irq = ((int)(irq & 0xF000) >> 12); in mxser_get_ISA_conf()
2495 brd->ports[i].ioaddr = (int) regs[i + 1] & 0xFFF8; in mxser_get_ISA_conf()
2500 brd->vector = (int)regs[11]; /* interrupt vector */ in mxser_get_ISA_conf()
2502 brd->vector_mask = 0x00FF; in mxser_get_ISA_conf()
2504 brd->vector_mask = 0x000F; in mxser_get_ISA_conf()
2507 brd->ports[i].baud_base = 921600; in mxser_get_ISA_conf()
2508 brd->ports[i].max_baud = 921600; in mxser_get_ISA_conf()
2510 brd->ports[i].baud_base = 115200; in mxser_get_ISA_conf()
2511 brd->ports[i].max_baud = 115200; in mxser_get_ISA_conf()
2522 brd->uart_type = PORT_16550A; in mxser_get_ISA_conf()
2524 brd->uart_type = PORT_16450; in mxser_get_ISA_conf()
2525 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports, in mxser_get_ISA_conf()
2529 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2530 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2534 ret = mxser_request_vector(brd); in mxser_get_ISA_conf()
2536 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); in mxser_get_ISA_conf()
2539 brd->ports[0].ioaddr, brd->ports[0].ioaddr + in mxser_get_ISA_conf()
2540 8 * brd->info->nports - 1); in mxser_get_ISA_conf()
2543 return brd->info->nports; in mxser_get_ISA_conf()
2554 struct mxser_board *brd; in mxser_probe() local
2570 brd = &mxser_boards[i]; in mxser_probe()
2571 brd->idx = i * MXSER_PORTS_PER_BOARD; in mxser_probe()
2588 brd->info = &mxser_cards[ent->driver_data]; in mxser_probe()
2589 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2590 brd->ports[i].ioaddr = ioaddress + 8 * i; in mxser_probe()
2597 brd->vector = ioaddress; in mxser_probe()
2600 brd->irq = pdev->irq; in mxser_probe()
2602 brd->chip_flag = CheckIsMoxaMust(brd->ports[0].ioaddr); in mxser_probe()
2603 brd->uart_type = PORT_16550A; in mxser_probe()
2604 brd->vector_mask = 0; in mxser_probe()
2606 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2608 if (Gpci_uart_info[j].type == brd->chip_flag) { in mxser_probe()
2609 brd->ports[i].max_baud = in mxser_probe()
2613 if (brd->info->flags & MXSER_HIGHBAUD) in mxser_probe()
2614 brd->ports[i].max_baud = 921600; in mxser_probe()
2620 if (brd->chip_flag == MOXA_MUST_MU860_HWID) { in mxser_probe()
2621 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2623 brd->ports[i].opmode_ioaddr = ioaddress + 4; in mxser_probe()
2625 brd->ports[i].opmode_ioaddr = ioaddress + 0x0c; in mxser_probe()
2631 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2632 brd->vector_mask |= (1 << i); in mxser_probe()
2633 brd->ports[i].baud_base = 921600; in mxser_probe()
2637 retval = mxser_initbrd(brd); in mxser_probe()
2641 for (i = 0; i < brd->info->nports; i++) { in mxser_probe()
2642 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_probe()
2643 mxvar_sdriver, brd->idx + i, &pdev->dev); in mxser_probe()
2648 brd->idx + i - 1); in mxser_probe()
2653 pci_set_drvdata(pdev, brd); in mxser_probe()
2657 for (i = 0; i < brd->info->nports; i++) in mxser_probe()
2658 tty_port_destroy(&brd->ports[i].port); in mxser_probe()
2659 free_irq(brd->irq, brd); in mxser_probe()
2663 brd->info = NULL; in mxser_probe()
2677 struct mxser_board *brd = pci_get_drvdata(pdev); in mxser_remove() local
2679 mxser_board_remove(brd); in mxser_remove()
2684 brd->info = NULL; in mxser_remove()
2697 struct mxser_board *brd; in mxser_module_init() local
2732 brd = &mxser_boards[m]; in mxser_module_init()
2733 retval = mxser_get_ISA_conf(ioaddr[b], brd); in mxser_module_init()
2735 brd->info = NULL; in mxser_module_init()
2740 brd->info->name, ioaddr[b]); in mxser_module_init()
2743 if (mxser_initbrd(brd) < 0) { in mxser_module_init()
2744 mxser_release_ISA_res(brd); in mxser_module_init()
2745 brd->info = NULL; in mxser_module_init()
2749 brd->idx = m * MXSER_PORTS_PER_BOARD; in mxser_module_init()
2750 for (i = 0; i < brd->info->nports; i++) { in mxser_module_init()
2751 tty_dev = tty_port_register_device(&brd->ports[i].port, in mxser_module_init()
2752 mxvar_sdriver, brd->idx + i, NULL); in mxser_module_init()
2756 brd->idx + i - 1); in mxser_module_init()
2757 for (i = 0; i < brd->info->nports; i++) in mxser_module_init()
2758 tty_port_destroy(&brd->ports[i].port); in mxser_module_init()
2759 free_irq(brd->irq, brd); in mxser_module_init()
2760 mxser_release_ISA_res(brd); in mxser_module_init()
2761 brd->info = NULL; in mxser_module_init()
2765 if (brd->info == NULL) in mxser_module_init()