Changes in uspace/drv/char/ski-con/ski-con.c [cf3a905c:09ab0a9a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/char/ski-con/ski-con.c
rcf3a905c r09ab0a9a 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;
Note:
See TracChangeset
for help on using the changeset viewer.