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/] [pexioctl.h] - Blame information for rev 54

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
#ifndef _PEXIOCTL_H_
2
#define _PEXIOCTL_H_
3
 
4
#define PEX_DEVICE_NAME "pexdevice"
5
 
6
#include <linux/types.h>
7
 
8
#define MAX_STRING_LEN  255
9
#define PEX_DEVICE_TYPE             'x'
10
#define PEX_MAKE_IOCTL(t,c) _IO((t), (c))
11
 
12
//-----------------------------------------------------------------------------
13
// ioctl requests command code
14
typedef enum _PEX_NUM_FUNC {
15
 
16
    PEX_BOARD_INFO = 1,
17
    PEX_MEM_ALLOC = 2,
18
    PEX_MEM_FREE = 3,
19
    PEX_STUB_ALLOC = 4,
20
    PEX_STUB_FREE = 5,
21
 
22
    PEX_MEMIO_SET = 10,
23
    PEX_MEMIO_FREE = 11,
24
    PEX_MEMIO_START = 12,
25
    PEX_MEMIO_STOP = 13,
26
    PEX_MEMIO_STATE = 14,
27
    PEX_WAIT_BUFFER = 15,
28
    PEX_WAIT_BLOCK = 16,
29
    PEX_SET_SRC = 17,
30
    PEX_SET_DIR = 18,
31
    PEX_SET_DRQ = 19,
32
    PEX_RESET_FIFO = 20,
33
    PEX_DONE = 21,
34
    PEX_ADJUST = 22
35
 
36
 
37
} PEX_NUM_FUNC;
38
 
39
//-----------------------------------------------------------------------------
40
// ioctl requests code
41
#define IOCTL_PEX_BOARD_INFO \
42
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_BOARD_INFO)
43
 
44
#define IOCTL_PEX_MEM_ALLOC \
45
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEM_ALLOC)
46
 
47
#define IOCTL_PEX_MEM_FREE \
48
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEM_FREE)
49
 
50
#define IOCTL_PEX_STUB_ALLOC \
51
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_STUB_ALLOC)
52
 
53
#define IOCTL_PEX_STUB_FREE \
54
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_STUB_FREE)
55
 
56
#define IOCTL_AMB_SET_MEMIO \
57
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEMIO_SET)
58
 
59
#define IOCTL_AMB_FREE_MEMIO \
60
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEMIO_FREE)
61
 
62
#define IOCTL_AMB_START_MEMIO \
63
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEMIO_START)
64
 
65
#define IOCTL_AMB_STOP_MEMIO \
66
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEMIO_STOP)
67
 
68
#define IOCTL_AMB_STATE_MEMIO \
69
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_MEMIO_STATE)
70
 
71
#define IOCTL_AMB_WAIT_DMA_BUFFER \
72
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_WAIT_BUFFER)
73
 
74
#define IOCTL_AMB_WAIT_DMA_BLOCK \
75
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_WAIT_BLOCK)
76
 
77
#define IOCTL_AMB_SET_SRC_MEM \
78
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_SET_SRC)
79
 
80
#define IOCTL_AMB_SET_DIR_MEM \
81
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_SET_DIR)
82
 
83
#define IOCTL_AMB_SET_DRQ_MEM \
84
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_SET_DRQ)
85
 
86
#define IOCTL_AMB_RESET_FIFO \
87
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_RESET_FIFO)
88
 
89
#define IOCTL_AMB_DONE \
90
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_DONE)
91
 
92
#define IOCTL_AMB_ADJUST \
93
            PEX_MAKE_IOCTL(PEX_DEVICE_TYPE, PEX_ADJUST)
94
 
95
//-----------------------------------------------------------------------------
96
// memory block structure
97
struct memory_block {
98
        size_t  phys;
99
        void*   virt;
100
        size_t  size;
101
};
102
 
103
//-----------------------------------------------------------------------------
104
// memory block structure
105
struct memory_descriptor {
106
        size_t dma_channel;
107
        size_t total_blocks;
108
        struct memory_block *blocks;
109
};
110
 
111
//-----------------------------------------------------------------------------
112
// stub memory structure
113
struct stub_descriptor {
114
        size_t dma_channel;
115
        struct memory_block stub;
116
};
117
 
118
//-----------------------------------------------------------------------------
119
// Extended FIFO Id
120
#define PE_EXT_FIFO_ID  0x0018
121
 
122
//-----------------------------------------------------------------------------
123
// type of memory
124
enum {
125
    USER_MEMORY_TYPE    = 0,
126
    SYSTEM_MEMORY_TYPE  = 1
127
};
128
 
129
//-----------------------------------------------------------------------------
130
//  state of DMA channel
131
enum {
132
    STATE_RUN = 1,
133
    STATE_STOP = 2,
134
    STATE_DESTROY = 3,
135
    STATE_BREAK = 4
136
};
137
 
138
//-----------------------------------------------------------------------------
139
//  direction of DMA transfer
140
enum {
141
    TRANSFER_DIR_TO_DEVICE = 0x0,       // From Host to Device
142
    TRANSFER_DIR_FROM_DEVICE = 0x1      // From Device to Host
143
};
144
 
145
//-----------------------------------------------------------------------------
146
enum {
147
        BRDstrm_DIR_IN = 0x1,                           // To HOST
148
        BRDstrm_DIR_OUT = 0x2,                          // From HOST
149
        BRDstrm_DIR_INOUT = 0x3                         // Both Directions
150
};
151
 
152
//-----------------------------------------------------------------------------
153
// returns the number of pages spanned by the size.
154
#define PAGES_SPANNED(Size) (((Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)
155
 
156
//-----------------------------------------------------------------------------
157
// Stub Structure
158
typedef struct _AMB_STUB {
159
    u32 lastBlock;              // Number of Block which was filled last Time
160
    u32 totalCounter;           // Total Counter of all filled Block
161
    u32 offset;                 // First Unfilled Byte
162
    u32 state;                  // CBUF local state
163
} AMB_STUB, *PAMB_STUB;
164
 
165
//-----------------------------------------------------------------------------
166
// Descriptor Structure (PE_EXT_FIFO)
167
// PCI Address (byte 0) = 0 always
168
// DMA Length (byte 0)  = 0 always
169
typedef struct _DMA_CHAINING_DESCR_EXT {
170
 
171
    u8  AddrByte1;                              // PCI Address (byte 1)
172
    u8  AddrByte2;                              // PCI Address (byte 2)
173
    u8  AddrByte3;                              // PCI Address (byte 3)
174
    u8  AddrByte4;                              // PCI Address (byte 4)
175
 
176
    struct {
177
        u8 JumpNextDescr : 1;   // Jump to Next Descriptor
178
        u8 JumpNextBlock : 1;   // Jump to Next Block
179
        u8 JumpDescr0    : 1;   // Jump to Descriptor 0
180
        u8 Res0          : 1;   // reserved
181
        u8 EndOfTrans    : 1;   // End of Transfer
182
        u8 Res           : 3;   // reserved
183
    } Cmd;                                                      // Descriptor Command
184
 
185
    u8  SizeByte1;                              // DMA Length (byte 1), bit 0: 0 - TRANSFER_DIR_TO_DEVICE, 1 - TRANSFER_DIR_FROM_DEVICE
186
    u8  SizeByte2;                              // DMA Length (byte 2)
187
    u8  SizeByte3;                              // DMA Length (byte 3)
188
 
189
} DMA_CHAINING_DESCR_EXT, *PDMA_CHAINING_DESCR_EXT;
190
 
191
//-----------------------------------------------------------------------------
192
// Next descriptor block
193
typedef struct _DMA_NEXT_BLOCK {
194
 
195
    u32 NextBlkAddr;
196
    u16 Signature;                              // 0x4953
197
    u16 Crc;                                    // control code
198
 
199
} DMA_NEXT_BLOCK, *PDMA_NEXT_BLOCK;
200
 
201
#define DSCR_BLOCK_SIZE 64
202
 
203
//-----------------------------------------------------------------------------
204
 
205
#endif

powered by: WebSVN 2.1.0

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