master/cdev.c
changeset 949 e424c0074c67
parent 948 1cfab7161491
child 950 8b00e63fff90
--- a/master/cdev.c	Wed Jun 04 10:13:07 2008 +0000
+++ b/master/cdev.c	Wed Jun 04 10:41:50 2008 +0000
@@ -379,6 +379,37 @@
                 break;
             }
 
+        case EC_IOCTL_DATA:
+            {
+                ec_ioctl_data_t data;
+                const ec_domain_t *domain;
+
+                if (copy_from_user(&data, (void __user *) arg, sizeof(data))) {
+                    retval = -EFAULT;
+                    break;
+                }
+                
+                if (!(domain = ec_master_find_domain(master, data.domain_index))) {
+                    EC_ERR("Domain %u does not exist!\n", data.domain_index);
+                    retval = -EINVAL;
+                    break;
+                }
+
+                if (domain->data_size != data.data_size) {
+                    EC_ERR("Data size mismatch %u/%u!\n",
+                            data.data_size, domain->data_size);
+                    retval = -EFAULT;
+                    break;
+                }
+
+                if (copy_to_user((void __user *) data.target, domain->data,
+                            domain->data_size)) {
+                    retval = -EFAULT;
+                    break;
+                }
+                break;
+            }
+
         default:
             retval = -ENOIOCTLCMD;
     }