Changes in / [04c35fca:103db908] in mainline
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/drivers/ski.c
r04c35fca r103db908 37 37 #include <console/console.h> 38 38 #include <console/chardev.h> 39 #include <ddi/ddi.h>40 39 #include <sysinfo/sysinfo.h> 41 40 #include <stdint.h> … … 70 69 71 70 static ski_instance_t *instance = NULL; 72 static parea_t ski_parea;73 71 74 72 /** Ask debug console if a key was pressed. … … 107 105 int count = POLL_LIMIT; 108 106 109 if (ski_parea.mapped)110 return;111 112 107 while (count > 0) { 113 108 wchar_t ch = ski_getchar(); … … 127 122 128 123 while (true) { 129 poll_keyboard(instance); 124 // TODO FIXME: 125 // This currently breaks the kernel console 126 // before we get the override from uspace. 127 if (console_override) 128 poll_keyboard(instance); 129 130 130 thread_usleep(POLL_INTERVAL); 131 131 } … … 140 140 static void ski_init(void) 141 141 { 142 uintptr_t faddr;143 144 142 if (instance) 145 143 return; … … 152 150 : "r15", "r8" 153 151 ); 154 155 faddr = frame_alloc(1, FRAME_LOWMEM | FRAME_ATOMIC, 0);156 if (faddr == 0)157 panic("Cannot allocate page for ski console.");158 159 ddi_parea_init(&ski_parea);160 ski_parea.pbase = faddr;161 ski_parea.frames = 1;162 ski_parea.unpriv = false;163 ski_parea.mapped = false;164 ddi_parea_register(&ski_parea);165 166 sysinfo_set_item_val("ski.paddr", NULL, (sysarg_t) faddr);167 152 168 153 instance = malloc(sizeof(ski_instance_t)); … … 205 190 static void ski_putwchar(outdev_t *dev, wchar_t ch) 206 191 { 207 if (ski_parea.mapped) 208 return; 209 210 if (ascii_check(ch)) { 211 if (ch == '\n') 212 ski_do_putchar('\r'); 213 214 ski_do_putchar(ch); 215 } else { 216 ski_do_putchar('?'); 192 // TODO FIXME: 193 // This currently breaks the kernel console 194 // before we get the override from uspace. 195 if (console_override) { 196 if (ascii_check(ch)) { 197 if (ch == '\n') 198 ski_do_putchar('\r'); 199 200 ski_do_putchar(ch); 201 } else { 202 ski_do_putchar('?'); 203 } 217 204 } 218 205 } -
kernel/generic/include/mm/as.h
r04c35fca r103db908 268 268 269 269 extern as_t *as_create(unsigned int); 270 extern void as_destroy(as_t *); 270 271 extern void as_hold(as_t *); 271 272 extern void as_release(as_t *); -
kernel/generic/src/console/console.c
r04c35fca r103db908 209 209 void grab_console(void) 210 210 { 211 sysinfo_set_item_val("kconsole", NULL, true);212 211 event_notify_1(EVENT_KCONSOLE, false, true); 213 212 bool prev = console_override; … … 227 226 void release_console(void) 228 227 { 229 sysinfo_set_item_val("kconsole", NULL, false);230 228 console_override = false; 231 229 event_notify_1(EVENT_KCONSOLE, false, false); -
kernel/generic/src/mm/as.c
r04c35fca r103db908 187 187 * 188 188 */ 189 staticvoid as_destroy(as_t *as)189 void as_destroy(as_t *as) 190 190 { 191 191 DEADLOCK_PROBE_INIT(p_asidlock); -
kernel/generic/src/proc/program.c
r04c35fca r103db908 150 150 prg->loader_status = elf_load((elf_header_t *) image_addr, as); 151 151 if (prg->loader_status != EE_OK) { 152 as_ release(as);152 as_destroy(as); 153 153 prg->task = NULL; 154 154 prg->main_thread = NULL; … … 176 176 void *loader = program_loader; 177 177 if (!loader) { 178 as_ release(as);178 as_destroy(as); 179 179 log(LF_OTHER, LVL_ERROR, 180 180 "Cannot spawn loader as none was registered"); … … 184 184 prg->loader_status = elf_load((elf_header_t *) program_loader, as); 185 185 if (prg->loader_status != EE_OK) { 186 as_ release(as);186 as_destroy(as); 187 187 log(LF_OTHER, LVL_ERROR, "Cannot spawn loader (%s)", 188 188 elf_error(prg->loader_status)); -
uspace/drv/char/ski-con/ski-con.c
r04c35fca r103db908 1 1 /* 2 2 * Copyright (c) 2005 Jakub Jermar 3 * Copyright (c) 201 8Jiri Svoboda3 * Copyright (c) 2017 Jiri Svoboda 4 4 * All rights reserved. 5 5 * … … 31 31 */ 32 32 33 #include <as.h>34 33 #include <async.h> 35 34 #include <ddf/driver.h> 36 35 #include <ddf/log.h> 37 #include <ddi.h>38 36 #include <errno.h> 39 37 #include <fibril.h> … … 42 40 #include <stdlib.h> 43 41 #include <stdbool.h> 44 #include <sysinfo.h>45 42 46 43 #include "ski-con.h" … … 71 68 ddf_fun_t *fun = NULL; 72 69 bool bound = false; 73 uintptr_t faddr;74 void *addr = AS_AREA_ANY;75 70 errno_t rc; 76 71 … … 92 87 con->cds.sarg = con; 93 88 94 rc = sysinfo_get_value("ski.paddr", &faddr);95 if (rc != EOK)96 faddr = 0; /* No kernel driver to arbitrate with */97 98 if (faddr != 0) {99 addr = AS_AREA_ANY;100 rc = physmem_map(faddr, 1, AS_AREA_READ | AS_AREA_CACHEABLE,101 &addr);102 if (rc != EOK) {103 ddf_msg(LVL_ERROR, "Cannot map kernel driver arbitration area.");104 goto error;105 }106 }107 108 89 rc = ddf_fun_bind(fun); 109 90 if (rc != EOK) { … … 126 107 return EOK; 127 108 error: 128 if (addr != AS_AREA_ANY)129 as_area_destroy(addr);130 109 if (bound) 131 110 ddf_fun_unbind(fun); … … 148 127 } 149 128 150 /** Detect if SKI console is in use by the kernel.151 *152 * This is needed since the kernel has no way of fencing off the user-space153 * driver.154 *155 * @return @c true if in use by the kernel.156 */157 static bool ski_con_disabled(void)158 {159 sysarg_t kconsole;160 161 /*162 * XXX Ideally we should get information from our kernel counterpart163 * driver. But there needs to be a mechanism for the kernel console164 * to inform the kernel driver.165 */166 if (sysinfo_get_value("kconsole", &kconsole) != EOK)167 return false;168 169 return kconsole != false;170 }171 172 129 /** Poll Ski for keypresses. */ 173 130 static errno_t ski_con_fibril(void *arg) … … 178 135 179 136 while (true) { 180 while ( !ski_con_disabled()) {137 while (true) { 181 138 c = ski_con_getchar(); 182 139 if (c == 0) … … 289 246 uint8_t *dp = (uint8_t *) data; 290 247 291 if (!ski_con_disabled()) { 292 for (i = 0; i < size; i++) { 293 ski_con_putchar(con, dp[i]); 294 } 295 } 248 for (i = 0; i < size; i++) 249 ski_con_putchar(con, dp[i]); 296 250 297 251 *nwr = size; -
uspace/drv/char/ski-con/ski-con.h
r04c35fca r103db908 56 56 fibril_mutex_t buf_lock; 57 57 fibril_condvar_t buf_cv; 58 /** Memory area mapped to arbitrate with the kernel driver */59 void *mem_area;60 58 } ski_con_t; 61 59 -
uspace/lib/c/generic/loader.c
r04c35fca r103db908 200 200 } 201 201 202 rc = loader_set_program(ldr, abspath, fd);202 rc = loader_set_program(ldr, path, fd); 203 203 vfs_put(fd); 204 204 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.