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
RevLine 
[15be932]1#include "debug.h"
[92f924c8]2#include "hc_synchronizer.h"
[15be932]3#include "uhci.h"
[92f924c8]4
[7bd34e5]5void sync_init(sync_value_t *value)
6{
7 assert(value);
8 fibril_semaphore_initialize(&value->done, 0);
9}
10/*----------------------------------------------------------------------------*/
[92f924c8]11void sync_wait_for(sync_value_t *value)
12{
13 assert( value );
[7bd34e5]14 fibril_semaphore_down(&value->done);
[92f924c8]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;
[7bd34e5]24 fibril_semaphore_up(&value->done);
[92f924c8]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;
[7bd34e5]33 fibril_semaphore_up(&value->done);
[92f924c8]34}
[15be932]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.