From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b2d2R-0004X6-Vr for qemu-devel@nongnu.org; Tue, 17 May 2016 07:19:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b2d2L-0004yS-Rt for qemu-devel@nongnu.org; Tue, 17 May 2016 07:19:46 -0400 References: <1463412982-6681-1-git-send-email-pbonzini@redhat.com> <1463412982-6681-15-git-send-email-pbonzini@redhat.com> From: Thomas Huth Message-ID: <573AFE48.4080503@redhat.com> Date: Tue, 17 May 2016 13:19:36 +0200 MIME-Version: 1.0 In-Reply-To: <1463412982-6681-15-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 14/50] target-ppc: make cpu-qom.h not target specific List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , qemu-devel@nongnu.org, qemu-ppc@nongnu.org On 16.05.2016 17:35, Paolo Bonzini wrote: > Make PowerPCCPU an opaque type within cpu-qom.h, and move all definitions > of private methods, as well as all type definitions that require knowledge > of the layout to cpu.h. Conversely, move all definitions needed to define > a class to cpu-qom.h. This helps making files independent of NEED_CPU_H > if they only need to pass around CPU pointers. > > Signed-off-by: Paolo Bonzini > --- > target-ppc/cpu-qom.h | 161 ++++++++++++++++++++++++++++++++++---------------- > target-ppc/cpu.h | 164 ++++++++++++++++----------------------------------- > 2 files changed, 163 insertions(+), 162 deletions(-) > > diff --git a/target-ppc/cpu-qom.h b/target-ppc/cpu-qom.h > index bab501f..49c71fa 100644 > --- a/target-ppc/cpu-qom.h > +++ b/target-ppc/cpu-qom.h > @@ -38,6 +38,117 @@ > OBJECT_GET_CLASS(PowerPCCPUClass, (obj), TYPE_POWERPC_CPU) > > typedef struct PowerPCCPU PowerPCCPU; > +typedef struct CPUPPCState CPUPPCState; > +typedef struct ppc_tb_t ppc_tb_t; > +typedef struct ppc_dcr_t ppc_dcr_t; > + > +/*****************************************************************************/ > +/* MMU model */ > +typedef enum powerpc_mmu_t powerpc_mmu_t; > +enum powerpc_mmu_t { > + POWERPC_MMU_UNKNOWN = 0x00000000, > + /* Standard 32 bits PowerPC MMU */ > + POWERPC_MMU_32B = 0x00000001, > + /* PowerPC 6xx MMU with software TLB */ > + POWERPC_MMU_SOFT_6xx = 0x00000002, > + /* PowerPC 74xx MMU with software TLB */ > + POWERPC_MMU_SOFT_74xx = 0x00000003, > + /* PowerPC 4xx MMU with software TLB */ > + POWERPC_MMU_SOFT_4xx = 0x00000004, > + /* PowerPC 4xx MMU with software TLB and zones protections */ > + POWERPC_MMU_SOFT_4xx_Z = 0x00000005, > + /* PowerPC MMU in real mode only */ > + POWERPC_MMU_REAL = 0x00000006, > + /* Freescale MPC8xx MMU model */ > + POWERPC_MMU_MPC8xx = 0x00000007, > + /* BookE MMU model */ > + POWERPC_MMU_BOOKE = 0x00000008, > + /* BookE 2.06 MMU model */ > + POWERPC_MMU_BOOKE206 = 0x00000009, > + /* PowerPC 601 MMU model (specific BATs format) */ > + POWERPC_MMU_601 = 0x0000000A, > +#if defined(TARGET_PPC64) > +#define POWERPC_MMU_64 0x00010000 > +#define POWERPC_MMU_1TSEG 0x00020000 > +#define POWERPC_MMU_AMR 0x00040000 > + /* 64 bits PowerPC MMU */ > + POWERPC_MMU_64B = POWERPC_MMU_64 | 0x00000001, > + /* Architecture 2.03 and later (has LPCR) */ > + POWERPC_MMU_2_03 = POWERPC_MMU_64 | 0x00000002, > + /* Architecture 2.06 variant */ > + POWERPC_MMU_2_06 = POWERPC_MMU_64 | POWERPC_MMU_1TSEG > + | POWERPC_MMU_AMR | 0x00000003, > + /* Architecture 2.06 "degraded" (no 1T segments) */ > + POWERPC_MMU_2_06a = POWERPC_MMU_64 | POWERPC_MMU_AMR > + | 0x00000003, > + /* Architecture 2.07 variant */ > + POWERPC_MMU_2_07 = POWERPC_MMU_64 | POWERPC_MMU_1TSEG > + | POWERPC_MMU_AMR | 0x00000004, > + /* Architecture 2.07 "degraded" (no 1T segments) */ > + POWERPC_MMU_2_07a = POWERPC_MMU_64 | POWERPC_MMU_AMR > + | 0x00000004, > +#endif /* defined(TARGET_PPC64) */ > +}; Moving code into cpu-qom.h that depends on a "#ifdef TARGET_PPC64" in a patch labeled "make cpu-qom.h not target specific" sounds somewhat wrong to me - even if it's only an enum... Could we somehow avoid this? Would it maybe be feasible to move PowerPCCPUClass into cpu.h instead, too? (PowerPCCPUClass also depends on a "#ifdef TARGET_PPC64") Thomas