hv_drv_UsbMusbHsDma.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * @file hv_drv_UsbMusbHsDma.h
  3. * @brief Header file of musb hs dma driver.
  4. *
  5. * @author HiView SoC Software Team
  6. * @version 1.0.0
  7. * @date 2022-06-15
  8. */
  9. #ifndef __HV_DRV_USB_MUSB_HS_DMA_H
  10. #define __HV_DRV_USB_MUSB_HS_DMA_H
  11. /*
  12. * MUSB OTG driver - support for Mentor's DMA controller
  13. *
  14. * Copyright 2005 Mentor Graphics Corporation
  15. * Copyright (C) 2005-2007 by Texas Instruments
  16. *
  17. * This program is free software; you can redistribute it and/or
  18. * modify it under the terms of the GNU General Public License
  19. * version 2 as published by the Free Software Foundation.
  20. *
  21. * This program is distributed in the hope that it will be useful, but
  22. * WITHOUT ANY WARRANTY; without even the implied warranty of
  23. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  24. * General Public License for more details.
  25. *
  26. * You should have received a copy of the GNU General Public License
  27. * along with this program; if not, write to the Free Software
  28. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  29. * 02110-1301 USA
  30. *
  31. * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
  32. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  33. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
  34. * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  35. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  36. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  37. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  38. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  39. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  40. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  41. *
  42. */
  43. #define MUSB_HSDMA_BASE 0x200
  44. #define MUSB_HSDMA_INTR (MUSB_HSDMA_BASE + 0)
  45. #define MUSB_HSDMA_CONTROL 0x4
  46. #define MUSB_HSDMA_ADDRESS 0x8
  47. #define MUSB_HSDMA_COUNT 0xc
  48. #define MUSB_HSDMA_CHANNEL_OFFSET(_bchannel, _offset) \
  49. (MUSB_HSDMA_BASE + (_bchannel << 4) + _offset)
  50. #define musb_read_hsdma_addr(bchannel) \
  51. musb_readl(MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_ADDRESS))
  52. #define musb_write_hsdma_addr(bchannel, addr) \
  53. musb_writel(MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_ADDRESS), \
  54. addr)
  55. #define musb_read_hsdma_count(bchannel) \
  56. musb_readl(MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_COUNT))
  57. #define musb_write_hsdma_count(bchannel, len) \
  58. musb_writel(MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_COUNT), \
  59. len)
  60. /* control register (16-bit): */
  61. #define MUSB_HSDMA_ENABLE_SHIFT 0
  62. #define MUSB_HSDMA_TRANSMIT_SHIFT 1
  63. #define MUSB_HSDMA_MODE1_SHIFT 2
  64. #define MUSB_HSDMA_IRQENABLE_SHIFT 3
  65. #define MUSB_HSDMA_ENDPOINT_SHIFT 4
  66. #define MUSB_HSDMA_BUSERROR_SHIFT 8
  67. #define MUSB_HSDMA_BURSTMODE_SHIFT 9
  68. #define MUSB_HSDMA_BURSTMODE (2 << MUSB_HSDMA_BURSTMODE_SHIFT)
  69. #define MUSB_HSDMA_BURSTMODE_UNSPEC 0
  70. #define MUSB_HSDMA_BURSTMODE_INCR4 1
  71. #define MUSB_HSDMA_BURSTMODE_INCR8 2
  72. #define MUSB_HSDMA_BURSTMODE_INCR16 3
  73. #define MUSB_HSDMA_CHANNELS 8
  74. struct musb_dma_controller;
  75. struct musb_dma_channel {
  76. struct dma_channel channel;
  77. struct musb_dma_controller *controller;
  78. u32 start_addr;
  79. u32 len;
  80. u16 max_packet_sz;
  81. u8 idx;
  82. u8 epnum;
  83. u8 transmit;
  84. };
  85. struct musb_dma_controller {
  86. struct dma_controller controller;
  87. struct musb_dma_channel channel[MUSB_HSDMA_CHANNELS];
  88. void *private_data;
  89. u8 channel_count;
  90. u8 used_channels;
  91. };
  92. #endif