Statistics
| Branch: | Revision:

root / hw / ppc.h @ 8e9f18b6

History | View | Annotate | Download (3.6 kB)

1 e2684c0b Andreas Färber
void ppc_set_irq (CPUPPCState *env, int n_IRQ, int level);
2 ddd1055b Fabien Chouteau
3 87ecb68b pbrook
/* PowerPC hardware exceptions management helpers */
4 87ecb68b pbrook
typedef void (*clk_setup_cb)(void *opaque, uint32_t freq);
5 c227f099 Anthony Liguori
typedef struct clk_setup_t clk_setup_t;
6 c227f099 Anthony Liguori
struct clk_setup_t {
7 87ecb68b pbrook
    clk_setup_cb cb;
8 87ecb68b pbrook
    void *opaque;
9 87ecb68b pbrook
};
10 c227f099 Anthony Liguori
static inline void clk_setup (clk_setup_t *clk, uint32_t freq)
11 87ecb68b pbrook
{
12 87ecb68b pbrook
    if (clk->cb != NULL)
13 87ecb68b pbrook
        (*clk->cb)(clk->opaque, freq);
14 87ecb68b pbrook
}
15 87ecb68b pbrook
16 ddd1055b Fabien Chouteau
struct ppc_tb_t {
17 ddd1055b Fabien Chouteau
    /* Time base management */
18 ddd1055b Fabien Chouteau
    int64_t  tb_offset;    /* Compensation                    */
19 ddd1055b Fabien Chouteau
    int64_t  atb_offset;   /* Compensation                    */
20 ddd1055b Fabien Chouteau
    uint32_t tb_freq;      /* TB frequency                    */
21 ddd1055b Fabien Chouteau
    /* Decrementer management */
22 ddd1055b Fabien Chouteau
    uint64_t decr_next;    /* Tick for next decr interrupt    */
23 ddd1055b Fabien Chouteau
    uint32_t decr_freq;    /* decrementer frequency           */
24 ddd1055b Fabien Chouteau
    struct QEMUTimer *decr_timer;
25 ddd1055b Fabien Chouteau
    /* Hypervisor decrementer management */
26 ddd1055b Fabien Chouteau
    uint64_t hdecr_next;    /* Tick for next hdecr interrupt  */
27 ddd1055b Fabien Chouteau
    struct QEMUTimer *hdecr_timer;
28 ddd1055b Fabien Chouteau
    uint64_t purr_load;
29 ddd1055b Fabien Chouteau
    uint64_t purr_start;
30 ddd1055b Fabien Chouteau
    void *opaque;
31 ddd1055b Fabien Chouteau
    uint32_t flags;
32 ddd1055b Fabien Chouteau
};
33 ddd1055b Fabien Chouteau
34 ddd1055b Fabien Chouteau
/* PPC Timers flags */
35 ddd1055b Fabien Chouteau
#define PPC_TIMER_BOOKE              (1 << 0) /* Enable Booke support */
36 ddd1055b Fabien Chouteau
#define PPC_TIMER_E500               (1 << 1) /* Enable e500 support */
37 ddd1055b Fabien Chouteau
#define PPC_DECR_UNDERFLOW_TRIGGERED (1 << 2) /* Decr interrupt triggered when
38 ddd1055b Fabien Chouteau
                                               * the most significant bit
39 ddd1055b Fabien Chouteau
                                               * changes from 0 to 1.
40 ddd1055b Fabien Chouteau
                                               */
41 ddd1055b Fabien Chouteau
#define PPC_DECR_ZERO_TRIGGERED      (1 << 3) /* Decr interrupt triggered when
42 ddd1055b Fabien Chouteau
                                               * the decrementer reaches zero.
43 ddd1055b Fabien Chouteau
                                               */
44 ddd1055b Fabien Chouteau
45 ddd1055b Fabien Chouteau
uint64_t cpu_ppc_get_tb(ppc_tb_t *tb_env, uint64_t vmclk, int64_t tb_offset);
46 e2684c0b Andreas Färber
clk_setup_cb cpu_ppc_tb_init (CPUPPCState *env, uint32_t freq);
47 87ecb68b pbrook
/* Embedded PowerPC DCR management */
48 73b01960 Alexander Graf
typedef uint32_t (*dcr_read_cb)(void *opaque, int dcrn);
49 73b01960 Alexander Graf
typedef void (*dcr_write_cb)(void *opaque, int dcrn, uint32_t val);
50 e2684c0b Andreas Färber
int ppc_dcr_init (CPUPPCState *env, int (*dcr_read_error)(int dcrn),
51 87ecb68b pbrook
                  int (*dcr_write_error)(int dcrn));
52 e2684c0b Andreas Färber
int ppc_dcr_register (CPUPPCState *env, int dcrn, void *opaque,
53 87ecb68b pbrook
                      dcr_read_cb drc_read, dcr_write_cb dcr_write);
54 e2684c0b Andreas Färber
clk_setup_cb ppc_40x_timers_init (CPUPPCState *env, uint32_t freq,
55 d63cb48d Edgar E. Iglesias
                                  unsigned int decr_excp);
56 d63cb48d Edgar E. Iglesias
57 87ecb68b pbrook
/* Embedded PowerPC reset */
58 e2684c0b Andreas Färber
void ppc40x_core_reset (CPUPPCState *env);
59 e2684c0b Andreas Färber
void ppc40x_chip_reset (CPUPPCState *env);
60 e2684c0b Andreas Färber
void ppc40x_system_reset (CPUPPCState *env);
61 87ecb68b pbrook
void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
62 87ecb68b pbrook
63 d60efc6b Blue Swirl
extern CPUWriteMemoryFunc * const PPC_io_write[];
64 d60efc6b Blue Swirl
extern CPUReadMemoryFunc * const PPC_io_read[];
65 87ecb68b pbrook
void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val);
66 b1d8e52e blueswir1
67 e2684c0b Andreas Färber
void ppc40x_irq_init (CPUPPCState *env);
68 e2684c0b Andreas Färber
void ppce500_irq_init (CPUPPCState *env);
69 e2684c0b Andreas Färber
void ppc6xx_irq_init (CPUPPCState *env);
70 e2684c0b Andreas Färber
void ppc970_irq_init (CPUPPCState *env);
71 e2684c0b Andreas Färber
void ppcPOWER7_irq_init (CPUPPCState *env);
72 5ce4aafd aurel32
73 5ce4aafd aurel32
/* PPC machines for OpenBIOS */
74 5ce4aafd aurel32
enum {
75 5ce4aafd aurel32
    ARCH_PREP = 0,
76 5ce4aafd aurel32
    ARCH_MAC99,
77 5ce4aafd aurel32
    ARCH_HEATHROW,
78 0f921197 Alexander Graf
    ARCH_MAC99_U3,
79 5ce4aafd aurel32
};
80 5ce4aafd aurel32
81 7f1aec5f Laurent Vivier
#define FW_CFG_PPC_WIDTH        (FW_CFG_ARCH_LOCAL + 0x00)
82 7f1aec5f Laurent Vivier
#define FW_CFG_PPC_HEIGHT        (FW_CFG_ARCH_LOCAL + 0x01)
83 7f1aec5f Laurent Vivier
#define FW_CFG_PPC_DEPTH        (FW_CFG_ARCH_LOCAL + 0x02)
84 dc333cd6 Alexander Graf
#define FW_CFG_PPC_TBFREQ        (FW_CFG_ARCH_LOCAL + 0x03)
85 45024f09 Alexander Graf
#define FW_CFG_PPC_IS_KVM       (FW_CFG_ARCH_LOCAL + 0x05)
86 45024f09 Alexander Graf
#define FW_CFG_PPC_KVM_HC       (FW_CFG_ARCH_LOCAL + 0x06)
87 45024f09 Alexander Graf
#define FW_CFG_PPC_KVM_PID      (FW_CFG_ARCH_LOCAL + 0x07)
88 802670e6 Blue Swirl
89 802670e6 Blue Swirl
#define PPC_SERIAL_MM_BAUDBASE 399193
90 ddd1055b Fabien Chouteau
91 ddd1055b Fabien Chouteau
/* ppc_booke.c */
92 e2684c0b Andreas Färber
void ppc_booke_timers_init(CPUPPCState *env, uint32_t freq, uint32_t flags);