Changeset e099f26 in mainline for uspace/lib/usb/src/pipes.c
- Timestamp:
- 2011-03-21T20:22:50Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c56c5b5b
- Parents:
- 4fb6d9ee (diff), 31b568e (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/pipes.c
r4fb6d9ee re099f26 42 42 #include <assert.h> 43 43 44 #define IPC_AGAIN_DELAY (1000 * 2) /* 2ms */ 45 44 46 /** Tell USB address assigned to given device. 45 47 * … … 150 152 } 151 153 152 my_address = get_my_address(parent_phone, dev); 153 if (my_address < 0) { 154 rc = my_address; 155 goto leave; 156 } 154 /* 155 * Asking for "my" address may require several attempts. 156 * That is because following scenario may happen: 157 * - parent driver (i.e. driver of parent device) announces new device 158 * and devman launches current driver 159 * - parent driver is preempted and thus does not send address-handle 160 * binding to HC driver 161 * - this driver gets here and wants the binding 162 * - the HC does not know the binding yet and thus it answers ENOENT 163 * So, we need to wait for the HC to learn the binding. 164 */ 165 do { 166 my_address = get_my_address(parent_phone, dev); 167 168 if (my_address == ENOENT) { 169 /* Be nice, let other fibrils run and try again. */ 170 async_usleep(IPC_AGAIN_DELAY); 171 } else if (my_address < 0) { 172 /* Some other problem, no sense trying again. */ 173 rc = my_address; 174 goto leave; 175 } 176 177 } while (my_address < 0); 157 178 158 179 rc = usb_device_connection_initialize(connection, … … 212 233 * A session is something inside what any communication occurs. 213 234 * It is expected that sessions would be started right before the transfer 214 * and ended - see usb_ endpoint_pipe_end_session() - after the last235 * and ended - see usb_pipe_end_session() - after the last 215 236 * transfer. 216 237 * The reason for this is that session actually opens some communication … … 223 244 * @return Error code. 224 245 */ 225 int usb_ endpoint_pipe_start_session(usb_endpoint_pipe_t *pipe)246 int usb_pipe_start_session(usb_pipe_t *pipe) 226 247 { 227 248 assert(pipe); 228 249 229 if (usb_ endpoint_pipe_is_session_started(pipe)) {250 if (usb_pipe_is_session_started(pipe)) { 230 251 return EBUSY; 231 252 } … … 244 265 /** Ends a session on the endpoint pipe. 245 266 * 246 * @see usb_ endpoint_pipe_start_session267 * @see usb_pipe_start_session 247 268 * 248 269 * @param pipe Endpoint pipe to end the session on. 249 270 * @return Error code. 250 271 */ 251 int usb_ endpoint_pipe_end_session(usb_endpoint_pipe_t *pipe)272 int usb_pipe_end_session(usb_pipe_t *pipe) 252 273 { 253 274 assert(pipe); 254 275 255 if (!usb_ endpoint_pipe_is_session_started(pipe)) {276 if (!usb_pipe_is_session_started(pipe)) { 256 277 return ENOENT; 257 278 } … … 275 296 * @return Whether @p pipe has opened a session. 276 297 */ 277 bool usb_ endpoint_pipe_is_session_started(usb_endpoint_pipe_t *pipe)298 bool usb_pipe_is_session_started(usb_pipe_t *pipe) 278 299 { 279 300 return (pipe->hc_phone >= 0);
Note:
See TracChangeset
for help on using the changeset viewer.