Rev 589 | Rev 594 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 589 | Rev 591 | ||
|---|---|---|---|
| Line 116... | Line 116... | ||
| 116 | 116 | ||
| 117 | /** Call0 - call function with no parameters */ |
117 | /** Call0 - call function with no parameters */ |
| 118 | static char call0_buf[MAX_CMDLINE+1]; |
118 | static char call0_buf[MAX_CMDLINE+1]; |
| 119 | static char carg1_buf[MAX_CMDLINE+1]; |
119 | static char carg1_buf[MAX_CMDLINE+1]; |
| 120 | static char carg2_buf[MAX_CMDLINE+1]; |
120 | static char carg2_buf[MAX_CMDLINE+1]; |
| - | 121 | static char carg3_buf[MAX_CMDLINE+1]; |
|
| 121 | 122 | ||
| 122 | static int cmd_call0(cmd_arg_t *argv); |
123 | static int cmd_call0(cmd_arg_t *argv); |
| 123 | static cmd_arg_t call0_argv = { |
124 | static cmd_arg_t call0_argv = { |
| 124 | .type = ARG_TYPE_STRING, |
125 | .type = ARG_TYPE_STRING, |
| 125 | .buffer = call0_buf, |
126 | .buffer = call0_buf, |
| Line 178... | Line 179... | ||
| 178 | .func = cmd_call2, |
179 | .func = cmd_call2, |
| 179 | .argc = 3, |
180 | .argc = 3, |
| 180 | .argv = call2_argv |
181 | .argv = call2_argv |
| 181 | }; |
182 | }; |
| 182 | 183 | ||
| - | 184 | static int cmd_call3(cmd_arg_t *argv); |
|
| - | 185 | static cmd_arg_t call3_argv[] = { |
|
| - | 186 | { |
|
| - | 187 | .type = ARG_TYPE_STRING, |
|
| - | 188 | .buffer = call0_buf, |
|
| - | 189 | .len = sizeof(call0_buf) |
|
| - | 190 | }, |
|
| - | 191 | { |
|
| - | 192 | .type = ARG_TYPE_VAR, |
|
| - | 193 | .buffer = carg1_buf, |
|
| - | 194 | .len = sizeof(carg1_buf) |
|
| - | 195 | }, |
|
| - | 196 | { |
|
| - | 197 | .type = ARG_TYPE_VAR, |
|
| - | 198 | .buffer = carg2_buf, |
|
| - | 199 | .len = sizeof(carg2_buf) |
|
| - | 200 | }, |
|
| - | 201 | { |
|
| - | 202 | .type = ARG_TYPE_VAR, |
|
| - | 203 | .buffer = carg3_buf, |
|
| - | 204 | .len = sizeof(carg3_buf) |
|
| - | 205 | } |
|
| - | 206 | ||
| - | 207 | }; |
|
| - | 208 | static cmd_info_t call3_info = { |
|
| - | 209 | .name = "call3", |
|
| - | 210 | .description = "call3 <function> <arg1> <arg2> <arg3> -> call function(arg1,arg2,arg3).", |
|
| - | 211 | .func = cmd_call3, |
|
| - | 212 | .argc = 4, |
|
| - | 213 | .argv = call3_argv |
|
| - | 214 | }; |
|
| 183 | 215 | ||
| 184 | /** Data and methods for 'halt' command. */ |
216 | /** Data and methods for 'halt' command. */ |
| 185 | static int cmd_halt(cmd_arg_t *argv); |
217 | static int cmd_halt(cmd_arg_t *argv); |
| 186 | static cmd_info_t halt_info = { |
218 | static cmd_info_t halt_info = { |
| 187 | .name = "halt", |
219 | .name = "halt", |
| Line 225... | Line 257... | ||
| 225 | 257 | ||
| 226 | spinlock_initialize(&call2_info.lock, "kconsole_call2"); |
258 | spinlock_initialize(&call2_info.lock, "kconsole_call2"); |
| 227 | link_initialize(&call2_info.link); |
259 | link_initialize(&call2_info.link); |
| 228 | if (!cmd_register(&call2_info)) |
260 | if (!cmd_register(&call2_info)) |
| 229 | panic("could not register command %s\n", call2_info.name); |
261 | panic("could not register command %s\n", call2_info.name); |
| - | 262 | ||
| - | 263 | spinlock_initialize(&call3_info.lock, "kconsole_call3"); |
|
| - | 264 | link_initialize(&call3_info.link); |
|
| - | 265 | if (!cmd_register(&call3_info)) |
|
| - | 266 | panic("could not register command %s\n", call3_info.name); |
|
| 230 | 267 | ||
| 231 | spinlock_initialize(&halt_info.lock, "kconsole_halt"); |
268 | spinlock_initialize(&halt_info.lock, "kconsole_halt"); |
| 232 | link_initialize(&halt_info.link); |
269 | link_initialize(&halt_info.link); |
| 233 | if (!cmd_register(&halt_info)) |
270 | if (!cmd_register(&halt_info)) |
| 234 | panic("could not register command %s\n", halt_info.name); |
271 | panic("could not register command %s\n", halt_info.name); |
| Line 650... | Line 687... | ||
| 650 | } |
687 | } |
| 651 | 688 | ||
| 652 | return 1; |
689 | return 1; |
| 653 | } |
690 | } |
| 654 | 691 | ||
| - | 692 | /** Call function with three parameters */ |
|
| - | 693 | int cmd_call3(cmd_arg_t *argv) |
|
| - | 694 | { |
|
| - | 695 | __address symaddr; |
|
| - | 696 | char *symbol; |
|
| - | 697 | __native (*f)(__native,__native,__native); |
|
| - | 698 | __native arg1 = argv[1].intval; |
|
| - | 699 | __native arg2 = argv[2].intval; |
|
| - | 700 | __native arg3 = argv[3].intval; |
|
| - | 701 | ||
| - | 702 | symaddr = get_symbol_addr(argv->buffer); |
|
| - | 703 | if (!symaddr) |
|
| - | 704 | printf("Symbol %s not found.\n", argv->buffer); |
|
| - | 705 | else if (symaddr == (__address) -1) { |
|
| - | 706 | symtab_print_search(argv->buffer); |
|
| - | 707 | printf("Duplicate symbol, be more specific.\n"); |
|
| - | 708 | } else { |
|
| - | 709 | symbol = get_symtab_entry(symaddr); |
|
| - | 710 | printf("Calling f(0x%x,0x%x, 0x%x): 0x%p: %s\n", |
|
| - | 711 | arg1, arg2, arg3, symaddr, symbol); |
|
| - | 712 | f = (__native (*)(__native,__native,__native)) symaddr; |
|
| - | 713 | printf("Result: 0x%x\n", f(arg1, arg2, arg3)); |
|
| - | 714 | } |
|
| - | 715 | ||
| - | 716 | return 1; |
|
| - | 717 | } |
|
| - | 718 | ||
| 655 | 719 | ||
| 656 | /** Print detailed description of 'describe' command. */ |
720 | /** Print detailed description of 'describe' command. */ |
| 657 | void desc_help(void) |
721 | void desc_help(void) |
| 658 | { |
722 | { |
| 659 | printf("Syntax: describe command_name\n"); |
723 | printf("Syntax: describe command_name\n"); |