+struct compat_dmx_event {
+ dmx_event_t event;
+ compat_time_t timeStamp;
+ union
+ {
+ dmx_scrambling_status_t scrambling;
+ } u;
+};
+
+static int do_dmx_get_event(unsigned int fd, unsigned int cmd, unsigned long arg)
+{
+ struct dmx_event kevent;
+ mm_segment_t old_fs = get_fs();
+ int err;
+
+ set_fs(KERNEL_DS);
+ err = sys_ioctl(fd, cmd, (unsigned long) &kevent);
+ set_fs(old_fs);
+
+ if (!err) {
+ struct compat_dmx_event __user *up = compat_ptr(arg);
+
+ err = put_user(kevent.event, &up->event);
+ err |= put_user(kevent.timeStamp, &up->timeStamp);
+ err |= put_user(kevent.u.scrambling, &up->u.scrambling);
+ if (err)
+ err = -EFAULT;
+ }
+
+ return err;
+}
+