Ignore:
File:
1 edited

Legend:

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

    rb7fd2a0 r5a6cc679  
    4545#include <pci_dev_iface.h>
    4646
     47#include "hc.h"
    4748#include "res.h"
    4849#include "ehci_regs.h"
     
    7374            eecp + USBLEGSUP_OFFSET, &usblegsup);
    7475        if (ret != EOK) {
    75                 usb_log_error("Failed to read USBLEGSUP: %s.\n", str_error(ret));
    76                 return ret;
    77         }
    78         usb_log_debug2("USBLEGSUP: %" PRIx32 ".\n", usblegsup);
     76                usb_log_error("Failed to read USBLEGSUP: %s.", str_error(ret));
     77                return ret;
     78        }
     79        usb_log_debug2("USBLEGSUP: %" PRIx32 ".", usblegsup);
    7980
    8081        /* Request control from firmware/BIOS by writing 1 to highest
    8182         * byte. (OS Control semaphore)*/
    82         usb_log_debug("Requesting OS control.\n");
     83        usb_log_debug("Requesting OS control.");
    8384        ret = pci_config_space_write_8(parent_sess,
    8485            eecp + USBLEGSUP_OFFSET + 3, 1);
    8586        if (ret != EOK) {
    86                 usb_log_error("Failed to request OS EHCI control: %s.\n",
     87                usb_log_error("Failed to request OS EHCI control: %s.",
    8788                    str_error(ret));
    8889                return ret;
     
    102103
    103104        if ((usblegsup & USBLEGSUP_BIOS_CONTROL) == 0) {
    104                 usb_log_info("BIOS released control after %zu usec.\n", wait);
     105                usb_log_info("BIOS released control after %zu usec.", wait);
    105106                return EOK;
    106107        }
     
    108109        /* BIOS failed to hand over control, this should not happen. */
    109110        usb_log_warning( "BIOS failed to release control after "
    110             "%zu usecs, force it.\n", wait);
     111            "%zu usecs, force it.", wait);
    111112        ret = pci_config_space_write_32(parent_sess,
    112113            eecp + USBLEGSUP_OFFSET, USBLEGSUP_OS_CONTROL);
    113114        if (ret != EOK) {
    114                 usb_log_error("Failed to force OS control: %s.\n",
     115                usb_log_error("Failed to force OS control: %s.",
    115116                    str_error(ret));
    116117                return ret;
     
    129130                    eecp + USBLEGCTLSTS_OFFSET, &usblegctlsts);
    130131                if (ret != EOK) {
    131                         usb_log_error("Failed to get USBLEGCTLSTS: %s.\n",
     132                        usb_log_error("Failed to get USBLEGCTLSTS: %s.",
    132133                            str_error(ret));
    133134                        return ret;
    134135                }
    135                 usb_log_debug2("USBLEGCTLSTS: %" PRIx32 ".\n", usblegctlsts);
     136                usb_log_debug2("USBLEGCTLSTS: %" PRIx32 ".", usblegctlsts);
    136137                /*
    137138                 * Zero SMI enables in legacy control register.
     
    142143                    eecp + USBLEGCTLSTS_OFFSET, 0xe0000000);
    143144                if (ret != EOK) {
    144                         usb_log_error("Failed to zero USBLEGCTLSTS: %s\n",
     145                        usb_log_error("Failed to zero USBLEGCTLSTS: %s",
    145146                            str_error(ret));
    146147                        return ret;
     
    152153                    eecp + USBLEGCTLSTS_OFFSET, &usblegctlsts);
    153154                if (ret != EOK) {
    154                         usb_log_error("Failed to get USBLEGCTLSTS 2: %s.\n",
     155                        usb_log_error("Failed to get USBLEGCTLSTS 2: %s.",
    155156                            str_error(ret));
    156157                        return ret;
    157158                }
    158                 usb_log_debug2("Zeroed USBLEGCTLSTS: %" PRIx32 ".\n",
     159                usb_log_debug2("Zeroed USBLEGCTLSTS: %" PRIx32 ".",
    159160                    usblegctlsts);
    160161        }
     
    164165            eecp + USBLEGSUP_OFFSET, &usblegsup);
    165166        if (ret != EOK) {
    166                 usb_log_error("Failed to read USBLEGSUP: %s.\n",
    167                     str_error(ret));
    168                 return ret;
    169         }
    170         usb_log_debug2("USBLEGSUP: %" PRIx32 ".\n", usblegsup);
     167                usb_log_error("Failed to read USBLEGSUP: %s.",
     168                    str_error(ret));
     169                return ret;
     170        }
     171        usb_log_debug2("USBLEGSUP: %" PRIx32 ".", usblegsup);
    171172        return ret;
    172173}
    173174
    174 errno_t disable_legacy(ddf_dev_t *device)
     175errno_t disable_legacy(hc_device_t *hcd)
    175176{
    176         assert(device);
    177 
    178         async_sess_t *parent_sess = ddf_dev_parent_sess_get(device);
     177        hc_t *hc = hcd_to_hc(hcd);
     178
     179        async_sess_t *parent_sess = ddf_dev_parent_sess_get(hcd->ddf_dev);
    179180        if (parent_sess == NULL)
    180181                return ENOMEM;
    181182
    182         usb_log_debug("Disabling EHCI legacy support.\n");
    183 
    184         hw_res_list_parsed_t res;
    185         hw_res_list_parsed_init(&res);
    186         errno_t ret = hw_res_get_list_parsed(parent_sess, &res, 0);
    187         if (ret != EOK) {
    188                 usb_log_error("Failed to get resource list: %s\n",
    189                     str_error(ret));
    190                 goto clean;
    191         }
    192 
    193         if (res.mem_ranges.count < 1) {
    194                 usb_log_error("Incorrect mem range count: %zu",
    195                     res.mem_ranges.count);
    196                 ret = EINVAL;
    197                 goto clean;
    198         }
    199 
    200         /* Map EHCI registers */
    201         void *regs = NULL;
    202         ret = pio_enable_range(&res.mem_ranges.ranges[0], &regs);
    203         if (ret != EOK) {
    204                 usb_log_error("Failed to map registers %p: %s.\n",
    205                     RNGABSPTR(res.mem_ranges.ranges[0]), str_error(ret));
    206                 goto clean;
    207         }
    208 
    209         usb_log_debug("Registers mapped at: %p.\n", regs);
    210 
    211         ehci_caps_regs_t *ehci_caps = regs;
    212 
    213         const uint32_t hcc_params = EHCI_RD(ehci_caps->hccparams);
    214         usb_log_debug2("Value of hcc params register: %x.\n", hcc_params);
     183        usb_log_debug("Disabling EHCI legacy support.");
     184
     185        const uint32_t hcc_params = EHCI_RD(hc->caps->hccparams);
     186        usb_log_debug2("Value of hcc params register: %x.", hcc_params);
    215187
    216188        /* Read value of EHCI Extended Capabilities Pointer
     
    218190        const uint32_t eecp =
    219191            (hcc_params >> EHCI_CAPS_HCC_EECP_SHIFT) & EHCI_CAPS_HCC_EECP_MASK;
    220         usb_log_debug2("Value of EECP: %x.\n", eecp);
    221 
    222         ret = disable_extended_caps(parent_sess, eecp);
    223         if (ret != EOK) {
    224                 usb_log_error("Failed to disable extended capabilities: %s.\n",
     192        usb_log_debug2("Value of EECP: %x.", eecp);
     193
     194        int ret = disable_extended_caps(parent_sess, eecp);
     195        if (ret != EOK) {
     196                usb_log_error("Failed to disable extended capabilities: %s.",
    225197                    str_error(ret));
    226198                    goto clean;
    227199        }
    228200clean:
    229         //TODO unmap registers
    230         hw_res_list_parsed_clean(&res);
     201        async_hangup(parent_sess);
    231202        return ret;
    232203}
Note: See TracChangeset for help on using the changeset viewer.