int wsman_clean_subsrepository(SoapH soap, SubsRepositoryEntryH entry) { int retVal = 0; WsXmlDocH doc = ws_xml_read_memory( (char *)entry->strdoc, entry->len, "UTF-8", 0); unsigned long expire; WsmanFaultCodeType fault_code; if(doc) { WsXmlNodeH node = ws_xml_get_soap_body(doc); if(node) { node = ws_xml_get_child(node, 0, XML_NS_EVENTING, WSEVENT_SUBSCRIBE); node = ws_xml_get_child(node, 0, XML_NS_EVENTING, WSEVENT_EXPIRES); if(node == NULL) { //No specified expiration, delete it debug("subscription %s deleted from the repository", entry->uuid); soap->subscriptionOpSet->delete_subscription(soap->uri_subsRepository, entry->uuid+5); retVal = 1; } else { wsman_set_expiretime(node, &expire, &fault_code); if(fault_code == WSMAN_RC_OK) { if(time_expired(expire)) { debug("subscription %s deleted from the repository", entry->uuid); soap->subscriptionOpSet->delete_subscription(soap->uri_subsRepository, entry->uuid+5); retVal = 1; } } } } ws_xml_destroy_doc(doc); } return retVal; }
static void timer_interupt_handler4(void *arg) { timer_driver_lock(); //DTIME("Got interrupt 4"); timer->handle_irq(timer, PWM_TIMER4); time_expired(); timer_int4_reg_callback(&timer_interupt_handler4, PWM_TIMER4); timer_driver_unlock(); }
/* Time Slave State Bits */ #define SLAVE_TIME_REQUEST 0x0400 #define SLAVE_TIME_POLL 0x0800 #define SLAVE_TIME_INIT 0x1000 uint32_t *smem_clock; uint32_t smem_clock_val; uint32_t state; smem_clock = smem_alloc(SMEM_SMEM_SLOW_CLOCK_VALUE, sizeof(uint32_t)); if (smem_clock == NULL) { printk(KERN_ERR "no smem clock\n"); return 0; } state = smsm_get_state(SMSM_MODEM_STATE); if ((state & SMSM_INIT) == 0) { printk(KERN_ERR "smsm not initialized\n"); return 0; } time_start(data); while ((state = smsm_get_state(SMSM_TIME_MASTER_DEM)) & MASTER_TIME_PENDING) { if (time_expired(data)) { printk(KERN_INFO "get_smem_clock: timeout 1 still " "invalid state %x\n", state); return 0; } } smsm_change_state(SMSM_APPS_DEM, SLAVE_TIME_POLL | SLAVE_TIME_INIT, SLAVE_TIME_REQUEST); time_start(data); while (!((state = smsm_get_state(SMSM_TIME_MASTER_DEM)) & MASTER_TIME_PENDING)) { if (time_expired(data)) { printk(KERN_INFO "get_smem_clock: timeout 2 still " "invalid state %x\n", state); smem_clock_val = 0; goto sync_sclk_exit; } } smsm_change_state(SMSM_APPS_DEM, SLAVE_TIME_REQUEST, SLAVE_TIME_POLL); time_start(data); do { smem_clock_val = *smem_clock; } while (smem_clock_val == 0 && !time_expired(data)); state = smsm_get_state(SMSM_TIME_MASTER_DEM); if (smem_clock_val) { if (update != NULL) update(data, smem_clock_val); if (msm_timer_debug_mask & MSM_TIMER_DEBUG_SYNC) printk(KERN_INFO "get_smem_clock: state %x clock %u\n", state, smem_clock_val); } else { printk(KERN_INFO "get_smem_clock: timeout state %x clock %u\n", state, smem_clock_val); } sync_sclk_exit: smsm_change_state(SMSM_APPS_DEM, SLAVE_TIME_REQUEST | SLAVE_TIME_POLL, SLAVE_TIME_INIT); return smem_clock_val; } #else /* CONFIG_MSM_N_WAY_SMSM */ static uint32_t msm_timer_sync_sclk( void (*time_start)(struct msm_timer_sync_data_t *data), bool (*time_expired)(struct msm_timer_sync_data_t *data), void (*update)(struct msm_timer_sync_data_t *data, uint32_t clk_val), struct msm_timer_sync_data_t *data) { uint32_t *smem_clock; uint32_t smem_clock_val; uint32_t last_state; uint32_t state; smem_clock = smem_alloc(SMEM_SMEM_SLOW_CLOCK_VALUE, sizeof(uint32_t)); if (smem_clock == NULL) { printk(KERN_ERR "no smem clock\n"); return 0; } last_state = state = smsm_get_state(SMSM_MODEM_STATE); smem_clock_val = *smem_clock; if (smem_clock_val) { printk(KERN_INFO "get_smem_clock: invalid start state %x " "clock %u\n", state, smem_clock_val); smsm_change_state(SMSM_APPS_STATE, SMSM_TIMEWAIT, SMSM_TIMEINIT); time_start(data); while (*smem_clock != 0 && !time_expired(data)) ; smem_clock_val = *smem_clock; if (smem_clock_val) { printk(KERN_INFO "get_smem_clock: timeout still " "invalid state %x clock %u\n", state, smem_clock_val); return 0; } } time_start(data); smsm_change_state(SMSM_APPS_STATE, SMSM_TIMEINIT, SMSM_TIMEWAIT); do { smem_clock_val = *smem_clock; state = smsm_get_state(SMSM_MODEM_STATE); if (state != last_state) { last_state = state; if (msm_timer_debug_mask & MSM_TIMER_DEBUG_SYNC) printk(KERN_INFO "get_smem_clock: state %x clock %u\n", state, smem_clock_val); } } while (smem_clock_val == 0 && !time_expired(data)); if (smem_clock_val) { if (update != NULL) update(data, smem_clock_val); } else { printk(KERN_INFO "get_smem_clock: timeout state %x clock %u\n", state, smem_clock_val); } smsm_change_state(SMSM_APPS_STATE, SMSM_TIMEWAIT, SMSM_TIMEINIT); time_start(data); while (*smem_clock != 0 && !time_expired(data)) ; if (*smem_clock) printk(KERN_INFO "get_smem_clock: exit timeout state %x " "clock %u\n", state, *smem_clock); return smem_clock_val; }
static uint32_t msm_timer_sync_sclk( void (*time_start)(struct msm_timer_sync_data_t *data), bool (*time_expired)(struct msm_timer_sync_data_t *data), void (*update)(struct msm_timer_sync_data_t *data, uint32_t clk_val), struct msm_timer_sync_data_t *data) { /* Time Master State Bits */ #define MASTER_BITS_PER_CPU 1 #define MASTER_TIME_PENDING \ (0x01UL << (MASTER_BITS_PER_CPU * SMSM_APPS_STATE)) /* Time Slave State Bits */ #define SLAVE_TIME_REQUEST 0x0400 #define SLAVE_TIME_POLL 0x0800 #define SLAVE_TIME_INIT 0x1000 uint32_t *smem_clock; uint32_t smem_clock_val; uint32_t state; smem_clock = smem_alloc(SMEM_SMEM_SLOW_CLOCK_VALUE, sizeof(uint32_t)); if (smem_clock == NULL) { printk(KERN_ERR "no smem clock\n"); return 0; } state = smsm_get_state(SMSM_MODEM_STATE); if ((state & SMSM_INIT) == 0) { printk(KERN_ERR "smsm not initialized\n"); return 0; } time_start(data); while ((state = smsm_get_state(SMSM_TIME_MASTER_DEM)) & MASTER_TIME_PENDING) { if (time_expired(data)) { printk(KERN_INFO "get_smem_clock: timeout 1 still " "invalid state %x\n", state); return 0; } } smsm_change_state(SMSM_APPS_DEM, SLAVE_TIME_POLL | SLAVE_TIME_INIT, SLAVE_TIME_REQUEST); time_start(data); while (!((state = smsm_get_state(SMSM_TIME_MASTER_DEM)) & MASTER_TIME_PENDING)) { if (time_expired(data)) { printk(KERN_INFO "get_smem_clock: timeout 2 still " "invalid state %x\n", state); smem_clock_val = 0; goto sync_sclk_exit; } } smsm_change_state(SMSM_APPS_DEM, SLAVE_TIME_REQUEST, SLAVE_TIME_POLL); time_start(data); do { smem_clock_val = *smem_clock; } while (smem_clock_val == 0 && !time_expired(data)); state = smsm_get_state(SMSM_TIME_MASTER_DEM); if (smem_clock_val) { if (update != NULL) update(data, smem_clock_val); if (msm_timer_debug_mask & MSM_TIMER_DEBUG_SYNC) printk(KERN_INFO "get_smem_clock: state %x clock %u\n", state, smem_clock_val); } else { printk(KERN_INFO "get_smem_clock: timeout state %x clock %u\n", state, smem_clock_val); } sync_sclk_exit: smsm_change_state(SMSM_APPS_DEM, SLAVE_TIME_REQUEST | SLAVE_TIME_POLL, SLAVE_TIME_INIT); return smem_clock_val; }