Lines Matching refs:ctrl
389 nvme_vers_ctrl_atleast(const nvme_ctrl_t *ctrl, const nvme_version_t *targ) in nvme_vers_ctrl_atleast() argument
391 return (nvme_vers_atleast(&ctrl->nc_vers, targ)); in nvme_vers_ctrl_atleast()
409 nvme_guid_valid(const nvme_ctrl_t *ctrl, const uint8_t guid[16]) in nvme_guid_valid() argument
413 return (nvme_vers_ctrl_atleast(ctrl, &nvme_vers_1v2) && in nvme_guid_valid()
418 nvme_eui64_valid(const nvme_ctrl_t *ctrl, const uint8_t eui64[8]) in nvme_eui64_valid() argument
422 return (nvme_vers_ctrl_atleast(ctrl, &nvme_vers_1v1) && in nvme_eui64_valid()
591 nvme_ctrl_fini(nvme_ctrl_t *ctrl) in nvme_ctrl_fini() argument
593 if (ctrl == NULL) { in nvme_ctrl_fini()
597 if (ctrl->nc_sup_logs != NULL) { in nvme_ctrl_fini()
598 free(ctrl->nc_sup_logs); in nvme_ctrl_fini()
601 if (ctrl->nc_sup_logs_err != NULL) { in nvme_ctrl_fini()
602 free(ctrl->nc_sup_logs_err); in nvme_ctrl_fini()
605 if (ctrl->nc_devi_path != NULL) { in nvme_ctrl_fini()
606 di_devfs_path_free(ctrl->nc_devi_path); in nvme_ctrl_fini()
609 if (ctrl->nc_fd >= 0) { in nvme_ctrl_fini()
610 (void) close(ctrl->nc_fd); in nvme_ctrl_fini()
611 ctrl->nc_fd = -1; in nvme_ctrl_fini()
614 free(ctrl); in nvme_ctrl_fini()
624 nvme_ctrl_t *ctrl; in nvme_ctrl_init() local
683 ctrl = calloc(1, sizeof (*ctrl)); in nvme_ctrl_init()
684 if (ctrl == NULL) { in nvme_ctrl_init()
690 ctrl->nc_nvme = nvme; in nvme_ctrl_init()
691 ctrl->nc_devi = di; in nvme_ctrl_init()
692 ctrl->nc_minor = minor; in nvme_ctrl_init()
693 ctrl->nc_inst = inst; in nvme_ctrl_init()
694 ctrl->nc_fd = open(buf, O_RDWR | O_CLOEXEC); in nvme_ctrl_init()
695 if (ctrl->nc_fd < 0) { in nvme_ctrl_init()
697 nvme_ctrl_fini(ctrl); in nvme_ctrl_init()
702 ctrl->nc_devi_path = di_devfs_path(di); in nvme_ctrl_init()
703 if (ctrl->nc_devi_path == NULL) { in nvme_ctrl_init()
705 nvme_ctrl_fini(ctrl); in nvme_ctrl_init()
711 if (!nvme_ioc_ctrl_info(ctrl, &ctrl_info)) { in nvme_ctrl_init()
714 nvme_ctrl_err_save(ctrl, &err); in nvme_ctrl_init()
716 nvme_ctrl_fini(ctrl); in nvme_ctrl_init()
720 ctrl->nc_vers = ctrl_info.nci_vers; in nvme_ctrl_init()
721 ctrl->nc_info = ctrl_info.nci_ctrl_id; in nvme_ctrl_init()
723 nvme_vendor_map_ctrl(ctrl); in nvme_ctrl_init()
725 *outp = ctrl; in nvme_ctrl_init()
803 nvme_ctrl_devi(nvme_ctrl_t *ctrl, di_node_t *devip) in nvme_ctrl_devi() argument
805 *devip = ctrl->nc_devi; in nvme_ctrl_devi()
806 return (nvme_ctrl_success(ctrl)); in nvme_ctrl_devi()
810 nvme_ioc_ctrl_info(nvme_ctrl_t *ctrl, nvme_ioctl_ctrl_info_t *info) in nvme_ioc_ctrl_info() argument
814 if (ioctl(ctrl->nc_fd, NVME_IOC_CTRL_INFO, info) != 0) { in nvme_ioc_ctrl_info()
816 return (nvme_ioctl_syserror(ctrl, e, "controller info")); in nvme_ioc_ctrl_info()
820 return (nvme_ioctl_error(ctrl, &info->nci_common, in nvme_ioc_ctrl_info()
828 nvme_ioc_ns_info(nvme_ctrl_t *ctrl, uint32_t nsid, nvme_ioctl_ns_info_t *info) in nvme_ioc_ns_info() argument
833 if (ioctl(ctrl->nc_fd, NVME_IOC_NS_INFO, info) != 0) { in nvme_ioc_ns_info()
835 return (nvme_ioctl_syserror(ctrl, e, "namespace info")); in nvme_ioc_ns_info()
839 return (nvme_ioctl_error(ctrl, &info->nni_common, in nvme_ioc_ns_info()
862 nvme_ns_discover_validate(nvme_ctrl_t *ctrl, nvme_ns_disc_level_t level) in nvme_ns_discover_validate() argument
872 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_FLAG, 0, "invalid " in nvme_ns_discover_validate()
929 nvme_ctrl_t *ctrl = iter->nni_ctrl; in nvme_ns_discover_step() local
939 while (iter->nni_cur_idx <= ctrl->nc_info.id_nn) { in nvme_ns_discover_step()
944 if (!nvme_ioc_ns_info(ctrl, nsid, &ns_info)) { in nvme_ns_discover_step()
959 if (nvme_guid_valid(ctrl, ns_info.nni_id.id_nguid)) { in nvme_ns_discover_step()
966 if (nvme_eui64_valid(ctrl, ns_info.nni_id.id_eui64)) { in nvme_ns_discover_step()
982 nvme_ns_discover_init(nvme_ctrl_t *ctrl, nvme_ns_disc_level_t level, in nvme_ns_discover_init() argument
987 if (!nvme_ns_discover_validate(ctrl, level)) { in nvme_ns_discover_init()
992 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_PTR, 0, in nvme_ns_discover_init()
1000 return (nvme_ctrl_error(ctrl, NVME_ERR_NO_MEM, e, "failed to " in nvme_ns_discover_init()
1005 iter->nni_ctrl = ctrl; in nvme_ns_discover_init()
1010 return (nvme_ctrl_success(ctrl)); in nvme_ns_discover_init()
1014 nvme_ns_discover(nvme_ctrl_t *ctrl, nvme_ns_disc_level_t level, in nvme_ns_discover() argument
1021 if (!nvme_ns_discover_validate(ctrl, level)) { in nvme_ns_discover()
1026 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_PTR, 0, in nvme_ns_discover()
1031 if (!nvme_ns_discover_init(ctrl, level, &iter)) { in nvme_ns_discover()
1036 if (!func(ctrl, disc, arg)) in nvme_ns_discover()
1045 return (nvme_ctrl_success(ctrl)); in nvme_ns_discover()
1093 nvme_ns_init(nvme_ctrl_t *ctrl, uint32_t nsid, nvme_ns_t **nsp) in nvme_ns_init() argument
1098 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_PTR, 0, in nvme_ns_init()
1102 if (nsid < NVME_NSID_MIN || nsid > ctrl->nc_info.id_nn) { in nvme_ns_init()
1103 return (nvme_ctrl_error(ctrl, NVME_ERR_NS_RANGE, 0, "requested " in nvme_ns_init()
1105 "0x%x]", nsid, NVME_NSID_MIN, ctrl->nc_info.id_nn)); in nvme_ns_init()
1111 return (nvme_ctrl_error(ctrl, NVME_ERR_NO_MEM, e, "failed to " in nvme_ns_init()
1115 ns->nn_ctrl = ctrl; in nvme_ns_init()
1119 return (nvme_ctrl_success(ctrl)); in nvme_ns_init()
1131 nvme_ns_init_by_name_cb(nvme_ctrl_t *ctrl, const nvme_ns_disc_t *disc, in nvme_ns_init_by_name_cb() argument
1158 if (!nvme_ns_init(ctrl, disc->nnd_nsid, &init->nnia_ns)) { in nvme_ns_init_by_name_cb()
1159 nvme_ctrl_err_save(ctrl, &init->nnia_err); in nvme_ns_init_by_name_cb()
1170 nvme_ns_init_by_name(nvme_ctrl_t *ctrl, const char *ns_name, nvme_ns_t **nsp) in nvme_ns_init_by_name() argument
1175 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_PTR, 0, in nvme_ns_init_by_name()
1180 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_PTR, 0, in nvme_ns_init_by_name()
1184 init.nnia_ctrl = ctrl; in nvme_ns_init_by_name()
1189 if (!nvme_ns_discover(ctrl, NVME_NS_DISC_F_ALL, nvme_ns_init_by_name_cb, in nvme_ns_init_by_name()
1195 return (nvme_ctrl_error(ctrl, NVME_ERR_NS_RANGE, 0, "failed to " in nvme_ns_init_by_name()
1197 ctrl->nc_inst)); in nvme_ns_init_by_name()
1201 nvme_ctrl_err_set(ctrl, &init.nnia_err); in nvme_ns_init_by_name()
1206 return (nvme_ctrl_success(ctrl)); in nvme_ns_init_by_name()
1215 nvme_ctrl_t *ctrl; in nvme_ctrl_ns_init() local
1297 if (!nvme_ctrl_init_by_instance(nvme, (int32_t)inst, &ctrl)) { in nvme_ctrl_ns_init()
1302 *ctrlp = ctrl; in nvme_ctrl_ns_init()
1306 if (!nvme_ns_init_by_name(ctrl, ns_name, &ns)) { in nvme_ctrl_ns_init()
1309 nvme_ctrl_err_save(ctrl, &err); in nvme_ctrl_ns_init()
1311 nvme_ctrl_fini(ctrl); in nvme_ctrl_ns_init()
1315 *ctrlp = ctrl; in nvme_ctrl_ns_init()
1324 nvme_ctrl_t *ctrl = ns->nn_ctrl; in nvme_ns_bd_attach() local
1332 return (nvme_ioctl_syserror(ctrl, e, "namespace attach")); in nvme_ns_bd_attach()
1336 return (nvme_ioctl_error(ctrl, &com, "namespace attach")); in nvme_ns_bd_attach()
1339 return (nvme_ctrl_success(ctrl)); in nvme_ns_bd_attach()
1345 nvme_ctrl_t *ctrl = ns->nn_ctrl; in nvme_ns_bd_detach() local
1353 return (nvme_ioctl_syserror(ctrl, e, "namespace detach")); in nvme_ns_bd_detach()
1357 return (nvme_ioctl_error(ctrl, &com, "namespace detach")); in nvme_ns_bd_detach()
1360 return (nvme_ctrl_success(ctrl)); in nvme_ns_bd_detach()
1367 nvme_lock_check(nvme_ctrl_t *ctrl) in nvme_lock_check() argument
1375 if (ctrl->nc_err.ne_err != NVME_ERR_LOCK_PROG) { in nvme_lock_check()
1380 ctrl->nc_err.ne_errmsg, ctrl); in nvme_lock_check()
1396 nvme_lock_common(nvme_ctrl_t *ctrl, uint32_t nsid, nvme_lock_level_t level, in nvme_lock_common() argument
1403 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_FLAG, 0, "unknown " in nvme_lock_common()
1408 return (nvme_ctrl_error(ctrl, NVME_ERR_BAD_FLAG, 0, "unknown " in nvme_lock_common()
1422 if (ioctl(ctrl->nc_fd, NVME_IOC_LOCK, &lock) != 0) { in nvme_lock_common()
1424 return (nvme_ioctl_syserror(ctrl, e, "lock")); in nvme_lock_common()
1428 (void) nvme_ioctl_error(ctrl, &lock.nil_common, "lock"); in nvme_lock_common()
1429 nvme_lock_check(ctrl); in nvme_lock_common()
1433 return (nvme_ctrl_success(ctrl)); in nvme_lock_common()
1447 nvme_unlock_common(nvme_ctrl_t *ctrl, uint32_t nsid) in nvme_unlock_common() argument
1463 if (ioctl(ctrl->nc_fd, NVME_IOC_UNLOCK, &unlock) != 0) { in nvme_unlock_common()
1465 (void) nvme_ctrl_error(ctrl, NVME_ERR_LOCK_PROG, e, "internal " in nvme_unlock_common()
1468 nvme_lock_check(ctrl); in nvme_unlock_common()
1473 (void) nvme_ioctl_error(ctrl, &unlock.niu_common, "unlock"); in nvme_unlock_common()
1478 if (ctrl->nc_err.ne_err != NVME_ERR_LOCK_PROG) { in nvme_unlock_common()
1480 nvme_ctrl_err_save(ctrl, &err); in nvme_unlock_common()
1481 (void) nvme_ctrl_error(ctrl, NVME_ERR_LOCK_PROG, 0, in nvme_unlock_common()
1486 nvme_lock_check(ctrl); in nvme_unlock_common()
1490 (void) nvme_ctrl_success(ctrl); in nvme_unlock_common()
1494 nvme_ctrl_lock(nvme_ctrl_t *ctrl, nvme_lock_level_t level, in nvme_ctrl_lock() argument
1497 return (nvme_lock_common(ctrl, 0, level, flags)); in nvme_ctrl_lock()
1508 nvme_ctrl_unlock(nvme_ctrl_t *ctrl) in nvme_ctrl_unlock() argument
1510 nvme_unlock_common(ctrl, 0); in nvme_ctrl_unlock()