Changeset a35b458 in mainline for kernel/arch/ia64/src/drivers/ski.c
- Timestamp:
- 2018-03-02T20:10:49Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/drivers/ski.c
r3061bc1 ra35b458 49 49 /** Interval between polling in microseconds */ 50 50 POLL_INTERVAL = 10000, /* 0.01 s */ 51 51 52 52 /** Max. number of characters to pull out at a time */ 53 53 POLL_LIMIT = 30, 54 54 55 55 SKI_INIT_CONSOLE = 20, 56 56 SKI_GETCHAR = 21, … … 82 82 { 83 83 uint64_t ch; 84 84 85 85 asm volatile ( 86 86 "mov r15 = %1\n" 87 87 "break 0x80000;;\n" /* modifies r8 */ 88 88 "mov %0 = r8;;\n" 89 89 90 90 : "=r" (ch) 91 91 : "i" (SKI_GETCHAR) 92 92 : "r15", "r8" 93 93 ); 94 94 95 95 return (wchar_t) ch; 96 96 } … … 103 103 { 104 104 int count = POLL_LIMIT; 105 105 106 106 while (count > 0) { 107 107 wchar_t ch = ski_getchar(); 108 108 109 109 if (ch == '\0') 110 110 break; 111 111 112 112 indev_push_character(instance->srlnin, ch); 113 113 --count; … … 119 119 { 120 120 ski_instance_t *instance = (ski_instance_t *) arg; 121 121 122 122 while (true) { 123 123 // TODO FIXME: … … 126 126 if (console_override) 127 127 poll_keyboard(instance); 128 128 129 129 thread_usleep(POLL_INTERVAL); 130 130 } … … 141 141 if (instance) 142 142 return; 143 143 144 144 asm volatile ( 145 145 "mov r15 = %0\n" … … 149 149 : "r15", "r8" 150 150 ); 151 151 152 152 instance = malloc(sizeof(ski_instance_t), FRAME_ATOMIC); 153 153 154 154 if (instance) { 155 155 instance->thread = thread_create(kskipoll, instance, TASK, 156 156 THREAD_FLAG_UNCOUNTED, "kskipoll"); 157 157 158 158 if (!instance->thread) { 159 159 free(instance); … … 161 161 return; 162 162 } 163 163 164 164 instance->srlnin = NULL; 165 165 } … … 196 196 if (ch == '\n') 197 197 ski_do_putchar('\r'); 198 198 199 199 ski_do_putchar(ch); 200 200 } else … … 208 208 if (!instance) 209 209 return NULL; 210 210 211 211 outdev_t *skidev = malloc(sizeof(outdev_t), FRAME_ATOMIC); 212 212 if (!skidev) 213 213 return NULL; 214 214 215 215 outdev_initialize("skidev", skidev, &skidev_ops); 216 216 skidev->data = instance; 217 217 218 218 if (!fb_exported) { 219 219 /* … … 224 224 sysinfo_set_item_val("fb", NULL, true); 225 225 sysinfo_set_item_val("fb.kind", NULL, 6); 226 226 227 227 fb_exported = true; 228 228 } 229 229 230 230 return skidev; 231 231 } … … 241 241 assert(instance); 242 242 assert(srlnin); 243 243 244 244 instance->srlnin = srlnin; 245 245 thread_ready(instance->thread); 246 246 247 247 sysinfo_set_item_val("kbd", NULL, true); 248 248 sysinfo_set_item_val("kbd.type", NULL, KBD_SKI);
Note:
See TracChangeset
for help on using the changeset viewer.