static void cmdline_backspace(struct cmdline *c) { if (c->pos) { u_prev_char(c->buf.buffer, &c->pos); cmdline_delete(c); } }
int __init tivo_init(void) { char buffer[60]; char *value; boardID=0; // is brev on command line? value=cmdline_lookup(arcs_cmdline,"brev="); if (!value) /* board rev arg not passed in, so make an assumption here */ { strcpy(buffer,"0x90002"); /* X3 is alloted the default board revision of 0x9002 */ boardID=simple_strtoul(buffer,NULL,0)<<8; } else { boardID=simple_strtoul(value, NULL, 0)<<8; } // in any case, force board ID into range for this platform if (boardID < kTivoConfigBoardIDPaceBase || boardID > kTivoConfigBoardIDPaceMax) { printk("Missing or invalid BoardID, taking a wild guess...\n"); boardID = kTivoConfigBoardIDX3; } printk(KERN_NOTICE "BoardID is 0x%X\n", boardID); // tell kernel InitTivoConfig( (TivoConfigValue) boardID ); // and user space if (!cmdline_lookup(arcs_cmdline,"boardID=")) cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE, "boardID=0x%X", boardID); // set default HpkImpl if (!cmdline_lookup(arcs_cmdline,"HpkImpl=")) cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE, "HpkImpl=Pac02"); // set default boot device if (!cmdline_lookup(arcs_cmdline,"boot_device=")) { // use sda if firmware reports BOOT_DEVICE=1, else normally use mmca if ((cfe_getenv("BOOT_DEVICE", buffer, sizeof(buffer))==CFE_OK) && (simple_strtoul(buffer,NULL,0) != 0)) cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE,"boot_device=sda"); else cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE,"boot_device=mmca"); } // also set default bmem if not on command line if (!cmdline_lookup(arcs_cmdline,"bmem=")) { unsigned long size, addr; if(!GetTivoConfig(kTivoConfigBmem0Size, &size) && !GetTivoConfig(kTivoConfigBmem0Address,&addr)) { sprintf(buffer,"%lu@%lu",size,addr); bmem_setup(buffer); if(!GetTivoConfig(kTivoConfigBmem1Size, &size) && !GetTivoConfig(kTivoConfigBmem1Address, &addr)) { sprintf(buffer,"%lu@%lu",size,addr); bmem_setup(buffer); } } } // set default sata spread spectrum if (!cmdline_lookup(arcs_cmdline, "sata3_ssc")) cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE, "sata3_ssc"); #ifdef CONFIG_TIVO_DEVEL if (cmdline_lookup(arcs_cmdline, "nfs1")) { cmdline_delete(arcs_cmdline, "nfs1", NULL); cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE, "xnfsinit=192.168.1.250:/Pac02/nfsroot sysgen=true rw"); } if ((value = cmdline_lookup(arcs_cmdline, "nfsinit=")) != NULL || (value = cmdline_lookup(arcs_cmdline, "xnfsinit=")) !=NULL) { // note, leave the [x]nfsinit command intact so it lands in the environment cmdline_delete(arcs_cmdline, "init=", "nfsroot=", NULL); cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE, "init=/devbin/nfsinit nfsroot=%s", value); } #else // disable dsscon by default on release if (!cmdline_lookup(arcs_cmdline, "dsscon=")) cmdline_append(arcs_cmdline, COMMAND_LINE_SIZE, "dsscon=false"); #endif return 0; }
int cmdline_handle_key(struct cmdline *c, struct ptr_array *history, int key) { char buf[4]; int count; if (special_input_keypress(key, buf, &count)) { // \n is not allowed in command line because // command/search history file would break if (count && buf[0] != '\n') cmdline_insert_bytes(&cmdline, buf, count); c->search_pos = -1; return 1; } if (key <= KEY_UNICODE_MAX) { c->pos += gbuf_insert_ch(&c->buf, c->pos, key); return 1; } switch (key) { case CTRL('['): // ESC case CTRL('C'): cmdline_clear(c); return CMDLINE_CANCEL; case CTRL('D'): cmdline_delete(c); break; case CTRL('K'): cmdline_delete_eol(c); break; case CTRL('H'): case CTRL('?'): if (c->buf.len == 0) return CMDLINE_CANCEL; cmdline_backspace(c); break; case CTRL('U'): cmdline_delete_bol(c); break; case CTRL('V'): special_input_activate(); break; case CTRL('W'): cmdline_erase_word(c); break; case CTRL('A'): c->pos = 0; return 1; case CTRL('B'): cmdline_prev_char(c); return 1; case CTRL('E'): c->pos = c->buf.len; return 1; case CTRL('F'): cmdline_next_char(c); return 1; case CTRL('Z'): suspend(); return 1; case KEY_DELETE: cmdline_delete(c); break; case KEY_LEFT: cmdline_prev_char(c); return 1; case KEY_RIGHT: cmdline_next_char(c); return 1; case KEY_HOME: c->pos = 0; return 1; case KEY_END: c->pos = c->buf.len; return 1; case KEY_UP: if (history == NULL) return 0; if (c->search_pos < 0) { free(c->search_text); c->search_text = gbuf_cstring(&c->buf); c->search_pos = history->count; } if (history_search_forward(history, &c->search_pos, c->search_text)) set_text(c, history->ptrs[c->search_pos]); return 1; case KEY_DOWN: if (history == NULL) return 0; if (c->search_pos < 0) return 1; if (history_search_backward(history, &c->search_pos, c->search_text)) { set_text(c, history->ptrs[c->search_pos]); } else { set_text(c, c->search_text); c->search_pos = -1; } return 1; case KEY_PASTE: cmdline_insert_paste(c); break; default: return 0; } c->search_pos = -1; return 1; }
int cmdline_handle_key(struct cmdline *c, struct ptr_array *history, enum term_key_type type, unsigned int key) { char buf[4]; int count; if (special_input_keypress(type, key, buf, &count)) { // \n is not allowed in command line because // command/search history file would break if (count && buf[0] != '\n') cmdline_insert_bytes(&cmdline, buf, count); c->search_pos = -1; return 1; } switch (type) { case KEY_NORMAL: switch (key) { case CTRL('['): // ESC case CTRL('C'): cmdline_clear(c); return CMDLINE_CANCEL; case CTRL('D'): cmdline_delete(c); break; case CTRL('K'): cmdline_delete_eol(c); break; case CTRL('H'): case 0x7f: // ^? if (c->buf.len == 0) return CMDLINE_CANCEL; cmdline_backspace(c); break; case CTRL('U'): cmdline_delete_bol(c); break; case CTRL('V'): special_input_activate(); break; case CTRL('W'): cmdline_erase_word(c); break; case CTRL('A'): c->pos = 0; return 1; case CTRL('B'): cmdline_prev_char(c); return 1; case CTRL('E'): c->pos = strlen(c->buf.buffer); return 1; case CTRL('F'): cmdline_next_char(c); return 1; case CTRL('Z'): suspend(); return 1; default: // don't insert control characters if (key >= 0x20 && key != 0x7f) { cmdline_insert(c, key); return 1; } return 0; } break; case KEY_META: return 0; case KEY_SPECIAL: switch (key) { case SKEY_DELETE: cmdline_delete(c); break; case SKEY_LEFT: cmdline_prev_char(c); return 1; case SKEY_RIGHT: cmdline_next_char(c); return 1; case SKEY_HOME: c->pos = 0; return 1; case SKEY_END: c->pos = strlen(c->buf.buffer); return 1; case SKEY_UP: if (history == NULL) return 0; if (c->search_pos < 0) { free(c->search_text); c->search_text = xstrdup(c->buf.buffer); c->search_pos = history->count; } if (history_search_forward(history, &c->search_pos, c->search_text)) set_text(c, history->ptrs[c->search_pos]); return 1; case SKEY_DOWN: if (history == NULL) return 0; if (c->search_pos < 0) return 1; if (history_search_backward(history, &c->search_pos, c->search_text)) { set_text(c, history->ptrs[c->search_pos]); } else { set_text(c, c->search_text); c->search_pos = -1; } return 1; default: return 0; } break; case KEY_PASTE: cmdline_insert_paste(c); break; } c->search_pos = -1; return 1; }