summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2020-07-18 10:34:49 -0600
committerGitHub <noreply@github.com>2020-07-18 10:34:49 -0600
commitfb75521c041370e045eb1812aa257d5ebd2ffd32 (patch)
tree15ef244dbb8bb05b4ba3b461a77aa36e7c216425 /libs
parent437967699cf69896e6bb9c50979dbc17a4850ced (diff)
downloadbcm5719-ortega-fb75521c041370e045eb1812aa257d5ebd2ffd32.tar.gz
bcm5719-ortega-fb75521c041370e045eb1812aa257d5ebd2ffd32.zip
debug: Enable the ape console on Port 0 (needed for SPI prints) and Port 1. (#92)
Diffstat (limited to 'libs')
-rw-r--r--libs/Network/include/Network.h6
-rw-r--r--libs/printf/ape_console.h52
-rw-r--r--libs/printf/ape_putchar.c48
3 files changed, 93 insertions, 13 deletions
diff --git a/libs/Network/include/Network.h b/libs/Network/include/Network.h
index c6aa260..ab621d6 100644
--- a/libs/Network/include/Network.h
+++ b/libs/Network/include/Network.h
@@ -54,12 +54,6 @@
#include <APE_SHM_CHANNEL0.h>
#include <types.h>
-#ifdef CXX_SIMULATOR
-#define VOLATILE
-#else
-#define VOLATILE volatile
-#endif
-
typedef struct
{
/* Port Registers */
diff --git a/libs/printf/ape_console.h b/libs/printf/ape_console.h
new file mode 100644
index 0000000..d2d80fd
--- /dev/null
+++ b/libs/printf/ape_console.h
@@ -0,0 +1,52 @@
+////////////////////////////////////////////////////////////////////////////////
+///
+/// @file ape_console.h
+///
+/// @project
+///
+/// @brief APE printf support Routines
+///
+////////////////////////////////////////////////////////////////////////////////
+///
+////////////////////////////////////////////////////////////////////////////////
+///
+/// @copyright Copyright (c) 2020, Evan Lojewski
+/// @cond
+///
+/// All rights reserved.
+///
+/// Redistribution and use in source and binary forms, with or without
+/// modification, are permitted provided that the following conditions are met:
+/// 1. Redistributions of source code must retain the above copyright notice,
+/// this list of conditions and the following disclaimer.
+/// 2. Redistributions in binary form must reproduce the above copyright notice,
+/// this list of conditions and the following disclaimer in the documentation
+/// and/or other materials provided with the distribution.
+/// 3. Neither the name of the copyright holder nor the
+/// names of its contributors may be used to endorse or promote products
+/// derived from this software without specific prior written permission.
+///
+////////////////////////////////////////////////////////////////////////////////
+///
+/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+/// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+/// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+/// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+/// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+/// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+/// POSSIBILITY OF SUCH DAMAGE.
+/// @endcond
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef APE_CONSOLE_H
+#define APE_CONSOLE_H
+
+#include <types.h>
+
+bool reset_ape_console(void);
+
+#endif /* APE_CONSOLE_H */
diff --git a/libs/printf/ape_putchar.c b/libs/printf/ape_putchar.c
index ea96a89..50fd5df 100644
--- a/libs/printf/ape_putchar.c
+++ b/libs/printf/ape_putchar.c
@@ -43,25 +43,59 @@
////////////////////////////////////////////////////////////////////////////////
#include <printf.h>
-#include <em100_putchar.h>
+#include <ape_console.h>
#include <APE_SHM.h>
+#include <APE_SHM1.h>
-void _putchar(char character)
+static bool reset_ape_console_internal(VOLATILE SHM_t *port)
+{
+ if (port->RcpuWritePointer.r32 > sizeof(port->RcpuPrintfBuffer) ||
+ port->RcpuReadPointer.r32 > sizeof(port->RcpuPrintfBuffer) ||
+ port->RcpuHostReadPointer.r32 > sizeof(port->RcpuPrintfBuffer))
+ {
+ port->RcpuWritePointer.r32 = 0;
+ port->RcpuReadPointer.r32 = 0;
+ port->RcpuHostReadPointer.r32 = 0;
+
+ return true;
+ }
+
+ return false;
+}
+
+bool reset_ape_console(void)
+{
+ bool was_reset = false;
+ was_reset = was_reset || reset_ape_console_internal(&SHM);
+ was_reset = was_reset || reset_ape_console_internal(&SHM1);
+
+ return was_reset;
+}
+
+
+static void ape_putchar(char character, VOLATILE SHM_t *port)
{
- uint32_t write_pointer = SHM.RcpuWritePointer.r32;
+ uint32_t write_pointer = port->RcpuWritePointer.r32;
uint32_t word_pointer = write_pointer / 4;
uint32_t byte_index = write_pointer % 4;
uint32_t byte_mask = 0xFF << (byte_index * 8);
- uint32_t new_word = SHM.RcpuPrintfBuffer[word_pointer].r32 & ~byte_mask;
+ uint32_t new_word = port->RcpuPrintfBuffer[word_pointer].r32 & ~byte_mask;
new_word |= character << (byte_index * 8);
- SHM.RcpuPrintfBuffer[word_pointer].r32 = new_word;
+ port->RcpuPrintfBuffer[word_pointer].r32 = new_word;
write_pointer++;
- if(write_pointer >= sizeof(SHM.RcpuPrintfBuffer))
+ if(write_pointer >= sizeof(port->RcpuPrintfBuffer))
{
write_pointer = 0;
}
- SHM.RcpuWritePointer.r32 = write_pointer;
+ port->RcpuWritePointer.r32 = write_pointer;
+}
+
+
+void _putchar(char character)
+{
+ ape_putchar(character, &SHM);
+ ape_putchar(character, &SHM1);
}
OpenPOWER on IntegriCloud