Changeset b0f00a9 in mainline for uspace/srv/hid/input/port
- Timestamp:
- 2011-11-06T22:21:05Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 898e847
- Parents:
- 2bdf8313 (diff), 7b5f4c9 (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:
-
- 1 added
- 13 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/input/port/adb.c
r2bdf8313 rb0f00a9 1 1 /* 2 * Copyright (c) 201 0Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 30 30 * @ingroup kbd 31 31 * @{ 32 */ 32 */ 33 33 /** @file 34 34 * @brief ADB keyboard port driver. … … 37 37 #include <ipc/adb.h> 38 38 #include <async.h> 39 #include <input.h> 39 40 #include <kbd_port.h> 40 41 #include <kbd.h> … … 42 43 #include <fcntl.h> 43 44 #include <errno.h> 45 #include <loc.h> 44 46 45 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall );47 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 46 48 static void adb_kbd_reg0_data(uint16_t data); 47 49 48 static int dev_phone; 50 static int adb_port_init(kbd_dev_t *); 51 static void adb_port_yield(void); 52 static void adb_port_reclaim(void); 53 static void adb_port_write(uint8_t data); 49 54 50 #define NAME "kbd" 55 kbd_port_ops_t adb_port = { 56 .init = adb_port_init, 57 .yield = adb_port_yield, 58 .reclaim = adb_port_reclaim, 59 .write = adb_port_write 60 }; 51 61 52 int kbd_port_init(void) 62 static kbd_dev_t *kbd_dev; 63 static async_sess_t *dev_sess; 64 65 static int adb_port_init(kbd_dev_t *kdev) 53 66 { 54 const char *input = "/dev/adb/kbd"; 55 int input_fd; 56 57 printf(NAME ": open %s\n", input); 58 59 input_fd = open(input, O_RDONLY); 60 if (input_fd < 0) { 61 printf(NAME ": Failed opening %s (%d)\n", input, input_fd); 62 return false; 67 const char *dev = "adb/kbd"; 68 service_id_t service_id; 69 async_exch_t *exch; 70 int rc; 71 72 kbd_dev = kdev; 73 74 rc = loc_service_get_id(dev, &service_id, 0); 75 if (rc != EOK) 76 return rc; 77 78 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 79 if (dev_sess == NULL) { 80 printf("%s: Failed to connect to device\n", NAME); 81 return ENOENT; 63 82 } 64 65 dev_phone = fd_phone(input_fd); 66 if (dev_phone < 0) { 67 printf(NAME ": Failed to connect to device\n"); 68 return false; 83 84 exch = async_exchange_begin(dev_sess); 85 if (exch == NULL) { 86 printf("%s: Failed starting exchange with device\n", NAME); 87 async_hangup(dev_sess); 88 return ENOMEM; 69 89 } 70 90 71 91 /* NB: The callback connection is slotted for removal */ 72 if (async_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events) != 0) { 73 printf(NAME ": Failed to create callback from device\n"); 74 return false; 92 rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL); 93 async_exchange_end(exch); 94 if (rc != EOK) { 95 printf("%s: Failed to create callback from device\n", NAME); 96 async_hangup(dev_sess); 97 return rc; 75 98 } 76 77 return 0;99 100 return EOK; 78 101 } 79 102 80 void kbd_port_yield(void)103 static void adb_port_yield(void) 81 104 { 82 105 } 83 106 84 void kbd_port_reclaim(void)107 static void adb_port_reclaim(void) 85 108 { 86 109 } 87 110 88 void kbd_port_write(uint8_t data)111 static void adb_port_write(uint8_t data) 89 112 { 90 113 /*async_msg_1(dev_phone, CHAR_WRITE_BYTE, data);*/ 91 114 } 92 115 93 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall )116 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 94 117 { 95 118 /* Ignore parameters, the connection is already opened */ … … 100 123 101 124 int retval; 102 103 switch (IPC_GET_IMETHOD(call)) { 104 case IPC_M_PHONE_HUNGUP: 125 126 if (!IPC_GET_IMETHOD(call)) { 105 127 /* TODO: Handle hangup */ 106 128 return; 129 } 130 131 switch (IPC_GET_IMETHOD(call)) { 107 132 case ADB_REG_NOTIF: 108 133 adb_kbd_reg0_data(IPC_GET_ARG1(call)); … … 117 142 static void adb_kbd_reg0_data(uint16_t data) 118 143 { 119 uint8_t b0, b1; 120 121 b0 = (data >> 8) & 0xff; 122 b1 = data & 0xff; 123 144 uint8_t b0 = (data >> 8) & 0xff; 145 uint8_t b1 = data & 0xff; 146 124 147 if (b0 != 0xff) 125 kbd_push_scancode(b0); 148 kbd_push_data(kbd_dev, b0); 149 126 150 if (b1 != 0xff) 127 kbd_push_ scancode(b1);151 kbd_push_data(kbd_dev, b1); 128 152 } 129 153 -
uspace/srv/hid/input/port/adb_mouse.c
r2bdf8313 rb0f00a9 1 1 /* 2 * Copyright (c) 20 09 Jiri Svoboda2 * Copyright (c) 2011 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mouse 29 /** @addtogroup mouse_port 30 * @ingroup mouse 30 31 * @{ 31 */ 32 */ 32 33 /** @file 33 * @brief 34 * @brief ADB mouse port driver. 34 35 */ 35 36 36 #include <ipc/ char.h>37 #include <ipc/adb.h> 37 38 #include <async.h> 38 #include <vfs/vfs.h> 39 #include <fcntl.h> 39 #include <input.h> 40 #include <mouse_port.h> 41 #include <mouse.h> 40 42 #include <errno.h> 43 #include <loc.h> 44 #include <stdio.h> 41 45 42 #include <char_mouse.h> 43 #include <mouse_port.h> 46 static mouse_dev_t *mouse_dev; 47 static async_sess_t *dev_sess; 44 48 45 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall); 46 47 static int dev_phone; 48 49 #define NAME "char_mouse" 50 51 int mouse_port_init(void) 52 { 53 const char *input = "/dev/char/ps2b"; 54 int input_fd; 55 56 printf(NAME ": open %s\n", input); 57 58 input_fd = open(input, O_RDONLY); 59 if (input_fd < 0) { 60 printf(NAME ": Failed opening %s (%d)\n", input, input_fd); 61 return false; 62 } 63 64 dev_phone = fd_phone(input_fd); 65 if (dev_phone < 0) { 66 printf(NAME ": Failed to connect to device\n"); 67 return false; 68 } 69 70 /* NB: The callback connection is slotted for removal */ 71 if (async_connect_to_me(dev_phone, 0, 0, 0, chardev_events) != 0) { 72 printf(NAME ": Failed to create callback from device\n"); 73 return false; 74 } 75 76 return 0; 77 } 78 79 void mouse_port_yield(void) 80 { 81 } 82 83 void mouse_port_reclaim(void) 84 { 85 } 86 87 void mouse_port_write(uint8_t data) 88 { 89 async_msg_1(dev_phone, CHAR_WRITE_BYTE, data); 90 } 91 92 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall) 49 static void mouse_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 93 50 { 94 51 /* Ignore parameters, the connection is already opened */ 95 52 while (true) { 96 97 53 ipc_call_t call; 98 54 ipc_callid_t callid = async_get_call(&call); 99 55 100 56 int retval; 101 102 switch (IPC_GET_IMETHOD(call)) { 103 case IPC_M_PHONE_HUNGUP: 57 58 if (!IPC_GET_IMETHOD(call)) { 104 59 /* TODO: Handle hangup */ 105 60 return; 106 case IPC_FIRST_USER_METHOD: 107 mouse_handle_byte(IPC_GET_ARG1(call)); 61 } 62 63 switch (IPC_GET_IMETHOD(call)) { 64 case ADB_REG_NOTIF: 65 mouse_push_data(mouse_dev, IPC_GET_ARG1(call)); 108 66 break; 109 67 default: 110 68 retval = ENOENT; 111 69 } 70 112 71 async_answer_0(callid, retval); 113 72 } 114 73 } 115 74 75 static int adb_port_init(mouse_dev_t *mdev) 76 { 77 const char *dev = "adb/mouse"; 78 79 mouse_dev = mdev; 80 81 service_id_t service_id; 82 int rc = loc_service_get_id(dev, &service_id, 0); 83 if (rc != EOK) 84 return rc; 85 86 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 87 if (dev_sess == NULL) { 88 printf("%s: Failed to connect to device\n", NAME); 89 return ENOENT; 90 } 91 92 async_exch_t *exch = async_exchange_begin(dev_sess); 93 if (exch == NULL) { 94 printf("%s: Failed starting exchange with device\n", NAME); 95 async_hangup(dev_sess); 96 return ENOMEM; 97 } 98 99 /* NB: The callback connection is slotted for removal */ 100 rc = async_connect_to_me(exch, 0, 0, 0, mouse_port_events, NULL); 101 async_exchange_end(exch); 102 if (rc != EOK) { 103 printf("%s: Failed to create callback from device\n", NAME); 104 async_hangup(dev_sess); 105 return rc; 106 } 107 108 return EOK; 109 } 110 111 static void adb_port_yield(void) 112 { 113 } 114 115 static void adb_port_reclaim(void) 116 { 117 } 118 119 static void adb_port_write(uint8_t data) 120 { 121 } 122 123 mouse_port_ops_t adb_mouse_port = { 124 .init = adb_port_init, 125 .yield = adb_port_yield, 126 .reclaim = adb_port_reclaim, 127 .write = adb_port_write 128 }; 129 116 130 /** 117 131 * @} -
uspace/srv/hid/input/port/chardev.c
r2bdf8313 rb0f00a9 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 30 30 * @ingroup kbd 31 31 * @{ 32 */ 32 */ 33 33 /** @file 34 34 * @brief Chardev keyboard port driver. … … 37 37 #include <ipc/char.h> 38 38 #include <async.h> 39 #include <input.h> 39 40 #include <kbd_port.h> 40 41 #include <kbd.h> 41 #include <vfs/vfs.h> 42 #include <sys/stat.h> 43 #include <fcntl.h> 42 #include <loc.h> 44 43 #include <errno.h> 44 #include <stdio.h> 45 45 46 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall );46 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 47 47 48 static int dev_phone; 48 static int chardev_port_init(kbd_dev_t *); 49 static void chardev_port_yield(void); 50 static void chardev_port_reclaim(void); 51 static void chardev_port_write(uint8_t data); 49 52 50 #define NAME "kbd" 53 kbd_port_ops_t chardev_port = { 54 .init = chardev_port_init, 55 .yield = chardev_port_yield, 56 .reclaim = chardev_port_reclaim, 57 .write = chardev_port_write 58 }; 59 60 static kbd_dev_t *kbd_dev; 61 static async_sess_t *dev_sess; 51 62 52 63 /** List of devices to try connecting to. */ 53 64 static const char *in_devs[] = { 54 " /dev/char/ps2a",55 " /dev/char/s3c24ser"65 "char/ps2a", 66 "char/s3c24ser" 56 67 }; 57 68 58 static const int num_devs = sizeof(in_devs) / sizeof(in_devs[0]);69 static const unsigned int num_devs = sizeof(in_devs) / sizeof(in_devs[0]); 59 70 60 int kbd_port_init(void)71 static int chardev_port_init(kbd_dev_t *kdev) 61 72 { 62 int input_fd; 63 int i; 64 65 input_fd = -1; 73 service_id_t service_id; 74 async_exch_t *exch; 75 unsigned int i; 76 int rc; 77 78 kbd_dev = kdev; 79 66 80 for (i = 0; i < num_devs; i++) { 67 struct stat s; 68 69 if (stat(in_devs[i], &s) == EOK) 81 rc = loc_service_get_id(in_devs[i], &service_id, 0); 82 if (rc == EOK) 70 83 break; 71 84 } 72 85 73 86 if (i >= num_devs) { 74 printf( NAME ": Could not find any suitable input device.\n");87 printf("%s: Could not find any suitable input device\n", NAME); 75 88 return -1; 76 89 } 77 78 input_fd = open(in_devs[i], O_RDONLY); 79 if (input_fd < 0) { 80 printf(NAME ": failed opening device %s (%d).\n", in_devs[i], 81 input_fd); 90 91 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 92 IPC_FLAG_BLOCKING); 93 if (dev_sess == NULL) { 94 printf("%s: Failed connecting to device\n", NAME); 95 return ENOENT; 96 } 97 98 exch = async_exchange_begin(dev_sess); 99 if (exch == NULL) { 100 printf("%s: Failed starting exchange with device\n", NAME); 101 async_hangup(dev_sess); 102 return ENOMEM; 103 } 104 105 /* NB: The callback connection is slotted for removal */ 106 rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL); 107 async_exchange_end(exch); 108 109 if (rc != 0) { 110 printf("%s: Failed to create callback from device\n", NAME); 111 async_hangup(dev_sess); 82 112 return -1; 83 113 } 84 85 dev_phone = fd_phone(input_fd); 86 if (dev_phone < 0) { 87 printf(NAME ": Failed connecting to device\n"); 88 return -1; 89 } 90 91 /* NB: The callback connection is slotted for removal */ 92 if (async_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events) != 0) { 93 printf(NAME ": Failed to create callback from device\n"); 94 return -1; 95 } 96 114 97 115 return 0; 98 116 } 99 117 100 void kbd_port_yield(void)118 static void chardev_port_yield(void) 101 119 { 102 120 } 103 121 104 void kbd_port_reclaim(void)122 static void chardev_port_reclaim(void) 105 123 { 106 124 } 107 125 108 void kbd_port_write(uint8_t data)126 static void chardev_port_write(uint8_t data) 109 127 { 110 async_msg_1(dev_phone, CHAR_WRITE_BYTE, data); 128 async_exch_t *exch = async_exchange_begin(dev_sess); 129 if (exch == NULL) { 130 printf("%s: Failed starting exchange with device\n", NAME); 131 return; 132 } 133 134 async_msg_1(exch, CHAR_WRITE_BYTE, data); 135 async_exchange_end(exch); 111 136 } 112 137 113 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall )138 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 114 139 { 115 140 /* Ignore parameters, the connection is already opened */ … … 118 143 ipc_call_t call; 119 144 ipc_callid_t callid = async_get_call(&call); 145 146 if (!IPC_GET_IMETHOD(call)) { 147 /* TODO: Handle hangup */ 148 return; 149 } 120 150 121 151 int retval; 122 152 123 153 switch (IPC_GET_IMETHOD(call)) { 124 case IPC_M_PHONE_HUNGUP:125 /* TODO: Handle hangup */126 return;127 154 case CHAR_NOTIF_BYTE: 128 kbd_push_ scancode(IPC_GET_ARG1(call));155 kbd_push_data(kbd_dev, IPC_GET_ARG1(call)); 129 156 break; 130 157 default: -
uspace/srv/hid/input/port/gxemul.c
r2bdf8313 rb0f00a9 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; … … 91 108 92 109 /** Process data sent when a key is pressed. 93 *94 * @param keybuffer Buffer of pressed keys.95 * @param call IPC call.96 110 * 97 * @return Always 1. 111 * @param keybuffer Buffer of pressed keys. 112 * @param call IPC call. 113 * 98 114 */ 99 115 static void gxemul_irq_handler(ipc_callid_t iid, ipc_call_t *call) 100 116 { 101 int scan_code = IPC_GET_ARG2(*call); 102 103 kbd_push_scancode(scan_code); 117 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 104 118 } 105 119 -
uspace/srv/hid/input/port/msim.c
r2bdf8313 rb0f00a9 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; … … 93 109 static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call) 94 110 { 95 int scan_code = IPC_GET_ARG2(*call); 96 kbd_push_scancode(scan_code); 111 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 97 112 } 98 113 99 114 /** @} 100 */115 */ -
uspace/srv/hid/input/port/niagara.c
r2bdf8313 rb0f00a9 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; … … 131 148 c = input_buffer->data[input_buffer->read_ptr]; 132 149 input_buffer->read_ptr = 133 134 kbd_push_ scancode(c);150 ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE; 151 kbd_push_data(kbd_dev, c); 135 152 } 136 153 } 137 154 138 155 /** 139 * Thread to poll SGCNfor keypresses.156 * Thread to poll Niagara console for keypresses. 140 157 */ 141 158 static void niagara_thread_impl(void *arg) -
uspace/srv/hid/input/port/ns16550.c
r2bdf8313 rb0f00a9 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 38 39 #include <async.h> 39 40 #include <sysinfo.h> 41 #include <input.h> 40 42 #include <kbd.h> 41 43 #include <kbd_port.h> 42 #include <sun.h>43 44 #include <ddi.h> 44 45 #include <errno.h> 46 47 static int ns16550_port_init(kbd_dev_t *); 48 static void ns16550_port_yield(void); 49 static void ns16550_port_reclaim(void); 50 static void ns16550_port_write(uint8_t data); 51 52 kbd_port_ops_t ns16550_port = { 53 .init = ns16550_port_init, 54 .yield = ns16550_port_yield, 55 .reclaim = ns16550_port_reclaim, 56 .write = ns16550_port_write 57 }; 58 59 static kbd_dev_t *kbd_dev; 45 60 46 61 /* NS16550 registers */ … … 90 105 91 106 static uintptr_t ns16550_physical; 92 static uintptr_t ns16550_kernel; 107 static uintptr_t ns16550_kernel; 93 108 94 int ns16550_port_init(void) 109 static kbd_dev_t *kbd_dev; 110 111 static int ns16550_port_init(kbd_dev_t *kdev) 95 112 { 96 113 void *vaddr; 97 114 115 kbd_dev = kdev; 116 117 sysarg_t ns16550; 118 if (sysinfo_get_value("kbd.type.ns16550", &ns16550) != EOK) 119 return -1; 120 if (!ns16550) 121 return -1; 122 98 123 if (sysinfo_get_value("kbd.address.physical", &ns16550_physical) != EOK) 99 124 return -1; … … 115 140 } 116 141 142 static void ns16550_port_yield(void) 143 { 144 } 145 146 static void ns16550_port_reclaim(void) 147 { 148 } 149 150 static void ns16550_port_write(uint8_t data) 151 { 152 (void) data; 153 } 154 117 155 static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call) 118 156 { 119 int scan_code = IPC_GET_ARG2(*call); 120 kbd_push_scancode(scan_code); 157 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 121 158 122 if (irc_service) 123 async_msg_1(irc_phone, IRC_CLEAR_INTERRUPT, 124 IPC_GET_IMETHOD(*call)); 159 if (irc_service) { 160 async_exch_t *exch = async_exchange_begin(irc_sess); 161 async_msg_1(exch, IRC_CLEAR_INTERRUPT, IPC_GET_IMETHOD(*call)); 162 async_exchange_end(exch); 163 } 125 164 } 126 165 -
uspace/srv/hid/input/port/pl050.c
r2bdf8313 rb0f00a9 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; … … 120 137 static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call) 121 138 { 122 int scan_code = IPC_GET_ARG2(*call); 123 124 kbd_push_scancode(scan_code); 125 return; 139 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 126 140 } 127 141 128 142 /** 129 143 * @} 130 */ 144 */ -
uspace/srv/hid/input/port/ski.c
r2bdf8313 rb0f00a9 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_data(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 }
Note:
See TracChangeset
for help on using the changeset viewer.