master/domain.c
changeset 1989 6aa393418fb3
parent 1981 c14b6bb14fdf
parent 1921 d9cf40facbc4
child 2028 55854f070c4a
equal deleted inserted replaced
1988:ea38efeeb7b3 1989:6aa393418fb3
   115 
   115 
   116     domain->data_size += fmmu->data_size;
   116     domain->data_size += fmmu->data_size;
   117     domain->tx_size += fmmu->tx_size;
   117     domain->tx_size += fmmu->tx_size;
   118     list_add_tail(&fmmu->list, &domain->fmmu_configs);
   118     list_add_tail(&fmmu->list, &domain->fmmu_configs);
   119 
   119 
   120     if (domain->master->debug_level)
   120     EC_MASTER_DBG(domain->master, 1, "Domain %u:"
   121         EC_DBG("Domain %u: Added %u bytes, total %zu.\n", domain->index,
   121             " Added %u bytes, total %zu.\n",
   122                 fmmu->data_size, domain->data_size);
   122             domain->index, fmmu->data_size, domain->data_size);
   123 }
   123 }
   124 
   124 
   125 /*****************************************************************************/
   125 /*****************************************************************************/
   126 
   126 
   127 /** Allocates a domain datagram and appends it to the list.
   127 /** Allocates a domain datagram and appends it to the list.
   142 {
   142 {
   143     ec_datagram_t *datagram;
   143     ec_datagram_t *datagram;
   144     int ret;
   144     int ret;
   145 
   145 
   146     if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) {
   146     if (!(datagram = kmalloc(sizeof(ec_datagram_t), GFP_KERNEL))) {
   147         EC_ERR("Failed to allocate domain datagram!\n");
   147         EC_MASTER_ERR(domain->master,
       
   148                 "Failed to allocate domain datagram!\n");
   148         return -ENOMEM;
   149         return -ENOMEM;
   149     }
   150     }
   150 
   151 
   151     ec_datagram_init(datagram);
   152     ec_datagram_init(datagram);
   152     snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE,
   153     snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE,
   213     domain->logical_base_address = base_address;
   214     domain->logical_base_address = base_address;
   214 
   215 
   215     if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) {
   216     if (domain->data_size && domain->data_origin == EC_ORIG_INTERNAL) {
   216         if (!(domain->data =
   217         if (!(domain->data =
   217                     (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) {
   218                     (uint8_t *) kmalloc(domain->data_size, GFP_KERNEL))) {
   218             EC_ERR("Failed to allocate %zu bytes internal memory for"
   219             EC_MASTER_ERR(domain->master, "Failed to allocate %zu bytes"
   219                     " domain %u!\n", domain->data_size, domain->index);
   220                     " internal memory for domain %u!\n",
       
   221                     domain->data_size, domain->index);
   220             return -ENOMEM;
   222             return -ENOMEM;
   221         }
   223         }
   222     }
   224     }
   223 
   225 
   224     // Cycle through all domain FMMUS and
   226     // Cycle through all domain FMMUS and
   282         if (ret < 0)
   284         if (ret < 0)
   283             return ret;
   285             return ret;
   284         datagram_count++;
   286         datagram_count++;
   285     }
   287     }
   286 
   288 
   287     EC_INFO("Domain%u: Logical address 0x%08x, %zu byte, "
   289     EC_MASTER_INFO(domain->master, "Domain%u: Logical address 0x%08x,"
   288             "expected working counter %u.\n", domain->index,
   290             " %zu byte, expected working counter %u.\n", domain->index,
   289             domain->logical_base_address, domain->data_size,
   291             domain->logical_base_address, domain->data_size,
   290             domain->expected_working_counter);
   292             domain->expected_working_counter);
   291     list_for_each_entry(datagram, &domain->datagrams, list) {
   293     list_for_each_entry(datagram, &domain->datagrams, list) {
   292         EC_INFO("  Datagram %s: Logical offset 0x%08x, %zu byte, type %s.\n",
   294         EC_MASTER_INFO(domain->master, "  Datagram %s: Logical offset 0x%08x,"
   293                 datagram->name, EC_READ_U32(datagram->address),
   295                 " %zu byte, type %s.\n", datagram->name,
   294                 datagram->data_size, ec_datagram_type_string(datagram));
   296                 EC_READ_U32(datagram->address), datagram->data_size,
       
   297                 ec_datagram_type_string(datagram));
   295     }
   298     }
   296     
   299     
   297     return 0;
   300     return 0;
   298 }
   301 }
   299 
   302 
   342 {
   345 {
   343     const ec_pdo_entry_reg_t *reg;
   346     const ec_pdo_entry_reg_t *reg;
   344     ec_slave_config_t *sc;
   347     ec_slave_config_t *sc;
   345     int ret;
   348     int ret;
   346     
   349     
   347     if (domain->master->debug_level)
   350     EC_MASTER_DBG(domain->master, 1, "ecrt_domain_reg_pdo_entry_list("
   348         EC_DBG("ecrt_domain_reg_pdo_entry_list(domain = 0x%p, regs = 0x%p)\n",
   351             "domain = 0x%p, regs = 0x%p)\n", domain, regs);
   349                 domain, regs);
       
   350 
   352 
   351     for (reg = regs; reg->index; reg++) {
   353     for (reg = regs; reg->index; reg++) {
   352         sc = ecrt_master_slave_config_err(domain->master, reg->alias,
   354         sc = ecrt_master_slave_config_err(domain->master, reg->alias,
   353                 reg->position, reg->vendor_id, reg->product_code);
   355                 reg->position, reg->vendor_id, reg->product_code);
   354         if (IS_ERR(sc))
   356         if (IS_ERR(sc))
   374 
   376 
   375 /*****************************************************************************/
   377 /*****************************************************************************/
   376 
   378 
   377 void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem)
   379 void ecrt_domain_external_memory(ec_domain_t *domain, uint8_t *mem)
   378 {
   380 {
   379     if (domain->master->debug_level)
   381     EC_MASTER_DBG(domain->master, 1, "ecrt_domain_external_memory("
   380         EC_DBG("ecrt_domain_external_memory(domain = 0x%p, mem = 0x%p)\n",
   382             "domain = 0x%p, mem = 0x%p)\n", domain, mem);
   381                 domain, mem);
       
   382 
   383 
   383     down(&domain->master->master_sem);
   384     down(&domain->master->master_sem);
   384 
   385 
   385     ec_domain_clear_data(domain);
   386     ec_domain_clear_data(domain);
   386 
   387 
   419 
   420 
   420     if (domain->working_counter_changes &&
   421     if (domain->working_counter_changes &&
   421         jiffies - domain->notify_jiffies > HZ) {
   422         jiffies - domain->notify_jiffies > HZ) {
   422         domain->notify_jiffies = jiffies;
   423         domain->notify_jiffies = jiffies;
   423         if (domain->working_counter_changes == 1) {
   424         if (domain->working_counter_changes == 1) {
   424             EC_INFO("Domain %u: Working counter changed to %u/%u.\n",
   425             EC_MASTER_INFO(domain->master, "Domain %u: Working counter"
   425                     domain->index, domain->working_counter,
   426                     " changed to %u/%u.\n", domain->index,
       
   427                     domain->working_counter, domain->expected_working_counter);
       
   428         } else {
       
   429             EC_MASTER_INFO(domain->master, "Domain %u: %u working counter"
       
   430                     " changes - now %u/%u.\n", domain->index,
       
   431                     domain->working_counter_changes, domain->working_counter,
   426                     domain->expected_working_counter);
   432                     domain->expected_working_counter);
   427         } else {
       
   428             EC_INFO("Domain %u: %u working counter changes - now %u/%u.\n",
       
   429                     domain->index, domain->working_counter_changes,
       
   430                     domain->working_counter, domain->expected_working_counter);
       
   431         }
   433         }
   432         domain->working_counter_changes = 0;
   434         domain->working_counter_changes = 0;
   433     }
   435     }
   434 }
   436 }
   435 
   437