Changeset df62e51 in rtems
- Timestamp:
- 09/08/17 08:11:20 (6 years ago)
- Branches:
- 5, master
- Children:
- 2fc32460
- Parents:
- 134fe569
- git-author:
- Sebastian Huber <sebastian.huber@…> (09/08/17 08:11:20)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (09/12/17 08:00:36)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/powerpc/qoriq/irq/irq.c
r134fe569 rdf62e51 8 8 9 9 /* 10 * Copyright (c) 2010 -2015embedded brains GmbH. All rights reserved.10 * Copyright (c) 2010, 2017 embedded brains GmbH. All rights reserved. 11 11 * 12 12 * embedded brains GmbH … … 27 27 #include <libcpu/powerpc-utility.h> 28 28 29 #include <asm/epapr_hcalls.h> 30 29 31 #include <bsp.h> 30 32 #include <bsp/irq.h> … … 33 35 #include <bsp/utility.h> 34 36 #include <bsp/qoriq.h> 37 38 RTEMS_INTERRUPT_LOCK_DEFINE(static, lock, "QorIQ IRQ") 39 40 #define SPURIOUS 0xffff 41 42 #ifdef QORIQ_IS_HYPERVISOR_GUEST 43 44 void bsp_interrupt_set_affinity( 45 rtems_vector_number vector, 46 const Processor_mask *affinity 47 ) 48 { 49 uint32_t config; 50 unsigned int priority; 51 uint32_t destination; 52 uint32_t new_destination; 53 rtems_interrupt_lock_context lock_context; 54 55 new_destination = _Processor_mask_Find_last_set(affinity) - 1; 56 57 rtems_interrupt_lock_acquire(&lock, &lock_context); 58 ev_int_get_config(vector, &config, &priority, &destination); 59 ev_int_set_config(vector, config, priority, new_destination); 60 rtems_interrupt_lock_release(&lock, &lock_context); 61 } 62 63 void bsp_interrupt_get_affinity( 64 rtems_vector_number vector, 65 Processor_mask *affinity 66 ) 67 { 68 uint32_t config; 69 unsigned int priority; 70 uint32_t destination; 71 72 ev_int_get_config(vector, &config, &priority, &destination); 73 _Processor_mask_From_uint32_t(affinity, destination, 0); 74 } 75 76 void bsp_interrupt_vector_enable(rtems_vector_number vector) 77 { 78 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); 79 ev_int_set_mask(vector, 0); 80 } 81 82 void bsp_interrupt_vector_disable(rtems_vector_number vector) 83 { 84 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); 85 ev_int_set_mask(vector, 1); 86 } 87 88 void bsp_interrupt_dispatch(void) 89 { 90 unsigned int vector; 91 92 ev_int_iack(0, &vector); 93 94 if (vector != SPURIOUS) { 95 uint32_t msr; 96 97 msr = ppc_external_exceptions_enable(); 98 bsp_interrupt_handler_dispatch(vector); 99 ppc_external_exceptions_disable(msr); 100 101 ev_int_eoi(vector); 102 } else { 103 bsp_interrupt_handler_default(vector); 104 } 105 } 106 107 rtems_status_code bsp_interrupt_facility_initialize(void) 108 { 109 return RTEMS_SUCCESSFUL; 110 } 111 112 #else /* !QORIQ_IS_HYPERVISOR_GUEST */ 35 113 36 114 #define VPR_MSK BSP_BBIT32(0) … … 47 125 #define GCR_RST BSP_BBIT32(0) 48 126 #define GCR_M BSP_BBIT32(2) 49 50 #define SPURIOUS 0xffff51 52 RTEMS_INTERRUPT_LOCK_DEFINE(static, lock, "QorIQ IRQ")53 127 54 128 #define SRC_CFG_IDX(i) ((i) - QORIQ_IRQ_EXT_BASE) … … 292 366 return RTEMS_SUCCESSFUL; 293 367 } 368 369 #endif /* QORIQ_IS_HYPERVISOR_GUEST */
Note: See TracChangeset
for help on using the changeset viewer.