Changeset bb70637 in mainline for uspace/drv/bus


Ignore:
Timestamp:
2013-01-26T23:35:12Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
35bc430
Parents:
3e23316
Message:

usb: Rework polling to accept either ep numbers or descriptions.

Switch usbhub and usbhid to new polling.

Location:
uspace/drv/bus/usb
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbhid/main.c

    r3e23316 rbb70637  
    8989         * This will create a separate fibril that will query the device
    9090         * for the data continuously. */
    91        rc = usb_device_auto_poll(dev,
     91        rc = usb_device_auto_poll_desc(dev,
    9292           /* Index of the polling pipe. */
    93            hid_dev->poll_pipe_index,
     93           hid_dev->poll_pipe_mapping->description,
    9494           /* Callback when data arrives. */
    9595           usb_hid_polling_callback,
    9696           /* How much data to request. */
    97            dev->pipes[hid_dev->poll_pipe_index].pipe.max_packet_size,
     97           hid_dev->poll_pipe_mapping->pipe.max_packet_size,
    9898           /* Delay */
    99            0,
     99           -1,
    100100           /* Callback when the polling ends. */
    101101           usb_hid_polling_ended_callback,
  • uspace/drv/bus/usb/usbhid/usbhid.c

    r3e23316 rbb70637  
    4141#include <usb/hid/hidreport.h>
    4242#include <usb/hid/request.h>
     43
    4344#include <errno.h>
     45#include <macros.h>
    4446#include <str_error.h>
    4547
     
    265267}
    266268
    267 static int usb_hid_check_pipes(usb_hid_dev_t *hid_dev, const usb_device_t *dev)
     269static int usb_hid_check_pipes(usb_hid_dev_t *hid_dev, usb_device_t *dev)
    268270{
    269271        assert(hid_dev);
     
    271273
    272274        static const struct {
    273                 unsigned ep_number;
     275                const usb_endpoint_description_t *desc;
    274276                const char* description;
    275277        } endpoints[] = {
    276                 {USB_HID_KBD_POLL_EP_NO, "Keyboard endpoint"},
    277                 {USB_HID_MOUSE_POLL_EP_NO, "Mouse endpoint"},
    278                 {USB_HID_GENERIC_POLL_EP_NO, "Generic HID endpoint"},
     278                {&usb_hid_kbd_poll_endpoint_description, "Keyboard endpoint"},
     279                {&usb_hid_mouse_poll_endpoint_description, "Mouse endpoint"},
     280                {&usb_hid_generic_poll_endpoint_description, "Generic HID endpoint"},
    279281        };
    280282
    281         for (unsigned i = 0; i < sizeof(endpoints)/sizeof(endpoints[0]); ++i) {
    282                 if (endpoints[i].ep_number >= dev->pipes_count) {
    283                         return EINVAL;
    284                 }
    285                 if (dev->pipes[endpoints[i].ep_number].present) {
     283        for (unsigned i = 0; i < ARRAY_SIZE(endpoints); ++i) {
     284                usb_endpoint_mapping_t *epm =
     285                    usb_device_get_mapped_ep_desc(dev, endpoints[i].desc);
     286                if (epm && epm->present) {
    286287                        usb_log_debug("Found: %s.\n", endpoints[i].description);
    287                         hid_dev->poll_pipe_index = endpoints[i].ep_number;
     288                        hid_dev->poll_pipe_mapping = epm;
    288289                        return EOK;
    289290                }
     
    352353        /* The USB device should already be initialized, save it in structure */
    353354        hid_dev->usb_dev = dev;
    354         hid_dev->poll_pipe_index = -1;
     355        hid_dev->poll_pipe_mapping = NULL;
    355356
    356357        int rc = usb_hid_check_pipes(hid_dev, dev);
     
    382383                    "boot protocol.\n");
    383384
    384                 switch (hid_dev->poll_pipe_index) {
    385                 case USB_HID_KBD_POLL_EP_NO:
     385                switch (hid_dev->poll_pipe_mapping->interface->interface_protocol) {
     386                case USB_HID_PROTOCOL_KEYBOARD:
    386387                        usb_log_info("Falling back to kbd boot protocol.\n");
    387388                        rc = usb_kbd_set_boot_protocol(hid_dev);
     
    390391                        }
    391392                        break;
    392                 case USB_HID_MOUSE_POLL_EP_NO:
     393                case USB_HID_PROTOCOL_MOUSE:
    393394                        usb_log_info("Falling back to mouse boot protocol.\n");
    394395                        rc = usb_mouse_set_boot_protocol(hid_dev);
     
    398399                        break;
    399400                default:
    400                         assert(hid_dev->poll_pipe_index
    401                             == USB_HID_GENERIC_POLL_EP_NO);
    402401                        usb_log_info("Falling back to generic HID driver.\n");
    403402                        usb_hid_set_generic_hid_subdriver(hid_dev);
  • uspace/drv/bus/usb/usbhid/usbhid.h

    r3e23316 rbb70637  
    103103        usb_device_t *usb_dev;
    104104
    105         /** Index of the polling pipe in usb_hid_endpoints array. */
    106         unsigned poll_pipe_index;
     105        /** Endpont mapping of the polling pipe. */
     106        usb_endpoint_mapping_t *poll_pipe_mapping;
    107107
    108108        /** Subdrivers. */
     
    132132};
    133133
    134 
    135 
    136 enum {
    137         USB_HID_KBD_POLL_EP_NO = 0,
    138         USB_HID_MOUSE_POLL_EP_NO = 1,
    139         USB_HID_GENERIC_POLL_EP_NO = 2,
    140         USB_HID_POLL_EP_COUNT = 3
    141 };
    142 
    143134extern const usb_endpoint_description_t *usb_hid_endpoints[];
    144 
    145 
    146135
    147136int usb_hid_init(usb_hid_dev_t *hid_dev, usb_device_t *dev);
  • uspace/drv/bus/usb/usbhub/main.c

    r3e23316 rbb70637  
    4343#include "usbhub.h"
    4444
    45 /** Hub status-change endpoint description.
    46  *
    47  * For more information see section 11.15.1 of USB 1.1 specification.
    48  */
    49 static const usb_endpoint_description_t hub_status_change_endpoint_description =
    50 {
    51         .transfer_type = USB_TRANSFER_INTERRUPT,
    52         .direction = USB_DIRECTION_IN,
    53         .interface_class = USB_CLASS_HUB,
    54         .interface_subclass = 0,
    55         .interface_protocol = 0,
    56         .flags = 0
    57 };
    5845
    5946/** USB hub driver operations. */
  • uspace/drv/bus/usb/usbhub/usbhub.c

    r3e23316 rbb70637  
    5757
    5858#define HUB_FNC_NAME "hub"
     59/** Hub status-change endpoint description.
     60 *
     61 * For more information see section 11.15.1 of USB 1.1 specification.
     62 */
     63const usb_endpoint_description_t hub_status_change_endpoint_description =
     64{
     65        .transfer_type = USB_TRANSFER_INTERRUPT,
     66        .direction = USB_DIRECTION_IN,
     67        .interface_class = USB_CLASS_HUB,
     68        .interface_subclass = 0,
     69        .interface_protocol = 0,
     70        .flags = 0
     71};
    5972
    6073/** Standard get hub global status request */
     
    147160
    148161        /* Start hub operation. */
    149         opResult = usb_device_auto_poll(hub_dev->usb_device, 0,
     162        opResult = usb_device_auto_poll_desc(hub_dev->usb_device,
     163            &hub_status_change_endpoint_description,
    150164            hub_port_changes_callback, ((hub_dev->port_count + 1 + 7) / 8),
    151             255000,
    152             usb_hub_polling_terminated_callback, hub_dev);
     165            -1, usb_hub_polling_terminated_callback, hub_dev);
    153166        if (opResult != EOK) {
    154167                usb_pipe_end_long_transfer(control_pipe);
  • uspace/drv/bus/usb/usbhub/usbhub.h

    r3e23316 rbb70637  
    8080};
    8181
     82extern const usb_endpoint_description_t hub_status_change_endpoint_description;
     83
    8284int usb_hub_device_add(usb_device_t *usb_dev);
    8385int usb_hub_device_remove(usb_device_t *usb_dev);
Note: See TracChangeset for help on using the changeset viewer.