Changeset View
Changeset View
Standalone View
Standalone View
head/usr.sbin/devctl/devctl.c
Show First 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
SET_DECLARE(DEVCTL_DATASET(top), struct devctl_command); | SET_DECLARE(DEVCTL_DATASET(top), struct devctl_command); | ||||
DEVCTL_TABLE(top, set); | DEVCTL_TABLE(top, set); | ||||
static void | static void | ||||
usage(void) | usage(void) | ||||
{ | { | ||||
fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n", | fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", | ||||
"usage: devctl attach device", | "usage: devctl attach device", | ||||
" devctl detach [-f] device", | " devctl detach [-f] device", | ||||
" devctl disable [-f] device", | " devctl disable [-f] device", | ||||
" devctl enable device", | " devctl enable device", | ||||
" devctl suspend device", | " devctl suspend device", | ||||
" devctl resume device", | " devctl resume device", | ||||
" devctl set driver [-f] device driver"); | " devctl set driver [-f] device driver", | ||||
" devctl rescan device", | |||||
" devctl delete [-f] device"); | |||||
exit(1); | exit(1); | ||||
} | } | ||||
static int | static int | ||||
devctl_table_handler(struct devctl_command **start, | devctl_table_handler(struct devctl_command **start, | ||||
struct devctl_command **end, int ac, char **av) | struct devctl_command **end, int ac, char **av) | ||||
{ | { | ||||
struct devctl_command **cmd; | struct devctl_command **cmd; | ||||
▲ Show 20 Lines • Show All 176 Lines • ▼ Show 20 Lines | rescan(int ac, char **av) | ||||
if (ac != 2) | if (ac != 2) | ||||
usage(); | usage(); | ||||
if (devctl_rescan(av[1]) < 0) | if (devctl_rescan(av[1]) < 0) | ||||
err(1, "Failed to rescan %s", av[1]); | err(1, "Failed to rescan %s", av[1]); | ||||
return (0); | return (0); | ||||
} | } | ||||
DEVCTL_COMMAND(top, rescan, rescan); | DEVCTL_COMMAND(top, rescan, rescan); | ||||
static void | |||||
delete_usage(void) | |||||
{ | |||||
fprintf(stderr, "usage: devctl delete [-f] device\n"); | |||||
exit(1); | |||||
} | |||||
static int | |||||
delete(int ac, char **av) | |||||
{ | |||||
bool force; | |||||
int ch; | |||||
force = false; | |||||
while ((ch = getopt(ac, av, "f")) != -1) | |||||
switch (ch) { | |||||
case 'f': | |||||
force = true; | |||||
break; | |||||
default: | |||||
delete_usage(); | |||||
} | |||||
ac -= optind; | |||||
av += optind; | |||||
if (ac != 1) | |||||
delete_usage(); | |||||
if (devctl_delete(av[0], force) < 0) | |||||
err(1, "Failed to delete %s", av[0]); | |||||
return (0); | |||||
} | |||||
DEVCTL_COMMAND(top, delete, delete); | |||||
int | int | ||||
main(int ac, char *av[]) | main(int ac, char *av[]) | ||||
{ | { | ||||
struct devctl_command **cmd; | struct devctl_command **cmd; | ||||
if (ac == 1) | if (ac == 1) | ||||
usage(); | usage(); | ||||
Show All 14 Lines |