Changeset 0cc4313 in mainline
- Timestamp:
- 2007-11-22T15:50:24Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d40a8ff
- Parents:
- 8498915
- Location:
- uspace
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tetris/screen.c
r8498915 r0cc4313 96 96 void clear_screen(void) 97 97 { 98 async_msg (con_phone, CONSOLE_CLEAR, 0);99 moveto(0, 0);98 async_msg_0(con_phone, CONSOLE_CLEAR); 99 moveto(0, 0); 100 100 } 101 101 … … 108 108 109 109 resume_normal(); 110 async_msg (con_phone, CONSOLE_CLEAR, 0);110 async_msg_0(con_phone, CONSOLE_CLEAR); 111 111 curscore = -1; 112 112 memset((char *)curscreen, 0, sizeof(curscreen)); … … 120 120 { 121 121 con_phone = get_fd_phone(1); 122 async_msg (con_phone, CONSOLE_CURSOR_VISIBILITY, 0);122 async_msg_1(con_phone, CONSOLE_CURSOR_VISIBILITY, 0); 123 123 resume_normal(); 124 124 scr_clear(); … … 132 132 static void fflush(void) 133 133 { 134 async_msg (con_phone, CONSOLE_FLUSH, 0);134 async_msg_0(con_phone, CONSOLE_FLUSH); 135 135 } 136 136 … … 139 139 static int get_display_size(winsize_t *ws) 140 140 { 141 return async_req_2(con_phone, CONSOLE_GETSIZE, 0, 0, &ws->ws_row, &ws->ws_col); 141 return async_req_0_2(con_phone, CONSOLE_GETSIZE, &ws->ws_row, 142 &ws->ws_col); 142 143 } 143 144 -
uspace/lib/libc/generic/async.c
r8498915 r0cc4313 102 102 #include <sys/time.h> 103 103 #include <arch/barrier.h> 104 #include <bool.h> 104 105 105 106 atomic_t async_futex = FUTEX_INITIALIZER; … … 176 177 * disabled. 177 178 */ 178 __thread int in_interrupt_handler;179 __thread int _in_interrupt_handler; 179 180 180 181 static void default_client_connection(ipc_callid_t callid, ipc_call_t *call); … … 190 191 */ 191 192 static async_client_conn_t interrupt_received = default_interrupt_received; 193 194 /* 195 * Getter for _in_interrupt_handler. We need to export the value of this thread 196 * local variable to other modules, but the binutils 2.18 linkers die on an 197 * attempt to export this symbol in the header file. For now, consider this as a 198 * workaround. 199 */ 200 bool in_interrupt_handler(void) 201 { 202 return _in_interrupt_handler; 203 } 192 204 193 205 #define CONN_HASH_TABLE_CHAINS 32 … … 518 530 /* Unrouted call - do some default behaviour */ 519 531 if ((callid & IPC_CALLID_NOTIFICATION)) { 520 in_interrupt_handler = 1;532 _in_interrupt_handler = 1; 521 533 (*interrupt_received)(callid, call); 522 in_interrupt_handler = 0;534 _in_interrupt_handler = 0; 523 535 return; 524 536 } … … 717 729 * @param arg1 Service-defined payload argument. 718 730 * @param arg2 Service-defined payload argument. 731 * @param arg3 Service-defined payload argument. 732 * @param arg4 Service-defined payload argument. 719 733 * @param dataptr If non-NULL, storage where the reply data will be 720 734 * stored. … … 722 736 * @return Hash of the sent message. 723 737 */ 724 aid_t async_send_ 2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,725 ipc _call_t *dataptr)738 aid_t async_send_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 739 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr) 726 740 { 727 741 amsg_t *msg; 728 742 729 if ( in_interrupt_handler) {743 if (_in_interrupt_handler) { 730 744 printf("Cannot send asynchronous request in interrupt " 731 745 "handler.\n"); … … 740 754 msg->wdata.active = 1; 741 755 742 ipc_call_async_2(phoneid, method, arg1, arg2, msg, reply_received, 1); 756 ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, msg, 757 reply_received, 1); 743 758 744 759 return (aid_t) msg; … … 755 770 * @param arg2 Service-defined payload argument. 756 771 * @param arg3 Service-defined payload argument. 772 * @param arg4 Service-defined payload argument. 773 * @param arg5 Service-defined payload argument. 757 774 * @param dataptr If non-NULL, storage where the reply data will be 758 775 * stored. … … 760 777 * @return Hash of the sent message. 761 778 */ 762 aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 763 ipcarg_t arg3, ipc_call_t *dataptr) 779 aid_t async_send_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, 780 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, 781 ipc_call_t *dataptr) 764 782 { 765 783 amsg_t *msg; 766 784 767 if ( in_interrupt_handler) {785 if (_in_interrupt_handler) { 768 786 printf("Cannot send asynchronous request in interrupt " 769 787 "handler.\n"); … … 777 795 /* We may sleep in next method, but it will use its own mechanism */ 778 796 msg->wdata.active = 1; 779 780 ipc_call_async_ 3(phoneid, method, arg1, arg2, arg3, msg, reply_received,781 1);797 798 ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, msg, 799 reply_received, 1); 782 800 783 801 return (aid_t) msg; … … 867 885 amsg_t *msg; 868 886 869 if ( in_interrupt_handler) {887 if (_in_interrupt_handler) { 870 888 printf("Cannot call async_usleep in interrupt handler.\n"); 871 889 _exit(1); … … 909 927 } 910 928 911 /* Primitive functions for simple communication */ 912 void async_msg_3(int phoneid, ipcarg_t method, ipcarg_t arg1, 913 ipcarg_t arg2, ipcarg_t arg3) 914 { 915 ipc_call_async_3(phoneid, method, arg1, arg2, arg3, NULL, NULL, 916 !in_interrupt_handler); 917 } 918 919 void async_msg_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2) 920 { 921 ipc_call_async_2(phoneid, method, arg1, arg2, NULL, NULL, 922 !in_interrupt_handler); 929 /** Pseudo-synchronous message sending - fast version. 930 * 931 * Send message asynchronously and return only after the reply arrives. 932 * 933 * This function can only transfer 4 register payload arguments. For 934 * transferring more arguments, see the slower async_req_slow(). 935 * 936 * @param phoneid Hash of the phone through which to make the call. 937 * @param method Method of the call. 938 * @param arg1 Service-defined payload argument. 939 * @param arg2 Service-defined payload argument. 940 * @param arg3 Service-defined payload argument. 941 * @param arg4 Service-defined payload argument. 942 * @param r1 If non-NULL, storage for the 1st reply argument. 943 * @param r2 If non-NULL, storage for the 2nd reply argument. 944 * @param r3 If non-NULL, storage for the 3rd reply argument. 945 * @param r4 If non-NULL, storage for the 4th reply argument. 946 * @param r5 If non-NULL, storage for the 5th reply argument. 947 * @return Return code of the reply or a negative error code. 948 */ 949 ipcarg_t async_req_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 950 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t *r1, ipcarg_t *r2, 951 ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5) 952 { 953 ipc_call_t result; 954 ipcarg_t rc; 955 956 aid_t eid = async_send_4(phoneid, method, arg1, arg2, arg3, arg4, 957 &result); 958 async_wait_for(eid, &rc); 959 if (r1) 960 *r1 = IPC_GET_ARG1(result); 961 if (r2) 962 *r2 = IPC_GET_ARG2(result); 963 if (r3) 964 *r3 = IPC_GET_ARG3(result); 965 if (r4) 966 *r4 = IPC_GET_ARG4(result); 967 if (r5) 968 *r5 = IPC_GET_ARG5(result); 969 return rc; 970 } 971 972 /** Pseudo-synchronous message sending - slow version. 973 * 974 * Send message asynchronously and return only after the reply arrives. 975 * 976 * @param phoneid Hash of the phone through which to make the call. 977 * @param method Method of the call. 978 * @param arg1 Service-defined payload argument. 979 * @param arg2 Service-defined payload argument. 980 * @param arg3 Service-defined payload argument. 981 * @param arg4 Service-defined payload argument. 982 * @param arg5 Service-defined payload argument. 983 * @param r1 If non-NULL, storage for the 1st reply argument. 984 * @param r2 If non-NULL, storage for the 2nd reply argument. 985 * @param r3 If non-NULL, storage for the 3rd reply argument. 986 * @param r4 If non-NULL, storage for the 4th reply argument. 987 * @param r5 If non-NULL, storage for the 5th reply argument. 988 * @return Return code of the reply or a negative error code. 989 */ 990 ipcarg_t async_req_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, 991 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, ipcarg_t *r1, 992 ipcarg_t *r2, ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5) 993 { 994 ipc_call_t result; 995 ipcarg_t rc; 996 997 aid_t eid = async_send_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, 998 &result); 999 async_wait_for(eid, &rc); 1000 if (r1) 1001 *r1 = IPC_GET_ARG1(result); 1002 if (r2) 1003 *r2 = IPC_GET_ARG2(result); 1004 if (r3) 1005 *r3 = IPC_GET_ARG3(result); 1006 if (r4) 1007 *r4 = IPC_GET_ARG4(result); 1008 if (r5) 1009 *r5 = IPC_GET_ARG5(result); 1010 return rc; 923 1011 } 924 1012 -
uspace/lib/libc/generic/io/stream.c
r8498915 r0cc4313 71 71 72 72 while (i < count) { 73 if (async_req_ 2(streams[0].phone, CONSOLE_GETCHAR, 0, 0,&r0,73 if (async_req_0_2(streams[0].phone, CONSOLE_GETCHAR, &r0, 74 74 &r1) < 0) { 75 75 return -1; … … 85 85 86 86 for (i = 0; i < count; i++) 87 async_msg (streams[1].phone, CONSOLE_PUTCHAR,87 async_msg_1(streams[1].phone, CONSOLE_PUTCHAR, 88 88 ((const char *) buf)[i]); 89 89 -
uspace/lib/libc/include/async.h
r8498915 r0cc4313 40 40 #include <sys/time.h> 41 41 #include <atomic.h> 42 #include <bool.h> 42 43 43 44 typedef ipc_callid_t aid_t; … … 55 56 } 56 57 57 aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 58 /* 59 * User-friendly wrappers for async_send_fast() and async_send_slow(). The 60 * macros are in the form async_send_m(), where m denotes the number of payload 61 * arguments. Each macros chooses between the fast and the slow version based 62 * on m. 63 */ 64 65 #define async_send_0(phoneid, method, dataptr) \ 66 async_send_fast((phoneid), (method), 0, 0, 0, 0, (dataptr)) 67 #define async_send_1(phoneid, method, arg1, dataptr) \ 68 async_send_fast((phoneid), (method), (arg1), 0, 0, 0, (dataptr)) 69 #define async_send_2(phoneid, method, arg1, arg2, dataptr) \ 70 async_send_fast((phoneid), (method), (arg1), (arg2), 0, 0, (dataptr)) 71 #define async_send_3(phoneid, method, arg1, arg2, arg3, dataptr) \ 72 async_send_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (dataptr)) 73 #define async_send_4(phoneid, method, arg1, arg2, arg3, arg4, dataptr) \ 74 async_send_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 75 (dataptr)) 76 #define async_send_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, dataptr) \ 77 async_send_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 78 (arg5), (dataptr)) 79 80 extern aid_t async_send_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 81 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr); 82 extern aid_t async_send_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, 83 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, 58 84 ipc_call_t *dataptr); 59 aid_t async_send_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 60 ipcarg_t arg3, ipc_call_t *dataptr); 61 void async_wait_for(aid_t amsgid, ipcarg_t *result); 62 int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout); 63 64 /** Pseudo-synchronous message sending 65 * 66 * Send message through IPC, wait in the event loop, until it is received 67 * 68 * @return Return code of message 69 */ 70 static inline ipcarg_t async_req_2(int phoneid, ipcarg_t method, ipcarg_t arg1, 71 ipcarg_t arg2, ipcarg_t *r1, ipcarg_t *r2) 72 { 73 ipc_call_t result; 74 ipcarg_t rc; 75 76 aid_t eid = async_send_2(phoneid, method, arg1, arg2, &result); 77 async_wait_for(eid, &rc); 78 if (r1) 79 *r1 = IPC_GET_ARG1(result); 80 if (r2) 81 *r2 = IPC_GET_ARG2(result); 82 return rc; 83 } 84 #define async_req(phoneid, method, arg1, r1) \ 85 async_req_2(phoneid, method, arg1, 0, r1, 0) 86 87 static inline ipcarg_t async_req_3(int phoneid, ipcarg_t method, ipcarg_t arg1, 88 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *r1, ipcarg_t *r2, ipcarg_t *r3) 89 { 90 ipc_call_t result; 91 ipcarg_t rc; 92 93 aid_t eid = async_send_3(phoneid, method, arg1, arg2, arg3, &result); 94 async_wait_for(eid, &rc); 95 if (r1) 96 *r1 = IPC_GET_ARG1(result); 97 if (r2) 98 *r2 = IPC_GET_ARG2(result); 99 if (r3) 100 *r3 = IPC_GET_ARG3(result); 101 return rc; 102 } 103 85 extern void async_wait_for(aid_t amsgid, ipcarg_t *result); 86 extern int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, 87 suseconds_t timeout); 104 88 105 89 fid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid, … … 108 92 void async_create_manager(void); 109 93 void async_destroy_manager(void); 110 void async_set_client_connection(async_client_conn_t conn);111 void async_set_interrupt_received(async_client_conn_t conn);112 94 int _async_init(void); 113 95 114 115 /* Primitve functions for IPC communication */ 116 void async_msg_3(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, 117 ipcarg_t arg3); 118 void async_msg_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2); 119 #define async_msg(ph, m, a1) async_msg_2(ph, m, a1, 0) 96 extern void async_set_client_connection(async_client_conn_t conn); 97 extern void async_set_interrupt_received(async_client_conn_t conn); 98 99 /* Wrappers for simple communication */ 100 #define async_msg_0(phone, method) \ 101 ipc_call_async_0((phone), (method), NULL, NULL, !in_interrupt_handler()) 102 #define async_msg_1(phone, method, arg1) \ 103 ipc_call_async_1((phone), (method), (arg1), NULL, NULL, \ 104 !in_interrupt_handler()) 105 #define async_msg_2(phone, method, arg1, arg2) \ 106 ipc_call_async_2((phone), (method), (arg1), (arg2), NULL, NULL, \ 107 !in_interrupt_handler()) 108 #define async_msg_3(phone, method, arg1, arg2, arg3) \ 109 ipc_call_async_3((phone), (method), (arg1), (arg2), (arg3), NULL, NULL, \ 110 !in_interrupt_handler()) 111 #define async_msg_4(phone, method, arg1, arg2, arg3, arg4) \ 112 ipc_call_async_4((phone), (method), (arg1), (arg2), (arg3), (arg4), NULL, \ 113 NULL, !in_interrupt_handler()) 114 #define async_msg_5(phone, method, arg1, arg2, arg3, arg4, arg5) \ 115 ipc_call_async_5((phone), (method), (arg1), (arg2), (arg3), (arg4), \ 116 (arg5), NULL, NULL, !in_interrupt_handler()) 117 118 /* 119 * User-friendly wrappers for async_req_fast() and async_req_slow(). The macros 120 * are in the form async_req_m_n(), where m is the number of payload arguments 121 * and n is the number of return arguments. The macros decidce between the fast 122 * and slow verion based on m. 123 */ 124 #define async_req_0_0(phoneid, method) \ 125 async_req_fast((phoneid), (method), 0, 0, 0, 0, NULL, NULL, NULL, NULL, \ 126 NULL) 127 #define async_req_0_1(phoneid, method, r1) \ 128 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), NULL, NULL, NULL, \ 129 NULL) 130 #define async_req_0_2(phoneid, method, r1, r2) \ 131 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), NULL, NULL, \ 132 NULL) 133 #define async_req_0_3(phoneid, method, r1, r2, r3) \ 134 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), (r3), NULL, \ 135 NULL) 136 #define async_req_0_4(phoneid, method, r1, r2, r3, r4) \ 137 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), (r3), (r4), \ 138 NULL) 139 #define async_req_0_5(phoneid, method, r1, r2, r3, r4, r5) \ 140 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), (r3), (r4), \ 141 (r5)) 142 #define async_req_1_0(phoneid, method, arg1) \ 143 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, NULL, NULL, NULL, \ 144 NULL, NULL) 145 #define async_req_1_1(phoneid, method, arg1, rc1) \ 146 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), NULL, NULL, \ 147 NULL, NULL) 148 #define async_req_1_2(phoneid, method, arg1, rc1, rc2) \ 149 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), NULL, \ 150 NULL, NULL) 151 #define async_req_1_3(phoneid, method, arg1, rc1, rc2, rc3) \ 152 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), (rc3), \ 153 NULL, NULL) 154 #define async_req_1_4(phoneid, method, arg1, rc1, rc2, rc3, rc4) \ 155 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), (rc3), \ 156 (rc4), NULL) 157 #define async_req_1_5(phoneid, method, arg1, rc1, rc2, rc3, rc4, rc5) \ 158 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), (rc3), \ 159 (rc4), (rc5)) 160 #define async_req_2_0(phoneid, method, arg1, arg2) \ 161 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, NULL, NULL, \ 162 NULL, NULL, NULL) 163 #define async_req_2_1(phoneid, method, arg1, arg2, rc1) \ 164 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), NULL, \ 165 NULL, NULL, NULL) 166 #define async_req_2_2(phoneid, method, arg1, arg2, rc1, rc2) \ 167 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 168 NULL, NULL, NULL) 169 #define async_req_2_3(phoneid, method, arg1, arg2, rc1, rc2, rc3) \ 170 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 171 (rc3), NULL, NULL) 172 #define async_req_2_4(phoneid, method, arg1, arg2, rc1, rc2, rc3, rc4) \ 173 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 174 (rc3), (rc4), NULL) 175 #define async_req_2_5(phoneid, method, arg1, arg2, rc1, rc2, rc3, rc4, rc5) \ 176 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 177 (rc3), (rc4), (rc5)) 178 #define async_req_3_0(phoneid, method, arg1, arg2, arg3) \ 179 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, NULL, NULL, \ 180 NULL, NULL, NULL) 181 #define async_req_3_1(phoneid, method, arg1, arg2, arg3, rc1) \ 182 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 183 NULL, NULL, NULL, NULL) 184 #define async_req_3_2(phoneid, method, arg1, arg2, arg3, rc1, rc2) \ 185 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 186 (rc2), NULL, NULL, NULL) 187 #define async_req_3_3(phoneid, method, arg1, arg2, arg3, rc1, rc2, rc3) \ 188 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 189 (rc2), (rc3), NULL, NULL) 190 #define async_req_3_4(phoneid, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4) \ 191 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 192 (rc2), (rc3), (rc4), NULL) 193 #define async_req_3_5(phoneid, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4, \ 194 rc5) \ 195 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 196 (rc2), (rc3), (rc4), (rc5)) 197 #define async_req_4_0(phoneid, method, arg1, arg2, arg3, arg4) \ 198 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), NULL, \ 199 NULL, NULL, NULL, NULL) 200 #define async_req_4_1(phoneid, method, arg1, arg2, arg3, arg4, rc1) \ 201 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), (rc1), \ 202 NULL, NULL, NULL, NULL) 203 #define async_req_4_2(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2) \ 204 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), (rc1), \ 205 (rc2), NULL, NULL, NULL) 206 #define async_req_4_3(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3) \ 207 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), (rc1), \ 208 (rc2), (rc3), NULL, NULL) 209 #define async_req_4_4(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 210 rc4) \ 211 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 212 (rc1), (rc2), (rc3), (rc4), NULL) 213 #define async_req_4_5(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 214 rc4, rc5) \ 215 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 216 (rc1), (rc2), (rc3), (rc4), (rc5)) 217 #define async_req_5_0(phoneid, method, arg1, arg2, arg3, arg4, arg5) \ 218 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 219 (arg5), NULL, NULL, NULL, NULL, NULL) 220 #define async_req_5_1(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1) \ 221 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 222 (arg5), (rc1), NULL, NULL, NULL, NULL) 223 #define async_req_5_2(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2) \ 224 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 225 (arg5), (rc1), (rc2), NULL, NULL, NULL) 226 #define async_req_5_3(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 227 rc3) \ 228 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 229 (arg5), (rc1), (rc2), (rc3), NULL, NULL) 230 #define async_req_5_4(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 231 rc3, rc4) \ 232 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 233 (arg5), (rc1), (rc2), (rc3), (rc4), NULL) 234 #define async_req_5_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 235 rc3, rc4, rc5) \ 236 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 237 (arg5), (rc1), (rc2), (rc3), (rc4), (rc5)) 238 239 extern ipcarg_t async_req_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 240 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t *r1, ipcarg_t *r2, 241 ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5); 242 extern ipcarg_t async_req_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, 243 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, ipcarg_t *r1, 244 ipcarg_t *r2, ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5); 120 245 121 246 static inline void async_serialize_start(void) … … 129 254 } 130 255 256 extern bool in_interrupt_handler(void); 257 131 258 extern atomic_t async_futex; 259 132 260 #endif 133 261 -
uspace/srv/console/console.c
r8498915 r0cc4313 106 106 static void clrscr(void) 107 107 { 108 async_msg (fb_info.phone, FB_CLEAR, 0);108 async_msg_0(fb_info.phone, FB_CLEAR); 109 109 } 110 110 111 111 static void curs_visibility(int v) 112 112 { 113 async_msg (fb_info.phone, FB_CURSOR_VISIBILITY, v);113 async_msg_1(fb_info.phone, FB_CURSOR_VISIBILITY, v); 114 114 } 115 115 … … 177 177 scr->top_line = (scr->top_line + 1) % scr->size_y; 178 178 if (console == active_console) 179 async_msg (fb_info.phone, FB_SCROLL, 1);179 async_msg_1(fb_info.phone, FB_SCROLL, 1); 180 180 } 181 181 … … 197 197 198 198 /* Save screen */ 199 newpmap = async_req (fb_info.phone, FB_VP2PIXMAP, 0, NULL);199 newpmap = async_req_0_0(fb_info.phone, FB_VP2PIXMAP); 200 200 if (newpmap < 0) 201 201 return -1; … … 205 205 async_msg_2(fb_info.phone, FB_VP_DRAW_PIXMAP, 0, oldpixmap); 206 206 /* Drop old pixmap */ 207 async_msg (fb_info.phone, FB_DROP_PIXMAP, oldpixmap);207 async_msg_1(fb_info.phone, FB_DROP_PIXMAP, oldpixmap); 208 208 } 209 209 … … 267 267 } 268 268 /* This call can preempt, but we are already at the end */ 269 rc = async_req_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, 270 NULL); 269 rc = async_req_0_0(fb_info.phone, FB_DRAW_TEXT_DATA); 271 270 } 272 271 … … 416 415 /* Send message to fb */ 417 416 if (consnum == active_console) { 418 async_msg (fb_info.phone, FB_CLEAR, 0);417 async_msg_0(fb_info.phone, FB_CLEAR); 419 418 } 420 419 … … 435 434 case CONSOLE_FLUSH: 436 435 if (consnum == active_console) 437 async_req_2(fb_info.phone, FB_FLUSH, 0, 0, 438 NULL, NULL); 436 async_req_0_0(fb_info.phone, FB_FLUSH); 439 437 break; 440 438 case CONSOLE_SET_STYLE: … … 509 507 gcons_init(fb_info.phone); 510 508 /* Synchronize, the gcons can have something in queue */ 511 async_req (fb_info.phone, FB_FLUSH, 0, NULL);509 async_req_0_0(fb_info.phone, FB_FLUSH); 512 510 /* Enable double buffering */ 513 511 async_msg_2(fb_info.phone, FB_VIEWPORT_DB, (sysarg_t) -1, 1); 514 512 515 async_req_ 2(fb_info.phone, FB_GET_CSIZE, 0, 0, &fb_info.rows,513 async_req_0_2(fb_info.phone, FB_GET_CSIZE, &fb_info.rows, 516 514 &fb_info.cols); 517 515 set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND); … … 540 538 PROTO_READ | PROTO_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0); 541 539 if (!interbuffer) { 542 if (async_req_3(fb_info.phone, IPC_M_AS_AREA_SEND, 543 (ipcarg_t) interbuffer, 0, AS_AREA_READ, NULL, NULL, 544 NULL) != 0) { 540 if (async_req_3_0(fb_info.phone, IPC_M_AS_AREA_SEND, 541 (ipcarg_t) interbuffer, 0, AS_AREA_READ) != 0) { 545 542 munmap(interbuffer, 546 543 sizeof(keyfield_t) * fb_info.cols * fb_info.rows); -
uspace/srv/console/gcons.c
r8498915 r0cc4313 82 82 static void vp_switch(int vp) 83 83 { 84 async_msg (fbphone,FB_VIEWPORT_SWITCH, vp);84 async_msg_1(fbphone,FB_VIEWPORT_SWITCH, vp); 85 85 } 86 86 87 87 /** Create view port */ 88 static int vp_create(unsigned int x, unsigned int y, 89 unsigned int width,unsigned int height)90 { 91 return async_req_2 (fbphone, FB_VIEWPORT_CREATE,92 (x << 16) | y, (width << 16) | height, NULL, NULL);88 static int vp_create(unsigned int x, unsigned int y, unsigned int width, 89 unsigned int height) 90 { 91 return async_req_2_0(fbphone, FB_VIEWPORT_CREATE, (x << 16) | y, 92 (width << 16) | height); 93 93 } 94 94 95 95 static void clear(void) 96 96 { 97 async_msg (fbphone, FB_CLEAR, 0);97 async_msg_0(fbphone, FB_CLEAR); 98 98 } 99 99 … … 119 119 if (ic_pixmaps[state] != -1) 120 120 async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum], 121 121 ic_pixmaps[state]); 122 122 123 123 if (state != CONS_DISCONNECTED && state != CONS_KERNEL && … … 141 141 redraw_state(i); 142 142 if (animation != -1) 143 async_msg (fbphone, FB_ANIM_START, animation);143 async_msg_1(fbphone, FB_ANIM_START, animation); 144 144 } else { 145 145 if (console_state[active_console] == CONS_DISCONNECTED_SEL) … … 225 225 226 226 if (animation != -1) 227 async_msg (fbphone, FB_ANIM_STOP, animation);227 async_msg_1(fbphone, FB_ANIM_STOP, animation); 228 228 229 229 active_console = KERNEL_CONSOLE; /* Set to kernel console */ … … 317 317 /* Create area */ 318 318 shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 319 319 MAP_ANONYMOUS, 0, 0); 320 320 if (shm == MAP_FAILED) 321 321 return; … … 323 323 memcpy(shm, logo, size); 324 324 /* Send area */ 325 rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL, 326 NULL); 325 rc = async_req_1_0(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm); 327 326 if (rc) 328 327 goto exit; 329 rc = async_req_3 (fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0,330 PROTO_READ, NULL, NULL, NULL);328 rc = async_req_3_0(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, 329 PROTO_READ); 331 330 if (rc) 332 331 goto drop; … … 335 334 drop: 336 335 /* Drop area */ 337 async_msg (fbphone, FB_DROP_SHM, 0);336 async_msg_0(fbphone, FB_DROP_SHM); 338 337 exit: 339 338 /* Remove area */ … … 357 356 clear(); 358 357 draw_pixmap(_binary_helenos_ppm_start, 359 358 (size_t) &_binary_helenos_ppm_size, xres - 66, 2); 360 359 draw_pixmap(_binary_nameic_ppm_start, 361 362 363 for (i = 0; i < CONSOLE_COUNT; i++)360 (size_t) &_binary_nameic_ppm_size, 5, 17); 361 362 for (i = 0; i < CONSOLE_COUNT; i++) 364 363 redraw_state(i); 365 364 vp_switch(console_vp); … … 380 379 /* Create area */ 381 380 shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 382 381 MAP_ANONYMOUS, 0, 0); 383 382 if (shm == MAP_FAILED) 384 383 return -1; … … 386 385 memcpy(shm, data, size); 387 386 /* Send area */ 388 rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL, 389 NULL); 387 rc = async_req_1_0(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm); 390 388 if (rc) 391 389 goto exit; 392 rc = async_req_3 (fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0,393 PROTO_READ, NULL, NULL, NULL);390 rc = async_req_3_0(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, 391 PROTO_READ); 394 392 if (rc) 395 393 goto drop; 396 394 397 395 /* Obtain pixmap */ 398 rc = async_req (fbphone, FB_SHM2PIXMAP, 0, NULL);396 rc = async_req_0_0(fbphone, FB_SHM2PIXMAP); 399 397 if (rc < 0) 400 398 goto drop; … … 402 400 drop: 403 401 /* Drop area */ 404 async_msg (fbphone, FB_DROP_SHM, 0);402 async_msg_0(fbphone, FB_DROP_SHM); 405 403 exit: 406 404 /* Remove area */ … … 424 422 int pm; 425 423 426 an = async_req(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE], 427 NULL); 424 an = async_req_1_0(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE]); 428 425 if (an < 0) 429 426 return; 430 427 431 428 pm = make_pixmap(_binary_anim_1_ppm_start, 432 429 (int) &_binary_anim_1_ppm_size); 433 430 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 434 431 435 432 pm = make_pixmap(_binary_anim_2_ppm_start, 436 433 (int) &_binary_anim_2_ppm_size); 437 434 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 438 435 439 436 pm = make_pixmap(_binary_anim_3_ppm_start, 440 437 (int) &_binary_anim_3_ppm_size); 441 438 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 442 439 443 440 pm = make_pixmap(_binary_anim_4_ppm_start, 444 441 (int) &_binary_anim_4_ppm_size); 445 442 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 446 443 447 async_msg (fbphone, FB_ANIM_START, an);444 async_msg_1(fbphone, FB_ANIM_START, an); 448 445 449 446 animation = an; … … 468 465 fbphone = phone; 469 466 470 rc = async_req_ 2(phone, FB_GET_RESOLUTION, 0, 0, &xres, &yres);467 rc = async_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres); 471 468 if (rc) 472 469 return; … … 478 475 /* Align width & height to character size */ 479 476 console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, 480 481 477 ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8), 478 ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16)); 482 479 if (console_vp < 0) 483 480 return; … … 487 484 for (i = 0; i < CONSOLE_COUNT; i++) { 488 485 cstatus_vp[i] = vp_create(status_start + CONSOLE_MARGIN + 489 490 486 i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP, 487 STATUS_WIDTH, STATUS_HEIGHT); 491 488 if (cstatus_vp[i] < 0) 492 489 return; … … 497 494 /* Initialize icons */ 498 495 ic_pixmaps[CONS_SELECTED] = 499 500 496 make_pixmap(_binary_cons_selected_ppm_start, 497 (int) &_binary_cons_selected_ppm_size); 501 498 ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start, 502 499 (int) &_binary_cons_idle_ppm_size); 503 500 ic_pixmaps[CONS_HAS_DATA] = 504 505 501 make_pixmap(_binary_cons_has_data_ppm_start, 502 (int) &_binary_cons_has_data_ppm_size); 506 503 ic_pixmaps[CONS_DISCONNECTED] = 507 508 504 make_pixmap(_binary_cons_idle_ppm_start, 505 (int) &_binary_cons_idle_ppm_size); 509 506 ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start, 510 507 (int) &_binary_cons_kernel_ppm_size); 511 508 ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED]; 512 509 -
uspace/srv/kbd/arch/ia32/src/mouse.c
r8498915 r0cc4313 95 95 if (buf.u.val.leftbtn ^ leftbtn) { 96 96 leftbtn = buf.u.val.leftbtn; 97 async_msg (phoneid, KBD_MS_LEFT, leftbtn);97 async_msg_1(phoneid, KBD_MS_LEFT, leftbtn); 98 98 } 99 99 if (buf.u.val.rightbtn & rightbtn) { 100 100 rightbtn = buf.u.val.middlebtn; 101 async_msg (phoneid, KBD_MS_RIGHT, rightbtn);101 async_msg_1(phoneid, KBD_MS_RIGHT, rightbtn); 102 102 } 103 103 if (buf.u.val.rightbtn & rightbtn) { 104 104 middlebtn = buf.u.val.middlebtn; 105 async_msg (phoneid, KBD_MS_MIDDLE, middlebtn);105 async_msg_1(phoneid, KBD_MS_MIDDLE, middlebtn); 106 106 } 107 107 x = bit9toint(buf.u.val.xsign, buf.u.val.x); 108 108 y = bit9toint(buf.u.val.ysign, buf.u.val.y); 109 109 if (x || y) 110 async_msg_2(phoneid, KBD_MS_MOVE, (ipcarg_t)x, (ipcarg_t)(-y)); 110 async_msg_2(phoneid, KBD_MS_MOVE, (ipcarg_t)x, 111 (ipcarg_t)(-y)); 111 112 } 112 113 } -
uspace/srv/kbd/generic/kbd.c
r8498915 r0cc4313 77 77 break; 78 78 79 async_msg (phone2cons, KBD_PUSHCHAR, chr);79 async_msg_1(phone2cons, KBD_PUSHCHAR, chr); 80 80 } 81 81 }
Note:
See TracChangeset
for help on using the changeset viewer.