Ejemplo n.º 1
0
static void cmdline_backspace(struct cmdline *c)
{
	if (c->pos) {
		u_prev_char(c->buf.buffer, &c->pos);
		cmdline_delete(c);
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
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;
}