Changes in / [e28d228:54b141a] in mainline


Ignore:
Location:
uspace
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhub/utils.c

    re28d228 r54b141a  
    186186                 */
    187187
    188                 /*
    189                  * WARNING: sample code, will not work out of the box.
    190                  * And does not contain code for checking for errors.
    191                  */
    192 #if 0
    193                 /*
    194                  * Before opening the port, we must acquire the default
    195                  * address.
    196                  */
    197                 usb_drv_reserve_default_address(hc);
    198 
    199                 usb_address_t new_device_address = usb_drv_request_address(hc);
    200 
    201                 // TODO: open the port
    202 
    203                 // TODO: send request for setting address to new_device_address
    204 
    205                 /*
    206                  * Once new address is set, we can release the default
    207                  * address.
    208                  */
    209                 usb_drv_release_default_address(hc);
    210 
    211                 /*
    212                  * Obtain descriptors and create match ids for devman.
    213                  */
    214 
    215                 // TODO: get device descriptors
    216 
    217                 // TODO: create match ids
    218 
    219                 // TODO: add child device
    220 
    221                 // child_device_register sets the device handle
    222                 // TODO: store it here
    223                 devman_handle_t new_device_handle = 0;
    224 
    225                 /*
    226                  * Inform the HC that the new device has devman handle
    227                  * assigned.
    228                  */
    229                 usb_drv_bind_address(hc, new_device_address, new_device_handle);
    230 
    231                 /*
    232                  * That's all.
    233                  */
    234 #endif
    235 
    236188
    237189                /*
  • uspace/drv/vhc/addrmgm.c

    re28d228 r54b141a  
    4949typedef struct {
    5050        usb_address_t address;
    51         devman_handle_t devman_handle;
    5251        bool available;
    5352} address_info_t;
     
    7069                dev_address[i].address = i + 1;
    7170                dev_address[i].available = true;
    72                 dev_address[i].devman_handle = 0;
    7371        }
    7472
     
    122120}
    123121
    124 int 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 
    151 int 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 
    169122int release_address(device_t *dev, usb_address_t address)
    170123{
     
    185138
    186139                        dev_address[i].available = true;
    187                         dev_address[i].devman_handle = 0;
    188140                        rc = EOK;
    189141                        break;
  • uspace/drv/vhc/conn.h

    re28d228 r54b141a  
    5252int request_address(device_t *, usb_address_t *);
    5353int release_address(device_t *, usb_address_t);
    54 int bind_address(device_t *, usb_address_t, devman_handle_t);
    5554
    56 int tell_address(device_t *, devman_handle_t, usb_address_t *);
    5755
    5856void default_connection_handler(device_t *, ipc_callid_t, ipc_call_t *);
  • uspace/drv/vhc/connhost.c

    re28d228 r54b141a  
    148148
    149149
     150static int get_address(device_t *dev, devman_handle_t handle,
     151    usb_address_t *address)
     152{
     153        return ENOTSUP;
     154}
     155
    150156static int interrupt_out(device_t *dev, usb_target_t target,
    151157    void *data, size_t size,
     
    220226
    221227usbhc_iface_t vhc_iface = {
    222         .tell_address = tell_address,
     228        .tell_address = get_address,
    223229
    224230        .reserve_default_address = reserve_default_address,
    225231        .release_default_address = release_default_address,
    226232        .request_address = request_address,
    227         .bind_address = bind_address,
    228233        .release_address = release_address,
    229234
  • uspace/lib/drv/generic/remote_usbhc.c

    re28d228 r54b141a  
    5555static void remote_usbhc_release_default_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
    5656static void remote_usbhc_request_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
    57 static void remote_usbhc_bind_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
    5857static void remote_usbhc_release_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
    5958//static void remote_usbhc(device_t *, void *, ipc_callid_t, ipc_call_t *);
     
    6968
    7069        remote_usbhc_request_address,
    71         remote_usbhc_bind_address,
    7270        remote_usbhc_release_address,
    7371
     
    199197                ipc_answer_1(callid, EOK, (ipcarg_t) address);
    200198        }
    201 }
    202 
    203 void remote_usbhc_bind_address(device_t *device, void *iface,
    204     ipc_callid_t callid, ipc_call_t *call)
    205 {
    206         usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
    207 
    208         if (!usb_iface->bind_address) {
    209                 ipc_answer_0(callid, ENOTSUP);
    210                 return;
    211         }
    212 
    213         usb_address_t address = (usb_address_t) IPC_GET_ARG1(*call);
    214         devman_handle_t handle = (devman_handle_t) IPC_GET_ARG2(*call);
    215 
    216         int rc = usb_iface->bind_address(device, address, handle);
    217 
    218         ipc_answer_0(callid, rc);
    219199}
    220200
  • uspace/lib/drv/include/usbhc_iface.h

    re28d228 r54b141a  
    137137        IPC_M_USBHC_REQUEST_ADDRESS,
    138138
    139         /** Bind USB address with devman handle.
    140          * Parameters:
    141          * - USB address
    142          * - devman handle
    143          * Answer:
    144          * - EOK - address binded
    145          * - ENOENT - address is not in use
    146          */
    147         IPC_M_USBHC_BIND_ADDRESS,
    148 
    149139        /** Release address in use.
    150140         * Arguments:
     
    233223        int (*release_default_address)(device_t *);
    234224        int (*request_address)(device_t *, usb_address_t *);
    235         int (*bind_address)(device_t *, usb_address_t, devman_handle_t);
    236225        int (*release_address)(device_t *, usb_address_t);
    237226
  • uspace/lib/usb/include/usb/usbdrv.h

    re28d228 r54b141a  
    4444int usb_drv_release_default_address(int);
    4545usb_address_t usb_drv_request_address(int);
    46 int usb_drv_bind_address(int, usb_address_t, devman_handle_t);
    4746int usb_drv_release_address(int, usb_address_t);
    4847
  • uspace/lib/usb/src/usbdrv.c

    re28d228 r54b141a  
    136136}
    137137
    138 /** Inform HC about binding address with devman handle.
    139  *
    140  * @param phone Open phone to host controller driver.
    141  * @param address Address to be binded.
    142  * @param handle Devman handle of the device.
    143  * @return Error code.
    144  */
    145 int usb_drv_bind_address(int phone, usb_address_t address,
    146     devman_handle_t handle)
    147 {
    148         int rc = async_req_2_0(phone, IPC_M_USBHC_BIND_ADDRESS,
    149             address, handle);
    150 
    151         return rc;
    152 }
    153 
    154138/** Inform HC about address release.
    155139 *
Note: See TracChangeset for help on using the changeset viewer.