summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2008-09-09 13:20:04 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2008-09-09 13:20:04 +0000
commit85e87f16b6d6f03d2b6287a4295283bb78037fd0 (patch)
treecf7974df8facc4dbc8b7e202436df65cbeaee06b /c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
parentminor additions (diff)
downloadrtems-85e87f16b6d6f03d2b6287a4295283bb78037fd0.tar.bz2
added printk support
added port init, added phy support init mmu
Diffstat (limited to 'c/src/lib/libbsp/powerpc/tqm8xx/console/console.c')
-rw-r--r--c/src/lib/libbsp/powerpc/tqm8xx/console/console.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c b/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
index 00e08e79b3..32cc0d5a21 100644
--- a/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
+++ b/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c
@@ -100,6 +100,7 @@ int m8xx_clock_rate = 0;
#define CONS_CHN_SCC4 3
#define CONS_CHN_SMC1 4
#define CONS_CHN_SMC2 5
+#define CONS_CHN_NONE -1
/*
* possible identifiers for bspopts.h: CONS_SxCy_MODE
@@ -116,12 +117,6 @@ int m8xx_clock_rate = 0;
#define DEVICEPREFIX "tty"
/*
- * printk basic support
- */
-static void _BSP_null_char( char c ) {return;}
-BSP_output_char_function_type BSP_output_char = _BSP_null_char;
-
-/*
* Interrupt-driven callback
*/
static int m8xx_scc_mode[CONS_CHN_CNT];
@@ -818,11 +813,11 @@ sccInterruptWrite (int minor, const char *buf, int len)
static int
sccPollWrite (int minor, const char *buf, int len)
{
+ static char txBuf[CONS_CHN_CNT][SCC_TXBD_CNT];
int chan = minor;
int bd_used;
-
+
while (len--) {
- static char txBuf[CONS_CHN_CNT][SCC_TXBD_CNT];
while (sccPrepTxBd[chan]->status & M8xx_BD_READY)
continue;
bd_used = sccPrepTxBd[chan]-sccFrstTxBd[chan];
@@ -846,6 +841,30 @@ sccPollWrite (int minor, const char *buf, int len)
}
/*
+ * printk basic support
+ */
+int BSP_output_chan = CONS_CHN_NONE; /* channel used for printk operation */
+
+static void console_debug_putc_onlcr(const char c)
+{
+ rtems_interrupt_level irq_level;
+ static char cr_chr = '\r';
+
+ if (BSP_output_chan != CONS_CHN_NONE) {
+ rtems_interrupt_disable(irq_level);
+
+ if (c == '\n') {
+ sccPollWrite (BSP_output_chan,&cr_chr,1);
+ }
+ sccPollWrite (BSP_output_chan,&c,1);
+ rtems_interrupt_enable(irq_level);
+ }
+}
+
+BSP_output_char_function_type BSP_output_char = console_debug_putc_onlcr;
+
+
+/*
***************
* BOILERPLATE *
***************
@@ -930,8 +949,10 @@ rtems_device_driver console_initialize(rtems_device_major_number major,
rtems_fatal_error_occurred (status);
}
/*
- * FIXME: enable printk support
+ * enable printk support
*/
+ BSP_output_chan = PRINTK_CHN;
+
return RTEMS_SUCCESSFUL;
}
@@ -1028,8 +1049,6 @@ static int scc_io_set_trm_char(rtems_device_minor_number minor,
rtems_status_code rc = RTEMS_SUCCESSFUL;
con360_io_trm_char_t *trm_char_info = ioa->buffer;
- printf("ioctl called: maxidl=%d\n",trm_char_info->max_idl);
- printf("ioctl called: char_cnt=%d\n",trm_char_info->char_cnt);
/*
* check, that parameter is non-NULL
*/
@@ -1042,7 +1061,6 @@ static int scc_io_set_trm_char(rtems_device_minor_number minor,
*/
if (rc == RTEMS_SUCCESSFUL) {
if (trm_char_info->max_idl >= 0x10000) {
- printf("ioctl called: invalid number for maxidl\n");
rc = RTEMS_INVALID_NUMBER;
}
else if (trm_char_info->max_idl > 0) {
@@ -1057,7 +1075,6 @@ static int scc_io_set_trm_char(rtems_device_minor_number minor,
*/
if (rc == RTEMS_SUCCESSFUL) {
if (trm_char_info->char_cnt > CON8XX_TRM_CHAR_CNT) {
- printf("ioctl called: invalid number for char_cnt\n");
rc = RTEMS_TOO_MANY;
}
else if (trm_char_info->char_cnt >= 0) {
@@ -1066,7 +1083,6 @@ static int scc_io_set_trm_char(rtems_device_minor_number minor,
*/
if ((rc == RTEMS_SUCCESSFUL) &&
!m8xx_console_chan_desc[minor].is_scc) {
- printf("ioctl called: not an scc:%d\n",minor);
rc = RTEMS_UNSATISFIED;
}
else {
@@ -1083,7 +1099,6 @@ static int scc_io_set_trm_char(rtems_device_minor_number minor,
}
}
- printf("ioctl called: return code: %d\n",rc);
return rc;
}
#endif