Lines Matching refs:brd

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