Lines Matching refs:asy
102 static void async_txint(struct asycom *asy, uchar_t lsr);
103 static void async_rxint(struct asycom *asy, uchar_t lsr);
104 static void async_msint(struct asycom *asy);
105 static int async_softint(struct asycom *asy);
115 static int asy_program(struct asycom *asy, int mode);
127 static void asycheckflowcontrol_hw(struct asycom *asy);
128 static boolean_t asycheckflowcontrol_sw(struct asycom *asy);
129 static void asy_ppsevent(struct asycom *asy, int msr);
384 struct asycom *asy; in asydetach() local
390 asy = (struct asycom *)ddi_get_soft_state(su_asycom, instance); in asydetach()
398 mutex_enter(asy->asy_excl); in asydetach()
399 mutex_enter(asy->asy_excl_hi); in asydetach()
400 if (asy->suspended) { in asydetach()
401 mutex_exit(asy->asy_excl_hi); in asydetach()
402 mutex_exit(asy->asy_excl); in asydetach()
405 asy->suspended = B_TRUE; in asydetach()
414 if (asy->asy_hwtype == ASY16C554D) in asydetach()
419 mutex_exit(asy->asy_excl_hi); in asydetach()
420 mutex_exit(asy->asy_excl); in asydetach()
430 asy->asy_hwtype == ASY82510 ? "82510" : in asydetach()
431 asy->asy_hwtype == ASY16550AF ? "16550AF" : in asydetach()
432 asy->asy_hwtype == ASY16C554D ? "16C554D" : in asydetach()
440 mutex_enter(asy->asy_excl); in asydetach()
441 mutex_enter(asy->asy_excl_hi); in asydetach()
443 if (asy->asy_hwtype == ASY16C554D) in asydetach()
446 mutex_exit(asy->asy_excl_hi); in asydetach()
447 mutex_exit(asy->asy_excl); in asydetach()
455 mutex_destroy(asy->asy_excl); in asydetach()
456 mutex_destroy(asy->asy_excl_hi); in asydetach()
457 kmem_free(asy->asy_excl, sizeof (kmutex_t)); in asydetach()
458 kmem_free(asy->asy_excl_hi, sizeof (kmutex_t)); in asydetach()
460 kstat_delete(asy->sukstat); in asydetach()
461 ddi_remove_intr(devi, 0, asy->asy_iblock); in asydetach()
462 ddi_regs_map_free(&asy->asy_handle); in asydetach()
463 ddi_remove_softintr(asy->asy_softintr_id); in asydetach()
464 mutex_destroy(asy->asy_soft_lock); in asydetach()
465 kmem_free(asy->asy_soft_lock, sizeof (kmutex_t)); in asydetach()
475 struct asycom *asy; in asyattach() local
500 asy = (struct asycom *)ddi_get_soft_state(su_asycom, instance); in asyattach()
502 if (asy == NULL) { in asyattach()
514 mutex_enter(asy->asy_excl); in asyattach()
515 mutex_enter(asy->asy_excl_hi); in asyattach()
516 if (!asy->suspended) { in asyattach()
517 mutex_exit(asy->asy_excl_hi); in asyattach()
518 mutex_exit(asy->asy_excl); in asyattach()
525 async = (struct asyncline *)asy->asy_priv; in asyattach()
527 (void) asy_program(asy, ASY_INIT); in asyattach()
528 asy->suspended = B_FALSE; in asyattach()
529 mutex_exit(asy->asy_excl_hi); in asyattach()
530 mutex_exit(asy->asy_excl); in asyattach()
542 (caddr_t *)&asy->asy_ioaddr, SU_REGOFFSET, SU_REGISTER_LEN, in asyattach()
543 &attr, &asy->asy_handle) != DDI_SUCCESS) { in asyattach()
551 printf("su attach mapped %p\n", (void *)asy->asy_ioaddr); in asyattach()
557 asy->asy_fifo_buf = 1; in asyattach()
558 asy->asy_use_fifo = FIFO_OFF; in asyattach()
569 asy->asy_baud_divisor_factor = ddi_prop_get_int(DDI_DEV_T_ANY, devi, in asyattach()
573 asy->asy_speed_cap = ddi_prop_get_int(DDI_DEV_T_ANY, devi, in asyattach()
584 asy->asy_hwtype = ASY82510; in asyattach()
590 asy->asy_trig_level = 0; in asyattach()
592 asy->asy_hwtype = ASY16550AF; in asyattach()
594 asy->asy_trig_level = 0x00; /* sets the fifo Threshold to 1 */ in asyattach()
598 (asy->asy_trig_level & 0xff)); in asyattach()
601 asy->asy_use_fifo = FIFO_ON; in asyattach()
603 asy->asy_hwtype = ASY8250; in asyattach()
605 asy->asy_trig_level = 0; in asyattach()
613 asy->asy_hwtype = ASY16C554D; in asyattach()
618 if (asy->asy_hwtype == ASY16C554D) in asyattach()
623 OUTB(DAT+DLL, (ASY9600*asy->asy_baud_divisor_factor) & 0xff); in asyattach()
624 OUTB(DAT+DLH, ((ASY9600*asy->asy_baud_divisor_factor) >> 8) & 0xff); in asyattach()
631 asy->asy_excl = (kmutex_t *) in asyattach()
633 asy->asy_excl_hi = (kmutex_t *) in asyattach()
635 asy->asy_soft_lock = (kmutex_t *) in asyattach()
637 asy->asy_unit = instance; in asyattach()
638 asy->asy_dip = devi; in asyattach()
640 if (ddi_get_iblock_cookie(devi, 0, &asy->asy_iblock) != DDI_SUCCESS) { in asyattach()
647 &asy->asy_soft_iblock) != DDI_SUCCESS) { in asyattach()
653 mutex_init(asy->asy_soft_lock, NULL, MUTEX_DRIVER, in asyattach()
654 (void *)asy->asy_soft_iblock); in asyattach()
655 mutex_init(asy->asy_excl, NULL, MUTEX_DRIVER, NULL); in asyattach()
656 mutex_init(asy->asy_excl_hi, NULL, MUTEX_DRIVER, in asyattach()
657 (void *)asy->asy_iblock); in asyattach()
663 if (ddi_add_intr(devi, 0, &(asy->asy_iblock), 0, asyintr, in asyattach()
664 (caddr_t)asy) != DDI_SUCCESS) { in asyattach()
671 if (ddi_add_softintr(devi, DDI_SOFTINT_HIGH, &(asy->asy_softintr_id), in asyattach()
672 &asy->asy_soft_iblock, 0, asysoftintr, (caddr_t)asy) in asyattach()
688 mutex_enter(asy->asy_excl); in asyattach()
689 async->async_common = asy; in asyattach()
691 mutex_exit(asy->asy_excl); in asyattach()
693 if ((asy->sukstat = kstat_create("su", instance, "serialstat", in asyattach()
695 asy->sukstat->ks_data = &asy->kstats; in asyattach()
696 kstat_named_init(&asy->kstats.ringover, "ring buffer overflow", in asyattach()
698 kstat_named_init(&asy->kstats.siloover, "silo overflow", in asyattach()
700 kstat_install(asy->sukstat); in asyattach()
710 asy->asy_unit | RSC_DEVICE, DDI_PSEUDO, NULL) in asyattach()
718 asy->asy_lom_console = 0; in asyattach()
719 asy->asy_rsc_console = 1; in asyattach()
720 asy->asy_rsc_control = 0; in asyattach()
721 asy->asy_device_type = ASY_SERIAL; in asyattach()
722 asy->asy_flags |= ASY_IGNORE_CD; in asyattach()
739 asy->asy_lom_console = 1; in asyattach()
740 asy->asy_rsc_console = 0; in asyattach()
741 asy->asy_rsc_control = 0; in asyattach()
742 asy->asy_device_type = ASY_SERIAL; in asyattach()
743 asy->asy_flags |= ASY_IGNORE_CD; in asyattach()
751 asy->asy_unit | RSC_DEVICE, DDI_PSEUDO, NULL) in asyattach()
758 asy->asy_lom_console = 0; in asyattach()
759 asy->asy_rsc_console = 0; in asyattach()
760 asy->asy_rsc_control = 1; in asyattach()
761 asy->asy_device_type = ASY_SERIAL; in asyattach()
762 asy->asy_flags |= ASY_IGNORE_CD; in asyattach()
775 asy->asy_flags |= ASY_IGNORE_CD; /* ignore cd */ in asyattach()
776 asy->asy_device_type = ASY_KEYBOARD; /* Device type */ in asyattach()
788 asy->asy_flags |= ASY_IGNORE_CD; /* ignore cd */ in asyattach()
789 asy->asy_device_type = ASY_MOUSE; in asyattach()
811 asy->asy_flags |= ASY_IGNORE_CD; /* ignore cd */ in asyattach()
813 asy->asy_flags &= ~ASY_IGNORE_CD; in asyattach()
823 asy->asy_flags |= ASY_IGNORE_CD; in asyattach()
825 asy->asy_device_type = ASY_SERIAL; in asyattach()
831 asy->polledio.cons_polledio_version = CONSPOLLEDIO_V0; in asyattach()
832 asy->polledio.cons_polledio_argument = (cons_polledio_arg_t)asy; in asyattach()
833 asy->polledio.cons_polledio_putchar = asyputchar; in asyattach()
834 asy->polledio.cons_polledio_getchar = asygetchar; in asyattach()
835 asy->polledio.cons_polledio_ischar = asyischar; in asyattach()
836 asy->polledio.cons_polledio_enter = asy_polled_enter; in asyattach()
837 asy->polledio.cons_polledio_exit = asy_polled_exit; in asyattach()
840 asy->polled_icr = 0; in asyattach()
841 asy->polled_enter = B_FALSE; in asyattach()
852 kstat_delete(asy->sukstat); in asyattach()
858 ddi_remove_softintr(asy->asy_softintr_id); in asyattach()
860 ddi_remove_intr(devi, 0, asy->asy_iblock); in asyattach()
862 mutex_destroy(asy->asy_excl_hi); in asyattach()
863 mutex_destroy(asy->asy_excl); in asyattach()
864 mutex_destroy(asy->asy_soft_lock); in asyattach()
865 kmem_free(asy->asy_excl_hi, sizeof (kmutex_t)); in asyattach()
866 kmem_free(asy->asy_excl, sizeof (kmutex_t)); in asyattach()
867 kmem_free(asy->asy_soft_lock, sizeof (kmutex_t)); in asyattach()
870 ddi_regs_map_free(&asy->asy_handle); in asyattach()
884 struct asycom *asy; in asyinfo() local
891 asy = (struct asycom *)ddi_get_soft_state(su_asycom, in asyinfo()
893 if (asy->asy_dip == NULL) in asyinfo()
896 *result = (void *) asy->asy_dip; in asyinfo()
914 struct asycom *asy; in asyopen() local
933 asy = async->async_common; in asyopen()
934 if (asy == NULL) in asyopen()
937 mutex_enter(asy->asy_excl); in asyopen()
938 asy->asy_priv = (caddr_t)async; in asyopen()
941 mutex_enter(asy->asy_excl_hi); in asyopen()
950 if (asy->asy_rsc_console || asy->asy_rsc_control) { in asyopen()
956 } else if (asy->asy_lom_console) { in asyopen()
969 mutex_exit(asy->asy_excl_hi); in asyopen()
981 mutex_enter(asy->asy_excl_hi); in asyopen()
994 (void) asy_program(asy, ASY_INIT); in asyopen()
997 mutex_exit(asy->asy_excl_hi); in asyopen()
998 mutex_exit(asy->asy_excl); in asyopen()
1001 mutex_exit(asy->asy_excl_hi); in asyopen()
1002 mutex_exit(asy->asy_excl); in asyopen()
1016 if (asy->asy_flags & ASY_IGNORE_CD) in asyopen()
1023 mutex_exit(asy->asy_excl_hi); in asyopen()
1036 asy->asy_excl) == 0) { in asyopen()
1038 mutex_exit(asy->asy_excl); in asyopen()
1045 mutex_exit(asy->asy_excl); in asyopen()
1049 if (asy->suspended) { in asyopen()
1050 mutex_exit(asy->asy_excl); in asyopen()
1051 (void) ddi_dev_is_needed(asy->asy_dip, 0, 1); in asyopen()
1052 mutex_enter(asy->asy_excl); in asyopen()
1058 mutex_exit(asy->asy_excl); in asyopen()
1069 struct asycom *asy = async->async_common; in async_progress_check() local
1077 mutex_enter(asy->asy_excl); in async_progress_check()
1078 mutex_enter(asy->asy_excl_hi); in async_progress_check()
1085 mutex_exit(asy->asy_excl_hi); in async_progress_check()
1100 mutex_exit(asy->asy_excl_hi); in async_progress_check()
1102 mutex_exit(asy->asy_excl); in async_progress_check()
1112 struct asycom *asy; in asyclose() local
1123 asy = async->async_common; in asyclose()
1126 nohupcl = ddi_getprop(DDI_DEV_T_ANY, asy->asy_dip, DDI_PROP_DONTPASS, in asyclose()
1129 mutex_enter(asy->asy_excl); in asyclose()
1136 mutex_enter(asy->asy_excl_hi); in asyclose()
1137 asy->asy_flags &= ~(ASY_PPS | ASY_PPS_EDGE); in asyclose()
1138 mutex_exit(asy->asy_excl_hi); in asyclose()
1150 mutex_enter(asy->asy_excl_hi); in asyclose()
1155 mutex_exit(asy->asy_excl_hi); in asyclose()
1202 if (cv_wait_sig(&async->async_flags_cv, asy->asy_excl) == 0) in asyclose()
1211 mutex_enter(asy->asy_excl_hi); in asyclose()
1235 mutex_exit(asy->asy_excl_hi); in asyclose()
1241 if (cv_wait_sig(&lbolt_cv, asy->asy_excl) == 0) in asyclose()
1243 mutex_enter(asy->asy_excl_hi); in asyclose()
1253 mutex_exit(asy->asy_excl_hi); in asyclose()
1267 asy->asy_flags &= ~ASY_DOINGSOFT & ~ASY_NEEDSOFT; in asyclose()
1284 if (asy->inperim == B_TRUE) { in asyclose()
1285 asy->inperim = B_FALSE; in asyclose()
1286 mutex_exit(asy->asy_excl); in asyclose()
1289 mutex_exit(asy->asy_excl); in asyclose()
1310 asy_isbusy(struct asycom *asy) in asy_isbusy() argument
1318 async = (struct asyncline *)asy->asy_priv; in asy_isbusy()
1319 ASSERT(mutex_owned(asy->asy_excl)); in asy_isbusy()
1320 ASSERT(mutex_owned(asy->asy_excl_hi)); in asy_isbusy()
1330 asy_program(struct asycom *asy, int mode) in asy_program() argument
1338 ASSERT(mutex_owned(asy->asy_excl)); in asy_program()
1339 ASSERT(mutex_owned(asy->asy_excl_hi)); in asy_program()
1345 async = (struct asyncline *)asy->asy_priv; in asy_program()
1361 (baudtable[baudrate] > asy->asy_speed_cap)) { in asy_program()
1370 (asy->asy_ocflags & (CBAUD | CBAUDEXT | in asy_program()
1398 (asy->asy_ocflags & (CBAUD | CBAUDEXT | in asy_program()
1410 if (asy->asy_hwtype == ASY16C554D) in asy_program()
1414 ocflags = asy->asy_ocflags; in asy_program()
1457 asy->asy_baud_divisor_factor) & 0xff); in asy_program()
1459 asy->asy_baud_divisor_factor) >> 8) & 0xff); in asy_program()
1469 if (asy->asy_use_fifo == FIFO_ON) { in asy_program()
1471 (asy->asy_trig_level & 0xff)); in asy_program()
1476 asy->asy_ocflags = c_flag & ~CLOCAL; in asy_program()
1492 async_msint(asy); in asy_program()
1520 struct asycom *asy = (struct asycom *)arg; in asyputchar() local
1545 struct asycom *asy = (struct asycom *)arg; in asyischar() local
1552 struct asycom *asy = (struct asycom *)arg; in asygetchar() local
1570 struct asycom *asy = (struct asycom *)arg; in asy_polled_enter() local
1572 mutex_enter(asy->asy_excl); in asy_polled_enter()
1573 mutex_enter(asy->asy_excl_hi); in asy_polled_enter()
1582 if (!asy->polled_enter) { in asy_polled_enter()
1583 asy->polled_enter = B_TRUE; in asy_polled_enter()
1584 asy->polled_icr = INB(ICR); in asy_polled_enter()
1587 if (asy->asy_hwtype == ASY16C554D) in asy_polled_enter()
1591 asy->asy_flags &= ~ASY_DOINGSOFT & ~ASY_NEEDSOFT; in asy_polled_enter()
1593 mutex_exit(asy->asy_excl_hi); in asy_polled_enter()
1594 mutex_exit(asy->asy_excl); in asy_polled_enter()
1603 struct asycom *asy = (struct asycom *)arg; in asy_polled_exit() local
1605 mutex_enter(asy->asy_excl); in asy_polled_exit()
1606 mutex_enter(asy->asy_excl_hi); in asy_polled_exit()
1609 OUTB(ICR, asy->polled_icr); in asy_polled_exit()
1615 asy->polled_enter = B_FALSE; in asy_polled_exit()
1616 mutex_exit(asy->asy_excl_hi); in asy_polled_exit()
1617 mutex_exit(asy->asy_excl); in asy_polled_exit()
1634 struct asycom *asy = (struct asycom *)argasy; in asyintr() local
1640 async = (struct asyncline *)asy->asy_priv; in asyintr()
1682 mutex_enter(asy->asy_excl_hi); in asyintr()
1683 if ((asy->asy_xmit_count > 1) || in asyintr()
1684 (asy->asy_out_of_band_xmit > 0) || in asyintr()
1685 (asy->asy_rx_count > 1)) { in asyintr()
1686 asy->asy_xmit_count = 0; in asyintr()
1687 asy->asy_out_of_band_xmit = 0; in asyintr()
1688 asy->asy_rx_count = 0; in asyintr()
1689 mutex_exit(asy->asy_excl_hi); in asyintr()
1692 mutex_exit(asy->asy_excl_hi); in asyintr()
1697 mutex_enter(asy->asy_excl_hi); in asyintr()
1698 if (asy->asy_hwtype == ASY82510) in asyintr()
1711 async_rxint(asy, lsr); in asyintr()
1715 async_txint(asy, lsr); in asyintr()
1719 async_msint(asy); in asyintr()
1722 mutex_exit(asy->asy_excl_hi); in asyintr()
1735 async_txint(struct asycom *asy, uchar_t lsr) in async_txint() argument
1737 struct asyncline *async = (struct asyncline *)asy->asy_priv; in async_txint()
1741 asycheckflowcontrol_hw(asy); in async_txint()
1750 fifo_len = asy->asy_fifo_buf; /* with FIFO buffers */ in async_txint()
1755 if (asycheckflowcontrol_sw(asy)) { in async_txint()
1776 asy->asy_xmit_count = xmit_progress; in async_txint()
1786 ASYSETSOFT(asy); in async_txint()
1801 async_rxint(struct asycom *asy, uchar_t lsr) in async_rxint() argument
1803 struct asyncline *async = (struct asyncline *)asy->asy_priv; in async_rxint()
1815 asy->asy_rx_count = 0; in async_rxint()
1819 asy->asy_rx_count++; in async_rxint()
1890 if (asy->asy_rx_count > 16) break; in async_rxint()
1908 ASYSETSOFT(asy); /* need a soft interrupt */ in async_rxint()
1916 asy_ppsevent(struct asycom *asy, int msr) in asy_ppsevent() argument
1918 if (asy->asy_flags & ASY_PPS_EDGE) { in asy_ppsevent()
1921 asy->asy_flags &= ~ASY_PPS_EDGE; in asy_ppsevent()
1942 asy->asy_flags |= ASY_PPS_EDGE; in asy_ppsevent()
1976 async_msint(struct asycom *asy) in async_msint() argument
1978 struct asyncline *async = (struct asyncline *)asy->asy_priv; in async_msint()
1982 asy->asy_cached_msr = msr; in async_msint()
2005 if (asy->asy_hwtype == ASY82510) in async_msint()
2009 if (asy->asy_flags & ASY_PPS) in async_msint()
2010 asy_ppsevent(asy, msr); in async_msint()
2013 ASYSETSOFT(asy); in async_msint()
2022 struct asycom *asy = (struct asycom *)intarg; in asysoftintr() local
2029 mutex_enter(asy->asy_soft_lock); in asysoftintr()
2034 rv = asy->asysoftpend; in asysoftintr()
2036 asy->asysoftpend = 0; in asysoftintr()
2037 mutex_exit(asy->asy_soft_lock); in asysoftintr()
2040 if (asy->asy_priv == NULL) in asysoftintr()
2042 async = (struct asyncline *)asy->asy_priv; in asysoftintr()
2043 mutex_enter(asy->asy_excl_hi); in asysoftintr()
2044 if (asy->asy_flags & ASY_NEEDSOFT) { in asysoftintr()
2045 asy->asy_flags &= ~ASY_NEEDSOFT; in asysoftintr()
2046 mutex_exit(asy->asy_excl_hi); in asysoftintr()
2047 (void) async_softint(asy); in asysoftintr()
2048 mutex_enter(asy->asy_excl_hi); in asysoftintr()
2058 mutex_exit(asy->asy_excl_hi); in asysoftintr()
2060 (void) async_softint(asy); in asysoftintr()
2070 async_softint(struct asycom *asy) in async_softint() argument
2072 struct asyncline *async = (struct asyncline *)asy->asy_priv; in async_softint()
2084 mutex_enter(asy->asy_excl); in async_softint()
2085 if (asy->asy_flags & ASY_DOINGSOFT) { in async_softint()
2086 mutex_exit(asy->asy_excl); in async_softint()
2092 mutex_exit(asy->asy_excl); in async_softint()
2094 mutex_enter(asy->asy_excl); in async_softint()
2096 mutex_enter(asy->asy_excl_hi); in async_softint()
2097 asy->asy_flags |= ASY_DOINGSOFT; in async_softint()
2100 val = asy->asy_cached_msr & 0xFF; in async_softint()
2112 mutex_exit(asy->asy_excl_hi); in async_softint()
2114 mutex_enter(asy->asy_excl_hi); in async_softint()
2116 mutex_exit(asy->asy_excl_hi); in async_softint()
2120 mutex_enter(asy->asy_excl_hi); in async_softint()
2130 mutex_exit(asy->asy_excl_hi); in async_softint()
2131 mutex_exit(asy->asy_excl); in async_softint()
2135 mutex_enter(asy->asy_excl); in async_softint()
2136 mutex_enter(asy->asy_excl_hi); in async_softint()
2171 mutex_exit(asy->asy_excl_hi); in async_softint()
2172 mutex_exit(asy->asy_excl); in async_softint()
2174 mutex_enter(asy->asy_excl); in async_softint()
2175 mutex_enter(asy->asy_excl_hi); in async_softint()
2178 mutex_exit(asy->asy_excl_hi); in async_softint()
2180 mutex_enter(asy->asy_excl_hi); in async_softint()
2199 mutex_exit(asy->asy_excl_hi); in async_softint()
2213 mutex_enter(asy->asy_excl_hi); in async_softint()
2216 } else mutex_enter(asy->asy_excl_hi); in async_softint()
2228 mutex_enter(asy->asy_excl_hi); in async_softint()
2245 mutex_enter(asy->asy_excl_hi); in async_softint()
2253 mutex_enter(asy->asy_excl_hi); in async_softint()
2267 mutex_exit(asy->asy_excl_hi); in async_softint()
2270 mutex_enter(asy->asy_excl_hi); in async_softint()
2273 mutex_enter(asy->asy_excl_hi); in async_softint()
2284 mutex_exit(asy->asy_excl_hi); in async_softint()
2285 mutex_exit(asy->asy_excl); in async_softint()
2298 mutex_enter(asy->asy_excl_hi); in async_softint()
2307 mutex_exit(asy->asy_excl_hi); in async_softint()
2325 mutex_enter(asy->asy_excl); in async_softint()
2326 mutex_enter(asy->asy_excl_hi); in async_softint()
2335 mutex_exit(asy->asy_excl_hi); in async_softint()
2336 mutex_exit(asy->asy_excl); in async_softint()
2338 mutex_enter(asy->asy_excl); in async_softint()
2339 mutex_enter(asy->asy_excl_hi); in async_softint()
2345 mutex_exit(asy->asy_excl_hi); in async_softint()
2350 asy->inperim = B_TRUE; in async_softint()
2351 mutex_exit(asy->asy_excl); in async_softint()
2353 mutex_enter(asy->asy_excl); in async_softint()
2363 if ((asy->inperim) && (async->async_flags & ASYNC_ISOPEN)) { in async_softint()
2364 mutex_exit(asy->asy_excl); in async_softint()
2366 mutex_enter(asy->asy_excl); in async_softint()
2367 asy->inperim = B_FALSE; in async_softint()
2371 mutex_enter(asy->asy_excl_hi); in async_softint()
2383 mutex_exit(asy->asy_excl_hi); in async_softint()
2384 mutex_exit(asy->asy_excl); in async_softint()
2387 mutex_enter(asy->asy_excl); in async_softint()
2388 mutex_enter(asy->asy_excl_hi); in async_softint()
2390 INC64_KSTAT(asy, siloover); in async_softint()
2397 mutex_exit(asy->asy_excl_hi); in async_softint()
2398 mutex_exit(asy->asy_excl); in async_softint()
2401 mutex_enter(asy->asy_excl); in async_softint()
2402 mutex_enter(asy->asy_excl_hi); in async_softint()
2404 INC64_KSTAT(asy, ringover); in async_softint()
2408 asy->asy_flags &= ~ASY_DOINGSOFT; in async_softint()
2409 mutex_exit(asy->asy_excl_hi); in async_softint()
2410 mutex_exit(asy->asy_excl); in async_softint()
2423 struct asycom *asy = async->async_common; in async_restart() local
2434 mutex_enter(asy->asy_excl); in async_restart()
2438 mutex_enter(asy->asy_excl_hi); in async_restart()
2456 mutex_exit(asy->asy_excl_hi); in async_restart()
2457 mutex_exit(asy->asy_excl); in async_restart()
2459 mutex_enter(asy->asy_excl); in async_restart()
2463 mutex_exit(asy->asy_excl); in async_restart()
2465 mutex_enter(asy->asy_excl); in async_restart()
2468 mutex_exit(asy->asy_excl); in async_restart()
2488 register struct asycom *asy = async->async_common; in async_nstart() local
2501 if (asy->asy_use_fifo == FIFO_ON) in async_nstart()
2502 fifo_len = asy->asy_fifo_buf; /* with FIFO buffers */ in async_nstart()
2504 ASSERT(mutex_owned(asy->asy_excl)); in async_nstart()
2505 mutex_enter(asy->asy_excl_hi); in async_nstart()
2506 asycheckflowcontrol_hw(asy); in async_nstart()
2514 mutex_exit(asy->asy_excl_hi); in async_nstart()
2528 if (asycheckflowcontrol_sw(asy)) { in async_nstart()
2529 mutex_exit(asy->asy_excl_hi); in async_nstart()
2532 mutex_exit(asy->asy_excl_hi); in async_nstart()
2574 mutex_enter(asy->asy_excl_hi); in async_nstart()
2577 mutex_exit(asy->asy_excl_hi); in async_nstart()
2603 mutex_enter(asy->asy_excl_hi); in async_nstart()
2604 if (asy_isbusy(asy)) { in async_nstart()
2610 mutex_exit(asy->asy_excl_hi); in async_nstart()
2648 mutex_exit(asy->asy_excl_hi); in async_nstart()
2649 mutex_exit(asy->asy_excl); in async_nstart()
2651 mutex_enter(asy->asy_excl); in async_nstart()
2675 mutex_exit(asy->asy_excl); in async_nstart()
2681 mutex_enter(asy->asy_excl); in async_nstart()
2689 mutex_exit(asy->asy_excl); in async_nstart()
2691 mutex_enter(asy->asy_excl); in async_nstart()
2710 mutex_enter(asy->asy_excl_hi); in async_nstart()
2725 asy->asy_out_of_band_xmit = xmit_progress; in async_nstart()
2729 mutex_exit(asy->asy_excl_hi); in async_nstart()
2738 register struct asycom *asy = async->async_common; in async_resume() local
2740 ASSERT(mutex_owned(asy->asy_excl_hi)); in async_resume()
2746 asycheckflowcontrol_hw(asy); in async_resume()
2749 if (asycheckflowcontrol_sw(asy)) { in async_resume()
2768 register struct asycom *asy = async->async_common; in async_ioctl() local
2839 mutex_enter(asy->asy_excl); in async_ioctl()
2849 if (!(asy->asy_rsc_console || asy->asy_rsc_control || in async_ioctl()
2850 asy->asy_lom_console)) { in async_ioctl()
2851 mutex_enter(asy->asy_excl_hi); in async_ioctl()
2852 error = asy_program(asy, ASY_NOINIT); in async_ioctl()
2853 mutex_exit(asy->asy_excl_hi); in async_ioctl()
2861 if (!(asy->asy_rsc_console || asy->asy_rsc_control || in async_ioctl()
2862 asy->asy_lom_console)) { in async_ioctl()
2863 mutex_enter(asy->asy_excl_hi); in async_ioctl()
2864 if (iswput && asy_isbusy(asy)) { in async_ioctl()
2879 mutex_exit(asy->asy_excl_hi); in async_ioctl()
2880 mutex_exit(asy->asy_excl); in async_ioctl()
2906 error = asy_program(asy, ASY_NOINIT); in async_ioctl()
2907 mutex_exit(asy->asy_excl_hi); in async_ioctl()
2912 mutex_enter(asy->asy_excl_hi); in async_ioctl()
2914 asy->asy_flags |= ASY_IGNORE_CD; in async_ioctl()
2916 asy->asy_flags &= ~ASY_IGNORE_CD; in async_ioctl()
2917 mutex_exit(asy->asy_excl_hi); in async_ioctl()
2939 if (asy->asy_flags & ASY_PPS) in async_ioctl()
2956 mutex_enter(asy->asy_excl_hi); in async_ioctl()
2958 asy->asy_flags |= ASY_PPS; in async_ioctl()
2960 asy->asy_flags &= ~ASY_PPS; in async_ioctl()
2962 asy->asy_flags &= ~ASY_PPS_EDGE; in async_ioctl()
2963 mutex_exit(asy->asy_excl_hi); in async_ioctl()
2983 if ((asy->asy_flags & ASY_PPS) == 0) { in async_ioctl()
2989 mutex_enter(asy->asy_excl_hi); in async_ioctl()
2991 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3023 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3058 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3059 mutex_exit(asy->asy_excl); in async_ioctl()
3061 mutex_enter(asy->asy_excl); in async_ioctl()
3062 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3073 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3081 if (iswput && asy_isbusy(asy)) { in async_ioctl()
3084 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3085 mutex_exit(asy->asy_excl); in async_ioctl()
3088 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3098 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3101 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3102 mutex_exit(asy->asy_excl); in async_ioctl()
3107 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3110 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3111 mutex_exit(asy->asy_excl); in async_ioctl()
3125 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3127 (void) asymctl(asy, in async_ioctl()
3131 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3138 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3143 if ((asy->asy_device_type == ASY_KEYBOARD) || in async_ioctl()
3144 (asy->asy_device_type == ASY_MOUSE)) { in async_ioctl()
3145 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3154 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3173 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3185 mutex_enter(asy->asy_excl_hi); in async_ioctl()
3186 *(int *)datamp->b_rptr = asymctl(asy, 0, TIOCMGET); in async_ioctl()
3187 mutex_exit(asy->asy_excl_hi); in async_ioctl()
3207 if (asy->asy_device_type == ASY_KEYBOARD) { in async_ioctl()
3223 &asy->polledio; in async_ioctl()
3234 if (asy->asy_device_type == ASY_KEYBOARD) { in async_ioctl()
3256 mutex_exit(asy->asy_excl); in async_ioctl()
3289 register struct asycom *asy; in asywput() local
3293 asy = async->async_common; in asywput()
3302 mutex_enter(asy->asy_excl); in asywput()
3304 mutex_exit(asy->asy_excl); in asywput()
3309 mutex_enter(asy->asy_excl); in asywput()
3318 mutex_enter(asy->asy_excl_hi); in asywput()
3320 mutex_exit(asy->asy_excl_hi); in asywput()
3325 mutex_exit(asy->asy_excl); in asywput()
3346 mutex_enter(asy->asy_excl); in asywput()
3348 mutex_exit(asy->asy_excl); in asywput()
3365 mutex_enter(asy->asy_excl); in asywput()
3367 mutex_exit(asy->asy_excl); in asywput()
3381 mutex_enter(asy->asy_excl); in asywput()
3386 mutex_enter(asy->asy_excl_hi); in asywput()
3391 mutex_exit(asy->asy_excl_hi); in asywput()
3394 if (asy->asy_use_fifo == FIFO_ON) { in asywput()
3396 (asy->asy_trig_level & 0xff)); in asywput()
3408 mutex_exit(asy->asy_excl); in asywput()
3413 if (asy->asy_use_fifo == FIFO_ON) { in asywput()
3415 (asy->asy_trig_level & 0xff)); in asywput()
3429 mutex_enter(asy->asy_excl); in asywput()
3431 mutex_exit(asy->asy_excl); in asywput()
3441 mutex_enter(asy->asy_excl); in asywput()
3443 mutex_exit(asy->asy_excl); in asywput()
3447 mutex_enter(asy->asy_excl); in asywput()
3450 mutex_exit(asy->asy_excl); in asywput()
3455 mutex_enter(asy->asy_excl); in asywput()
3458 mutex_exit(asy->asy_excl); in asywput()
3476 mutex_enter(asy->asy_excl); in asywput()
3487 mutex_exit(asy->asy_excl); in asywput()
3510 struct asycom *asy = async->async_common; in async_reioctl() local
3517 mutex_enter(asy->asy_excl); in async_reioctl()
3520 mutex_exit(asy->asy_excl); in async_reioctl()
3526 mutex_exit(asy->asy_excl); in async_reioctl()
3530 mutex_exit(asy->asy_excl); in async_reioctl()
3537 struct asycom *asy; in async_iocdata() local
3540 asy = async->async_common; in async_iocdata()
3548 mutex_enter(asy->asy_excl); in async_iocdata()
3555 mutex_exit(asy->asy_excl); in async_iocdata()
3560 mutex_enter(asy->asy_excl_hi); in async_iocdata()
3561 (void) asymctl(asy, dmtoasy(*(int *)mp->b_cont->b_rptr), in async_iocdata()
3563 mutex_exit(asy->asy_excl_hi); in async_iocdata()
3567 mutex_exit(asy->asy_excl); in async_iocdata()
3576 mutex_exit(asy->asy_excl); in async_iocdata()
3581 mutex_exit(asy->asy_excl); in async_iocdata()
3592 asymctl(struct asycom *asy, int bits, int how) in asymctl() argument
3596 ASSERT(mutex_owned(asy->asy_excl_hi)); in asymctl()
3597 ASSERT(mutex_owned(asy->asy_excl)); in asymctl()
3619 msr_r = asy->asy_cached_msr; in asymctl()
3684 asycheckflowcontrol_hw(struct asycom *asy) in asycheckflowcontrol_hw() argument
3689 ASSERT(mutex_owned(asy->asy_excl_hi)); in asycheckflowcontrol_hw()
3691 async = (struct asyncline *)asy->asy_priv; in asycheckflowcontrol_hw()
3704 asycheckflowcontrol_sw(struct asycom *asy) in asycheckflowcontrol_sw() argument
3710 ASSERT(mutex_owned(asy->asy_excl_hi)); in asycheckflowcontrol_sw()
3712 async = (struct asyncline *)asy->asy_priv; in asycheckflowcontrol_sw()