Exemple #1
0
void ramstage_cache_invalid(void)
{
#if CONFIG_RESET_ON_INVALID_RAMSTAGE_CACHE
	/* Perform cold reset on invalid ramstage cache. */
	cold_reset();
#endif
}
Exemple #2
0
AGESA_STATUS agesa_Reset(uint32_t Func, uintptr_t Data, void *ConfigPtr)
{
	AGESA_STATUS Status;
	uintptr_t ResetType;

	ResetType = Data;

	/*
	 * This should perform the RESET based upon the ResetType, but coreboot
	 * doesn't have a reset manager to handle a WHENEVER case. Do all
	 * resets immediately.
	 */
	switch (ResetType) {
	case WARM_RESET_WHENEVER:
	case WARM_RESET_IMMEDIATELY:
		warm_reset();
		break;

	case COLD_RESET_WHENEVER:
	case COLD_RESET_IMMEDIATELY:
		cold_reset();
		break;

	default:
		break;
	}

	Status = 0;
	return Status;
}
Exemple #3
0
void kbd_int(UBYTE scancode)
{
    ULONG value;                /* the value to push into iorec */
    WORD ascii = 0;
    UBYTE scancode_only = scancode & ~KEY_RELEASED;  /* get rid of release bits */
    BOOL modifier;

    KDEBUG(("================\n"));
    KDEBUG(("Key-scancode: 0x%02x, key-shift bits: 0x%02x\n", scancode, shifty));

    /* keyboard warm/cold reset */
    if ((scancode == 0x53)  /* Del key and shifty is Alt+Ctrl but not LShift */
        && ((shifty & (MODE_ALT|MODE_CTRL|MODE_LSHIFT)) == (MODE_ALT|MODE_CTRL))) {
        if (shifty & MODE_RSHIFT) {
            /* Ctrl+Alt+RShift+Del means cold reset */
            cold_reset();
        }
        else {
            /* Ctrl+Alt+Del means warm reset */
            warm_reset();
        }
    }

    /* the additional mouse buttons use a separate vector */
    if (   scancode_only == 0x37  /* Mouse button 3 */
        || scancode_only == 0x5e  /* Mouse button 4 */
        || scancode_only == 0x5f  /* Mouse button 5 */
        || scancode_only == 0x59  /* Wheel up */
        || scancode_only == 0x5a  /* Wheel down */
        || scancode_only == 0x5c  /* Wheel left */
        || scancode_only == 0x5d) /* Wheel right */
    {
        mousexvec(scancode);
        return;
    }

    if (scancode & KEY_RELEASED) {
        scancode = scancode_only;
        switch (scancode) {
        case KEY_RSHIFT:
            shifty &= ~MODE_RSHIFT;     /* clear bit */
            break;
        case KEY_LSHIFT:
            shifty &= ~MODE_LSHIFT;     /* clear bit */
            break;
        case KEY_CTRL:
            shifty &= ~MODE_CTRL;       /* clear bit */
            break;
        case KEY_ALT:
            shifty &= ~MODE_ALT;        /* clear bit */
            if (kb_altnum >= 0) {
                ascii = kb_altnum & 0xFF;
                kb_altnum = -1;
                kb_ticks = 0;           /* stop key repeat */
                goto push_value;
            }
            break;
        default:                    /* non-modifier keys: */
            kb_ticks = 0;               /*  stop key repeat */
        }
        handle_mouse_mode(kb_last_key); /* exit mouse mode if appropriate */
        return;
    }

    /*
     * a key has been pressed
     */
    modifier = TRUE;
    switch (scancode) {
    case KEY_RSHIFT:
        shifty |= MODE_RSHIFT;  /* set bit */
        break;
    case KEY_LSHIFT:
        shifty |= MODE_LSHIFT;  /* set bit */
        break;
    case KEY_CTRL:
        shifty |= MODE_CTRL;    /* set bit */
        break;
    case KEY_ALT:
        shifty |= MODE_ALT;     /* set bit */
        break;
    case KEY_CAPS:
        if (conterm & 1) {
            keyclick(KEY_CAPS);
        }
        shifty ^= MODE_CAPS;    /* toggle bit */
        break;
    default:
        modifier = FALSE;
        break;
    }
    if (modifier) {     /* the user has pressed a modifier key */
        /*
         * first, check for keyboard hot switch and if so, do the switch
         */
        if (current_keytbl.features&DUAL_KEYBOARD)
            if ((shifty&MODE_SCA) == HOTSWITCH_MODE)
                kb_switched ^= 0x01;
        /*
         * check if an arrow key was already down and, if so, send the appropriate mouse packet
         */
        handle_mouse_mode(kb_last_key);
        return;
    }

    /*
     * a non-modifier key has been pressed
     */
    ascii = convert_scancode(&scancode);
    if (ascii < 0)      /* dead key (including alt-keypad) processing */
        return;

    kb_ticks = kb_initial;

  push_value:
    if (conterm & 1)
        keyclick(scancode);

    value = combine_scancode_ascii(scancode,ascii);

    /*
     * if we're not sending mouse packets, send a real key
     */
    if (!mouse_packet[0])
        push_ikbdiorec(value);

    kb_last_scancode = scancode;    /* save for do_key_repeat() */
    kb_last_shifty = shifty;
    kb_last_key = value;
    kb_last_ikbdsys = kbdvecs.ikbdsys;
}