rtems_status_code qoriq_pic_set_priority( rtems_vector_number vector, int new_priority, int *old_priority ) { rtems_status_code sc = RTEMS_SUCCESSFUL; uint32_t old_vpr = 0; if (bsp_interrupt_is_valid_vector(vector)) { int offs = vpr_and_dr_offsets [vector] << 2; volatile uint32_t *vpr = (volatile uint32_t *) &qoriq.pic + offs; if (QORIQ_PIC_PRIORITY_IS_VALID(new_priority)) { rtems_interrupt_level level; rtems_interrupt_disable(level); old_vpr = *vpr; *vpr = VPR_PRIORITY_SET(old_vpr, (uint32_t) new_priority); rtems_interrupt_enable(level); } else if (new_priority < 0) { old_vpr = *vpr; } else { sc = RTEMS_INVALID_PRIORITY; } } else { sc = RTEMS_INVALID_ID; } if (old_priority != NULL) { *old_priority = (int) VPR_PRIORITY_GET(old_vpr); } return sc; }
rtems_status_code qoriq_pic_set_priority( rtems_vector_number vector, int new_priority, int *old_priority ) { rtems_status_code sc = RTEMS_SUCCESSFUL; uint32_t old_vpr = 0; if (bsp_interrupt_is_valid_vector(vector)) { volatile qoriq_pic_src_cfg *src_cfg = get_src_cfg(vector); if (QORIQ_PIC_PRIORITY_IS_VALID(new_priority)) { rtems_interrupt_lock_context lock_context; rtems_interrupt_lock_acquire(&lock, &lock_context); old_vpr = src_cfg->vpr; src_cfg->vpr = VPR_PRIORITY_SET(old_vpr, (uint32_t) new_priority); rtems_interrupt_lock_release(&lock, &lock_context); } else if (new_priority < 0) { old_vpr = src_cfg->vpr; } else { sc = RTEMS_INVALID_PRIORITY; } } else { sc = RTEMS_INVALID_ID; } if (old_priority != NULL) { *old_priority = (int) VPR_PRIORITY_GET(old_vpr); } return sc; }