Changeset 250717cc in mainline
- Timestamp:
- 2006-05-16T09:30:42Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ec153a0
- Parents:
- 51d6f80
- Files:
-
- 1 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
init/init.c
r51d6f80 r250717cc 29 29 #include "version.h" 30 30 #include <ipc.h> 31 #include <services.h> 31 32 #include <stdio.h> 32 33 #include <unistd.h> … … 40 41 #include <ddi.h> 41 42 #include <string.h> 43 #include <errno.h> 42 44 #include <kbd.h> 43 45 … … 203 205 callid = ipc_wait_for_call(&data, NULL); 204 206 printf("Received ping\n"); 205 ipc_answer (callid, 0, 0, 0);207 ipc_answer_fast(callid, 0, 0, 0); 206 208 } 207 209 // callid = ipc_wait_for_call(&data, NULL); … … 301 303 302 304 printf("Test: Starting connect...\n"); 303 while ((phoneid = ipc_connect_me_to(PHONE_NS, 30, 60)) < 0) {305 while ((phoneid = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0)) < 0) { 304 306 }; 305 307 … … 314 316 printf("Test: Hangin up\n"); 315 317 ipc_hangup(phoneid); 318 } 319 320 static void test_pci() 321 { 322 int phone; 323 while ((phone = ipc_connect_me_to(PHONE_NS, SERVICE_PCI, 0)) < 0) 324 ; 325 printf("Connected to PCI service through phone %d.\n", phone); 316 326 } 317 327 … … 355 365 // test_slam(); 356 366 // test_as_send(); 367 test_pci(); 357 368 test_kbd(); 358 369 … … 378 389 379 390 int i; 380 391 381 392 for (i = 0; i < 50000000; i++) 382 393 ; … … 401 412 printf("Main thread exiting.\n"); 402 413 */ 414 403 415 return 0; 404 416 } -
kbd/generic/kbd.c
r51d6f80 r250717cc 28 28 29 29 #include <ipc.h> 30 #include <services.h> 30 31 #include <stdio.h> 31 32 #include <unistd.h> … … 71 72 printf("%s: Registering at naming service.\n", NAME); 72 73 73 if ((res = ipc_connect_to_me(PHONE_NS, 30, 60, &phonead)) != 0) {74 if ((res = ipc_connect_to_me(PHONE_NS, SERVICE_KEYBOARD, 0, &phonead)) != 0) { 74 75 printf("%s: Error: Registering at naming service failed.\n", NAME); 75 76 return -1; … … 139 140 if (! (callid & IPC_CALLID_NOTIFICATION)) { 140 141 // printf("%s: Answering\n", NAME); 141 ipc_answer (callid, retval, arg1, arg2);142 ipc_answer_fast(callid, retval, arg1, arg2); 142 143 } 143 144 } -
libipc/generic/ipc.c
r51d6f80 r250717cc 148 148 149 149 150 /** Send answer to a received call */ 151 ipcarg_t ipc_answer(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1, 150 /** Send a fast answer to a received call. 151 * 152 * The fast answer makes use of passing retval and first two arguments in registers. 153 * If you need to return more, use the ipc_answer() instead. 154 * 155 * @param callid ID of the call being answered. 156 * @param retval Return value. 157 * @param arg1 First return argument. 158 * @param arg2 Second return argument. 159 * 160 * @return Zero on success or a value from @ref errno.h on failure. 161 */ 162 ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1, 152 163 ipcarg_t arg2) 153 164 { 154 165 return __SYSCALL4(SYS_IPC_ANSWER_FAST, callid, retval, arg1, arg2); 155 166 } 167 168 /** Send a full answer to a received call. 169 * 170 * @param callid ID of the call being answered. 171 * @param call Call data. Must be already initialized by the responder. 172 * 173 * @return Zero on success or a value from @ref errno.h on failure. 174 */ 175 ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call) 176 { 177 return __SYSCALL2(SYS_IPC_ANSWER, callid, (sysarg_t) call); 178 } 179 156 180 157 181 /** Try to dispatch queed calls from async queue */ -
libipc/include/ipc.h
r51d6f80 r250717cc 55 55 ipcarg_t *result); 56 56 extern ipc_callid_t ipc_wait_for_call(ipc_call_t *data, int flags); 57 extern ipcarg_t ipc_answer (ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1,57 extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1, 58 58 ipcarg_t arg2); 59 extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call); 59 60 60 61 #define ipc_call_async(phoneid,method,arg1,private, callback) (ipc_call_async_2(phoneid, method, arg1, 0, private, callback)) -
ns/ns.c
r51d6f80 r250717cc 72 72 } hashed_service_t; 73 73 74 /*75 irq_cmd_t msim_cmds[1] = {76 { CMD_MEM_READ_1, (void *)0xB0000000, 0 }77 };78 79 irq_code_t msim_kbd = {80 1,81 msim_cmds82 };83 */84 /*85 irq_cmd_t i8042_cmds[1] = {86 { CMD_PORT_READ_1, (void *)0x60, 0 }87 };88 89 irq_code_t i8042_kbd = {90 1,91 i8042_cmds92 };93 */94 95 96 74 int static ping_phone; 97 75 … … 110 88 return ENOMEM; 111 89 } 112 113 114 // ipc_register_irq(2, &msim_kbd); 115 // ipc_register_irq(1, &i8042_kbd); 90 116 91 while (1) { 117 92 callid = ipc_wait_for_call(&call, 0); 118 printf("NS: Call in_phone_hash=%lX...", call.in_phone_hash);93 // printf("NS: Call in_phone_hash=%lX...", call.in_phone_hash); 119 94 switch (IPC_GET_METHOD(call)) { 120 95 case IPC_M_AS_SEND: 121 96 as = (char *)IPC_GET_ARG2(call); 122 97 printf("Received as: %P, size:%d\n", as, IPC_GET_ARG3(call)); 123 retval = ipc_answer (callid, 0,(sysarg_t)(1024*1024), 0);98 retval = ipc_answer_fast(callid, 0,(sysarg_t)(1024*1024), 0); 124 99 if (!retval) { 125 100 printf("Reading shared memory..."); … … 171 146 } 172 147 if (! (callid & IPC_CALLID_NOTIFICATION)) { 173 printf("Answering.\n");174 ipc_answer (callid, retval, arg1, arg2);148 // printf("Answering.\n"); 149 ipc_answer_fast(callid, retval, arg1, arg2); 175 150 } 176 151 } … … 228 203 hlp = hash_table_find(&ns_hash_table, keys); 229 204 if (!hlp) { 230 printf("Service %d not registered.\n", service);205 // printf("Service %d not registered.\n", service); 231 206 return ENOENT; 232 207 } -
pci/libpci/pci.h
r51d6f80 r250717cc 50 50 struct id_entry **id_hash; /* names.c */ 51 51 struct id_bucket *current_id_bucket; 52 int fd; /* proc: fd */53 int fd_rw; /* proc: fd opened read-write */54 struct pci_dev *cached_dev; /* proc: device the fd is for */55 int fd_pos; /* proc: current position */56 52 }; 57 53 … … 117 113 118 114 /* 119 * Filters120 */121 122 struct pci_filter {123 int domain, bus, slot, func; /* -1 = ANY */124 int vendor, device;125 };126 127 void pci_filter_init(struct pci_access *, struct pci_filter *);128 char *pci_filter_parse_slot(struct pci_filter *, char *);129 char *pci_filter_parse_id(struct pci_filter *, char *);130 int pci_filter_match(struct pci_filter *, struct pci_dev *);131 132 /*133 115 * Conversion of PCI ID's to names (according to the pci.ids file) 134 116 * -
pci/pci.c
r51d6f80 r250717cc 15 15 #include <stdlib.h> 16 16 #include <ipc.h> 17 #include <services.h> 17 18 #include <errno.h> 18 19 … … 24 25 #define NAME "PCI" 25 26 27 static struct pci_access *pacc; 28 26 29 int main(int argc, char *argv[]) 27 30 { 28 struct pci_access *pacc;29 31 struct pci_dev *dev; 30 32 unsigned int c; 31 33 char buf[80]; 32 33 int ipc_res;34 34 ipcarg_t ns_in_phone_hash; 35 35 … … 53 53 dev->vendor_id, dev->device_id)); 54 54 } 55 pci_cleanup(pacc); /* Close everything */56 55 57 56 printf("%s: registering at naming service.\n", NAME); 58 if (ipc_connect_to_me(PHONE_NS, 40, 70, &ns_in_phone_hash) != 0) {57 if (ipc_connect_to_me(PHONE_NS, SERVICE_PCI, 0, &ns_in_phone_hash) != 0) { 59 58 printf("Failed to register %s at naming service.\n", NAME); 60 59 return -1; 61 60 } 62 61 63 62 printf("%s: accepting connections\n", NAME); 64 while (1) { 63 while (1) { 65 64 ipc_call_t call; 66 65 ipc_callid_t callid; 67 66 int retval; 67 68 68 callid = ipc_wait_for_call(&call, 0); 69 ipc_answer(callid, EHANGUP, 0, 0); 69 switch(IPC_GET_METHOD(call)) { 70 case IPC_M_CONNECT_ME_TO: 71 IPC_SET_RETVAL(call, 0); 72 break; 73 } 74 if (! (callid & IPC_CALLID_NOTIFICATION)) { 75 ipc_answer(callid, &call); 76 } 77 printf("%s: received call from %lX\n", NAME, call.in_phone_hash); 70 78 } 79 80 pci_cleanup(pacc); 71 81 return 0; 72 82 }
Note:
See TracChangeset
for help on using the changeset viewer.