master/domain.c
changeset 1921 d9cf40facbc4
parent 1907 dd276ae226b4
child 1989 6aa393418fb3
child 2268 5e1d3c9430e0
equal deleted inserted replaced
1920:d28360ee74c5 1921:d9cf40facbc4
   113     fmmu->domain = domain;
   113     fmmu->domain = domain;
   114 
   114 
   115     domain->data_size += fmmu->data_size;
   115     domain->data_size += fmmu->data_size;
   116     list_add_tail(&fmmu->list, &domain->fmmu_configs);
   116     list_add_tail(&fmmu->list, &domain->fmmu_configs);
   117 
   117 
   118     if (domain->master->debug_level)
   118     EC_MASTER_DBG(domain->master, 1, "Domain %u:"
   119         EC_DBG("Domain %u: Added %u bytes, total %zu.\n", domain->index,
   119             " Added %u bytes, total %zu.\n",
   120                 fmmu->data_size, domain->data_size);
   120             domain->index, fmmu->data_size, domain->data_size);
   121 }
   121 }
   122 
   122 
   123 /*****************************************************************************/
   123 /*****************************************************************************/
   124 
   124 
   125 /** Allocates a domain datagram and appends it to the list.
   125 /** Allocates a domain datagram and appends it to the list.
   140 {
   140 {
   141     ec_datagram_t *datagram;
   141     ec_datagram_t *datagram;
   142     int ret;
   142     int ret;
   143 
   143 
   144     if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) {
   144     if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) {
   145         EC_ERR("Failed to allocate domain datagram!\n");
   145         EC_MASTER_ERR(domain->master,
       
   146                 "Failed to allocate domain datagram!\n");
   146         return -ENOMEM;
   147         return -ENOMEM;
   147     }
   148     }
   148 
   149 
   149     ec_datagram_init(datagram);
   150     ec_datagram_init(datagram);
   150     snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE,
   151     snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE,
   210     domain->logical_base_address = base_address;
   211     domain->logical_base_address = base_address;
   211 
   212 
   212     if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) {
   213     if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) {
   213         if (!(domain->data =
   214         if (!(domain->data =
   214                     (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) {
   215                     (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) {
   215             EC_ERR("Failed to allocate %zu bytes internal memory for"
   216             EC_MASTER_ERR(domain->master, "Failed to allocate %zu bytes"
   216                     " domain %u!\n", domain->data_size, domain->index);
   217                     " internal memory for domain %u!\n",
       
   218                     domain->data_size, domain->index);
   217             return -ENOMEM;
   219             return -ENOMEM;
   218         }
   220         }
   219     }
   221     }
   220 
   222 
   221     // Cycle through all domain FMMUS and
   223     // Cycle through all domain FMMUS and
   278         if (ret < 0)
   280         if (ret < 0)
   279             return ret;
   281             return ret;
   280         datagram_count++;
   282         datagram_count++;
   281     }
   283     }
   282 
   284 
   283     EC_INFO("Domain%u: Logical address 0x%08x, %zu byte, "
   285     EC_MASTER_INFO(domain->master, "Domain%u: Logical address 0x%08x,"
   284             "expected working counter %u.\n", domain->index,
   286             " %zu byte, expected working counter %u.\n", domain->index,
   285             domain->logical_base_address, domain->data_size,
   287             domain->logical_base_address, domain->data_size,
   286             domain->expected_working_counter);
   288             domain->expected_working_counter);
   287     list_for_each_entry(datagram, &domain->datagrams, list) {
   289     list_for_each_entry(datagram, &domain->datagrams, list) {
   288         EC_INFO("  Datagram %s: Logical offset 0x%08x, %zu byte, type %s.\n",
   290         EC_MASTER_INFO(domain->master, "  Datagram %s: Logical offset 0x%08x,"
   289                 datagram->name, EC_READ_U32(datagram->address),
   291                 " %zu byte, type %s.\n", datagram->name,
   290                 datagram->data_size, ec_datagram_type_string(datagram));
   292                 EC_READ_U32(datagram->address), datagram->data_size,
       
   293                 ec_datagram_type_string(datagram));
   291     }
   294     }
   292     
   295     
   293     return 0;
   296     return 0;
   294 }
   297 }
   295 
   298 
   338 {
   341 {
   339     const ec_pdo_entry_reg_t *reg;
   342     const ec_pdo_entry_reg_t *reg;
   340     ec_slave_config_t *sc;
   343     ec_slave_config_t *sc;
   341     int ret;
   344     int ret;
   342     
   345     
   343     if (domain->master->debug_level)
   346     EC_MASTER_DBG(domain->master, 1, "ecrt_domain_reg_pdo_entry_list("
   344         EC_DBG("ecrt_domain_reg_pdo_entry_list(domain = 0x%p, regs = 0x%p)\n",
   347             "domain = 0x%p, regs = 0x%p)\n", domain, regs);
   345                 domain, regs);
       
   346 
   348 
   347     for (reg = regs; reg->index; reg++) {
   349     for (reg = regs; reg->index; reg++) {
   348         sc = ecrt_master_slave_config_err(domain->master, reg->alias,
   350         sc = ecrt_master_slave_config_err(domain->master, reg->alias,
   349                 reg->position, reg->vendor_id, reg->product_code);
   351                 reg->position, reg->vendor_id, reg->product_code);
   350         if (IS_ERR(sc))
   352         if (IS_ERR(sc))
   370 
   372 
   371 /*****************************************************************************/
   373 /*****************************************************************************/
   372 
   374 
   373 void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem)
   375 void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem)
   374 {
   376 {
   375     if (domain->master->debug_level)
   377     EC_MASTER_DBG(domain->master, 1, "ecrt_domain_external_memory("
   376         EC_DBG("ecrt_domain_external_memory(domain = 0x%p, mem = 0x%p)\n",
   378             "domain = 0x%p, mem = 0x%p)\n", domain, mem);
   377                 domain, mem);
       
   378 
   379 
   379     down(&domain->master->master_sem);
   380     down(&domain->master->master_sem);
   380 
   381 
   381     ec_domain_clear_data(domain);
   382     ec_domain_clear_data(domain);
   382 
   383 
   415 
   416 
   416     if (domain->working_counter_changes &&
   417     if (domain->working_counter_changes &&
   417         jiffies - domain->notify_jiffies > HZ) {
   418         jiffies - domain->notify_jiffies > HZ) {
   418         domain->notify_jiffies = jiffies;
   419         domain->notify_jiffies = jiffies;
   419         if (domain->working_counter_changes == 1) {
   420         if (domain->working_counter_changes == 1) {
   420             EC_INFO("Domain %u: Working counter changed to %u/%u.\n",
   421             EC_MASTER_INFO(domain->master, "Domain %u: Working counter"
   421                     domain->index, domain->working_counter,
   422                     " changed to %u/%u.\n", domain->index,
       
   423                     domain->working_counter, domain->expected_working_counter);
       
   424         } else {
       
   425             EC_MASTER_INFO(domain->master, "Domain %u: %u working counter"
       
   426                     " changes - now %u/%u.\n", domain->index,
       
   427                     domain->working_counter_changes, domain->working_counter,
   422                     domain->expected_working_counter);
   428                     domain->expected_working_counter);
   423         } else {
       
   424             EC_INFO("Domain %u: %u working counter changes - now %u/%u.\n",
       
   425                     domain->index, domain->working_counter_changes,
       
   426                     domain->working_counter, domain->expected_working_counter);
       
   427         }
   429         }
   428         domain->working_counter_changes = 0;
   430         domain->working_counter_changes = 0;
   429     }
   431     }
   430 }
   432 }
   431 
   433