summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-04-24 16:29:28 -0700
committerRandall Spangler <rspangler@chromium.org>2012-04-24 17:46:54 -0700
commit135f14bf498ab19b6e75efc3a0d18ef7c8a8752d (patch)
tree1dd03ec292b5f9f44a24e045e64e0c10ff58b6a6 /common
parent0d19c59aba807f915f1ea46d273bfebe1ded1db9 (diff)
downloadchrome-ec-135f14bf498ab19b6e75efc3a0d18ef7c8a8752d.tar.gz
Refactor async console output
This adds a 'ch' command which prints/sets which channels are active This handles all the async output; the remaining debug commands will be refactored to use ccprintf() / ccputs() in a followup CL. Signed-off-by: Randall Spangler <rspangler@chromium.org> BUG=chrome-os-partner:7464 TEST=manual ch --> all channels active ch 0x100 -> just port80 active powerbtn -> system boots; only port 80 codes shown on console Change-Id: I9efc43acec919b62b78c2c82c61946d32380adfe
Diffstat (limited to 'common')
-rw-r--r--common/charge_state.c17
-rw-r--r--common/console.c145
-rw-r--r--common/host_command.c11
-rw-r--r--common/i8042.c32
-rw-r--r--common/keyboard.c877
-rw-r--r--common/lightbar.c63
-rw-r--r--common/port80.c13
-rw-r--r--common/system_common.c61
-rw-r--r--common/uart_buffering.c20
-rw-r--r--common/usb_charge_commands.c9
-rw-r--r--common/x86_power.c27
11 files changed, 704 insertions, 571 deletions
diff --git a/common/charge_state.c b/common/charge_state.c
index c17df6e97e..a47bb2f23d 100644
--- a/common/charge_state.c
+++ b/common/charge_state.c
@@ -20,10 +20,13 @@
#include "smart_battery.h"
#include "system.h"
#include "timer.h"
-#include "uart.h"
#include "util.h"
#include "x86_power.h"
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_CHARGER, outstr)
+#define CPRINTF(format, args...) cprintf(CC_CHARGER, format, ## args)
+
/* Stop charge when state of charge reaches this percentage */
#define STOP_CHARGE_THRESHOLD 100
@@ -414,7 +417,7 @@ static enum power_state state_error(struct power_state_context *ctx)
/* Debug output */
if (ctx->curr.error != logged_error) {
- uart_printf("[Charge error: flag[%08b -> %08b], ac %d, "
+ CPRINTF("[Charge error: flag[%08b -> %08b], ac %d, "
" charger %s, battery %s\n",
logged_error, ctx->curr.error, ctx->curr.ac,
(ctx->curr.error & F_CHARGER_MASK) ?
@@ -439,7 +442,7 @@ static void charging_progress(struct power_state_context *ctx)
else
battery_time_to_empty(&minutes);
- uart_printf("[Battery %3d%% / %dh:%d]\n",
+ CPRINTF("[Battery %3d%% / %dh:%d]\n",
ctx->curr.batt.state_of_charge,
minutes / 60, minutes % 60);
return;
@@ -455,7 +458,7 @@ static void charging_progress(struct power_state_context *ctx)
seconds = (int)(get_time().val -
ctx->trickle_charging_time.val) / (int)SECOND;
minutes = seconds / 60;
- uart_printf("[Precharge CHG(%dmV) BATT(%dmV %dmA) "
+ CPRINTF("[Precharge CHG(%dmV) BATT(%dmV %dmA) "
"%dh:%d]\n", ctx->curr.charging_voltage,
ctx->curr.batt.voltage, ctx->curr.batt.current,
minutes / 60, minutes % 60);
@@ -508,15 +511,15 @@ void charge_state_machine_task(void)
new_state = state_error(&ctx);
break;
default:
- uart_printf("[Undefined charging state %d]\n",
- ctx.curr.state);
+ CPRINTF("[Undefined charging state %d]\n",
+ ctx.curr.state);
ctx.curr.state = PWR_STATE_ERROR;
new_state = PWR_STATE_ERROR;
}
if (new_state) {
ctx.curr.state = new_state;
- uart_printf("[Charge state %s -> %s]\n",
+ CPRINTF("[Charge state %s -> %s]\n",
state_name[ctx.prev.state],
state_name[new_state]);
}
diff --git a/common/console.c b/common/console.c
index 29de7ef85a..0eff6e3529 100644
--- a/common/console.c
+++ b/common/console.c
@@ -15,19 +15,74 @@
#define PROMPT "> "
+/* Default to all channels active */
+static uint32_t channel_mask = 0xffffffff;
+
+static char input_buf[80]; /* Current console command line */
+
+/* List of channel names; must match enum console_channel. */
+/* TODO: move this to board.c */
+static const char *channel_names[CC_CHANNEL_COUNT] = {
+ "command",
+ "charger",
+ "hostcmd",
+ "i8042",
+ "keyboard",
+ "keyscan",
+ "lightbar",
+ "lpc",
+ "port80",
+ "powerbtn",
+ "system",
+ "task",
+ "usbcharge",
+ "x86power",
+};
-void console_has_input(void)
+/*****************************************************************************/
+/* Channel-based console output */
+
+int cputs(enum console_channel channel, const char *outstr)
{
- /* Wake up the console task */
- task_wake(TASK_ID_CONSOLE);
+ /* Filter out inactive channels */
+ if (!((1 << channel) & channel_mask))
+ return EC_SUCCESS;
+
+ return uart_puts(outstr);
+}
+
+
+int cprintf(enum console_channel channel, const char *format, ...)
+{
+ int rv;
+ va_list args;
+
+ /* Filter out inactive channels */
+ if (!((1 << channel) & channel_mask))
+ return EC_SUCCESS;
+
+ va_start(args, format);
+ rv = uart_vprintf(format, args);
+ va_end(args);
+ return rv;
}
+void cflush(void)
+{
+ uart_flush_output();
+}
+
+
+
+/*****************************************************************************/
+/* Console input */
+
/* Splits a line of input into words. Stores the count of words in
* <argc>. Stores pointers to the words in <argv>, which must be at
* least <max_argc> long. If more than <max_argc> words are found,
* discards the excess and returns EC_ERROR_OVERFLOW. */
-int split_words(char *input, int max_argc, int *argc, char **argv)
+static int split_words(char *input, int max_argc, int *argc, char **argv)
{
char *c;
int in_word = 0;
@@ -63,7 +118,7 @@ int split_words(char *input, int max_argc, int *argc, char **argv)
/* Finds a command by name. Returns the command structure, or NULL if
* no match found. */
-const struct console_command *find_command(char *name)
+static const struct console_command *find_command(char *name)
{
const struct console_command *cmd;
@@ -96,15 +151,26 @@ static int handle_command(char *input)
if (cmd)
return cmd->handler(argc, argv);
- uart_printf("Command '%s' not found.\n", argv[0]);
+ ccprintf("Command '%s' not found.\n", argv[0]);
return EC_ERROR_UNKNOWN;
}
-static char input_buf[80];
+static int console_init(void)
+{
+ *input_buf = '\0';
+ uart_set_console_mode(1);
+ uart_printf("Console is enabled; type HELP for help.\n");
+ uart_puts(PROMPT);
+
+ /* TODO: restore channel list from EEPROM */
+
+ return EC_SUCCESS;
+}
+
/* handle a console command */
-void console_process(void)
+static void console_process(void)
{
int rv;
@@ -122,6 +188,14 @@ void console_process(void)
}
}
+
+void console_has_input(void)
+{
+ /* Wake up the console task */
+ task_wake(TASK_ID_CONSOLE);
+}
+
+
void console_task(void)
{
console_init();
@@ -133,6 +207,7 @@ void console_task(void)
}
}
+
/*****************************************************************************/
/* Console commands */
@@ -152,7 +227,7 @@ static int command_help(int argc, char **argv)
const char *next = "zzzz";
if (!(i % 5))
- uart_puts("\n ");
+ ccputs("\n ");
/* Find the next command */
for (cmd = __cmds; cmd < __cmds_end; cmd++) {
@@ -161,27 +236,55 @@ static int command_help(int argc, char **argv)
next = cmd->name;
}
- uart_printf("%-15s", next);
+ ccprintf("%-15s", next);
/* Generates enough output to overflow the buffer */
- uart_flush_output();
+ cflush();
prev = next;
}
- uart_puts("\n");
+ ccputs("\n");
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(help, command_help);
-/*****************************************************************************/
-/* Initialization */
-int console_init(void)
+/* Set active channels */
+static int command_ch(int argc, char **argv)
{
- *input_buf = '\0';
- uart_set_console_mode(1);
- uart_printf("Console is enabled; type HELP for help.\n");
- uart_puts(PROMPT);
+ int m;
+ char *e;
+
+ /* If no args, print the list of channels */
+ if (argc == 1) {
+ int i;
+ ccputs(" # Mask Enabled Channel\n");
+ for (i = 0; i < CC_CHANNEL_COUNT; i++) {
+ ccprintf("%2d %08x %c %s\n",
+ i, 1 << i,
+ (channel_mask & (1 << i) ? '*' : ' '),
+ channel_names[i]);
+ }
+ return EC_SUCCESS;
+ }
- return EC_SUCCESS;
-}
+ /* If one arg, set the mask */
+ if (argc == 2) {
+ m = strtoi(argv[1], &e, 0);
+ if (e && *e) {
+ ccputs("Invalid mask\n");
+ return EC_ERROR_INVAL;
+ }
+ /* No disabling the command output channel */
+ channel_mask = m | (1 << CC_COMMAND);
+
+ /* TODO: save channel list to EEPROM */
+
+ return EC_SUCCESS;
+ }
+
+ /* Otherwise, print help */
+ ccputs("Usage: ch [newmask]\n");
+ return EC_ERROR_INVAL;
+};
+DECLARE_CONSOLE_COMMAND(ch, command_ch);
diff --git a/common/host_command.c b/common/host_command.c
index 09bc339e8b..8428edc497 100644
--- a/common/host_command.c
+++ b/common/host_command.c
@@ -13,9 +13,12 @@
#include "system.h"
#include "task.h"
#include "timer.h"
-#include "uart.h"
#include "util.h"
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_SYSTEM, outstr)
+#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args)
+
#define TASK_EVENT_SLOT(n) TASK_EVENT_CUSTOM(1 << n)
static int host_command[2];
@@ -49,7 +52,7 @@ static enum lpc_status host_command_hello(uint8_t *data)
struct lpc_response_hello *r = (struct lpc_response_hello *)data;
uint32_t d = p->in_data;
- uart_printf("[LPC Hello 0x%08x]\n", d);
+ CPRINTF("[LPC Hello 0x%08x]\n", d);
#ifdef DELAY_HELLO_RESPONSE
/* Pretend command takes a long time, so we can see the busy
@@ -60,7 +63,7 @@ static enum lpc_status host_command_hello(uint8_t *data)
usleep(1000000);
#endif
- uart_puts("[LPC sending hello back]\n");
+ CPUTS("[LPC sending hello back]\n");
r->out_data = d + 0x01020304;
return EC_LPC_RESULT_SUCCESS;
@@ -133,7 +136,7 @@ static void command_process(int slot)
uint8_t *data = lpc_get_host_range(slot);
const struct host_command *cmd = find_host_command(command);
- uart_printf("[hostcmd%d 0x%02x]\n", slot, command);
+ CPRINTF("[hostcmd%d 0x%02x]\n", slot, command);
if (cmd)
lpc_send_host_response(slot, cmd->handler(data));
diff --git a/common/i8042.c b/common/i8042.c
index 5db0c98388..fa5a7bc512 100644
--- a/common/i8042.c
+++ b/common/i8042.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
@@ -7,16 +7,28 @@
#include "board.h"
#include "common.h"
+#include "console.h"
#include "i8042.h"
#include "keyboard.h"
#include "task.h"
#include "timer.h"
-#include "uart.h"
#include "util.h"
#define I8042_DEBUG 1
+/* Console output macros */
+#if I8042_DEBUG >= 4
+#define CPRINTF4(format, args...) cprintf(CC_I8042, format, ## args)
+#else
+#define CPRINTF4(format, args...)
+#endif
+#if I8042_DEBUG >= 5
+#define CPRINTF5(format, args...) cprintf(CC_I8042, format, ## args)
+#else
+#define CPRINTF5(format, args...)
+#endif
+
#define MAX_QUEUED_KEY_PRESS 16
/* Circular buffer to host.
@@ -113,12 +125,9 @@ void i8042_command_task(void)
/* if the host still didn't read that away,
try next time. */
if (keyboard_has_char()) {
-#if I8042_DEBUG >= 5
- uart_printf("[%d] i8042_command_task() "
- "cannot send to host due to host "
- "havn't taken away.\n",
- get_time().le.lo);
-#endif
+ CPRINTF5("[%T i8042_command_task() "
+ "cannot send to host due to host "
+ "haven't taken away.\n");
break;
}
@@ -129,11 +138,8 @@ void i8042_command_task(void)
/* Write to host. */
keyboard_put_char(chr, i8042_irq_enabled);
-#if I8042_DEBUG >= 4
- uart_printf("[%d] i8042_command_task() "
- "sends to host: 0x%02x\n",
- get_time().le.lo, chr);
-#endif
+ CPRINTF4("[%T i8042_command_task() "
+ "sends to host: 0x%02x\n", chr);
}
}
}
diff --git a/common/keyboard.c b/common/keyboard.c
index 95d1586600..3764329d91 100644
--- a/common/keyboard.c
+++ b/common/keyboard.c
@@ -25,6 +25,23 @@
#define KEYBOARD_DEBUG 1
+/* Console output macros */
+#if KEYBOARD_DEBUG >= 1
+#define CPUTS(outstr) cputs(CC_KEYBOARD, outstr)
+#define CPRINTF(format, args...) cprintf(CC_KEYBOARD, format, ## args)
+#else
+#define CPUTS(outstr)
+#define CPRINTF(format, args...)
+#endif
+
+#if KEYBOARD_DEBUG >= 5
+#define CPUTS5(outstr) cputs(CC_KEYBOARD, outstr)
+#define CPRINTF5(format, args...) cprintf(CC_KEYBOARD, format, ## args)
+#else
+#define CPUTS5(outstr)
+#define CPRINTF5(format, args...)
+#endif
+
/*
* i8042 global settings.
@@ -34,9 +51,9 @@ static uint8_t resend_command[MAX_SCAN_CODE_LEN];
static uint8_t resend_command_len = 0;
static uint8_t controller_ram_address;
static uint8_t controller_ram[0x20] = {
- /* the so called "command byte" */
- I8042_XLATE | I8042_AUX_DIS | I8042_KBD_DIS,
- /* 0x01 - 0x1f are controller RAM */
+ /* the so called "command byte" */
+ I8042_XLATE | I8042_AUX_DIS | I8042_KBD_DIS,
+ /* 0x01 - 0x1f are controller RAM */
};
static int power_button_pressed = 0;
static void keyboard_special(uint16_t k);
@@ -70,13 +87,13 @@ static int typematic_len = 0; /* length of typematic_scan_code */
static uint8_t typematic_scan_code[MAX_SCAN_CODE_LEN];
-#define KB_SYSJUMP_TAG 0x4b42 // "KB"
+#define KB_SYSJUMP_TAG 0x4b42 /* "KB" */
#define KB_HOOK_VERSION 1
/* the previous keyboard state before reboot_ec. */
struct kb_state {
uint8_t codeset;
uint8_t ctlram;
- uint8_t pad[2]; // pad to 4 bytes for system_add_jump_tag().
+ uint8_t pad[2]; /* Pad to 4 bytes for system_add_jump_tag(). */
};
@@ -84,41 +101,41 @@ struct kb_state {
#define CROS_ROW_NUM 8 /* TODO: +1 for power button. */
#define CROS_COL_NUM 13
static uint16_t scancode_set1[CROS_ROW_NUM][CROS_COL_NUM] = {
- {0x0000, 0xe05b, 0x003b, 0x0030, 0x0044, 0x0073, 0x0031, 0x0000, 0x000d,
- 0x0000, 0xe038, 0x0000, 0x0000},
- {0x0000, 0x0001, 0x003e, 0x0022, 0x0041, 0x0000, 0x0023, 0x0000, 0x0028,
- 0x0043, 0x0000, 0x000e, 0x0078},
- {0x001d, 0x000f, 0x003d, 0x0014, 0x0040, 0x001b, 0x0015, 0x0056, 0x001a,
- 0x0042, 0x0073, 0x0000, 0x0000},
- {0x0000, 0x0029, 0x003c, 0x0006, 0x003f, 0x0000, 0x0007, 0x0000, 0x000c,
- 0x0000, 0x0000, 0x002b, 0x0079},
- {0xe01d, 0x001e, 0x0020, 0x0021, 0x001f, 0x0025, 0x0024, 0x0000, 0x0027,
- 0x0026, 0x002b, 0x001c, 0x0000},
- {0x0000, 0x002c, 0x002e, 0x002f, 0x002d, 0x0033, 0x0032, 0x002a, 0x0035,
- 0x0034, 0x0000, 0x0039, 0x0000},
- {0x0000, 0x0002, 0x0004, 0x0005, 0x0003, 0x0009, 0x0008, 0x0000, 0x000b,
- 0x000a, 0x0038, 0xe050, 0xe04d},
- {0x0000, 0x0010, 0x0012, 0x0013, 0x0011, 0x0017, 0x0016, 0x0036, 0x0019,
- 0x0018, 0x0000, 0xe048, 0xe04b},
+ {0x0000, 0xe05b, 0x003b, 0x0030, 0x0044, 0x0073, 0x0031, 0x0000, 0x000d,
+ 0x0000, 0xe038, 0x0000, 0x0000},
+ {0x0000, 0x0001, 0x003e, 0x0022, 0x0041, 0x0000, 0x0023, 0x0000, 0x0028,
+ 0x0043, 0x0000, 0x000e, 0x0078},
+ {0x001d, 0x000f, 0x003d, 0x0014, 0x0040, 0x001b, 0x0015, 0x0056, 0x001a,
+ 0x0042, 0x0073, 0x0000, 0x0000},
+ {0x0000, 0x0029, 0x003c, 0x0006, 0x003f, 0x0000, 0x0007, 0x0000, 0x000c,
+ 0x0000, 0x0000, 0x002b, 0x0079},
+ {0xe01d, 0x001e, 0x0020, 0x0021, 0x001f, 0x0025, 0x0024, 0x0000, 0x0027,
+ 0x0026, 0x002b, 0x001c, 0x0000},
+ {0x0000, 0x002c, 0x002e, 0x002f, 0x002d, 0x0033, 0x0032, 0x002a, 0x0035,
+ 0x0034, 0x0000, 0x0039, 0x0000},
+ {0x0000, 0x0002, 0x0004, 0x0005, 0x0003, 0x0009, 0x0008, 0x0000, 0x000b,
+ 0x000a, 0x0038, 0xe050, 0xe04d},
+ {0x0000, 0x0010, 0x0012, 0x0013, 0x0011, 0x0017, 0x0016, 0x0036, 0x0019,
+ 0x0018, 0x0000, 0xe048, 0xe04b},
};
static uint16_t scancode_set2[CROS_ROW_NUM][CROS_COL_NUM] = {
- {0x0000, 0xe01f, 0x0005, 0x0032, 0x0009, 0x0051, 0x0031, 0x0000, 0x0055,
- 0x0000, 0xe011, 0x0000, 0x0000},
- {0x0000, 0x0076, 0x000c, 0x0034, 0x0083, 0x0000, 0x0033, 0x0000, 0x0052,
- 0x0001, 0x0000, 0x0066, 0x0067},
- {0x0014, 0x000d, 0x0004, 0x002c, 0x000b, 0x005b, 0x0035, 0x0061, 0x0054,
- 0x000a, 0x0051, 0x0000, 0x0000},
- {0x0000, 0x000e, 0x0006, 0x002e, 0x0003, 0x0000, 0x0036, 0x0000, 0x004e,
- 0x0000, 0x0000, 0x005d, 0x0064},
- {0xe014, 0x001c, 0x0023, 0x002b, 0x001b, 0x0042, 0x003b, 0x0000, 0x004c,
- 0x004b, 0x005d, 0x005a, 0x0000},
- {0x0000, 0x001a, 0x0021, 0x002a, 0x0022, 0x0041, 0x003a, 0x0012, 0x004a,
- 0x0049, 0x0000, 0x0029, 0x0000},
- {0x0000, 0x0016, 0x0026, 0x0025, 0x001e, 0x003e, 0x003d, 0x0000, 0x0045,
- 0x0046, 0x0011, 0xe072, 0xe074},
- {0x0000, 0x0015, 0x0024, 0x002d, 0x001d, 0x0043, 0x003c, 0x0059, 0x004d,
- 0x0044, 0x0000, 0xe075, 0xe06b},
+ {0x0000, 0xe01f, 0x0005, 0x0032, 0x0009, 0x0051, 0x0031, 0x0000, 0x0055,
+ 0x0000, 0xe011, 0x0000, 0x0000},
+ {0x0000, 0x0076, 0x000c, 0x0034, 0x0083, 0x0000, 0x0033, 0x0000, 0x0052,
+ 0x0001, 0x0000, 0x0066, 0x0067},
+ {0x0014, 0x000d, 0x0004, 0x002c, 0x000b, 0x005b, 0x0035, 0x0061, 0x0054,
+ 0x000a, 0x0051, 0x0000, 0x0000},
+ {0x0000, 0x000e, 0x0006, 0x002e, 0x0003, 0x0000, 0x0036, 0x0000, 0x004e,
+ 0x0000, 0x0000, 0x005d, 0x0064},
+ {0xe014, 0x001c, 0x0023, 0x002b, 0x001b, 0x0042, 0x003b, 0x0000, 0x004c,
+ 0x004b, 0x005d, 0x005a, 0x0000},
+ {0x0000, 0x001a, 0x0021, 0x002a, 0x0022, 0x0041, 0x003a, 0x0012, 0x004a,
+ 0x0049, 0x0000, 0x0029, 0x0000},
+ {0x0000, 0x0016, 0x0026, 0x0025, 0x001e, 0x003e, 0x003d, 0x0000, 0x0045,
+ 0x0046, 0x0011, 0xe072, 0xe074},
+ {0x0000, 0x0015, 0x0024, 0x002d, 0x001d, 0x0043, 0x003c, 0x0059, 0x004d,
+ 0x0044, 0x0000, 0xe075, 0xe06b},
};
@@ -126,59 +143,56 @@ static uint16_t scancode_set2[CROS_ROW_NUM][CROS_COL_NUM] = {
static uint8_t simulated_key[CROS_COL_NUM];
-/* change to set 1 if the I8042_XLATE flag is set. */
-static enum scancode_set_list acting_code_set(enum scancode_set_list set) {
- if (controller_ram[0] & I8042_XLATE) {
- /* If the keyboard translation is enabled,
- * then always generates set 1. */
- return SCANCODE_SET_1;
- }
- return set;
+/* Change to set 1 if the I8042_XLATE flag is set. */
+static enum scancode_set_list acting_code_set(enum scancode_set_list set)
+{
+ if (controller_ram[0] & I8042_XLATE) {
+ /* If the keyboard translation is enabled, then always
+ * generates set 1. */
+ return SCANCODE_SET_1;
+ }
+ return set;
}
-static enum ec_error_list matrix_callback(
- int8_t row, int8_t col, int8_t pressed,
- enum scancode_set_list code_set, uint8_t *scan_code, int32_t* len) {
+static enum ec_error_list matrix_callback(int8_t row, int8_t col,
+ int8_t pressed,
+ enum scancode_set_list code_set,
+ uint8_t *scan_code, int32_t* len)
+{
+ uint16_t make_code;
- uint16_t make_code;
+ ASSERT(scan_code);
+ ASSERT(len);
- ASSERT(scan_code);
- ASSERT(len);
+ if (row > CROS_ROW_NUM || col > CROS_COL_NUM)
+ return EC_ERROR_INVAL;
- if (row > CROS_ROW_NUM ||
- col > CROS_COL_NUM) {
- return EC_ERROR_INVAL;
- }
+ if (pressed)
+ keyboard_special(scancode_set1[row][col]);
- if (pressed)
- keyboard_special(scancode_set1[row][col]);
+ *len = 0;
- *len = 0;
+ code_set = acting_code_set(code_set);
- code_set = acting_code_set(code_set);
+ switch (code_set) {
+ case SCANCODE_SET_1:
+ make_code = scancode_set1[row][col];
+ break;
- switch (code_set) {
- case SCANCODE_SET_1:
- make_code = scancode_set1[row][col];
- break;
+ case SCANCODE_SET_2:
+ make_code = scancode_set2[row][col];
+ break;
- case SCANCODE_SET_2:
- make_code = scancode_set2[row][col];
- break;
+ default:
+ CPRINTF("[Not supported scan code set: %d]\n", code_set);
+ return EC_ERROR_UNIMPLEMENTED;
+ }
- default:
-#if KEYBOARD_DEBUG >= 1
- uart_printf("[Not supported scan code set: %d]\n", code_set);
-#endif
- return EC_ERROR_UNIMPLEMENTED;
- }
- if (!make_code) {
-#if KEYBOARD_DEBUG >= 1
- uart_printf("[No scancode for (row:col)=(%d:%d)]\n", row, col);
-#endif
- return EC_ERROR_UNIMPLEMENTED;
- }
+ if (!make_code) {
+ CPRINTF("[No scancode for (row:col)=(%d:%d)]\n", row, col);
+ return EC_ERROR_UNIMPLEMENTED;
+ }
/* Output the make code (from table) */
if (make_code >= 0x0100) {
@@ -217,15 +231,17 @@ static enum ec_error_list matrix_callback(
}
-static void reset_rate_and_delay(void) {
- typematic_value_from_host = DEFAULT_TYPEMATIC_VALUE;
- refill_first_delay = DEFAULT_FIRST_DELAY;
- refill_inter_delay = DEFAULT_INTER_DELAY;
+static void reset_rate_and_delay(void)
+{
+ typematic_value_from_host = DEFAULT_TYPEMATIC_VALUE;
+ refill_first_delay = DEFAULT_FIRST_DELAY;
+ refill_inter_delay = DEFAULT_INTER_DELAY;
}
-static void clean_underlying_buffer(void) {
- i8042_init();
+static void clean_underlying_buffer(void)
+{
+ i8042_init();
}
@@ -235,380 +251,357 @@ static void clean_underlying_buffer(void) {
* daisy(variants): no CONFIG_LPC and no CONFIG_TASK_X86POWER
* crosbug.com/p/8523
*/
-static void keyboard_wakeup(void) {
+static void keyboard_wakeup(void)
+{
#ifdef CONFIG_LPC
- lpc_set_host_events(EC_LPC_HOST_EVENT_MASK(EC_LPC_HOST_EVENT_KEY_PRESSED));
+ lpc_set_host_events(
+ EC_LPC_HOST_EVENT_MASK(EC_LPC_HOST_EVENT_KEY_PRESSED));
#endif
}
-void keyboard_state_changed(int row, int col, int is_pressed) {
- uint8_t scan_code[MAX_SCAN_CODE_LEN];
- int32_t len;
- enum ec_error_list ret;
-
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[File %s:%s(): row=%d col=%d is_pressed=%d]\n",
- __FILE__, __FUNCTION__, row, col, is_pressed);
-#endif
+void keyboard_state_changed(int row, int col, int is_pressed)
+{
+ uint8_t scan_code[MAX_SCAN_CODE_LEN];
+ int32_t len;
+ enum ec_error_list ret;
- ret = matrix_callback(row, col, is_pressed, scancode_set, scan_code, &len);
- if (ret == EC_SUCCESS) {
- ASSERT(len > 0);
+ CPRINTF5("[%s(): row=%d col=%d is_pressed=%d]\n",
+ __func__, row, col, is_pressed);
- i8042_send_to_host(len, scan_code);
- }
+ ret = matrix_callback(row, col, is_pressed, scancode_set, scan_code,
+ &len);
+ if (ret == EC_SUCCESS) {
+ ASSERT(len > 0);
+ i8042_send_to_host(len, scan_code);
+ }
- if (is_pressed) {
- keyboard_wakeup();
+ if (is_pressed) {
+ keyboard_wakeup();
- typematic_delay = refill_first_delay * 1000;
- memcpy(typematic_scan_code, scan_code, len);
- typematic_len = len;
- task_wake(TASK_ID_TYPEMATIC);
- } else {
- typematic_len = 0;
- }
+ typematic_delay = refill_first_delay * 1000;
+ memcpy(typematic_scan_code, scan_code, len);
+ typematic_len = len;
+ task_wake(TASK_ID_TYPEMATIC);
+ } else {
+ typematic_len = 0;
+ }
}
-void keyboard_enable(int enable) {
- if (!keyboard_enabled && enable) {
- /* enable */
- } else if (keyboard_enabled && !enable) {
- /* disable */
- reset_rate_and_delay();
- clean_underlying_buffer();
- }
- keyboard_enabled = enable;
+void keyboard_enable(int enable)
+{
+ if (!keyboard_enabled && enable) {
+ /* enable */
+ } else if (keyboard_enabled && !enable) {
+ /* disable */
+ reset_rate_and_delay();
+ clean_underlying_buffer();
+ }
+ keyboard_enabled = enable;
}
-uint8_t read_ctl_ram(uint8_t addr) {
- if (addr < 0x20) // Controller RAM is only 32 bytes.
- return controller_ram[addr];
- else
- return 0;
+uint8_t read_ctl_ram(uint8_t addr)
+{
+ if (addr < 0x20) /* Controller RAM is only 32 bytes. */
+ return controller_ram[addr];
+ else
+ return 0;
}
-/* Manipulates the controller_ram[]. Some bits change may trigger internal
- * state change.
- */
-void update_ctl_ram(uint8_t addr, uint8_t data) {
- uint8_t orig;
+/* Manipulate the controller_ram[]. Some bits change may trigger internal
+ * state change. */
+void update_ctl_ram(uint8_t addr, uint8_t data)
+{
+ uint8_t orig;
- if (addr >= 0x20); // Controller RAM is only 32 bytes.
- return;
+ if (addr >= 0x20) /* Controller RAM is only 32 bytes. */
+ return;
- orig = controller_ram[addr];
- controller_ram[addr] = data;
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Set CTR_RAM(0x%02x)=0x%02x (old:0x%02x)]\n",
- addr, data, orig);
-#endif
+ orig = controller_ram[addr];
+ controller_ram[addr] = data;
+ CPRINTF5("[Set CTR_RAM(0x%02x)=0x%02x (old:0x%02x)]\n",
+ addr, data, orig);
- if (addr == 0x00) { /* the controller RAM */
- /* Handle the I8042_KBD_DIS bit */
- keyboard_enable(!(data & I8042_KBD_DIS));
+ if (addr == 0x00) { /* the controller RAM */
+ /* Handle the I8042_KBD_DIS bit */
+ keyboard_enable(!(data & I8042_KBD_DIS));
- /* Handle the I8042_ENIRQ1 bit */
- if (!(orig & I8042_ENIRQ1) && (data & I8042_ENIRQ1)) {
- i8042_enable_keyboard_irq();
- } else if ((orig & I8042_ENIRQ1) && !(data & I8042_ENIRQ1)) {
- i8042_disable_keyboard_irq();
- }
- }
+ /* Handle the I8042_ENIRQ1 bit */
+ if (!(orig & I8042_ENIRQ1) && (data & I8042_ENIRQ1))
+ i8042_enable_keyboard_irq();
+ else if ((orig & I8042_ENIRQ1) && !(data & I8042_ENIRQ1))
+ i8042_disable_keyboard_irq();
+ }
}
enum {
- STATE_NORMAL = 0,
- STATE_SCANCODE,
- STATE_SETLEDS,
- STATE_EX_SETLEDS_1, /* expect 2-byte parameter coming */
- STATE_EX_SETLEDS_2,
- STATE_WRITE_CMD_BYTE,
- STATE_ECHO_MOUSE,
- STATE_SETREP,
- STATE_SEND_TO_MOUSE,
+ STATE_NORMAL = 0,
+ STATE_SCANCODE,
+ STATE_SETLEDS,
+ STATE_EX_SETLEDS_1, /* expect 2-byte parameter coming */
+ STATE_EX_SETLEDS_2,
+ STATE_WRITE_CMD_BYTE,
+ STATE_ECHO_MOUSE,
+ STATE_SETREP,
+ STATE_SEND_TO_MOUSE,
} data_port_state = STATE_NORMAL;
-int handle_keyboard_data(uint8_t data, uint8_t *output) {
- int out_len = 0;
- int save_for_resend = 1;
- int i;
+int handle_keyboard_data(uint8_t data, uint8_t *output)
+{
+ int out_len = 0;
+ int save_for_resend = 1;
+ int i;
+
+ CPRINTF5("[KB recv data: 0x%02x]\n", data);
+
+ switch (data_port_state) {
+ case STATE_SCANCODE:
+ CPRINTF5("[Eaten by STATE_SCANCODE: 0x%02x]\n", data);
+ if (data == SCANCODE_GET_SET) {
+ output[out_len++] = I8042_RET_ACK;
+ output[out_len++] = scancode_set;
+ } else {
+ scancode_set = data;
+ CPRINTF("[Scancode set to %d]\n", scancode_set);
+ output[out_len++] = I8042_RET_ACK;
+ }
+ data_port_state = STATE_NORMAL;
+ break;
+
+ case STATE_SETLEDS:
+ CPUTS5("[Eaten by STATE_SETLEDS]\n");
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_NORMAL;
+ break;
+
+ case STATE_EX_SETLEDS_1:
+ CPUTS5("[Eaten by STATE_EX_SETLEDS_1]\n");
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_EX_SETLEDS_2;
+ break;
+
+ case STATE_EX_SETLEDS_2:
+ CPUTS5("[Eaten by STATE_EX_SETLEDS_2]\n");
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_NORMAL;
+ break;
+
+ case STATE_WRITE_CMD_BYTE:
+ CPRINTF5("[Eaten by STATE_WRITE_CMD_BYTE: 0x%02x]\n", data);
+ update_ctl_ram(controller_ram_address, data);
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_NORMAL;
+ break;
+
+ case STATE_ECHO_MOUSE:
+ CPRINTF5("[Eaten by STATE_ECHO_MOUSE: 0x%02x]\n", data);
+ output[out_len++] = I8042_RET_ACK;
+ output[out_len++] = data;
+ data_port_state = STATE_NORMAL;
+ break;
+
+ case STATE_SETREP:
+ CPRINTF5("[Eaten by STATE_SETREP: 0x%02x]\n", data);
+ typematic_value_from_host = data;
+ refill_first_delay =
+ (((typematic_value_from_host & 0x60) >> 5) + 1) * 250;
+ refill_inter_delay = 1000 * /* ms */
+ (1 << ((typematic_value_from_host & 0x18) >> 3)) *
+ ((typematic_value_from_host & 0x7) + 8) /
+ 240;
+
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_NORMAL;
+ break;
+
+ case STATE_SEND_TO_MOUSE:
+ CPRINTF5("[Eaten by STATE_SEND_TO_MOUSE: 0x%02x]\n", data);
+ data_port_state = STATE_NORMAL;
+ break;
+
+ default: /* STATE_NORMAL */
+ switch (data) {
+ case I8042_CMD_GSCANSET: /* also I8042_CMD_SSCANSET */
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_SCANCODE;
+ break;
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[KB recv data: 0x%02x]\n", data);
-#endif
+ case I8042_CMD_SETLEDS:
+ /* We use screen indicator. Do nothing in keyboard
+ * controller. */
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_SETLEDS;
+ break;
- switch (data_port_state) {
- case STATE_SCANCODE:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_SCANCODE: 0x%02x]\n", data);
-#endif
- if (data == SCANCODE_GET_SET) {
- output[out_len++] = I8042_RET_ACK;
- output[out_len++] = scancode_set;
- } else {
- scancode_set = data;
-#if KEYBOARD_DEBUG >= 1
- uart_printf("[Scancode set to %d]\n", scancode_set);
-#endif
- output[out_len++] = I8042_RET_ACK;
- }
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_EX_SETLEDS:
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_EX_SETLEDS_1;
+ break;
- case STATE_SETLEDS:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_SETLEDS]\n");
-#endif
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_DIAG_ECHO:
+ output[out_len++] = I8042_RET_ACK;
+ output[out_len++] = I8042_CMD_DIAG_ECHO;
+ break;
- case STATE_EX_SETLEDS_1:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_EX_SETLEDS_1]\n");
-#endif
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_EX_SETLEDS_2;
- break;
+ case I8042_CMD_GETID: /* fall-thru */
+ case I8042_CMD_OK_GETID:
+ output[out_len++] = I8042_RET_ACK;
+ output[out_len++] = 0xab; /* Regular keyboards */
+ output[out_len++] = 0x83;
+ break;
- case STATE_EX_SETLEDS_2:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_EX_SETLEDS_2]\n");
-#endif
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_SETREP:
+ output[out_len++] = I8042_RET_ACK;
+ data_port_state = STATE_SETREP;
+ break;
- case STATE_WRITE_CMD_BYTE:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_WRITE_CMD_BYTE: 0x%02x]\n", data);
-#endif
- update_ctl_ram(controller_ram_address, data);
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_ENABLE:
+ output[out_len++] = I8042_RET_ACK;
+ keyboard_enable(1);
+ break;
- case STATE_ECHO_MOUSE:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_ECHO_MOUSE: 0x%02x]\n", data);
-#endif
- output[out_len++] = I8042_RET_ACK;
- output[out_len++] = data;
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_RESET_DIS:
+ output[out_len++] = I8042_RET_ACK;
+ keyboard_enable(0);
+ reset_rate_and_delay();
+ clean_underlying_buffer();
+ break;
- case STATE_SETREP:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_SETREP: 0x%02x]\n", data);
-#endif
- typematic_value_from_host = data;
- refill_first_delay = (((typematic_value_from_host & 0x60) >> 5) + 1) * 250;
- refill_inter_delay = 1000 * /* ms */
- (1 << ((typematic_value_from_host & 0x18) >> 3)) *
- ((typematic_value_from_host & 0x7) + 8) /
- 240;
-
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_RESET_DEF:
+ output[out_len++] = I8042_RET_ACK;
+ reset_rate_and_delay();
+ clean_underlying_buffer();
+ break;
- case STATE_SEND_TO_MOUSE:
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[Eaten by STATE_SEND_TO_MOUSE: 0x%02x]\n", data);
-#endif
- data_port_state = STATE_NORMAL;
- break;
+ case I8042_CMD_RESET_BAT:
+ output[out_len++] = I8042_RET_ACK;
+ keyboard_enable(0);
+ output[out_len++] = I8042_RET_BAT;
+ output[out_len++] = I8042_RET_BAT;
+ break;
- default: /* STATE_NORMAL */
- switch (data) {
- case I8042_CMD_GSCANSET: /* also I8042_CMD_SSCANSET */
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_SCANCODE;
- break;
-
- case I8042_CMD_SETLEDS:
- /* We use screen indicator. Do nothing in keyboard controller. */
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_SETLEDS;
- break;
-
- case I8042_CMD_EX_SETLEDS:
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_EX_SETLEDS_1;
- break;
-
- case I8042_CMD_DIAG_ECHO:
- output[out_len++] = I8042_RET_ACK;
- output[out_len++] = I8042_CMD_DIAG_ECHO;
- break;
-
- case I8042_CMD_GETID: /* fall-thru */
- case I8042_CMD_OK_GETID:
- output[out_len++] = I8042_RET_ACK;
- output[out_len++] = 0xab; /* Regular keyboards */
- output[out_len++] = 0x83;
- break;
-
- case I8042_CMD_SETREP:
- output[out_len++] = I8042_RET_ACK;
- data_port_state = STATE_SETREP;
- break;
-
- case I8042_CMD_ENABLE:
- output[out_len++] = I8042_RET_ACK;
- keyboard_enable(1);
- break;
-
- case I8042_CMD_RESET_DIS:
- output[out_len++] = I8042_RET_ACK;
- keyboard_enable(0);
- reset_rate_and_delay();
- clean_underlying_buffer();
- break;
-
- case I8042_CMD_RESET_DEF:
- output[out_len++] = I8042_RET_ACK;
- reset_rate_and_delay();
- clean_underlying_buffer();
- break;
-
- case I8042_CMD_RESET_BAT:
- output[out_len++] = I8042_RET_ACK;
- keyboard_enable(0);
- output[out_len++] = I8042_RET_BAT;
- output[out_len++] = I8042_RET_BAT;
- break;
-
- case I8042_CMD_RESEND:
- output[out_len++] = I8042_RET_ACK;
- save_for_resend = 0;
- for (i = 0; i < resend_command_len; ++i) {
- output[out_len++] = resend_command[i];
- }
- break;
-
- /* u-boot hack */
- case 0x60: /* see CONFIG_USE_CPCIDVI in */
- case 0x45: /* third_party/u-boot/files/drivers/input/i8042.c */
- /* just ignore, don't reply anything. */
- break;
-
- case I8042_CMD_SETALL_MB: /* fall-thru below */
- case I8042_CMD_SETALL_MBR:
- case I8042_CMD_EX_ENABLE:
- default:
- output[out_len++] = I8042_RET_NAK;
-#if KEYBOARD_DEBUG >= 1
- uart_printf("[Unsupported i8042 data 0x%02x]\n", data);
-#endif
- break;
- }
- }
+ case I8042_CMD_RESEND:
+ output[out_len++] = I8042_RET_ACK;
+ save_for_resend = 0;
+ for (i = 0; i < resend_command_len; ++i)
+ output[out_len++] = resend_command[i];
+ break;
- /* For resend, keep output before leaving. */
- if (out_len && save_for_resend) {
- ASSERT(out_len <= MAX_SCAN_CODE_LEN);
- for (i = 0; i < out_len; ++i) {
- resend_command[i] = output[i];
- }
- resend_command_len = out_len;
- }
+ /* u-boot hack */
+ case 0x60: /* see CONFIG_USE_CPCIDVI in */
+ case 0x45: /* third_party/u-boot/files/drivers/input/i8042.c */
+ /* just ignore, don't reply anything. */
+ break;
- ASSERT(out_len <= MAX_SCAN_CODE_LEN);
- return out_len;
+ case I8042_CMD_SETALL_MB: /* fall-thru below */
+ case I8042_CMD_SETALL_MBR:
+ case I8042_CMD_EX_ENABLE:
+ default:
+ output[out_len++] = I8042_RET_NAK;
+ CPRINTF("[Unsupported i8042 data 0x%02x]\n", data);
+ break;
+ }
+ }
+
+ /* For resend, keep output before leaving. */
+ if (out_len && save_for_resend) {
+ ASSERT(out_len <= MAX_SCAN_CODE_LEN);
+ for (i = 0; i < out_len; ++i)
+ resend_command[i] = output[i];
+ resend_command_len = out_len;
+ }
+
+ ASSERT(out_len <= MAX_SCAN_CODE_LEN);
+ return out_len;
}
-int handle_keyboard_command(uint8_t command, uint8_t *output) {
- int out_len = 0;
+int handle_keyboard_command(uint8_t command, uint8_t *output)
+{
+ int out_len = 0;
-#if KEYBOARD_DEBUG >= 5
- uart_printf("[KB recv cmd: 0x%02x]\n", command);
-#endif
- switch (command) {
- case I8042_READ_CMD_BYTE:
- output[out_len++] = read_ctl_ram(0);
- break;
+ CPRINTF5("[KB recv cmd: 0x%02x]\n", command);
+ switch (command) {
+ case I8042_READ_CMD_BYTE:
+ output[out_len++] = read_ctl_ram(0);
+ break;
- case I8042_WRITE_CMD_BYTE:
- data_port_state = STATE_WRITE_CMD_BYTE;
- controller_ram_address = command - 0x60;
- break;
+ case I8042_WRITE_CMD_BYTE:
+ data_port_state = STATE_WRITE_CMD_BYTE;
+ controller_ram_address = command - 0x60;
+ break;
- case I8042_DIS_KB:
- keyboard_enable(0);
- break;
+ case I8042_DIS_KB:
+ keyboard_enable(0);
+ break;
- case I8042_ENA_KB:
- keyboard_enable(1);
- break;
+ case I8042_ENA_KB:
+ keyboard_enable(1);
+ break;
- case I8042_RESET_SELF_TEST:
- output[out_len++] = 0x55; // Self test success.
- break;
+ case I8042_RESET_SELF_TEST:
+ output[out_len++] = 0x55; /* Self test success */
+ break;
- case I8042_DIS_MOUSE:
- update_ctl_ram(0, read_ctl_ram(0) | I8042_AUX_DIS);
- break;
+ case I8042_DIS_MOUSE:
+ update_ctl_ram(0, read_ctl_ram(0) | I8042_AUX_DIS);
+ break;
- case I8042_ENA_MOUSE:
- update_ctl_ram(0, read_ctl_ram(0) & ~I8042_AUX_DIS);
- break;
+ case I8042_ENA_MOUSE:
+ update_ctl_ram(0, read_ctl_ram(0) & ~I8042_AUX_DIS);
+ break;
- case I8042_TEST_MOUSE:
- output[out_len++] = 0; // no error detected
- break;
+ case I8042_TEST_MOUSE:
+ output[out_len++] = 0; /* No error detected */
+ break;
- case I8042_ECHO_MOUSE:
- data_port_state = STATE_ECHO_MOUSE;
- break;
+ case I8042_ECHO_MOUSE:
+ data_port_state = STATE_ECHO_MOUSE;
+ break;
- case I8042_SEND_TO_MOUSE:
- data_port_state = STATE_SEND_TO_MOUSE;
- break;
+ case I8042_SEND_TO_MOUSE:
+ data_port_state = STATE_SEND_TO_MOUSE;
+ break;
#ifdef CONFIG_TASK_X86POWER
- case I8042_SYSTEM_RESET:
- /* Trigger a cold reset, since that also resets the TPM. If we just
- * trigger a warm reset, that doesn't assert PLTRST# and the TPM is
- * not reset. See crosbug.com/p/8379. */
- x86_power_reset(1);
- break;
+ case I8042_SYSTEM_RESET:
+ /* Trigger a cold reset, since that also resets the TPM. If we
+ * just trigger a warm reset, that doesn't assert PLTRST# and
+ * the TPM is not reset. See crosbug.com/p/8379. */
+ x86_power_reset(1);
+ break;
#endif
- default:
- if (command >= I8042_READ_CTL_RAM &&
- command <= I8042_READ_CTL_RAM_END) {
- output[out_len++] = read_ctl_ram(command - 0x20);
- } else if (command >= I8042_WRITE_CTL_RAM &&
- command <= I8042_WRITE_CTL_RAM_END) {
- data_port_state = STATE_WRITE_CMD_BYTE;
- controller_ram_address = command - 0x60;
- } else if (command >= I8042_PULSE_START &&
- command <= I8042_PULSE_END) {
- /* Pulse Output Bit. Not implemented. Ignore it. */
- } else {
-#if KEYBOARD_DEBUG >= 1
- uart_printf("[Unsupported cmd: 0x%02x]\n", command);
-#endif
- reset_rate_and_delay();
- clean_underlying_buffer();
- output[out_len++] = I8042_RET_NAK;
- data_port_state = STATE_NORMAL;
- }
- break;
- }
+ default:
+ if (command >= I8042_READ_CTL_RAM &&
+ command <= I8042_READ_CTL_RAM_END) {
+ output[out_len++] = read_ctl_ram(command - 0x20);
+ } else if (command >= I8042_WRITE_CTL_RAM &&
+ command <= I8042_WRITE_CTL_RAM_END) {
+ data_port_state = STATE_WRITE_CMD_BYTE;
+ controller_ram_address = command - 0x60;
+ } else if (command >= I8042_PULSE_START &&
+ command <= I8042_PULSE_END) {
+ /* Pulse Output Bit. Not implemented. Ignore it. */
+ } else {
+ CPRINTF("[Unsupported cmd: 0x%02x]\n", command);
+ reset_rate_and_delay();
+ clean_underlying_buffer();
+ output[out_len++] = I8042_RET_NAK;
+ data_port_state = STATE_NORMAL;
+ }
+ break;
+ }
- return out_len;
+ return out_len;
}
+
/* U U D D L R L R b a */
static void keyboard_special(uint16_t k)
{
@@ -621,6 +614,7 @@ static void keyboard_special(uint16_t k)
s = 0;
else if (s != 2)
s = 1;
+
if (s == ARRAY_SIZE(a)) {
s = 0;
#ifdef CONFIG_TASK_LIGHTBAR
@@ -629,6 +623,7 @@ static void keyboard_special(uint16_t k)
}
}
+
void keyboard_set_power_button(int pressed)
{
enum scancode_set_list code_set;
@@ -657,23 +652,23 @@ void keyboard_set_power_button(int pressed)
}
-
void keyboard_typematic_task(void)
{
- while (1) {
- task_wait_event(-1);
-
- while (typematic_len) {
- usleep(TYPEMATIC_DELAY_UNIT);
- typematic_delay -= TYPEMATIC_DELAY_UNIT;
-
- if (typematic_delay <= 0) {
- /* re-send to host */
- i8042_send_to_host(typematic_len, typematic_scan_code);
- typematic_delay = refill_inter_delay * 1000;
- }
- }
- }
+ while (1) {
+ task_wait_event(-1);
+
+ while (typematic_len) {
+ usleep(TYPEMATIC_DELAY_UNIT);
+ typematic_delay -= TYPEMATIC_DELAY_UNIT;
+
+ if (typematic_delay <= 0) {
+ /* re-send to host */
+ i8042_send_to_host(typematic_len,
+ typematic_scan_code);
+ typematic_delay = refill_inter_delay * 1000;
+ }
+ }
+ }
}
@@ -682,30 +677,30 @@ static int command_typematic(int argc, char **argv)
if (argc == 1) {
int i;
- uart_printf("Value set from host: 0x%02x\n",
+ ccprintf("Value set from host: 0x%02x\n",
typematic_value_from_host);
- uart_printf("Refill first delay : %d (ms)\n",
+ ccprintf("Refill first delay : %d (ms)\n",
refill_first_delay);
- uart_printf(" inter delay : %d (ms)\n",
+ ccprintf(" inter delay : %d (ms)\n",
refill_inter_delay);
- uart_printf("Current delay : %d (us)\n",
+ ccprintf("Current delay : %d (us)\n",
typematic_delay);
- uart_puts("Repeat scan code : ");
+ ccputs("Repeat scan code : ");
for (i = 0; i < typematic_len; ++i) {
- uart_printf("0x%02x ", typematic_scan_code[i]);
+ ccprintf("0x%02x ", typematic_scan_code[i]);
}
- uart_puts("\n");
+ ccputs("\n");
} else if (argc == 3) {
refill_first_delay = strtoi(argv[1], NULL, 0);
refill_inter_delay = strtoi(argv[2], NULL, 0);
- uart_puts("New typematic delays:\n");
- uart_printf(" Refill first delay : %d (ms)\n",
+ ccputs("New typematic delays:\n");
+ ccprintf(" Refill first delay : %d (ms)\n",
refill_first_delay);
- uart_printf(" Refill inter delay : %d (ms)\n",
+ ccprintf(" Refill inter delay : %d (ms)\n",
refill_inter_delay);
} else {
- uart_puts("Usage: typematic [<first> <inter>]\n");
+ ccputs("Usage: typematic [<first> <inter>]\n");
return EC_ERROR_UNKNOWN;
}
@@ -719,8 +714,8 @@ static int command_codeset(int argc, char **argv)
int set;
if (argc == 1) {
- uart_printf("Current scancode set: %d\n", scancode_set);
- uart_printf("I8042_XLATE: %d\n",
+ ccprintf("Current scancode set: %d\n", scancode_set);
+ ccprintf("I8042_XLATE: %d\n",
controller_ram[0] & I8042_XLATE ? 1 : 0);
} else if (argc == 2) {
set = strtoi(argv[1], NULL, 0);
@@ -728,15 +723,15 @@ static int command_codeset(int argc, char **argv)
case SCANCODE_SET_1: /* fall-thru */
case SCANCODE_SET_2: /* fall-thru */
scancode_set = set;
- uart_printf("Set scancode set to %d\n", scancode_set);
+ ccprintf("Set scancode set to %d\n", scancode_set);
break;
default:
- uart_printf("Scancode %d is NOT supported.\n", set);
+ ccprintf("Scancode %d is NOT supported.\n", set);
return EC_ERROR_UNKNOWN;
break;
}
} else {
- uart_puts("Usage: codeset [<set>]\n");
+ ccputs("Usage: codeset [<set>]\n");
return EC_ERROR_UNKNOWN;
}
@@ -753,23 +748,23 @@ static int command_controller_ram(int argc, char **argv)
if (argc >= 2) {
index = strtoi(argv[1], NULL, 0);
- uart_printf("Controller RAM index = %d\n", index);
+ ccprintf("Controller RAM index = %d\n", index);
if (index >= 0x20) {
- uart_printf("Index is out of range (0x00-0x1f).\n");
+ ccprintf("Index is out of range (0x00-0x1f).\n");
return EC_ERROR_UNKNOWN;
}
if (argc >= 3) {
update_ctl_ram(index, strtoi(argv[2], NULL, 0));
- uart_printf("Write ctlram[%d] as 0x%02x.\n",
+ ccprintf("Write ctlram[%d] as 0x%02x.\n",
index, controller_ram[index]);
} else {
- uart_printf("ctlram[%d] is 0x%02x.\n",
+ ccprintf("ctlram[%d] is 0x%02x.\n",
index, controller_ram[index]);
}
} else {
- uart_puts("Usage: ctrlram <index> [<write_value>]\n");
- uart_puts("\nGet/set controller RAM.\n\n");
+ ccputs("Usage: ctrlram <index> [<write_value>]\n");
+ ccputs("\nGet/set controller RAM.\n\n");
return EC_ERROR_UNKNOWN;
}
@@ -786,30 +781,30 @@ static int command_keyboard_press(int argc, char **argv)
int r, c, p;
char *e;
if (argc == 1) {
- uart_puts("Simulated key:\n");
+ ccputs("Simulated key:\n");
for (i = 0; i < CROS_COL_NUM; ++i) {
if (simulated_key[i] == 0)
continue;
for (j = 0; j < CROS_ROW_NUM; ++j)
if (simulated_key[i] & (1 << j))
- uart_printf("\t%d %d\n", i, j);
+ ccprintf("\t%d %d\n", i, j);
}
} else if (argc == 4) {
c = strtoi(argv[1], &e, 0);
if ((e && *e) || c < 0 || c >= CROS_COL_NUM) {
- uart_puts("Bad column.\n");
+ ccputs("Bad column.\n");
return EC_ERROR_UNKNOWN;
}
r = strtoi(argv[2], &e, 0);
if ((e && *e) || r < 0 || r >= CROS_ROW_NUM) {
- uart_puts("Bad row.\n");
+ ccputs("Bad row.\n");
return EC_ERROR_UNKNOWN;
}
p = strtoi(argv[3], &e, 0);
if ((e && *e) || p < 0 || p > 1) {
- uart_puts("Bad pressed flag.\n");
+ ccputs("Bad pressed flag.\n");
return EC_ERROR_UNKNOWN;
}
@@ -820,7 +815,7 @@ static int command_keyboard_press(int argc, char **argv)
keyboard_state_changed(r, c, p);
} else {
- uart_puts("Usage: kbpress [<col> <row> <pressed>]\n");
+ ccputs("Usage: kbpress [<col> <row> <pressed>]\n");
return EC_ERROR_UNKNOWN;
}
@@ -862,7 +857,7 @@ static int keyboard_restore_state(void)
prev = (const struct kb_state *)system_get_jump_tag(KB_SYSJUMP_TAG,
&version, &size);
if (prev && version == KB_HOOK_VERSION && size == sizeof(*prev)) {
- // Coming back from a sysjump, so restore settings.
+ /* Coming back from a sysjump, so restore settings. */
scancode_set = prev->codeset;
update_ctl_ram(0, prev->ctlram);
}
diff --git a/common/lightbar.c b/common/lightbar.c
index f2e95e3a74..c2d8ccbab3 100644
--- a/common/lightbar.c
+++ b/common/lightbar.c
@@ -13,9 +13,12 @@
#include "lightbar.h"
#include "task.h"
#include "timer.h"
-#include "uart.h"
#include "util.h"
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_LIGHTBAR, outstr)
+#define CPRINTF(format, args...) cprintf(CC_LIGHTBAR, format, ## args)
+
/******************************************************************************/
/* How to talk to the controller */
/******************************************************************************/
@@ -92,7 +95,7 @@ static void set_from_array(const struct initdata_s *data, int count)
static void lightbar_init_vals(void)
{
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
set_from_array(init_vals, ARRAY_SIZE(init_vals));
}
@@ -141,7 +144,7 @@ static void setrgb(int led, int red, int green, int blue)
static void lightbar_off(void)
{
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
/* Just go into standby mode. No register values should change. */
controller_write(0, 0x01, 0x00);
controller_write(1, 0x01, 0x00);
@@ -149,7 +152,7 @@ static void lightbar_off(void)
static void lightbar_on(void)
{
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
/* Come out of standby mode. */
controller_write(0, 0x01, 0x20);
controller_write(1, 0x01, 0x20);
@@ -171,7 +174,7 @@ static void lightbar_setrgb(int led, int red, int green, int blue)
static inline void lightbar_brightness(int newval)
{
int i;
- uart_printf("%s[(%d)]\n", __func__, newval);
+ CPRINTF("%s[(%d)]\n", __func__, newval);
brightness = newval;
for (i = 0; i < NUM_LEDS; i++)
lightbar_setrgb(i, current[i][0],
@@ -208,7 +211,7 @@ static const struct {
static uint32_t sequence_s5(void)
{
int i;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
/* For now, do something to indicate S5. We might see it. */
lightbar_on();
@@ -226,7 +229,7 @@ static uint32_t sequence_s5s3(void)
{
int i;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
/* The controllers need 100us after power is applied before they'll
* respond. */
usleep(100);
@@ -248,7 +251,7 @@ static uint32_t sequence_s0(void)
int l = 0;
int n = 0;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_on();
while (1) {
@@ -270,7 +273,7 @@ static uint32_t sequence_s0(void)
/* CPU is going to sleep */
static uint32_t sequence_s0s3(void)
{
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_on();
lightbar_setrgb(0, 0, 0, 255);
lightbar_setrgb(1, 255, 0, 0);
@@ -291,7 +294,7 @@ static uint32_t sequence_s0s3(void)
static uint32_t sequence_s3(void)
{
int i = 0;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_off();
lightbar_init_vals();
lightbar_setrgb(0, 0, 0, 0);
@@ -316,7 +319,7 @@ static uint32_t sequence_s3(void)
/* CPU is waking from sleep */
static uint32_t sequence_s3s0(void)
{
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_init_vals();
lightbar_on();
lightbar_setrgb(0, 0, 0, 255);
@@ -335,7 +338,7 @@ static uint32_t sequence_s3s5(void)
{
int i;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
/* For now, do something to indicate this transition.
* We might see it. */
@@ -354,7 +357,7 @@ static uint32_t sequence_test(void)
int kmax = 254;
int kstep = 8;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_init_vals();
lightbar_on();
@@ -403,7 +406,7 @@ static uint32_t sequence_pulse(void)
{0x1a, g},
};
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_init_vals();
lightbar_on();
@@ -427,15 +430,15 @@ static uint32_t sequence_ec_stop(void)
{
uint32_t msg;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
do {
msg = TASK_EVENT_CUSTOM(task_wait_event(-1));
- uart_printf("[%s - got msg %x]\n", __func__, msg);
+ CPRINTF("[%s - got msg %x]\n", __func__, msg);
} while (msg != LIGHTBAR_EC_RUN);
/* FIXME: What should we do if the host shuts down? */
- uart_printf("[%s() - leaving]\n", __func__);
+ CPRINTF("[%s() - leaving]\n", __func__);
return 0;
}
@@ -443,7 +446,7 @@ static uint32_t sequence_ec_stop(void)
/* We shouldn't come here, but if we do it shouldn't hurt anything */
static uint32_t sequence_error(void)
{
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_init_vals();
lightbar_on();
@@ -540,7 +543,7 @@ static uint32_t sequence_konami(void)
int i;
int tmp;
- uart_printf("[%s()]\n", __func__);
+ CPRINTF("[%s()]\n", __func__);
lightbar_init_vals();
lightbar_on();
@@ -599,7 +602,7 @@ void lightbar_task(void)
while (1) {
msg = sequence[state]();
- uart_printf("[%s(%d)]\n", __func__, msg);
+ CPRINTF("[%s(%d)]\n", __func__, msg);
msg = TASK_EVENT_CUSTOM(msg);
if (msg && msg < LIGHTBAR_NUM_SEQUENCES) {
previous_state = state;
@@ -635,7 +638,7 @@ void lightbar_task(void)
/* Function to request a preset sequence from the lightbar task. */
void lightbar_sequence(enum lightbar_sequence num)
{
- uart_printf("[%s(%d)]\n", __func__, num);
+ CPRINTF("[%s(%d)]\n", __func__, num);
if (num && num < LIGHTBAR_NUM_SEQUENCES)
task_set_event(TASK_ID_LIGHTBAR,
TASK_EVENT_WAKE | TASK_EVENT_CUSTOM(num), 0);
@@ -669,14 +672,14 @@ DECLARE_HOST_COMMAND(EC_LPC_COMMAND_LIGHTBAR_TEST, lpc_cmd_test);
static int help(const char *cmd)
{
- uart_printf("Usage: %s\n", cmd);
- uart_printf(" %s off\n", cmd);
- uart_printf(" %s init\n", cmd);
- uart_printf(" %s on\n", cmd);
- uart_printf(" %s msg NUM\n", cmd);
- uart_printf(" %s brightness NUM\n", cmd);
- uart_printf(" %s CTRL REG VAL\n", cmd);
- uart_printf(" %s LED RED GREEN BLUE\n", cmd);
+ ccprintf("Usage: %s\n", cmd);
+ ccprintf(" %s off\n", cmd);
+ ccprintf(" %s init\n", cmd);
+ ccprintf(" %s on\n", cmd);
+ ccprintf(" %s msg NUM\n", cmd);
+ ccprintf(" %s brightness NUM\n", cmd);
+ ccprintf(" %s CTRL REG VAL\n", cmd);
+ ccprintf(" %s LED RED GREEN BLUE\n", cmd);
return EC_ERROR_UNKNOWN;
}
@@ -691,7 +694,7 @@ static void dump_regs(void)
reg = reglist[i];
d1 = controller_read(0, reg);
d2 = controller_read(1, reg);
- uart_printf(" %02x %02x %02x\n", reg, d1, d2);
+ ccprintf(" %02x %02x %02x\n", reg, d1, d2);
}
}
diff --git a/common/port80.c b/common/port80.c
index 77ff6fa471..f048a54884 100644
--- a/common/port80.c
+++ b/common/port80.c
@@ -8,9 +8,10 @@
#include "board.h"
#include "console.h"
#include "port80.h"
-#include "uart.h"
#include "util.h"
+#define CPRINTF(format, args...) cprintf(CC_PORT80, format, ## args)
+
#define HISTORY_LEN 16
static uint8_t history[HISTORY_LEN];
@@ -24,7 +25,7 @@ void port_80_write(int data)
* itself. Probably not worth the system overhead to buffer the data
* and print it from a task, because we're printing a small amount of
* data and uart_printf() doesn't block. */
- uart_printf("%c[%T Port 80: 0x%02x]", scroll ? '\n' : '\r', data);
+ CPRINTF("%c[%T Port 80: 0x%02x]", scroll ? '\n' : '\r', data);
history[head] = data;
head = (head + 1) & (HISTORY_LEN - 1);
@@ -42,7 +43,7 @@ static int command_port80(int argc, char **argv)
* (scrolling) or CR (non-scrolling). */
if (argc > 1 && !strcasecmp(argv[1], "scroll")) {
scroll = !scroll;
- uart_printf("port80 scrolling %sabled\n",
+ ccprintf("port80 scrolling %sabled\n",
scroll ? "en" : "dis");
return EC_SUCCESS;
}
@@ -50,10 +51,10 @@ static int command_port80(int argc, char **argv)
/* Technically, if a port 80 write comes in while we're
* printing this, we could print an incorrect history.
* Probably not worth the complexity to work around that. */
- uart_puts("Last port 80 writes:");
+ ccputs("Last port 80 writes:");
for (i = 0; i < HISTORY_LEN; i++)
- uart_printf(" %02x", history[(h + i) & (HISTORY_LEN - 1)]);
- uart_puts(" <--newest\n");
+ ccprintf(" %02x", history[(h + i) & (HISTORY_LEN - 1)]);
+ ccputs(" <--newest\n");
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(port80, command_port80);
diff --git a/common/system_common.c b/common/system_common.c
index 0d1805b2ca..f1b5473eb7 100644
--- a/common/system_common.c
+++ b/common/system_common.c
@@ -16,6 +16,9 @@
#include "util.h"
#include "version.h"
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_SYSTEM, outstr)
+#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args)
struct jump_tag {
uint16_t tag;
@@ -330,12 +333,12 @@ int system_common_pre_init(void)
static int command_sysinfo(int argc, char **argv)
{
- uart_printf("Reset cause: %d (%s)\n",
+ ccprintf("Reset cause: %d (%s)\n",
system_get_reset_cause(),
system_get_reset_cause_string());
- uart_printf("Scratchpad: 0x%08x\n", system_get_scratchpad());
- uart_printf("Firmware copy: %s\n", system_get_image_copy_string());
- uart_printf("Jumped to this copy: %s\n",
+ ccprintf("Scratchpad: 0x%08x\n", system_get_scratchpad());
+ ccprintf("Firmware copy: %s\n", system_get_image_copy_string());
+ ccprintf("Jumped to this copy: %s\n",
system_jumped_to_this_image() ? "yes" : "no");
return EC_SUCCESS;
}
@@ -344,9 +347,9 @@ DECLARE_CONSOLE_COMMAND(sysinfo, command_sysinfo);
static int command_chipinfo(int argc, char **argv)
{
- uart_printf("Chip vendor: %s\n", system_get_chip_vendor());
- uart_printf("Chip name: %s\n", system_get_chip_name());
- uart_printf("Chip revision: %s\n", system_get_chip_revision());
+ ccprintf("Chip vendor: %s\n", system_get_chip_vendor());
+ ccprintf("Chip name: %s\n", system_get_chip_name());
+ ccprintf("Chip revision: %s\n", system_get_chip_revision());
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(chipinfo, command_chipinfo);
@@ -358,16 +361,16 @@ static int command_set_scratchpad(int argc, char **argv)
char *e;
if (argc < 2) {
- uart_puts("Usage: scratchpad <value>\n");
+ ccputs("Usage: scratchpad <value>\n");
return EC_ERROR_UNKNOWN;
}
s = strtoi(argv[1], &e, 0);
if (*e) {
- uart_puts("Invalid scratchpad value\n");
+ ccputs("Invalid scratchpad value\n");
return EC_ERROR_UNKNOWN;
}
- uart_printf("Setting scratchpad to 0x%08x\n", s);
+ ccprintf("Setting scratchpad to 0x%08x\n", s);
return system_set_scratchpad(s);
}
DECLARE_CONSOLE_COMMAND(setscratchpad, command_set_scratchpad);
@@ -379,15 +382,15 @@ static int command_hibernate(int argc, char **argv)
int microseconds = 0;
if (argc < 2) {
- uart_puts("Usage: hibernate <seconds> [<microseconds>]\n");
+ ccputs("Usage: hibernate <seconds> [<microseconds>]\n");
return EC_ERROR_UNKNOWN;
}
seconds = strtoi(argv[1], NULL, 0);
if (argc >= 3)
microseconds = strtoi(argv[2], NULL, 0);
- uart_printf("Hibernating for %d.%06d s ...\n", seconds, microseconds);
- uart_flush_output();
+ ccprintf("Hibernating for %d.%06d s ...\n", seconds, microseconds);
+ cflush();
system_hibernate(seconds, microseconds);
@@ -398,13 +401,13 @@ DECLARE_CONSOLE_COMMAND(hibernate, command_hibernate);
static int command_version(int argc, char **argv)
{
- uart_printf("RO version: %s\n",
+ ccprintf("RO version: %s\n",
system_get_version(SYSTEM_IMAGE_RO));
- uart_printf("RW-A version: %s\n",
+ ccprintf("RW-A version: %s\n",
system_get_version(SYSTEM_IMAGE_RW_A));
- uart_printf("RW-B version: %s\n",
+ ccprintf("RW-B version: %s\n",
system_get_version(SYSTEM_IMAGE_RW_B));
- uart_printf("Current build: %s\n", system_get_build_info());
+ ccprintf("Current build: %s\n", system_get_build_info());
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(version, command_version);
@@ -419,30 +422,30 @@ static int command_sysjump(int argc, char **argv)
* be disabled. */
if (argc < 2) {
- uart_puts("Usage: sysjump <RO | A | B | addr>\n");
+ ccputs("Usage: sysjump <RO | A | B | addr>\n");
return EC_ERROR_INVAL;
}
/* Handle named images */
if (!strcasecmp(argv[1], "RO")) {
- uart_puts("Jumping directly to RO image...\n");
+ ccputs("Jumping directly to RO image...\n");
return system_run_image_copy(SYSTEM_IMAGE_RO);
} else if (!strcasecmp(argv[1], "A")) {
- uart_puts("Jumping directly to image A...\n");
+ ccputs("Jumping directly to image A...\n");
return system_run_image_copy(SYSTEM_IMAGE_RW_A);
} else if (!strcasecmp(argv[1], "B")) {
- uart_puts("Jumping directly to image B...\n");
+ ccputs("Jumping directly to image B...\n");
return system_run_image_copy(SYSTEM_IMAGE_RW_B);
}
/* Check for arbitrary address */
addr = strtoi(argv[1], &e, 0);
if (e && *e) {
- uart_puts("Invalid image address\n");
+ ccputs("Invalid image address\n");
return EC_ERROR_INVAL;
}
- uart_printf("Jumping directly to 0x%08x...\n", addr);
- uart_flush_output();
+ ccprintf("Jumping directly to 0x%08x...\n", addr);
+ cflush();
jump_to_image(addr);
return EC_SUCCESS;
}
@@ -451,8 +454,8 @@ DECLARE_CONSOLE_COMMAND(sysjump, command_sysjump);
static int command_reboot(int argc, char **argv)
{
- uart_puts("Rebooting!\n\n\n");
- uart_flush_output();
+ ccputs("Rebooting!\n\n\n");
+ cflush();
system_reset(1);
return EC_SUCCESS;
}
@@ -538,17 +541,17 @@ enum lpc_status host_command_reboot(uint8_t *data)
switch (p->target) {
case EC_LPC_IMAGE_RO:
- uart_puts("[Rebooting to image RO!\n]");
+ CPUTS("[Rebooting to image RO!\n]");
clean_busy_bits();
system_run_image_copy(SYSTEM_IMAGE_RO);
break;
case EC_LPC_IMAGE_RW_A:
- uart_puts("[Rebooting to image A!]\n");
+ CPUTS("[Rebooting to image A!]\n");
clean_busy_bits();
system_run_image_copy(SYSTEM_IMAGE_RW_A);
break;
case EC_LPC_IMAGE_RW_B:
- uart_puts("[Rebooting to image B!]\n");
+ CPUTS("[Rebooting to image B!]\n");
clean_busy_bits();
system_run_image_copy(SYSTEM_IMAGE_RW_B);
break;
diff --git a/common/uart_buffering.c b/common/uart_buffering.c
index 6d08dbb9af..d83b34ea40 100644
--- a/common/uart_buffering.c
+++ b/common/uart_buffering.c
@@ -357,6 +357,7 @@ void uart_process(void)
uart_tx_stop();
}
+
void uart_set_console_mode(int enable)
{
console_mode = enable;
@@ -382,7 +383,7 @@ int uart_puts(const char *outstr)
}
-int uart_printf(const char *format, ...)
+int uart_vprintf(const char *format, va_list args)
{
static const char int_chars[] = "0123456789abcdef";
static const char error_str[] = "ERROR";
@@ -394,12 +395,9 @@ int uart_printf(const char *format, ...)
int is_left;
int pad_zero;
int pad_width;
- va_list args;
char *vstr;
int vlen;
- va_start(args, format);
-
while (*format && !dropped_chars) {
int c = *format++;
@@ -532,7 +530,6 @@ int uart_printf(const char *format, ...)
vlen++;
}
}
- va_end(args);
if (uart_tx_stopped())
uart_tx_start();
@@ -541,6 +538,19 @@ int uart_printf(const char *format, ...)
return dropped_chars ? EC_ERROR_OVERFLOW : EC_SUCCESS;
}
+
+int uart_printf(const char *format, ...)
+{
+ int rv;
+ va_list args;
+
+ va_start(args, format);
+ rv = uart_vprintf(format, args);
+ va_end(args);
+ return rv;
+}
+
+
void uart_flush_output(void)
{
/* Wait for buffer to empty */
diff --git a/common/usb_charge_commands.c b/common/usb_charge_commands.c
index 006ef97ea8..a8a855841a 100644
--- a/common/usb_charge_commands.c
+++ b/common/usb_charge_commands.c
@@ -8,9 +8,12 @@
#include "console.h"
#include "usb_charge.h"
#include "host_command.h"
-#include "uart.h"
#include "util.h"
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_USBCHARGE, outstr)
+#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args)
+
enum lpc_status usb_charge_command_set_mode(uint8_t *data)
{
@@ -18,8 +21,8 @@ enum lpc_status usb_charge_command_set_mode(uint8_t *data)
(struct lpc_params_usb_charge_set_mode *)data;
int rv;
- uart_printf("[Setting USB port %d to mode %d]\n",
- p->usb_port_id, p->mode);
+ CPRINTF("[Setting USB port %d to mode %d]\n",
+ p->usb_port_id, p->mode);
rv = usb_charge_set_mode(p->usb_port_id, p->mode);
if (rv != EC_SUCCESS)
diff --git a/common/x86_power.c b/common/x86_power.c
index 8cb1daaa55..de6a5cfe5d 100644
--- a/common/x86_power.c
+++ b/common/x86_power.c
@@ -16,10 +16,13 @@
#include "system.h"
#include "task.h"
#include "timer.h"
-#include "uart.h"
#include "util.h"
#include "x86_power.h"
+/* Console output macros */
+#define CPUTS(outstr) cputs(CC_X86POWER, outstr)
+#define CPRINTF(format, args...) cprintf(CC_X86POWER, format, ## args)
+
/* Default timeout in us; if we've been waiting this long for an input
* transition, just jump to the next state. */
#define DEFAULT_TIMEOUT 1000000
@@ -145,9 +148,9 @@ static int wait_in_signals(uint32_t want)
while ((in_signals & in_want) != in_want) {
if (task_wait_event(DEFAULT_TIMEOUT) == TASK_EVENT_TIMER) {
update_in_signals();
- uart_printf("[x86 power timeout on input; "
- "wanted 0x%04x, got 0x%04x]\n",
- in_want, in_signals & in_want);
+ CPRINTF("[x86 power timeout on input; "
+ "wanted 0x%04x, got 0x%04x]\n",
+ in_want, in_signals & in_want);
return EC_ERROR_TIMEOUT;
}
/* TODO: should really shrink the remaining timeout if we woke
@@ -240,7 +243,7 @@ void x86_power_interrupt(enum gpio_signal signal)
/*****************************************************************************/
/* Initialization */
-int x86_power_init(void)
+static int x86_power_init(void)
{
/* Default to G3 state unless proven otherwise */
state = X86_G3;
@@ -254,11 +257,11 @@ int x86_power_init(void)
* through G3. */
if (system_jumped_to_this_image()) {
if ((in_signals & IN_ALL_S0) == IN_ALL_S0) {
- uart_puts("[x86 already in S0]\n");
+ CPUTS("[x86 already in S0]\n");
state = X86_S0;
} else {
/* Force all signals to their G3 states */
- uart_puts("[x86 forcing G3]\n");
+ CPUTS("[x86 forcing G3]\n");
gpio_set_level(GPIO_PCH_PWROK, 0);
gpio_set_level(GPIO_ENABLE_VCORE, 0);
gpio_set_level(GPIO_PCH_RCINn, 0);
@@ -300,8 +303,8 @@ void x86_power_task(void)
x86_power_init();
while (1) {
- uart_printf("[%T x86 power state %d = %s, in 0x%04x]\n",
- state, state_names[state], in_signals);
+ CPRINTF("[%T x86 power state %d = %s, in 0x%04x]\n",
+ state, state_names[state], in_signals);
switch (state) {
case X86_G3:
@@ -460,11 +463,11 @@ void x86_power_task(void)
static int command_x86power(int argc, char **argv)
{
/* Print current state */
- uart_printf("Current X86 state: %d (%s)\n", state, state_names[state]);
+ ccprintf("Current X86 state: %d (%s)\n", state, state_names[state]);
/* Forcing a power state from EC is deprecated */
if (argc > 1)
- uart_puts("Use 'powerbtn' instead of 'x86power s0'.\n");
+ ccputs("Use 'powerbtn' instead of 'x86power s0'.\n");
return EC_SUCCESS;
}
@@ -481,7 +484,7 @@ static int command_x86reset(int argc, char **argv)
is_cold = 0;
/* Force the x86 to reset */
- uart_printf("Issuing x86 %s reset...\n", is_cold ? "cold" : "warm");
+ ccprintf("Issuing x86 %s reset...\n", is_cold ? "cold" : "warm");
x86_power_reset(is_cold);
return EC_SUCCESS;
}