Changeset a35b458 in mainline for kernel/generic/src/console/console.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 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/generic/src/console/console.c
r3061bc1 ra35b458 119 119 stdin = &stdin_sink; 120 120 } 121 121 122 122 return stdin; 123 123 } … … 143 143 stdout = &stdout_source; 144 144 } 145 145 146 146 list_append(&outdev->link, &stdout->list); 147 147 } … … 189 189 { 190 190 void *faddr = (void *) KA2PA(kio); 191 191 192 192 assert((uintptr_t) faddr % FRAME_SIZE == 0); 193 193 194 194 kio_parea.pbase = (uintptr_t) faddr; 195 195 kio_parea.frames = SIZE2FRAMES(sizeof(kio)); … … 197 197 kio_parea.mapped = false; 198 198 ddi_parea_register(&kio_parea); 199 199 200 200 sysinfo_set_item_val("kio.faddr", NULL, (sysarg_t) faddr); 201 201 sysinfo_set_item_val("kio.pages", NULL, KIO_PAGES); 202 202 203 203 event_set_unmask_callback(EVENT_KIO, kio_update); 204 204 atomic_set(&kio_inited, true); … … 209 209 event_notify_1(EVENT_KCONSOLE, false, true); 210 210 bool prev = console_override; 211 211 212 212 console_override = true; 213 213 if ((stdout) && (stdout->op->redraw)) 214 214 stdout->op->redraw(stdout); 215 215 216 216 if ((stdin) && (!prev)) { 217 217 /* … … 256 256 size_t count = 0; 257 257 buf[offset] = 0; 258 258 259 259 wchar_t ch; 260 260 while ((ch = indev_pop_character(indev)) != '\n') { … … 265 265 putchar(' '); 266 266 putchar('\b'); 267 267 268 268 count--; 269 269 offset = str_lsize(buf, count); … … 271 271 } 272 272 } 273 273 274 274 if (chr_encode(ch, buf, &offset, buflen - 1) == EOK) { 275 275 putchar(ch); … … 278 278 } 279 279 } 280 280 281 281 return count; 282 282 } … … 294 294 if (!atomic_get(&kio_inited)) 295 295 return; 296 296 297 297 spinlock_lock(&kio_lock); 298 298 299 299 if (kio_uspace > 0) { 300 300 if (event_notify_3(EVENT_KIO, true, kio_start, kio_len, … … 302 302 kio_uspace = 0; 303 303 } 304 304 305 305 spinlock_unlock(&kio_lock); 306 306 } … … 312 312 { 313 313 bool ordy = ((stdout) && (stdout->op->write)); 314 314 315 315 if (!ordy) 316 316 return; … … 347 347 else 348 348 kio_start = (kio_start + 1) % KIO_LENGTH; 349 349 350 350 if (kio_stored < kio_len) 351 351 kio_stored++; 352 352 353 353 /* The character is stored for uspace */ 354 354 if (kio_uspace < kio_len) … … 359 359 { 360 360 bool ordy = ((stdout) && (stdout->op->write)); 361 361 362 362 spinlock_lock(&kio_lock); 363 363 kio_push_char(ch); 364 364 spinlock_unlock(&kio_lock); 365 365 366 366 /* Output stored characters */ 367 367 kio_flush(); 368 368 369 369 if (!ordy) { 370 370 /* … … 380 380 early_putchar(ch); 381 381 } 382 382 383 383 /* Force notification on newline */ 384 384 if (ch == '\n') … … 409 409 if (size > PAGE_SIZE) 410 410 return (sys_errno_t) ELIMIT; 411 411 412 412 if (size > 0) { 413 413 data = (char *) malloc(size + 1, 0); 414 414 if (!data) 415 415 return (sys_errno_t) ENOMEM; 416 416 417 417 rc = copy_from_uspace(data, buf, size); 418 418 if (rc) { … … 421 421 } 422 422 data[size] = 0; 423 423 424 424 switch (cmd) { 425 425 case KIO_WRITE:
Note:
See TracChangeset
for help on using the changeset viewer.