Changeset View
Changeset View
Standalone View
Standalone View
head/usr.sbin/sesutil/sesutil.c
Show First 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | for (i = 0; i < nbcmds; i++) { | ||||
fprintf(out, " %-12s%s\n\t\t%s\n\n", cmds[i].name, | fprintf(out, " %-12s%s\n\t\t%s\n\n", cmds[i].name, | ||||
cmds[i].param, cmds[i].desc); | cmds[i].param, cmds[i].desc); | ||||
} | } | ||||
exit(EXIT_FAILURE); | exit(EXIT_FAILURE); | ||||
} | } | ||||
static void | 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; | encioc_elm_status_t o; | ||||
struct ses_ctrl_dev_slot *slot; | |||||
o.elm_idx = idx; | o.elm_idx = idx; | ||||
if (ioctl(fd, ENCIOC_GETELMSTAT, (caddr_t) &o) < 0) { | if (ioctl(fd, ENCIOC_GETELMSTAT, (caddr_t) &o) < 0) { | ||||
close(fd); | close(fd); | ||||
xo_err(EXIT_FAILURE, "ENCIOC_GETELMSTAT"); | xo_err(EXIT_FAILURE, "ENCIOC_GETELMSTAT"); | ||||
} | } | ||||
o.cstat[0] |= 0x80; | slot = (struct ses_ctrl_dev_slot *) &o.cstat[0]; | ||||
if (setfault) { | switch (type) { | ||||
if (onoff) | case ELMTYP_DEVICE: | ||||
o.cstat[3] |= 0x20; | case ELMTYP_ARRAY_DEV: | ||||
ses_ctrl_common_set_select(&slot->common, 1); | |||||
if (setfault) | |||||
ses_ctrl_dev_slot_set_rqst_fault(slot, state); | |||||
else | else | ||||
o.cstat[3] &= 0xdf; | ses_ctrl_dev_slot_set_rqst_ident(slot, state); | ||||
} else { | break; | ||||
if (onoff) | default: | ||||
o.cstat[2] |= 0x02; | return; | ||||
else | |||||
o.cstat[2] &= 0xfd; | |||||
} | } | ||||
if (ioctl(fd, ENCIOC_SETELMSTAT, (caddr_t) &o) < 0) { | if (ioctl(fd, ENCIOC_SETELMSTAT, (caddr_t) &o) < 0) { | ||||
close(fd); | close(fd); | ||||
xo_err(EXIT_FAILURE, "ENCIOC_SETELMSTAT"); | xo_err(EXIT_FAILURE, "ENCIOC_SETELMSTAT"); | ||||
} | } | ||||
} | } | ||||
static bool | static bool | ||||
disk_match(const char *devnames, const char *disk, size_t len) | disk_match(const char *devnames, const char *disk, size_t len) | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | for (i = 0; i < g.gl_pathc; i++) { | ||||
} | } | ||||
if (isses) { | if (isses) { | ||||
if (sesid > nobj) { | if (sesid > nobj) { | ||||
close(fd); | close(fd); | ||||
xo_errx(EXIT_FAILURE, | xo_errx(EXIT_FAILURE, | ||||
"Requested SES ID does not exist"); | "Requested SES ID does not exist"); | ||||
} | } | ||||
do_led(fd, sesid, onoff, setfault); | do_led(fd, sesid, objp[sesid].elm_type, onoff, setfault); | ||||
ndisks++; | ndisks++; | ||||
close(fd); | close(fd); | ||||
break; | break; | ||||
} | } | ||||
for (j = 0; j < nobj; j++) { | for (j = 0; j < nobj; j++) { | ||||
if (all) { | 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; | continue; | ||||
} | } | ||||
memset(&objdn, 0, sizeof(objdn)); | memset(&objdn, 0, sizeof(objdn)); | ||||
objdn.elm_idx = objp[j].elm_idx; | objdn.elm_idx = objp[j].elm_idx; | ||||
objdn.elm_names_size = 128; | objdn.elm_names_size = 128; | ||||
objdn.elm_devnames = calloc(128, sizeof(char)); | objdn.elm_devnames = calloc(128, sizeof(char)); | ||||
if (objdn.elm_devnames == NULL) { | if (objdn.elm_devnames == NULL) { | ||||
close(fd); | close(fd); | ||||
xo_err(EXIT_FAILURE, "calloc()"); | xo_err(EXIT_FAILURE, "calloc()"); | ||||
} | } | ||||
if (ioctl(fd, ENCIOC_GETELMDEVNAMES, | if (ioctl(fd, ENCIOC_GETELMDEVNAMES, | ||||
(caddr_t) &objdn) <0) { | (caddr_t) &objdn) <0) { | ||||
continue; | continue; | ||||
} | } | ||||
if (objdn.elm_names_len > 0) { | if (objdn.elm_names_len > 0) { | ||||
if (disk_match(objdn.elm_devnames, disk, len)) { | 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); | onoff, setfault); | ||||
ndisks++; | ndisks++; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
free(objp); | free(objp); | ||||
close(fd); | close(fd); | ||||
▲ Show 20 Lines • Show All 365 Lines • Show Last 20 Lines |