fix all warnings with host rp2040
This commit is contained in:
		@@ -262,7 +262,7 @@ static struct hw_endpoint *_next_free_interrupt_ep(void)
 | 
			
		||||
        if (!ep->configured)
 | 
			
		||||
        {
 | 
			
		||||
            // Will be configured by _hw_endpoint_init / _hw_endpoint_allocate
 | 
			
		||||
            ep->interrupt_num = i - 1;
 | 
			
		||||
            ep->interrupt_num = (uint8_t) (i - 1);
 | 
			
		||||
            return ep;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -297,7 +297,7 @@ static struct hw_endpoint *_hw_endpoint_allocate(uint8_t transfer_type)
 | 
			
		||||
    return ep;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t ep_addr, uint wMaxPacketSize, uint8_t transfer_type, uint8_t bmInterval)
 | 
			
		||||
static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t ep_addr, uint16_t wMaxPacketSize, uint8_t transfer_type, uint8_t bmInterval)
 | 
			
		||||
{
 | 
			
		||||
    // Already has data buffer, endpoint control, and buffer control allocated at this point
 | 
			
		||||
    assert(ep->endpoint_control);
 | 
			
		||||
@@ -329,7 +329,10 @@ static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t
 | 
			
		||||
                  | EP_CTRL_INTERRUPT_PER_BUFFER
 | 
			
		||||
                  | (ep->transfer_type << EP_CTRL_BUFFER_TYPE_LSB)
 | 
			
		||||
                  | dpram_offset;
 | 
			
		||||
    ep_reg |= bmInterval ? (bmInterval - 1) << EP_CTRL_HOST_INTERRUPT_INTERVAL_LSB : 0;
 | 
			
		||||
    if (bmInterval)
 | 
			
		||||
    {
 | 
			
		||||
      ep_reg |= (uint32_t) ((bmInterval - 1) << EP_CTRL_HOST_INTERRUPT_INTERVAL_LSB);
 | 
			
		||||
    }
 | 
			
		||||
    *ep->endpoint_control = ep_reg;
 | 
			
		||||
    pico_trace("endpoint control (0x%p) <- 0x%x\n", ep->endpoint_control, ep_reg);
 | 
			
		||||
    ep->configured = true;
 | 
			
		||||
@@ -341,7 +344,7 @@ static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t
 | 
			
		||||
        // device address
 | 
			
		||||
        // endpoint number / direction
 | 
			
		||||
        // preamble
 | 
			
		||||
        uint32_t reg = dev_addr | (num << USB_ADDR_ENDP1_ENDPOINT_LSB);
 | 
			
		||||
        uint32_t reg = (uint32_t) (dev_addr | (num << USB_ADDR_ENDP1_ENDPOINT_LSB));
 | 
			
		||||
 | 
			
		||||
        if (dir == TUSB_DIR_OUT)
 | 
			
		||||
        {
 | 
			
		||||
@@ -367,39 +370,41 @@ static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
bool hcd_init(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
    pico_trace("hcd_init %d\n", rhport);
 | 
			
		||||
    assert(rhport == 0);
 | 
			
		||||
  (void) rhport;
 | 
			
		||||
  pico_trace("hcd_init %d\n", rhport);
 | 
			
		||||
  assert(rhport == 0);
 | 
			
		||||
 | 
			
		||||
    // Reset any previous state
 | 
			
		||||
    rp2040_usb_init();
 | 
			
		||||
  // Reset any previous state
 | 
			
		||||
  rp2040_usb_init();
 | 
			
		||||
 | 
			
		||||
    // Force VBUS detect to always present, for now we assume vbus is always provided (without using VBUS En)
 | 
			
		||||
    usb_hw->pwr = USB_USB_PWR_VBUS_DETECT_BITS | USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_BITS;
 | 
			
		||||
  // Force VBUS detect to always present, for now we assume vbus is always provided (without using VBUS En)
 | 
			
		||||
  usb_hw->pwr = USB_USB_PWR_VBUS_DETECT_BITS | USB_USB_PWR_VBUS_DETECT_OVERRIDE_EN_BITS;
 | 
			
		||||
 | 
			
		||||
    irq_add_shared_handler(USBCTRL_IRQ, hcd_rp2040_irq, PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY);
 | 
			
		||||
  irq_add_shared_handler(USBCTRL_IRQ, hcd_rp2040_irq, PICO_SHARED_IRQ_HANDLER_HIGHEST_ORDER_PRIORITY);
 | 
			
		||||
 | 
			
		||||
    // clear epx and interrupt eps
 | 
			
		||||
    memset(&ep_pool, 0, sizeof(ep_pool));
 | 
			
		||||
  // clear epx and interrupt eps
 | 
			
		||||
  memset(&ep_pool, 0, sizeof(ep_pool));
 | 
			
		||||
 | 
			
		||||
    // Enable in host mode with SOF / Keep alive on
 | 
			
		||||
    usb_hw->main_ctrl = USB_MAIN_CTRL_CONTROLLER_EN_BITS | USB_MAIN_CTRL_HOST_NDEVICE_BITS;
 | 
			
		||||
    usb_hw->sie_ctrl = SIE_CTRL_BASE;
 | 
			
		||||
    usb_hw->inte = USB_INTE_BUFF_STATUS_BITS      | 
 | 
			
		||||
                   USB_INTE_HOST_CONN_DIS_BITS    | 
 | 
			
		||||
                   USB_INTE_HOST_RESUME_BITS      | 
 | 
			
		||||
                   USB_INTE_STALL_BITS            | 
 | 
			
		||||
                   USB_INTE_TRANS_COMPLETE_BITS   |
 | 
			
		||||
                   USB_INTE_ERROR_RX_TIMEOUT_BITS |
 | 
			
		||||
                   USB_INTE_ERROR_DATA_SEQ_BITS   ;
 | 
			
		||||
  // Enable in host mode with SOF / Keep alive on
 | 
			
		||||
  usb_hw->main_ctrl = USB_MAIN_CTRL_CONTROLLER_EN_BITS | USB_MAIN_CTRL_HOST_NDEVICE_BITS;
 | 
			
		||||
  usb_hw->sie_ctrl = SIE_CTRL_BASE;
 | 
			
		||||
  usb_hw->inte = USB_INTE_BUFF_STATUS_BITS      |
 | 
			
		||||
                 USB_INTE_HOST_CONN_DIS_BITS    |
 | 
			
		||||
                 USB_INTE_HOST_RESUME_BITS      |
 | 
			
		||||
                 USB_INTE_STALL_BITS            |
 | 
			
		||||
                 USB_INTE_TRANS_COMPLETE_BITS   |
 | 
			
		||||
                 USB_INTE_ERROR_RX_TIMEOUT_BITS |
 | 
			
		||||
                 USB_INTE_ERROR_DATA_SEQ_BITS   ;
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hcd_port_reset(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
    pico_trace("hcd_port_reset\n");
 | 
			
		||||
    assert(rhport == 0);
 | 
			
		||||
    // TODO: Nothing to do here yet. Perhaps need to reset some state?
 | 
			
		||||
  (void) rhport;
 | 
			
		||||
  pico_trace("hcd_port_reset\n");
 | 
			
		||||
  assert(rhport == 0);
 | 
			
		||||
  // TODO: Nothing to do here yet. Perhaps need to reset some state?
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hcd_port_reset_end(uint8_t rhport)
 | 
			
		||||
@@ -409,25 +414,27 @@ void hcd_port_reset_end(uint8_t rhport)
 | 
			
		||||
 | 
			
		||||
bool hcd_port_connect_status(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
    pico_trace("hcd_port_connect_status\n");
 | 
			
		||||
    assert(rhport == 0);
 | 
			
		||||
    return usb_hw->sie_status & USB_SIE_STATUS_SPEED_BITS;
 | 
			
		||||
  (void) rhport;
 | 
			
		||||
  pico_trace("hcd_port_connect_status\n");
 | 
			
		||||
  assert(rhport == 0);
 | 
			
		||||
  return usb_hw->sie_status & USB_SIE_STATUS_SPEED_BITS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tusb_speed_t hcd_port_speed_get(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
    assert(rhport == 0);
 | 
			
		||||
    // TODO: Should enumval this register
 | 
			
		||||
    switch (dev_speed())
 | 
			
		||||
    {
 | 
			
		||||
        case 1:
 | 
			
		||||
            return TUSB_SPEED_LOW;
 | 
			
		||||
        case 2:
 | 
			
		||||
            return TUSB_SPEED_FULL;
 | 
			
		||||
        default:
 | 
			
		||||
            panic("Invalid speed\n");
 | 
			
		||||
            return TUSB_SPEED_INVALID;
 | 
			
		||||
    }
 | 
			
		||||
  (void) rhport;
 | 
			
		||||
  assert(rhport == 0);
 | 
			
		||||
  // TODO: Should enumval this register
 | 
			
		||||
  switch (dev_speed())
 | 
			
		||||
  {
 | 
			
		||||
      case 1:
 | 
			
		||||
          return TUSB_SPEED_LOW;
 | 
			
		||||
      case 2:
 | 
			
		||||
          return TUSB_SPEED_FULL;
 | 
			
		||||
      default:
 | 
			
		||||
          panic("Invalid speed\n");
 | 
			
		||||
          return TUSB_SPEED_INVALID;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Close all opened endpoint belong to this device
 | 
			
		||||
@@ -465,15 +472,17 @@ uint32_t hcd_frame_number(uint8_t rhport)
 | 
			
		||||
 | 
			
		||||
void hcd_int_enable(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
    assert(rhport == 0);
 | 
			
		||||
    irq_set_enabled(USBCTRL_IRQ, true);
 | 
			
		||||
  (void) rhport;
 | 
			
		||||
  assert(rhport == 0);
 | 
			
		||||
  irq_set_enabled(USBCTRL_IRQ, true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hcd_int_disable(uint8_t rhport)
 | 
			
		||||
{
 | 
			
		||||
    // todo we should check this is disabling from the correct core; note currently this is never called
 | 
			
		||||
    assert(rhport == 0);
 | 
			
		||||
    irq_set_enabled(USBCTRL_IRQ, false);
 | 
			
		||||
  (void) rhport;
 | 
			
		||||
  // todo we should check this is disabling from the correct core; note currently this is never called
 | 
			
		||||
  assert(rhport == 0);
 | 
			
		||||
  irq_set_enabled(USBCTRL_IRQ, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
@@ -488,6 +497,7 @@ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const
 | 
			
		||||
 | 
			
		||||
    // Allocated differently based on if it's an interrupt endpoint or not
 | 
			
		||||
    struct hw_endpoint *ep = _hw_endpoint_allocate(ep_desc->bmAttributes.xfer);
 | 
			
		||||
    TU_ASSERT(ep);
 | 
			
		||||
 | 
			
		||||
    _hw_endpoint_init(ep,
 | 
			
		||||
        dev_addr,
 | 
			
		||||
@@ -510,7 +520,7 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t *
 | 
			
		||||
 | 
			
		||||
    // Get appropriate ep. Either EPX or interrupt endpoint
 | 
			
		||||
    struct hw_endpoint *ep = get_dev_ep(dev_addr, ep_addr);
 | 
			
		||||
    assert(ep);
 | 
			
		||||
    TU_ASSERT(ep);
 | 
			
		||||
 | 
			
		||||
    // EP should be inactive
 | 
			
		||||
    assert(!ep->active);
 | 
			
		||||
@@ -532,7 +542,7 @@ bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t *
 | 
			
		||||
 | 
			
		||||
        // That has set up buffer control, endpoint control etc
 | 
			
		||||
        // for host we have to initiate the transfer
 | 
			
		||||
        usb_hw->dev_addr_ctrl = dev_addr | (ep_num << USB_ADDR_ENDP_ENDPOINT_LSB);
 | 
			
		||||
        usb_hw->dev_addr_ctrl = (uint32_t) (dev_addr | (ep_num << USB_ADDR_ENDP_ENDPOINT_LSB));
 | 
			
		||||
 | 
			
		||||
        uint32_t flags = USB_SIE_CTRL_START_TRANS_BITS | SIE_CTRL_BASE |
 | 
			
		||||
                         (ep_dir ? USB_SIE_CTRL_RECEIVE_DATA_BITS : USB_SIE_CTRL_SEND_DATA_BITS);
 | 
			
		||||
@@ -556,11 +566,12 @@ bool hcd_setup_send(uint8_t rhport, uint8_t dev_addr, uint8_t const setup_packet
 | 
			
		||||
#pragma GCC diagnostic push
 | 
			
		||||
#pragma GCC diagnostic ignored "-Warray-bounds"
 | 
			
		||||
#pragma GCC diagnostic ignored "-Wstringop-overflow"
 | 
			
		||||
    memcpy((void*)&usbh_dpram->setup_packet[0], setup_packet, 8);
 | 
			
		||||
    memcpy((void*) (uintptr_t) &usbh_dpram->setup_packet[0], setup_packet, 8);
 | 
			
		||||
#pragma GCC diagnostic pop
 | 
			
		||||
 | 
			
		||||
    // Configure EP0 struct with setup info for the trans complete
 | 
			
		||||
    struct hw_endpoint *ep = _hw_endpoint_allocate(0);
 | 
			
		||||
    TU_ASSERT(ep);
 | 
			
		||||
 | 
			
		||||
    // EPX should be inactive
 | 
			
		||||
    assert(!ep->active);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user