/alps/pcitool

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to driver/ioctl.h

  • Committer: Suren A. Chilingaryan
  • Date: 2016-03-02 18:37:30 UTC
  • Revision ID: csa@suren.me-20160302183730-nlrgi7h3yuizcizc
Restructure driver headers

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
long pcidriver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
 
1
#ifndef _PCIDRIVER_IOCTL_H_
 
2
#define _PCIDRIVER_IOCTL_H_
 
3
 
 
4
#include <linux/ioctl.h>
 
5
 
 
6
#define PCIDRIVER_INTERFACE_VERSION     2                               /**< Driver API version, only the pcilib with the same driver interface version is allowed */
 
7
 
 
8
/* Possible values for ioctl commands */
 
9
 
 
10
/* PCI mmap areas */
 
11
#define PCIDRIVER_BAR0                  0
 
12
#define PCIDRIVER_BAR1                  1
 
13
#define PCIDRIVER_BAR2                  2
 
14
#define PCIDRIVER_BAR3                  3
 
15
#define PCIDRIVER_BAR4                  4
 
16
#define PCIDRIVER_BAR5                  5
 
17
 
 
18
/* mmap mode of the device */
 
19
#define PCIDRIVER_MMAP_PCI              0
 
20
#define PCIDRIVER_MMAP_KMEM             1
 
21
 
 
22
/* Direction of a DMA operation */
 
23
#define PCIDRIVER_DMA_BIDIRECTIONAL     0
 
24
#define PCIDRIVER_DMA_TODEVICE          1 // PCILIB_KMEM_SYNC_TODEVICE
 
25
#define PCIDRIVER_DMA_FROMDEVICE        2 // PCILIB_KMEM_SYNC_FROMDEVICE
 
26
 
 
27
/* Possible sizes in a PCI command */
 
28
#define PCIDRIVER_PCI_CFG_SZ_BYTE       1
 
29
#define PCIDRIVER_PCI_CFG_SZ_WORD       2
 
30
#define PCIDRIVER_PCI_CFG_SZ_DWORD      3
 
31
 
 
32
/* Possible types of SG lists */
 
33
#define PCIDRIVER_SG_NONMERGED          0
 
34
#define PCIDRIVER_SG_MERGED             1
 
35
 
 
36
#define KMEM_REF_HW                     0x80000000                      /**< Special reference to indicate hardware access */
 
37
#define KMEM_REF_COUNT                  0x0FFFFFFF                      /**< Mask of reference counter (mmap/munmap), couting in mmaped memory pages */
 
38
 
 
39
#define KMEM_MODE_REUSABLE              0x80000000                      /**< Indicates reusable buffer */
 
40
#define KMEM_MODE_EXCLUSIVE             0x40000000                      /**< Only a single process is allowed to mmap the buffer */
 
41
#define KMEM_MODE_PERSISTENT            0x20000000                      /**< Persistent mode instructs kmem_free to preserve buffer in memory */
 
42
#define KMEM_MODE_COUNT                 0x0FFFFFFF                      /**< Mask of reuse counter (alloc/free) */
 
43
 
 
44
#define KMEM_FLAG_REUSE                 PCILIB_KMEM_FLAG_REUSE          /**< Try to reuse existing buffer with the same use & item */
 
45
#define KMEM_FLAG_EXCLUSIVE             PCILIB_KMEM_FLAG_EXCLUSIVE      /**< Allow only a single application accessing a specified use & item */
 
46
#define KMEM_FLAG_PERSISTENT            PCILIB_KMEM_FLAG_PERSISTENT     /**< Sets persistent mode */
 
47
#define KMEM_FLAG_HW                    PCILIB_KMEM_FLAG_HARDWARE       /**< The buffer may be accessed by hardware, the hardware access will not occur any more if passed to _free function */
 
48
#define KMEM_FLAG_FORCE                 PCILIB_KMEM_FLAG_FORCE          /**< Force memory cleanup even if references are present */
 
49
#define KMEM_FLAG_MASS                  PCILIB_KMEM_FLAG_MASS           /**< Apply to all buffers of selected use */
 
50
#define KMEM_FLAG_TRY                   PCILIB_KMEM_FLAG_TRY            /**< Do not allocate buffers, try to reuse and fail if not possible */
 
51
 
 
52
#define KMEM_FLAG_REUSED                PCILIB_KMEM_FLAG_REUSE          /**< Indicates if buffer with specified use & item was already allocated and reused */
 
53
#define KMEM_FLAG_REUSED_PERSISTENT     PCILIB_KMEM_FLAG_PERSISTENT     /**< Indicates that reused buffer was persistent before the call */
 
54
#define KMEM_FLAG_REUSED_HW             PCILIB_KMEM_FLAG_HARDWARE       /**< Indicates that reused buffer had a HW reference before the call */
 
55
 
 
56
/* Types */
 
57
 
 
58
typedef struct {
 
59
    unsigned long version;                                              /**< pcilib version */
 
60
    unsigned long interface;                                            /**< driver interface version */
 
61
    unsigned long ioctls;                                               /**< number of supporterd ioctls */
 
62
    unsigned long reserved[5];                                          /**< reserved for the future use */
 
63
} pcilib_driver_version_t;
 
64
 
 
65
typedef struct {
 
66
    int iommu;                                                          /**< Specifies if IOMMU is enabled or disabled */
 
67
    int mps;                                                            /**< PCIe maximum payload size */
 
68
    int readrq;                                                         /**< PCIe read request size */
 
69
    unsigned long dma_mask;                                             /**< DMA mask */
 
70
} pcilib_device_state_t;
 
71
 
 
72
typedef struct {
 
73
    unsigned short vendor_id;
 
74
    unsigned short device_id;
 
75
    unsigned short bus;
 
76
    unsigned short slot;
 
77
    unsigned short func;
 
78
    unsigned short devfn;
 
79
    unsigned char interrupt_pin;
 
80
    unsigned char interrupt_line;
 
81
    unsigned int irq;
 
82
    unsigned long bar_start[6];
 
83
    unsigned long bar_length[6];
 
84
    unsigned long bar_flags[6];
 
85
} pcilib_board_info_t;
 
86
 
 
87
typedef struct {
 
88
    unsigned long type;
 
89
    unsigned long pa;
 
90
    unsigned long ba;
 
91
    unsigned long size;
 
92
    unsigned long align;
 
93
    unsigned long use;
 
94
    unsigned long item;
 
95
    int flags;
 
96
    int handle_id;
 
97
} kmem_handle_t;
 
98
 
 
99
typedef struct {
 
100
    unsigned long addr;
 
101
    unsigned long size;
 
102
} umem_sgentry_t;
 
103
 
 
104
typedef struct {
 
105
    int handle_id;
 
106
    int type;
 
107
    int nents;
 
108
    umem_sgentry_t *sg;
 
109
} umem_sglist_t;
 
110
 
 
111
typedef struct {
 
112
    unsigned long vma;
 
113
    unsigned long size;
 
114
    int handle_id;
 
115
    int dir;
 
116
} umem_handle_t;
 
117
 
 
118
typedef struct {
 
119
    kmem_handle_t handle;
 
120
    int dir;
 
121
} kmem_sync_t;
 
122
 
 
123
typedef struct {
 
124
    unsigned long count;
 
125
    unsigned long timeout;      // microseconds
 
126
    unsigned int source;
 
127
} interrupt_wait_t;
 
128
 
 
129
typedef struct {
 
130
    int size;
 
131
    int addr;
 
132
    union {
 
133
        unsigned char byte;
 
134
        unsigned short word;
 
135
        unsigned int dword;     /* not strict C, but if not can have problems */
 
136
    } val;
 
137
} pci_cfg_cmd;
 
138
 
 
139
/* ioctl interface */
 
140
/* See documentation for a detailed usage explanation */
 
141
 
 
142
/*
 
143
 * one of the problems of ioctl, is that requires a type definition.
 
144
 * This type is only 8-bits wide, and half-documented in
 
145
 * <linux-src>/Documentation/ioctl-number.txt.
 
146
 * previous SHL -> 'S' definition, conflicts with several devices,
 
147
 * so I changed it to be pci -> 'p', in the range 0xA0-BF
 
148
 */
 
149
#define PCIDRIVER_IOC_MAGIC 'p'
 
150
#define PCIDRIVER_IOC_BASE  0xA0
 
151
 
 
152
#define PCIDRIVER_IOC_MMAP_MODE         _IO(   PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 0 )
 
153
#define PCIDRIVER_IOC_MMAP_AREA         _IO(   PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 1 )
 
154
#define PCIDRIVER_IOC_KMEM_ALLOC        _IOWR( PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 2, kmem_handle_t * )
 
155
#define PCIDRIVER_IOC_KMEM_FREE         _IOW ( PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 3, kmem_handle_t * )
 
156
#define PCIDRIVER_IOC_KMEM_SYNC         _IOWR( PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 4, kmem_sync_t * )
 
157
#define PCIDRIVER_IOC_UMEM_SGMAP        _IOWR( PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 5, umem_handle_t * )
 
158
#define PCIDRIVER_IOC_UMEM_SGUNMAP      _IOW(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 6, umem_handle_t * )
 
159
#define PCIDRIVER_IOC_UMEM_SGGET        _IOWR( PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 7, umem_sglist_t * )
 
160
#define PCIDRIVER_IOC_UMEM_SYNC         _IOW(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 8, umem_handle_t * )
 
161
#define PCIDRIVER_IOC_WAITI             _IO(   PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 9 )
 
162
 
 
163
/* And now, the methods to access the PCI configuration area */
 
164
#define PCIDRIVER_IOC_PCI_CFG_RD        _IOWR(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 10, pci_cfg_cmd * )
 
165
#define PCIDRIVER_IOC_PCI_CFG_WR        _IOWR(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 11, pci_cfg_cmd * )
 
166
#define PCIDRIVER_IOC_PCI_INFO          _IOWR(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 12, pcilib_board_info_t * )
 
167
 
 
168
/* Clear interrupt queues */
 
169
#define PCIDRIVER_IOC_CLEAR_IOQ         _IO(   PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 13 )
 
170
 
 
171
#define PCIDRIVER_IOC_VERSION           _IOR(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 14, pcilib_driver_version_t * )
 
172
#define PCIDRIVER_IOC_DEVICE_STATE      _IOR(  PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 15, pcilib_device_state_t * )
 
173
#define PCIDRIVER_IOC_DMA_MASK          _IO(   PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 16)
 
174
#define PCIDRIVER_IOC_MPS               _IO(   PCIDRIVER_IOC_MAGIC, PCIDRIVER_IOC_BASE + 17)
 
175
 
 
176
#define PCIDRIVER_IOC_MAX 17
 
177
 
 
178
#endif /* _PCIDRIVER_IOCTL_H */