void diag_real_time_work_fn(struct work_struct *work) { int temp_real_time = MODE_REALTIME, i, j; for (i = 0; i < DIAG_NUM_PROC; i++) { temp_real_time = diag_compute_real_time(i); if (temp_real_time == driver->real_time_mode[i]) { pr_debug("diag: did not update real time mode on proc %d, already in the req mode %d", i, temp_real_time); continue; } if (i == DIAG_LOCAL_PROC) { for (j = 0; j < NUM_SMD_CONTROL_CHANNELS; j++) diag_send_diag_mode_update_by_smd( &driver->smd_cntl[j], temp_real_time); } else { diag_send_diag_mode_update_remote(i - 1, temp_real_time); } } if (driver->real_time_update_busy > 0) driver->real_time_update_busy--; }
void diag_real_time_work_fn(struct work_struct *work) { int temp_real_time = MODE_REALTIME, i, j; uint8_t send_update = 1; /* * If any peripheral in the local processor is in either threshold or * circular buffering mode, don't send the real time mode control * packet. */ for (i = 0; i < NUM_SMD_CONTROL_CHANNELS; i++) { if (!driver->peripheral_buffering_support[i]) continue; switch (driver->buffering_mode[i].mode) { case DIAG_BUFFERING_MODE_THRESHOLD: case DIAG_BUFFERING_MODE_CIRCULAR: send_update = 0; break; } } mutex_lock(&driver->mode_lock); for (i = 0; i < DIAG_NUM_PROC; i++) { temp_real_time = diag_compute_real_time(i); if (temp_real_time == driver->real_time_mode[i]) { pr_debug("diag: did not update real time mode on proc %d, already in the req mode %d", i, temp_real_time); continue; } if (i == DIAG_LOCAL_PROC) { if (!send_update) { pr_debug("diag: In %s, cannot send real time mode pkt since one of the periperhal is in buffering mode\n", __func__); break; } for (j = 0; j < NUM_SMD_CONTROL_CHANNELS; j++) diag_send_diag_mode_update_by_smd( &driver->smd_cntl[j], temp_real_time); } else { diag_send_diag_mode_update_remote(i - 1, temp_real_time); } } mutex_unlock(&driver->mode_lock); if (driver->real_time_update_busy > 0) driver->real_time_update_busy--; }
void diag_real_time_work_fn(struct work_struct *work) { int temp_real_time = MODE_REALTIME, i, j; uint8_t send_update = 1; for (i = 0; i < NUM_PERIPHERALS; i++) { if (!driver->feature[i].peripheral_buffering) continue; switch (driver->buffering_mode[i].mode) { case DIAG_BUFFERING_MODE_THRESHOLD: case DIAG_BUFFERING_MODE_CIRCULAR: send_update = 0; break; } } mutex_lock(&driver->mode_lock); for (i = 0; i < DIAG_NUM_PROC; i++) { temp_real_time = diag_compute_real_time(i); if (temp_real_time == driver->real_time_mode[i]) { DIAGFWD_DBUG("diag: did not update real time mode on proc %d, already in the req mode %d", i, temp_real_time); continue; } if (i == DIAG_LOCAL_PROC) { if (!send_update) { DIAGFWD_DBUG("diag: In %s, cannot send real time mode pkt since one of the periperhal is in buffering mode\n", __func__); break; } for (j = 0; j < NUM_PERIPHERALS; j++) diag_send_real_time_update(j, temp_real_time); } else { diag_send_diag_mode_update_remote(i - 1, temp_real_time); } } mutex_unlock(&driver->mode_lock); if (driver->real_time_update_busy > 0) driver->real_time_update_busy--; }