Lines Matching refs:imc
582 imc_set_gen_data(imc_t *imc) in imc_set_gen_data() argument
584 switch (imc->imc_gen) { in imc_set_gen_data()
586 imc->imc_gen_data = &imc_gen_data_snb; in imc_set_gen_data()
589 imc->imc_gen_data = &imc_gen_data_ivb; in imc_set_gen_data()
593 imc->imc_gen_data = &imc_gen_data_has_brd; in imc_set_gen_data()
596 imc->imc_gen_data = &imc_gen_data_skx; in imc_set_gen_data()
599 dev_err(imc->imc_dip, CE_PANIC, "imc driver programmer error: " in imc_set_gen_data()
600 "set to unknown generation: %u", imc->imc_gen); in imc_set_gen_data()
613 imc_create_minors(imc_t *imc) in imc_create_minors() argument
617 ddi_set_name_addr(imc->imc_dip, "1"); in imc_create_minors()
618 for (i = 0; i < imc->imc_nsockets; i++) { in imc_create_minors()
626 if (ddi_create_minor_node(imc->imc_dip, buf, S_IFCHR, i, in imc_create_minors()
628 dev_err(imc->imc_dip, CE_WARN, "failed to create " in imc_create_minors()
636 ddi_remove_minor_node(imc->imc_dip, NULL); in imc_create_minors()
647 imc_mcroute_check(imc_t *imc, imc_sad_t *sad, imc_stub_t *stub) in imc_mcroute_check() argument
669 dev_err(imc->imc_dip, CE_WARN, "SAD MC_ROUTE_TABLE mismatch " in imc_mcroute_check()
685 imc_map_buses(imc_t *imc) in imc_map_buses() argument
695 for (nsock = 0, stub = avl_first(&imc->imc_stubs); stub != NULL; in imc_map_buses()
696 stub = AVL_NEXT(&imc->imc_stubs, stub)) { in imc_map_buses()
704 imc->imc_gen_data->igd_ubox_cpubusno_offset); in imc_map_buses()
706 dev_err(imc->imc_dip, CE_WARN, "failed to read " in imc_map_buses()
711 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_map_buses()
712 imc->imc_sockets[nsock].isock_nbus = 3; in imc_map_buses()
713 imc->imc_sockets[nsock].isock_bus[0] = in imc_map_buses()
715 imc->imc_sockets[nsock].isock_bus[1] = in imc_map_buses()
717 imc->imc_sockets[nsock].isock_bus[2] = in imc_map_buses()
720 imc->imc_sockets[nsock].isock_bus[0] = in imc_map_buses()
722 imc->imc_sockets[nsock].isock_bus[1] = in imc_map_buses()
724 imc->imc_sockets[nsock].isock_nbus = 2; in imc_map_buses()
728 imc->imc_nsockets = nsock; in imc_map_buses()
738 imc_map_find_socket(imc_t *imc, imc_stub_t *stub) in imc_map_find_socket() argument
742 for (i = 0; i < imc->imc_nsockets; i++) { in imc_map_find_socket()
745 for (bus = 0; bus < imc->imc_sockets[i].isock_nbus; bus++) { in imc_map_find_socket()
746 if (imc->imc_sockets[i].isock_bus[bus] == in imc_map_find_socket()
748 return (&imc->imc_sockets[i]); in imc_map_find_socket()
757 imc_map_stubs(imc_t *imc) in imc_map_stubs() argument
761 if (!imc_map_buses(imc)) { in imc_map_stubs()
765 stub = avl_first(&imc->imc_stubs); in imc_map_stubs()
766 for (stub = avl_first(&imc->imc_stubs); stub != NULL; in imc_map_stubs()
767 stub = AVL_NEXT(&imc->imc_stubs, stub)) { in imc_map_stubs()
768 imc_socket_t *sock = imc_map_find_socket(imc, stub); in imc_map_stubs()
771 dev_err(imc->imc_dip, CE_WARN, "found stub type %u " in imc_map_stubs()
776 stub->istub_func, imc->imc_nsockets); in imc_map_stubs()
799 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_map_stubs()
818 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_map_stubs()
876 if (imc->imc_gvtd_misc == NULL) { in imc_map_stubs()
877 imc->imc_gvtd_misc = stub; in imc_map_stubs()
881 ASSERT3U(imc->imc_gen, >=, IMC_GEN_SKYLAKE); in imc_map_stubs()
882 imc_mcroute_check(imc, &sock->isock_sad, stub); in imc_map_stubs()
902 dev_err(imc->imc_dip, CE_WARN, "Encountered unknown " in imc_map_stubs()
921 imc_fixup_stubs(imc_t *imc) in imc_fixup_stubs() argument
923 if (imc->imc_gen >= IMC_GEN_HASWELL) { in imc_fixup_stubs()
926 for (i = 0; i < imc->imc_nsockets; i++) { in imc_fixup_stubs()
927 ASSERT3P(imc->imc_sockets[i].isock_sad.isad_tolh, in imc_fixup_stubs()
929 imc->imc_sockets[i].isock_sad.isad_tolh = in imc_fixup_stubs()
930 imc->imc_gvtd_misc; in imc_fixup_stubs()
945 imc_validate_stubs(imc_t *imc) in imc_validate_stubs() argument
947 for (uint_t sock = 0; sock < imc->imc_nsockets; sock++) { in imc_validate_stubs()
948 imc_socket_t *socket = &imc->imc_sockets[sock]; in imc_validate_stubs()
956 dev_err(imc->imc_dip, CE_WARN, in imc_validate_stubs()
977 imc_map_sockets(imc_t *imc) in imc_map_sockets() argument
981 for (i = 0; i < imc->imc_nsockets; i++) { in imc_map_sockets()
985 h = imc->imc_sockets[i].isock_ubox->istub_cfgspace; in imc_map_sockets()
987 imc->imc_gen_data->igd_sad_nodeid_offset); in imc_map_sockets()
989 imc->imc_sockets[i].isock_valid |= in imc_map_sockets()
994 imc->imc_sockets[i].isock_nodeid = IMC_NODEID_UBOX_MASK(nodeid); in imc_map_sockets()
995 imc->imc_spointers[nodeid] = &imc->imc_sockets[i]; in imc_map_sockets()
1003 imc_decode_mtr(imc_t *imc, imc_mc_t *icn, imc_dimm_t *dimm, uint32_t mtr) in imc_decode_mtr() argument
1010 if (imc->imc_gen < IMC_GEN_SKYLAKE && in imc_decode_mtr()
1014 } else if (imc->imc_gen >= IMC_GEN_SKYLAKE && in imc_decode_mtr()
1036 switch (imc->imc_gen) { in imc_decode_mtr()
1093 if (imc->imc_gen > IMC_GEN_SANDY) { in imc_decode_mtr()
1096 if (imc->imc_gen >= IMC_GEN_BROADWELL) { in imc_decode_mtr()
1121 switch (imc->imc_gen) { in imc_decode_mtr()
1146 if (imc->imc_gen >= IMC_GEN_HASWELL) { in imc_decode_mtr()
1173 imc_fill_dimms(imc_t *imc, imc_mc_t *icn, imc_channel_t *chan) in imc_fill_dimms() argument
1181 chan->ich_ndimms = imc->imc_gen_data->igd_max_dimms; in imc_fill_dimms()
1182 for (i = 0; i < imc->imc_gen_data->igd_max_dimms; i++) { in imc_fill_dimms()
1188 imc->imc_gen_data->igd_mtr_offsets[i]); in imc_fill_dimms()
1199 imc_decode_mtr(imc, icn, dimm, mtr); in imc_fill_dimms()
1204 imc_fill_controller(imc_t *imc, imc_mc_t *icn) in imc_fill_controller() argument
1209 imc->imc_gen_data->igd_mcmtr_offset); in imc_fill_controller()
1216 if (imc->imc_gen < IMC_GEN_SKYLAKE) { in imc_fill_controller()
1228 switch (imc->imc_gen) { in imc_fill_controller()
1249 if (imc->imc_gen >= IMC_GEN_SKYLAKE && icn->icn_m2m != NULL) { in imc_fill_controller()
1251 imc->imc_gen_data->igd_topo_offset); in imc_fill_controller()
1262 imc_fill_data(imc_t *imc) in imc_fill_data() argument
1266 for (csock = 0; csock < imc->imc_nsockets; csock++) { in imc_fill_data()
1267 imc_socket_t *sock = &imc->imc_sockets[csock]; in imc_fill_data()
1272 if (!imc_fill_controller(imc, icn)) in imc_fill_data()
1276 imc_fill_dimms(imc, icn, in imc_fill_data()
1284 imc_nvl_create_dimm(imc_t *imc, imc_dimm_t *dimm) in imc_nvl_create_dimm() argument
1301 if (imc->imc_gen > IMC_GEN_SANDY) { in imc_nvl_create_dimm()
1314 if (imc->imc_gen >= IMC_GEN_HASWELL) { in imc_nvl_create_dimm()
1329 imc_nvl_create_channel(imc_t *imc, imc_channel_t *chan) in imc_nvl_create_channel() argument
1337 imc->imc_gen_data->igd_max_dimms); in imc_nvl_create_channel()
1338 for (i = 0; i < imc->imc_gen_data->igd_max_dimms; i++) { in imc_nvl_create_channel()
1339 dimms[i] = imc_nvl_create_dimm(imc, &chan->ich_dimms[i]); in imc_nvl_create_channel()
1353 imc_nvl_create_mc(imc_t *imc, imc_mc_t *icn) in imc_nvl_create_mc() argument
1381 channels[i] = imc_nvl_create_channel(imc, in imc_nvl_create_mc()
1423 imc_decoder_pack(imc_t *imc) in imc_decoder_pack() argument
1428 if (imc->imc_decoder_buf != NULL) in imc_decoder_pack()
1431 if (imc->imc_decoder_dump == NULL) { in imc_decoder_pack()
1432 imc->imc_decoder_dump = imc_dump_decoder(imc); in imc_decoder_pack()
1435 if (nvlist_pack(imc->imc_decoder_dump, &buf, &len, NV_ENCODE_XDR, in imc_decoder_pack()
1440 imc->imc_decoder_buf = buf; in imc_decoder_pack()
1441 imc->imc_decoder_len = len; in imc_decoder_pack()
1445 imc_nvl_create(imc_t *imc) in imc_nvl_create() argument
1448 for (csock = 0; csock < imc->imc_nsockets; csock++) { in imc_nvl_create()
1452 imc_socket_t *sock = &imc->imc_sockets[csock]; in imc_nvl_create()
1461 mcs[i] = imc_nvl_create_mc(imc, &sock->isock_imcs[i]); in imc_nvl_create()
1482 imc_sad_read_tohm(imc_t *imc, imc_sad_t *sad) in imc_sad_read_tohm() argument
1487 imc->imc_gen_data->igd_tolm_offset); in imc_sad_read_tohm()
1489 imc->imc_gen_data->igd_tohm_low_offset); in imc_sad_read_tohm()
1490 if (imc->imc_gen_data->igd_tohm_hi_offset != 0) { in imc_sad_read_tohm()
1492 imc->imc_gen_data->igd_tohm_hi_offset); in imc_sad_read_tohm()
1503 switch (imc->imc_gen) { in imc_sad_read_tohm()
1525 dev_err(imc->imc_dip, CE_PANIC, "imc driver programmer error: " in imc_sad_read_tohm()
1526 "set to unknown generation: %u", imc->imc_gen); in imc_sad_read_tohm()
1532 imc_sad_fill_rule(imc_t *imc, imc_sad_t *sad, imc_sad_rule_t *rule, in imc_sad_fill_rule() argument
1541 if (imc->imc_gen < IMC_GEN_SKYLAKE) { in imc_sad_fill_rule()
1567 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_sad_fill_rule()
1581 if (imc->imc_gen < IMC_GEN_SKYLAKE) { in imc_sad_fill_rule()
1595 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_sad_fill_rule()
1606 if (imc->imc_gen == IMC_GEN_SANDY) in imc_sad_fill_rule()
1609 if (imc->imc_gen >= IMC_GEN_IVY && imc->imc_gen < IMC_GEN_SKYLAKE) { in imc_sad_fill_rule()
1647 imc_sad_fill_rule_interleave(imc_t *imc, imc_sad_rule_t *rule, uint32_t raw) in imc_sad_fill_rule_interleave() argument
1664 if (imc->imc_gen > IMC_GEN_SANDY) { in imc_sad_fill_rule_interleave()
1687 imc_sad_read_dram_rules(imc_t *imc, imc_sad_t *sad) in imc_sad_read_dram_rules() argument
1692 sad->isad_nrules = imc->imc_gen_data->igd_sad_ndram_rules; in imc_sad_read_dram_rules()
1693 for (i = 0, off = imc->imc_gen_data->igd_sad_dram_offset; in imc_sad_read_dram_rules()
1707 imc_sad_fill_rule(imc, sad, rule, dram); in imc_sad_read_dram_rules()
1708 imc_sad_fill_rule_interleave(imc, rule, interleave); in imc_sad_read_dram_rules()
1713 imc_sad_decode_mcroute(imc_t *imc, imc_sad_t *sad) in imc_sad_decode_mcroute() argument
1718 if (imc->imc_gen < IMC_GEN_SKYLAKE) in imc_sad_decode_mcroute()
1748 imc_decoder_init_sad(imc_t *imc) in imc_decoder_init_sad() argument
1752 for (i = 0; i < imc->imc_nsockets; i++) { in imc_decoder_init_sad()
1753 imc_sad_read_tohm(imc, &imc->imc_sockets[i].isock_sad); in imc_decoder_init_sad()
1754 imc_sad_read_dram_rules(imc, &imc->imc_sockets[i].isock_sad); in imc_decoder_init_sad()
1755 imc_sad_decode_mcroute(imc, &imc->imc_sockets[i].isock_sad); in imc_decoder_init_sad()
1760 imc_tad_fill_rule(imc_t *imc, imc_tad_t *tad, imc_tad_rule_t *prev, in imc_tad_fill_rule() argument
1793 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_tad_fill_rule()
1812 imc_tad_fill_skx(imc_t *imc, imc_tad_t *tad, imc_tad_rule_t *rule, in imc_tad_fill_skx() argument
1858 imc_tad_read_rules(imc_t *imc, imc_tad_t *tad) in imc_tad_read_rules() argument
1864 tad->itad_nrules = imc->imc_gen_data->igd_tad_nrules; in imc_tad_read_rules()
1865 for (i = 0, baseoff = imc->imc_gen_data->igd_tad_rule_offset, in imc_tad_read_rules()
1876 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_tad_read_rules()
1888 imc_tad_fill_rule(imc, tad, prev, rule, val); in imc_tad_read_rules()
1890 if (imc->imc_gen < IMC_GEN_SKYLAKE) in imc_tad_read_rules()
1899 imc_tad_fill_skx(imc, tad, rule, val); in imc_tad_read_rules()
1907 imc_tad_read_features(imc_t *imc, imc_tad_t *tad, imc_mc_t *mc) in imc_tad_read_features() argument
1919 switch (imc->imc_gen) { in imc_tad_read_features()
1925 imc->imc_gen_data->igd_tad_sysdef); in imc_tad_read_features()
1935 imc->imc_gen_data->igd_mc_mirror); in imc_tad_read_features()
1954 switch (imc->imc_gen) { in imc_tad_read_features()
1959 imc->imc_gen_data->igd_tad_sysdef2); in imc_tad_read_features()
1980 imc_tad_read_interleave(imc_t *imc, imc_channel_t *chan) in imc_tad_read_interleave() argument
1985 chan->ich_ntad_offsets = imc->imc_gen_data->igd_tad_nrules; in imc_tad_read_interleave()
1986 for (i = 0, off = imc->imc_gen_data->igd_tad_chan_offset; in imc_tad_read_interleave()
1998 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_tad_read_interleave()
2010 imc_decoder_init_tad(imc_t *imc) in imc_decoder_init_tad() argument
2014 for (i = 0; i < imc->imc_nsockets; i++) { in imc_decoder_init_tad()
2017 for (j = 0; j < imc->imc_sockets[i].isock_ntad; j++) { in imc_decoder_init_tad()
2018 imc_tad_read_features(imc, in imc_decoder_init_tad()
2019 &imc->imc_sockets[i].isock_tad[j], in imc_decoder_init_tad()
2020 &imc->imc_sockets[i].isock_imcs[j]); in imc_decoder_init_tad()
2021 imc_tad_read_rules(imc, in imc_decoder_init_tad()
2022 &imc->imc_sockets[i].isock_tad[j]); in imc_decoder_init_tad()
2026 for (i = 0; i < imc->imc_nsockets; i++) { in imc_decoder_init_tad()
2028 imc_socket_t *sock = &imc->imc_sockets[i]; in imc_decoder_init_tad()
2030 for (j = 0; j < imc->imc_sockets[i].isock_nimc; j++) { in imc_decoder_init_tad()
2036 imc_tad_read_interleave(imc, chan); in imc_decoder_init_tad()
2043 imc_rir_read_ileave_offsets(imc_t *imc, imc_channel_t *chan, in imc_rir_read_ileave_offsets() argument
2057 off = imc->imc_gen_data->igd_rir_ileave_offset + in imc_rir_read_ileave_offsets()
2058 (rirno * imc->imc_gen_data->igd_rir_nileaves * in imc_rir_read_ileave_offsets()
2062 off = imc->imc_gen_data->igd_rir_ileave_offset + in imc_rir_read_ileave_offsets()
2064 incr = imc->imc_gen_data->igd_rir_nileaves * sizeof (uint32_t); in imc_rir_read_ileave_offsets()
2077 switch (imc->imc_gen) { in imc_rir_read_ileave_offsets()
2085 if (imc->imc_gen >= IMC_GEN_HASWELL) { in imc_rir_read_ileave_offsets()
2095 imc_rir_read_wayness(imc_t *imc, imc_channel_t *chan) in imc_rir_read_wayness() argument
2100 chan->ich_nrankileaves = imc->imc_gen_data->igd_rir_nways; in imc_rir_read_wayness()
2101 for (i = 0, off = imc->imc_gen_data->igd_rir_way_offset; in imc_rir_read_wayness()
2117 if (imc->imc_gen >= IMC_GEN_HASWELL) { in imc_rir_read_wayness()
2126 ent->irle_nentries = imc->imc_gen_data->igd_rir_nileaves; in imc_rir_read_wayness()
2127 if (imc->imc_gen >= IMC_GEN_SKYLAKE) { in imc_rir_read_wayness()
2128 imc_rir_read_ileave_offsets(imc, chan, ent, i, B_FALSE); in imc_rir_read_wayness()
2130 imc_rir_read_ileave_offsets(imc, chan, ent, i, B_TRUE); in imc_rir_read_wayness()
2136 imc_decoder_init_rir(imc_t *imc) in imc_decoder_init_rir() argument
2140 for (i = 0; i < imc->imc_nsockets; i++) { in imc_decoder_init_rir()
2142 imc_socket_t *sock = &imc->imc_sockets[i]; in imc_decoder_init_rir()
2144 for (j = 0; j < imc->imc_sockets[i].isock_nimc; j++) { in imc_decoder_init_rir()
2150 imc_rir_read_wayness(imc, chan); in imc_decoder_init_rir()
2160 imc_t *imc = arg; in imc_mc_patounum() local
2165 if (!imc_decode_pa(imc, pa, &dec)) { in imc_mc_patounum()
2180 for (i = 0; i < imc->imc_nsockets; i++) { in imc_mc_patounum()
2181 if (imc->imc_spointers[i] == dec.ids_socket) in imc_mc_patounum()
2184 if (i == imc->imc_nsockets) { in imc_mc_patounum()
2219 imc_t *imc = arg; in imc_attach_complete() local
2222 imc_set_gen_data(imc); in imc_attach_complete()
2228 if (!imc_map_stubs(imc)) { in imc_attach_complete()
2232 if (!imc_validate_stubs(imc)) { in imc_attach_complete()
2233 imc->imc_flags |= IMC_F_VALIDATE_FAILED; in imc_attach_complete()
2237 imc_fixup_stubs(imc); in imc_attach_complete()
2238 imc_map_sockets(imc); in imc_attach_complete()
2240 if (!imc_create_minors(imc)) { in imc_attach_complete()
2244 imc_fill_data(imc); in imc_attach_complete()
2245 imc_nvl_create(imc); in imc_attach_complete()
2251 imc_decoder_init_sad(imc); in imc_attach_complete()
2252 imc_decoder_init_tad(imc); in imc_attach_complete()
2253 imc_decoder_init_rir(imc); in imc_attach_complete()
2260 if ((err = cmi_mc_register_global(&imc_mc_ops, imc)) != CMI_SUCCESS) { in imc_attach_complete()
2261 imc->imc_flags |= IMC_F_MCREG_FAILED; in imc_attach_complete()
2262 dev_err(imc->imc_dip, CE_WARN, "failed to register memory " in imc_attach_complete()
2267 mutex_enter(&imc->imc_lock); in imc_attach_complete()
2268 imc->imc_flags &= IMC_F_ATTACH_DISPATCHED; in imc_attach_complete()
2269 imc->imc_flags |= IMC_F_ATTACH_COMPLETE; in imc_attach_complete()
2270 mutex_exit(&imc->imc_lock); in imc_attach_complete()
2297 imc_t *imc = arg; in imc_stub_scan_cb() local
2359 mutex_enter(&imc->imc_lock); in imc_stub_scan_cb()
2360 imc->imc_nscanned++; in imc_stub_scan_cb()
2361 mutex_exit(&imc->imc_lock); in imc_stub_scan_cb()
2372 imc_t *imc = arg; in imc_stub_scan() local
2378 mutex_enter(&imc->imc_lock); in imc_stub_scan()
2379 imc->imc_nscanned = 0; in imc_stub_scan()
2380 mutex_exit(&imc->imc_lock); in imc_stub_scan()
2382 ddi_walk_devs(ddi_root_node(), imc_stub_scan_cb, imc); in imc_stub_scan()
2384 mutex_enter(&imc->imc_lock); in imc_stub_scan()
2385 imc->imc_flags |= IMC_F_SCAN_COMPLETE; in imc_stub_scan()
2386 imc->imc_flags &= ~IMC_F_SCAN_DISPATCHED; in imc_stub_scan()
2393 if (imc->imc_nscanned == 0) { in imc_stub_scan()
2394 imc->imc_flags |= IMC_F_UNSUP_PLATFORM; in imc_stub_scan()
2395 mutex_exit(&imc->imc_lock); in imc_stub_scan()
2399 if (avl_numnodes(&imc->imc_stubs) == imc->imc_nscanned) { in imc_stub_scan()
2400 imc->imc_flags |= IMC_F_ATTACH_DISPATCHED; in imc_stub_scan()
2404 mutex_exit(&imc->imc_lock); in imc_stub_scan()
2407 (void) ddi_taskq_dispatch(imc->imc_taskq, imc_attach_complete, in imc_stub_scan()
2408 imc, DDI_SLEEP); in imc_stub_scan()
2419 imc_t *imc = imc_data; in imc_detach_stub() local
2421 mutex_enter(&imc->imc_lock); in imc_detach_stub()
2429 if ((imc->imc_flags & IMC_F_UNSUP_PLATFORM) == 0 && in imc_detach_stub()
2431 mutex_exit(&imc->imc_lock); in imc_detach_stub()
2435 for (stub = avl_first(&imc->imc_stubs); stub != NULL; in imc_detach_stub()
2436 stub = AVL_NEXT(&imc->imc_stubs, stub)) { in imc_detach_stub()
2447 mutex_exit(&imc->imc_lock); in imc_detach_stub()
2452 avl_remove(&imc->imc_stubs, stub); in imc_detach_stub()
2454 mutex_exit(&imc->imc_lock); in imc_detach_stub()
2468 imc_t *imc = imc_data; in imc_attach_stub() local
2536 mutex_enter(&imc->imc_lock); in imc_attach_stub()
2537 if (imc->imc_gen != IMC_GEN_UNKNOWN && imc->imc_gen != in imc_attach_stub()
2539 mutex_exit(&imc->imc_lock); in imc_attach_stub()
2543 "generation (%u)", vid, did, table->imcs_gen, imc->imc_gen); in imc_attach_stub()
2546 imc->imc_gen = table->imcs_gen; in imc_attach_stub()
2548 mutex_exit(&imc->imc_lock); in imc_attach_stub()
2568 mutex_enter(&imc->imc_lock); in imc_attach_stub()
2569 if ((lookup = avl_find(&imc->imc_stubs, stub, &idx)) != NULL) { in imc_attach_stub()
2572 ddi_node_name(imc->imc_dip), vid, did, in imc_attach_stub()
2576 mutex_exit(&imc->imc_lock); in imc_attach_stub()
2582 avl_insert(&imc->imc_stubs, stub, idx); in imc_attach_stub()
2584 if ((imc->imc_flags & IMC_F_ALL_FLAGS) == IMC_F_SCAN_COMPLETE && in imc_attach_stub()
2585 avl_numnodes(&imc->imc_stubs) == imc->imc_nscanned) { in imc_attach_stub()
2586 imc->imc_flags |= IMC_F_ATTACH_DISPATCHED; in imc_attach_stub()
2589 mutex_exit(&imc->imc_lock); in imc_attach_stub()
2592 (void) ddi_taskq_dispatch(imc->imc_taskq, imc_attach_complete, in imc_attach_stub()
2593 imc, DDI_SLEEP); in imc_attach_stub()
2602 imc_t *imc = imc_data; in imc_open() local
2610 mutex_enter(&imc->imc_lock); in imc_open()
2612 if ((imc->imc_flags & IMC_F_UNSUP_PLATFORM) != 0) { in imc_open()
2613 mutex_exit(&imc->imc_lock); in imc_open()
2621 if ((imc->imc_flags & IMC_F_ATTACH_COMPLETE) == 0) { in imc_open()
2622 mutex_exit(&imc->imc_lock); in imc_open()
2630 if (getminor(*devp) >= imc->imc_nsockets) { in imc_open()
2631 mutex_exit(&imc->imc_lock); in imc_open()
2638 if (imc->imc_spointers[getminor(*devp)] == NULL) { in imc_open()
2639 mutex_exit(&imc->imc_lock); in imc_open()
2643 mutex_exit(&imc->imc_lock); in imc_open()
2649 imc_ioctl_decode(imc_t *imc, mc_encode_ioc_t *encode) in imc_ioctl_decode() argument
2655 if (!imc_decode_pa(imc, encode->mcei_pa, &dec)) { in imc_ioctl_decode()
2664 for (i = 0; i < imc->imc_nsockets; i++) { in imc_ioctl_decode()
2665 if (imc->imc_spointers[i] == dec.ids_socket) in imc_ioctl_decode()
2695 imc_t *imc = imc_data; in imc_ioctl() local
2698 mutex_enter(&imc->imc_lock); in imc_ioctl()
2700 if (m >= imc->imc_nsockets) { in imc_ioctl()
2704 sock = imc->imc_spointers[m]; in imc_ioctl()
2749 imc_decoder_pack(imc); in imc_ioctl()
2750 if (imc->imc_decoder_buf == NULL) { in imc_ioctl()
2755 info.mcs_size = imc->imc_decoder_len; in imc_ioctl()
2756 info.mcs_gen = imc->imc_spointers[0]->isock_gen; in imc_ioctl()
2766 imc_decoder_pack(imc); in imc_ioctl()
2767 if (imc->imc_decoder_buf == NULL) { in imc_ioctl()
2772 if (ddi_copyout(imc->imc_decoder_buf, (void *)arg, in imc_ioctl()
2773 imc->imc_decoder_len, mode) != 0) { in imc_ioctl()
2793 imc_ioctl_decode(imc, &encode); in imc_ioctl()
2808 mutex_exit(&imc->imc_lock); in imc_ioctl()