2 * (C) Copyright 2007-2010 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
4 * This file is released under the GPLv2. See the COPYING file for more
22 const char name
[SHELL_CMD_MAX_LEN
];
24 /* handle function pointer */
25 int (*fnx
)(struct virt_sys
*sys
, char *cmd
, int len
);
27 /* sub-command handler table */
32 * Map a device type to a nice to display name
34 static char* type2name(u16 type
)
37 case 0x1403: return "PRT";
38 case 0x1732: return "OSA";
39 case 0x3088: return "CTCA";
40 case 0x3215: return "CONS";
41 case 0x3278: return "GRAF";
42 case 0x3505: return "RDR";
43 case 0x3525: return "PUN";
47 case 0x9336: return "DASD";
49 /* various tape drives */
52 case 0x3590: return "TAPE";
54 default: return "????";
59 * We use includes here to avoid namespace polution with all the sub-command
62 #include "cmd_helpers.c"
64 #include "cmd_beginstop.c"
65 #include "cmd_display.c"
66 #include "cmd_enable.c"
67 #include "cmd_logon.c"
68 #include "cmd_query.c"
70 #include "cmd_store.c"
71 #include "cmd_system.c"
73 static struct cpcmd commands
[] = {
74 {"BEGIN", cmd_begin
, NULL
},
75 {"BEGI", cmd_begin
, NULL
},
76 {"BEG", cmd_begin
, NULL
},
77 {"BE", cmd_begin
, NULL
},
79 {"DISPLAY", NULL
, cmd_tbl_display
},
80 {"DISPLA", NULL
, cmd_tbl_display
},
81 {"DISPL", NULL
, cmd_tbl_display
},
82 {"DISP", NULL
, cmd_tbl_display
},
83 {"DIS", NULL
, cmd_tbl_display
},
84 {"DI", NULL
, cmd_tbl_display
},
85 {"D", NULL
, cmd_tbl_display
},
87 {"ENABLE", cmd_enable
, NULL
},
88 {"ENABL", cmd_enable
, NULL
},
89 {"ENAB", cmd_enable
, NULL
},
90 {"ENA", cmd_enable
, NULL
},
92 {"IPL", cmd_ipl
, NULL
},
93 {"IP", cmd_ipl
, NULL
},
96 {"LOGIN", cmd_logon_fail
, NULL
},
97 {"LOGON", cmd_logon_fail
, NULL
},
98 {"LOGO", cmd_logon_fail
, NULL
},
99 {"LOGI", cmd_logon_fail
, NULL
},
100 {"LOG", cmd_logon_fail
, NULL
},
101 {"LO", cmd_logon_fail
, NULL
},
102 {"L", cmd_logon_fail
, NULL
},
104 {"QUERY", NULL
, cmd_tbl_query
},
105 {"QUER", NULL
, cmd_tbl_query
},
106 {"QUE", NULL
, cmd_tbl_query
},
107 {"QU", NULL
, cmd_tbl_query
},
108 {"Q", NULL
, cmd_tbl_query
},
110 {"SET", NULL
, cmd_tbl_set
},
112 {"STOP", cmd_stop
, NULL
},
114 {"STORE", NULL
, cmd_tbl_store
},
115 {"STOR", NULL
, cmd_tbl_store
},
116 {"STO", NULL
, cmd_tbl_store
},
118 {"SYSTEM", cmd_system
, NULL
},
119 {"SYSTE", cmd_system
, NULL
},
120 {"SYST", cmd_system
, NULL
},
121 {"SYS", cmd_system
, NULL
},
125 static int __invoke_shell_cmd(struct cpcmd
*t
, struct virt_sys
*sys
, char *cmd
, int len
)
131 tok
= strmsep(&cmd
, " ");
135 for(i
=0; t
[i
].name
[0]; i
++) {
136 if (strcasecmp(t
[i
].name
, tok
))
142 return t
[i
].fnx(sys
, cmd
, len
);
144 ret
= __invoke_shell_cmd(t
[i
].sub
, sys
, cmd
, len
);
145 return (ret
== -ENOENT
) ? -ESUBENOENT
: ret
;
151 int invoke_shell_cmd(struct virt_sys
*sys
, char *cmd
, int len
)
153 return __invoke_shell_cmd(commands
, sys
, cmd
, len
);