Changes in / [c28b3a5:5c2c459] in mainline


Ignore:
Location:
uspace
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/ohci/root_hub.c

    rc28b3a5 r5c2c459  
    6161        .vendor_id = 0x16db,
    6262        .product_id = 0x0001,
     63        /// \TODO these values migt be different
    6364        .str_serial_number = 0,
    6465        .usb_spec_version = 0x110,
     
    118119static const uint32_t hub_clear_feature_by_writing_one_mask =
    119120   RHS_CLEAR_PORT_POWER;
     121   // 1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER;
    120122
    121123/**
     
    125127    RHS_LPSC_FLAG |
    126128    RHS_OCIC_FLAG;
     129    //(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT) |
     130    //(1 << USB_HUB_FEATURE_C_HUB_LOCAL_POWER);
    127131
    128132/**
     
    131135static const uint32_t hub_set_feature_direct_mask =
    132136    RHS_SET_PORT_POWER;
     137    //(1 << USB_HUB_FEATURE_C_HUB_OVER_CURRENT);
    133138
    134139/**
     
    155160    RHPS_PRSC_FLAG;
    156161
     162/*
     163
     164    (1 << USB_HUB_FEATURE_PORT_CONNECTION) |
     165    (1 << USB_HUB_FEATURE_PORT_SUSPEND) |
     166    (1 << USB_HUB_FEATURE_PORT_OVER_CURRENT) |
     167    (1 << USB_HUB_FEATURE_PORT_POWER) |
     168    (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) |
     169    (1 << USB_HUB_FEATURE_C_PORT_ENABLE) |
     170    (1 << USB_HUB_FEATURE_C_PORT_SUSPEND) |
     171    (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) |
     172    (1 << USB_HUB_FEATURE_C_PORT_RESET);
     173 */
    157174//note that USB_HUB_FEATURE_PORT_POWER bit is translated into
    158175//USB_HUB_FEATURE_PORT_LOW_SPEED for port set feature request
     
    162179 */
    163180static const uint32_t port_status_change_mask = RHPS_CHANGE_WC_MASK;
     181/*    (1 << USB_HUB_FEATURE_C_PORT_CONNECTION) |
     182    (1 << USB_HUB_FEATURE_C_PORT_ENABLE) |
     183    (1 << USB_HUB_FEATURE_C_PORT_OVER_CURRENT) |
     184    (1 << USB_HUB_FEATURE_C_PORT_RESET) |
     185    (1 << USB_HUB_FEATURE_C_PORT_SUSPEND);
     186*/
    164187
    165188static int create_serialized_hub_descriptor(rh_t *instance);
     
    397420 * create answer to port status_request
    398421 *
    399  * Copy content of corresponding port status register to answer buffer. The
    400  * format of the port status register and port status data is the same (
    401  * see OHCI root hub and USB hub documentation).
     422 * Copy content of corresponding port status register to answer buffer.
    402423 *
    403424 * @param instance root hub instance
     
    410431        if (port < 1 || port > instance->port_count)
    411432                return EINVAL;
     433        uint32_t * uint32_buffer = (uint32_t*) request->data_buffer;
    412434        request->transfered_size = 4;
    413         uint32_t data = instance->registers->rh_port_status[port - 1];
    414         memcpy(request->data_buffer,&data,4);
     435        uint32_buffer[0] = instance->registers->rh_port_status[port - 1];
    415436#if 0
    416437        int i;
     
    429450 * create answer to port status_request
    430451 *
    431  * This copies flags in hub status register into the buffer. The format of the
    432  * status register and status message is the same, according to USB hub
    433  * specification and OHCI root hub specification.
     452 * Copy content of hub status register to answer buffer.
    434453 *
    435454 * @param instance root hub instance
     
    439458static int process_get_hub_status_request(rh_t *instance,
    440459    usb_transfer_batch_t * request) {
    441         //uint32_t * uint32_buffer = (uint32_t*) request->data_buffer;
     460        uint32_t * uint32_buffer = (uint32_t*) request->data_buffer;
    442461        request->transfered_size = 4;
    443462        //bits, 0,1,16,17
    444463        uint32_t mask = 1 | (1 << 1) | (1 << 16) | (1 << 17);
    445         uint32_t data = mask & instance->registers->rh_status;
    446         //uint32_buffer[0] = mask & instance->registers->rh_status;
    447         memcpy(request->data_buffer,&data,4);
     464        uint32_buffer[0] = mask & instance->registers->rh_status;
    448465
    449466        return EOK;
     
    499516            | (1 << (USB_HUB_FEATURE_C_HUB_OVER_CURRENT + 16));
    500517        bzero(bitmap, instance->interrupt_mask_size);
    501         if ((instance->registers->rh_status & mask) !=0 ) {
     518        if (instance->registers->rh_status & mask) {
    502519                bitmap[0] = 1;
    503520        }
     
    505522        mask = port_status_change_mask;
    506523        for (port = 1; port <= instance->port_count; ++port) {
    507                 if ((mask & instance->registers->rh_port_status[port - 1]) != 0) {
     524                if (mask & instance->registers->rh_port_status[port - 1]) {
    508525
    509526                        bitmap[(port) / 8] += 1 << (port % 8);
  • uspace/drv/usbhub/usbhub.c

    rc28b3a5 r5c2c459  
    6767    usb_hub_status_t status);
    6868
    69 static int usb_process_hub_local_power_change(usb_hub_info_t * hub_info,
     69static int usb_process_hub_power_change(usb_hub_info_t * hub_info,
    7070    usb_hub_status_t status);
    7171
     
    386386        int opResult;
    387387        if (usb_hub_is_status(status,USB_HUB_FEATURE_HUB_OVER_CURRENT)){
    388                 //poweroff all ports
    389                 unsigned int port;
    390                 for(port = 1;port <= hub_info->port_count;++port){
    391                         opResult = usb_hub_clear_port_feature(
    392                             hub_info->control_pipe,port,
    393                             USB_HUB_FEATURE_PORT_POWER);
    394                         if (opResult != EOK) {
    395                                 usb_log_warning(
    396                                     "cannot power off port %d;  %d\n",
    397                                     port, opResult);
    398                         }
     388                opResult = usb_hub_clear_feature(hub_info->control_pipe,
     389                    USB_HUB_FEATURE_HUB_LOCAL_POWER);
     390                if (opResult != EOK) {
     391                        usb_log_error("cannot power off hub: %d\n",
     392                            opResult);
    399393                }
    400394        } else {
    401                 //power all ports
    402                 unsigned int port;
    403                 for(port = 1;port <= hub_info->port_count;++port){
    404                         opResult = usb_hub_set_port_feature(
    405                             hub_info->control_pipe,port,
    406                             USB_HUB_FEATURE_PORT_POWER);
    407                         if (opResult != EOK) {
    408                                 usb_log_warning(
    409                                     "cannot power off port %d;  %d\n",
    410                                     port, opResult);
    411                         }
     395                opResult = usb_hub_set_feature(hub_info->control_pipe,
     396                    USB_HUB_FEATURE_HUB_LOCAL_POWER);
     397                if (opResult != EOK) {
     398                        usb_log_error("cannot power on hub: %d\n",
     399                            opResult);
    412400                }
    413401        }
     
    416404
    417405/**
    418  * process hub local power change
    419  *
    420  * This change is ignored.
     406 * process hub power change
     407 *
     408 * If the power has been lost, reestablish it.
     409 * If it was reestablished, re-power all ports.
    421410 * @param hub_info hub instance
    422411 * @param status hub status bitmask
    423412 * @return error code
    424413 */
    425 static int usb_process_hub_local_power_change(usb_hub_info_t * hub_info,
     414static int usb_process_hub_power_change(usb_hub_info_t * hub_info,
    426415    usb_hub_status_t status) {
    427416        int opResult = EOK;
     417        if (!usb_hub_is_status(status,USB_HUB_FEATURE_HUB_LOCAL_POWER)) {
     418                //restart power on hub
     419                opResult = usb_hub_set_feature(hub_info->control_pipe,
     420                    USB_HUB_FEATURE_HUB_LOCAL_POWER);
     421                if (opResult != EOK) {
     422                        usb_log_error("cannot power on hub: %d\n",
     423                            opResult);
     424                }
     425        } else {//power reestablished on hub- restart ports
     426                size_t port;
     427                for (port = 1; port <= hub_info->port_count; ++port) {
     428                        opResult = usb_hub_set_port_feature(
     429                            hub_info->control_pipe,
     430                            port, USB_HUB_FEATURE_PORT_POWER);
     431                        if (opResult != EOK) {
     432                                usb_log_error("Cannot power on port %zu: %s.\n",
     433                                    port, str_error(opResult));
     434                        }
     435                }
     436        }
     437        if(opResult!=EOK){
     438                return opResult;//no feature clearing
     439        }
    428440        opResult = usb_hub_clear_feature(hub_info->control_pipe,
    429441            USB_HUB_FEATURE_C_HUB_LOCAL_POWER);
     
    440452 *
    441453 * The change can be either in the over-current condition or
    442  * local-power change.
     454 * local-power lost condition.
    443455 * @param hub_info hub instance
    444456 */
     
    475487        if (
    476488            usb_hub_is_status(status,16+USB_HUB_FEATURE_C_HUB_LOCAL_POWER)) {
    477                 usb_process_hub_local_power_change(hub_info, status);
     489                usb_process_hub_power_change(hub_info, status);
    478490        }
    479491}
  • uspace/lib/drv/include/remote_pci.h

    rc28b3a5 r5c2c459  
    3636#define LIBDRV_REMOTE_PCI_H_
    3737
    38 extern remote_iface_t remote_pci_iface;
     38remote_iface_t remote_pci_iface;
    3939
    4040#endif
  • uspace/lib/drv/include/remote_usb.h

    rc28b3a5 r5c2c459  
    3636#define LIBDRV_REMOTE_USB_H_
    3737
    38 extern remote_iface_t remote_usb_iface;
     38remote_iface_t remote_usb_iface;
    3939
    4040#endif
  • uspace/lib/drv/include/remote_usbhc.h

    rc28b3a5 r5c2c459  
    3636#define LIBDRV_REMOTE_USBHC_H_
    3737
    38 extern remote_iface_t remote_usbhc_iface;
     38remote_iface_t remote_usbhc_iface;
    3939
    4040#endif
Note: See TracChangeset for help on using the changeset viewer.