Rev 4243 | Rev 4395 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4243 | Rev 4307 | ||
---|---|---|---|
Line 48... | Line 48... | ||
48 | 48 | ||
49 | #include "packet.h" |
49 | #include "packet.h" |
50 | #include "packet_header.h" |
50 | #include "packet_header.h" |
51 | #include "packet_client.h" |
51 | #include "packet_client.h" |
52 | 52 | ||
53 | /** Obtains the packet from the packet server as the shared memory block. |
- | |
54 | * Creates the local packet mapping as well. |
- | |
55 | * @param phone The packet server module phone. Input parameter. |
- | |
56 | * @param packet The packet reference pointer to store the received packet reference. Output parameter. |
- | |
57 | * @param packet_id The packet identifier. Input parameter. |
- | |
58 | * @param size The packet total size in bytes. Input parameter. |
- | |
59 | * @returns EOK on success. |
- | |
60 | * \todo ipc_share_in_start() error? |
- | |
61 | * @returns Other error codes as defined for the pm_add() function. |
- | |
62 | */ |
- | |
63 | int packet_return( int phone, packet_ref packet, packet_id_t packet_id, size_t size ); |
- | |
64 | - | ||
65 | int packet_copy_data( packet_t packet, const void * data, size_t length ){ |
53 | int packet_copy_data( packet_t packet, const void * data, size_t length ){ |
66 | if( ! packet_is_valid( packet )) return EINVAL; |
54 | if( ! packet_is_valid( packet )) return EINVAL; |
67 | if( packet->data_start + length >= packet->length ) return ENOMEM; |
55 | if( packet->data_start + length >= packet->length ) return ENOMEM; |
68 | memcpy(( void * ) packet + packet->data_start, data, length ); |
56 | memcpy(( void * ) packet + packet->data_start, data, length ); |
69 | if( packet->data_start + length > packet->data_end ){ |
57 | if( packet->data_start + length > packet->data_end ){ |
Line 133... | Line 121... | ||
133 | bzero(( void * ) packet + packet->dest_addr + addr_len, packet->addr_len ); |
121 | bzero(( void * ) packet + packet->dest_addr + addr_len, packet->addr_len ); |
134 | } |
122 | } |
135 | return EOK; |
123 | return EOK; |
136 | } |
124 | } |
137 | 125 | ||
138 | int packet_translate( int phone, packet_ref packet, packet_id_t packet_id ){ |
- | |
139 | ERROR_DECLARE; |
- | |
140 | - | ||
141 | unsigned int size; |
- | |
142 | - | ||
143 | if( ! packet ) return EINVAL; |
- | |
144 | * packet = pm_find( packet_id ); |
- | |
145 | if( * packet ) return EOK; |
- | |
146 | ERROR_PROPAGATE( async_req_1_1( phone, NET_PACKET_GET_SIZE, packet_id, & size )); |
- | |
147 | return packet_return( phone, packet, packet_id, size ); |
- | |
148 | } |
- | |
149 | - | ||
150 | int packet_return( int phone, packet_ref packet, packet_id_t packet_id, size_t size ){ |
- | |
151 | ERROR_DECLARE; |
- | |
152 | - | ||
153 | aid_t message; |
- | |
154 | ipc_call_t answer; |
- | |
155 | ipcarg_t result; |
- | |
156 | - | ||
157 | message = async_send_1( phone, NET_PACKET_GET, packet_id, & answer ); |
- | |
158 | * packet = ( packet_t ) as_get_mappable_page( size ); |
- | |
159 | if( ERROR_OCCURRED( ipc_share_in_start_0_0( phone, * packet, size )) |
- | |
160 | || ERROR_OCCURRED( pm_add( * packet ))){ |
- | |
161 | munmap( * packet, size ); |
- | |
162 | async_wait_for( message, NULL ); |
- | |
163 | return ERROR_CODE; |
- | |
164 | } |
- | |
165 | async_wait_for( message, & result ); |
- | |
166 | return result; |
- | |
167 | } |
- | |
168 | - | ||
169 | packet_t packet_get_4( int phone, size_t max_content, size_t addr_len, size_t max_prefix, size_t max_suffix ){ |
- | |
170 | ERROR_DECLARE; |
- | |
171 | - | ||
172 | packet_id_t packet_id; |
- | |
173 | unsigned int size; |
- | |
174 | packet_t packet; |
- | |
175 | - | ||
176 | if( ERROR_OCCURRED( async_req_4_2( phone, NET_PACKET_CREATE_4, max_content, addr_len, max_prefix, max_suffix, ( ipcarg_t * ) & packet_id, & size )) |
- | |
177 | || ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size ))){ |
- | |
178 | return NULL; |
- | |
179 | } |
- | |
180 | return packet; |
- | |
181 | } |
- | |
182 | - | ||
183 | packet_t packet_get_1( int phone, size_t content ){ |
- | |
184 | ERROR_DECLARE; |
- | |
185 | - | ||
186 | packet_id_t packet_id; |
- | |
187 | unsigned int size; |
- | |
188 | packet_t packet; |
- | |
189 | - | ||
190 | if( ERROR_OCCURRED( async_req_1_2( phone, NET_PACKET_CREATE_1, content, ( ipcarg_t * ) & packet_id, & size )) |
- | |
191 | || ERROR_OCCURRED( packet_return( phone, & packet, packet_id, size ))){ |
- | |
192 | return NULL; |
- | |
193 | } |
- | |
194 | return packet; |
- | |
195 | } |
- | |
196 | - | ||
197 | void pq_release( int phone, packet_id_t packet_id ){ |
- | |
198 | async_msg_1( phone, NET_PACKET_RELEASE, packet_id ); |
- | |
199 | } |
- | |
200 | - | ||
201 | /** @} |
126 | /** @} |
202 | */ |
127 | */ |