File indexing completed on 2025-05-11 08:23:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 #include <mpc83xx/mpc83xx.h>
0035
0036 #include <rtems.h>
0037
0038 #include <libcpu/powerpc-utility.h>
0039 #include <bsp/vectors.h>
0040
0041 #include <bsp.h>
0042 #include <bsp/irq.h>
0043 #include <bsp/irq-generic.h>
0044
0045 #define MPC83XX_IPIC_VECTOR_NUMBER 92
0046
0047 #define MPC83XX_IPIC_IS_VALID_VECTOR( vector) ((vector) >= 0 && (vector) < MPC83XX_IPIC_VECTOR_NUMBER)
0048
0049 #define MPC83XX_IPIC_INVALID_MASK_POSITION 255
0050
0051 typedef struct {
0052 volatile uint32_t *pend_reg;
0053 volatile uint32_t *mask_reg;
0054 const uint32_t bit_num;
0055 } BSP_isrc_rsc_t;
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066 typedef struct {
0067 uint32_t simsr_mask [2];
0068 uint32_t semsr_mask;
0069 uint32_t sermr_mask;
0070 } mpc83xx_ipic_mask_t;
0071
0072 static const BSP_isrc_rsc_t mpc83xx_ipic_isrc_rsc [MPC83XX_IPIC_VECTOR_NUMBER] = {
0073
0074 {&mpc83xx.ipic.sersr, &mpc83xx.ipic.sermr, 31},
0075 {NULL, NULL, 0},
0076 {NULL, NULL, 0},
0077 {NULL, NULL, 0},
0078 {NULL, NULL, 0},
0079 {NULL, NULL, 0},
0080 {NULL, NULL, 0},
0081 {NULL, NULL, 0},
0082
0083 {NULL, NULL, 0},
0084
0085 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 24},
0086
0087 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 25},
0088
0089 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 26},
0090 {NULL, NULL, 0},
0091 {NULL, NULL, 0},
0092
0093 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 29},
0094
0095 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 30},
0096
0097 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 31},
0098
0099 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 1},
0100
0101 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 2},
0102
0103 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 3},
0104
0105 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 4},
0106
0107 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 5},
0108
0109 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 6},
0110
0111 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 7},
0112 {NULL, NULL, 0},
0113 {NULL, NULL, 0},
0114 {NULL, NULL, 0},
0115 {NULL, NULL, 0},
0116 {NULL, NULL, 0},
0117 {NULL, NULL, 0},
0118 {NULL, NULL, 0},
0119 {NULL, NULL, 0},
0120
0121 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 0},
0122
0123 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 1},
0124
0125 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 2},
0126
0127 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 3},
0128
0129 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 4},
0130
0131 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 5},
0132
0133 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 6},
0134
0135 {&mpc83xx.ipic.sipnr [0], &mpc83xx.ipic.simsr [0], 7},
0136 {NULL, NULL, 0},
0137 {NULL, NULL, 0},
0138 {NULL, NULL, 0},
0139 {NULL, NULL, 0},
0140 {NULL, NULL, 0},
0141 {NULL, NULL, 0},
0142 {NULL, NULL, 0},
0143 {NULL, NULL, 0},
0144
0145 {&mpc83xx.ipic.sepnr, &mpc83xx.ipic.semsr, 0},
0146 {NULL, NULL, 0},
0147 {NULL, NULL, 0},
0148 {NULL, NULL, 0},
0149 {NULL, NULL, 0},
0150 {NULL, NULL, 0},
0151 {NULL, NULL, 0},
0152 {NULL, NULL, 0},
0153 {NULL, NULL, 0},
0154 {NULL, NULL, 0},
0155 {NULL, NULL, 0},
0156 {NULL, NULL, 0},
0157 {NULL, NULL, 0},
0158 {NULL, NULL, 0},
0159 {NULL, NULL, 0},
0160 {NULL, NULL, 0},
0161
0162 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 0},
0163
0164 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 1},
0165
0166 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 2},
0167
0168 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 3},
0169
0170 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 4},
0171
0172 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 5},
0173
0174 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 6},
0175
0176 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 7},
0177
0178 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 8},
0179
0180 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 9},
0181
0182 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 10},
0183
0184 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 11},
0185
0186 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 12},
0187
0188 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 13},
0189
0190 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 14},
0191
0192 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 15},
0193
0194 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 16},
0195 {NULL, NULL, 0},
0196 {NULL, NULL, 0},
0197 {NULL, NULL, 0},
0198
0199 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 20},
0200
0201 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 21},
0202 {NULL, NULL, 0},
0203 {NULL, NULL, 0},
0204 {NULL, NULL, 0},
0205 {NULL, NULL, 0},
0206
0207 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 26},
0208
0209 {&mpc83xx.ipic.sipnr [1], &mpc83xx.ipic.simsr [1], 27}
0210 };
0211
0212 static const uint8_t
0213 mpc83xx_ipic_mask_position_table [MPC83XX_IPIC_VECTOR_NUMBER] = {
0214 MPC83XX_IPIC_INVALID_MASK_POSITION,
0215 MPC83XX_IPIC_INVALID_MASK_POSITION,
0216 MPC83XX_IPIC_INVALID_MASK_POSITION,
0217 MPC83XX_IPIC_INVALID_MASK_POSITION,
0218 MPC83XX_IPIC_INVALID_MASK_POSITION,
0219 MPC83XX_IPIC_INVALID_MASK_POSITION,
0220 MPC83XX_IPIC_INVALID_MASK_POSITION,
0221 MPC83XX_IPIC_INVALID_MASK_POSITION,
0222 MPC83XX_IPIC_INVALID_MASK_POSITION,
0223 7,
0224 6,
0225 5,
0226 MPC83XX_IPIC_INVALID_MASK_POSITION,
0227 MPC83XX_IPIC_INVALID_MASK_POSITION,
0228 2,
0229 1,
0230 0,
0231 94,
0232 93,
0233 92,
0234 91,
0235 90,
0236 89,
0237 88,
0238 MPC83XX_IPIC_INVALID_MASK_POSITION,
0239 MPC83XX_IPIC_INVALID_MASK_POSITION,
0240 MPC83XX_IPIC_INVALID_MASK_POSITION,
0241 MPC83XX_IPIC_INVALID_MASK_POSITION,
0242 MPC83XX_IPIC_INVALID_MASK_POSITION,
0243 MPC83XX_IPIC_INVALID_MASK_POSITION,
0244 MPC83XX_IPIC_INVALID_MASK_POSITION,
0245 MPC83XX_IPIC_INVALID_MASK_POSITION,
0246 31,
0247 30,
0248 29,
0249 28,
0250 27,
0251 26,
0252 25,
0253 24,
0254 MPC83XX_IPIC_INVALID_MASK_POSITION,
0255 MPC83XX_IPIC_INVALID_MASK_POSITION,
0256 MPC83XX_IPIC_INVALID_MASK_POSITION,
0257 MPC83XX_IPIC_INVALID_MASK_POSITION,
0258 MPC83XX_IPIC_INVALID_MASK_POSITION,
0259 MPC83XX_IPIC_INVALID_MASK_POSITION,
0260 MPC83XX_IPIC_INVALID_MASK_POSITION,
0261 MPC83XX_IPIC_INVALID_MASK_POSITION,
0262 95,
0263 MPC83XX_IPIC_INVALID_MASK_POSITION,
0264 MPC83XX_IPIC_INVALID_MASK_POSITION,
0265 MPC83XX_IPIC_INVALID_MASK_POSITION,
0266 MPC83XX_IPIC_INVALID_MASK_POSITION,
0267 MPC83XX_IPIC_INVALID_MASK_POSITION,
0268 MPC83XX_IPIC_INVALID_MASK_POSITION,
0269 MPC83XX_IPIC_INVALID_MASK_POSITION,
0270 MPC83XX_IPIC_INVALID_MASK_POSITION,
0271 MPC83XX_IPIC_INVALID_MASK_POSITION,
0272 MPC83XX_IPIC_INVALID_MASK_POSITION,
0273 MPC83XX_IPIC_INVALID_MASK_POSITION,
0274 MPC83XX_IPIC_INVALID_MASK_POSITION,
0275 MPC83XX_IPIC_INVALID_MASK_POSITION,
0276 MPC83XX_IPIC_INVALID_MASK_POSITION,
0277 MPC83XX_IPIC_INVALID_MASK_POSITION,
0278 63,
0279 62,
0280 61,
0281 60,
0282 59,
0283 58,
0284 57,
0285 56,
0286 55,
0287 54,
0288 53,
0289 52,
0290 51,
0291 50,
0292 49,
0293 48,
0294 47,
0295 MPC83XX_IPIC_INVALID_MASK_POSITION,
0296 MPC83XX_IPIC_INVALID_MASK_POSITION,
0297 MPC83XX_IPIC_INVALID_MASK_POSITION,
0298 43,
0299 42,
0300 MPC83XX_IPIC_INVALID_MASK_POSITION,
0301 MPC83XX_IPIC_INVALID_MASK_POSITION,
0302 MPC83XX_IPIC_INVALID_MASK_POSITION,
0303 MPC83XX_IPIC_INVALID_MASK_POSITION,
0304 37,
0305 36
0306 };
0307
0308
0309
0310
0311
0312
0313 static mpc83xx_ipic_mask_t mpc83xx_ipic_prio2mask [MPC83XX_IPIC_VECTOR_NUMBER];
0314
0315 rtems_status_code mpc83xx_ipic_set_mask(
0316 rtems_vector_number vector,
0317 rtems_vector_number mask_vector,
0318 bool mask
0319 )
0320 {
0321 uint8_t pos = 0;
0322 mpc83xx_ipic_mask_t *mask_entry;
0323 uint32_t *mask_reg;
0324 rtems_interrupt_level level;
0325
0326
0327 if (!MPC83XX_IPIC_IS_VALID_VECTOR( vector) ||
0328 !MPC83XX_IPIC_IS_VALID_VECTOR( mask_vector)) {
0329 return RTEMS_INVALID_NUMBER;
0330 } else if (vector == mask_vector) {
0331 return RTEMS_RESOURCE_IN_USE;
0332 }
0333
0334
0335 pos = mpc83xx_ipic_mask_position_table [mask_vector];
0336 mask_entry = &mpc83xx_ipic_prio2mask [vector];
0337
0338
0339 if (pos < 32) {
0340 mask_reg = &mask_entry->simsr_mask [0];
0341 } else if (pos < 64) {
0342 pos -= 32;
0343 mask_reg = &mask_entry->simsr_mask [1];
0344 } else if (pos < 96) {
0345 pos -= 64;
0346 mask_reg = &mask_entry->semsr_mask;
0347 } else if (pos < 128) {
0348 pos -= 96;
0349 mask_reg = &mask_entry->sermr_mask;
0350 } else {
0351 return RTEMS_NOT_IMPLEMENTED;
0352 }
0353
0354
0355 if (mask) {
0356 rtems_interrupt_disable( level);
0357 *mask_reg &= ~(1 << pos);
0358 rtems_interrupt_enable( level);
0359 } else {
0360 rtems_interrupt_disable( level);
0361 *mask_reg |= 1 << pos;
0362 rtems_interrupt_enable( level);
0363 }
0364
0365 return RTEMS_SUCCESSFUL;
0366 }
0367
0368 rtems_status_code mpc83xx_ipic_set_highest_priority_interrupt(
0369 rtems_vector_number vector,
0370 int type
0371 )
0372 {
0373 rtems_interrupt_level level;
0374 uint32_t reg = 0;
0375
0376 if (!MPC83XX_IPIC_IS_VALID_VECTOR( vector)) {
0377 return RTEMS_INVALID_NUMBER;
0378 } else if (type < 0 || type > MPC83XX_IPIC_INTERRUPT_CRITICAL) {
0379 return RTEMS_INVALID_NUMBER;
0380 }
0381
0382 rtems_interrupt_disable( level);
0383 reg = mpc83xx.ipic.sicfr;
0384 mpc83xx.ipic.sicfr = (reg & ~0x7f000300) | (vector << 24) | (type << 8);
0385 rtems_interrupt_enable( level);
0386
0387 return RTEMS_SUCCESSFUL;
0388 }
0389
0390
0391
0392
0393 rtems_status_code bsp_interrupt_get_attributes(
0394 rtems_vector_number vector,
0395 rtems_interrupt_attributes *attributes
0396 )
0397 {
0398 return RTEMS_SUCCESSFUL;
0399 }
0400
0401 rtems_status_code bsp_interrupt_is_pending(
0402 rtems_vector_number vector,
0403 bool *pending
0404 )
0405 {
0406 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0407 bsp_interrupt_assert(pending != NULL);
0408 *pending = false;
0409 return RTEMS_UNSATISFIED;
0410 }
0411
0412 rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
0413 {
0414 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0415 return RTEMS_UNSATISFIED;
0416 }
0417
0418 rtems_status_code bsp_interrupt_clear(rtems_vector_number vector)
0419 {
0420 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0421 return RTEMS_UNSATISFIED;
0422 }
0423
0424 rtems_status_code bsp_interrupt_vector_is_enabled(
0425 rtems_vector_number vector,
0426 bool *enabled
0427 )
0428 {
0429 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0430 bsp_interrupt_assert(enabled != NULL);
0431 *enabled = false;
0432 return RTEMS_UNSATISFIED;
0433 }
0434
0435 rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number vector)
0436 {
0437 rtems_vector_number vecnum = vector - BSP_IPIC_IRQ_LOWEST_OFFSET;
0438 const BSP_isrc_rsc_t *rsc_ptr;
0439
0440 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0441
0442 if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) {
0443 rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum];
0444 if (rsc_ptr->mask_reg != NULL) {
0445 uint32_t bit = 1U << (31 - rsc_ptr->bit_num);
0446 rtems_interrupt_level level;
0447
0448 rtems_interrupt_disable(level);
0449 *(rsc_ptr->mask_reg) |= bit;
0450 rtems_interrupt_enable(level);
0451 }
0452 }
0453
0454 return RTEMS_SUCCESSFUL;
0455 }
0456
0457 rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number vector)
0458 {
0459 rtems_vector_number vecnum = vector - BSP_IPIC_IRQ_LOWEST_OFFSET;
0460 const BSP_isrc_rsc_t *rsc_ptr;
0461
0462 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0463
0464 if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) {
0465 rsc_ptr = &mpc83xx_ipic_isrc_rsc [vecnum];
0466 if (rsc_ptr->mask_reg != NULL) {
0467 uint32_t bit = 1U << (31 - rsc_ptr->bit_num);
0468 rtems_interrupt_level level;
0469
0470 rtems_interrupt_disable(level);
0471 *(rsc_ptr->mask_reg) &= ~bit;
0472 rtems_interrupt_enable(level);
0473 }
0474 }
0475
0476 return RTEMS_SUCCESSFUL;
0477 }
0478
0479 rtems_status_code bsp_interrupt_set_priority(
0480 rtems_vector_number vector,
0481 uint32_t priority
0482 )
0483 {
0484 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0485 return RTEMS_UNSATISFIED;
0486 }
0487
0488 rtems_status_code bsp_interrupt_get_priority(
0489 rtems_vector_number vector,
0490 uint32_t *priority
0491 )
0492 {
0493 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0494 bsp_interrupt_assert(priority != NULL);
0495 return RTEMS_UNSATISFIED;
0496 }
0497
0498
0499
0500
0501 static int BSP_irq_handle_at_ipic( unsigned excNum)
0502 {
0503 int32_t vecnum;
0504 #ifdef GEN83XX_ENABLE_INTERRUPT_NESTING
0505 mpc83xx_ipic_mask_t mask_save;
0506 const mpc83xx_ipic_mask_t *mask_ptr;
0507 uint32_t msr = 0;
0508 rtems_interrupt_level level;
0509 #endif
0510
0511
0512 switch (excNum) {
0513 case ASM_EXT_VECTOR:
0514 vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.sivcr);
0515 break;
0516 case ASM_E300_SYSMGMT_VECTOR:
0517 vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.smvcr);
0518 break;
0519 case ASM_E300_CRIT_VECTOR:
0520 vecnum = MPC83xx_VCR_TO_VEC( mpc83xx.ipic.scvcr);
0521 break;
0522 default:
0523 return 1;
0524 }
0525
0526
0527
0528
0529
0530 if (MPC83XX_IPIC_IS_VALID_VECTOR( vecnum)) {
0531 #ifdef GEN83XX_ENABLE_INTERRUPT_NESTING
0532 mask_ptr = &mpc83xx_ipic_prio2mask [vecnum];
0533
0534 rtems_interrupt_disable( level);
0535
0536
0537 mask_save.simsr_mask [0] = mpc83xx.ipic.simsr [0];
0538 mask_save.simsr_mask [1] = mpc83xx.ipic.simsr [1];
0539 mask_save.semsr_mask = mpc83xx.ipic.semsr;
0540 mask_save.sermr_mask = mpc83xx.ipic.sermr;
0541
0542
0543 mpc83xx.ipic.simsr [0] &= mask_ptr->simsr_mask [0];
0544 mpc83xx.ipic.simsr [1] &= mask_ptr->simsr_mask [1];
0545 mpc83xx.ipic.semsr &= mask_ptr->semsr_mask;
0546 mpc83xx.ipic.sermr &= mask_ptr->sermr_mask;
0547
0548 rtems_interrupt_enable( level);
0549
0550
0551 if (excNum != ASM_E300_CRIT_VECTOR) {
0552 msr = ppc_external_exceptions_enable();
0553 }
0554 #endif
0555
0556
0557 bsp_interrupt_handler_dispatch( vecnum + BSP_IPIC_IRQ_LOWEST_OFFSET);
0558
0559 #ifdef GEN83XX_ENABLE_INTERRUPT_NESTING
0560
0561 if (excNum != ASM_E300_CRIT_VECTOR) {
0562 ppc_external_exceptions_disable( msr);
0563 }
0564
0565
0566 rtems_interrupt_disable( level);
0567 mpc83xx.ipic.simsr [0] = mask_save.simsr_mask [0];
0568 mpc83xx.ipic.simsr [1] = mask_save.simsr_mask [1];
0569 mpc83xx.ipic.semsr = mask_save.semsr_mask;
0570 mpc83xx.ipic.sermr = mask_save.sermr_mask;
0571 rtems_interrupt_enable( level);
0572 #endif
0573 } else {
0574 bsp_interrupt_handler_default( vecnum);
0575 }
0576
0577 return 0;
0578 }
0579
0580
0581
0582
0583
0584 static void mpc83xx_ipic_calc_prio2mask(void)
0585 {
0586
0587
0588
0589 }
0590
0591
0592
0593
0594 static void mpc83xx_ipic_initialize(void)
0595 {
0596
0597
0598
0599 mpc83xx.ipic.simsr [0] = 0;
0600 mpc83xx.ipic.simsr [1] = 0;
0601 mpc83xx.ipic.semsr = 0;
0602 mpc83xx.ipic.sermr = 0;
0603
0604
0605
0606
0607 #if defined( BSP_SICFR_VAL)
0608 mpc83xx.ipic.sicfr = BSP_SICFR_VAL;
0609 #endif
0610
0611
0612
0613
0614
0615 #if defined( BSP_SIPRR0_VAL)
0616 mpc83xx.ipic.siprr [0] = BSP_SIPRR0_VAL;
0617 #endif
0618
0619 #if defined( BSP_SIPRR1_VAL)
0620 mpc83xx.ipic.siprr [1] = BSP_SIPRR1_VAL;
0621 #endif
0622
0623 #if defined( BSP_SIPRR2_VAL)
0624 mpc83xx.ipic.siprr [2] = BSP_SIPRR2_VAL;
0625 #endif
0626
0627 #if defined( BSP_SIPRR3_VAL)
0628 mpc83xx.ipic.siprr [3] = BSP_SIPRR3_VAL;
0629 #endif
0630
0631 #if defined( BSP_SMPRR0_VAL)
0632 mpc83xx.ipic.smprr [0] = BSP_SMPRR0_VAL;
0633 #endif
0634
0635 #if defined( BSP_SMPRR1_VAL)
0636 mpc83xx.ipic.smprr [1] = BSP_SMPRR1_VAL;
0637 #endif
0638
0639 #if defined( BSP_SECNR_VAL)
0640 mpc83xx.ipic.secnr = BSP_SECNR_VAL;
0641 #endif
0642
0643
0644
0645
0646 mpc83xx_ipic_calc_prio2mask();
0647 }
0648
0649 static int mpc83xx_exception_handler(
0650 BSP_Exception_frame *frame,
0651 unsigned exception_number
0652 )
0653 {
0654 return BSP_irq_handle_at_ipic( exception_number);
0655 }
0656
0657 void bsp_interrupt_facility_initialize()
0658 {
0659 rtems_status_code sc;
0660
0661
0662 sc = ppc_exc_set_handler( ASM_EXT_VECTOR, mpc83xx_exception_handler);
0663 _Assert_Unused_variable_equals( sc, RTEMS_SUCCESSFUL);
0664 sc = ppc_exc_set_handler( ASM_E300_SYSMGMT_VECTOR, mpc83xx_exception_handler);
0665 _Assert_Unused_variable_equals( sc, RTEMS_SUCCESSFUL);
0666 sc = ppc_exc_set_handler( ASM_E300_CRIT_VECTOR, mpc83xx_exception_handler);
0667 _Assert_Unused_variable_equals( sc, RTEMS_SUCCESSFUL);
0668
0669
0670 mpc83xx_ipic_initialize();
0671 }