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