Changes in / [b77ce84:17279ead] in mainline
- Files:
-
- 242 deleted
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
rb77ce84 r17279ead 529 529 530 530 % Run devman on startup 531 ! CONFIG_START_DEVMAN (y )531 ! CONFIG_START_DEVMAN (y/n) 532 532 533 533 % Launch (devman) test drivers … … 554 554 % Line debugging information 555 555 ! [CONFIG_STRIP_BINARIES!=y] CONFIG_LINE_DEBUG (n/y) 556 557 % Start virtual USB host controller558 ! CONFIG_RUN_VIRTUAL_USB_HC (n/y)559 560 % Polling UHCI & OHCI (no interrupts)561 ! [PLATFORM=ia32|PLATFORM=amd64] CONFIG_USBHC_NO_INTERRUPTS (y/n)562 563 % Run devman in kconsole (not recommended)564 ! CONFIG_DEVMAN_EARLY_LAUNCH (n/y) -
Makefile
rb77ce84 r17279ead 106 106 $(MAKE) -C uspace clean 107 107 $(MAKE) -C boot clean 108 109 -include Makefile.local -
boot/Makefile.common
rb77ce84 r17279ead 139 139 $(USPACE_PATH)/app/ping/ping \ 140 140 $(USPACE_PATH)/app/stats/stats \ 141 $(USPACE_PATH)/app/top/top \ 141 142 $(USPACE_PATH)/app/sysinfo/sysinfo \ 142 $(USPACE_PATH)/app/tasks/tasks \143 $(USPACE_PATH)/app/top/top \144 $(USPACE_PATH)/app/usbinfo/usbinfo \145 $(USPACE_PATH)/app/virtusbkbd/vuk \146 $(USPACE_PATH)/app/virtusbhub/vuh \147 143 $(USPACE_PATH)/app/websrv/websrv 148 144 -
boot/arch/amd64/Makefile.inc
rb77ce84 r17279ead 42 42 pciintel \ 43 43 isa \ 44 ns8250 \ 45 ehci-hcd \ 46 ohci \ 47 uhci-hcd \ 48 uhci-rhd \ 49 usbflbk \ 50 usbhub \ 51 usbkbd \ 52 usbhid \ 53 usbmid \ 54 usbmouse \ 55 vhc 44 ns8250 56 45 57 46 RD_DRV_CFG += \ -
kernel/generic/include/mm/page.h
rb77ce84 r17279ead 37 37 38 38 #include <typedefs.h> 39 #include <proc/task.h>40 39 #include <mm/as.h> 41 40 #include <memstr.h> … … 63 62 extern uintptr_t hw_map(uintptr_t, size_t); 64 63 65 extern sysarg_t sys_page_find_mapping(uintptr_t, uintptr_t *);66 67 64 #endif 68 65 -
kernel/generic/include/syscall/syscall.h
rb77ce84 r17279ead 61 61 SYS_AS_GET_UNMAPPED_AREA, 62 62 63 SYS_PAGE_FIND_MAPPING,64 65 63 SYS_IPC_CALL_SYNC_FAST, 66 64 SYS_IPC_CALL_SYNC_SLOW, -
kernel/generic/src/console/console.c
rb77ce84 r17279ead 53 53 #include <str.h> 54 54 55 /*56 * devman produces a lot of output and by giving so many pages57 * we to allow /app/klog to catch-up.58 */59 #ifdef CONFIG_DEVMAN_EARLY_LAUNCH60 #define KLOG_PAGES 6461 #else62 55 #define KLOG_PAGES 4 63 #endif64 65 56 #define KLOG_LENGTH (KLOG_PAGES * PAGE_SIZE / sizeof(wchar_t)) 66 57 #define KLOG_LATENCY 8 -
kernel/generic/src/mm/as.c
rb77ce84 r17279ead 1949 1949 sysarg_t sys_as_area_create(uintptr_t address, size_t size, unsigned int flags) 1950 1950 { 1951 if (as_area_create(AS, flags , size, address,1951 if (as_area_create(AS, flags | AS_AREA_CACHEABLE, size, address, 1952 1952 AS_AREA_ATTR_NONE, &anon_backend, NULL)) 1953 1953 return (sysarg_t) address; -
kernel/generic/src/mm/page.c
rb77ce84 r17279ead 60 60 61 61 #include <mm/page.h> 62 #include <genarch/mm/page_ht.h>63 #include <genarch/mm/page_pt.h>64 62 #include <arch/mm/page.h> 65 63 #include <arch/mm/asid.h> … … 72 70 #include <debug.h> 73 71 #include <arch.h> 74 #include <syscall/copy.h>75 #include <errno.h>76 72 77 73 /** Virtual operations for page subsystem. */ … … 177 173 } 178 174 179 /** Syscall wrapper for getting mapping of a virtual page.180 *181 * @retval EOK Everything went find, @p uspace_frame and @p uspace_node182 * contains correct values.183 * @retval ENOENT Virtual address has no mapping.184 */185 sysarg_t sys_page_find_mapping(uintptr_t virt_address,186 uintptr_t *uspace_frame)187 {188 mutex_lock(&AS->lock);189 190 pte_t *pte = page_mapping_find(AS, virt_address);191 if (!PTE_VALID(pte) || !PTE_PRESENT(pte)) {192 mutex_unlock(&AS->lock);193 194 return (sysarg_t) ENOENT;195 }196 197 uintptr_t phys_address = PTE_GET_FRAME(pte);198 199 mutex_unlock(&AS->lock);200 201 int rc = copy_to_uspace(uspace_frame,202 &phys_address, sizeof(phys_address));203 if (rc != EOK) {204 return (sysarg_t) rc;205 }206 207 return EOK;208 }209 210 175 /** @} 211 176 */ -
kernel/generic/src/syscall/syscall.c
rb77ce84 r17279ead 41 41 #include <proc/program.h> 42 42 #include <mm/as.h> 43 #include <mm/page.h>44 43 #include <print.h> 45 44 #include <arch.h> … … 146 145 (syshandler_t) sys_as_get_unmapped_area, 147 146 148 /* Page mapping related syscalls. */149 (syshandler_t) sys_page_find_mapping,150 151 147 /* IPC related syscalls. */ 152 148 (syshandler_t) sys_ipc_call_sync_fast, -
uspace/Makefile
rb77ce84 r17279ead 50 50 app/trace \ 51 51 app/top \ 52 app/usbinfo \53 app/virtusbkbd \54 app/virtusbhub \55 52 app/netecho \ 56 53 app/nettest1 \ … … 116 113 drv/ns8250 \ 117 114 srv/hw/irc/apic \ 118 srv/hw/irc/i8259 \ 119 drv/ehci-hcd \ 120 drv/ohci \ 121 drv/uhci-hcd \ 122 drv/uhci-rhd \ 123 drv/usbflbk \ 124 drv/usbkbd \ 125 drv/usbhid \ 126 drv/usbhub \ 127 drv/usbmid \ 128 drv/usbmouse \ 129 drv/vhc 115 srv/hw/irc/i8259 130 116 endif 131 117 … … 137 123 drv/ns8250 \ 138 124 srv/hw/irc/apic \ 139 srv/hw/irc/i8259 \ 140 drv/ehci-hcd \ 141 drv/ohci \ 142 drv/uhci-hcd \ 143 drv/uhci-rhd \ 144 drv/usbflbk \ 145 drv/usbkbd \ 146 drv/usbhid \ 147 drv/usbhub \ 148 drv/usbmid \ 149 drv/usbmouse \ 150 drv/vhc 125 srv/hw/irc/i8259 151 126 endif 152 127 … … 174 149 lib/packet \ 175 150 lib/net 176 177 ifeq ($(UARCH),amd64)178 LIBS += lib/usb179 LIBS += lib/usbvirt180 endif181 182 ifeq ($(UARCH),ia32)183 LIBS += lib/usb184 LIBS += lib/usbvirt185 endif186 151 187 152 LIBC_BUILD = $(addsuffix .build,$(LIBC)) -
uspace/Makefile.common
rb77ce84 r17279ead 86 86 LIBCLUI_PREFIX = $(LIB_PREFIX)/clui 87 87 88 89 LIBUSB_PREFIX = $(LIB_PREFIX)/usb90 LIBUSBVIRT_PREFIX = $(LIB_PREFIX)/usbvirt91 88 LIBDRV_PREFIX = $(LIB_PREFIX)/drv 92 89 LIBPACKET_PREFIX = $(LIB_PREFIX)/packet -
uspace/app/init/init.c
rb77ce84 r17279ead 272 272 mount_tmpfs(); 273 273 274 #ifdef CONFIG_START_DEVMAN 275 spawn("/srv/devman"); 276 #endif 274 277 spawn("/srv/apic"); 275 278 spawn("/srv/i8259"); … … 313 316 getterm("term/vc5", "/app/bdsh", false); 314 317 getterm("term/vc6", "/app/klog", false); 315 316 #ifdef CONFIG_START_DEVMAN 317 318 #ifdef CONFIG_DEVMAN_EARLY_LAUNCH 319 spawn("/srv/devman"); 320 #else 321 getterm("term/vc7", "/srv/devman", false); 322 #endif 323 324 #endif 325 318 326 319 return 0; 327 320 } -
uspace/app/klog/klog.c
rb77ce84 r17279ead 44 44 #include <io/klog.h> 45 45 #include <sysinfo.h> 46 #include <fibril_synch.h>47 46 48 47 #define NAME "klog" … … 55 54 static FILE *log; 56 55 57 /* Serialize the output a bit. This will not avoid messed-up log completely58 but chances for are pretty high (experimentally confirmed). */59 static FIBRIL_MUTEX_INITIALIZE(log_mutex);60 61 56 static void interrupt_received(ipc_callid_t callid, ipc_call_t *call) 62 57 { 63 fibril_mutex_lock(&log_mutex);64 65 58 size_t klog_start = (size_t) IPC_GET_ARG1(*call); 66 59 size_t klog_len = (size_t) IPC_GET_ARG2(*call); … … 81 74 fsync(fileno(log)); 82 75 } 83 84 fibril_mutex_unlock(&log_mutex);85 76 } 86 77 -
uspace/app/tester/Makefile
rb77ce84 r17279ead 31 31 BINARY = tester 32 32 33 LIBS += $(LIBUSB_PREFIX)/libusb.a34 EXTRA_CFLAGS += -I$(LIBUSB_PREFIX)/include35 36 33 SOURCES = \ 37 34 tester.c \ 38 adt/usbaddrkeep.c \39 35 thread/thread1.c \ 40 36 print/print1.c \ … … 53 49 loop/loop1.c \ 54 50 mm/malloc1.c \ 55 mm/mapping1.c \56 51 devs/devman1.c \ 57 52 hw/misc/virtchar1.c \ -
uspace/app/tester/tester.c
rb77ce84 r17279ead 62 62 #include "loop/loop1.def" 63 63 #include "mm/malloc1.def" 64 #include "mm/mapping1.def"65 64 #include "hw/serial/serial1.def" 66 #include "adt/usbaddrkeep.def"67 65 #include "hw/misc/virtchar1.def" 68 66 #include "devs/devman1.def" -
uspace/app/tester/tester.h
rb77ce84 r17279ead 78 78 extern const char *test_loop1(void); 79 79 extern const char *test_malloc1(void); 80 extern const char *test_mapping1(void);81 80 extern const char *test_serial1(void); 82 extern const char *test_usbaddrkeep(void);83 81 extern const char *test_virtchar1(void); 84 82 extern const char *test_devman1(void); -
uspace/doc/doxygroups.h
rb77ce84 r17279ead 150 150 * @endcond 151 151 */ 152 152 153 153 /** 154 154 * @defgroup emul Emulation Libraries … … 165 165 * @ingroup emul 166 166 */ 167 168 /**169 * @defgroup usb USB170 * @ingroup uspace171 * @brief USB support for HelenOS.172 */173 /**174 * @defgroup libusb USB library175 * @ingroup usb176 * @brief Library for creating USB devices drivers.177 */178 179 /**180 * @defgroup usbvirt USB virtualization181 * @ingroup usb182 * @brief Support for virtual USB devices.183 */184 185 /**186 * @defgroup libusbvirt USB virtualization library187 * @ingroup usbvirt188 * @brief Library for creating virtual USB devices.189 */190 191 /**192 * @defgroup drvusbvhc Virtual USB host controller193 * @ingroup usbvirt194 * @brief Driver simulating work of USB host controller.195 */196 197 /**198 * @defgroup usbvirthub Virtual USB hub199 * @ingroup usbvirt200 * @brief Extra virtual USB hub for virtual host controller.201 * @details202 * Some of the sources are shared with virtual host controller,203 * see @ref drvusbvhc for the rest of the files.204 */205 206 /**207 * @defgroup usbvirtkbd Virtual USB keybaord208 * @ingroup usbvirt209 * @brief Virtual USB keyboard for virtual host controller.210 */211 212 /**213 * @defgroup usbinfo USB info application214 * @ingroup usb215 * @brief Application for querying USB devices.216 * @details217 * The intended usage of this application is to query new USB devices218 * for their descriptors etc. to simplify driver writing.219 */220 221 /**222 * @defgroup drvusbmid USB multi interface device driver223 * @ingroup usb224 * @brief USB multi interface device driver225 * @details226 * This driver serves as a mini hub (or bus) driver for devices227 * that have the class defined at interface level (those devices228 * usually have several interfaces).229 *230 * The term multi interface device driver (MID) was borrowed231 * Solaris operating system.232 */233 234 /**235 * @defgroup drvusbhub USB hub driver236 * @ingroup usb237 * @brief USB hub driver.238 */239 240 /**241 * @defgroup drvusbhid USB HID driver242 * @ingroup usb243 * @brief USB driver for HID devices.244 */245 246 /**247 * @defgroup drvusbmouse USB mouse driver248 * @ingroup usb249 * @brief USB driver for mouse with boot protocol.250 */251 252 /**253 * @defgroup drvusbuhci UHCI driver254 * @ingroup usb255 * @brief Drivers for USB UHCI host controller and root hub.256 */257 258 /**259 * @defgroup drvusbuhcirh UHCI root hub driver260 * @ingroup drvusbuhci261 * @brief Driver for UHCI complaint root hub.262 */263 264 /**265 * @defgroup drvusbuhcihc UHCI host controller driver266 * @ingroup drvusbuhci267 * @brief Driver for UHCI complaint USB host controller.268 */269 270 /**271 * @defgroup drvusbohci OHCI driver272 * @ingroup usb273 * @brief Driver for OHCI host controller.274 */275 276 /**277 * @defgroup drvusbehci EHCI driver278 * @ingroup usb279 * @brief Driver for EHCI host controller.280 */281 282 /**283 * @defgroup drvusbfallback USB fallback driver284 * @ingroup usb285 * @brief Fallback driver for any USB device.286 * @details287 * The purpose of this driver is to simplify querying of unknown288 * devices from within HelenOS (without a driver, no node at all289 * may appear under /dev/devices).290 */291 292 -
uspace/drv/pciintel/pci.c
rb77ce84 r17279ead 52 52 #include <ipc/devman.h> 53 53 #include <ipc/dev_iface.h> 54 #include <ipc/irc.h>55 #include <ipc/ns.h>56 #include <ipc/services.h>57 #include <sysinfo.h>58 54 #include <ops/hw_res.h> 59 55 #include <device/hw_res.h> 60 56 #include <ddi.h> 61 57 #include <libarch/ddi.h> 62 #include <pci_dev_iface.h>63 58 64 59 #include "pci.h" … … 89 84 static bool pciintel_enable_interrupt(ddf_fun_t *fnode) 90 85 { 91 /* This is an old ugly way, copied from ne2000 driver */ 92 assert(fnode); 93 pci_fun_t *dev_data = (pci_fun_t *) fnode->driver_data; 94 95 sysarg_t apic; 96 sysarg_t i8259; 97 98 int irc_phone = ENOTSUP; 99 100 if (((sysinfo_get_value("apic", &apic) == EOK) && (apic)) 101 || ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259))) { 102 irc_phone = service_connect_blocking(SERVICE_IRC, 0, 0); 103 } 104 105 if (irc_phone < 0) { 106 return false; 107 } 108 109 size_t i = 0; 110 hw_resource_list_t *res = &dev_data->hw_resources; 111 for (; i < res->count; i++) { 112 if (res->resources[i].type == INTERRUPT) { 113 const int irq = res->resources[i].res.interrupt.irq; 114 const int rc = 115 async_req_1_0(irc_phone, IRC_ENABLE_INTERRUPT, irq); 116 if (rc != EOK) { 117 async_hangup(irc_phone); 118 return false; 119 } 120 } 121 } 122 123 async_hangup(irc_phone); 124 return true; 125 } 126 127 static int pci_config_space_write_32( 128 ddf_fun_t *fun, uint32_t address, uint32_t data) 129 { 130 if (address > 252) 131 return EINVAL; 132 pci_conf_write_32(PCI_FUN(fun), address, data); 133 return EOK; 134 } 135 136 static int pci_config_space_write_16( 137 ddf_fun_t *fun, uint32_t address, uint16_t data) 138 { 139 if (address > 254) 140 return EINVAL; 141 pci_conf_write_16(PCI_FUN(fun), address, data); 142 return EOK; 143 } 144 145 static int pci_config_space_write_8( 146 ddf_fun_t *fun, uint32_t address, uint8_t data) 147 { 148 if (address > 255) 149 return EINVAL; 150 pci_conf_write_8(PCI_FUN(fun), address, data); 151 return EOK; 152 } 153 154 static int pci_config_space_read_32( 155 ddf_fun_t *fun, uint32_t address, uint32_t *data) 156 { 157 if (address > 252) 158 return EINVAL; 159 *data = pci_conf_read_32(PCI_FUN(fun), address); 160 return EOK; 161 } 162 163 static int pci_config_space_read_16( 164 ddf_fun_t *fun, uint32_t address, uint16_t *data) 165 { 166 if (address > 254) 167 return EINVAL; 168 *data = pci_conf_read_16(PCI_FUN(fun), address); 169 return EOK; 170 } 171 172 static int pci_config_space_read_8( 173 ddf_fun_t *fun, uint32_t address, uint8_t *data) 174 { 175 if (address > 255) 176 return EINVAL; 177 *data = pci_conf_read_8(PCI_FUN(fun), address); 178 return EOK; 86 /* TODO */ 87 88 return false; 179 89 } 180 90 … … 184 94 }; 185 95 186 static pci_dev_iface_t pci_dev_ops = { 187 .config_space_read_8 = &pci_config_space_read_8, 188 .config_space_read_16 = &pci_config_space_read_16, 189 .config_space_read_32 = &pci_config_space_read_32, 190 .config_space_write_8 = &pci_config_space_write_8, 191 .config_space_write_16 = &pci_config_space_write_16, 192 .config_space_write_32 = &pci_config_space_write_32 193 }; 194 195 static ddf_dev_ops_t pci_fun_ops = { 196 .interfaces[HW_RES_DEV_IFACE] = &pciintel_hw_res_ops, 197 .interfaces[PCI_DEV_IFACE] = &pci_dev_ops 198 }; 96 static ddf_dev_ops_t pci_fun_ops; 199 97 200 98 static int pci_add_device(ddf_dev_t *); … … 390 288 /* Get the value of the BAR. */ 391 289 val = pci_conf_read_32(fun, addr); 392 393 #define IO_MASK (~0x3)394 #define MEM_MASK (~0xf)395 290 396 291 io = (bool) (val & 1); 397 292 if (io) { 398 293 addrw64 = false; 399 mask = IO_MASK;400 294 } else { 401 mask = MEM_MASK;402 295 switch ((val >> 1) & 3) { 403 296 case 0: … … 415 308 /* Get the address mask. */ 416 309 pci_conf_write_32(fun, addr, 0xffffffff); 417 mask &= pci_conf_read_32(fun, addr);310 mask = pci_conf_read_32(fun, addr); 418 311 419 312 /* Restore the original value. */ … … 665 558 ddf_log_init(NAME, LVL_ERROR); 666 559 pci_fun_ops.interfaces[HW_RES_DEV_IFACE] = &pciintel_hw_res_ops; 667 pci_fun_ops.interfaces[PCI_DEV_IFACE] = &pci_dev_ops;668 560 } 669 561 … … 737 629 size_t pci_bar_mask_to_size(uint32_t mask) 738 630 { 739 size_t size = mask & ~(mask - 1); 740 return size; 631 return ((mask & 0xfffffff0) ^ 0xffffffff) + 1; 741 632 } 742 633 -
uspace/drv/rootvirt/devices.def
rb77ce84 r17279ead 22 22 }, 23 23 #endif 24 #ifdef CONFIG_RUN_VIRTUAL_USB_HC25 /* Virtual USB host controller. */26 {27 .name = "usbhc",28 .match_id = "usb&hc=vhc"29 },30 #endif -
uspace/lib/c/Makefile
rb77ce84 r17279ead 65 65 generic/str.c \ 66 66 generic/str_error.c \ 67 generic/l18n/langs.c \68 67 generic/fibril.c \ 69 68 generic/fibril_synch.c \ -
uspace/lib/c/generic/adt/hash_table.c
rb77ce84 r17279ead 54 54 * 55 55 */ 56 boolhash_table_create(hash_table_t *h, hash_count_t m, hash_count_t max_keys,56 int hash_table_create(hash_table_t *h, hash_count_t m, hash_count_t max_keys, 57 57 hash_table_operations_t *op) 58 58 { -
uspace/lib/c/generic/as.c
rb77ce84 r17279ead 35 35 #include <as.h> 36 36 #include <libc.h> 37 #include <errno.h>38 37 #include <unistd.h> 39 38 #include <align.h> … … 115 114 } 116 115 117 /** Find mapping to physical address.118 *119 * @param address Virtual address in question (virtual).120 * @param[out] frame Frame address (physical).121 * @return Error code.122 * @retval EOK No error, @p frame holds the translation.123 * @retval ENOENT Mapping not found.124 */125 int as_get_physical_mapping(void *address, uintptr_t *frame)126 {127 uintptr_t tmp_frame;128 uintptr_t virt = (uintptr_t) address;129 130 int rc = (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING,131 (sysarg_t) virt, (sysarg_t) &tmp_frame);132 if (rc != EOK) {133 return rc;134 }135 136 if (frame != NULL) {137 *frame = tmp_frame;138 }139 140 return EOK;141 }142 143 116 /** @} 144 117 */ -
uspace/lib/c/generic/async.c
rb77ce84 r17279ead 1567 1567 } 1568 1568 1569 /** Start IPC_M_DATA_READ using the async framework.1570 *1571 * @param phoneid Phone that will be used to contact the receiving side.1572 * @param dst Address of the beginning of the destination buffer.1573 * @param size Size of the destination buffer (in bytes).1574 * @param dataptr Storage of call data (arg 2 holds actual data size).1575 * @return Hash of the sent message or 0 on error.1576 */1577 aid_t async_data_read(int phoneid, void *dst, size_t size, ipc_call_t *dataptr)1578 {1579 return async_send_2(phoneid, IPC_M_DATA_READ, (sysarg_t) dst,1580 (sysarg_t) size, dataptr);1581 }1582 1583 1569 /** Wrapper for IPC_M_DATA_READ calls using the async framework. 1584 1570 * -
uspace/lib/c/generic/malloc.c
rb77ce84 r17279ead 240 240 size_t asize = ALIGN_UP(size, PAGE_SIZE); 241 241 242 astart = as_area_create(astart, asize, AS_AREA_WRITE | AS_AREA_READ | AS_AREA_CACHEABLE);242 astart = as_area_create(astart, asize, AS_AREA_WRITE | AS_AREA_READ); 243 243 if (astart == (void *) -1) 244 244 return false; -
uspace/lib/c/generic/str_error.c
rb77ce84 r17279ead 33 33 */ 34 34 35 #include <errno.h>36 35 #include <str_error.h> 37 36 #include <stdio.h> … … 64 63 static fibril_local char noerr[NOERR_LEN]; 65 64 66 const char *str_error(const int e )65 const char *str_error(const int errno) 67 66 { 68 if ((e <= 0) && (e>= MIN_ERRNO))69 return err_desc[-e ];67 if ((errno <= 0) && (errno >= MIN_ERRNO)) 68 return err_desc[-errno]; 70 69 71 /* Ad hoc descriptions of error codes interesting for USB. */ 72 switch (e) { 73 case EBADCHECKSUM: 74 return "Bad checksum"; 75 case ESTALL: 76 return "Operation stalled"; 77 case EAGAIN: 78 return "Resource temporarily unavailable"; 79 case EEMPTY: 80 return "Resource is empty"; 81 default: 82 break; 83 } 84 85 snprintf(noerr, NOERR_LEN, "Unkown error code %d", e); 70 snprintf(noerr, NOERR_LEN, "Unkown error code %d", errno); 86 71 return noerr; 87 72 } -
uspace/lib/c/include/adt/hash_table.h
rb77ce84 r17279ead 38 38 #include <adt/list.h> 39 39 #include <unistd.h> 40 #include <bool.h>41 40 42 41 typedef unsigned long hash_count_t; … … 84 83 list_get_instance((item), type, member) 85 84 86 extern boolhash_table_create(hash_table_t *, hash_count_t, hash_count_t,85 extern int hash_table_create(hash_table_t *, hash_count_t, hash_count_t, 87 86 hash_table_operations_t *); 88 87 extern void hash_table_insert(hash_table_t *, unsigned long [], link_t *); -
uspace/lib/c/include/as.h
rb77ce84 r17279ead 60 60 extern void *set_maxheapsize(size_t mhs); 61 61 extern void * as_get_mappable_page(size_t sz); 62 extern int as_get_physical_mapping(void *address, uintptr_t *frame);63 62 64 63 #endif -
uspace/lib/c/include/async.h
rb77ce84 r17279ead 340 340 (arg4), (answer)) 341 341 342 extern aid_t async_data_read(int, void *, size_t, ipc_call_t *);343 342 #define async_data_read_start(p, buf, len) \ 344 343 async_data_read_start_generic((p), (buf), (len), IPC_XF_NONE) -
uspace/lib/c/include/errno.h
rb77ce84 r17279ead 56 56 #define EMLINK (-266) 57 57 58 /** Bad checksum. */59 #define EBADCHECKSUM (-300)60 61 /** USB: stalled operation. */62 #define ESTALL (-301)63 64 /** Empty resource (no data). */65 #define EEMPTY (-302)66 67 58 /** An API function is called while another blocking function is in progress. */ 68 59 #define EINPROGRESS (-10036) -
uspace/lib/c/include/ipc/dev_iface.h
rb77ce84 r17279ead 37 37 HW_RES_DEV_IFACE = 0, 38 38 CHAR_DEV_IFACE, 39 40 /** Interface provided by any PCI device. */41 PCI_DEV_IFACE,42 43 /** Interface provided by any USB device. */44 USB_DEV_IFACE,45 /** Interface provided by USB host controller. */46 USBHC_DEV_IFACE,47 48 39 DEV_IFACE_MAX 49 40 } dev_inferface_idx_t; … … 57 48 DEV_IFACE_ID(DEV_FIRST_CUSTOM_METHOD_IDX) 58 49 59 /*60 * The first argument is actually method (as the "real" method is used61 * for indexing into interfaces.62 */63 64 #define DEV_IPC_GET_ARG1(call) IPC_GET_ARG2((call))65 #define DEV_IPC_GET_ARG2(call) IPC_GET_ARG3((call))66 #define DEV_IPC_GET_ARG3(call) IPC_GET_ARG4((call))67 #define DEV_IPC_GET_ARG4(call) IPC_GET_ARG5((call))68 69 50 70 51 #endif -
uspace/lib/c/include/ipc/kbd.h
rb77ce84 r17279ead 39 39 40 40 #include <ipc/common.h> 41 #include <ipc/dev_iface.h>42 41 43 42 typedef enum { 44 KBD_YIELD = DEV_FIRST_CUSTOM_METHOD,43 KBD_YIELD = IPC_FIRST_USER_METHOD, 45 44 KBD_RECLAIM 46 45 } kbd_request_t; -
uspace/lib/drv/Makefile
rb77ce84 r17279ead 29 29 30 30 USPACE_PREFIX = ../.. 31 EXTRA_CFLAGS = -Iinclude -I$(LIBUSB_PREFIX)/include31 EXTRA_CFLAGS = -Iinclude 32 32 LIBRARY = libdrv 33 33 … … 35 35 generic/driver.c \ 36 36 generic/dev_iface.c \ 37 generic/remote_char_dev.c \38 37 generic/log.c \ 39 38 generic/remote_hw_res.c \ 40 generic/remote_usb.c \ 41 generic/remote_pci.c \ 42 generic/remote_usbhc.c 39 generic/remote_char_dev.c 43 40 44 41 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/drv/generic/dev_iface.c
rb77ce84 r17279ead 41 41 #include "remote_hw_res.h" 42 42 #include "remote_char_dev.h" 43 #include "remote_usb.h"44 #include "remote_usbhc.h"45 #include "remote_pci.h"46 43 47 44 static iface_dipatch_table_t remote_ifaces = { 48 45 .ifaces = { 49 46 &remote_hw_res_iface, 50 &remote_char_dev_iface, 51 &remote_pci_iface, 52 &remote_usb_iface, 53 &remote_usbhc_iface 47 &remote_char_dev_iface 54 48 } 55 49 }; -
uspace/srv/devman/main.c
rb77ce84 r17279ead 595 595 if (driver == NULL) { 596 596 log_msg(LVL_ERROR, "IPC forwarding refused - " \ 597 "the device %" PRIun "(%s) is not in usable state.", 598 handle, dev->pfun->pathname); 597 "the device %" PRIun " is not in usable state.", handle); 599 598 async_answer_0(iid, ENOENT); 600 599 return; -
uspace/srv/fs/fat/fat_dentry.c
rb77ce84 r17279ead 42 42 static bool is_d_char(const char ch) 43 43 { 44 if (isalnum(ch) || ch == '_' || ch == '-')44 if (isalnum(ch) || ch == '_') 45 45 return true; 46 46 else -
uspace/srv/hid/console/console.c
rb77ce84 r17279ead 41 41 #include <ipc/ns.h> 42 42 #include <errno.h> 43 #include <str_error.h>44 43 #include <ipc/console.h> 45 44 #include <unistd.h> … … 65 64 #define NAME "console" 66 65 #define NAMESPACE "term" 67 /** Interval for checking for new keyboard (1/4s). */68 #define HOTPLUG_WATCH_INTERVAL (1000 * 250)69 66 70 67 /** Phone to the keyboard driver. */ … … 320 317 static void change_console(console_t *cons) 321 318 { 322 if (cons == active_console) {319 if (cons == active_console) 323 320 return; 324 }325 321 326 322 fb_pending_flush(); … … 462 458 if (IPC_GET_ARG1(call) == 1) { 463 459 int newcon = gcons_mouse_btn((bool) IPC_GET_ARG2(call)); 464 if (newcon != -1) {460 if (newcon != -1) 465 461 change_console(&consoles[newcon]); 466 }467 462 } 468 463 retval = 0; … … 715 710 } 716 711 717 static int connect_keyboard_or_mouse(const char *devname, 718 async_client_conn_t handler, const char *path) 719 { 720 int fd = open(path, O_RDONLY); 721 if (fd < 0) { 722 return fd; 723 } 724 725 int phone = fd_phone(fd); 726 if (phone < 0) { 712 static bool console_init(char *input) 713 { 714 /* Connect to input device */ 715 int input_fd = open(input, O_RDONLY); 716 if (input_fd < 0) { 717 printf(NAME ": Failed opening %s\n", input); 718 return false; 719 } 720 721 kbd_phone = fd_phone(input_fd); 722 if (kbd_phone < 0) { 727 723 printf(NAME ": Failed to connect to input device\n"); 728 return phone;729 }730 731 int rc = async_connect_to_me(phone, SERVICE_CONSOLE, 0, 0, handler);732 if (rc != EOK) {733 printf(NAME ": " \734 "Failed to create callback from input device: %s.\n",735 str_error(rc));736 return rc;737 }738 739 printf(NAME ": found %s \"%s\".\n", devname, path);740 741 return phone;742 }743 744 static int connect_keyboard(const char *path)745 {746 return connect_keyboard_or_mouse("keyboard", keyboard_events, path);747 }748 749 static int connect_mouse(const char *path)750 {751 return connect_keyboard_or_mouse("mouse", mouse_events, path);752 }753 754 struct hid_class_info {755 char *classname;756 int (*connection_func)(const char *);757 };758 759 /** Periodically check for new keyboards in /dev/class/.760 *761 * @param arg Class name.762 * @return This function should never exit.763 */764 static int check_new_device_fibril(void *arg)765 {766 struct hid_class_info *dev_info = arg;767 768 size_t index = 1;769 770 while (true) {771 async_usleep(HOTPLUG_WATCH_INTERVAL);772 char *path;773 int rc = asprintf(&path, "/dev/class/%s\\%zu",774 dev_info->classname, index);775 if (rc < 0) {776 continue;777 }778 rc = 0;779 rc = dev_info->connection_func(path);780 if (rc > 0) {781 /* We do not allow unplug. */782 index++;783 }784 785 free(path);786 }787 788 return EOK;789 }790 791 792 /** Start a fibril monitoring hot-plugged keyboards.793 */794 static void check_new_devices_in_background(int (*connection_func)(const char *),795 const char *classname)796 {797 struct hid_class_info *dev_info = malloc(sizeof(struct hid_class_info));798 if (dev_info == NULL) {799 printf(NAME ": " \800 "out of memory, will not start hot-plug-watch fibril.\n");801 return;802 }803 int rc;804 805 rc = asprintf(&dev_info->classname, "%s", classname);806 if (rc < 0) {807 printf(NAME ": failed to format classname: %s.\n",808 str_error(rc));809 return;810 }811 dev_info->connection_func = connection_func;812 813 fid_t fid = fibril_create(check_new_device_fibril, (void *)dev_info);814 if (!fid) {815 printf(NAME816 ": failed to create hot-plug-watch fibril for %s.\n",817 classname);818 return;819 }820 fibril_add_ready(fid);821 }822 823 static bool console_init(char *input)824 {825 /* Connect to input device */826 kbd_phone = connect_keyboard(input);827 if (kbd_phone < 0) {828 724 return false; 829 725 } 830 831 mouse_phone = connect_mouse("/dev/hid_in/mouse"); 726 727 /* NB: The callback connection is slotted for removal */ 728 if (async_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, keyboard_events) 729 != 0) { 730 printf(NAME ": Failed to create callback from input device\n"); 731 return false; 732 } 733 734 /* Connect to mouse device */ 735 mouse_phone = -1; 736 int mouse_fd = open("/dev/hid_in/mouse", O_RDONLY); 737 738 if (mouse_fd < 0) { 739 printf(NAME ": Notice - failed opening %s\n", "/dev/hid_in/mouse"); 740 goto skip_mouse; 741 } 742 743 mouse_phone = fd_phone(mouse_fd); 832 744 if (mouse_phone < 0) { 833 printf(NAME ": Failed to connect to mouse device: %s.\n", 834 str_error(mouse_phone)); 835 } 745 printf(NAME ": Failed to connect to mouse device\n"); 746 goto skip_mouse; 747 } 748 749 if (async_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, mouse_events) 750 != 0) { 751 printf(NAME ": Failed to create callback from mouse device\n"); 752 mouse_phone = -1; 753 goto skip_mouse; 754 } 755 756 skip_mouse: 836 757 837 758 /* Connect to framebuffer driver */ … … 916 837 printf(NAME ": Error registering kconsole notifications\n"); 917 838 918 /* Start fibril for checking on hot-plugged keyboards. */919 check_new_devices_in_background(connect_keyboard, "keyboard");920 check_new_devices_in_background(connect_mouse, "mouse");921 922 839 return true; 923 840 } … … 939 856 if (!console_init(argv[1])) 940 857 return -1; 941 858 942 859 printf(NAME ": Accepting connections\n"); 943 860 async_manager(); -
uspace/srv/hw/irc/apic/apic.c
rb77ce84 r17279ead 87 87 async_answer_0(callid, EOK); 88 88 break; 89 case IPC_M_PHONE_HUNGUP:90 /* The other side has hung up. */91 async_answer_0(callid, EOK);92 return;93 89 default: 94 90 async_answer_0(callid, EINVAL); -
uspace/srv/hw/irc/i8259/i8259.c
rb77ce84 r17279ead 121 121 async_answer_0(callid, EOK); 122 122 break; 123 case IPC_M_PHONE_HUNGUP:124 /* The other side has hung up. */125 async_answer_0(callid, EOK);126 return;127 123 default: 128 124 async_answer_0(callid, EINVAL);
Note:
See TracChangeset
for help on using the changeset viewer.