dma.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /* dma.h: FRV DMA controller management
  2. *
  3. * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
  4. * Written by David Howells (dhowells@redhat.com)
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version
  9. * 2 of the License, or (at your option) any later version.
  10. */
  11. #ifndef _ASM_DMA_H
  12. #define _ASM_DMA_H
  13. //#define DMA_DEBUG 1
  14. #include <linux/interrupt.h>
  15. #undef MAX_DMA_CHANNELS /* don't use kernel/dma.c */
  16. /* under 2.4 this is actually needed by the new bootmem allocator */
  17. #define MAX_DMA_ADDRESS PAGE_OFFSET
  18. /*
  19. * FRV DMA controller management
  20. */
  21. typedef irqreturn_t (*dma_irq_handler_t)(int dmachan, unsigned long cstr, void *data);
  22. extern void frv_dma_init(void);
  23. extern int frv_dma_open(const char *devname,
  24. unsigned long dmamask,
  25. int dmacap,
  26. dma_irq_handler_t handler,
  27. unsigned long irq_flags,
  28. void *data);
  29. /* channels required */
  30. #define FRV_DMA_MASK_ANY ULONG_MAX /* any channel */
  31. /* capabilities required */
  32. #define FRV_DMA_CAP_DREQ 0x01 /* DMA request pin */
  33. #define FRV_DMA_CAP_DACK 0x02 /* DMA ACK pin */
  34. #define FRV_DMA_CAP_DONE 0x04 /* DMA done pin */
  35. extern void frv_dma_close(int dma);
  36. extern void frv_dma_config(int dma, unsigned long ccfr, unsigned long cctr, unsigned long apr);
  37. extern void frv_dma_start(int dma,
  38. unsigned long sba, unsigned long dba,
  39. unsigned long pix, unsigned long six, unsigned long bcl);
  40. extern void frv_dma_restart_circular(int dma, unsigned long six);
  41. extern void frv_dma_stop(int dma);
  42. extern int is_frv_dma_interrupting(int dma);
  43. extern void frv_dma_dump(int dma);
  44. extern void frv_dma_status_clear(int dma);
  45. #define FRV_DMA_NCHANS 8
  46. #define FRV_DMA_4CHANS 4
  47. #define FRV_DMA_8CHANS 8
  48. #define DMAC_CCFRx 0x00 /* channel configuration reg */
  49. #define DMAC_CCFRx_CM_SHIFT 16
  50. #define DMAC_CCFRx_CM_DA 0x00000000
  51. #define DMAC_CCFRx_CM_SCA 0x00010000
  52. #define DMAC_CCFRx_CM_DCA 0x00020000
  53. #define DMAC_CCFRx_CM_2D 0x00030000
  54. #define DMAC_CCFRx_ATS_SHIFT 8
  55. #define DMAC_CCFRx_RS_INTERN 0x00000000
  56. #define DMAC_CCFRx_RS_EXTERN 0x00000001
  57. #define DMAC_CCFRx_RS_SHIFT 0
  58. #define DMAC_CSTRx 0x08 /* channel status reg */
  59. #define DMAC_CSTRx_FS 0x0000003f
  60. #define DMAC_CSTRx_NE 0x00000100
  61. #define DMAC_CSTRx_FED 0x00000200
  62. #define DMAC_CSTRx_WER 0x00000800
  63. #define DMAC_CSTRx_RER 0x00001000
  64. #define DMAC_CSTRx_CE 0x00002000
  65. #define DMAC_CSTRx_INT 0x00800000
  66. #define DMAC_CSTRx_BUSY 0x80000000
  67. #define DMAC_CCTRx 0x10 /* channel control reg */
  68. #define DMAC_CCTRx_DSIZ_1 0x00000000
  69. #define DMAC_CCTRx_DSIZ_2 0x00000001
  70. #define DMAC_CCTRx_DSIZ_4 0x00000002
  71. #define DMAC_CCTRx_DSIZ_32 0x00000005
  72. #define DMAC_CCTRx_DAU_HOLD 0x00000000
  73. #define DMAC_CCTRx_DAU_INC 0x00000010
  74. #define DMAC_CCTRx_DAU_DEC 0x00000020
  75. #define DMAC_CCTRx_SSIZ_1 0x00000000
  76. #define DMAC_CCTRx_SSIZ_2 0x00000100
  77. #define DMAC_CCTRx_SSIZ_4 0x00000200
  78. #define DMAC_CCTRx_SSIZ_32 0x00000500
  79. #define DMAC_CCTRx_SAU_HOLD 0x00000000
  80. #define DMAC_CCTRx_SAU_INC 0x00001000
  81. #define DMAC_CCTRx_SAU_DEC 0x00002000
  82. #define DMAC_CCTRx_FC 0x08000000
  83. #define DMAC_CCTRx_ICE 0x10000000
  84. #define DMAC_CCTRx_IE 0x40000000
  85. #define DMAC_CCTRx_ACT 0x80000000
  86. #define DMAC_SBAx 0x18 /* source base address reg */
  87. #define DMAC_DBAx 0x20 /* data base address reg */
  88. #define DMAC_PIXx 0x28 /* primary index reg */
  89. #define DMAC_SIXx 0x30 /* secondary index reg */
  90. #define DMAC_BCLx 0x38 /* byte count limit reg */
  91. #define DMAC_APRx 0x40 /* alternate pointer reg */
  92. /*
  93. * required for PCI + MODULES
  94. */
  95. #ifdef CONFIG_PCI
  96. extern int isa_dma_bridge_buggy;
  97. #else
  98. #define isa_dma_bridge_buggy (0)
  99. #endif
  100. #endif /* _ASM_DMA_H */