OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [driver/] [pexdrv/] [dmachan.h] - Blame information for rev 54

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
//****************** File DmaChannel.h *********************************
2
//  class CDmaChannel definition
3
//
4
//      Copyright (c) 2007, Instrumental Systems,Corp.
5
//  Written by Dorokhin Andrey
6
//
7
//  History:
8
//  28-10-07 - builded
9
//
10
//*******************************************************************
11
 
12
#ifndef         _DMA_CHAN_H_
13
#define         _DMA_CHAN_H_
14
 
15
#include "pexioctl.h"
16 54 v.karak
#include "memory.h"
17 2 dsmv
 
18
#define PE_EXT_FIFO_ID  0x0018
19
 
20
typedef void (*TASKLET_ROUTINE)(unsigned long);
21
 
22
struct CDmaChannel
23
{
24
    u32                                                 m_NumberOfChannel;
25
    u16                                                 m_idBlockFifo;
26
 
27
    void                                                *m_Board;                               // PCI device object
28 54 v.karak
    struct device               *m_dev;                                 // PCI device object
29
    struct  tasklet_struct      m_Dpc;                                  // the DPC object
30
    wait_queue_head_t           m_DmaWq;
31
    spinlock_t                  m_DmaLock;                              // spinlock
32 2 dsmv
 
33
    KEVENT                                              m_BlockEndEvent;
34
    KEVENT                                              m_BufferEndEvent;
35
 
36 54 v.karak
    AMB_STUB                    m_State;
37 2 dsmv
 
38
    u32                                                 m_AdmNum;
39
    u32                                                 m_TetrNum;
40
    u32                                                 m_DmaDirection;
41
    u32                                                 m_DmaLocalAddress;
42
    u32                                                 m_DmaCycling;
43
 
44
    u32                                                 m_CycleNum;
45
    u32                                                 m_BlocksRemaining;
46
    u32                                                 m_CurBlockNum;
47
 
48
    u32                                                 m_UseCount;
49
 
50
    u32                                                 m_AdjustMode;
51
    u32                                                 m_DoneBlock;
52
    u32                                                 m_DoneFlag;
53
 
54
    u32                                                 m_preBlockCount1;
55
    u32                                                 m_preBlockCount2;
56
    u32                                                 m_preBlockCount3;
57
 
58
    u32                                                 m_MemType;
59 54 v.karak
    AMB_STUB                    *m_pStub;
60 2 dsmv
 
61
    SHARED_MEMORY_DESCRIPTION   m_StubDscr;             //Содержит описатель управляющего блока
62
 
63
    u32                                                 m_BlockCount;   //Количество блоков для DMA
64
    u32                                                 m_BlockSize;    //Размер одного блока DMA
65
 
66 54 v.karak
    SHARED_MEMORY_DESCRIPTION   m_pBufDscr;     //Описатель для адресов блоков DMA каждый элемент содержит
67
    SHARED_MEMORY_DESCRIPTION   m_BufDscrVA;
68
    dma_addr_t                  m_BufDscrPA;
69
/*
70
    DMA_CHAINING_DESCRIPTOR *m_pScatterGatherTableVA;
71
    dma_addr_t m_pScatterGatherTablePA;
72 2 dsmv
 
73 54 v.karak
    DMA_CHAINING_DESCRIPTOR *m_SGTableDscrVA;
74
    dma_addr_t  m_SGTableDscrPA;
75
*/
76
 
77 2 dsmv
    DMA_CHAINING_DESCR_EXT                              *m_pScatterGatherTableExt;              //Содержит массив для организации цепочек DMA (v2)
78
    u32                                                 m_ScatterGatherBlockCnt;                //Количество элементов-дескрипторов цепочек DMA
79
    SHARED_MEMORY_DESCRIPTION                           m_SGTableDscr;                                  //Описатель массива цепочек DMA
80
    u32                                                 m_ScatterGatherTableEntryCnt;   //Количество блоков для DMA
81
 
82
    TASKLET_ROUTINE                                     m_DpcForIsr;
83
};
84
 
85
struct CDmaChannel* CDmaChannelCreate(  u32 NumberOfChannel,
86 54 v.karak
                                        TASKLET_ROUTINE dpc,
87 2 dsmv
                                        void *m_Board,
88
                                        struct device   *dev,
89
                                        u32 cbMaxTransferLength,
90
                                        u16 idBlockFifo,
91
                                        int bScatterGather );
92
void CDmaChannelDelete(struct CDmaChannel *dma);
93
int RequestMemory(struct CDmaChannel *dma, void **ppMemPhysAddr, u32 size, u32 *pCount, void **pStubPhysAddr, u32 bMemType);
94 54 v.karak
int ReleaseMemory(struct CDmaChannel *dma);
95 2 dsmv
int RequestSysBuf(struct CDmaChannel *dma, void **pMemPhysAddr);
96 54 v.karak
int ReleaseSysBuf(struct CDmaChannel *dma);
97 2 dsmv
int RequestSGList(struct CDmaChannel *dma);
98 54 v.karak
int ReleaseSGList(struct CDmaChannel *dma);
99 2 dsmv
int RequestStub(struct CDmaChannel *dma, void **pStubPhysAddr);
100
void ReleaseStub(struct CDmaChannel *dma);
101
int SetScatterGatherListExt(struct CDmaChannel *dma);
102 54 v.karak
int SetScatterGatherListExtUser(struct CDmaChannel *dma);
103 2 dsmv
void FreeUserAddress(struct CDmaChannel *dma);
104
u32 NextDmaTransfer(struct CDmaChannel *dma);
105
int SetScatterGatherList(struct CDmaChannel *dma);
106
int SetDmaDirection(struct CDmaChannel *dma, u32 DmaDirection);
107
void SetDmaLocalAddress(struct CDmaChannel *dma, u32 Address);
108
void SetLocalBusWidth(struct CDmaChannel *dma, u32 Param);
109
void ReferenceBlockEndEvent(struct CDmaChannel *dma, void* hBlockEndEvent);
110
void DereferenceBlockEndEvent(struct CDmaChannel *dma);
111
void SetAdmTetr(struct CDmaChannel *dma, u32 AdmNum, u32 TetrNum);
112
void Adjust(struct CDmaChannel *dma, u32 mode);
113
void GetState(struct CDmaChannel *dma, u32 *BlockNum, u32 *BlockNumTotal, u32 *OffsetInBlock, u32 *DmaChanState);
114
int CompleteDmaTransfer(struct CDmaChannel *dma);
115
int WaitBlockEndEvent(struct CDmaChannel *dma, u32 msTimeout);
116
int WaitBufferEndEvent(struct CDmaChannel *dma, u32 msTimeout);
117
u32 GetAdmNum(struct CDmaChannel *dma);
118
u32 GetTetrNum(struct CDmaChannel *dma);
119
void GetSGStartParams(struct CDmaChannel *dma, u64* SGTableAddress, u32* LocalAddress, u32* DmaDirection);
120
int StartDmaTransfer(struct CDmaChannel *dma, u32 IsCycling);
121
u32 SetDoneBlock(struct CDmaChannel *dma, long numBlk);
122 54 v.karak
//void DmaDpcForIsr( unsigned long Context );
123 2 dsmv
 
124
#endif //_DMA_CHANNEL_H_
125
 
126
//
127
// End of File
128
//

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.