Lines Matching +full:multi +full:- +full:functional
38 * clock-frequency bus clock frequency
40 * need-mult-irq need status IRQ for each pair of sockets
41 * disable-audio don't route audio signal to speaker
191 static int pcic_maxinst = -1;
279 static int pcic_wait_insert_time = 5000000; /* In micro-seconds */
280 static int pcic_debounce_time = 200000; /* In micro-seconds */
482 *result = anp->an_dip; in pcic_getinfo()
617 * This function is called when the system is single-threaded at high
628 pcicdev_t *pcic = anp->an_private; in pcic_quiesce()
631 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_quiesce()
678 pcic = anp->an_private; in pcic_attach()
683 if (pcic != NULL && pcic->pc_flags & PCF_SUSPENDED) { in pcic_attach()
684 mutex_enter(&pcic->pc_lock); in pcic_attach()
687 pcic->pc_flags &= ~PCF_SUSPENDED; in pcic_attach()
688 mutex_exit(&pcic->pc_lock); in pcic_attach()
722 pcic->dip = dip; in pcic_attach()
723 pcic_nexus->an_dip = dip; in pcic_attach()
724 pcic_nexus->an_if = &pcic_if_ops; in pcic_attach()
725 pcic_nexus->an_private = pcic; in pcic_attach()
726 pcic->pc_numpower = sizeof (pcic_power)/sizeof (pcic_power[0]); in pcic_attach()
727 pcic->pc_power = pcic_power; in pcic_attach()
730 "pci-control-reg-number", pci_control_reg_num); in pcic_attach()
732 "pci-config-reg-number", pci_config_reg_num); in pcic_attach()
737 * pcic->pc_irq is really the IPL level we want to run at in pcic_attach()
740 pcic->pc_irq = ddi_getprop(DDI_DEV_T_ANY, dip, DDI_PROP_CANSLEEP, in pcic_attach()
741 "interrupt-priorities", -1); in pcic_attach()
743 if (pcic->pc_irq == -1) { in pcic_attach()
752 pcic->pc_irq = pri; in pcic_attach()
754 pcic->pc_irq = LOCK_LEVEL + 1; in pcic_attach()
758 pcic_nexus->an_ipl = pcic->pc_irq; in pcic_attach()
770 "bus-type", (caddr_t)&bus_type[0], &len) != in pcic_attach()
786 pcic->pc_flags = PCF_PCIBUS; in pcic_attach()
788 cmn_err(CE_WARN, "!pcic%d: non-pci mode (%s) not supported, " in pcic_attach()
797 if ((pcic->bus_speed = ddi_getprop(DDI_DEV_T_ANY, ddi_get_parent(dip), in pcic_attach()
799 "clock-frequency", 0)) == 0) { in pcic_attach()
800 if (pcic->pc_flags & PCF_PCIBUS) in pcic_attach()
801 pcic->bus_speed = PCIC_PCI_DEF_SYSCLK; in pcic_attach()
803 pcic->bus_speed = PCIC_ISA_DEF_SYSCLK; in pcic_attach()
808 if (pcic->bus_speed > 1000000) in pcic_attach()
809 pcic->bus_speed /= 1000000; in pcic_attach()
810 } /* ddi_prop_op("clock-frequency") */ in pcic_attach()
812 pcic->pc_io_type = PCIC_IO_TYPE_82365SL; /* default mode */ in pcic_attach()
819 bus_type, pcic->bus_speed); in pcic_attach()
825 * on a non-PCI node. Handle that difference here. in pcic_attach()
829 if (pcic->pc_flags & PCF_PCIBUS) { in pcic_attach()
832 pcic->pc_base = 0x1000000; in pcic_attach()
833 pcic->pc_bound = (uint32_t)~0; in pcic_attach()
834 pcic->pc_iobase = 0x1000; in pcic_attach()
835 pcic->pc_iobound = 0xefff; in pcic_attach()
837 pcic->pc_base = 0x0; in pcic_attach()
838 pcic->pc_bound = (uint32_t)~0; in pcic_attach()
839 pcic->pc_iobase = 0x00000; in pcic_attach()
840 pcic->pc_iobound = 0xffff; in pcic_attach()
849 (caddr_t *)&pcic->cfgaddr, in pcic_attach()
853 &pcic->cfg_handle) != in pcic_attach()
866 "class-code", -1); in pcic_attach()
876 pcic->pc_flags |= PCF_CARDBUS; in pcic_attach()
877 pcic->pc_io_type = PCIC_IO_TYPE_YENTA; in pcic_attach()
890 (void *)pcic->cfgaddr, in pcic_attach()
891 (void *)pcic->cfg_handle, nr); in pcic_attach()
905 (caddr_t *)&pcic->ioaddr, in pcic_attach()
908 &attr, &pcic->handle) != in pcic_attach()
913 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
919 * Find out the chip type - If we're on a PCI bus, in pcic_attach()
923 * it needs a valid mapped pcic->handle to in pcic_attach()
928 ddi_regs_map_free(&pcic->handle); in pcic_attach()
929 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
952 * will be using the 82365-type control/data in pcic_attach()
956 (caddr_t *)&pcic->ioaddr, in pcic_attach()
960 &pcic->handle) != DDI_SUCCESS) { in pcic_attach()
964 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
970 * Find out the chip type - If we're on a PCI bus, in pcic_attach()
974 * it needs a valid mapped pcic->handle to in pcic_attach()
979 ddi_regs_map_free(&pcic->handle); in pcic_attach()
980 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
989 * Some PCI-PCMCIA(R2) adapters are Yenta-compliant in pcic_attach()
992 * re-map pcic->handle to be large enough to in pcic_attach()
995 switch (pcic->pc_type) { in pcic_attach()
997 ddi_regs_map_free(&pcic->handle); in pcic_attach()
1001 (caddr_t *)&pcic->ioaddr, in pcic_attach()
1005 &pcic->handle) != DDI_SUCCESS) { in pcic_attach()
1010 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
1017 } /* switch (pcic->pc_type) */ in pcic_attach()
1024 * registers on a non-PCI bus. in pcic_attach()
1029 pcic->mem_reg_num = PCIC_ISA_MEM_REG_NUM; in pcic_attach()
1030 pcic->io_reg_num = PCIC_ISA_IO_REG_NUM; in pcic_attach()
1033 (caddr_t *)&pcic->ioaddr, in pcic_attach()
1037 &pcic->handle) != DDI_SUCCESS) { in pcic_attach()
1046 /* ISA bus is limited to 24-bits, but not first 640K */ in pcic_attach()
1047 pcic->pc_base = 0xd0000; in pcic_attach()
1048 pcic->pc_bound = (uint32_t)~0; in pcic_attach()
1049 pcic->pc_iobase = 0x1000; in pcic_attach()
1050 pcic->pc_iobound = 0xefff; in pcic_attach()
1056 pcic->pc_flags, pcic->pc_type); in pcic_attach()
1062 * non-PCI case, find out the chip type. in pcic_attach()
1064 if (pcic->pc_flags & PCF_PCIBUS) { in pcic_attach()
1069 iline = cardbus_validate_iline(dip, pcic->cfg_handle); in pcic_attach()
1073 switch (pcic->pc_type) { in pcic_attach()
1076 cfg = ddi_get8(pcic->cfg_handle, in pcic_attach()
1077 pcic->cfgaddr + PCIC_82092_PCICON); in pcic_attach()
1080 pcic->pc_numsockets = 4; in pcic_attach()
1081 pcic->pc_type = PCIC_INTEL_i82092; in pcic_attach()
1083 pcic->pc_intr_mode = in pcic_attach()
1086 pcic->pc_intr_mode = PCIC_INTR_MODE_ISA; in pcic_attach()
1091 ddi_get_instance(pcic->dip), cfg); in pcic_attach()
1092 pcic->pc_numsockets = 0; in pcic_attach()
1097 pcic->pc_intr_mode = PCIC_INTR_MODE_PCI_1; in pcic_attach()
1103 pcic->pc_intr_mode = PCIC_INTR_MODE_ISA; in pcic_attach()
1111 pcic->pc_intr_mode = PCIC_INTR_MODE_PCI_1; in pcic_attach()
1113 pcic->pc_numsockets = 2; in pcic_attach()
1114 pcic->pc_flags |= PCF_IO_REMAP; in pcic_attach()
1118 pcic->pc_flags &= ~PCF_CARDBUS; in pcic_attach()
1121 pcic->pc_flags |= PCF_IO_REMAP; in pcic_attach()
1124 pcic->pc_flags |= PCF_DMA | PCF_ZV; in pcic_attach()
1126 pcic->pc_flags |= (PCF_VPPX|PCF_33VCAP); in pcic_attach()
1127 pcic->pc_flags |= pcic_use_cbpwrctl; in pcic_attach()
1129 pcic->pc_numsockets = 1; /* one per function */ in pcic_attach()
1132 pcic->pc_intr_mode = PCIC_INTR_MODE_PCI_1; in pcic_attach()
1134 cfg = ddi_get8(pcic->cfg_handle, in pcic_attach()
1135 (pcic->cfgaddr + PCIC_BRIDGE_CTL_REG)); in pcic_attach()
1137 ddi_put8(pcic->cfg_handle, (pcic->cfgaddr + in pcic_attach()
1141 pcic->pc_intr_mode = PCIC_INTR_MODE_ISA; in pcic_attach()
1142 pcic->pc_io_type = PCIC_IOTYPE_YENTA; in pcic_attach()
1149 * For the non-PCI bus case: in pcic_attach()
1162 pcic->pc_type = PCIC_I82365SL; in pcic_attach()
1163 pcic->pc_chipname = PCIC_TYPE_I82365SL; in pcic_attach()
1171 switch (pcic->pc_type) { in pcic_attach()
1173 pcic->pc_flags |= PCF_DMA; in pcic_attach()
1222 j = pcic->pc_numsockets++; in pcic_attach()
1223 pcic->pc_sockets[j].pcs_flags = 0; in pcic_attach()
1224 pcic->pc_sockets[j].pcs_io = pcic->ioaddr; in pcic_attach()
1225 pcic->pc_sockets[j].pcs_socket = i; in pcic_attach()
1236 pcic->pc_numsockets); in pcic_attach()
1238 if (pcic->pc_numsockets == 0) { in pcic_attach()
1239 ddi_regs_map_free(&pcic->handle); in pcic_attach()
1252 if (pcic->pc_numsockets > 2) { in pcic_attach()
1253 int count = pcic->pc_numsockets / 4; in pcic_attach()
1271 pcic->pc_numsockets -= 2; in pcic_attach()
1279 DDI_PROP_DONTPASS, "need-mult-irq", in pcic_attach()
1281 pcic->pc_flags |= PCF_MULT_IRQ; in pcic_attach()
1293 typename = pcic->pc_chipname; in pcic_attach()
1310 while (nregs--) { in pcic_attach()
1320 (pcic->pc_io_type == PCIC_IO_TYPE_82365SL ? in pcic_attach()
1325 (void *)pcic->ioaddr); in pcic_attach()
1339 cv_init(&pcic->pm_cv, NULL, CV_DRIVER, NULL); in pcic_attach()
1342 "disable-audio", 0)) in pcic_attach()
1343 pcic->pc_flags |= PCF_AUDIO; in pcic_attach()
1346 "disable-cardbus", 0)) in pcic_attach()
1347 pcic->pc_flags &= ~PCF_CARDBUS; in pcic_attach()
1356 pcic->pc_sockets[i].pcs_smi = 0; in pcic_attach()
1357 pcic->pc_sockets[i].pcs_debounce_id = 0; in pcic_attach()
1358 pcic->pc_sockets[i].pcs_pcic = pcic; in pcic_attach()
1360 pcic->pc_lastreg = -1; /* just to make sure we are in sync */ in pcic_attach()
1365 switch (pcic->pc_intr_mode) { in pcic_attach()
1369 * On a non-PCI bus, we just use whatever SMI IRQ level was in pcic_attach()
1373 for (xx = 15, smi = 0; xx >= 0; xx--) { in pcic_attach()
1386 for (i = 0; i < pcic->pc_numsockets; i++) in pcic_attach()
1387 pcic->pc_sockets[i].pcs_smi = smi; in pcic_attach()
1389 if (pcic->pc_flags & PCF_MULT_IRQ) { in pcic_attach()
1390 for (i = 2; i < pcic->pc_numsockets; i++) { in pcic_attach()
1393 for (xx = 15, smi = 0; xx >= 0; xx--) { in pcic_attach()
1405 pcic->pc_sockets[i].pcs_smi = smi; in pcic_attach()
1408 pcic->pc_intr_htblp = kmem_alloc(pcic->pc_numsockets * in pcic_attach()
1410 for (i = 0, irqlevel = -1; i < pcic->pc_numsockets; i++) { in pcic_attach()
1414 if (irqlevel == pcic->pc_sockets[i].pcs_smi) in pcic_attach()
1417 irqlevel = pcic->pc_sockets[i].pcs_smi; in pcic_attach()
1430 if (ddi_intr_alloc(dip, &pcic->pc_intr_htblp[i], in pcic_attach()
1453 ispecp = (struct intrspec *)&pdp->par_intr[0]; in pcic_attach()
1454 ispecp->intrspec_vec = irqlevel; in pcic_attach()
1455 ispecp->intrspec_pri = pcic->pc_irq; in pcic_attach()
1458 pcic->pc_pri = (ddi_iblock_cookie_t) in pcic_attach()
1459 (uintptr_t)pcic->pc_irq; in pcic_attach()
1460 pcic->pc_dcookie.idev_priority = in pcic_attach()
1461 (uintptr_t)pcic->pc_pri; in pcic_attach()
1462 pcic->pc_dcookie.idev_vector = (ushort_t)irqlevel; in pcic_attach()
1464 (void) ddi_intr_set_pri(pcic->pc_intr_htblp[i], in pcic_attach()
1465 pcic->pc_irq); in pcic_attach()
1468 mutex_init(&pcic->intr_lock, NULL, MUTEX_DRIVER, in pcic_attach()
1469 DDI_INTR_PRI(pcic->pc_irq)); in pcic_attach()
1470 mutex_init(&pcic->pc_lock, NULL, MUTEX_DRIVER, in pcic_attach()
1474 if (ddi_intr_add_handler(pcic->pc_intr_htblp[i], in pcic_attach()
1482 if (ddi_intr_enable(pcic->pc_intr_htblp[i])) { in pcic_attach()
1485 for (j = i; j < 0; j--) in pcic_attach()
1487 pcic->pc_intr_htblp[j]); in pcic_attach()
1499 pcic->pc_pci_intr_hdlp = kmem_alloc(sizeof (ddi_intr_handle_t), in pcic_attach()
1501 if (ddi_intr_alloc(dip, pcic->pc_pci_intr_hdlp, in pcic_attach()
1506 if (ddi_intr_get_pri(pcic->pc_pci_intr_hdlp[0], in pcic_attach()
1508 (void) ddi_intr_free(pcic->pc_pci_intr_hdlp[0]); in pcic_attach()
1512 pcic->pc_pri = (void *)(uintptr_t)pri; in pcic_attach()
1513 mutex_init(&pcic->intr_lock, NULL, MUTEX_DRIVER, pcic->pc_pri); in pcic_attach()
1514 mutex_init(&pcic->pc_lock, NULL, MUTEX_DRIVER, NULL); in pcic_attach()
1516 if (ddi_intr_add_handler(pcic->pc_pci_intr_hdlp[0], in pcic_attach()
1520 if (ddi_intr_enable(pcic->pc_pci_intr_hdlp[0])) { in pcic_attach()
1522 pcic->pc_pci_intr_hdlp[0]); in pcic_attach()
1527 pcic->pc_dcookie.idev_priority = (ushort_t)pri; in pcic_attach()
1530 for (i = 0; i < pcic->pc_numsockets; i++) in pcic_attach()
1531 pcic->pc_sockets[i].pcs_smi = 0xF; /* any valid */ in pcic_attach()
1538 mutex_enter(&pcic->pc_lock); in pcic_attach()
1540 pcic->pc_flags |= PCF_ATTACHED; in pcic_attach()
1543 for (j = 0; j < pcic->pc_numsockets; j++) in pcic_attach()
1545 &pcic->pc_sockets[j].pcs_cd_softint_hdl, in pcic_attach()
1547 (caddr_t)&pcic->pc_sockets[j]) != DDI_SUCCESS) in pcic_attach()
1553 pcic->pc_numsockets); in pcic_attach()
1556 pcic_nexus->an_iblock = &pcic->pc_pri; in pcic_attach()
1557 pcic_nexus->an_idev = &pcic->pc_dcookie; in pcic_attach()
1559 mutex_exit(&pcic->pc_lock); in pcic_attach()
1570 * Give the Cardbus misc module a chance to do it's per-adapter in pcic_attach()
1574 if (pcic->pc_flags & PCF_CARDBUS) in pcic_attach()
1583 * Give the PCMCIA misc module a chance to do it's per-adapter in pcic_attach()
1589 if (pcic_maxinst == -1) { in pcic_attach()
1595 v.v_maxsyspri - 2); in pcic_attach()
1602 for (j = 0; j < pcic->pc_numsockets; j++) { in pcic_attach()
1603 pcic->pc_sockets[j].pcs_debounce_id = in pcic_attach()
1604 pcic_add_debqueue(&pcic->pc_sockets[j], in pcic_attach()
1611 mutex_destroy(&pcic->intr_lock); in pcic_attach()
1612 mutex_destroy(&pcic->pc_lock); in pcic_attach()
1613 for (j = i; j < 0; j--) in pcic_attach()
1614 (void) ddi_intr_free(pcic->pc_intr_htblp[j]); in pcic_attach()
1616 (void) pcmcia_return_intr(dip, pcic->pc_sockets[i].pcs_smi); in pcic_attach()
1617 ddi_regs_map_free(&pcic->handle); in pcic_attach()
1618 if (pcic->pc_flags & PCF_PCIBUS) in pcic_attach()
1619 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
1620 kmem_free(pcic->pc_intr_htblp, pcic->pc_numsockets * in pcic_attach()
1626 mutex_destroy(&pcic->intr_lock); in pcic_attach()
1627 mutex_destroy(&pcic->pc_lock); in pcic_attach()
1628 (void) ddi_intr_free(pcic->pc_pci_intr_hdlp[0]); in pcic_attach()
1630 ddi_regs_map_free(&pcic->handle); in pcic_attach()
1631 if (pcic->pc_flags & PCF_PCIBUS) in pcic_attach()
1632 ddi_regs_map_free(&pcic->cfg_handle); in pcic_attach()
1633 kmem_free(pcic->pc_pci_intr_hdlp, sizeof (ddi_intr_handle_t)); in pcic_attach()
1646 pcicdev_t *pcic = anp->an_private; in pcic_detach()
1652 if (pcic->pc_callback != NULL) in pcic_detach()
1656 if (pcic->pc_pmtimer) in pcic_detach()
1657 (void) untimeout(pcic->pc_pmtimer); in pcic_detach()
1660 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_detach()
1661 if (pcic->pc_sockets[i].pcs_debounce_id) in pcic_detach()
1663 pcic->pc_sockets[i].pcs_debounce_id); in pcic_detach()
1664 pcic->pc_sockets[i].pcs_debounce_id = 0; in pcic_detach()
1672 (void) ddi_intr_disable(pcic->pc_pci_intr_hdlp[0]); in pcic_detach()
1673 (void) ddi_intr_remove_handler(pcic->pc_pci_intr_hdlp[0]); in pcic_detach()
1674 (void) ddi_intr_free(pcic->pc_pci_intr_hdlp[0]); in pcic_detach()
1675 kmem_free(pcic->pc_pci_intr_hdlp, sizeof (ddi_intr_handle_t)); in pcic_detach()
1676 pcic->pc_flags = 0; in pcic_detach()
1677 mutex_destroy(&pcic->pc_lock); in pcic_detach()
1678 mutex_destroy(&pcic->intr_lock); in pcic_detach()
1679 cv_destroy(&pcic->pm_cv); in pcic_detach()
1680 if (pcic->pc_flags & PCF_PCIBUS) in pcic_detach()
1681 ddi_regs_map_free(&pcic->cfg_handle); in pcic_detach()
1682 if (pcic->handle) in pcic_detach()
1683 ddi_regs_map_free(&pcic->handle); in pcic_detach()
1695 mutex_enter(&pcic->pc_lock); in pcic_detach()
1697 if (pcic->pc_flags & PCF_CARDBUS) { in pcic_detach()
1698 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_detach()
1699 if ((pcic->pc_sockets[i].pcs_flags & in pcic_detach()
1704 pcic->pc_sockets[i].pcs_socket); in pcic_detach()
1712 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_detach()
1713 if (pcic->pc_sockets[i].pcs_debounce_id) in pcic_detach()
1715 pcic->pc_sockets[i].pcs_debounce_id); in pcic_detach()
1716 pcic->pc_sockets[i].pcs_debounce_id = 0; in pcic_detach()
1724 if (pcic->pc_flags & PCF_CBPWRCTL) in pcic_detach()
1727 if (pcic->pc_sockets[i].pcs_flags & PCS_CARD_PRESENT) { in pcic_detach()
1728 pcic->pc_sockets[i].pcs_flags = PCS_STARTING; in pcic_detach()
1736 pcic->pc_callback) { in pcic_detach()
1737 PC_CALLBACK(pcic->dip, pcic->pc_cb_arg, in pcic_detach()
1739 pcic->pc_sockets[i].pcs_socket); in pcic_detach()
1744 pcic->pc_flags |= PCF_SUSPENDED; in pcic_detach()
1745 mutex_exit(&pcic->pc_lock); in pcic_detach()
1776 if (pcic->pc_flags & PCF_PCIBUS) { in pcic_setup_adapter()
1778 * all PCI-to-PCMCIA bus bridges need memory and I/O enabled in pcic_setup_adapter()
1781 pcic_iomem_pci_ctl(pcic->cfg_handle, pcic->cfgaddr, flags); in pcic_setup_adapter()
1784 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_setup_adapter()
1785 pcic->pc_sockets[i].pcs_flags = 0; in pcic_setup_adapter()
1790 pcic->pc_sockets[i].pcs_flags |= PCS_SOCKET_IO; in pcic_setup_adapter()
1795 switch (pcic->pc_type) { in pcic_setup_adapter()
1817 * IRQ interrupt lines to PCI/level-mode. in pcic_setup_adapter()
1820 switch (pcic->pc_intr_mode) { in pcic_setup_adapter()
1839 * lines to PCI/level-mode. as well as program the in pcic_setup_adapter()
1843 switch (pcic->pc_intr_mode) { in pcic_setup_adapter()
1853 if (pcic->bus_speed > PCIC_PCI_25MHZ && i == 0) { in pcic_setup_adapter()
1861 if (pcic->bus_speed < PCIC_SYSCLK_33MHZ) in pcic_setup_adapter()
1863 ddi_put8(pcic->cfg_handle, pcic->cfgaddr + in pcic_setup_adapter()
1870 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1871 pcic->cfgaddr + PCIC_DEVCTL_REG); in pcic_setup_adapter()
1873 switch (pcic->pc_intr_mode) { in pcic_setup_adapter()
1885 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1886 pcic->cfgaddr + PCIC_DEVCTL_REG, in pcic_setup_adapter()
1889 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1890 pcic->cfgaddr + PCIC_CRDCTL_REG); in pcic_setup_adapter()
1893 switch (pcic->pc_intr_mode) { in pcic_setup_adapter()
1898 pcic->pc_flags |= PCF_USE_SMI; in pcic_setup_adapter()
1908 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1909 pcic->cfgaddr + PCIC_CRDCTL_REG, in pcic_setup_adapter()
1914 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1915 pcic->cfgaddr + PCIC_DEVCTL_REG); in pcic_setup_adapter()
1924 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1925 pcic->cfgaddr + PCIC_DEVCTL_REG, cfg); in pcic_setup_adapter()
1927 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1928 pcic->cfgaddr + PCIC_DIAG_REG); in pcic_setup_adapter()
1929 if (pcic->pc_type == PCIC_TI_PCI1225) { in pcic_setup_adapter()
1934 pcic->pc_flags |= PCF_USE_SMI; in pcic_setup_adapter()
1942 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1943 pcic->cfgaddr + PCIC_DIAG_REG, cfg); in pcic_setup_adapter()
1948 if (pcic->pc_intr_mode == PCIC_INTR_MODE_ISA) { in pcic_setup_adapter()
1949 /* functional intr routed by ExCA register */ in pcic_setup_adapter()
1950 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1951 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG); in pcic_setup_adapter()
1953 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1954 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG, in pcic_setup_adapter()
1958 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1959 pcic->cfgaddr + PCIC_DEVCTL_REG); in pcic_setup_adapter()
1962 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1963 pcic->cfgaddr + PCIC_DEVCTL_REG, in pcic_setup_adapter()
1969 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
1970 pcic->cfgaddr + PCIC_DIAG_REG); in pcic_setup_adapter()
1972 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
1973 pcic->cfgaddr + PCIC_DIAG_REG, cfg); in pcic_setup_adapter()
1985 if (ddi_getlongprop(DDI_DEV_T_ANY, pcic->dip, in pcic_setup_adapter()
1994 bus = PCI_REG_BUS_G(reg->pci_phys_hi); in pcic_setup_adapter()
1995 dev = PCI_REG_DEV_G(reg->pci_phys_hi); in pcic_setup_adapter()
1996 func = PCI_REG_FUNC_G(reg->pci_phys_hi); in pcic_setup_adapter()
2012 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
2013 pcic->cfgaddr + PCIC_DEVCTL_REG); in pcic_setup_adapter()
2015 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2016 pcic->cfgaddr + PCIC_DEVCTL_REG, in pcic_setup_adapter()
2020 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
2021 (pcic->cfgaddr + PCIC_SYSCTL_REG + 3)); in pcic_setup_adapter()
2023 ddi_put8(pcic->cfg_handle, (pcic->cfgaddr + in pcic_setup_adapter()
2029 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
2030 pcic->cfgaddr + PCIC_DIAG_REG); in pcic_setup_adapter()
2032 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2033 pcic->cfgaddr + PCIC_DIAG_REG, cfg); in pcic_setup_adapter()
2038 cfg = ddi_get8(pcic->cfg_handle, pcic->cfgaddr + in pcic_setup_adapter()
2044 ddi_put8(pcic->cfg_handle, pcic->cfgaddr + in pcic_setup_adapter()
2046 cfg = ddi_get8(pcic->cfg_handle, pcic->cfgaddr + in pcic_setup_adapter()
2048 switch (pcic->pc_intr_mode) { in pcic_setup_adapter()
2051 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2052 pcic->cfgaddr + in pcic_setup_adapter()
2055 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
2056 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG); in pcic_setup_adapter()
2058 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2059 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG, in pcic_setup_adapter()
2066 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2067 pcic->cfgaddr + in pcic_setup_adapter()
2073 cfg32 = ddi_get32(pcic->cfg_handle, in pcic_setup_adapter()
2074 (uint32_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2076 switch (pcic->pc_intr_mode) { in pcic_setup_adapter()
2080 ddi_put32(pcic->cfg_handle, in pcic_setup_adapter()
2081 (uint32_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2084 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
2085 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG); in pcic_setup_adapter()
2087 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2088 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG, in pcic_setup_adapter()
2094 ddi_put32(pcic->cfg_handle, in pcic_setup_adapter()
2095 (uint32_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2102 if (pcic->pc_intr_mode == PCIC_INTR_MODE_ISA) { in pcic_setup_adapter()
2103 cfg16 = ddi_get16(pcic->cfg_handle, in pcic_setup_adapter()
2104 (uint16_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2108 ddi_put16(pcic->cfg_handle, in pcic_setup_adapter()
2109 (uint16_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2113 cfg16 = ddi_get16(pcic->cfg_handle, in pcic_setup_adapter()
2114 (uint16_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2117 ddi_put16(pcic->cfg_handle, in pcic_setup_adapter()
2118 (uint16_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2122 cfg = ddi_get8(pcic->cfg_handle, in pcic_setup_adapter()
2123 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG); in pcic_setup_adapter()
2125 ddi_put8(pcic->cfg_handle, in pcic_setup_adapter()
2126 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG, in pcic_setup_adapter()
2140 if ((pcic->pc_type >> 16) == PCIC_TI_VENDORID && in pcic_setup_adapter()
2141 pcic->pc_intr_mode == PCIC_INTR_MODE_PCI_1) { in pcic_setup_adapter()
2142 value = ddi_get32(pcic->cfg_handle, in pcic_setup_adapter()
2143 (uint32_t *)(pcic->cfgaddr + PCIC_MFROUTE_REG)); in pcic_setup_adapter()
2145 ddi_put32(pcic->cfg_handle, (uint32_t *)(pcic->cfgaddr + in pcic_setup_adapter()
2150 switch (pcic->pc_type) { in pcic_setup_adapter()
2160 if (pcic->pc_intr_mode == in pcic_setup_adapter()
2168 (pcic->pc_sockets[i].pcs_smi << 4)); in pcic_setup_adapter()
2173 pcic->pc_flags |= PCF_INTRENAB; in pcic_setup_adapter()
2181 switch (pcic->pc_type) { in pcic_setup_adapter()
2185 pcic->pc_flags |= PCF_DEBOUNCE; in pcic_setup_adapter()
2200 if (pcic->bus_speed >= PCIC_PCI_DEF_SYSCLK && i == 0) { in pcic_setup_adapter()
2212 i, value, pcic->pc_sockets[i].pcs_flags, in pcic_setup_adapter()
2213 (pcic->pc_sockets[i].pcs_flags & in pcic_setup_adapter()
2240 pcic_err(pcic->dip, 0xf, in pcic_intr()
2243 pcic->pc_flags, PCF_ATTACHED, pcic->pc_numsockets); in pcic_intr()
2246 if (!(pcic->pc_flags & PCF_ATTACHED)) in pcic_intr()
2249 mutex_enter(&pcic->intr_lock); in pcic_intr()
2251 if (pcic->pc_flags & PCF_SUSPENDED) { in pcic_intr()
2252 mutex_exit(&pcic->intr_lock); in pcic_intr()
2269 io_ints = (1 << pcic->pc_numsockets) - 1; in pcic_intr()
2271 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_intr()
2276 sockp = &pcic->pc_sockets[i]; in pcic_intr()
2279 if (sockp->pcs_flags & PCS_WAITING) { in pcic_intr()
2284 if (sockp->pcs_flags & PCS_CARD_IO) in pcic_intr()
2289 if (pcic->pc_io_type == PCIC_IO_TYPE_YENTA) in pcic_intr()
2295 int x = pcic->pc_cb_arg; in pcic_intr()
2300 pcic_err(pcic->dip, 0x9, in pcic_intr()
2321 if (pcic->pc_callback == NULL) { in pcic_intr()
2335 status, sockp->pcs_flags); in pcic_intr()
2345 irq = pcic_getb(pcic, sockp->pcs_socket, in pcic_intr()
2348 pcic_putb(pcic, sockp->pcs_socket, in pcic_intr()
2356 * Crucial for handling surprise-removal. in pcic_intr()
2358 sockp->pcs_flags |= PCS_DEBOUNCING; in pcic_intr()
2360 if (!sockp->pcs_cd_softint_flg) { in pcic_intr()
2361 sockp->pcs_cd_softint_flg = 1; in pcic_intr()
2363 sockp->pcs_cd_softint_hdl, NULL); in pcic_intr()
2370 sockp->pcs_state ^= SBM_RDYBSY; in pcic_intr()
2372 sockp->pcs_flags |= PCS_READY; in pcic_intr()
2373 PC_CALLBACK(pcic->dip, x, PCE_CARD_READY, i); in pcic_intr()
2379 !(sockp->pcs_state & SBM_BVD2)) { in pcic_intr()
2380 sockp->pcs_state |= SBM_BVD2; in pcic_intr()
2381 PC_CALLBACK(pcic->dip, x, in pcic_intr()
2392 !(sockp->pcs_state & SBM_BVD1)) { in pcic_intr()
2393 sockp->pcs_state |= SBM_BVD1; in pcic_intr()
2394 PC_CALLBACK(pcic->dip, x, in pcic_intr()
2402 PC_CALLBACK(pcic->dip, x, in pcic_intr()
2423 pcic_err(pcic->dip, 0xf, in pcic_intr()
2425 pcic->pc_intr_mode, pcic->pc_type, io_ints); in pcic_intr()
2433 mutex_exit(&pcic->intr_lock); in pcic_intr()
2436 pcic_err(pcic->dip, 0xf, in pcic_intr()
2456 * pcic_do_io_intr - calls client interrupt handlers
2465 pcic_err(pcic->dip, 0xf, in pcic_do_io_intr()
2467 (void *)pcic, (int)sockets, (void *)pcic->irq_top); in pcic_do_io_intr()
2470 if (pcic->irq_top != NULL) { in pcic_do_io_intr()
2471 tmp = pcic->irq_current; in pcic_do_io_intr()
2474 int cur = pcic->irq_current->socket; in pcic_do_io_intr()
2476 &pcic->pc_sockets[cur]; in pcic_do_io_intr()
2479 pcic_err(pcic->dip, 0xf, in pcic_do_io_intr()
2481 sockp->pcs_flags, PCS_CARD_PRESENT); in pcic_do_io_intr()
2482 pcic_err(pcic->dip, 0xf, in pcic_do_io_intr()
2485 sockets, cur, (void *)pcic->irq_current->intr, in pcic_do_io_intr()
2486 pcic->irq_current->arg1, in pcic_do_io_intr()
2487 pcic->irq_current->arg2); in pcic_do_io_intr()
2489 if ((sockp->pcs_flags & PCS_CARD_PRESENT) && in pcic_do_io_intr()
2490 !(sockp->pcs_flags & PCS_DEBOUNCING) && in pcic_do_io_intr()
2493 if ((*pcic->irq_current->intr)(pcic->irq_current->arg1, in pcic_do_io_intr()
2494 pcic->irq_current->arg2) == DDI_INTR_CLAIMED) in pcic_do_io_intr()
2498 pcic_err(pcic->dip, 0xf, in pcic_do_io_intr()
2505 if ((pcic->irq_current = pcic->irq_current->next) == NULL) in pcic_do_io_intr()
2506 pcic->irq_current = pcic->irq_top; in pcic_do_io_intr()
2508 } while (pcic->irq_current != tmp); in pcic_do_io_intr()
2510 if ((pcic->irq_current = pcic->irq_current->next) == NULL) in pcic_do_io_intr()
2511 pcic->irq_current = pcic->irq_top; in pcic_do_io_intr()
2518 pcic_err(pcic->dip, 0xf, in pcic_do_io_intr()
2537 pcicdev_t *pcic = anp->an_private; in pcic_inquire_adapter()
2539 config->NumSockets = pcic->pc_numsockets; in pcic_inquire_adapter()
2540 config->NumWindows = pcic->pc_numsockets * PCIC_NUMWINSOCK; in pcic_inquire_adapter()
2541 config->NumEDCs = 0; in pcic_inquire_adapter()
2542 config->AdpCaps = 0; in pcic_inquire_adapter()
2543 config->ActiveHigh = 0; in pcic_inquire_adapter()
2544 config->ActiveLow = PCIC_AVAIL_IRQS; in pcic_inquire_adapter()
2545 config->NumPower = pcic->pc_numpower; in pcic_inquire_adapter()
2546 config->power_entry = pcic->pc_power; /* until we resolve this */ in pcic_inquire_adapter()
2550 cmn_err(CE_CONT, "\tNumSockets=%d\n", config->NumSockets); in pcic_inquire_adapter()
2551 cmn_err(CE_CONT, "\tNumWindows=%d\n", config->NumWindows); in pcic_inquire_adapter()
2554 config->ResourceFlags = 0; in pcic_inquire_adapter()
2555 switch (pcic->pc_intr_mode) { in pcic_inquire_adapter()
2557 config->ResourceFlags |= RES_OWN_IRQ | RES_IRQ_NEXUS | in pcic_inquire_adapter()
2575 pcicdev_t *pcic = anp->an_private; in pcic_callback()
2578 pcic->pc_callback = handler; in pcic_callback()
2579 pcic->pc_cb_arg = arg; in pcic_callback()
2580 pcic->pc_flags |= PCF_CALLBACK; in pcic_callback()
2582 pcic->pc_callback = NULL; in pcic_callback()
2583 pcic->pc_cb_arg = 0; in pcic_callback()
2584 pcic->pc_flags &= ~PCF_CALLBACK; in pcic_callback()
2606 switch (pcic->pc_type) { in pcic_calc_speed()
2657 * due to problems with the 3-Com ethernet cards (pcelx) on UBIIi.
2690 clk_pulse = mhztons(pcic->bus_speed); in pcic_set_cdtimers()
2691 for (ctp = pcic_card_times; speed < ctp->cycle; ctp++) in pcic_set_cdtimers()
2697 set = ((ctp->setup + 10 + 1 + (clk_pulse/2))/clk_pulse) - 1; in pcic_set_cdtimers()
2701 cmd = ((ctp->width + 10 + 1 + (clk_pulse/2))/clk_pulse) - 1; in pcic_set_cdtimers()
2705 rec = ((ctp->hold + 10 + 1 + (clk_pulse/2))/clk_pulse) - 2; in pcic_set_cdtimers()
2710 pcic_err(pcic->dip, 8, "pcic_set_cdtimers(%d, Timer Set %d)\n" in pcic_set_cdtimers()
2713 ctp->cycle, clk_pulse, cmd, set, rec); in pcic_set_cdtimers()
2734 pcicdev_t *pcic = anp->an_private; in pcic_set_window()
2737 pcic_socket_t *sockp = &pcic->pc_sockets[window->socket]; in pcic_set_window()
2740 uint32_t base = window->base; in pcic_set_window()
2747 window->window, window->socket, window->WindowSize, in pcic_set_window()
2748 window->speed); in pcic_set_window()
2750 "\tbase=%x, state=%x\n", (unsigned)window->base, in pcic_set_window()
2751 (unsigned)window->state); in pcic_set_window()
2759 if (window->state & WS_PAGED) { in pcic_set_window()
2770 socket = window->socket; in pcic_set_window()
2772 if (!(window->state & WS_IO)) { in pcic_set_window()
2780 win = window->window % PCIC_NUMWINSOCK; in pcic_set_window()
2781 tmp = window->window / PCIC_NUMWINSOCK; in pcic_set_window()
2783 /* only windows 2-6 can do memory mapping */ in pcic_set_window()
2784 if (tmp != window->socket || win < PCIC_IOWINDOWS) { in pcic_set_window()
2786 "\tattempt to map to non-mem window\n"); in pcic_set_window()
2790 if (window->WindowSize == 0) in pcic_set_window()
2791 window->WindowSize = MEM_MIN; in pcic_set_window()
2792 else if ((window->WindowSize & (PCIC_PAGE-1)) != 0) { in pcic_set_window()
2797 mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_set_window()
2799 memp = &sockp->pcs_windows[win].mem; in pcic_set_window()
2800 memp->pcw_speed = window->speed; in pcic_set_window()
2802 win -= PCIC_IOWINDOWS; /* put in right range */ in pcic_set_window()
2804 if (window->WindowSize != memp->pcw_len) in pcic_set_window()
2805 which = memp->pcw_len; in pcic_set_window()
2809 if (window->state & WS_ENABLED) { in pcic_set_window()
2822 if (which && (memp->pcw_status & PCW_MAPPED)) { in pcic_set_window()
2823 ddi_regs_map_free(&memp->pcw_handle); in pcic_set_window()
2824 res.ra_addr_lo = memp->pcw_base; in pcic_set_window()
2825 res.ra_len = memp->pcw_len; in pcic_set_window()
2826 (void) pcmcia_free_mem(memp->res_dip, &res); in pcic_set_window()
2827 memp->pcw_status &= ~(PCW_MAPPED|PCW_ENABLED); in pcic_set_window()
2828 memp->pcw_hostmem = NULL; in pcic_set_window()
2829 memp->pcw_base = NULL; in pcic_set_window()
2830 memp->pcw_len = 0; in pcic_set_window()
2833 which = window->WindowSize >> PAGE_SHIFT; in pcic_set_window()
2835 if (!(memp->pcw_status & PCW_MAPPED)) { in pcic_set_window()
2838 memp->pcw_base = base; in pcic_set_window()
2841 req.ra_addr = (uint64_t)memp->pcw_base; in pcic_set_window()
2842 req.ra_boundbase = pcic->pc_base; in pcic_set_window()
2843 req.ra_boundlen = pcic->pc_bound; in pcic_set_window()
2844 req.ra_flags = (memp->pcw_base ? in pcic_set_window()
2848 (PAGESIZE - 1) | (PCIC_PAGE - 1); in pcic_set_window()
2862 &memp->res_dip); in pcic_set_window()
2864 mutex_exit(&pcic->pc_lock); in pcic_set_window()
2869 memp->pcw_base = res.ra_addr_lo; in pcic_set_window()
2870 base = memp->pcw_base; in pcic_set_window()
2876 (unsigned)memp->pcw_base); in pcic_set_window()
2878 memp->pcw_len = window->WindowSize; in pcic_set_window()
2880 which = pcmcia_map_reg(pcic->dip, in pcic_set_window()
2881 window->child, in pcic_set_window()
2883 (uint32_t)(window->state & in pcic_set_window()
2885 (window->socket << 16), in pcic_set_window()
2886 (caddr_t *)&memp->pcw_hostmem, in pcic_set_window()
2887 &memp->pcw_handle, in pcic_set_window()
2888 &window->attr, NULL); in pcic_set_window()
2895 res.ra_addr_lo = memp->pcw_base; in pcic_set_window()
2896 res.ra_len = memp->pcw_len; in pcic_set_window()
2897 (void) pcmcia_free_mem(memp->res_dip, in pcic_set_window()
2900 mutex_exit(&pcic->pc_lock); in pcic_set_window()
2904 memp->pcw_status |= PCW_MAPPED; in pcic_set_window()
2910 (void *)memp->pcw_hostmem); in pcic_set_window()
2913 base = memp->pcw_base; in pcic_set_window()
2917 window->handle = memp->pcw_handle; in pcic_set_window()
2923 (unsigned)window->base, in pcic_set_window()
2924 (unsigned)memp->pcw_base, in pcic_set_window()
2925 memp->pcw_len); in pcic_set_window()
2947 which = (window->state & WS_16BIT) ? SYSMEM_DATA_16 : 0; in pcic_set_window()
2948 which |= (window->speed <= MEM_SPEED_MIN) ? in pcic_set_window()
2963 * than 16-bits worth, so handle them here. in pcic_set_window()
2965 switch (pcic->pc_type) { in pcic_set_window()
2988 if (pcic->pc_bound == 0xffffffff) { in pcic_set_window()
2992 pcic->pc_base = SYSMEM_EXT(base) << 24; in pcic_set_window()
2993 pcic->pc_bound = 0x1000000; in pcic_set_window()
3024 pcic->pc_type); in pcic_set_window()
3037 pages = (window->WindowSize+PCIC_PAGE-1)/PCIC_PAGE; in pcic_set_window()
3042 switch (pcic->pc_type) { in pcic_set_window()
3049 window->speed, in pcic_set_window()
3055 wspeed = pcic_calc_speed(pcic, window->speed); in pcic_set_window()
3064 win, (unsigned)wspeed, window->speed); in pcic_set_window()
3069 (pages * PCIC_PAGE)-1)); in pcic_set_window()
3071 wspeed |= SYSMEM_HIGH(base + (pages * PCIC_PAGE)-1); in pcic_set_window()
3076 * now map the card's memory pages - we start with page in pcic_set_window()
3078 * we also default to AM -- set page might change it in pcic_set_window()
3080 base = memp->pcw_base; in pcic_set_window()
3083 CARDMEM_LOW(0 - (uint32_t)base)); in pcic_set_window()
3087 CARDMEM_HIGH(0 - (uint32_t)base) | in pcic_set_window()
3098 memp->pcw_offset = 0; in pcic_set_window()
3099 memp->pcw_status |= PCW_ENABLED; in pcic_set_window()
3105 if (which && memp->pcw_status & PCW_MAPPED) { in pcic_set_window()
3106 ddi_regs_map_free(&memp->pcw_handle); in pcic_set_window()
3107 res.ra_addr_lo = memp->pcw_base; in pcic_set_window()
3108 res.ra_len = memp->pcw_len; in pcic_set_window()
3109 (void) pcmcia_free_mem(memp->res_dip, &res); in pcic_set_window()
3110 memp->pcw_hostmem = NULL; in pcic_set_window()
3111 memp->pcw_status &= ~PCW_MAPPED; in pcic_set_window()
3118 memp->pcw_status &= ~PCW_ENABLED; in pcic_set_window()
3120 memp->pcw_len = window->WindowSize; in pcic_set_window()
3121 window->handle = memp->pcw_handle; in pcic_set_window()
3124 xxdmp_all_regs(pcic, window->socket, -1); in pcic_set_window()
3139 win = window->window % PCIC_NUMWINSOCK; in pcic_set_window()
3140 tmp = window->window / PCIC_NUMWINSOCK; in pcic_set_window()
3142 if (win >= PCIC_IOWINDOWS || tmp != window->socket) { in pcic_set_window()
3145 window->window); in pcic_set_window()
3149 mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_set_window()
3151 winp = &sockp->pcs_windows[win].io; in pcic_set_window()
3152 winp->pcw_speed = window->speed; in pcic_set_window()
3153 if (window->WindowSize != 1 && window->WindowSize & 1) { in pcic_set_window()
3154 /* we don't want an odd-size window */ in pcic_set_window()
3155 window->WindowSize++; in pcic_set_window()
3157 winp->pcw_len = window->WindowSize; in pcic_set_window()
3159 if (window->state & WS_ENABLED) { in pcic_set_window()
3160 if (winp->pcw_status & PCW_MAPPED) { in pcic_set_window()
3161 ddi_regs_map_free(&winp->pcw_handle); in pcic_set_window()
3162 res.ra_addr_lo = winp->pcw_base; in pcic_set_window()
3163 res.ra_len = winp->pcw_len; in pcic_set_window()
3164 (void) pcmcia_free_io(winp->res_dip, &res); in pcic_set_window()
3165 winp->pcw_status &= ~(PCW_MAPPED|PCW_ENABLED); in pcic_set_window()
3172 * The winp->pcw_offset value is set and used in pcic_set_window()
3179 winp->pcw_offset = 0; in pcic_set_window()
3197 base = window->base; in pcic_set_window()
3199 req.ra_len = window->WindowSize; in pcic_set_window()
3202 ((pcic->pc_flags & PCF_IO_REMAP) ? 0 : base); in pcic_set_window()
3208 req.ra_boundbase = pcic->pc_iobase; in pcic_set_window()
3209 req.ra_boundlen = pcic->pc_iobound; in pcic_set_window()
3231 &winp->res_dip) == DDI_FAILURE) { in pcic_set_window()
3232 winp->pcw_status &= ~PCW_ENABLED; in pcic_set_window()
3233 mutex_exit(&pcic->pc_lock); in pcic_set_window()
3252 winp->pcw_base = res.ra_addr_lo; in pcic_set_window()
3257 (unsigned)winp->pcw_base, base); in pcic_set_window()
3260 if ((which = pcmcia_map_reg(pcic->dip, in pcic_set_window()
3261 window->child, in pcic_set_window()
3263 (uint32_t)(window->state & in pcic_set_window()
3265 (window->socket << 16), in pcic_set_window()
3266 (caddr_t *)&winp->pcw_hostmem, in pcic_set_window()
3267 &winp->pcw_handle, in pcic_set_window()
3268 &window->attr, in pcic_set_window()
3274 res.ra_addr_lo = winp->pcw_base; in pcic_set_window()
3275 res.ra_len = winp->pcw_len; in pcic_set_window()
3276 (void) pcmcia_free_io(winp->res_dip, in pcic_set_window()
3279 mutex_exit(&pcic->pc_lock); in pcic_set_window()
3283 window->handle = winp->pcw_handle; in pcic_set_window()
3284 winp->pcw_status |= PCW_MAPPED; in pcic_set_window()
3295 (unsigned)window->base, in pcic_set_window()
3296 (void *)window->handle); in pcic_set_window()
3312 LOW_BYTE((uint32_t)winp->pcw_base)); in pcic_set_window()
3315 HIGH_BYTE((uint32_t)winp->pcw_base)); in pcic_set_window()
3319 LOW_BYTE((uint32_t)winp->pcw_base + in pcic_set_window()
3320 window->WindowSize - 1)); in pcic_set_window()
3323 HIGH_BYTE((uint32_t)winp->pcw_base + in pcic_set_window()
3324 window->WindowSize - 1)); in pcic_set_window()
3334 if (pcic->pc_flags & PCF_IO_REMAP) { in pcic_set_window()
3343 winp->pcw_offset = (base - winp->pcw_base); in pcic_set_window()
3348 winp->pcw_offset & 0x0ff); in pcic_set_window()
3352 (winp->pcw_offset >> 8) & 0x0ff); in pcic_set_window()
3368 which = (window->state & WS_16BIT) ? in pcic_set_window()
3371 switch (pcic->pc_type) { in pcic_set_window()
3378 * Select Timer Set 1 - this will take in pcic_set_window()
3386 window->speed, in pcic_set_window()
3392 if (window->state & WS_16BIT) in pcic_set_window()
3398 if (window->state & WS_16BIT) in pcic_set_window()
3405 if (window->speed > in pcic_set_window()
3406 mhztons(pcic->bus_speed) * 3) in pcic_set_window()
3409 if (window->speed < in pcic_set_window()
3410 mhztons(pcic->bus_speed) * 6) in pcic_set_window()
3431 winp->pcw_status |= PCW_ENABLED; in pcic_set_window()
3439 xxdmp_all_regs(pcic, window->socket * 0x40, 24); in pcic_set_window()
3447 if (winp->pcw_status & PCW_MAPPED) { in pcic_set_window()
3448 ddi_regs_map_free(&winp->pcw_handle); in pcic_set_window()
3449 res.ra_addr_lo = winp->pcw_base; in pcic_set_window()
3450 res.ra_len = winp->pcw_len; in pcic_set_window()
3451 (void) pcmcia_free_io(winp->res_dip, &res); in pcic_set_window()
3452 winp->pcw_status &= ~PCW_MAPPED; in pcic_set_window()
3460 winp->pcw_status &= ~PCW_ENABLED; in pcic_set_window()
3462 winp->pcw_base = 0; in pcic_set_window()
3463 winp->pcw_len = 0; in pcic_set_window()
3464 winp->pcw_offset = 0; in pcic_set_window()
3465 window->base = 0; in pcic_set_window()
3466 /* now make sure we don't accidentally re-enable */ in pcic_set_window()
3479 mutex_exit(&pcic->pc_lock); in pcic_set_window()
3496 mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_card_state()
3498 value = pcic_getb(pcic, sockp->pcs_socket, PCIC_INTERFACE_STATUS); in pcic_card_state()
3507 sockp->pcs_socket); in pcic_card_state()
3514 if (!(sockp->pcs_flags & (PCS_STARTING|PCS_CARD_ISCARDBUS)) && in pcic_card_state()
3515 !sockp->pcs_debounce_id && in pcic_card_state()
3533 mutex_exit(&pcic->pc_lock); in pcic_card_state()
3536 pcic_err(pcic->dip, 8, in pcic_card_state()
3540 sockp->pcs_socket, result); in pcic_card_state()
3557 pcicdev_t *pcic = anp->an_private; in pcic_set_page()
3564 window = page->window % PCIC_NUMWINSOCK; in pcic_set_page()
3565 socket = page->window / PCIC_NUMWINSOCK; in pcic_set_page()
3571 window, socket, page->page); in pcic_set_page()
3574 /* only windows 2-6 work on memory */ in pcic_set_page()
3579 if (page->page != 0) in pcic_set_page()
3582 mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_set_page()
3584 memp = &pcic->pc_sockets[socket].pcs_windows[window].mem; in pcic_set_page()
3585 window -= PCIC_IOWINDOWS; in pcic_set_page()
3590 (uint32_t)memp->pcw_base, in pcic_set_page()
3591 (void *)memp->pcw_hostmem, memp->pcw_len); in pcic_set_page()
3595 if (!(memp->pcw_status & PCW_ENABLED)) in pcic_set_page()
3606 * now map the card's memory pages - we start with page 0 in pcic_set_page()
3610 if (page->state & PS_ATTRIBUTE) { in pcic_set_page()
3612 memp->pcw_status |= PCW_ATTRIBUTE; in pcic_set_page()
3614 memp->pcw_status &= ~PCW_ATTRIBUTE; in pcic_set_page()
3620 if (page->state & PS_WP) { in pcic_set_page()
3622 memp->pcw_status |= PCW_WP; in pcic_set_page()
3624 memp->pcw_status &= ~PCW_WP; in pcic_set_page()
3633 (unsigned)page->offset, in pcic_set_page()
3634 (unsigned)memp->pcw_base, in pcic_set_page()
3635 (int)page->offset - (int)memp->pcw_base & 0xffffff); in pcic_set_page()
3639 base = (uint32_t)memp->pcw_base & 0x3ffffff; in pcic_set_page()
3641 CARDMEM_LOW((int)page->offset - (int)base)); in pcic_set_page()
3644 CARDMEM_HIGH((int)page->offset - base) | which); in pcic_set_page()
3656 memp->pcw_offset = (off_t)page->offset; in pcic_set_page()
3661 (void *)memp->pcw_hostmem, in pcic_set_page()
3662 (uint32_t)*memp->pcw_hostmem); in pcic_set_page()
3664 xxdmp_all_regs(pcic, socket, -1); in pcic_set_page()
3667 (void *)memp->pcw_hostmem, in pcic_set_page()
3668 (uint32_t)*memp->pcw_hostmem); in pcic_set_page()
3675 mutex_exit(&pcic->pc_lock); in pcic_set_page()
3688 * to be set, requires more framework support and driver changes - ess
3699 (void *)pcic, socket->VccLevel); in pcic_set_vcc_level()
3706 * if it is non-zero, power is being turned on. in pcic_set_vcc_level()
3708 if (socket->VccLevel == 0) { in pcic_set_vcc_level()
3715 if (socket->VccLevel >= pcic->pc_numpower) { in pcic_set_vcc_level()
3719 switch (pcic->pc_io_type) { in pcic_set_vcc_level()
3721 * Yenta-compliant adapters have vcc info in the extended registers in pcic_set_vcc_level()
3732 ddi_get32(pcic->handle, (uint32_t *)(pcic->ioaddr + in pcic_set_vcc_level()
3745 socket->VccLevel = PCIC_VCC_3VLEVEL; in pcic_set_vcc_level()
3749 socket->VccLevel = PCIC_VCC_5VLEVEL; in pcic_set_vcc_level()
3759 return ((unsigned)ddi_get8(pcic->handle, in pcic_set_vcc_level()
3760 pcic->ioaddr + CB_R2_OFFSET + in pcic_set_vcc_level()
3766 switch (socket->VccLevel) { in pcic_set_vcc_level()
3788 pcicdev_t *pcic = anp->an_private; in pcic_set_socket()
3789 pcic_socket_t *sockp = &pcic->pc_sockets[socket->socket]; in pcic_set_socket()
3799 socket->socket, socket->VccLevel, socket->Vpp1Level, in pcic_set_socket()
3800 socket->Vpp2Level); in pcic_set_socket()
3806 * if it is non-zero, power is being turned on. in pcic_set_socket()
3812 if (socket->Vpp1Level != socket->Vpp2Level) in pcic_set_socket()
3815 if (socket->VccLevel == 0 || !(sockp->pcs_flags & PCS_CARD_PRESENT)) { in pcic_set_socket()
3817 sockp->pcs_vcc = 0; in pcic_set_socket()
3818 sockp->pcs_vpp1 = 0; in pcic_set_socket()
3819 sockp->pcs_vpp2 = 0; in pcic_set_socket()
3823 socket->VccLevel, socket->Vpp1Level, socket->Vpp2Level); in pcic_set_socket()
3826 if (socket->VccLevel >= pcic->pc_numpower) in pcic_set_socket()
3829 switch (pcic_power[socket->VccLevel].PowerLevel) { in pcic_set_socket()
3832 if (!(pcic->pc_flags & PCF_33VCAP)) { in pcic_set_socket()
3836 ddi_get_name(pcic->dip), in pcic_set_socket()
3837 ddi_get_instance(pcic->dip)); in pcic_set_socket()
3842 if ((pcic->pc_io_type == PCIC_IO_TYPE_YENTA) && in pcic_set_socket()
3854 sockp->pcs_vcc = PCIC_VCC_3VLEVEL; in pcic_set_socket()
3856 sockp->pcs_vcc = socket->VccLevel; in pcic_set_socket()
3868 socket->VccLevel, powerlevel); in pcic_set_socket()
3872 if ((int)socket->Vpp1Level >= 0 && in pcic_set_socket()
3873 socket->Vpp1Level < pcic->pc_numpower) { in pcic_set_socket()
3874 if (!(pcic_power[socket->Vpp1Level].ValidSignals in pcic_set_socket()
3878 ind = pcic_power[socket->Vpp1Level].PowerLevel/10; in pcic_set_socket()
3880 sockp->pcs_vpp1 = socket->Vpp1Level; in pcic_set_socket()
3882 if ((int)socket->Vpp2Level >= 0 && in pcic_set_socket()
3883 socket->Vpp2Level < pcic->pc_numpower) { in pcic_set_socket()
3884 if (!(pcic_power[socket->Vpp2Level].ValidSignals in pcic_set_socket()
3888 ind = pcic_power[socket->Vpp2Level].PowerLevel/10; in pcic_set_socket()
3890 sockp->pcs_vpp2 = socket->Vpp2Level; in pcic_set_socket()
3893 if (pcic->pc_flags & PCF_VPPX) { in pcic_set_socket()
3899 if (sockp->pcs_vpp2 != sockp->pcs_vpp1) { in pcic_set_socket()
3901 if (sockp->pcs_vpp1 != 0 && in pcic_set_socket()
3902 sockp->pcs_vpp2 != 0) { in pcic_set_socket()
3906 ddi_get_name(pcic->dip), in pcic_set_socket()
3907 ddi_get_instance(pcic->dip)); in pcic_set_socket()
3921 mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_set_socket()
3923 /* turn socket->IREQRouting off while programming */ in pcic_set_socket()
3924 interrupt = pcic_getb(pcic, socket->socket, PCIC_INTERRUPT); in pcic_set_socket()
3926 if (pcic->pc_flags & PCF_USE_SMI) in pcic_set_socket()
3928 pcic_putb(pcic, socket->socket, PCIC_INTERRUPT, interrupt); in pcic_set_socket()
3930 switch (pcic->pc_type) { in pcic_set_socket()
3932 pcic_82092_smiirq_ctl(pcic, socket->socket, PCIC_82092_CTL_IRQ, in pcic_set_socket()
3940 mirq = pcic_getb(pcic, socket->socket, PCIC_MANAGEMENT_INT); in pcic_set_socket()
3946 socket->SCIntMask, interrupt, mirq); in pcic_set_socket()
3949 pcic_putb(pcic, socket->socket, PCIC_MANAGEMENT_INT, in pcic_set_socket()
3953 sockp->pcs_intmask = socket->SCIntMask; in pcic_set_socket()
3961 if (sockp->pcs_flags & PCS_CARD_PRESENT) { in pcic_set_socket()
3964 if (sockp->pcs_intmask & SBM_BVD1 || socket->IFType == IF_IO) in pcic_set_socket()
3967 if (sockp->pcs_intmask & SBM_BVD2) in pcic_set_socket()
3970 if (sockp->pcs_intmask & SBM_RDYBSY) in pcic_set_socket()
3973 if (sockp->pcs_intmask & SBM_CD) in pcic_set_socket()
3977 if (sockp->pcs_flags & PCS_READY) { in pcic_set_socket()
3983 sockp->pcs_flags &= ~PCS_READY; in pcic_set_socket()
3984 pcic_mswait(pcic, socket->socket, 10); in pcic_set_socket()
3993 switch (pcic->pc_type) { in pcic_set_socket()
4002 irq = pcic_getb(pcic, socket->socket, PCIC_CARD_DETECT); in pcic_set_socket()
4003 if (sockp->pcs_intmask & (SBM_EJECT|SBM_INSERT) && in pcic_set_socket()
4004 pcic->pc_flags & PCF_GPI_EJECT) { in pcic_set_socket()
4009 pcic_putb(pcic, socket->socket, PCIC_CARD_DETECT, irq); in pcic_set_socket()
4013 if (socket->IFType == IF_IO) { in pcic_set_socket()
4014 pcic_putb(pcic, socket->socket, PCIC_MISC_CTL_2, 0x0); in pcic_set_socket()
4015 value = pcic_getb(pcic, socket->socket, in pcic_set_socket()
4017 if (pcic->pc_flags & PCF_AUDIO) in pcic_set_socket()
4019 pcic_putb(pcic, socket->socket, PCIC_MISC_CTL_1, in pcic_set_socket()
4022 value = pcic_getb(pcic, socket->socket, in pcic_set_socket()
4025 pcic_putb(pcic, socket->socket, PCIC_MISC_CTL_1, in pcic_set_socket()
4032 value = pcic_getb(pcic, socket->socket, PCIC_MISC_CTL_1); in pcic_set_socket()
4033 if ((socket->IFType == IF_IO) && (pcic->pc_flags & PCF_AUDIO)) { in pcic_set_socket()
4039 if (pcic_power[sockp->pcs_vcc].PowerLevel == 33) in pcic_set_socket()
4044 pcic_putb(pcic, socket->socket, PCIC_MISC_CTL_1, value); in pcic_set_socket()
4049 if ((socket->IFType == IF_IO) && (pcic->pc_flags & PCF_AUDIO)) in pcic_set_socket()
4054 if (pcic_power[sockp->pcs_vcc].PowerLevel == 33) in pcic_set_socket()
4067 value = ddi_get8(pcic->cfg_handle, in pcic_set_socket()
4068 pcic->cfgaddr + PCIC_CRDCTL_REG); in pcic_set_socket()
4069 if ((socket->IFType == IF_IO) && (pcic->pc_flags & PCF_AUDIO)) { in pcic_set_socket()
4074 ddi_put8(pcic->cfg_handle, in pcic_set_socket()
4075 pcic->cfgaddr + PCIC_CRDCTL_REG, value); in pcic_set_socket()
4076 if (pcic_power[sockp->pcs_vcc].PowerLevel == 33) in pcic_set_socket()
4082 * ctlind processing -- we can ignore this in pcic_set_socket()
4092 /* power setup -- if necessary */ in pcic_set_socket()
4093 orig_pwrctl = pcic_getb(pcic, socket->socket, PCIC_POWER_CONTROL); in pcic_set_socket()
4094 if ((orig_pwrctl & POWER_OUTPUT_ENABLE) && sockp->pcs_vcc == 0) { in pcic_set_socket()
4096 pcic_putb(pcic, socket->socket, in pcic_set_socket()
4098 (void) pcic_getb(pcic, socket->socket, PCIC_POWER_CONTROL); in pcic_set_socket()
4101 if (pcic->pc_flags & PCF_CBPWRCTL) { in pcic_set_socket()
4102 value = pcic_cbus_powerctl(pcic, socket->socket); in pcic_set_socket()
4105 value = pcic_exca_powerctl(pcic, socket->socket, powerlevel); in pcic_set_socket()
4108 mutex_exit(&pcic->pc_lock); in pcic_set_socket()
4116 if (!(orig_pwrctl & POWER_OUTPUT_ENABLE) && sockp->pcs_vcc != 0) { in pcic_set_socket()
4117 orig_pwrctl = pcic_getb(pcic, socket->socket, in pcic_set_socket()
4120 pcic_putb(pcic, socket->socket, in pcic_set_socket()
4122 (void) pcic_getb(pcic, socket->socket, PCIC_POWER_CONTROL); in pcic_set_socket()
4126 * Once we have done the power stuff can re-enable management in pcic_set_socket()
4129 pcic_putb(pcic, socket->socket, PCIC_MANAGEMENT_INT, mirq); in pcic_set_socket()
4134 mirq, pcic_getb(pcic, socket->socket, PCIC_POWER_CONTROL), in pcic_set_socket()
4139 if (socket->IFType == IF_IO) { in pcic_set_socket()
4141 irq = socket->IREQRouting & PCIC_INTR_MASK; in pcic_set_socket()
4142 value = pcic_getb(pcic, socket->socket, PCIC_INTERRUPT); in pcic_set_socket()
4147 sockp->pcs_flags |= PCS_CARD_IO; in pcic_set_socket()
4148 if (irq != sockp->pcs_irq) { in pcic_set_socket()
4149 if (sockp->pcs_irq != 0) in pcic_set_socket()
4152 irq, sockp->pcs_irq); in pcic_set_socket()
4154 sockp->pcs_irq = irq; in pcic_set_socket()
4156 irq = sockp->pcs_irq; in pcic_set_socket()
4158 pcic_putb(pcic, socket->socket, PCIC_INTERRUPT, value); in pcic_set_socket()
4159 if (socket->IREQRouting & IRQ_ENABLE) { in pcic_set_socket()
4160 pcic_enable_io_intr(pcic, socket->socket, irq); in pcic_set_socket()
4161 sockp->pcs_flags |= PCS_IRQ_ENABLED; in pcic_set_socket()
4163 pcic_disable_io_intr(pcic, socket->socket); in pcic_set_socket()
4164 sockp->pcs_flags &= ~PCS_IRQ_ENABLED; in pcic_set_socket()
4170 (socket->IREQRouting & IRQ_ENABLE) ? in pcic_set_socket()
4172 xxdmp_all_regs(pcic, socket->socket, 20); in pcic_set_socket()
4178 sockp->pcs_irq = 0; in pcic_set_socket()
4180 value = pcic_getb(pcic, socket->socket, PCIC_INTERRUPT); in pcic_set_socket()
4182 pcic_putb(pcic, socket->socket, PCIC_INTERRUPT, value); in pcic_set_socket()
4183 pcic_disable_io_intr(pcic, socket->socket); in pcic_set_socket()
4184 sockp->pcs_flags &= ~(PCS_CARD_IO|PCS_IRQ_ENABLED); in pcic_set_socket()
4187 sockp->pcs_state &= ~socket->State; in pcic_set_socket()
4189 mutex_exit(&pcic->pc_lock); in pcic_set_socket()
4203 pcicdev_t *pcic = anp->an_private; in pcic_inquire_socket()
4206 socket->SCIntCaps = PCIC_DEFAULT_INT_CAPS; in pcic_inquire_socket()
4207 socket->SCRptCaps = PCIC_DEFAULT_RPT_CAPS; in pcic_inquire_socket()
4208 socket->CtlIndCaps = PCIC_DEFAULT_CTL_CAPS; in pcic_inquire_socket()
4209 value = pcic->pc_sockets[socket->socket].pcs_flags; in pcic_inquire_socket()
4210 socket->SocketCaps = (value & PCS_SOCKET_IO) ? IF_IO : IF_MEMORY; in pcic_inquire_socket()
4211 socket->ActiveHigh = 0; in pcic_inquire_socket()
4213 socket->ActiveLow = 0xfff0; in pcic_inquire_socket()
4229 type = window->window % PCIC_NUMWINSOCK; in pcic_inquire_window()
4230 socket = window->window / PCIC_NUMWINSOCK; in pcic_inquire_window()
4236 window->window, type, socket); in pcic_inquire_window()
4239 window->WndCaps = WC_IO|WC_WAIT; in pcic_inquire_window()
4242 window->WndCaps = WC_COMMON|WC_ATTRIBUTE|WC_WAIT; in pcic_inquire_window()
4246 /* initialize the socket map - one socket per window */ in pcic_inquire_window()
4247 PR_ZERO(window->Sockets); in pcic_inquire_window()
4248 PR_SET(window->Sockets, socket); in pcic_inquire_window()
4252 io = &window->iowin_char; in pcic_inquire_window()
4253 io->IOWndCaps = WC_BASE|WC_SIZE|WC_WENABLE|WC_8BIT| in pcic_inquire_window()
4255 io->FirstByte = (baseaddr_t)IOMEM_FIRST; in pcic_inquire_window()
4256 io->LastByte = (baseaddr_t)IOMEM_LAST; in pcic_inquire_window()
4257 io->MinSize = IOMEM_MIN; in pcic_inquire_window()
4258 io->MaxSize = IOMEM_MAX; in pcic_inquire_window()
4259 io->ReqGran = IOMEM_GRAN; in pcic_inquire_window()
4260 io->AddrLines = IOMEM_DECODE; in pcic_inquire_window()
4261 io->EISASlot = 0; in pcic_inquire_window()
4264 mem = &window->mem_win_char; in pcic_inquire_window()
4265 mem->MemWndCaps = WC_BASE|WC_SIZE|WC_WENABLE|WC_8BIT| in pcic_inquire_window()
4268 mem->FirstByte = (baseaddr_t)MEM_FIRST; in pcic_inquire_window()
4269 mem->LastByte = (baseaddr_t)MEM_LAST; in pcic_inquire_window()
4271 mem->MinSize = MEM_MIN; in pcic_inquire_window()
4272 mem->MaxSize = MEM_MAX; in pcic_inquire_window()
4273 mem->ReqGran = PCIC_PAGE; in pcic_inquire_window()
4274 mem->ReqBase = 0; in pcic_inquire_window()
4275 mem->ReqOffset = PCIC_PAGE; in pcic_inquire_window()
4276 mem->Slowest = MEM_SPEED_MAX; in pcic_inquire_window()
4277 mem->Fastest = MEM_SPEED_MIN; in pcic_inquire_window()
4285 * this is nearly a no-op.
4292 pcicdev_t *pcic = anp->an_private; in pcic_get_adapter()
4294 if (pcic->pc_flags & PCF_INTRENAB) in pcic_get_adapter()
4295 adapt->SCRouting = IRQ_ENABLE; in pcic_get_adapter()
4296 adapt->state = 0; in pcic_get_adapter()
4310 pcicdev_t *pcic = anp->an_private; in pcic_get_page()
4314 socket = page->window / PCIC_NUMWINSOCK; in pcic_get_page()
4315 window = page->window % PCIC_NUMWINSOCK; in pcic_get_page()
4318 if (window < PCIC_IOWINDOWS || socket >= pcic->pc_numsockets) { in pcic_get_page()
4322 winp = &pcic->pc_sockets[socket].pcs_windows[window].mem; in pcic_get_page()
4324 if (page->page != 0) in pcic_get_page()
4327 page->state = 0; in pcic_get_page()
4328 if (winp->pcw_status & PCW_ENABLED) in pcic_get_page()
4329 page->state |= PS_ENABLED; in pcic_get_page()
4330 if (winp->pcw_status & PCW_ATTRIBUTE) in pcic_get_page()
4331 page->state |= PS_ATTRIBUTE; in pcic_get_page()
4332 if (winp->pcw_status & PCW_WP) in pcic_get_page()
4333 page->state |= PS_WP; in pcic_get_page()
4335 page->offset = (off_t)winp->pcw_offset; in pcic_get_page()
4350 pcicdev_t *pcic = anp->an_private; in pcic_get_socket()
4354 socknum = socket->socket; in pcic_get_socket()
4355 sockp = &pcic->pc_sockets[socknum]; in pcic_get_socket()
4357 socket->SCIntMask = sockp->pcs_intmask; in pcic_get_socket()
4358 sockp->pcs_state = pcic_card_state(pcic, sockp); in pcic_get_socket()
4360 socket->state = sockp->pcs_state; in pcic_get_socket()
4361 if (socket->state & SBM_CD) { in pcic_get_socket()
4362 socket->VccLevel = sockp->pcs_vcc; in pcic_get_socket()
4363 socket->Vpp1Level = sockp->pcs_vpp1; in pcic_get_socket()
4364 socket->Vpp2Level = sockp->pcs_vpp2; in pcic_get_socket()
4365 irq_enabled = (sockp->pcs_flags & PCS_IRQ_ENABLED) ? in pcic_get_socket()
4367 socket->IRQRouting = sockp->pcs_irq | irq_enabled; in pcic_get_socket()
4368 socket->IFType = (sockp->pcs_flags & PCS_CARD_IO) ? in pcic_get_socket()
4371 socket->VccLevel = 0; in pcic_get_socket()
4372 socket->Vpp1Level = 0; in pcic_get_socket()
4373 socket->Vpp2Level = 0; in pcic_get_socket()
4374 socket->IRQRouting = 0; in pcic_get_socket()
4375 socket->IFType = IF_MEMORY; in pcic_get_socket()
4377 socket->CtlInd = 0; /* no indicators */ in pcic_get_socket()
4393 pcicdev_t *pcic = anp->an_private; in pcic_get_status()
4397 socknum = status->socket; in pcic_get_status()
4398 sockp = &pcic->pc_sockets[socknum]; in pcic_get_status()
4400 status->CardState = pcic_card_state(pcic, sockp); in pcic_get_status()
4401 status->SocketState = sockp->pcs_state; in pcic_get_status()
4402 status->CtlInd = 0; /* no indicators */ in pcic_get_status()
4404 if (sockp->pcs_flags & PCS_CARD_PRESENT) in pcic_get_status()
4405 status->SocketState |= SBM_CD; in pcic_get_status()
4406 if (status->CardState & SBM_CD) { in pcic_get_status()
4407 irq_enabled = (sockp->pcs_flags & PCS_CARD_ENABLED) ? in pcic_get_status()
4409 status->IRQRouting = sockp->pcs_irq | irq_enabled; in pcic_get_status()
4410 status->IFType = (sockp->pcs_flags & PCS_CARD_IO) ? in pcic_get_status()
4413 status->IRQRouting = 0; in pcic_get_status()
4414 status->IFType = IF_MEMORY; in pcic_get_status()
4421 socknum, status->CardState, status->SocketState); in pcic_get_status()
4423 switch (pcic->pc_type) { in pcic_get_status()
4437 status->IFType = IF_CARDBUS; in pcic_get_status()
4462 pcicdev_t *pcic = anp->an_private; in pcic_get_window()
4467 socket = window->window / PCIC_NUMWINSOCK; in pcic_get_window()
4468 win = window->window % PCIC_NUMWINSOCK; in pcic_get_window()
4476 if (socket > pcic->pc_numsockets) in pcic_get_window()
4479 sockp = &pcic->pc_sockets[socket]; in pcic_get_window()
4480 winp = &sockp->pcs_windows[win].mem; in pcic_get_window()
4482 window->socket = socket; in pcic_get_window()
4483 window->size = winp->pcw_len; in pcic_get_window()
4484 window->speed = winp->pcw_speed; in pcic_get_window()
4485 window->handle = (ddi_acc_handle_t)winp->pcw_handle; in pcic_get_window()
4486 window->base = (uint32_t)winp->pcw_base + winp->pcw_offset; in pcic_get_window()
4489 window->state = 0; in pcic_get_window()
4491 window->state = WS_IO; in pcic_get_window()
4493 if (winp->pcw_status & PCW_ENABLED) in pcic_get_window()
4494 window->state |= WS_ENABLED; in pcic_get_window()
4496 if (winp->pcw_status & PCS_CARD_16BIT) in pcic_get_window()
4497 window->state |= WS_16BIT; in pcic_get_window()
4501 window->size, (unsigned)window->speed, in pcic_get_window()
4502 (void *)window->handle, window->state); in pcic_get_window()
4514 * pcic_prereset_time - time in mS before asserting RESET
4515 * pcic_reset_time - time in mS to assert RESET
4537 pcic_err(pcic->dip, 6, in pcic_ll_reset()
4547 * Set VPP to VCC for the duration of the reset - for aironet in pcic_ll_reset()
4550 if (pcic->pc_flags & PCF_CBPWRCTL) { in pcic_ll_reset()
4563 pcic_err(pcic->dip, 8, "pcic_ll_reset pre_wait %d mS\n", in pcic_ll_reset()
4569 pcic_err(pcic->dip, 8, in pcic_ll_reset()
4576 switch (pcic->pc_type) { in pcic_ll_reset()
4585 pcic->pc_sockets[socket].pcs_state = 0; in pcic_ll_reset()
4588 pcic_err(pcic->dip, 8, "pcic_ll_reset reset_wait %d mS\n", in pcic_ll_reset()
4593 pcic_err(pcic->dip, 8, "pcic_ll_reset take it out of reset now\n"); in pcic_ll_reset()
4605 pcic_err(pcic->dip, 8, "pcic_ll_reset post_wait %d mS\n", in pcic_ll_reset()
4615 if (pcic->pc_flags & PCF_CBPWRCTL) { in pcic_ll_reset()
4624 pcic_err(pcic->dip, 7, "pcic_ll_reset returning 0x%x\n", windowbits); in pcic_ll_reset()
4640 pcicdev_t *pcic = anp->an_private; in pcic_reset_socket()
4652 mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_reset_socket()
4658 sockp = &pcic->pc_sockets[socket]; in pcic_reset_socket()
4665 if (sockp->pcs_windows[i].io.pcw_status & in pcic_reset_socket()
4668 io = &sockp->pcs_windows[i].io; in pcic_reset_socket()
4669 io->pcw_status &= ~PCW_ENABLED; in pcic_reset_socket()
4672 if (sockp->pcs_windows[i].mem.pcw_status & in pcic_reset_socket()
4675 mem = &sockp->pcs_windows[i].mem; in pcic_reset_socket()
4676 mem->pcw_status &= ~PCW_ENABLED; in pcic_reset_socket()
4687 mutex_exit(&pcic->pc_lock); in pcic_reset_socket()
4699 pcicdev_t *pcic = anp->an_private; in pcic_set_interrupt()
4707 pcic->pc_intr_mode); in pcic_set_interrupt()
4710 (void *)pcic->irq_top, (void *)handler->handler, in pcic_set_interrupt()
4711 handler->handler_id); in pcic_set_interrupt()
4726 switch (pcic->pc_intr_mode) { in pcic_set_interrupt()
4729 * We only allow above-lock-level IO IRQ handlers in pcic_set_interrupt()
4733 mutex_enter(&pcic->intr_lock); in pcic_set_interrupt()
4735 if (pcic->irq_top == NULL) { in pcic_set_interrupt()
4736 pcic->irq_top = intr; in pcic_set_interrupt()
4737 pcic->irq_current = pcic->irq_top; in pcic_set_interrupt()
4739 while (pcic->irq_current->next != NULL) in pcic_set_interrupt()
4740 pcic->irq_current = pcic->irq_current->next; in pcic_set_interrupt()
4741 pcic->irq_current->next = intr; in pcic_set_interrupt()
4742 pcic->irq_current = pcic->irq_current->next; in pcic_set_interrupt()
4745 pcic->irq_current->intr = in pcic_set_interrupt()
4746 (ddi_intr_handler_t *)handler->handler; in pcic_set_interrupt()
4747 pcic->irq_current->handler_id = handler->handler_id; in pcic_set_interrupt()
4748 pcic->irq_current->arg1 = handler->arg1; in pcic_set_interrupt()
4749 pcic->irq_current->arg2 = handler->arg2; in pcic_set_interrupt()
4750 pcic->irq_current->socket = handler->socket; in pcic_set_interrupt()
4752 mutex_exit(&pcic->intr_lock); in pcic_set_interrupt()
4754 handler->iblk_cookie = &pcic->pc_pri; in pcic_set_interrupt()
4755 handler->idev_cookie = &pcic->pc_dcookie; in pcic_set_interrupt()
4759 intr->intr = (ddi_intr_handler_t *)handler->handler; in pcic_set_interrupt()
4760 intr->handler_id = handler->handler_id; in pcic_set_interrupt()
4761 intr->arg1 = handler->arg1; in pcic_set_interrupt()
4762 intr->arg2 = handler->arg2; in pcic_set_interrupt()
4763 intr->socket = handler->socket; in pcic_set_interrupt()
4764 intr->irq = handler->irq; in pcic_set_interrupt()
4771 mutex_enter(&pcic->pc_lock); in pcic_set_interrupt()
4772 if (pcic->pc_handlers == NULL) { in pcic_set_interrupt()
4773 pcic->pc_handlers = intr; in pcic_set_interrupt()
4774 intr->next = intr->prev = intr; in pcic_set_interrupt()
4776 insque(intr, pcic->pc_handlers); in pcic_set_interrupt()
4778 mutex_exit(&pcic->pc_lock); in pcic_set_interrupt()
4792 (void *)pcic->irq_top, value); in pcic_set_interrupt()
4817 * multifunction: this requires sharing the interrupts on a per-socket
4824 pcicdev_t *pcic = anp->an_private; in pcic_clear_interrupt()
4839 pcic->pc_intr_mode); in pcic_clear_interrupt()
4842 (void *)pcic->irq_top, (void *)handler->handler, in pcic_clear_interrupt()
4843 handler->handler_id); in pcic_clear_interrupt()
4847 switch (pcic->pc_intr_mode) { in pcic_clear_interrupt()
4850 mutex_enter(&pcic->intr_lock); in pcic_clear_interrupt()
4851 if (pcic->irq_top == NULL) { in pcic_clear_interrupt()
4852 mutex_exit(&pcic->intr_lock); in pcic_clear_interrupt()
4857 pcic->irq_current = pcic->irq_top; in pcic_clear_interrupt()
4859 while ((pcic->irq_current != NULL) && in pcic_clear_interrupt()
4860 (pcic->irq_current->handler_id != in pcic_clear_interrupt()
4861 handler->handler_id)) { in pcic_clear_interrupt()
4862 intr = pcic->irq_current; in pcic_clear_interrupt()
4863 pcic->irq_current = pcic->irq_current->next; in pcic_clear_interrupt()
4866 if (pcic->irq_current == NULL) { in pcic_clear_interrupt()
4867 mutex_exit(&pcic->intr_lock); in pcic_clear_interrupt()
4872 intr->next = pcic->irq_current->next; in pcic_clear_interrupt()
4874 pcic->irq_top = pcic->irq_current->next; in pcic_clear_interrupt()
4877 current = pcic->irq_current; in pcic_clear_interrupt()
4878 pcic->irq_current = pcic->irq_top; in pcic_clear_interrupt()
4879 mutex_exit(&pcic->intr_lock); in pcic_clear_interrupt()
4886 mutex_enter(&pcic->pc_lock); in pcic_clear_interrupt()
4891 if (intr->handler_id == handler->handler_id) { in pcic_clear_interrupt()
4892 i = intr->irq & PCIC_INTR_MASK; in pcic_clear_interrupt()
4893 if (--pcic_irq_map[i].count == 0) { in pcic_clear_interrupt()
4894 /* multi-handler form */ in pcic_clear_interrupt()
4895 (void) ddi_intr_disable(pcic->pc_intr_htblp[i]); in pcic_clear_interrupt()
4897 pcic->pc_intr_htblp[i]); in pcic_clear_interrupt()
4898 (void) ddi_intr_free(pcic->pc_intr_htblp[i]); in pcic_clear_interrupt()
4899 (void) pcmcia_return_intr(pcic->dip, i); in pcic_clear_interrupt()
4909 (void *)intr->iblk_cookie); in pcic_clear_interrupt()
4913 prev->next = intr->next; in pcic_clear_interrupt()
4915 intr = prev->next; in pcic_clear_interrupt()
4918 intr = intr->next; in pcic_clear_interrupt()
4922 mutex_exit(&pcic->pc_lock); in pcic_clear_interrupt()
4929 (void *)pcic->irq_top); in pcic_clear_interrupt()
4943 {"if-status ", 1, "\020\1BVD1\2BVD2\3CD1\4CD2\5WP\6RDY\7PWR\10~GPI"},
4948 {"cd-gcr ", 0x16, "\020\1MDI16\2CRE\3GPIE\4GPIT\5CDR\6S/W"},
4950 {"int-gcr ", 3, "\020\5INTR\6IO\7~RST\10RI"},
4952 {"volt-sense", 0x1f, "\020\1A_VS1\2A_VS2\3B_VS1\4B_VS2"},
4953 {"volt-sel ", 0x2f, "\020\5EXTCONF\6BUSSELECT\7MIXEDV\10ISAV"},
4955 {"io-ctrl ", 7, "\020\1DS0\2IOCS0\3ZWS0\4WS0\5DS1\6IOS1\7ZWS1\10WS1"},
4956 {"io0-slow ", 8},
4957 {"io0-shi ", 9},
4958 {"io0-elow ", 0xa},
4959 {"io0-ehi ", 0xb},
4960 {"io1-slow ", 0xc},
4961 {"io1-shi ", 0xd},
4962 {"io1-elow ", 0xe},
4963 {"io1-ehi ", 0xf},
4964 {"mem0-slow ", 0x10},
4965 {"mem0-shi ", 0x11, "\020\7ZW\10DS"},
4966 {"mem0-elow ", 0x12},
4967 {"mem0-ehi ", 0x13, "\020\7WS0\10WS1"},
4968 {"card0-low ", 0x14},
4969 {"card0-hi ", 0x15, "\020\7AM\10WP"},
4970 {"mem1-slow ", 0x18},
4971 {"mem1-shi ", 0x19, "\020\7ZW\10DS"},
4972 {"mem1-elow ", 0x1a},
4973 {"mem1-ehi ", 0x1b, "\020\7WS0\10WS1"},
4974 {"card1-low ", 0x1c},
4975 {"card1-hi ", 0x1d, "\020\7AM\10WP"},
4976 {"mem2-slow ", 0x20},
4977 {"mem2-shi ", 0x21, "\020\7ZW\10DS"},
4978 {"mem2-elow ", 0x22},
4979 {"mem2-ehi ", 0x23, "\020\7WS0\10WS1"},
4980 {"card2-low ", 0x24},
4981 {"card2-hi ", 0x25, "\020\7AM\10WP"},
4982 {"mem3-slow ", 0x28},
4983 {"mem3-shi ", 0x29, "\020\7ZW\10DS"},
4984 {"mem3-elow ", 0x2a},
4985 {"mem3-ehi ", 0x2b, "\020\7WS0\10WS1"},
4986 {"card3-low ", 0x2c},
4987 {"card3-hi ", 0x2d, "\020\7AM\10WP"},
4989 {"mem4-slow ", 0x30},
4990 {"mem4-shi ", 0x31, "\020\7ZW\10DS"},
4991 {"mem4-elow ", 0x32},
4992 {"mem4-ehi ", 0x33, "\020\7WS0\10WS1"},
4993 {"card4-low ", 0x34},
4994 {"card4-hi ", 0x35, "\020\7AM\10WP"},
5004 {"misc-ctl1 ", 0x16, "\20\2VCC3\3PMI\4PSI\5SPKR\10INPACK"},
5006 {"misc-ctl2 ", 0x1e, "\20\1XCLK\2LOW\3SUSP\4CORE5V\5TCD\10RIOUT"},
5007 {"chip-info ", 0x1f, "\20\6DUAL"},
5008 {"IO-offlow0", 0x36},
5009 {"IO-offhi0 ", 0x37},
5010 {"IO-offlow1", 0x38},
5011 {"IO-offhi1 ", 0x39},
5016 {"ext-ctl-1 ", 0x03,
5018 {"misc-ctl3 ", 0x25, "\20\5HWSUSP"},
5019 {"mem0-up ", 0x05},
5020 {"mem1-up ", 0x06},
5021 {"mem2-up ", 0x07},
5022 {"mem3-up ", 0x08},
5023 {"mem4-up ", 0x09},
5034 cmn_err(CE_CONT, "--------- Cirrus Logic Registers --------\n"); in xxdmp_cl_regs()
5035 for (buff[0] = '\0', i = 0; cregs[i].name != NULL && len-- != 0; i++) { in xxdmp_cl_regs()
5066 cmn_err(CE_CONT, "\tsetup-tim0\t%x\tsetup-tim1\t%x\n", i, j); in xxdmp_cl_regs()
5070 cmn_err(CE_CONT, "\tcmd-tim0 \t%x\tcmd-tim1 \t%x\n", i, j); in xxdmp_cl_regs()
5074 cmn_err(CE_CONT, "\trcvr-tim0 \t%x\trcvr-tim1 \t%x\n", i, j); in xxdmp_cl_regs()
5076 cmn_err(CE_CONT, "--------- Extended Registers --------\n"); in xxdmp_cl_regs()
5078 for (buff[0] = '\0', i = 0; cxregs[i].name != NULL && len-- != 0; i++) { in xxdmp_cl_regs()
5115 "----------- PCIC Registers for socket %d---------\n", in xxdmp_all_regs()
5120 for (buff[0] = '\0', i = 0; iregs[i].name != NULL && len-- != 0; i++) { in xxdmp_all_regs()
5142 switch (pcic->pc_type) { in xxdmp_all_regs()
5163 pcic->pc_sockets[socket].pcs_flags |= PCS_WAITING; in pcic_mswait()
5164 pcic_mutex_exit(&pcic->pc_lock); in pcic_mswait()
5166 pcic_mutex_enter(&pcic->pc_lock); in pcic_mswait()
5167 pcic->pc_sockets[socket].pcs_flags &= ~PCS_WAITING; in pcic_mswait()
5195 xxdmp_all_regs(pcic, socket, -1); in pcic_check_ready()
5196 pcic_debug -= 4; in pcic_check_ready()
5210 switch (pcic->pc_io_type) { in clext_reg_read()
5212 val = ddi_get8(pcic->handle, in clext_reg_read()
5213 pcic->ioaddr + CB_CLEXT_OFFSET + ext_reg); in clext_reg_read()
5227 switch (pcic->pc_io_type) { in clext_reg_write()
5229 ddi_put8(pcic->handle, in clext_reg_write()
5230 pcic->ioaddr + CB_CLEXT_OFFSET + ext_reg, value); in clext_reg_write()
5264 * pcic_find_pci_type - Find and return PCI-PCMCIA adapter type
5271 vend = ddi_getprop(DDI_DEV_T_ANY, pcic->dip, in pcic_find_pci_type()
5273 "vendor-id", -1); in pcic_find_pci_type()
5274 device = ddi_getprop(DDI_DEV_T_ANY, pcic->dip, in pcic_find_pci_type()
5276 "device-id", -1); in pcic_find_pci_type()
5279 pcic->pc_type = device; in pcic_find_pci_type()
5280 pcic->pc_chipname = "PCI:unknown"; in pcic_find_pci_type()
5284 pcic->pc_chipname = PCIC_TYPE_i82092; in pcic_find_pci_type()
5287 pcic->pc_chipname = PCIC_TYPE_PD6729; in pcic_find_pci_type()
5297 pcic->pc_chipname = PCIC_TYPE_PD6730; in pcic_find_pci_type()
5298 pcic->pc_type = PCIC_CL_PD6730; in pcic_find_pci_type()
5302 pcic->pc_chipname = PCIC_TYPE_PD6730; in pcic_find_pci_type()
5305 pcic->pc_chipname = PCIC_TYPE_PD6832; in pcic_find_pci_type()
5308 pcic->pc_chipname = PCIC_TYPE_34C90; in pcic_find_pci_type()
5311 pcic->pc_chipname = PCIC_TYPE_TOPIC95; in pcic_find_pci_type()
5314 pcic->pc_chipname = PCIC_TYPE_TOPIC100; in pcic_find_pci_type()
5317 pcic->pc_chipname = PCIC_TYPE_PCI1031; in pcic_find_pci_type()
5320 pcic->pc_chipname = PCIC_TYPE_PCI1130; in pcic_find_pci_type()
5323 pcic->pc_chipname = PCIC_TYPE_PCI1131; in pcic_find_pci_type()
5326 pcic->pc_chipname = PCIC_TYPE_PCI1250; in pcic_find_pci_type()
5329 pcic->pc_chipname = PCIC_TYPE_PCI1225; in pcic_find_pci_type()
5332 pcic->pc_chipname = PCIC_TYPE_PCI1410; in pcic_find_pci_type()
5335 pcic->pc_chipname = PCIC_TYPE_PCI1510; in pcic_find_pci_type()
5338 pcic->pc_chipname = PCIC_TYPE_PCI1520; in pcic_find_pci_type()
5341 pcic->pc_chipname = PCIC_TYPE_PCI1221; in pcic_find_pci_type()
5344 pcic->pc_chipname = PCIC_TYPE_PCI1050; in pcic_find_pci_type()
5347 pcic->pc_chipname = PCIC_TYPE_1410; in pcic_find_pci_type()
5350 pcic->pc_chipname = PCIC_TYPE_OZ6912; in pcic_find_pci_type()
5353 pcic->pc_chipname = PCIC_TYPE_RL5C466; in pcic_find_pci_type()
5356 pcic->pc_chipname = PCIC_TYPE_PCI1420; in pcic_find_pci_type()
5359 pcic->pc_chipname = PCIC_TYPE_1420; in pcic_find_pci_type()
5364 pcic->pc_chipname = PCIC_TYPE_TOSHIBA; in pcic_find_pci_type()
5365 pcic->pc_type = PCIC_TOSHIBA_VENDOR; in pcic_find_pci_type()
5368 pcic->pc_chipname = PCIC_TYPE_TI; in pcic_find_pci_type()
5369 pcic->pc_type = PCIC_TI_VENDOR; in pcic_find_pci_type()
5372 pcic->pc_chipname = PCIC_TYPE_O2MICRO; in pcic_find_pci_type()
5373 pcic->pc_type = PCIC_O2MICRO_VENDOR; in pcic_find_pci_type()
5376 pcic->pc_chipname = PCIC_TYPE_RICOH; in pcic_find_pci_type()
5377 pcic->pc_type = PCIC_RICOH_VENDOR; in pcic_find_pci_type()
5380 if (!(pcic->pc_flags & PCF_CARDBUS)) in pcic_find_pci_type()
5382 pcic->pc_chipname = PCIC_TYPE_YENTA; in pcic_find_pci_type()
5392 uchar_t ppirr = ddi_get8(pcic->cfg_handle, in pcic_82092_smiirq_ctl()
5393 pcic->cfgaddr + PCIC_82092_PPIRR); in pcic_82092_smiirq_ctl()
5409 ddi_put8(pcic->cfg_handle, pcic->cfgaddr + PCIC_82092_PPIRR, in pcic_82092_smiirq_ctl()
5421 mutex_enter(&sockp->pcs_pcic->pc_lock); in pcic_cd_softint()
5422 if (sockp->pcs_cd_softint_flg) { in pcic_cd_softint()
5424 sockp->pcs_cd_softint_flg = 0; in pcic_cd_softint()
5426 status = pcic_getb(sockp->pcs_pcic, sockp->pcs_socket, in pcic_cd_softint()
5428 pcic_handle_cd_change(sockp->pcs_pcic, sockp, status); in pcic_cd_softint()
5430 mutex_exit(&sockp->pcs_pcic->pc_lock); in pcic_cd_softint()
5459 debounce = sockp->pcs_debounce_id; in pcic_handle_cd_change()
5460 sockp->pcs_debounce_id = 0; in pcic_handle_cd_change()
5464 * only two states that we are concerned with - the state in pcic_handle_cd_change()
5475 pcic_err(pcic->dip, 6, in pcic_handle_cd_change()
5477 " deb 0x%p\n", ddi_get_instance(pcic->dip), in pcic_handle_cd_change()
5478 sockp->pcs_socket, status, debounce); in pcic_handle_cd_change()
5482 sockp->pcs_flags &= ~(PCS_CARD_REMOVED|PCS_CARD_CBREM); in pcic_handle_cd_change()
5483 if (!(sockp->pcs_flags & PCS_CARD_PRESENT)) { in pcic_handle_cd_change()
5486 pcic_err(pcic->dip, 8, "New card (0x%x)\n", sockp->pcs_flags); in pcic_handle_cd_change()
5490 pcic_err(pcic->dip, 8, "CBus PS (0x%x)\n", cbps); in pcic_handle_cd_change()
5499 ddi_get_name(pcic->dip), in pcic_handle_cd_change()
5500 ddi_get_instance(pcic->dip), in pcic_handle_cd_change()
5507 sockp->pcs_flags |= PCS_CARD_PRESENT; in pcic_handle_cd_change()
5513 pcic_err(pcic->dip, in pcic_handle_cd_change()
5515 sockp->pcs_flags |= PCS_CARD_IS16BIT; in pcic_handle_cd_change()
5517 if (pcic->pc_callback) { in pcic_handle_cd_change()
5521 pcic->dip, PCM_DEVICETYPE, in pcic_handle_cd_change()
5523 PC_CALLBACK(pcic->dip, in pcic_handle_cd_change()
5524 pcic->pc_cb_arg, in pcic_handle_cd_change()
5526 sockp->pcs_socket); in pcic_handle_cd_change()
5529 pcic_err(pcic->dip, in pcic_handle_cd_change()
5532 if (pcic->pc_flags & PCF_CARDBUS) { in pcic_handle_cd_change()
5533 sockp->pcs_flags |= in pcic_handle_cd_change()
5573 pcic_err(pcic->dip, 5, in pcic_handle_cd_change()
5575 ddi_get_instance(pcic->dip), in pcic_handle_cd_change()
5576 sockp->pcs_socket); in pcic_handle_cd_change()
5582 if (!(sockp->pcs_flags & PCS_CARD_PRESENT)) { in pcic_handle_cd_change()
5596 if (sockp->pcs_flags & PCS_CARD_PRESENT) { in pcic_handle_cd_change()
5597 if (pcic->pc_flags & PCF_CBPWRCTL) { in pcic_handle_cd_change()
5600 pcic_putb(pcic, sockp->pcs_socket, in pcic_handle_cd_change()
5602 (void) pcic_getb(pcic, sockp->pcs_socket, in pcic_handle_cd_change()
5606 pcic_err(pcic->dip, 8, "Card removed\n"); in pcic_handle_cd_change()
5608 sockp->pcs_flags &= ~PCS_CARD_PRESENT; in pcic_handle_cd_change()
5610 if (sockp->pcs_flags & PCS_CARD_IS16BIT) { in pcic_handle_cd_change()
5611 sockp->pcs_flags &= ~PCS_CARD_IS16BIT; in pcic_handle_cd_change()
5612 if (pcic_do_removal && pcic->pc_callback) { in pcic_handle_cd_change()
5613 PC_CALLBACK(pcic->dip, pcic->pc_cb_arg, in pcic_handle_cd_change()
5614 PCE_CARD_REMOVAL, sockp->pcs_socket); in pcic_handle_cd_change()
5617 if (sockp->pcs_flags & PCS_CARD_ISCARDBUS) { in pcic_handle_cd_change()
5618 sockp->pcs_flags &= ~PCS_CARD_ISCARDBUS; in pcic_handle_cd_change()
5619 sockp->pcs_flags |= PCS_CARD_CBREM; in pcic_handle_cd_change()
5621 sockp->pcs_flags |= PCS_CARD_REMOVED; in pcic_handle_cd_change()
5625 if (debounce && (sockp->pcs_flags & PCS_CARD_REMOVED)) { in pcic_handle_cd_change()
5626 if (sockp->pcs_flags & PCS_CARD_CBREM) { in pcic_handle_cd_change()
5641 sockp->pcs_flags &= ~PCS_CARD_CBREM; in pcic_handle_cd_change()
5643 sockp->pcs_flags &= ~PCS_CARD_REMOVED; in pcic_handle_cd_change()
5657 pcic_err(pcic->dip, 8, "Queueing up debounce timeout for " in pcic_handle_cd_change()
5659 ddi_get_instance(pcic->dip), in pcic_handle_cd_change()
5660 sockp->pcs_socket); in pcic_handle_cd_change()
5662 sockp->pcs_debounce_id = in pcic_handle_cd_change()
5666 * We bug out here without re-enabling interrupts. They will in pcic_handle_cd_change()
5667 * be re-enabled when the debounce timeout swings through in pcic_handle_cd_change()
5680 irq = pcic_getb(pcic, sockp->pcs_socket, PCIC_MANAGEMENT_INT); in pcic_handle_cd_change()
5682 pcic_putb(pcic, sockp->pcs_socket, PCIC_MANAGEMENT_INT, irq); in pcic_handle_cd_change()
5686 sockp->pcs_flags &= ~PCS_DEBOUNCING; in pcic_handle_cd_change()
5688 pcic_err(pcic->dip, 7, "Leaving pcic_handle_cd_change\n"); in pcic_handle_cd_change()
5705 pcic->pc_io_type, (void *)pcic->handle, in pcic_getb()
5706 (void *)pcic->ioaddr); in pcic_getb()
5710 switch (pcic->pc_io_type) { in pcic_getb()
5712 return (ddi_get8(pcic->handle, in pcic_getb()
5713 pcic->ioaddr + CB_R2_OFFSET + reg)); in pcic_getb()
5716 ddi_put8(pcic->handle, pcic->ioaddr, work); in pcic_getb()
5717 return (ddi_get8(pcic->handle, pcic->ioaddr + 1)); in pcic_getb()
5733 pcic->pc_io_type, (void *)pcic->handle, in pcic_putb()
5734 (void *)pcic->ioaddr); in pcic_putb()
5739 switch (pcic->pc_io_type) { in pcic_putb()
5741 ddi_put8(pcic->handle, pcic->ioaddr + CB_R2_OFFSET + reg, in pcic_putb()
5746 ddi_put8(pcic->handle, pcic->ioaddr, work); in pcic_putb()
5747 ddi_put8(pcic->handle, pcic->ioaddr + 1, value); in pcic_putb()
5773 pcic->pc_type = PCIC_CL_PD6710; in pcic_ci_cirrus()
5775 pcic->pc_chipname = PCIC_TYPE_PD6720; in pcic_ci_cirrus()
5777 pcic->pc_chipname = PCIC_TYPE_PD6710; in pcic_ci_cirrus()
5784 pcic->pc_chipname = PCIC_TYPE_PD6722; in pcic_ci_cirrus()
5785 pcic->pc_type = PCIC_CL_PD6722; in pcic_ci_cirrus()
5801 ddi_put8(pcic->handle, pcic->ioaddr, PCIC_VADEM_P1); in pcic_vadem_enable()
5802 ddi_put8(pcic->handle, pcic->ioaddr, PCIC_VADEM_P2); in pcic_vadem_enable()
5803 ddi_put8(pcic->handle, pcic->ioaddr, pcic->pc_lastreg); in pcic_vadem_enable()
5830 pcic->pc_chipname = PCIC_VG_365; in pcic_ci_vadem()
5831 pcic->pc_type = PCIC_VADEM; in pcic_ci_vadem()
5834 pcic->pc_chipname = PCIC_VG_465; in pcic_ci_vadem()
5835 pcic->pc_type = PCIC_VADEM; in pcic_ci_vadem()
5836 pcic->pc_flags |= PCF_1SOCKET; in pcic_ci_vadem()
5839 pcic->pc_chipname = PCIC_VG_468; in pcic_ci_vadem()
5840 pcic->pc_type = PCIC_VADEM; in pcic_ci_vadem()
5843 pcic->pc_chipname = PCIC_VG_469; in pcic_ci_vadem()
5844 pcic->pc_type = PCIC_VADEM_VG469; in pcic_ci_vadem()
5863 pcic->pc_type = PCIC_RICOH; in pcic_ci_ricoh()
5864 pcic->pc_chipname = PCIC_TYPE_RF5C296; in pcic_ci_ricoh()
5867 pcic->pc_type = PCIC_RICOH; in pcic_ci_ricoh()
5868 pcic->pc_chipname = PCIC_TYPE_RF5C396; in pcic_ci_ricoh()
5955 if (ddi_getlongprop(DDI_DEV_T_ANY, pdip, 0, "bus-range", in pcic_init_assigned()
5957 if (bus_range->lo != bus_range->hi) in pcic_init_assigned()
5959 "%u->%u\n", bus_range->lo, bus_range->hi); in pcic_init_assigned()
5963 "%u->%u, cardbus isn't usable\n", in pcic_init_assigned()
5964 bus_range->lo, bus_range->hi); in pcic_init_assigned()
5968 pcic_err(pdip, 0, "!No bus-range property seems to " in pcic_init_assigned()
5979 "assigned-addresses", in pcic_init_assigned()
6004 regs[1].pci_size_low == 0x4000)) /* UB-IIi || UB-I */ in pcic_init_assigned()
6037 pci_p->pci_phys_hi = -1u; /* default invalid value */ in pcic_apply_avail_ranges()
6041 uint64_t range_end = range_p->pcic_range_caddrlo + in pcic_apply_avail_ranges()
6042 range_p->pcic_range_size; in pcic_apply_avail_ranges()
6043 uint64_t avail_end = pcic_p->phys_lo + pcic_p->phys_len; in pcic_apply_avail_ranges()
6045 if ((range_p->pcic_range_caddrhi != pcic_p->phys_hi) || in pcic_apply_avail_ranges()
6046 (range_p->pcic_range_caddrlo > pcic_p->phys_lo) || in pcic_apply_avail_ranges()
6050 pci_p->pci_phys_hi = range_p->pcic_range_paddrhi; in pcic_apply_avail_ranges()
6051 pci_p->pci_phys_mid = range_p->pcic_range_paddrmid; in pcic_apply_avail_ranges()
6052 pci_p->pci_phys_low = range_p->pcic_range_paddrlo in pcic_apply_avail_ranges()
6053 + (pcic_p->phys_lo - range_p->pcic_range_caddrlo); in pcic_apply_avail_ranges()
6054 pci_p->pci_size_hi = 0; in pcic_apply_avail_ranges()
6055 pci_p->pci_size_low = pcic_p->phys_len; in pcic_apply_avail_ranges()
6098 dev_info_t *dip = pcic->dip; in pcic_load_cardbus()
6106 pcic_mutex_exit(&pcic->pc_lock); in pcic_load_cardbus()
6109 s.socket = sockp->pcs_socket; in pcic_load_cardbus()
6130 if (pcic_reset_socket(dip, sockp->pcs_socket, in pcic_load_cardbus()
6135 g.socket = sockp->pcs_socket; in pcic_load_cardbus()
6140 s.socket = sockp->pcs_socket; in pcic_load_cardbus()
6154 retval = cardbus_load_cardbus(dip, sockp->pcs_socket, pcic->pc_base); in pcic_load_cardbus()
6161 pcic_mutex_enter(&pcic->pc_lock); in pcic_load_cardbus()
6170 dev_info_t *dip = pcic->dip; in pcic_unload_cardbus()
6173 pcic_mutex_exit(&pcic->pc_lock); in pcic_unload_cardbus()
6178 s.socket = sockp->pcs_socket; in pcic_unload_cardbus()
6188 pcic_mutex_enter(&pcic->pc_lock); in pcic_unload_cardbus()
6194 ASSERT(pcic->pc_io_type == PCIC_IO_TYPE_YENTA); in pcic_getcb()
6196 return (ddi_get32(pcic->handle, in pcic_getcb()
6197 (uint32_t *)(pcic->ioaddr + CB_CB_OFFSET + reg))); in pcic_getcb()
6203 ASSERT(pcic->pc_io_type == PCIC_IO_TYPE_YENTA); in pcic_putcb()
6205 ddi_put32(pcic->handle, in pcic_putcb()
6206 (uint32_t *)(pcic->ioaddr + CB_CB_OFFSET + reg), value); in pcic_putcb()
6218 switch (pcic->pc_type) { in pcic_enable_io_intr()
6238 /* route card functional interrupts to PCI interrupts */ in pcic_enable_io_intr()
6239 brdgctl = ddi_get16(pcic->cfg_handle, in pcic_enable_io_intr()
6240 (uint16_t *)(pcic->cfgaddr + PCI_CBUS_BRIDGE_CTRL)); in pcic_enable_io_intr()
6245 ddi_put16(pcic->cfg_handle, in pcic_enable_io_intr()
6246 (uint16_t *)(pcic->cfgaddr + PCI_CBUS_BRIDGE_CTRL), in pcic_enable_io_intr()
6249 (void) ddi_get16(pcic->cfg_handle, in pcic_enable_io_intr()
6250 (uint16_t *)(pcic->cfgaddr + PCI_CBUS_BRIDGE_CTRL)); in pcic_enable_io_intr()
6266 switch (pcic->pc_type) { in pcic_disable_io_intr()
6295 brdgctl = ddi_get16(pcic->cfg_handle, in pcic_disable_io_intr()
6296 (uint16_t *)(pcic->cfgaddr + PCI_CBUS_BRIDGE_CTRL)); in pcic_disable_io_intr()
6301 ddi_put16(pcic->cfg_handle, in pcic_disable_io_intr()
6302 (uint16_t *)(pcic->cfgaddr + PCI_CBUS_BRIDGE_CTRL), in pcic_disable_io_intr()
6305 (void) ddi_get16(pcic->cfg_handle, in pcic_disable_io_intr()
6306 (uint16_t *)(pcic->cfgaddr + PCI_CBUS_BRIDGE_CTRL)); in pcic_disable_io_intr()
6317 pcicdev_t *pcic = anp->an_private; in pcic_cb_enable_intr()
6319 mutex_enter(&pcic->pc_lock); in pcic_cb_enable_intr()
6320 pcic_enable_io_intr(pcic, 0, pcic->pc_sockets[0].pcs_irq); in pcic_cb_enable_intr()
6321 mutex_exit(&pcic->pc_lock); in pcic_cb_enable_intr()
6328 pcicdev_t *pcic = anp->an_private; in pcic_cb_disable_intr()
6330 mutex_enter(&pcic->pc_lock); in pcic_cb_disable_intr()
6332 mutex_exit(&pcic->pc_lock); in pcic_cb_disable_intr()
6371 pci_config_get16(pcic->cfg_handle, PCI_CONF_STAT); in pcic_fault()
6373 pci_config_get16(pcic->cfg_handle, 0x16); in pcic_fault()
6377 cardbus_dump_pci_config(pcic->dip); in pcic_fault()
6381 (void) sprintf(nm, "%s-%d", ddi_driver_name(pcic->dip), in pcic_fault()
6382 ddi_get_instance(pcic->dip)); in pcic_fault()
6393 pci_config_put16(pcic->cfg_handle, in pcic_fault()
6395 pci_config_put16(pcic->cfg_handle, 0x16, pci_cfg_sec_stat); in pcic_fault()
6421 pcic_mutex_enter(&pcic->pc_lock); /* protect the registers */ in pcic_do_resume()
6422 for (i = 0; i < pcic->pc_numsockets; i++) { in pcic_do_resume()
6425 if (pcic->pc_flags & PCF_USE_SMI) in pcic_do_resume()
6429 pcic->pc_sockets[i].pcs_debounce_id = in pcic_do_resume()
6430 pcic_add_debqueue(&pcic->pc_sockets[i], in pcic_do_resume()
6433 pcic_mutex_exit(&pcic->pc_lock); /* protect the registers */ in pcic_do_resume()
6435 (void) pcmcia_wait_insert(pcic->dip); in pcic_do_resume()
6443 cfg = ddi_get8(pcic->cfg_handle, in pcic_do_resume()
6444 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG); in pcic_do_resume()
6447 ddi_put8(pcic->cfg_handle, in pcic_do_resume()
6448 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG, in pcic_do_resume()
6450 cfg = ddi_get8(pcic->cfg_handle, in pcic_do_resume()
6451 pcic->cfgaddr + PCIC_BRIDGE_CTL_REG); in pcic_do_resume()
6453 pcic_err(pcic->dip, 1, in pcic_do_resume()
6465 pcic_mutex_enter(&pcs->pcs_pcic->pc_lock); in pcic_debounce()
6466 pcs->pcs_flags &= ~PCS_STARTING; in pcic_debounce()
6467 stschng = pcic_getb(pcs->pcs_pcic, pcs->pcs_socket, in pcic_debounce()
6469 status = pcic_getb(pcs->pcs_pcic, pcs->pcs_socket, in pcic_debounce()
6472 pcic_err(pcs->pcs_pcic->dip, 8, in pcic_debounce()
6475 (void *)pcs, (void *) pcs->pcs_pcic->dip, pcs->pcs_socket, in pcic_debounce()
6476 status, stschng, pcs->pcs_flags); in pcic_debounce()
6479 pcic_putb(pcs->pcs_pcic, pcs->pcs_socket, PCIC_CARD_STATUS_CHANGE, in pcic_debounce()
6481 pcic_handle_cd_change(pcs->pcs_pcic, pcs, status); in pcic_debounce()
6482 pcic_mutex_exit(&pcs->pcs_pcic->pc_lock); in pcic_debounce()
6502 if (lastt >= debp->expire) { in pcic_deb_thread()
6503 pcic_deb_queue = debp->next; in pcic_deb_thread()
6505 pcic_debounce(debp->pcs); in pcic_deb_thread()
6510 &pcic_deb_mtx, debp->expire); in pcic_deb_thread()
6532 dbp->expire = lbolt + clocks; in pcic_add_debqueue()
6533 dbp->pcs = pcs; in pcic_add_debqueue()
6536 if (dbp->expire > (*dbpp)->expire) in pcic_add_debqueue()
6537 dbpp = &((*dbpp)->next); in pcic_add_debqueue()
6541 dbp->next = *dbpp; in pcic_add_debqueue()
6560 *dbpp = dbp->next; in pcic_rm_debqueue()
6569 dbpp = &((*dbpp)->next); in pcic_rm_debqueue()
6583 /* power setup -- if necessary */ in pcic_exca_powerctl()
6587 pcic_err(pcic->dip, 6, in pcic_exca_powerctl()
6611 * so we can just use it -- this is good since we can't in pcic_exca_powerctl()
6620 pcic_err(pcic->dip, 8, in pcic_exca_powerctl()
6624 pcic_err(pcic->dip, 8, in pcic_exca_powerctl()
6679 pcic_err(pcic->dip, 8, in pcic_exca_powerctl()
6702 pcic_socket_t *sockp = &pcic->pc_sockets[socket]; in pcic_cbus_powerctl()
6706 ind = pcic_power[sockp->pcs_vpp1].PowerLevel/10; in pcic_cbus_powerctl()
6709 ind = pcic_power[sockp->pcs_vcc].PowerLevel/10; in pcic_cbus_powerctl()
6715 pcic_err(pcic->dip, 6, in pcic_cbus_powerctl()
6717 "cbctl 0x%x->0x%x\n", in pcic_cbus_powerctl()
6718 socket, sockp->pcs_vcc, sockp->pcs_vpp1, orig_cbctl, cbctl); in pcic_cbus_powerctl()
6740 * set-up time is 20 ms, some PC-Card bridge requires longer in pcic_cbus_powerctl()
6758 pcic_err(pcic->dip, 8, in pcic_cbus_powerctl()
6780 cbctl, orig_cbctl, sockp->pcs_vcc, sockp->pcs_vpp1); in pcic_cbus_powerctl()
6799 (void *) debp, (int)debp->expire, (void *) debp->next, in pcic_dump_debqueue()
6800 debp->pcs->pcs_debounce_id); in pcic_dump_debqueue()
6801 debp = debp->next; in pcic_dump_debqueue()