Changeset cd3fa47 in mainline


Ignore:
Timestamp:
2018-01-21T18:35:09Z (6 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3f02935
Parents:
32b2a6f2
Message:

usb: definition of status bits have changed between USB 2 and 3, remove the confusion

Location:
uspace
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/ehci/ehci_rh.c

    r32b2a6f2 rcd3fa47  
    247247
    248248#define BIT_VAL(val, bit)   ((val & bit) ? 1 : 0)
    249 #define EHCI2USB(val, bit, feat)   (BIT_VAL(val, bit) << feat)
     249#define EHCI2USB(val, bit, mask)   (BIT_VAL(val, bit) ? mask : 0)
    250250
    251251/** Port status request handler.
     
    269269        const uint32_t reg = EHCI_RD(hub->registers->portsc[port]);
    270270        const uint32_t status = uint32_host2usb(
    271             EHCI2USB(reg, USB_PORTSC_CONNECT_FLAG, USB_HUB_FEATURE_PORT_CONNECTION) |
    272             EHCI2USB(reg, USB_PORTSC_ENABLED_FLAG, USB_HUB_FEATURE_PORT_ENABLE) |
    273             EHCI2USB(reg, USB_PORTSC_SUSPEND_FLAG, USB_HUB_FEATURE_PORT_SUSPEND) |
    274             EHCI2USB(reg, USB_PORTSC_OC_ACTIVE_FLAG, USB_HUB_FEATURE_PORT_OVER_CURRENT) |
    275             EHCI2USB(reg, USB_PORTSC_PORT_RESET_FLAG, USB_HUB_FEATURE_PORT_RESET) |
    276             EHCI2USB(reg, USB_PORTSC_PORT_POWER_FLAG, USB_HUB_FEATURE_PORT_POWER) |
     271            EHCI2USB(reg, USB_PORTSC_CONNECT_FLAG, USB_HUB_PORT_STATUS_CONNECTION) |
     272            EHCI2USB(reg, USB_PORTSC_ENABLED_FLAG, USB_HUB_PORT_STATUS_ENABLE) |
     273            EHCI2USB(reg, USB_PORTSC_SUSPEND_FLAG, USB2_HUB_PORT_STATUS_SUSPEND) |
     274            EHCI2USB(reg, USB_PORTSC_OC_ACTIVE_FLAG, USB_HUB_PORT_STATUS_OC) |
     275            EHCI2USB(reg, USB_PORTSC_PORT_RESET_FLAG, USB_HUB_PORT_STATUS_RESET) |
     276            EHCI2USB(reg, USB_PORTSC_PORT_POWER_FLAG, USB2_HUB_PORT_STATUS_POWER) |
    277277            (((reg & USB_PORTSC_LINE_STATUS_MASK) == USB_PORTSC_LINE_STATUS_K) ?
    278                 (1 << USB_HUB_FEATURE_PORT_LOW_SPEED) : 0) |
    279             ((reg & USB_PORTSC_PORT_OWNER_FLAG) ? 0 : (1 << USB_HUB_FEATURE_PORT_HIGH_SPEED)) |
    280             EHCI2USB(reg, USB_PORTSC_PORT_TEST_MASK, 11) |
    281             EHCI2USB(reg, USB_PORTSC_INDICATOR_MASK, 12) |
    282             EHCI2USB(reg, USB_PORTSC_CONNECT_CH_FLAG, USB_HUB_FEATURE_C_PORT_CONNECTION) |
    283             EHCI2USB(reg, USB_PORTSC_EN_CHANGE_FLAG, USB_HUB_FEATURE_C_PORT_ENABLE) |
    284             (hub->resume_flag[port] ? (1 << USB_HUB_FEATURE_C_PORT_SUSPEND) : 0) |
    285             EHCI2USB(reg, USB_PORTSC_OC_CHANGE_FLAG, USB_HUB_FEATURE_C_PORT_OVER_CURRENT) |
    286             (hub->reset_flag[port] ? (1 << USB_HUB_FEATURE_C_PORT_RESET): 0)
     278                (USB2_HUB_PORT_STATUS_LOW_SPEED) : 0) |
     279            ((reg & USB_PORTSC_PORT_OWNER_FLAG) ? 0 : USB2_HUB_PORT_STATUS_HIGH_SPEED) |
     280            EHCI2USB(reg, USB_PORTSC_PORT_TEST_MASK, USB2_HUB_PORT_STATUS_TEST) |
     281            EHCI2USB(reg, USB_PORTSC_INDICATOR_MASK, USB2_HUB_PORT_STATUS_INDICATOR) |
     282            EHCI2USB(reg, USB_PORTSC_CONNECT_CH_FLAG, USB_HUB_PORT_STATUS_C_CONNECTION) |
     283            EHCI2USB(reg, USB_PORTSC_EN_CHANGE_FLAG, USB2_HUB_PORT_STATUS_C_ENABLE) |
     284            (hub->resume_flag[port] ? USB2_HUB_PORT_STATUS_C_SUSPEND : 0) |
     285            EHCI2USB(reg, USB_PORTSC_OC_CHANGE_FLAG, USB_HUB_PORT_STATUS_C_OC) |
     286            (hub->reset_flag[port] ? USB_HUB_PORT_STATUS_C_RESET: 0)
    287287        );
    288288        /* Note feature numbers for test and indicator feature do not
     
    385385                return EOK;
    386386
    387         case USB_HUB_FEATURE_PORT_ENABLE:         /*1*/
     387        case USB2_HUB_FEATURE_PORT_ENABLE:         /*1*/
    388388                usb_log_debug2("RH(%p-%u): Clear port enable.", hub, port);
    389389                EHCI_CLR(hub->registers->portsc[port],
     
    391391                return EOK;
    392392
    393         case USB_HUB_FEATURE_PORT_SUSPEND:        /*2*/
     393        case USB2_HUB_FEATURE_PORT_SUSPEND:        /*2*/
    394394                usb_log_debug2("RH(%p-%u): Clear port suspend.", hub, port);
    395395                /* If not in suspend it's noop */
     
    409409                    USB_PORTSC_CONNECT_CH_FLAG);
    410410                return EOK;
    411         case USB_HUB_FEATURE_C_PORT_ENABLE:       /*17*/
     411        case USB2_HUB_FEATURE_C_PORT_ENABLE:       /*17*/
    412412                usb_log_debug2("RH(%p-%u): Clear port enable change.",
    413413                    hub, port);
     
    421421                    USB_PORTSC_OC_CHANGE_FLAG);
    422422                return EOK;
    423         case USB_HUB_FEATURE_C_PORT_SUSPEND:      /*18*/
     423        case USB2_HUB_FEATURE_C_PORT_SUSPEND:      /*18*/
    424424                usb_log_debug2("RH(%p-%u): Clear port suspend change.",
    425425                    hub, port);
     
    456456        const unsigned feature = uint16_usb2host(setup_packet->value);
    457457        switch (feature) {
    458         case USB_HUB_FEATURE_PORT_ENABLE:  /*1*/
     458        case USB2_HUB_FEATURE_PORT_ENABLE:  /*1*/
    459459                usb_log_debug2("RH(%p-%u): Set port enable.", hub, port);
    460460                EHCI_SET(hub->registers->portsc[port],
    461461                    USB_PORTSC_ENABLED_FLAG);
    462462                return EOK;
    463         case USB_HUB_FEATURE_PORT_SUSPEND: /*2*/
     463        case USB2_HUB_FEATURE_PORT_SUSPEND: /*2*/
    464464                usb_log_debug2("RH(%p-%u): Set port suspend.", hub, port);
    465465                EHCI_SET(hub->registers->portsc[port],
  • uspace/drv/bus/usb/ohci/ohci_rh.c

    r32b2a6f2 rcd3fa47  
    340340                }
    341341
    342         case USB_HUB_FEATURE_PORT_ENABLE:         /*1*/
     342        case USB2_HUB_FEATURE_PORT_ENABLE:         /*1*/
    343343                OHCI_WR(hub->registers->rh_port_status[port],
    344344                    RHPS_CLEAR_PORT_ENABLE);
    345345                return EOK;
    346346
    347         case USB_HUB_FEATURE_PORT_SUSPEND:        /*2*/
     347        case USB2_HUB_FEATURE_PORT_SUSPEND:        /*2*/
    348348                OHCI_WR(hub->registers->rh_port_status[port],
    349349                    RHPS_CLEAR_PORT_SUSPEND);
     
    351351
    352352        case USB_HUB_FEATURE_C_PORT_CONNECTION:   /*16*/
    353         case USB_HUB_FEATURE_C_PORT_ENABLE:       /*17*/
    354         case USB_HUB_FEATURE_C_PORT_SUSPEND:      /*18*/
     353        case USB2_HUB_FEATURE_C_PORT_ENABLE:       /*17*/
     354        case USB2_HUB_FEATURE_C_PORT_SUSPEND:      /*18*/
    355355        case USB_HUB_FEATURE_C_PORT_OVER_CURRENT: /*19*/
    356356        case USB_HUB_FEATURE_C_PORT_RESET:        /*20*/
     
    401401                /* Fall through, for per port power */
    402402                /* Fallthrough */
    403         case USB_HUB_FEATURE_PORT_ENABLE:  /*1*/
    404         case USB_HUB_FEATURE_PORT_SUSPEND: /*2*/
     403        case USB2_HUB_FEATURE_PORT_ENABLE:  /*1*/
     404        case USB2_HUB_FEATURE_PORT_SUSPEND: /*2*/
    405405        case USB_HUB_FEATURE_PORT_RESET:   /*4*/
    406406                usb_log_debug2("Setting port POWER, ENABLE, SUSPEND or RESET "
  • uspace/drv/bus/usb/uhci/uhci_rh.c

    r32b2a6f2 rcd3fa47  
    210210#define BIT_VAL(val, bit) \
    211211        ((val & bit) ? 1 : 0)
    212 #define UHCI2USB(val, bit, feat) \
    213         (BIT_VAL(val, bit) << feat)
     212#define UHCI2USB(val, bit, mask) \
     213        (BIT_VAL(val, bit) ? (mask) : 0)
    214214
    215215/** Port status request handler.
     
    236236        const uint16_t val = pio_read_16(hub->ports[port]);
    237237        const uint32_t status = uint32_host2usb(
    238             UHCI2USB(val, STATUS_CONNECTED, USB_HUB_FEATURE_PORT_CONNECTION) |
    239             UHCI2USB(val, STATUS_ENABLED, USB_HUB_FEATURE_PORT_ENABLE) |
    240             UHCI2USB(val, STATUS_SUSPEND, USB_HUB_FEATURE_PORT_SUSPEND) |
    241             UHCI2USB(val, STATUS_IN_RESET, USB_HUB_FEATURE_PORT_RESET) |
    242             UHCI2USB(val, STATUS_ALWAYS_ONE, USB_HUB_FEATURE_PORT_POWER) |
    243             UHCI2USB(val, STATUS_LOW_SPEED, USB_HUB_FEATURE_PORT_LOW_SPEED) |
    244             UHCI2USB(val, STATUS_CONNECTED_CHANGED, USB_HUB_FEATURE_C_PORT_CONNECTION) |
    245             UHCI2USB(val, STATUS_ENABLED_CHANGED, USB_HUB_FEATURE_C_PORT_ENABLE) |
    246 //          UHCI2USB(val, STATUS_SUSPEND, USB_HUB_FEATURE_C_PORT_SUSPEND) |
    247             ((hub->reset_changed[port] ? 1 : 0) << USB_HUB_FEATURE_C_PORT_RESET)
     238            UHCI2USB(val, STATUS_CONNECTED, USB_HUB_PORT_STATUS_CONNECTION) |
     239            UHCI2USB(val, STATUS_ENABLED, USB_HUB_PORT_STATUS_ENABLE) |
     240            UHCI2USB(val, STATUS_SUSPEND, USB2_HUB_PORT_STATUS_SUSPEND) |
     241            UHCI2USB(val, STATUS_IN_RESET, USB_HUB_PORT_STATUS_RESET) |
     242            UHCI2USB(val, STATUS_ALWAYS_ONE, USB2_HUB_PORT_STATUS_POWER) |
     243            UHCI2USB(val, STATUS_LOW_SPEED, USB2_HUB_PORT_STATUS_LOW_SPEED) |
     244            UHCI2USB(val, STATUS_CONNECTED_CHANGED, USB_HUB_PORT_STATUS_C_CONNECTION) |
     245            UHCI2USB(val, STATUS_ENABLED_CHANGED, USB2_HUB_PORT_STATUS_C_ENABLE) |
     246//          UHCI2USB(val, STATUS_SUSPEND, USB2_HUB_PORT_STATUS_C_SUSPEND) |
     247            (hub->reset_changed[port] ?  USB_HUB_PORT_STATUS_C_RESET : 0)
    248248        );
    249249        RH_DEBUG(hub, port, "Port status %" PRIx32 " (source %" PRIx16
     
    274274        const uint16_t val = status & (~STATUS_WC_BITS);
    275275        switch (feature) {
    276         case USB_HUB_FEATURE_PORT_ENABLE:
     276        case USB2_HUB_FEATURE_PORT_ENABLE:
    277277                RH_DEBUG(hub, port, "Clear port enable (status %"
    278278                    PRIx16 ")", status);
    279279                pio_write_16(hub->ports[port], val & ~STATUS_ENABLED);
    280280                break;
    281         case USB_HUB_FEATURE_PORT_SUSPEND:
     281        case USB2_HUB_FEATURE_PORT_SUSPEND:
    282282                RH_DEBUG(hub, port, "Clear port suspend (status %"
    283283                    PRIx16 ")", status);
     
    302302                hub->reset_changed[port] = false;
    303303                break;
    304         case USB_HUB_FEATURE_C_PORT_ENABLE:
     304        case USB2_HUB_FEATURE_C_PORT_ENABLE:
    305305                RH_DEBUG(hub, port, "Clear port enable change (status %"
    306306                    PRIx16 ")", status);
    307307                pio_write_16(hub->ports[port], status | STATUS_ENABLED_CHANGED);
    308308                break;
    309         case USB_HUB_FEATURE_C_PORT_SUSPEND:
     309        case USB2_HUB_FEATURE_C_PORT_SUSPEND:
    310310                RH_DEBUG(hub, port, "Clear port suspend change (status %"
    311311                    PRIx16 ")", status);
     
    354354                    ")", pio_read_16(hub->ports[port]));
    355355                break;
    356         case USB_HUB_FEATURE_PORT_SUSPEND:
     356        case USB2_HUB_FEATURE_PORT_SUSPEND:
    357357                RH_DEBUG(hub, port, "Set port suspend (status %" PRIx16
    358358                    ")", status);
     
    368368                break;
    369369        case USB_HUB_FEATURE_C_PORT_CONNECTION:
    370         case USB_HUB_FEATURE_C_PORT_ENABLE:
    371         case USB_HUB_FEATURE_C_PORT_SUSPEND:
     370        case USB2_HUB_FEATURE_C_PORT_ENABLE:
     371        case USB2_HUB_FEATURE_C_PORT_SUSPEND:
    372372        case USB_HUB_FEATURE_C_PORT_OVER_CURRENT:
    373373                RH_DEBUG(hub, port, "Set port change flag (status %" PRIx16
  • uspace/drv/bus/usb/usbhub/port.c

    r32b2a6f2 rcd3fa47  
    145145        if ((err = usbhc_device_enumerate(exch, port->port_number, port->speed))) {
    146146                port_log(error, port, "Failed to enumerate device: %s", str_error(err));
    147                 /* Disable the port */
    148                 usb_hub_clear_port_feature(port->hub, port->port_number, USB_HUB_FEATURE_PORT_ENABLE);
     147                /* Disable the port in USB 2 (impossible in USB3) */
     148                if (port->speed <= USB_SPEED_HIGH)
     149                        usb_hub_clear_port_feature(port->hub, port->port_number, USB2_HUB_FEATURE_PORT_ENABLE);
    149150                goto out_address;
    150151        }
     
    173174static void port_changed_enabled(usb_hub_port_t *port, usb_port_status_t status)
    174175{
    175         const bool enabled = !!(status & USB_HUB_PORT_STATUS_ENABLED);
     176        const bool enabled = !!(status & USB_HUB_PORT_STATUS_ENABLE);
    176177        if (enabled) {
    177178                port_log(warning, port, "Port unexpectedly changed to enabled.");
     
    179180                usb_port_disabled(&port->base, &remove_device);
    180181        }
    181 }
    182 
    183 static void port_changed_suspend(usb_hub_port_t *port, usb_port_status_t status)
    184 {
    185         port_log(error, port, "Port unexpectedly suspend. Weird, we do not support suspending!");
    186182}
    187183
     
    207203static void port_changed_reset(usb_hub_port_t *port, usb_port_status_t status)
    208204{
    209         const bool enabled = !!(status & USB_HUB_PORT_STATUS_ENABLED);
     205        const bool enabled = !!(status & USB_HUB_PORT_STATUS_ENABLE);
    210206
    211207        if (enabled) {
     
    220216typedef void (*change_handler_t)(usb_hub_port_t *, usb_port_status_t);
    221217
    222 static const change_handler_t port_change_handlers [] = {
    223         [USB_HUB_FEATURE_C_PORT_CONNECTION] = &port_changed_connection,
    224         [USB_HUB_FEATURE_C_PORT_ENABLE] = &port_changed_enabled,
    225         [USB_HUB_FEATURE_C_PORT_SUSPEND] = &port_changed_suspend,
    226         [USB_HUB_FEATURE_C_PORT_OVER_CURRENT] = &port_changed_overcurrent,
    227         [USB_HUB_FEATURE_C_PORT_RESET] = &port_changed_reset,
    228         [sizeof(usb_port_status_t) * 8] = NULL,
    229 };
     218static void check_port_change(usb_hub_port_t *port, usb_port_status_t *status,
     219    change_handler_t handler, usb_port_status_t mask, usb_hub_class_feature_t feature)
     220{
     221        if ((*status & mask) == 0)
     222                return;
     223
     224        /* Clear the change so it won't come again */
     225        usb_hub_clear_port_feature(port->hub, port->port_number, feature);
     226
     227        if (handler)
     228                handler(port, *status);
     229
     230        /* Mark the change as resolved */
     231        *status &= ~mask;
     232}
    230233
    231234/**
     
    248251        }
    249252
    250         if (port->hub->speed == USB_SPEED_SUPER)
    251                 /* Link state change is not a change we shall clear, nor we care about it */
    252                 status &= ~(1 << USB_HUB_FEATURE_C_PORT_LINK_STATE);
    253 
    254         for (uint32_t feature = 16; feature < sizeof(usb_port_status_t) * 8; ++feature) {
    255                 uint32_t mask = 1 << feature;
    256 
    257                 if ((status & mask) == 0)
    258                         continue;
    259 
    260                 /* Clear the change so it won't come again */
    261                 usb_hub_clear_port_feature(port->hub, port->port_number, feature);
    262 
    263                 if (!port_change_handlers[feature])
    264                         continue;
    265 
    266                 /* ACK this change */
    267                 status &= ~mask;
    268 
    269                 port_change_handlers[feature](port, status);
     253        check_port_change(port, &status, &port_changed_connection,
     254            USB_HUB_PORT_STATUS_C_CONNECTION, USB_HUB_FEATURE_C_PORT_CONNECTION);
     255
     256        check_port_change(port, &status, &port_changed_overcurrent,
     257            USB_HUB_PORT_STATUS_C_OC, USB_HUB_FEATURE_C_PORT_OVER_CURRENT);
     258
     259        check_port_change(port, &status, &port_changed_reset,
     260            USB_HUB_PORT_STATUS_C_RESET, USB_HUB_FEATURE_C_PORT_RESET);
     261
     262        if (port->hub->speed <= USB_SPEED_HIGH) {
     263                check_port_change(port, &status, &port_changed_enabled,
     264                    USB2_HUB_PORT_STATUS_C_ENABLE, USB2_HUB_FEATURE_C_PORT_ENABLE);
     265        } else {
     266                check_port_change(port, &status, &port_changed_reset,
     267                    USB3_HUB_PORT_STATUS_C_BH_RESET, USB3_HUB_FEATURE_C_BH_PORT_RESET);
     268
     269                check_port_change(port, &status, NULL,
     270                    USB3_HUB_PORT_STATUS_C_LINK_STATE, USB3_HUB_FEATURE_C_PORT_LINK_STATE);
    270271        }
    271272
  • uspace/drv/bus/usb/usbhub/status.h

    r32b2a6f2 rcd3fa47  
    3838
    3939/**
    40  * structure holding port status and changes flags.
    41  * should not be accessed directly, use supplied getter/setter methods.
    42  *
    43  * For more information refer to tables 11-15 and 11-16 in
    44  * "Universal Serial Bus Specification Revision 1.1" pages 274 and 277
    45  * (290 and 293 in pdf)
    46  *
    47  */
    48 typedef uint32_t usb_port_status_t;
    49 #define USB_HUB_PORT_STATUS_CONNECTION \
    50     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_CONNECTION)))
    51 #define USB_HUB_PORT_STATUS_ENABLED \
    52     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_ENABLE)))
    53 #define USB_HUB_PORT_STATUS_SUSPEND \
    54     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_SUSPEND)))
    55 #define USB_HUB_PORT_STATUS_OC \
    56     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_OVER_CURRENT)))
    57 #define USB_HUB_PORT_STATUS_RESET \
    58     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_RESET)))
    59 #define USB_HUB_PORT_STATUS_POWER \
    60     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_POWER)))
    61 #define USB_HUB_PORT_STATUS_LOW_SPEED \
    62     (uint32_usb2host(1 << (USB_HUB_FEATURE_PORT_LOW_SPEED)))
    63 #define USB_HUB_PORT_STATUS_HIGH_SPEED \
    64     (uint32_usb2host(1 << 10))
    65 #define USB_HUB_PORT_STATUS_TEST_MODE \
    66     (uint32_usb2host(1 << 11))
    67 #define USB_HUB_PORT_INDICATOR_CONTROL \
    68     (uint32_usb2host(1 << 12))
    69 
    70 #define USB_HUB_PORT_C_STATUS_CONNECTION \
    71     (uint32_usb2host(1 << (USB_HUB_FEATURE_C_PORT_CONNECTION)))
    72 #define USB_HUB_PORT_C_STATUS_ENABLED \
    73     (uint32_usb2host(1 << (USB_HUB_FEATURE_C_PORT_ENABLE)))
    74 #define USB_HUB_PORT_C_STATUS_SUSPEND \
    75     (uint32_usb2host(1 << (USB_HUB_FEATURE_C_PORT_SUSPEND)))
    76 #define USB_HUB_PORT_C_STATUS_OC \
    77     (uint32_usb2host(1 << (USB_HUB_FEATURE_C_PORT_OVER_CURRENT)))
    78 #define USB_HUB_PORT_C_STATUS_RESET \
    79     (uint32_usb2host(1 << (USB_HUB_FEATURE_C_PORT_RESET)))
    80 
    81 /**
    8240 * structure holding hub status and changes flags.
    8341 *
     
    10159        if (hub_speed == USB_SPEED_SUPER)
    10260                return USB_SPEED_SUPER;
    103         if (hub_speed == USB_SPEED_HIGH && (status & USB_HUB_PORT_STATUS_HIGH_SPEED))
     61        if (hub_speed == USB_SPEED_HIGH && (status & USB2_HUB_PORT_STATUS_HIGH_SPEED))
    10462                return USB_SPEED_HIGH;
    105         if ((status & USB_HUB_PORT_STATUS_LOW_SPEED) != 0)
     63        if ((status & USB2_HUB_PORT_STATUS_LOW_SPEED) != 0)
    10664                return USB_SPEED_LOW;
    10765        return USB_SPEED_FULL;
  • uspace/drv/bus/usb/vhc/hub/virthubops.c

    r32b2a6f2 rcd3fa47  
    137137
    138138        switch (feature) {
    139                 case USB_HUB_FEATURE_PORT_ENABLE:
     139                case USB2_HUB_FEATURE_PORT_ENABLE:
    140140                        if ((port_state != HUB_PORT_STATE_NOT_CONFIGURED)
    141141                            && (port_state != HUB_PORT_STATE_POWERED_OFF)) {
     
    145145                        break;
    146146
    147                 case USB_HUB_FEATURE_PORT_SUSPEND:
     147                case USB2_HUB_FEATURE_PORT_SUSPEND:
    148148                        if (port_state != HUB_PORT_STATE_SUSPENDED) {
    149149                                rc = EOK;
     
    166166                        break;
    167167
    168                 case USB_HUB_FEATURE_C_PORT_ENABLE:
     168                case USB2_HUB_FEATURE_C_PORT_ENABLE:
    169169                        hub_clear_port_status_change(hub, port, HUB_STATUS_C_PORT_ENABLE);
    170170                        rc = EOK;
    171171                        break;
    172172
    173                 case USB_HUB_FEATURE_C_PORT_SUSPEND:
     173                case USB2_HUB_FEATURE_C_PORT_SUSPEND:
    174174                        hub_clear_port_status_change(hub, port, HUB_STATUS_C_PORT_SUSPEND);
    175175                        rc = EOK;
     
    317317                        break;
    318318
    319                 case USB_HUB_FEATURE_PORT_SUSPEND:
     319                case USB2_HUB_FEATURE_PORT_SUSPEND:
    320320                        if (port_state == HUB_PORT_STATE_ENABLED) {
    321321                                hub_set_port_state(hub, port, HUB_PORT_STATE_SUSPENDED);
  • uspace/lib/usb/include/usb/classes/hub.h

    r32b2a6f2 rcd3fa47  
    4848        USB_HUB_FEATURE_HUB_OVER_CURRENT = 1,
    4949        USB_HUB_FEATURE_PORT_CONNECTION = 0,
    50         USB_HUB_FEATURE_PORT_ENABLE = 1,
    51         USB_HUB_FEATURE_PORT_SUSPEND = 2,
     50        USB2_HUB_FEATURE_PORT_ENABLE = 1,
     51        USB2_HUB_FEATURE_PORT_SUSPEND = 2,
    5252        USB_HUB_FEATURE_PORT_OVER_CURRENT = 3,
    5353        USB_HUB_FEATURE_PORT_RESET = 4,
     54        USB3_HUB_FEATURE_PORT_LINK_STATE = 5,
    5455        USB_HUB_FEATURE_PORT_POWER = 8,
    55         USB_HUB_FEATURE_PORT_LOW_SPEED = 9,
    56         USB_HUB_FEATURE_PORT_HIGH_SPEED = 10,
     56        USB2_HUB_FEATURE_PORT_LOW_SPEED = 9,
    5757        USB_HUB_FEATURE_C_PORT_CONNECTION = 16,
    58         USB_HUB_FEATURE_C_PORT_ENABLE = 17,
    59         USB_HUB_FEATURE_C_PORT_SUSPEND = 18,
     58        USB2_HUB_FEATURE_C_PORT_ENABLE = 17,
     59        USB2_HUB_FEATURE_C_PORT_SUSPEND = 18,
    6060        USB_HUB_FEATURE_C_PORT_OVER_CURRENT = 19,
    6161        USB_HUB_FEATURE_C_PORT_RESET = 20,
    62         USB_HUB_FEATURE_C_PORT_LINK_STATE = 22,
    63         USB_HUB_FEATURE_PORT_TEST = 21,
    64         USB_HUB_FEATURE_PORT_INDICATOR = 22
     62        USB2_HUB_FEATURE_PORT_TEST = 21,
     63        USB2_HUB_FEATURE_PORT_INDICATOR = 22,
     64        USB3_HUB_FEATURE_C_PORT_LINK_STATE = 25,
     65        USB3_HUB_FEATURE_BH_PORT_RESET = 28,
     66        USB3_HUB_FEATURE_C_BH_PORT_RESET = 29,
    6567        /* USB_HUB_FEATURE_ = , */
    6668} usb_hub_class_feature_t;
    6769
     70/**
     71 * Dword holding port status and changes flags.
     72 *
     73 * For more information refer to tables 11-15 and 11-16 in
     74 * "Universal Serial Bus Specification Revision 1.1" pages 274 and 277
     75 * (290 and 293 in pdf)
     76 *
     77 * Beware that definition of bits changed between USB 2 and 3,
     78 * so some fields are prefixed with USB2 or USB3 instead.
     79 */
     80typedef uint32_t usb_port_status_t;
     81
     82#define USB_HUB_PORT_STATUS_BIT(bit)  (uint32_usb2host(1 << (bit)))
     83#define USB_HUB_PORT_STATUS_CONNECTION          USB_HUB_PORT_STATUS_BIT(0)
     84#define USB_HUB_PORT_STATUS_ENABLE              USB_HUB_PORT_STATUS_BIT(1)
     85#define USB2_HUB_PORT_STATUS_SUSPEND            USB_HUB_PORT_STATUS_BIT(2)
     86#define USB_HUB_PORT_STATUS_OC                  USB_HUB_PORT_STATUS_BIT(3)
     87#define USB_HUB_PORT_STATUS_RESET               USB_HUB_PORT_STATUS_BIT(4)
     88
     89#define USB2_HUB_PORT_STATUS_POWER              USB_HUB_PORT_STATUS_BIT(8)
     90#define USB2_HUB_PORT_STATUS_LOW_SPEED          USB_HUB_PORT_STATUS_BIT(9)
     91#define USB3_HUB_PORT_STATUS_POWER              USB_HUB_PORT_STATUS_BIT(9)
     92#define USB2_HUB_PORT_STATUS_HIGH_SPEED         USB_HUB_PORT_STATUS_BIT(10)
     93#define USB2_HUB_PORT_STATUS_TEST               USB_HUB_PORT_STATUS_BIT(11)
     94#define USB2_HUB_PORT_STATUS_INDICATOR          USB_HUB_PORT_STATUS_BIT(12)
     95
     96#define USB_HUB_PORT_STATUS_C_CONNECTION        USB_HUB_PORT_STATUS_BIT(16)
     97#define USB2_HUB_PORT_STATUS_C_ENABLE           USB_HUB_PORT_STATUS_BIT(17)
     98#define USB2_HUB_PORT_STATUS_C_SUSPEND          USB_HUB_PORT_STATUS_BIT(18)
     99#define USB_HUB_PORT_STATUS_C_OC                USB_HUB_PORT_STATUS_BIT(19)
     100#define USB_HUB_PORT_STATUS_C_RESET             USB_HUB_PORT_STATUS_BIT(20)
     101#define USB3_HUB_PORT_STATUS_C_BH_RESET         USB_HUB_PORT_STATUS_BIT(21)
     102#define USB3_HUB_PORT_STATUS_C_LINK_STATE       USB_HUB_PORT_STATUS_BIT(22)
     103#define USB3_HUB_PORT_STATUS_C_CONFIG_ERROR     USB_HUB_PORT_STATUS_BIT(23)
    68104
    69105/** Header of standard hub descriptor without the "variadic" part. */
Note: See TracChangeset for help on using the changeset viewer.