Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/vhc/addrmgm.c

    rad104e0 rce687bbe  
    4949typedef struct {
    5050        usb_address_t address;
     51        devman_handle_t devman_handle;
    5152        bool available;
    5253} address_info_t;
     
    6970                dev_address[i].address = i + 1;
    7071                dev_address[i].available = true;
     72                dev_address[i].devman_handle = 0;
    7173        }
    7274
     
    120122}
    121123
     124int bind_address(device_t *dev, usb_address_t address, devman_handle_t handle)
     125{
     126        if (address == DEFAULT_ADDRESS) {
     127                return EPERM;
     128        }
     129
     130        int rc = EPERM;
     131
     132        fibril_mutex_lock(&address_guard);
     133        usb_address_t i;
     134        for (i = 0; i < ADDRESS_COUNT; i++) {
     135                if (dev_address[i].address == address) {
     136                        if (dev_address[i].available) {
     137                                rc = ENOENT;
     138                                break;
     139                        }
     140
     141                        dev_address[i].devman_handle = handle;
     142                        rc = EOK;
     143                        break;
     144                }
     145        }
     146        fibril_mutex_unlock(&address_guard);
     147
     148        return rc;
     149}
     150
     151int tell_address(device_t *dev, devman_handle_t handle, usb_address_t *address)
     152{
     153        int rc = ENOENT;
     154
     155        fibril_mutex_lock(&address_guard);
     156        usb_address_t i;
     157        for (i = 0; i < ADDRESS_COUNT; i++) {
     158                if (dev_address[i].devman_handle == handle) {
     159                        *address = dev_address[i].address;
     160                        rc = EOK;
     161                        break;
     162                }
     163        }
     164        fibril_mutex_unlock(&address_guard);
     165
     166        return rc;
     167}
     168
    122169int release_address(device_t *dev, usb_address_t address)
    123170{
     
    138185
    139186                        dev_address[i].available = true;
     187                        dev_address[i].devman_handle = 0;
    140188                        rc = EOK;
    141189                        break;
Note: See TracChangeset for help on using the changeset viewer.