Index: head/usr.sbin/sesutil/sesutil.c =================================================================== --- head/usr.sbin/sesutil/sesutil.c +++ head/usr.sbin/sesutil/sesutil.c @@ -112,28 +112,30 @@ } static void -do_led(int fd, unsigned int idx, bool onoff, bool setfault) +do_led(int fd, unsigned int idx, elm_type_t type, bool onoff, bool setfault) { + int state = onoff ? 1 : 0; encioc_elm_status_t o; + struct ses_ctrl_dev_slot *slot; o.elm_idx = idx; if (ioctl(fd, ENCIOC_GETELMSTAT, (caddr_t) &o) < 0) { close(fd); xo_err(EXIT_FAILURE, "ENCIOC_GETELMSTAT"); } - o.cstat[0] |= 0x80; - if (setfault) { - if (onoff) - o.cstat[3] |= 0x20; + slot = (struct ses_ctrl_dev_slot *) &o.cstat[0]; + switch (type) { + case ELMTYP_DEVICE: + case ELMTYP_ARRAY_DEV: + ses_ctrl_common_set_select(&slot->common, 1); + if (setfault) + ses_ctrl_dev_slot_set_rqst_fault(slot, state); else - o.cstat[3] &= 0xdf; - } else { - if (onoff) - o.cstat[2] |= 0x02; - else - o.cstat[2] &= 0xfd; + ses_ctrl_dev_slot_set_rqst_ident(slot, state); + break; + default: + return; } - if (ioctl(fd, ENCIOC_SETELMSTAT, (caddr_t) &o) < 0) { close(fd); xo_err(EXIT_FAILURE, "ENCIOC_SETELMSTAT"); @@ -250,14 +252,15 @@ xo_errx(EXIT_FAILURE, "Requested SES ID does not exist"); } - do_led(fd, sesid, onoff, setfault); + do_led(fd, sesid, objp[sesid].elm_type, onoff, setfault); ndisks++; close(fd); break; } for (j = 0; j < nobj; j++) { if (all) { - do_led(fd, objp[j].elm_idx, onoff, setfault); + do_led(fd, objp[j].elm_idx, objp[j].elm_type, + onoff, setfault); continue; } memset(&objdn, 0, sizeof(objdn)); @@ -274,7 +277,7 @@ } if (objdn.elm_names_len > 0) { if (disk_match(objdn.elm_devnames, disk, len)) { - do_led(fd, objdn.elm_idx, + do_led(fd, objdn.elm_idx, objp[j].elm_type, onoff, setfault); ndisks++; break;