Lines Matching refs:enc

185 	enc_softc_t *enc;
220 * This index is appropriate for indexing into enc->ses_elm_map.
403 * \param enc The SES softc for the SES instance whose configuration
408 ses_iter_init(enc_softc_t *enc, enc_cache_t *cache, struct ses_iterator *iter)
410 iter->enc = enc;
557 ses_cache_free_elm_addlstatus(enc_softc_t *enc, enc_cache_t *cache)
564 ENC_DLOG(enc, "%s: enter\n", __func__);
580 other_ses_cache = enc_other_cache(enc, cache)->private;
588 ses_cache_free_elm_descs(enc_softc_t *enc, enc_cache_t *cache)
595 ENC_DLOG(enc, "%s: enter\n", __func__);
610 other_ses_cache = enc_other_cache(enc, cache)->private;
618 ses_cache_free_status(enc_softc_t *enc, enc_cache_t *cache)
623 ENC_DLOG(enc, "%s: enter\n", __func__);
628 other_ses_cache = enc_other_cache(enc, cache)->private;
635 ses_cache_free_elm_map(enc_softc_t *enc, enc_cache_t *cache)
640 ENC_DLOG(enc, "%s: enter\n", __func__);
644 ses_cache_free_elm_descs(enc, cache);
645 ses_cache_free_elm_addlstatus(enc, cache);
654 ENC_DLOG(enc, "%s: exit\n", __func__);
658 ses_cache_free(enc_softc_t *enc, enc_cache_t *cache)
663 ENC_DLOG(enc, "%s: enter\n", __func__);
664 ses_cache_free_elm_addlstatus(enc, cache);
665 ses_cache_free_status(enc, cache);
666 ses_cache_free_elm_map(enc, cache);
671 other_ses_cache = enc_other_cache(enc, cache)->private;
684 ENC_DLOG(enc, "%s: exit\n", __func__);
688 ses_cache_clone(enc_softc_t *enc, enc_cache_t *src, enc_cache_t *dst)
696 ses_cache_free(enc, dst);
808 * \param enc SES instance containing elm
815 ses_devids_iter(enc_softc_t *enc, enc_element_t *elm,
852 callback(enc, elm, devid, callback_arg);
875 * \param enc SES instance containing elm
881 ses_path_iter_devid_callback(enc_softc_t *enc, enc_element_t *elem,
936 args->callback(enc, elem, cdm.ccb_h.path, args->callback_arg);
948 * \param enc SES instance containing elm
955 ses_paths_iter(enc_softc_t *enc, enc_element_t *elm,
962 ses_devids_iter(enc, elm, ses_path_iter_devid_callback, &args);
970 * \param enc SES instance containing elm
976 ses_elmdevname_callback(enc_softc_t *enc, enc_element_t *elem,
998 * \param enc SES instance containing elm
1004 ses_setphyspath_callback(enc_softc_t *enc, enc_element_t *elm,
1013 cam_periph_lock(enc->periph);
1038 cam_periph_unlock(enc->periph);
1045 * \param enc SES instance containing elm
1052 ses_set_physpath(enc_softc_t *enc, enc_element_t *elm,
1071 xpt_setup_ccb(&cdai.ccb_h, enc->periph->path, CAM_PRIORITY_NORMAL);
1080 cam_periph_lock(enc->periph);
1084 cam_periph_unlock(enc->periph);
1098 sbuf_printf(&sb, "id1,enc@n%jx/type@%x/slot@%x",
1122 ses_paths_iter(enc, elm, ses_setphyspath_callback, &args);
1164 * \param enc SES instance to query and update.
1170 ses_set_timed_completion(enc_softc_t *enc, uint8_t tc_en)
1180 periph = enc->periph;
1181 ses = enc->enc_private;
1200 ENC_VLOG(enc, "Timed Completion Unsupported\n");
1223 ENC_VLOG(enc, "Timed Completion Set Failed\n");
1229 ENC_LOG(enc, "Timed Completion Enabled\n");
1232 ENC_LOG(enc, "Timed Completion Disabled\n");
1245 * \param enc SES device to query.
1252 ses_process_pages(enc_softc_t *enc, struct enc_fsm_state *state,
1259 CAM_DEBUG(enc->periph->path, CAM_DEBUG_SUBTRACE,
1261 ses = enc->enc_private;
1269 ENC_VLOG(enc, "Unable to parse Diag Pages List Header\n");
1276 ENC_VLOG(enc, "Diag Pages List Too Long\n");
1279 ENC_DLOG(enc, "%s: page length %d, xfer_len %d\n",
1291 ENC_DLOG(enc, "%s: exiting with err %d\n", __func__, err);
1298 * \param enc SES device to query.
1305 ses_process_config(enc_softc_t *enc, struct enc_fsm_state *state,
1330 CAM_DEBUG(enc->periph->path, CAM_DEBUG_SUBTRACE,
1332 ses = enc->enc_private;
1333 enc_cache = &enc->enc_daemon_cache;
1343 ENC_VLOG(enc, "Unable to parse SES Config Header\n");
1351 ENC_VLOG(enc, "Enclosure Config Page Too Long\n");
1356 ENC_DLOG(enc, "%s: total page length %d, xfer_len %d\n",
1367 ses_cache_free(enc, enc_cache);
1368 ENC_VLOG(enc, "Generation Code 0x%x has %d SubEnclosures\n",
1402 ENC_VLOG(enc, "Enclosure %d Beyond End of "
1408 ENC_VLOG(enc, " SubEnclosure ID %d, %d Types With this ID, "
1412 ENC_VLOG(enc, "WWN: %jx\n",
1441 ENC_VLOG(enc, "Runt Enclosure Type Header %d\n",
1449 ENC_VLOG(enc, " Type Desc[%d]: Type 0x%x, MaxElt %d, In Subenc "
1470 ses_iter_init(enc, enc_cache, &iter);
1474 ENC_DLOG(enc, "%s: checking obj %d(%d,%d)\n", __func__,
1486 ENC_DLOG(enc, "%s: creating elmpriv %d(%d,%d) subenc %d "
1496 ses_cache_free(enc, enc_cache);
1498 enc_update_request(enc, SES_UPDATE_GETSTATUS);
1500 enc_update_request(enc, SES_UPDATE_GETELMDESCS);
1502 enc_update_request(enc, SES_UPDATE_GETELMADDLSTATUS);
1503 enc_update_request(enc, SES_PUBLISH_CACHE);
1505 ENC_DLOG(enc, "%s: exiting with err %d\n", __func__, err);
1512 * \param enc SES softc to update for.
1519 ses_process_status(enc_softc_t *enc, struct enc_fsm_state *state,
1534 ses = enc->enc_private;
1535 enc_cache = &enc->enc_daemon_cache;
1539 ENC_DLOG(enc, "%s: enter (%p, %p, %d)\n", __func__, enc, buf, xfer_len);
1555 ENC_VLOG(enc, "Enclosure Status Page Too Long\n");
1561 ENC_DLOG(enc, "Got Short Enclosure Status page\n");
1563 ses_cache_free(enc, enc_cache);
1565 enc_update_request(enc, SES_PUBLISH_CACHE);
1572 ENC_VLOG(enc, "Enclosure Status Page Too Short\n");
1577 ENC_DLOG(enc, "%s: Generation count change detected\n",
1579 enc_update_request(enc, SES_UPDATE_GETCONFIG);
1583 ses_cache_free_status(enc, enc_cache);
1594 ses_iter_init(enc, enc_cache, &iter);
1598 ENC_DLOG(enc, "%s: total page length %d, xfer_len %d\n",
1603 ENC_DLOG(enc, "%s: obj %d(%d,%d) off=0x%tx status=%jx\n",
1614 ENC_VLOG(enc, "Status page, length insufficient for "
1618 ENC_VLOG(enc, "Status page, exhausted objects before "
1620 enc_update_request(enc, SES_PUBLISH_CACHE);
1624 ENC_DLOG(enc, "%s: exiting with error %d\n", __func__, err);
1657 * \param enc SES softc to check.
1664 ses_typehasaddlstatus(enc_softc_t *enc, uint8_t typidx)
1669 enc_cache = &enc->enc_daemon_cache;
1695 * \param enc The SES softc to update.
1703 ses_process_elm_addlstatus(enc_softc_t *enc, struct enc_fsm_state *state,
1719 enc_cache = &enc->enc_daemon_cache;
1728 ses_cache_free_elm_addlstatus(enc, enc_cache);
1741 ENC_DLOG(enc, "Additional Element Status Page Length 0x%x\n", length);
1744 ENC_VLOG(enc, "Runt Additional Element Status Page\n");
1748 ENC_VLOG(enc, "Additional Element Status Page Too Long\n");
1753 ENC_DLOG(enc, "%s: Generation count change detected\n",
1755 enc_update_request(enc, SES_UPDATE_GETCONFIG);
1760 ses_iter_init(enc, enc_cache, &iter);
1773 status_type = ses_typehasaddlstatus(enc, iter.type_index);
1791 (ses_typehasaddlstatus(enc, titer.type_index) !=
1801 ENC_VLOG(enc, "%s: provided element "
1810 ENC_DLOG(enc, "%s: global element index=%d, type index=%d "
1822 ENC_VLOG(enc, "Element %d Beyond End "
1838 ses_get_elm_addlstatus_fc(enc, enc_cache,
1844 ses_get_elm_addlstatus_sas(enc, enc_cache,
1851 ENC_VLOG(enc, "Element %d: Unknown Additional Element "
1862 ses_cache_free_elm_addlstatus(enc, enc_cache);
1863 enc_update_request(enc, SES_PUBLISH_PHYSPATHS);
1864 enc_update_request(enc, SES_PUBLISH_CACHE);
1869 ses_process_control_request(enc_softc_t *enc, struct enc_fsm_state *state,
1874 ses = enc->enc_private;
1881 enc_update_request(enc, SES_UPDATE_GETSTATUS);
1886 ses_publish_physpaths(enc_softc_t *enc, struct enc_fsm_state *state,
1894 enc_cache = &enc->enc_daemon_cache;
1897 ses_iter_init(enc, enc_cache, &iter);
1905 if (ses_set_physpath(enc, element, &iter) == 0)
1906 ses_print_addl_data(enc, element);
1913 ses_publish_cache(enc_softc_t *enc, struct enc_fsm_state *state,
1917 sx_xlock(&enc->enc_cache_lock);
1918 ses_cache_clone(enc, /*src*/&enc->enc_daemon_cache,
1919 /*dst*/&enc->enc_cache);
1920 sx_xunlock(&enc->enc_cache_lock);
1928 * \param enc The SES softc to update.
1935 ses_process_elm_descs(enc_softc_t *enc, struct enc_fsm_state *state,
1951 ses = enc->enc_private;
1952 enc_cache = &enc->enc_daemon_cache;
1961 ses_cache_free_elm_descs(enc, enc_cache);
1968 ENC_VLOG(enc, "Runt Element Descriptor Page\n");
1972 ENC_VLOG(enc, "Element Descriptor Page Too Long\n");
1977 ENC_VLOG(enc, "%s: Generation count change detected\n",
1979 enc_update_request(enc, SES_UPDATE_GETCONFIG);
1985 ses_iter_init(enc, enc_cache, &iter);
1990 ENC_VLOG(enc, "Element %d Descriptor Header Past "
1996 ENC_DLOG(enc, "%s: obj %d(%d,%d) length=%d off=%d\n", __func__,
2000 ENC_VLOG(enc, "Element%d Descriptor Past "
2020 enc_update_request(enc, SES_UPDATE_GETELMADDLSTATUS);
2022 enc_update_request(enc, SES_PUBLISH_CACHE);
2027 ses_fill_rcv_diag_io(enc_softc_t *enc, struct enc_fsm_state *state,
2031 if (enc->enc_type == ENC_SEMB_SES) {
2051 * \param enc SES enclosure the change is being applied to.
2059 ses_encode(enc_softc_t *enc, uint8_t *buf, int amt, ses_control_request_t *req)
2066 ses_iter_init(enc, &enc->enc_cache, &iter);
2074 ENC_DLOG(enc, "Set EncStat %x\n", hdr->control_flags);
2096 ENC_DLOG(enc, "Set Type 0x%x Obj 0x%x (offset %d) with %x %x %x %x\n",
2105 ses_fill_control_request(enc_softc_t *enc, struct enc_fsm_state *state,
2116 ses = enc->enc_private;
2117 enc_cache = &enc->enc_daemon_cache;
2143 req->result = ses_encode(enc, buf, plength, req);
2155 if (enc->enc_type == ENC_SEMB_SES) {
2172 ses_get_elm_addlstatus_fc(enc_softc_t *enc, enc_cache_t *enc_cache,
2175 ENC_VLOG(enc, "FC Device Support Stubbed in Additional Status Page\n");
2252 * \param enc SES softc associated with object.
2258 ses_obj_is_expander(enc_softc_t *enc, enc_element_t *obj)
2267 * \param enc SES enclosure, needed for type identification.
2274 ses_print_addl_data_sas_type1(enc_softc_t *enc, char *sesname,
2288 if (ses_obj_is_expander(enc, obj)) {
2319 * \param enc SES softc associated with the object.
2323 ses_print_addl_data(enc_softc_t *enc, enc_element_t *obj)
2340 ses_paths_iter(enc, obj, ses_elmdevname_callback, &name);
2344 sbuf_printf(&sesname, "%s%d", enc->periph->periph_name,
2345 enc->periph->unit_number);
2358 ses_print_addl_data_sas_type1(enc, sbuf_data(&sesname),
2381 * \param enc SES softc to be updated.
2390 ses_get_elm_addlstatus_sas_type0(enc_softc_t *enc, enc_cache_t *enc_cache,
2422 ENC_VLOG(enc, "Element %d Device Phy List Beyond End Of Buffer\n",
2440 * \param enc SES softc to be updated.
2449 ses_get_elm_addlstatus_sas_type1(enc_softc_t *enc, enc_cache_t *enc_cache,
2472 if (ses_obj_is_expander(enc, obj)) {
2477 ENC_VLOG(enc, "Element %d: Expander Phy List Beyond "
2489 ENC_VLOG(enc, "Element %d: Port Phy List Beyond End "
2506 * \param enc SES softc to be updated.
2516 ses_get_elm_addlstatus_sas(enc_softc_t *enc, enc_cache_t *enc_cache,
2541 ENC_VLOG(enc, "Element %d has Additional Status type 0, "
2547 err = ses_get_elm_addlstatus_sas_type0(enc, enc_cache,
2559 ENC_VLOG(enc, "Element %d has Additional Status type 1, "
2565 err = ses_get_elm_addlstatus_sas_type1(enc, enc_cache, buf,
2569 ENC_VLOG(enc, "Element %d of type 0x%x has Additional Status "
2581 ses_softc_invalidate(enc_softc_t *enc)
2585 ses = enc->enc_private;
2590 ses_softc_cleanup(enc_softc_t *enc)
2593 ses_cache_free(enc, &enc->enc_cache);
2594 ses_cache_free(enc, &enc->enc_daemon_cache);
2595 ENC_FREE_AND_NULL(enc->enc_private);
2596 ENC_FREE_AND_NULL(enc->enc_cache.private);
2597 ENC_FREE_AND_NULL(enc->enc_daemon_cache.private);
2601 ses_init_enc(enc_softc_t *enc)
2607 ses_get_enc_status(enc_softc_t *enc, int slpflag)
2614 ses_set_enc_status(enc_softc_t *enc, uint8_t encstat, int slpflag)
2619 ses = enc->enc_private;
2624 enc_update_request(enc, SES_PROCESS_CONTROL_REQS);
2625 cam_periph_sleep(enc->periph, &req, PUSER, "encstat", 0);
2631 ses_get_elm_status(enc_softc_t *enc, encioc_elm_status_t *elms, int slpflag)
2635 memcpy(elms->cstat, &enc->enc_cache.elm_map[i].encstat, 4);
2640 ses_set_elm_status(enc_softc_t *enc, encioc_elm_status_t *elms, int slpflag)
2649 ses = enc->enc_private;
2654 enc_update_request(enc, SES_PROCESS_CONTROL_REQS);
2655 cam_periph_sleep(enc->periph, &req, PUSER, "encstat", 0);
2661 ses_get_elm_desc(enc_softc_t *enc, encioc_elm_desc_t *elmd)
2667 elmpriv = enc->enc_cache.elm_map[i].elm_private;
2683 * \param enc SES softc to examine.
2689 ses_get_elm_devnames(enc_softc_t *enc, encioc_elm_devnames_t *elmdn)
2700 cam_periph_unlock(enc->periph);
2701 ses_paths_iter(enc, &enc->enc_cache.elm_map[elmdn->elm_idx],
2705 cam_periph_lock(enc->periph);
2713 * \param enc SES enclosure to run the command on.
2720 ses_handle_string(enc_softc_t *enc, encioc_string_t *sstr, int ioc)
2752 ret = enc_runcmd(enc, cdb, 6, buf, &amt);
2762 ses_poll_status(enc_softc_t *enc)
2766 ses = enc->enc_private;
2767 enc_update_request(enc, SES_UPDATE_GETSTATUS);
2769 enc_update_request(enc, SES_UPDATE_GETELMADDLSTATUS);
2776 * \param enc SES enclosure instance.
2779 ses_device_found(enc_softc_t *enc)
2781 ses_poll_status(enc);
2782 enc_update_request(enc, SES_PUBLISH_PHYSPATHS);
2804 * \param enc SES softc structure to set up the instance in.
2810 ses_softc_init(enc_softc_t *enc)
2814 CAM_DEBUG(enc->periph->path, CAM_DEBUG_SUBTRACE,
2815 ("entering enc_softc_init(%p)\n", enc));
2817 enc->enc_vec = ses_enc_vec;
2818 enc->enc_fsm_states = enc_fsm_states;
2820 if (enc->enc_private == NULL)
2821 enc->enc_private = ENC_MALLOCZ(sizeof(ses_softc_t));
2822 if (enc->enc_cache.private == NULL)
2823 enc->enc_cache.private = ENC_MALLOCZ(sizeof(ses_cache_t));
2824 if (enc->enc_daemon_cache.private == NULL)
2825 enc->enc_daemon_cache.private =
2828 if (enc->enc_private == NULL
2829 || enc->enc_cache.private == NULL
2830 || enc->enc_daemon_cache.private == NULL) {
2831 ENC_FREE_AND_NULL(enc->enc_private);
2832 ENC_FREE_AND_NULL(enc->enc_cache.private);
2833 ENC_FREE_AND_NULL(enc->enc_daemon_cache.private);
2837 ses_softc = enc->enc_private;
2841 enc_update_request(enc, SES_UPDATE_PAGES);
2844 if (0) (void) ses_set_timed_completion(enc, 1);