master/domain.c
changeset 1313 ed15eef57d5c
parent 1304 853c83c72f44
child 1326 ef907b0b5125
--- a/master/domain.c	Mon Nov 17 15:04:28 2008 +0000
+++ b/master/domain.c	Mon Nov 17 17:18:02 2008 +0000
@@ -133,7 +133,8 @@
  * The datagram type and expected working counters are determined by the
  * number of input and output fmmus that share the datagram.
  *
- * \return 0 in case of success, else < 0
+ * \retval  0 Success.
+ * \retval <0 Error code.
  */
 int ec_domain_add_datagram(
         ec_domain_t *domain, /**< EtherCAT domain. */
@@ -144,10 +145,11 @@
         )
 {
     ec_datagram_t *datagram;
+    int ret;
 
     if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) {
         EC_ERR("Failed to allocate domain datagram!\n");
-        return -1;
+        return -ENOMEM;
     }
 
     ec_datagram_init(datagram);
@@ -155,24 +157,27 @@
             "domain%u-%u", domain->index, logical_offset);
 
     if (used[EC_DIR_OUTPUT] && used[EC_DIR_INPUT]) { // inputs and outputs
-        if (ec_datagram_lrw(datagram, logical_offset, data_size, data)) {
+        ret = ec_datagram_lrw(datagram, logical_offset, data_size, data);
+        if (ret < 0) {
             kfree(datagram);
-            return -1;
+            return ret;
         }
         // If LRW is used, output FMMUs increment the working counter by 2,
         // while input FMMUs increment it by 1.
         domain->expected_working_counter +=
             used[EC_DIR_OUTPUT] * 2 + used[EC_DIR_INPUT];
     } else if (used[EC_DIR_OUTPUT]) { // outputs only
-        if (ec_datagram_lwr(datagram, logical_offset, data_size, data)) {
+        ret = ec_datagram_lwr(datagram, logical_offset, data_size, data);
+        if (ret < 0) {
             kfree(datagram);
-            return -1;
+            return ret;
         }
         domain->expected_working_counter += used[EC_DIR_OUTPUT];
     } else { // inputs only (or nothing)
-        if (ec_datagram_lrd(datagram, logical_offset, data_size, data)) {
+        ret = ec_datagram_lrd(datagram, logical_offset, data_size, data);
+        if (ret < 0) {
             kfree(datagram);
-            return -1;
+            return ret;
         }
         domain->expected_working_counter += used[EC_DIR_INPUT];
     }
@@ -191,8 +196,8 @@
  *
  * \todo Check for FMMUs that do not fit into any datagram.
  *
- * \retval 0 in case of success
- * \retval <0 on failure.
+ * \retval  0 Success
+ * \retval <0 Error code.
  */
 int ec_domain_finish(
         ec_domain_t *domain, /**< EtherCAT domain. */
@@ -205,6 +210,7 @@
     unsigned int datagram_used[EC_DIR_COUNT];
     ec_fmmu_config_t *fmmu;
     const ec_datagram_t *datagram;
+    int ret;
 
     domain->logical_base_address = base_address;
 
@@ -213,7 +219,7 @@
                     (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) {
             EC_ERR("Failed to allocate %u bytes internal memory for"
                     " domain %u!\n", domain->data_size, domain->index);
-            return -1;
+            return -ENOMEM;
         }
     }
 
@@ -237,11 +243,12 @@
         // If the current FMMU's data do not fit in the current datagram,
         // allocate a new one.
         if (datagram_size + fmmu->data_size > EC_MAX_DATA_SIZE) {
-            if (ec_domain_add_datagram(domain,
-                        domain->logical_base_address + datagram_offset,
-                        datagram_size, domain->data + datagram_offset,
-                        datagram_used))
-                return -1;
+            ret = ec_domain_add_datagram(domain,
+                    domain->logical_base_address + datagram_offset,
+                    datagram_size, domain->data + datagram_offset,
+                    datagram_used);
+            if (ret < 0)
+                return ret;
             datagram_offset += datagram_size;
             datagram_size = 0;
             datagram_count++;
@@ -255,11 +262,12 @@
     // Allocate last datagram, if data are left (this is also the case if the
     // process data fit into a single datagram)
     if (datagram_size) {
-        if (ec_domain_add_datagram(domain,
-                    domain->logical_base_address + datagram_offset,
-                    datagram_size, domain->data + datagram_offset,
-                    datagram_used))
-            return -1;
+        ret = ec_domain_add_datagram(domain,
+                domain->logical_base_address + datagram_offset,
+                datagram_size, domain->data + datagram_offset,
+                datagram_used);
+        if (ret < 0)
+            return ret;
         datagram_count++;
     }
 
@@ -328,13 +336,15 @@
                 (u32) domain, (u32) regs);
 
     for (reg = regs; reg->index; reg++) {
-        if (!(sc = ecrt_master_slave_config(domain->master, reg->alias,
-                        reg->position, reg->vendor_id, reg->product_code)))
-            return -1;
-
-        if ((ret = ecrt_slave_config_reg_pdo_entry(sc, reg->index,
-                        reg->subindex, domain, reg->bit_position)) < 0)
-            return -1;
+        sc = ecrt_master_slave_config_err(domain->master, reg->alias,
+                reg->position, reg->vendor_id, reg->product_code);
+        if (IS_ERR(sc))
+            return PTR_ERR(sc);
+
+        ret = ecrt_slave_config_reg_pdo_entry(sc, reg->index,
+                        reg->subindex, domain, reg->bit_position);
+        if (ret < 0)
+            return ret;
 
         *reg->offset = ret;
     }