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