Changeset 65fb232 in mainline for arch/sparc64/src/console.c
- Timestamp:
- 2005-12-30T22:38:23Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6ccb238
- Parents:
- 80bff342
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/sparc64/src/console.c
r80bff342 r65fb232 33 33 #include <arch/asm.h> 34 34 #include <arch/register.h> 35 #include <arch/types.h> 36 #include <typedefs.h> 37 #include <proc/thread.h> 38 #include <synch/mutex.h> 35 39 36 40 static void ofw_sparc64_putchar(chardev_t *d, const char ch); 41 static char ofw_sparc64_getchar(chardev_t *d); 42 static void ofw_sparc64_suspend(chardev_t *d); 43 static void ofw_sparc64_resume(chardev_t *d); 44 45 mutex_t canwork; 37 46 38 47 static chardev_t ofw_sparc64_console; 39 48 static chardev_operations_t ofw_sparc64_console_ops = { 40 .write = ofw_sparc64_putchar 49 .write = ofw_sparc64_putchar, 50 .read = ofw_sparc64_getchar, 51 .resume = ofw_sparc64_resume, 52 .suspend = ofw_sparc64_suspend 41 53 }; 42 54 … … 44 56 { 45 57 chardev_initialize("ofw_sparc64_console", &ofw_sparc64_console, &ofw_sparc64_console_ops); 58 stdin = &ofw_sparc64_console; 46 59 stdout = &ofw_sparc64_console; 60 mutex_initialize(&canwork); 47 61 } 48 62 49 /** Printone character.63 /** Write one character. 50 64 * 51 * @param ch Character to be printed. 65 * @param d Character device (ignored). 66 * @param ch Character to be written. 52 67 */ 53 68 void ofw_sparc64_putchar(chardev_t *d, const char ch) … … 69 84 pstate_write(pstate.value); 70 85 } 86 87 /** Read one character. 88 * 89 * The call is non-blocking. 90 * 91 * @param d Character device (ignored). 92 * @return Character read or zero if no character was read. 93 */ 94 char ofw_sparc64_getchar(chardev_t *d) 95 { 96 char ch; 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 ch = ofw_getchar(); 107 108 pstate.am = false; 109 pstate_write(pstate.value); 110 111 return ch; 112 } 113 114 void ofw_sparc64_suspend(chardev_t *d) 115 { 116 mutex_lock(&canwork); 117 } 118 119 void ofw_sparc64_resume(chardev_t *d) 120 { 121 mutex_unlock(&canwork); 122 } 123 124 /** Kernel thread for pushing characters read from OFW to input buffer. 125 * 126 * @param arg Ignored. 127 */ 128 void kofwinput(void *arg) 129 { 130 131 while (1) { 132 char ch = 0; 133 134 mutex_lock(&canwork); 135 mutex_unlock(&canwork); 136 137 ch = ofw_sparc64_getchar(NULL); 138 if (ch) { 139 if (ch == '\r') 140 ch = '\n'; 141 chardev_push_character(&ofw_sparc64_console, ch); 142 } 143 thread_usleep(25000); 144 } 145 }
Note:
See TracChangeset
for help on using the changeset viewer.