Changes in uspace/srv/net/structures/packet/packet_remote.c [7fb2ce3:aadf01e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/structures/packet/packet_remote.c
r7fb2ce3 raadf01e 60 60 * @returns Other error codes as defined for the async_share_in_start() function. 61 61 */ 62 int packet_return( int phone, packet_ref packet, packet_id_t packet_id, size_t size);62 int packet_return(int phone, packet_ref packet, packet_id_t packet_id, size_t size); 63 63 64 int packet_translate( int phone, packet_ref packet, packet_id_t packet_id){64 int packet_translate(int phone, packet_ref packet, packet_id_t packet_id){ 65 65 ERROR_DECLARE; 66 66 67 ipcarg_t 68 packet_t 67 ipcarg_t size; 68 packet_t next; 69 69 70 if( ! packet ) return EINVAL; 71 * packet = pm_find( packet_id ); 72 if( !( * packet )){ 73 ERROR_PROPAGATE( async_req_1_1( phone, NET_PACKET_GET_SIZE, packet_id, & size )); 74 ERROR_PROPAGATE( packet_return( phone, packet, packet_id, size )); 70 if(! packet){ 71 return EINVAL; 75 72 } 76 if(( ** packet ).next ){ 77 return packet_translate( phone, & next, ( ** packet ).next ); 73 *packet = pm_find(packet_id); 74 if(!(*packet)){ 75 ERROR_PROPAGATE(async_req_1_1(phone, NET_PACKET_GET_SIZE, packet_id, &size)); 76 ERROR_PROPAGATE(packet_return(phone, packet, packet_id, size)); 77 } 78 if((** packet).next){ 79 return packet_translate(phone, &next, (** packet).next); 78 80 }else return EOK; 79 81 } 80 82 81 int packet_return( int phone, packet_ref packet, packet_id_t packet_id, size_t size){83 int packet_return(int phone, packet_ref packet, packet_id_t packet_id, size_t size){ 82 84 ERROR_DECLARE; 83 85 84 aid_t 85 ipc_call_t 86 ipcarg_t 86 aid_t message; 87 ipc_call_t answer; 88 ipcarg_t result; 87 89 88 message = async_send_1( phone, NET_PACKET_GET, packet_id, & answer);89 * packet = ( packet_t ) as_get_mappable_page( size);90 if( ERROR_OCCURRED( async_share_in_start_0_0( phone, * packet, size))91 || ERROR_OCCURRED( pm_add( * packet))){92 munmap( * packet, size);93 async_wait_for( message, NULL);90 message = async_send_1(phone, NET_PACKET_GET, packet_id, &answer); 91 *packet = (packet_t) as_get_mappable_page(size); 92 if(ERROR_OCCURRED(async_share_in_start_0_0(phone, * packet, size)) 93 || ERROR_OCCURRED(pm_add(*packet))){ 94 munmap(*packet, size); 95 async_wait_for(message, NULL); 94 96 return ERROR_CODE; 95 97 } 96 async_wait_for( message, & result);98 async_wait_for(message, &result); 97 99 return result; 98 100 } 99 101 100 packet_t packet_get_4( int phone, size_t max_content, size_t addr_len, size_t max_prefix, size_t max_suffix){102 packet_t packet_get_4(int phone, size_t max_content, size_t addr_len, size_t max_prefix, size_t max_suffix){ 101 103 ERROR_DECLARE; 102 104 … … 105 107 packet_t packet; 106 108 107 if( ERROR_OCCURRED( async_req_4_2( phone, NET_PACKET_CREATE_4, max_content, addr_len, max_prefix, max_suffix, & packet_id, & size))){109 if(ERROR_OCCURRED(async_req_4_2(phone, NET_PACKET_CREATE_4, max_content, addr_len, max_prefix, max_suffix, &packet_id, &size))){ 108 110 return NULL; 109 111 } 110 packet = pm_find( packet_id);111 if( ! packet){112 if( ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size))){112 packet = pm_find(packet_id); 113 if(! packet){ 114 if(ERROR_OCCURRED(packet_return(phone, &packet, packet_id, size))){ 113 115 return NULL; 114 116 } … … 117 119 } 118 120 119 packet_t packet_get_1( int phone, size_t content){121 packet_t packet_get_1(int phone, size_t content){ 120 122 ERROR_DECLARE; 121 123 122 ipcarg_t 123 ipcarg_t 124 packet_t 124 ipcarg_t packet_id; 125 ipcarg_t size; 126 packet_t packet; 125 127 126 if( ERROR_OCCURRED( async_req_1_2( phone, NET_PACKET_CREATE_1, content, & packet_id, & size))){128 if(ERROR_OCCURRED(async_req_1_2(phone, NET_PACKET_CREATE_1, content, &packet_id, &size))){ 127 129 return NULL; 128 130 } 129 packet = pm_find( packet_id);130 if( ! packet){131 if( ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size))){131 packet = pm_find(packet_id); 132 if(! packet){ 133 if(ERROR_OCCURRED(packet_return(phone, &packet, packet_id, size))){ 132 134 return NULL; 133 135 } … … 136 138 } 137 139 138 void pq_release( int phone, packet_id_t packet_id){139 async_msg_1( phone, NET_PACKET_RELEASE, packet_id);140 void pq_release(int phone, packet_id_t packet_id){ 141 async_msg_1(phone, NET_PACKET_RELEASE, packet_id); 140 142 } 141 143
Note:
See TracChangeset
for help on using the changeset viewer.