void ramstage_cache_invalid(void) { #if CONFIG_RESET_ON_INVALID_RAMSTAGE_CACHE /* Perform cold reset on invalid ramstage cache. */ cold_reset(); #endif }
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; }
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; }