static void diag_stm_update_work_fn(struct work_struct *work) { uint8_t i; uint16_t peripheral_mask = 0; int err = 0; mutex_lock(&driver->cntl_lock); peripheral_mask = driver->stm_peripheral; driver->stm_peripheral = 0; mutex_unlock(&driver->cntl_lock); if (peripheral_mask == 0) return; for (i = 0; i < NUM_PERIPHERALS; i++) { if (!driver->feature[i].stm_support) continue; if (peripheral_mask & PERIPHERAL_MASK(i)) { err = diag_send_stm_state(i, (uint8_t)(driver->stm_state_requested[i])); if (!err) { driver->stm_state[i] = driver->stm_state_requested[i]; } } } }
void diag_cntl_smd_work_fn(struct work_struct *work) { struct diag_smd_info *smd_info = container_of(work, struct diag_smd_info, diag_general_smd_work); if (!smd_info || smd_info->type != SMD_CNTL_TYPE) return; if (smd_info->general_context == UPDATE_PERIPHERAL_STM_STATE) { if (driver->peripheral_supports_stm[smd_info->peripheral] == ENABLE_STM) { int status = 0; int index = smd_info->peripheral; status = diag_send_stm_state(smd_info, (uint8_t)(driver->stm_state_requested[index])); if (status == 1) driver->stm_state[index] = driver->stm_state_requested[index]; } } smd_info->general_context = 0; }