summaryrefslogtreecommitdiff
path: root/src/lib/usbdebug.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/usbdebug.c')
-rw-r--r--src/lib/usbdebug.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/lib/usbdebug.c b/src/lib/usbdebug.c
index 800ee52ae3..fd234260c2 100644
--- a/src/lib/usbdebug.c
+++ b/src/lib/usbdebug.c
@@ -377,7 +377,7 @@ int usbdebug_init(unsigned ehci_bar, unsigned offset, struct ehci_debug_info *in
HC_LENGTH(read32((unsigned long)&ehci_caps->hc_capbase)));
ehci_debug = (struct ehci_dbg_port *)(ehci_bar + offset);
info->ehci_debug = (void *)0;
-
+ info->bufidx = 0;
try_next_time:
port_map_tried = 0;
@@ -573,15 +573,34 @@ int early_usbdebug_init(void)
return usbdebug_init(CONFIG_EHCI_BAR, CONFIG_EHCI_DEBUG_OFFSET, dbg_info);
}
-void usbdebug_tx_byte(unsigned char data)
+void usbdebug_tx_byte(struct ehci_debug_info *dbg_info, unsigned char data)
{
- struct ehci_debug_info *dbg_info;
- /* "Find" dbg_info structure in Cache */
- dbg_info = (struct ehci_debug_info *)
- (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info));
+ if (!dbg_info) {
+ /* "Find" dbg_info structure in Cache */
+ dbg_info = (struct ehci_debug_info *)
+ (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info));
+ }
if (dbg_info->ehci_debug) {
- dbgp_bulk_write_x(dbg_info, (char*)&data, 1);
+ dbg_info->buf[dbg_info->bufidx++] = data;
+ if (dbg_info->bufidx >= 8) {
+ dbgp_bulk_write_x(dbg_info, dbg_info->buf, dbg_info->bufidx);
+ dbg_info->bufidx = 0;
+ }
+ }
+}
+
+void usbdebug_tx_flush(struct ehci_debug_info *dbg_info)
+{
+ if (!dbg_info) {
+ /* "Find" dbg_info structure in Cache */
+ dbg_info = (struct ehci_debug_info *)
+ (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - sizeof(struct ehci_debug_info));
+ }
+
+ if (dbg_info->ehci_debug && dbg_info->bufidx > 0) {
+ dbgp_bulk_write_x(dbg_info, dbg_info->buf, dbg_info->bufidx);
+ dbg_info->bufidx = 0;
}
}