Changeset 0ffa3ef5 in mainline for arch/sparc64/src/console.c
- Timestamp:
- 2006-07-10T20:57:30Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 11675207
- Parents:
- 7f1c620
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/sparc64/src/console.c
r7f1c620 r0ffa3ef5 52 52 53 53 static 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;59 54 60 55 static volatile int ofw_console_active; … … 63 58 static chardev_operations_t ofw_sparc64_console_ops = { 64 59 .write = ofw_sparc64_putchar, 65 .read = ofw_sparc64_getchar,66 .resume = ofw_sparc64_resume,67 .suspend = ofw_sparc64_suspend68 60 }; 69 61 … … 72 64 { 73 65 chardev_initialize("ofw_sparc64_console", &ofw_sparc64_console, &ofw_sparc64_console_ops); 74 stdin = &ofw_sparc64_console;66 stdin = NULL; 75 67 stdout = &ofw_sparc64_console; 76 mutex_initialize(&canwork);77 68 ofw_console_active = 1; 78 69 } … … 95 86 void ofw_sparc64_putchar(chardev_t *d, const char ch) 96 87 { 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 106 88 if (ch == '\n') 107 89 ofw_putchar('\r'); 108 90 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 }172 91 } 173 92
Note:
See TracChangeset
for help on using the changeset viewer.