summaryrefslogtreecommitdiffstats
path: root/pk/cme/cme_common.h
blob: 23eb59ff150239b37786cffb0f305e4e6f67c1aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef __CME_COMMON_H__
#define __CME_COMMON_H__

//-----------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2014
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
//-----------------------------------------------------------------------------

/// \file cme_common.h
/// \brief Common header for CME
///
/// This header is maintained as part of the PK port for CME, but needs to be
/// physically present in the PMX area to allow dropping PMX code as a whole
/// to other teams.

// -*- WARNING: This file is maintained as part of PK.  Do not edit in -*-
// -*- the PMX area as your edits will be lost.                         -*-

#ifndef __ASSEMBLER__
#include <stdint.h>
#endif

/// This constant is used to define the size of the table of interrupt handler
/// structures as well as a limit for error checking. 
/// NOTE: This can be specific to each PPE type (SBE, CME, GPE)
#define EXTERNAL_IRQS 64

#ifdef __ASSEMBLER__
/// This macro contains CME specific code for determining what IRQ caused the
/// external exception handler to be invoked by the PPE

/// Load noncritical status 0 and the handler array base address.  Check
/// for interrupts pending in status register 0 while the IRQ is
/// computed.  The IRQ is expected to be stored in r3.
    .macro hwmacro_get_ext_irq
        
#_lwzi       %r4, %r4, OCB_ONISR0
        cntlzw      %r3, %r4
        cmpwible    %r3, 31, external_irq_found   #branch if irq is lt or eq to 31
        
        ## No IRQ pending in interrupt set 0.  Try set 1.
        
#_lwzi   %r4, %r4, OCB_ONISR1
        cntlzw  %r3, %r4
        addi    %r3, %r3, 32

    .endm

/// Redirect the .hwmacro_irq_cfg_bitmaps macro to call our cme specific implementation
/// This is called from the ppe42_exceptions.S file.
    .macro .hwmacro_irq_cfg_bitmaps
    .endm

#endif /* __ASSEMBLER__ */

#endif  /* __CME_COMMON_H__ */
OpenPOWER on IntegriCloud