Changeset d900699 in mainline for uspace/srv/hid/input/port
- Timestamp:
- 2011-06-17T16:48:53Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f3a605be
- Parents:
- df8110d3 (diff), 98caf49 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/srv/hid/input/port
- Files:
-
- 12 moved
-
adb.c (moved) (moved from uspace/srv/hid/kbd/port/adb.c ) (6 diffs)
-
chardev.c (moved) (moved from uspace/srv/hid/kbd/port/chardev.c ) (7 diffs)
-
dummy.c (moved) (moved from uspace/srv/hid/kbd/port/dummy.c )
-
gxemul.c (moved) (moved from uspace/srv/hid/kbd/port/gxemul.c ) (5 diffs)
-
msim.c (moved) (moved from uspace/srv/hid/kbd/port/msim.c ) (6 diffs)
-
niagara.c (moved) (moved from uspace/srv/hid/kbd/port/niagara.c ) (6 diffs)
-
ns16550.c (moved) (moved from uspace/srv/hid/kbd/port/ns16550.c ) (4 diffs)
-
pl050.c (moved) (moved from uspace/srv/hid/kbd/port/pl050.c ) (5 diffs)
-
sgcn.c (moved) (moved from uspace/srv/hid/kbd/port/sgcn.c ) (5 diffs)
-
ski.c (moved) (moved from uspace/srv/hid/kbd/port/ski.c ) (7 diffs)
-
sun.c (moved) (moved from uspace/srv/hid/kbd/port/sun.c )
-
z8530.c (moved) (moved from uspace/srv/hid/kbd/port/z8530.c ) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/input/port/adb.c
rdf8110d3 rd900699 1 1 /* 2 * Copyright (c) 201 0Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 38 38 #include <async.h> 39 39 #include <async_obsolete.h> 40 #include <input.h> 40 41 #include <kbd_port.h> 41 42 #include <kbd.h> … … 46 47 #include <devmap_obsolete.h> 47 48 48 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall );49 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 49 50 static void adb_kbd_reg0_data(uint16_t data); 50 51 52 static int adb_port_init(kbd_dev_t *); 53 static void adb_port_yield(void); 54 static void adb_port_reclaim(void); 55 static void adb_port_write(uint8_t data); 56 57 kbd_port_ops_t adb_port = { 58 .init = adb_port_init, 59 .yield = adb_port_yield, 60 .reclaim = adb_port_reclaim, 61 .write = adb_port_write 62 }; 63 64 static kbd_dev_t *kbd_dev; 51 65 static int dev_phone; 52 66 53 #define NAME "kbd" 54 55 int kbd_port_init(void) 67 static int adb_port_init(kbd_dev_t *kdev) 56 68 { 57 69 const char *dev = "adb/kbd"; 58 70 devmap_handle_t handle; 71 72 kbd_dev = kdev; 59 73 60 74 int rc = devmap_device_get_handle(dev, &handle, 0); … … 69 83 70 84 /* NB: The callback connection is slotted for removal */ 71 rc = async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events); 85 rc = async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events, 86 NULL); 72 87 if (rc != EOK) { 73 88 printf(NAME ": Failed to create callback from device\n"); … … 78 93 } 79 94 80 void kbd_port_yield(void)95 static void adb_port_yield(void) 81 96 { 82 97 } 83 98 84 void kbd_port_reclaim(void)99 static void adb_port_reclaim(void) 85 100 { 86 101 } 87 102 88 void kbd_port_write(uint8_t data)103 static void adb_port_write(uint8_t data) 89 104 { 90 105 /*async_msg_1(dev_phone, CHAR_WRITE_BYTE, data);*/ 91 106 } 92 107 93 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall )108 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 94 109 { 95 110 /* Ignore parameters, the connection is already opened */ … … 125 140 126 141 if (b0 != 0xff) 127 kbd_push_scancode( b0);142 kbd_push_scancode(kbd_dev, b0); 128 143 if (b1 != 0xff) 129 kbd_push_scancode( b1);144 kbd_push_scancode(kbd_dev, b1); 130 145 } 131 146 -
uspace/srv/hid/input/port/chardev.c
rdf8110d3 rd900699 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 38 38 #include <async.h> 39 39 #include <async_obsolete.h> 40 #include <input.h> 40 41 #include <kbd_port.h> 41 42 #include <kbd.h> … … 45 46 #include <stdio.h> 46 47 47 #define NAME "kbd/chardev" 48 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 48 49 49 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall); 50 static int chardev_port_init(kbd_dev_t *); 51 static void chardev_port_yield(void); 52 static void chardev_port_reclaim(void); 53 static void chardev_port_write(uint8_t data); 50 54 55 kbd_port_ops_t chardev_port = { 56 .init = chardev_port_init, 57 .yield = chardev_port_yield, 58 .reclaim = chardev_port_reclaim, 59 .write = chardev_port_write 60 }; 61 62 static kbd_dev_t *kbd_dev; 51 63 static int dev_phone; 52 64 … … 59 71 static const unsigned int num_devs = sizeof(in_devs) / sizeof(in_devs[0]); 60 72 61 int kbd_port_init(void)73 static int chardev_port_init(kbd_dev_t *kdev) 62 74 { 63 75 devmap_handle_t handle; 64 76 unsigned int i; 65 77 int rc; 78 79 kbd_dev = kdev; 66 80 67 81 for (i = 0; i < num_devs; i++) { … … 83 97 84 98 /* NB: The callback connection is slotted for removal */ 85 if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events) != 0) { 99 if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events, 100 NULL) != 0) { 86 101 printf(NAME ": Failed to create callback from device\n"); 87 102 return -1; … … 91 106 } 92 107 93 void kbd_port_yield(void)108 static void chardev_port_yield(void) 94 109 { 95 110 } 96 111 97 void kbd_port_reclaim(void)112 static void chardev_port_reclaim(void) 98 113 { 99 114 } 100 115 101 void kbd_port_write(uint8_t data)116 static void chardev_port_write(uint8_t data) 102 117 { 103 118 async_obsolete_msg_1(dev_phone, CHAR_WRITE_BYTE, data); 104 119 } 105 120 106 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall )121 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 107 122 { 108 123 /* Ignore parameters, the connection is already opened */ … … 121 136 switch (IPC_GET_IMETHOD(call)) { 122 137 case CHAR_NOTIF_BYTE: 123 kbd_push_scancode( IPC_GET_ARG1(call));138 kbd_push_scancode(kbd_dev, IPC_GET_ARG1(call)); 124 139 break; 125 140 default: -
uspace/srv/hid/input/port/gxemul.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2007 Michal Kebrt 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 42 43 #include <errno.h> 43 44 45 static int gxemul_port_init(kbd_dev_t *); 46 static void gxemul_port_yield(void); 47 static void gxemul_port_reclaim(void); 48 static void gxemul_port_write(uint8_t data); 49 50 kbd_port_ops_t gxemul_port = { 51 .init = gxemul_port_init, 52 .yield = gxemul_port_yield, 53 .reclaim = gxemul_port_reclaim, 54 .write = gxemul_port_write 55 }; 56 57 static kbd_dev_t *kbd_dev; 58 44 59 static irq_cmd_t gxemul_cmds[] = { 45 60 { … … 61 76 62 77 /** Initializes keyboard handler. */ 63 int kbd_port_init(void)78 static int gxemul_port_init(kbd_dev_t *kdev) 64 79 { 80 kbd_dev = kdev; 81 65 82 sysarg_t addr; 66 83 if (sysinfo_get_value("kbd.address.virtual", &addr) != EOK) … … 77 94 } 78 95 79 void kbd_port_yield(void)96 static void gxemul_port_yield(void) 80 97 { 81 98 } 82 99 83 void kbd_port_reclaim(void)100 static void gxemul_port_reclaim(void) 84 101 { 85 102 } 86 103 87 void kbd_port_write(uint8_t data)104 static void gxemul_port_write(uint8_t data) 88 105 { 89 106 (void) data; … … 101 118 int scan_code = IPC_GET_ARG2(*call); 102 119 103 kbd_push_scancode( scan_code);120 kbd_push_scancode(kbd_dev, scan_code); 104 121 } 105 122 -
uspace/srv/hid/input/port/msim.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 42 43 #include <errno.h> 43 44 44 irq_cmd_t msim_cmds[] = { 45 static int msim_port_init(kbd_dev_t *); 46 static void msim_port_yield(void); 47 static void msim_port_reclaim(void); 48 static void msim_port_write(uint8_t data); 49 50 kbd_port_ops_t msim_port = { 51 .init = msim_port_init, 52 .yield = msim_port_yield, 53 .reclaim = msim_port_reclaim, 54 .write = msim_port_write 55 }; 56 57 static kbd_dev_t *kbd_dev; 58 59 static irq_cmd_t msim_cmds[] = { 45 60 { 46 61 .cmd = CMD_PIO_READ_8, … … 51 66 .cmd = CMD_ACCEPT 52 67 } 53 54 68 }; 55 69 56 irq_code_t msim_kbd = {70 static irq_code_t msim_kbd = { 57 71 sizeof(msim_cmds) / sizeof(irq_cmd_t), 58 72 msim_cmds … … 61 75 static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call); 62 76 63 int kbd_port_init(void)77 static int msim_port_init(kbd_dev_t *kdev) 64 78 { 79 kbd_dev = kdev; 80 65 81 sysarg_t vaddr; 66 82 if (sysinfo_get_value("kbd.address.virtual", &vaddr) != EOK) … … 78 94 } 79 95 80 void kbd_port_yield(void)96 static void msim_port_yield(void) 81 97 { 82 98 } 83 99 84 void kbd_port_reclaim(void)100 static void msim_port_reclaim(void) 85 101 { 86 102 } 87 103 88 void kbd_port_write(uint8_t data)104 static void msim_port_write(uint8_t data) 89 105 { 90 106 (void) data; … … 94 110 { 95 111 int scan_code = IPC_GET_ARG2(*call); 96 kbd_push_scancode( scan_code);112 kbd_push_scancode(kbd_dev, scan_code); 97 113 } 98 114 -
uspace/srv/hid/input/port/niagara.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2008 Pavel Rimsky 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 46 47 #include <errno.h> 47 48 49 static int niagara_port_init(kbd_dev_t *); 50 static void niagara_port_yield(void); 51 static void niagara_port_reclaim(void); 52 static void niagara_port_write(uint8_t data); 53 54 kbd_port_ops_t niagara_port = { 55 .init = niagara_port_init, 56 .yield = niagara_port_yield, 57 .reclaim = niagara_port_reclaim, 58 .write = niagara_port_write 59 }; 60 61 static kbd_dev_t *kbd_dev; 62 48 63 #define POLL_INTERVAL 10000 49 64 … … 70 85 71 86 /* virtual address of the shared buffer */ 72 input_buffer_t input_buffer;87 static input_buffer_t input_buffer; 73 88 74 89 static volatile bool polling_disabled = false; … … 79 94 * Maps the shared buffer and creates the polling thread. 80 95 */ 81 int kbd_port_init(void)96 static int niagara_port_init(kbd_dev_t *kdev) 82 97 { 98 kbd_dev = kdev; 99 83 100 sysarg_t paddr; 84 101 if (sysinfo_get_value("niagara.inbuf.address", &paddr) != EOK) … … 105 122 } 106 123 107 void kbd_port_yield(void)124 static void niagara_port_yield(void) 108 125 { 109 126 polling_disabled = true; 110 127 } 111 128 112 void kbd_port_reclaim(void)129 static void niagara_port_reclaim(void) 113 130 { 114 131 polling_disabled = false; 115 132 } 116 133 117 void kbd_port_write(uint8_t data)134 static void niagara_port_write(uint8_t data) 118 135 { 119 136 (void) data; … … 132 149 input_buffer->read_ptr = 133 150 ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE; 134 kbd_push_scancode( c);151 kbd_push_scancode(kbd_dev, c); 135 152 } 136 153 } -
uspace/srv/hid/input/port/ns16550.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 39 40 #include <async_obsolete.h> 40 41 #include <sysinfo.h> 42 #include <input.h> 41 43 #include <kbd.h> 42 44 #include <kbd_port.h> 43 #include <sun.h>44 45 #include <ddi.h> 45 46 #include <errno.h> 47 48 static int ns16550_port_init(kbd_dev_t *); 49 static void ns16550_port_yield(void); 50 static void ns16550_port_reclaim(void); 51 static void ns16550_port_write(uint8_t data); 52 53 kbd_port_ops_t ns16550_port = { 54 .init = ns16550_port_init, 55 .yield = ns16550_port_yield, 56 .reclaim = ns16550_port_reclaim, 57 .write = ns16550_port_write 58 }; 59 60 static kbd_dev_t *kbd_dev; 46 61 47 62 /* NS16550 registers */ … … 91 106 92 107 static uintptr_t ns16550_physical; 93 static uintptr_t ns16550_kernel; 108 static uintptr_t ns16550_kernel; 94 109 95 int ns16550_port_init(void) 110 static kbd_dev_t *kbd_dev; 111 112 static int ns16550_port_init(kbd_dev_t *kdev) 96 113 { 97 114 void *vaddr; 98 115 116 kbd_dev = kdev; 117 118 sysarg_t ns16550; 119 if (sysinfo_get_value("kbd.type.ns16550", &ns16550) != EOK) 120 return -1; 121 if (!ns16550) 122 return -1; 123 99 124 if (sysinfo_get_value("kbd.address.physical", &ns16550_physical) != EOK) 100 125 return -1; … … 116 141 } 117 142 143 static void ns16550_port_yield(void) 144 { 145 } 146 147 static void ns16550_port_reclaim(void) 148 { 149 } 150 151 static void ns16550_port_write(uint8_t data) 152 { 153 (void) data; 154 } 155 118 156 static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call) 119 157 { 120 158 int scan_code = IPC_GET_ARG2(*call); 121 kbd_push_scancode( scan_code);159 kbd_push_scancode(kbd_dev, scan_code); 122 160 123 161 if (irc_service) -
uspace/srv/hid/input/port/pl050.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2009 Vineeth Pillai 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 46 47 #include <errno.h> 47 48 49 static int pl050_port_init(kbd_dev_t *); 50 static void pl050_port_yield(void); 51 static void pl050_port_reclaim(void); 52 static void pl050_port_write(uint8_t data); 53 54 kbd_port_ops_t pl050_port = { 55 .init = pl050_port_init, 56 .yield = pl050_port_yield, 57 .reclaim = pl050_port_reclaim, 58 .write = pl050_port_write 59 }; 60 61 static kbd_dev_t *kbd_dev; 62 48 63 #define PL050_STAT_RXFULL (1 << 4) 49 64 … … 82 97 static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call); 83 98 84 int kbd_port_init(void)99 static int pl050_port_init(kbd_dev_t *kdev) 85 100 { 101 kbd_dev = kdev; 102 86 103 sysarg_t addr; 87 104 if (sysinfo_get_value("kbd.address.status", &addr) != EOK) … … 105 122 } 106 123 107 void kbd_port_yield(void)124 static void pl050_port_yield(void) 108 125 { 109 126 } 110 127 111 void kbd_port_reclaim(void)128 static void pl050_port_reclaim(void) 112 129 { 113 130 } 114 131 115 void kbd_port_write(uint8_t data)132 static void pl050_port_write(uint8_t data) 116 133 { 117 134 (void) data; … … 122 139 int scan_code = IPC_GET_ARG2(*call); 123 140 124 kbd_push_scancode( scan_code);141 kbd_push_scancode(kbd_dev, scan_code); 125 142 return; 126 143 } -
uspace/srv/hid/input/port/sgcn.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2008 Pavel Rimsky 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 46 47 #include <errno.h> 47 48 49 static int sgcn_port_init(kbd_dev_t *); 50 static void sgcn_port_yield(void); 51 static void sgcn_port_reclaim(void); 52 static void sgcn_port_write(uint8_t data); 53 54 kbd_port_ops_t sgcn_port = { 55 .init = sgcn_port_init, 56 .yield = sgcn_port_yield, 57 .reclaim = sgcn_port_reclaim, 58 .write = sgcn_port_write 59 }; 60 61 static kbd_dev_t *kbd_dev; 62 48 63 #define POLL_INTERVAL 10000 49 64 … … 101 116 * Maps the physical memory (SRAM) and creates the polling thread. 102 117 */ 103 int kbd_port_init(void) 104 { 118 static int sgcn_port_init(kbd_dev_t *kdev) 119 { 120 kbd_dev = kdev; 121 105 122 sysarg_t sram_paddr; 106 123 if (sysinfo_get_value("sram.address.physical", &sram_paddr) != EOK) … … 130 147 } 131 148 132 void kbd_port_yield(void)149 static void sgcn_port_yield(void) 133 150 { 134 151 polling_disabled = true; 135 152 } 136 153 137 void kbd_port_reclaim(void)154 static void sgcn_port_reclaim(void) 138 155 { 139 156 polling_disabled = false; 140 157 } 141 158 142 void kbd_port_write(uint8_t data)159 static void sgcn_port_write(uint8_t data) 143 160 { 144 161 (void) data; … … 167 184 buf_ptr = (volatile char *) 168 185 SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); 169 kbd_push_scancode( c);186 kbd_push_scancode(kbd_dev, c); 170 187 } 171 188 } -
uspace/srv/hid/input/port/ski.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2005 Jakub Jermar 3 * Copyright (c) 20 09Jiri Svoboda3 * Copyright (c) 2011 Jiri Svoboda 4 4 * All rights reserved. 5 5 * … … 45 45 #include <bool.h> 46 46 47 static int ski_port_init(kbd_dev_t *); 48 static void ski_port_yield(void); 49 static void ski_port_reclaim(void); 50 static void ski_port_write(uint8_t data); 51 52 kbd_port_ops_t ski_port = { 53 .init = ski_port_init, 54 .yield = ski_port_yield, 55 .reclaim = ski_port_reclaim, 56 .write = ski_port_write 57 }; 58 59 static kbd_dev_t *kbd_dev; 60 47 61 #define SKI_GETCHAR 21 48 62 … … 55 69 56 70 /** Initialize Ski port driver. */ 57 int kbd_port_init(void)71 static int ski_port_init(kbd_dev_t *kdev) 58 72 { 59 73 thread_id_t tid; 60 74 int rc; 75 76 kbd_dev = kdev; 61 77 62 78 rc = thread_create(ski_thread_impl, NULL, "kbd_poll", &tid); … … 68 84 } 69 85 70 void kbd_port_yield(void)86 static void ski_port_yield(void) 71 87 { 72 88 polling_disabled = true; 73 89 } 74 90 75 void kbd_port_reclaim(void)91 static void ski_port_reclaim(void) 76 92 { 77 93 polling_disabled = false; 78 94 } 79 95 80 void kbd_port_write(uint8_t data)96 static void ski_port_write(uint8_t data) 81 97 { 82 98 (void) data; … … 94 110 if (c == 0) 95 111 break; 96 kbd_push_scancode( c);112 kbd_push_scancode(kbd_dev, c); 97 113 } 98 114 … … 112 128 uint64_t ch; 113 129 130 #ifdef UARCH_ia64 114 131 asm volatile ( 115 132 "mov r15 = %1\n" … … 121 138 : "r15", "r8" 122 139 ); 123 140 #else 141 ch = 0; 142 #endif 124 143 return (int32_t) ch; 125 144 } -
uspace/srv/hid/input/port/z8530.c
rdf8110d3 rd900699 1 1 /* 2 2 * Copyright (c) 2006 Martin Decky 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 39 40 #include <async_obsolete.h> 40 41 #include <sysinfo.h> 42 #include <input.h> 41 43 #include <kbd.h> 42 44 #include <kbd_port.h> 43 #include <sun.h>44 45 #include <sys/types.h> 45 46 #include <ddi.h> 46 47 #include <errno.h> 48 49 static int z8530_port_init(kbd_dev_t *); 50 static void z8530_port_yield(void); 51 static void z8530_port_reclaim(void); 52 static void z8530_port_write(uint8_t data); 53 54 kbd_port_ops_t z8530_port = { 55 .init = z8530_port_init, 56 .yield = z8530_port_yield, 57 .reclaim = z8530_port_reclaim, 58 .write = z8530_port_write 59 }; 60 61 static kbd_dev_t *kbd_dev; 47 62 48 63 #define CHAN_A_STATUS 4 … … 77 92 } 78 93 }; 79 80 irq_code_t z8530_kbd = {94 95 static irq_code_t z8530_kbd = { 81 96 sizeof(z8530_cmds) / sizeof(irq_cmd_t), 82 97 z8530_cmds … … 85 100 static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call); 86 101 87 int z8530_port_init(void)102 static int z8530_port_init(kbd_dev_t *kdev) 88 103 { 104 kbd_dev = kdev; 105 106 sysarg_t z8530; 107 if (sysinfo_get_value("kbd.type.z8530", &z8530) != EOK) 108 return -1; 109 if (!z8530) 110 return -1; 111 89 112 sysarg_t kaddr; 90 113 if (sysinfo_get_value("kbd.address.kernel", &kaddr) != EOK) … … 104 127 } 105 128 129 static void z8530_port_yield(void) 130 { 131 } 132 133 static void z8530_port_reclaim(void) 134 { 135 } 136 137 static void z8530_port_write(uint8_t data) 138 { 139 (void) data; 140 } 141 106 142 static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call) 107 143 { 108 144 int scan_code = IPC_GET_ARG2(*call); 109 kbd_push_scancode( scan_code);145 kbd_push_scancode(kbd_dev, scan_code); 110 146 111 147 if (irc_service)
Note:
See TracChangeset
for help on using the changeset viewer.
