Lines Matching +full:open +full:- +full:pic

43 #include <sys/open.h>
114 ac_open, /* open */
155 static kmutex_t ac_attachcnt_mutex; /* ac_attachcnt lock - attach/detach */
264 softsp->dip = devi; in ac_attach()
267 softsp->pdip = ddi_get_parent(softsp->dip); in ac_attach()
268 if ((softsp->board = (int)ddi_getprop(DDI_DEV_T_ANY, softsp->pdip, in ac_attach()
269 DDI_PROP_DONTPASS, OBP_BOARDNUM, -1)) == -1) { in ac_attach()
279 if (ddi_map_regs(softsp->dip, 0, (caddr_t *)&softsp->ac_base, 0, 0)) { in ac_attach()
285 softsp->ac_id = (uint32_t *)softsp->ac_base; in ac_attach()
286 softsp->ac_memctl = (uint64_t *)((char *)softsp->ac_base + in ac_attach()
288 softsp->ac_memdecode0 = (uint64_t *)((char *)softsp->ac_base + in ac_attach()
290 softsp->ac_memdecode1 = (uint64_t *)((char *)softsp->ac_base + in ac_attach()
292 softsp->ac_counter = (uint64_t *)((char *)softsp->ac_base + in ac_attach()
294 softsp->ac_mccr = (uint32_t *)((char *)softsp->ac_base + in ac_attach()
299 "pm-hardware-state", "no-suspend-resume"); in ac_attach()
302 list = fhc_bdlist_lock(softsp->board); in ac_attach()
306 instance, softsp->board); in ac_attach()
310 list->sc.ac_compid = *softsp->ac_id; in ac_attach()
312 list->ac_softsp = softsp; in ac_attach()
314 if (list->sc.type == CPU_BOARD || list->sc.type == MEM_BOARD) { in ac_attach()
332 fhc_del_memloc(softsp->board); in ac_attach()
375 list = fhc_bdlist_lock(softsp->board); in ac_detach()
377 if (fhc_bd_detachable(softsp->board)) in ac_detach()
387 ASSERT(list->ac_softsp == softsp); in ac_detach()
389 if (list->sc.type == CPU_BOARD || list->sc.type == MEM_BOARD) { in ac_detach()
397 if (softsp->bank[Bank0].busy != 0 || in ac_detach()
398 softsp->bank[Bank0].ostate == SYSC_CFGA_OSTATE_CONFIGURED || in ac_detach()
399 softsp->bank[Bank1].busy != 0 || in ac_detach()
400 softsp->bank[Bank1].ostate == SYSC_CFGA_OSTATE_CONFIGURED) { in ac_detach()
410 * Flush all E-caches to remove references to this in ac_detach()
415 * xc_one returns silently for non-existant CPUs. in ac_detach()
421 list->ac_softsp = NULL; in ac_detach()
427 ddi_unmap_regs(softsp->dip, 0, (caddr_t *)&softsp->ac_base, 0, 0); in ac_detach()
466 board = fhc_bdlist_lock(softsp->board); in ac_open()
491 ac_mem_test_stop_on_close(softsp->board, AC_GETBANK(getminor(devt))); in ac_close()
506 pkt->cmd_cfga.force = ac_cmd32.force; in ac_pkt_init()
507 pkt->cmd_cfga.test = ac_cmd32.test; in ac_pkt_init()
508 pkt->cmd_cfga.arg = ac_cmd32.arg; in ac_pkt_init()
509 pkt->cmd_cfga.errtype = ac_cmd32.errtype; in ac_pkt_init()
510 pkt->cmd_cfga.outputstr = in ac_pkt_init()
512 pkt->cmd_cfga.private = in ac_pkt_init()
516 if (ddi_copyin((void *)arg, &(pkt->cmd_cfga), in ac_pkt_init()
520 pkt->errbuf = kmem_zalloc(SYSC_OUTPUT_LEN, KM_SLEEP); in ac_pkt_init()
532 if (ddi_copyout(&(pkt->cmd_cfga.errtype), in ac_pkt_fini()
533 (void *)&(((ac_cfga_cmd32_t *)arg)->errtype), in ac_pkt_fini()
539 if (ddi_copyout(&(pkt->cmd_cfga.errtype), in ac_pkt_fini()
540 (void *)&(((ac_cfga_cmd_t *)arg)->errtype), in ac_pkt_fini()
545 if ((ret != FALSE) && ((pkt->cmd_cfga.outputstr != NULL) && in ac_pkt_fini()
546 (ddi_copyout(pkt->errbuf, pkt->cmd_cfga.outputstr, in ac_pkt_fini()
551 kmem_free(pkt->errbuf, SYSC_OUTPUT_LEN); in ac_pkt_fini()
612 pkt->softsp = softsp; in ac_ioctl()
613 pkt->bank = AC_GETBANK(getminor(devt)); in ac_ioctl()
622 if (pkt->cmd_cfga.private != NULL) { in ac_ioctl()
642 if (pkt->cmd_cfga.private != NULL) { in ac_ioctl()
729 * create the unix-misc kstat for address controller in ac_add_kstats()
732 if ((ac_ksp = kstat_create("unix", softsp->board, in ac_add_kstats()
737 ddi_get_instance(softsp->dip)); in ac_add_kstats()
741 ac_named_ksp = (struct ac_kstat *)(ac_ksp->ks_data); in ac_add_kstats()
744 kstat_named_init(&ac_named_ksp->ac_memctl, in ac_add_kstats()
748 kstat_named_init(&ac_named_ksp->ac_memdecode0, in ac_add_kstats()
752 kstat_named_init(&ac_named_ksp->ac_memdecode1, in ac_add_kstats()
756 kstat_named_init(&ac_named_ksp->ac_mccr, in ac_add_kstats()
760 kstat_named_init(&ac_named_ksp->ac_counter, in ac_add_kstats()
764 kstat_named_init(&ac_named_ksp->ac_bank0_status, in ac_add_kstats()
768 kstat_named_init(&ac_named_ksp->ac_bank1_status, in ac_add_kstats()
772 ac_ksp->ks_update = ac_misc_kstat_update; in ac_add_kstats()
773 ac_ksp->ks_private = (void *)softsp; in ac_add_kstats()
774 softsp->ac_ksp = ac_ksp; in ac_add_kstats()
785 ac_add_picN_kstats(softsp->dip); in ac_add_kstats()
792 * This provides access to the %pcr and %pic in ac_add_kstats()
798 ddi_get_instance(softsp->dip), "counters", in ac_add_kstats()
803 ddi_get_instance(softsp->dip)); in ac_add_kstats()
807 (struct kstat_named *)(ac_counters_ksp->ks_data); in ac_add_kstats()
819 ac_counters_ksp->ks_update = ac_counters_kstat_update; in ac_add_kstats()
820 ac_counters_ksp->ks_private = (void *)softsp; in ac_add_kstats()
824 softsp->ac_counters_ksp = ac_counters_ksp; in ac_add_kstats()
828 * called from ac_add_kstats() to create a kstat for each %pic
829 * that the AC supports. These (read-only) kstats export the
830 * event names and %pcr masks that each %pic supports.
841 * set to ddi_get_instance(softsp->dip).
859 * We declare an array of event-names and event-masks. in ac_add_picN_kstats()
896 * array of clear masks for each pic. in ac_add_picN_kstats()
898 * each pic. in ac_add_picN_kstats()
908 int event, pic; in ac_add_picN_kstats() local
913 for (pic = 0; pic < AC_NUM_PICS; pic++) { in ac_add_picN_kstats()
918 (void) sprintf(pic_name, "pic%d", pic); /* pic0, pic1 ... */ in ac_add_picN_kstats()
919 if ((ac_picN_ksp[pic] = kstat_create("ac", in ac_add_picN_kstats()
927 if (pic == 1) { in ac_add_picN_kstats()
934 (struct kstat_named *)(ac_picN_ksp[pic]->ks_data); in ac_add_picN_kstats()
940 if (pic == 1) in ac_add_picN_kstats()
953 /* event-name */ in ac_add_picN_kstats()
965 ac_clear_pic[pic].pcr_mask; in ac_add_picN_kstats()
967 /* event-name */ in ac_add_picN_kstats()
969 ac_clear_pic[pic].event_name, in ac_add_picN_kstats()
972 kstat_install(ac_picN_ksp[pic]); in ac_add_picN_kstats()
981 int pic; in ac_del_kstats() local
984 ac_ksp = softsp->ac_ksp; in ac_del_kstats()
985 softsp->ac_ksp = NULL; in ac_del_kstats()
987 ASSERT(ac_ksp->ks_private == (void *)softsp); in ac_del_kstats()
992 ac_ksp = softsp->ac_counters_ksp; in ac_del_kstats()
993 softsp->ac_counters_ksp = NULL; in ac_del_kstats()
995 ASSERT(ac_ksp->ks_private == (void *)softsp); in ac_del_kstats()
1006 ac_attachcnt --; in ac_del_kstats()
1008 for (pic = 0; pic < AC_NUM_PICS; pic++) { in ac_del_kstats()
1009 if (ac_picN_ksp[pic] != (kstat_t *)NULL) { in ac_del_kstats()
1010 kstat_delete(ac_picN_ksp[pic]); in ac_del_kstats()
1011 ac_picN_ksp[pic] = NULL; in ac_del_kstats()
1065 acksp = (struct ac_kstat *)ksp->ks_data; in ac_misc_kstat_update()
1066 softsp = (struct ac_soft_state *)ksp->ks_private; in ac_misc_kstat_update()
1068 ASSERT(softsp->ac_ksp == NULL || ksp == softsp->ac_ksp); in ac_misc_kstat_update()
1070 /* this is a read-only kstat. Bail out on a write */ in ac_misc_kstat_update()
1078 acksp->ac_memctl.value.ui64 = *softsp->ac_memctl; in ac_misc_kstat_update()
1079 acksp->ac_memdecode0.value.ui64 = *softsp->ac_memdecode0; in ac_misc_kstat_update()
1080 acksp->ac_memdecode1.value.ui64 = *softsp->ac_memdecode1; in ac_misc_kstat_update()
1081 acksp->ac_mccr.value.ui32 = *softsp->ac_mccr; in ac_misc_kstat_update()
1082 acksp->ac_counter.value.ui64 = *softsp->ac_counter; in ac_misc_kstat_update()
1083 acksp->ac_bank0_status.value.c[0] = in ac_misc_kstat_update()
1084 ac_kstat_stat(softsp->bank[0].rstate, in ac_misc_kstat_update()
1085 softsp->bank[0].ostate); in ac_misc_kstat_update()
1086 acksp->ac_bank0_status.value.c[1] = in ac_misc_kstat_update()
1087 ac_kstat_cond(softsp->bank[0].condition); in ac_misc_kstat_update()
1088 acksp->ac_bank1_status.value.c[0] = in ac_misc_kstat_update()
1089 ac_kstat_stat(softsp->bank[1].rstate, in ac_misc_kstat_update()
1090 softsp->bank[1].ostate); in ac_misc_kstat_update()
1091 acksp->ac_bank1_status.value.c[1] = in ac_misc_kstat_update()
1092 ac_kstat_cond(softsp->bank[1].condition); in ac_misc_kstat_update()
1104 ac_counters_data = (struct kstat_named *)ksp->ks_data; in ac_counters_kstat_update()
1105 softsp = (struct ac_soft_state *)ksp->ks_private; in ac_counters_kstat_update()
1109 * return the AC counters to hot-plug mode after the in ac_counters_kstat_update()
1116 return (-1); in ac_counters_kstat_update()
1121 * Write the %pcr value to the softsp->ac_mccr. in ac_counters_kstat_update()
1123 * %pic. in ac_counters_kstat_update()
1125 *softsp->ac_mccr = in ac_counters_kstat_update()
1129 * Read %pcr and %pic register values and write them in ac_counters_kstat_update()
1134 ac_counters_data[0].value.ui64 = *softsp->ac_mccr; in ac_counters_kstat_update()
1136 pic_register = *softsp->ac_counter; in ac_counters_kstat_update()
1138 * ac pic register: in ac_counters_kstat_update()
1163 *(softsp->ac_memdecode0) : *(softsp->ac_memdecode1); in ac_get_memory_status()
1166 softsp->bank[id].busy = 0; in ac_get_memory_status()
1167 softsp->bank[id].status_change = ddi_get_time(); in ac_get_memory_status()
1173 softsp->bank[id].real_size = softsp->bank[id].use_size = in ac_get_memory_status()
1174 (id == Bank0) ? (grp_size / INTLV0(*softsp->ac_memctl)) : in ac_get_memory_status()
1175 (grp_size / INTLV1(*softsp->ac_memctl)); in ac_get_memory_status()
1177 softsp->bank[id].real_size = softsp->bank[id].use_size = 0; in ac_get_memory_status()
1184 if (ddi_prop_op(DDI_DEV_T_ANY, softsp->dip, PROP_LEN_AND_VAL_ALLOC, in ac_get_memory_status()
1188 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_EMPTY; in ac_get_memory_status()
1189 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_UNCONFIGURED; in ac_get_memory_status()
1190 softsp->bank[id].condition = SYSC_CFGA_COND_UNKNOWN; in ac_get_memory_status()
1192 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_CONNECTED; in ac_get_memory_status()
1193 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_CONFIGURED; in ac_get_memory_status()
1194 softsp->bank[id].condition = SYSC_CFGA_COND_OK; in ac_get_memory_status()
1196 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_CONNECTED; in ac_get_memory_status()
1197 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_UNCONFIGURED; in ac_get_memory_status()
1198 softsp->bank[id].condition = SYSC_CFGA_COND_UNKNOWN; in ac_get_memory_status()
1200 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_DISCONNECTED; in ac_get_memory_status()
1201 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_UNCONFIGURED; in ac_get_memory_status()
1202 softsp->bank[id].condition = SYSC_CFGA_COND_UNUSABLE; in ac_get_memory_status()
1206 ddi_get_instance(softsp->dip), softsp->board, id, in ac_get_memory_status()
1210 softsp->bank[id].rstate = in ac_get_memory_status()
1212 softsp->bank[id].ostate = in ac_get_memory_status()
1214 softsp->bank[id].condition = in ac_get_memory_status()
1217 softsp->bank[id].rstate = in ac_get_memory_status()
1219 softsp->bank[id].ostate = in ac_get_memory_status()
1221 softsp->bank[id].condition = in ac_get_memory_status()
1230 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_CONNECTED; in ac_get_memory_status()
1231 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_CONFIGURED; in ac_get_memory_status()
1232 softsp->bank[id].condition = SYSC_CFGA_COND_OK; in ac_get_memory_status()
1235 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_EMPTY; in ac_get_memory_status()
1236 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_UNCONFIGURED; in ac_get_memory_status()
1237 softsp->bank[id].condition = SYSC_CFGA_COND_UNKNOWN; in ac_get_memory_status()
1242 if (softsp->bank[id].rstate == SYSC_CFGA_RSTATE_CONNECTED) { in ac_get_memory_status()
1246 ASSERT((*softsp->ac_memctl & AC_CSR_REFEN) != 0); in ac_get_memory_status()
1249 fhc_add_memloc(softsp->board, base_pa, grp_size); in ac_get_memory_status()
1258 *(softsp->ac_memdecode0) : *(softsp->ac_memdecode1); in ac_eval_memory_status()
1265 if (softsp->bank[id].rstate == SYSC_CFGA_RSTATE_CONNECTED && in ac_eval_memory_status()
1266 softsp->bank[id].ostate == SYSC_CFGA_OSTATE_UNCONFIGURED && in ac_eval_memory_status()
1269 "spare memory bank not valid - it was ", in ac_eval_memory_status()
1270 ddi_get_instance(softsp->dip), softsp->board, id); in ac_eval_memory_status()
1273 softsp->bank[id].rstate = SYSC_CFGA_RSTATE_DISCONNECTED; in ac_eval_memory_status()
1274 softsp->bank[id].ostate = SYSC_CFGA_OSTATE_UNCONFIGURED; in ac_eval_memory_status()
1275 softsp->bank[id].condition = SYSC_CFGA_COND_UNUSABLE; in ac_eval_memory_status()
1280 if (softsp->bank[id].rstate == SYSC_CFGA_RSTATE_CONNECTED) { in ac_eval_memory_status()
1287 ddi_get_instance(softsp->dip), in ac_eval_memory_status()
1288 softsp->board, id, base_pa, softsp->bank[id].real_size, in ac_eval_memory_status()
1289 softsp->bank[id].rstate, softsp->bank[id].ostate, in ac_eval_memory_status()
1290 softsp->bank[id].condition); in ac_eval_memory_status()
1346 struct ac_soft_state *softsp = pkt->softsp; in ac_policy_audit_messages()
1353 event), pkt->bank, in ac_policy_audit_messages()
1354 softsp->board); in ac_policy_audit_messages()
1361 event), pkt->bank, in ac_policy_audit_messages()
1362 softsp->board); in ac_policy_audit_messages()
1367 pkt->bank, softsp->board, in ac_policy_audit_messages()
1369 softsp->bank[pkt->bank].ostate, in ac_policy_audit_messages()
1375 pkt->bank, in ac_policy_audit_messages()
1376 softsp->board, in ac_policy_audit_messages()
1384 pkt->bank, in ac_policy_audit_messages()
1385 softsp->board, in ac_policy_audit_messages()
1393 pkt->bank, softsp->board); in ac_policy_audit_messages()
1408 mem_info = &pkt->softsp->bank[pkt->bank]; in ac_mem_exercise()
1409 if (mem_info->rstate == SYSC_CFGA_RSTATE_CONNECTED) { in ac_mem_exercise()
1413 decode = (pkt->bank == Bank0) ? in ac_mem_exercise()
1414 *pkt->softsp->ac_memdecode0 : *pkt->softsp->ac_memdecode1; in ac_mem_exercise()
1424 switch (pkt->cmd_cfga.arg) { in ac_mem_exercise()
1430 mem_info->ostate != SYSC_CFGA_OSTATE_CONFIGURED) { in ac_mem_exercise()
1433 if (mem_info->busy != FALSE) { in ac_mem_exercise()
1470 while (npgs-- > 0) { in ac_mem_exercise()
1486 if (pkt->cmd_cfga.private != NULL && ddi_copyout(&rstat, in ac_mem_exercise()
1487 pkt->cmd_cfga.private, sizeof (rstat), flag) != 0) in ac_mem_exercise()
1505 * We are in hot-plug mode. A kstat_read is not in ac_reset_timeout()
1517 * from "hot-plug" mode to non "hot-plug" mode. in ac_reset_timeout()
1525 return (-1); in ac_reset_timeout()
1529 * We need to display a Warning about hot-plugging any in ac_reset_timeout()
1531 * transitioning out of "hot-plug" mode. in ac_reset_timeout()
1534 "hot-plug mode."); in ac_reset_timeout()
1535 cmn_err(CE_CONT, "Do not attempt to hot-plug boards " in ac_reset_timeout()
1541 * in non "hot-plug" mode. It doesn't matter if the in ac_reset_timeout()
1572 (void) fhc_bdlist_lock(-1); in ac_timeout()
1576 * re-program the pcr into "hot-plug" mode. in ac_timeout()
1577 * We also program the pic register with the in ac_timeout()
1582 softsp = board->ac_softsp; in ac_timeout()
1591 /* program the pcr into hot-plug mode */ in ac_timeout()
1592 *softsp->ac_mccr = AC_CLEAR_PCR(*softsp->ac_mccr); in ac_timeout()
1593 *softsp->ac_mccr = AC_SET_HOT_PLUG(*softsp->ac_mccr); in ac_timeout()
1595 /* program the pic with the bus pause time value */ in ac_timeout()
1596 *softsp->ac_counter = AC_SET_PIC_BUS_PAUSE(softsp->board); in ac_timeout()
1607 * It is now safe to start hot-plugging again. We need in ac_timeout()
1610 cmn_err(CE_NOTE, "This machine is now in hot-plug mode."); in ac_timeout()
1611 cmn_err(CE_CONT, "Board and power supply hot-plug operations " in ac_timeout()
1627 (void) fhc_bdlist_lock(-1); in ac_enter_transition()
1632 sysc_stat_lk = &list->sc; in ac_enter_transition()
1633 if (sysc_stat_lk->in_transition == TRUE) { in ac_enter_transition()
1637 sysc_stat_lk->in_transition = TRUE; in ac_enter_transition()
1655 sysc_stat_lk = &list->sc; in ac_exit_transition()
1656 ASSERT(sysc_stat_lk->in_transition == TRUE); in ac_exit_transition()
1657 sysc_stat_lk->in_transition = FALSE; in ac_exit_transition()