xhci-mtk.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (C) 2014 mtk
  3. *
  4. *
  5. *
  6. * This file is licensed under the terms of the GNU General Public
  7. * License version 2. This program is licensed "as is" without any
  8. * warranty of any kind, whether express or implied.
  9. */
  10. #ifndef __LINUX_XHCI_MTK_H
  11. #define __LINUX_XHCI_MTK_H
  12. #include "xhci.h"
  13. #define MTK_SCH_NEW 1
  14. #define SCH_SUCCESS 1
  15. #define SCH_FAIL 0
  16. #define MAX_EP_NUM 64
  17. #define SS_BW_BOUND 51000
  18. #define HS_BW_BOUND 6144
  19. /* #define HS_BW_BOUND 6145 // for HS HB transfer test. (Test Plan SOP 3.4.1 and 3.4.2) */
  20. #define USB_EP_CONTROL 0
  21. #define USB_EP_ISOC 1
  22. #define USB_EP_BULK 2
  23. #define USB_EP_INT 3
  24. #define USB_SPEED_LOW 1
  25. #define USB_SPEED_FULL 2
  26. #define USB_SPEED_HIGH 3
  27. #define USB_SPEED_SUPER 5
  28. /* mtk scheduler bitmasks */
  29. #define BPKTS(p) ((p) & 0x3f)
  30. #define BCSCOUNT(p) (((p) & 0x7) << 8)
  31. #define BBM(p) ((p) << 11)
  32. #define BOFFSET(p) ((p) & 0x3fff)
  33. #define BREPEAT(p) (((p) & 0x7fff) << 16)
  34. #if 1
  35. typedef unsigned int mtk_u32;
  36. typedef unsigned long long mtk_u64;
  37. #endif
  38. #define NULL ((void *)0)
  39. struct mtk_xhci_ep_ctx {
  40. mtk_u32 ep_info;
  41. mtk_u32 ep_info2;
  42. mtk_u64 deq;
  43. mtk_u32 tx_info;
  44. /* offset 0x14 - 0x1f reserved for HC internal use */
  45. mtk_u32 reserved[3];
  46. };
  47. struct sch_ep {
  48. /* device info */
  49. int dev_speed;
  50. int isTT;
  51. /* ep info */
  52. int is_in;
  53. int ep_type;
  54. int maxp;
  55. int interval;
  56. int burst;
  57. int mult;
  58. /* scheduling info */
  59. int offset;
  60. int repeat;
  61. int pkts;
  62. int cs_count;
  63. int burst_mode;
  64. /* other */
  65. int bw_cost; /* bandwidth cost in each repeat; including overhead */
  66. mtk_u32 *ep; /* address of usb_endpoint pointer */
  67. };
  68. extern int mtk_xhci_scheduler_init(void);
  69. extern int mtk_xhci_scheduler_add_ep(int dev_speed, int is_in, int isTT, int ep_type, int maxp,
  70. int interval, int burst, int mult, mtk_u32 *ep, mtk_u32 *ep_ctx,
  71. struct sch_ep *sch_ep);
  72. extern struct sch_ep *mtk_xhci_scheduler_remove_ep(int dev_speed, int is_in, int isTT, int ep_type,
  73. mtk_u32 *ep);
  74. extern int mtk_xhci_ip_init(struct usb_hcd *hcd, struct xhci_hcd *xhci);
  75. extern void mtk_xhci_vbus_on(struct platform_device *pdev);
  76. extern void mtk_xhci_vbus_off(struct platform_device *pdev);
  77. #define XHCI_DRIVER_NAME "xhci"
  78. #define XHCI_BASE_REGS_ADDR_RES_NAME "ssusb_base"
  79. #define XHCI_SIF_REGS_ADDR_RES_NAME "ssusb_sif"
  80. #define XHCI_SIF2_REGS_ADDR_RES_NAME "ssusb_sif2"
  81. #endif /* __LINUX_XHCI_MTK_H */