source: mainline/uspace/drv/uhci/utils/hc_synchronizer.c@ 15be932

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 15be932 was 15be932, checked in by Jan Vesely <jano.vesely@…>, 14 years ago

Begin work on usb identification

Add uhci_setup_sync function to support blocking calls

  • Property mode set to 100644
File size: 1.5 KB
Line 
1#include "debug.h"
2#include "hc_synchronizer.h"
3#include "uhci.h"
4
5void sync_init(sync_value_t *value)
6{
7 assert(value);
8 fibril_semaphore_initialize(&value->done, 0);
9}
10/*----------------------------------------------------------------------------*/
11void sync_wait_for(sync_value_t *value)
12{
13 assert( value );
14 fibril_semaphore_down(&value->done);
15}
16/*----------------------------------------------------------------------------*/
17void sync_in_callback(
18 device_t *device, usb_transaction_outcome_t result, size_t size, void *arg)
19{
20 sync_value_t *value = arg;
21 assert(value);
22 value->size = size;
23 value->result = result;
24 fibril_semaphore_up(&value->done);
25}
26/*----------------------------------------------------------------------------*/
27void sync_out_callback(
28 device_t *device, usb_transaction_outcome_t result, void *arg)
29{
30 sync_value_t *value = arg;
31 assert(value);
32 value->result = result;
33 fibril_semaphore_up(&value->done);
34}
35/*----------------------------------------------------------------------------*/
36int uhci_setup_sync(
37 device_t *hc,
38 usb_target_t target,
39 usb_transfer_type_t type,
40 void *buffer, size_t size,
41 sync_value_t *result
42 )
43{
44 assert(result);
45 sync_init(result);
46
47 int ret =
48 uhci_setup(hc, target, type, buffer, size,
49 sync_out_callback, (void*)result);
50
51 if (ret) {
52 uhci_print_error("sync setup transaction failed(%d).\n", ret);
53 return ret;
54 }
55
56 uhci_print_verbose("setup transaction sent, waiting to complete.\n");
57 sync_wait_for(result);
58
59 return ret;
60}
Note: See TracBrowser for help on using the repository browser.