Changeset 0ffa3ef5 in mainline for arch/sparc64/src/console.c


Ignore:
Timestamp:
2006-07-10T20:57:30Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
11675207
Parents:
7f1c620
Message:

Sync OpenFirmware functionality with boot.
Random cleanup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/sparc64/src/console.c

    r7f1c620 r0ffa3ef5  
    5252
    5353static void ofw_sparc64_putchar(chardev_t *d, const char ch);
    54 static char ofw_sparc64_getchar(chardev_t *d);
    55 static void ofw_sparc64_suspend(chardev_t *d);
    56 static void ofw_sparc64_resume(chardev_t *d);
    57 
    58 mutex_t canwork;
    5954
    6055static volatile int ofw_console_active;
     
    6358static chardev_operations_t ofw_sparc64_console_ops = {
    6459        .write = ofw_sparc64_putchar,
    65         .read = ofw_sparc64_getchar,
    66         .resume = ofw_sparc64_resume,
    67         .suspend = ofw_sparc64_suspend
    6860};
    6961
     
    7264{
    7365        chardev_initialize("ofw_sparc64_console", &ofw_sparc64_console, &ofw_sparc64_console_ops);
    74         stdin = &ofw_sparc64_console;
     66        stdin = NULL;
    7567        stdout = &ofw_sparc64_console;
    76         mutex_initialize(&canwork);
    7768        ofw_console_active = 1;
    7869}
     
    9586void ofw_sparc64_putchar(chardev_t *d, const char ch)
    9687{
    97         pstate_reg_t pstate;
    98 
    99         /*
    100          * 32-bit OpenFirmware depends on PSTATE.AM bit set.
    101          */     
    102         pstate.value = pstate_read();
    103         pstate.am = true;
    104         pstate_write(pstate.value);
    105 
    10688        if (ch == '\n')
    10789                ofw_putchar('\r');
    10890        ofw_putchar(ch);
    109        
    110         pstate.am = false;
    111         pstate_write(pstate.value);
    112 }
    113 
    114 /** Read one character using OpenFirmware.
    115  *
    116  * The call is non-blocking.
    117  *
    118  * @param d Character device (ignored).
    119  * @return Character read or zero if no character was read.
    120  */
    121 char ofw_sparc64_getchar(chardev_t *d)
    122 {
    123         char ch;
    124         pstate_reg_t pstate;
    125 
    126         /*
    127          * 32-bit OpenFirmware depends on PSTATE.AM bit set.
    128          */     
    129         pstate.value = pstate_read();
    130         pstate.am = true;
    131         pstate_write(pstate.value);
    132 
    133         ch = ofw_getchar();
    134        
    135         pstate.am = false;
    136         pstate_write(pstate.value);
    137        
    138         return ch;
    139 }
    140 
    141 void ofw_sparc64_suspend(chardev_t *d)
    142 {
    143         mutex_lock(&canwork);
    144 }
    145 
    146 void ofw_sparc64_resume(chardev_t *d)
    147 {
    148         mutex_unlock(&canwork);
    149 }
    150 
    151 /** Kernel thread for pushing characters read from OFW to input buffer.
    152  *
    153  * @param arg Ignored.
    154  */
    155 void kofwinput(void *arg)
    156 {
    157 
    158         while (ofw_console_active) {
    159                 char ch = 0;
    160                
    161                 mutex_lock(&canwork);
    162                 mutex_unlock(&canwork);
    163                
    164                 ch = ofw_sparc64_getchar(NULL);
    165                 if (ch) {
    166                         if (ch == '\r')
    167                                 ch = '\n';
    168                         chardev_push_character(&ofw_sparc64_console, ch);
    169                 }
    170                 thread_usleep(KEYBOARD_POLL_PAUSE);
    171         }
    17291}
    17392
Note: See TracChangeset for help on using the changeset viewer.