123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * Copyright (c) 2024, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #ifndef _USB_OHCI_PRIV_H
- #define _USB_OHCI_PRIV_H
- #include "usbh_core.h"
- #include "usbh_hub.h"
- #include "usb_ohci_reg.h"
- #define OHCI_HCOR ((struct ohci_hcor *)(uintptr_t)(bus->hcd.reg_base + CONFIG_USB_OHCI_HCOR_OFFSET))
- #define OHCI_PTR2ADDR(x) ((uint32_t)(uintptr_t)(x) & ~0x0F)
- #define OHCI_ADDR2ED(x) ((struct ohci_ed_hw *)(uintptr_t)((uint32_t)(x) & ~0x0F))
- #define OHCI_ADDR2TD(x) ((struct ohci_td_hw *)(uintptr_t)((uint32_t)(x) & ~0x0F))
- #ifndef CONFIG_USB_OHCI_ED_NUM
- #define CONFIG_USB_OHCI_ED_NUM CONFIG_USBHOST_PIPE_NUM
- #endif
- #ifndef CONFIG_USB_OHCI_TD_NUM
- #define CONFIG_USB_OHCI_TD_NUM 3
- #endif
- #ifndef CONFIG_USB_OHCI_ALIGN_SIZE
- #define CONFIG_USB_OHCI_ALIGN_SIZE 64
- #endif
- struct ohci_ed_hw;
- struct ohci_td_hw {
- struct ohci_gtd hw;
- struct usbh_urb *urb;
- bool dir_in;
- uint32_t buf_start;
- uint32_t length;
- } __attribute__((aligned(CONFIG_USB_OHCI_ALIGN_SIZE))); /* min is 16bytes, we use CONFIG_USB_OHCI_ALIGN_SIZE for cacheline */
- struct ohci_ed_hw {
- struct ohci_ed hw;
- struct ohci_td_hw td_pool[CONFIG_USB_OHCI_TD_NUM];
- uint32_t td_count;
- uint8_t ed_type;
- usb_osal_sem_t waitsem;
- } __attribute__((aligned(CONFIG_USB_OHCI_ALIGN_SIZE))); /* min is 16bytes, we use CONFIG_USB_OHCI_ALIGN_SIZE for cacheline */
- struct ohci_hcd {
- bool ohci_ed_used[CONFIG_USB_OHCI_ED_NUM];
- uint8_t n_ports;
- };
- int ohci_init(struct usbh_bus *bus);
- int ohci_deinit(struct usbh_bus *bus);
- uint16_t ohci_get_frame_number(struct usbh_bus *bus);
- int ohci_roothub_control(struct usbh_bus *bus, struct usb_setup_packet *setup, uint8_t *buf);
- int ohci_submit_urb(struct usbh_urb *urb);
- int ohci_kill_urb(struct usbh_urb *urb);
- void OHCI_IRQHandler(uint8_t busid);
- #endif
|