equal
deleted
inserted
replaced
47 |
47 |
48 /****************************************************************************/ |
48 /****************************************************************************/ |
49 |
49 |
50 int ec_rtdm_open(struct rtdm_fd *, int); |
50 int ec_rtdm_open(struct rtdm_fd *, int); |
51 void ec_rtdm_close(struct rtdm_fd *); |
51 void ec_rtdm_close(struct rtdm_fd *); |
|
52 int ec_rtdm_rt_ioctl(struct rtdm_fd *, |
|
53 unsigned int, void __user *); |
52 int ec_rtdm_ioctl(struct rtdm_fd *, |
54 int ec_rtdm_ioctl(struct rtdm_fd *, |
53 unsigned int, void __user *); |
55 unsigned int, void __user *); |
54 int ec_rtdm_mmap(struct rtdm_fd *fd, struct vm_area_struct *vma); |
56 int ec_rtdm_mmap(struct rtdm_fd *fd, struct vm_area_struct *vma); |
55 |
57 |
56 /****************************************************************************/ |
58 /****************************************************************************/ |
64 .device_count = 1, |
66 .device_count = 1, |
65 .context_size = sizeof(ec_ioctl_context_t), |
67 .context_size = sizeof(ec_ioctl_context_t), |
66 .ops = { |
68 .ops = { |
67 .open = ec_rtdm_open, |
69 .open = ec_rtdm_open, |
68 .close = ec_rtdm_close, |
70 .close = ec_rtdm_close, |
69 .ioctl_rt = ec_rtdm_ioctl, |
71 .ioctl_rt = ec_rtdm_rt_ioctl, |
70 .ioctl_nrt = ec_rtdm_ioctl, |
72 .ioctl_nrt = ec_rtdm_ioctl, |
71 .mmap = ec_rtdm_mmap |
73 .mmap = ec_rtdm_mmap |
72 }, |
74 }, |
73 }; |
75 }; |
74 |
76 |
190 |
192 |
191 /** Driver ioctl. |
193 /** Driver ioctl. |
192 * |
194 * |
193 * \return ioctl() return code. |
195 * \return ioctl() return code. |
194 */ |
196 */ |
|
197 int ec_rtdm_rt_ioctl( |
|
198 struct rtdm_fd *fd, /**< User data. */ |
|
199 unsigned int request, /**< Request. */ |
|
200 void __user *arg /**< Argument. */ |
|
201 ) |
|
202 { |
|
203 switch (request) { |
|
204 /* |
|
205 Requests to be handled directly in primary domain |
|
206 */ |
|
207 case EC_IOCTL_SEND: |
|
208 case EC_IOCTL_RECEIVE: |
|
209 case EC_IOCTL_MASTER_STATE: |
|
210 case EC_IOCTL_DOMAIN_STATE: |
|
211 case EC_IOCTL_DOMAIN_PROCESS: |
|
212 case EC_IOCTL_DOMAIN_QUEUE: |
|
213 return ec_rtdm_ioctl(fd, request, arg); |
|
214 default: |
|
215 break; |
|
216 } |
|
217 /* When a call is not supposed to happen in primary domain, |
|
218 syscall catches -ENOSYS, then switch to secondary mode, |
|
219 and calls .ioctl_nrt */ |
|
220 return -ENOSYS; |
|
221 } |
|
222 |
195 int ec_rtdm_ioctl( |
223 int ec_rtdm_ioctl( |
196 struct rtdm_fd *fd, /**< User data. */ |
224 struct rtdm_fd *fd, /**< User data. */ |
197 unsigned int request, /**< Request. */ |
225 unsigned int request, /**< Request. */ |
198 void __user *arg /**< Argument. */ |
226 void __user *arg /**< Argument. */ |
199 ) |
227 ) |