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 2

Go to most recent revision | 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
// board configuration data structure
97
struct board_info {
98
        size_t  PhysAddress[6]; // OUT
99
        void*   VirtAddress[6]; // OUT
100
        size_t  Size[6];        // OUT
101
        size_t  InterruptLevel; // OUT
102
        size_t  InterruptVector;// OUT
103
        unsigned short vendor_id;  // OUT
104
        unsigned short device_id;  // OUT
105
};
106
 
107
//-----------------------------------------------------------------------------
108
// memory block structure
109
struct memory_block {
110
        size_t  phys;
111
        void*   virt;
112
        size_t  size;
113
};
114
 
115
//-----------------------------------------------------------------------------
116
// memory block structure
117
struct memory_descriptor {
118
        size_t dma_channel;
119
        size_t total_blocks;
120
        struct memory_block *blocks;
121
};
122
 
123
//-----------------------------------------------------------------------------
124
// stub memory structure
125
struct stub_descriptor {
126
        size_t dma_channel;
127
        struct memory_block stub;
128
};
129
 
130
//-----------------------------------------------------------------------------
131
// Extended FIFO Id
132
#define PE_EXT_FIFO_ID  0x0018
133
 
134
//-----------------------------------------------------------------------------
135
// type of memory
136
enum {
137
    USER_MEMORY_TYPE    = 0,
138
    SYSTEM_MEMORY_TYPE  = 1
139
};
140
 
141
//-----------------------------------------------------------------------------
142
//  state of DMA channel
143
enum {
144
    STATE_RUN = 1,
145
    STATE_STOP = 2,
146
    STATE_DESTROY = 3,
147
    STATE_BREAK = 4
148
};
149
 
150
//-----------------------------------------------------------------------------
151
//  direction of DMA transfer
152
enum {
153
    TRANSFER_DIR_TO_DEVICE = 0x0,       // From Host to Device
154
    TRANSFER_DIR_FROM_DEVICE = 0x1      // From Device to Host
155
};
156
 
157
//-----------------------------------------------------------------------------
158
enum {
159
        BRDstrm_DIR_IN = 0x1,                           // To HOST
160
        BRDstrm_DIR_OUT = 0x2,                          // From HOST
161
        BRDstrm_DIR_INOUT = 0x3                         // Both Directions
162
};
163
 
164
//-----------------------------------------------------------------------------
165
// returns the number of pages spanned by the size.
166
#define PAGES_SPANNED(Size) (((Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)
167
 
168
//-----------------------------------------------------------------------------
169
// Shared Memory between kernel and user mode description
170
typedef struct _SHARED_MEMORY_DESCRIPTION {
171
    void*                       SystemAddress;  // INOUT - system memory address
172
    size_t                      LogicalAddress; // OUT - logical memory address
173
    size_t                      dummy;          // OUT - logical memory address
174
} SHARED_MEMORY_DESCRIPTION, *PSHARED_MEMORY_DESCRIPTION;
175
 
176
//-----------------------------------------------------------------------------
177
// Stub Structure
178
typedef struct _AMB_STUB {
179
    u32 lastBlock;              // Number of Block which was filled last Time
180
    u32 totalCounter;           // Total Counter of all filled Block
181
    u32 offset;                 // First Unfilled Byte
182
    u32 state;                  // CBUF local state
183
} AMB_STUB, *PAMB_STUB;
184
 
185
//-----------------------------------------------------------------------------
186
// Descriptor Structure (PE_EXT_FIFO)
187
// PCI Address (byte 0) = 0 always
188
// DMA Length (byte 0)  = 0 always
189
typedef struct _DMA_CHAINING_DESCR_EXT {
190
 
191
    u8  AddrByte1;                              // PCI Address (byte 1)
192
    u8  AddrByte2;                              // PCI Address (byte 2)
193
    u8  AddrByte3;                              // PCI Address (byte 3)
194
    u8  AddrByte4;                              // PCI Address (byte 4)
195
 
196
    struct {
197
        u8 JumpNextDescr : 1;   // Jump to Next Descriptor
198
        u8 JumpNextBlock : 1;   // Jump to Next Block
199
        u8 JumpDescr0    : 1;   // Jump to Descriptor 0
200
        u8 Res0          : 1;   // reserved
201
        u8 EndOfTrans    : 1;   // End of Transfer
202
        u8 Res           : 3;   // reserved
203
    } Cmd;                                                      // Descriptor Command
204
 
205
    u8  SizeByte1;                              // DMA Length (byte 1), bit 0: 0 - TRANSFER_DIR_TO_DEVICE, 1 - TRANSFER_DIR_FROM_DEVICE
206
    u8  SizeByte2;                              // DMA Length (byte 2)
207
    u8  SizeByte3;                              // DMA Length (byte 3)
208
 
209
} DMA_CHAINING_DESCR_EXT, *PDMA_CHAINING_DESCR_EXT;
210
 
211
//-----------------------------------------------------------------------------
212
// Next descriptor block
213
typedef struct _DMA_NEXT_BLOCK {
214
 
215
    u32 NextBlkAddr;
216
    u16 Signature;                              // 0x4953
217
    u16 Crc;                                    // control code
218
 
219
} DMA_NEXT_BLOCK, *PDMA_NEXT_BLOCK;
220
 
221
#define DSCR_BLOCK_SIZE 64
222
 
223
//-----------------------------------------------------------------------------
224
 
225
#endif

powered by: WebSVN 2.1.0

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