Changeset 48c1ef9 in mainline for arch/ppc64/include


Ignore:
Timestamp:
2006-05-21T20:38:18Z (20 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
040542aa
Parents:
bd55bbb
Message:

port ppc32 changes to ppc64 (raw)

Location:
arch/ppc64/include
Files:
13 edited
1 moved

Legend:

Unmodified
Added
Removed
  • arch/ppc64/include/asm.h

    rbd55bbb r48c1ef9  
    4040 * @return Old interrupt priority level.
    4141 */
    42 static inline ipl_t interrupts_enable(void) {
     42static inline ipl_t interrupts_enable(void)
     43{
    4344        ipl_t v;
    4445        ipl_t tmp;
    4546       
    46         __asm__ volatile (
     47        asm volatile (
    4748                "mfmsr %0\n"
    4849                "mfmsr %1\n"
     
    6162 * @return Old interrupt priority level.
    6263 */
    63 static inline ipl_t interrupts_disable(void) {
     64static inline ipl_t interrupts_disable(void)
     65{
    6466        ipl_t v;
    6567        ipl_t tmp;
    6668       
    67         __asm__ volatile (
     69        asm volatile (
    6870                "mfmsr %0\n"
    6971                "mfmsr %1\n"
     
    8183 * @param ipl Saved interrupt priority level.
    8284 */
    83 static inline void interrupts_restore(ipl_t ipl) {
     85static inline void interrupts_restore(ipl_t ipl)
     86{
    8487        ipl_t tmp;
    8588       
    86         __asm__ volatile (
     89        asm volatile (
    8790                "mfmsr %1\n"
    8891                "rlwimi  %0, %1, 0, 17, 15\n"
     
    9396                : "=r" (ipl), "=r" (tmp)
    9497                : "0" (ipl)
     98                : "cr0"
    9599        );
    96100}
     
    102106 * @return Current interrupt priority level.
    103107 */
    104 static inline ipl_t interrupts_read(void) {
     108static inline ipl_t interrupts_read(void)
     109{
    105110        ipl_t v;
    106         __asm__ volatile (
     111       
     112        asm volatile (
    107113                "mfmsr %0\n"
    108114                : "=r" (v)
     
    121127        __address v;
    122128       
    123         __asm__ volatile ("and %0, %%sp, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1)));
    124        
     129        asm volatile (
     130                "and %0, %%sp, %1\n"
     131                : "=r" (v)
     132                : "r" (~(STACK_SIZE - 1))
     133        );
    125134        return v;
    126135}
     
    133142void asm_delay_loop(__u32 t);
    134143
     144extern void userspace_asm(__address uspace_uarg, __address stack, __address entry);
     145
    135146#endif
  • arch/ppc64/include/asm/regname.h

    rbd55bbb r48c1ef9  
    195195#define msr_ir  (1 << 4)
    196196#define msr_dr  (1 << 5)
     197#define msr_pr  (1 << 14)
     198#define msr_ee  (1 << 15)
    197199
    198200/* HID0 bits */
  • arch/ppc64/include/atomic.h

    rbd55bbb r48c1ef9  
    3434        long tmp;
    3535
    36         asm __volatile__ (
     36        asm volatile (
    3737                "1:\n"
    3838                "lwarx %0, 0, %2\n"
     
    4242                : "=&r" (tmp), "=m" (val->count)
    4343                : "r" (&val->count), "m" (val->count)
    44                 : "cc");
     44                : "cc"
     45        );
    4546}
    4647
     
    4950        long tmp;
    5051
    51         asm __volatile__(
     52        asm volatile (
    5253                "1:\n"
    5354                "lwarx %0, 0, %2\n"
     
    5758                : "=&r" (tmp), "=m" (val->count)
    5859                : "r" (&val->count), "m" (val->count)
    59                 : "cc");
     60                : "cc"
     61        );
    6062}
    6163
  • arch/ppc64/include/barrier.h

    rbd55bbb r48c1ef9  
    3030#define __ppc64_BARRIER_H__
    3131
    32 #define CS_ENTER_BARRIER()      __asm__ volatile ("" ::: "memory")
    33 #define CS_LEAVE_BARRIER()      __asm__ volatile ("" ::: "memory")
     32#define CS_ENTER_BARRIER()      asm volatile ("" ::: "memory")
     33#define CS_LEAVE_BARRIER()      asm volatile ("" ::: "memory")
    3434
    35 #define memory_barrier() __asm__ volatile ("sync" ::: "memory")
    36 #define read_barrier() __asm__ volatile ("sync" ::: "memory")
    37 #define write_barrier() __asm__ volatile ("eieio" ::: "memory")
     35#define memory_barrier() asm volatile ("sync" ::: "memory")
     36#define read_barrier() asm volatile ("sync" ::: "memory")
     37#define write_barrier() asm volatile ("eieio" ::: "memory")
    3838
    3939#endif
  • arch/ppc64/include/boot/boot.h

    rbd55bbb r48c1ef9  
    3535#define TEMP_STACK_SIZE 0x100
    3636
     37#define TASKMAP_MAX_RECORDS 32
    3738#define MEMMAP_MAX_RECORDS 32
    3839
     
    4243
    4344typedef struct {
     45        __address addr;
     46        __u64 size;
     47} utask_t;
     48
     49typedef struct {
     50        __u32 count;
     51        utask_t tasks[TASKMAP_MAX_RECORDS];
     52} taskmap_t;
     53
     54typedef struct {
    4455        __address start;
    45         __u32 size;
     56        __u64 size;
    4657} memzone_t;
    4758
    4859typedef struct {
    49         __u32 total;
     60        __u64 total;
    5061        __u32 count;
    5162        memzone_t zones[MEMMAP_MAX_RECORDS];
     
    6172
    6273typedef struct {
     74        taskmap_t taskmap;
    6375        memmap_t memmap;
    6476        screen_t screen;
  • arch/ppc64/include/byteorder.h

    rbd55bbb r48c1ef9  
    5454        __address v;
    5555       
    56         __asm__ volatile ("lwbrx %0, %1, %2\n" : "=r" (v) : "i" (0) , "r" (&n));
    57        
     56        asm volatile (
     57                "lwbrx %0, %1, %2\n"
     58                : "=r" (v)
     59                : "i" (0), "r" (&n)
     60        );
    5861        return v;
    5962}
     63
    6064#endif
  • arch/ppc64/include/cpuid.h

    rbd55bbb r48c1ef9  
    3939static inline void cpu_version(struct cpu_info *info)
    4040{
    41         __asm__ volatile (
    42                 "mfspr %0, 287\n"
     41        asm volatile (
     42                "mfpvr %0\n"
    4343                : "=r" (*info)
    4444        );
  • arch/ppc64/include/elf.h

    rbd55bbb r48c1ef9  
    3030#define __ppc64_ELF_H__
    3131
    32 #define ELF_MACHINE             EM_PPC
     32#define ELF_MACHINE             EM_PPC64
    3333#define ELF_DATA_ENCODING       ELFDATA2MSB
    3434#define ELF_CLASS               ELFCLASS32
  • arch/ppc64/include/exception.h

    rbd55bbb r48c1ef9  
    11/*
    2  * Copyright (C) 2005 Jakub Jermar
     2 * Copyright (C) 2006 Martin Decky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 #ifndef __ppc64_CONSOLE_H__
    30 #define __ppc64_CONSOLE_H__
     29#ifndef __ppc64_EXCEPTION_H__
     30#define __ppc64_EXCEPTION_H__
    3131
    32 extern void ppc64_console_init(void);
     32#ifndef __ppc64_TYPES_H__
     33#  include <arch/types.h>
     34#endif
     35
     36#include <typedefs.h>
     37
     38struct istate {
     39        __u64 r0;
     40        __u64 r2;
     41        __u64 r3;
     42        __u64 r4;
     43        __u64 r5;
     44        __u64 r6;
     45        __u64 r7;
     46        __u64 r8;
     47        __u64 r9;
     48        __u64 r10;
     49        __u64 r11;
     50        __u64 r13;
     51        __u64 r14;
     52        __u64 r15;
     53        __u64 r16;
     54        __u64 r17;
     55        __u64 r18;
     56        __u64 r19;
     57        __u64 r20;
     58        __u64 r21;
     59        __u64 r22;
     60        __u64 r23;
     61        __u64 r24;
     62        __u64 r25;
     63        __u64 r26;
     64        __u64 r27;
     65        __u64 r28;
     66        __u64 r29;
     67        __u64 r30;
     68        __u64 r31;
     69        __u64 cr;
     70        __u64 pc;
     71        __u64 srr1;
     72        __u64 lr;
     73        __u64 ctr;
     74        __u64 xer;
     75        __u64 r12;
     76        __u64 sp;
     77};
     78
     79static inline void istate_set_retaddr(istate_t *istate, __address retaddr)
     80{
     81        istate->pc = retaddr;
     82}
    3383
    3484#endif
  • arch/ppc64/include/mm/asid.h

    rbd55bbb r48c1ef9  
    3232typedef int asid_t;
    3333
    34 #define ASID_MAX_ARCH   3
     34#define ASID_MAX_ARCH           3
    3535
    36 #define asid_get()      (ASID_START+1)
     36#define asid_get()              (ASID_START+1)
    3737
    3838#endif
  • arch/ppc64/include/mm/frame.h

    rbd55bbb r48c1ef9  
    3131
    3232#define FRAME_WIDTH             12      /* 4K */
    33 #define FRAME_SIZE              (1<<FRAME_WIDTH)
     33#define FRAME_SIZE              (1 << FRAME_WIDTH)
    3434
    3535#ifdef KERNEL
    3636#ifndef __ASM__
     37
     38#include <arch/types.h>
     39
     40extern __address last_frame;
    3741
    3842extern void frame_arch_init(void);
  • arch/ppc64/include/mm/page.h

    rbd55bbb r48c1ef9  
    4545#endif
    4646
    47 #define PTL0_ENTRIES_ARCH               0
    48 #define PTL1_ENTRIES_ARCH               0
    49 #define PTL2_ENTRIES_ARCH               0
    50 #define PTL3_ENTRIES_ARCH               0
     47/*
     48 * Implementation of generic 4-level page table interface,
     49 * the hardware Page Hash Table is used as cache.
     50 *
     51 * Page table layout:
     52 * - 32-bit virtual addressess
     53 * - Offset is 12 bits => pages are 4K long
     54 * - PTL0 has 1024 entries (10 bits)
     55 * - PTL1 is not used
     56 * - PTL2 is not used
     57 * - PLT3 has 1024 entries (10 bits)
     58 */
    5159
    52 #define PTL0_INDEX_ARCH(vaddr)          0
    53 #define PTL1_INDEX_ARCH(vaddr)          0
    54 #define PTL2_INDEX_ARCH(vaddr)          0
    55 #define PTL3_INDEX_ARCH(vaddr)          0
     60#define PTL0_ENTRIES_ARCH       1024
     61#define PTL1_ENTRIES_ARCH       0
     62#define PTL2_ENTRIES_ARCH       0
     63#define PTL3_ENTRIES_ARCH       1024
     64
     65#define PTL0_INDEX_ARCH(vaddr)  (((vaddr) >> 22) & 0x3ff)
     66#define PTL1_INDEX_ARCH(vaddr)  0
     67#define PTL2_INDEX_ARCH(vaddr)  0
     68#define PTL3_INDEX_ARCH(vaddr)  (((vaddr) >> 12) & 0x3ff)
     69
     70#define GET_PTL1_ADDRESS_ARCH(ptl0, i)          (((pte_t *) (ptl0))[(i)].pfn << 12)
     71#define GET_PTL2_ADDRESS_ARCH(ptl1, i)          (ptl1)
     72#define GET_PTL3_ADDRESS_ARCH(ptl2, i)          (ptl2)
     73#define GET_FRAME_ADDRESS_ARCH(ptl3, i)         (((pte_t *) (ptl3))[(i)].pfn << 12)
    5674
    5775#define SET_PTL0_ADDRESS_ARCH(ptl0)
    58 
    59 #define GET_PTL1_ADDRESS_ARCH(ptl0, i)          ((pte_t *) 0)
    60 #define GET_PTL2_ADDRESS_ARCH(ptl1, i)          ((pte_t *) 0)
    61 #define GET_PTL3_ADDRESS_ARCH(ptl2, i)          ((pte_t *) 0)
    62 #define GET_FRAME_ADDRESS_ARCH(ptl3, i)         ((pte_t *) 0)
    63 
    64 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)
     76#define SET_PTL1_ADDRESS_ARCH(ptl0, i, a)       (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12)
    6577#define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    6678#define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    67 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)
     79#define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)      (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12)
    6880
    69 #define GET_PTL1_FLAGS_ARCH(ptl0, i)            0
    70 #define GET_PTL2_FLAGS_ARCH(ptl1, i)            0
    71 #define GET_PTL3_FLAGS_ARCH(ptl2, i)            0
    72 #define GET_FRAME_FLAGS_ARCH(ptl3, i)           0
     81#define GET_PTL1_FLAGS_ARCH(ptl0, i)            get_pt_flags((pte_t *) (ptl0), (index_t) (i))
     82#define GET_PTL2_FLAGS_ARCH(ptl1, i)            PAGE_PRESENT
     83#define GET_PTL3_FLAGS_ARCH(ptl2, i)            PAGE_PRESENT
     84#define GET_FRAME_FLAGS_ARCH(ptl3, i)           get_pt_flags((pte_t *) (ptl3), (index_t) (i))
    7385
    74 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x)
     86#define SET_PTL1_FLAGS_ARCH(ptl0, i, x)         set_pt_flags((pte_t *) (ptl0), (index_t) (i), (x))
    7587#define SET_PTL2_FLAGS_ARCH(ptl1, i, x)
    7688#define SET_PTL3_FLAGS_ARCH(ptl2, i, x)
    77 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x)
     89#define SET_FRAME_FLAGS_ARCH(ptl3, i, x)        set_pt_flags((pte_t *) (ptl3), (index_t) (i), (x))
    7890
    79 #define PTE_VALID_ARCH(p)               1
    80 #define PTE_PRESENT_ARCH(p)             1
    81 #define PTE_GET_FRAME_ARCH(p)           0
     91#define PTE_VALID_ARCH(pte)                     (*((__u32 *) (pte)) != 0)
     92#define PTE_PRESENT_ARCH(pte)           ((pte)->p != 0)
     93#define PTE_GET_FRAME_ARCH(pte)         ((pte)->pfn << 12)
    8294
    8395#ifndef __ASM__
     
    8799#include <arch/types.h>
    88100
     101static inline int get_pt_flags(pte_t *pt, index_t i)
     102{
     103        pte_t *p = &pt[i];
     104       
     105        return (
     106                (1 << PAGE_CACHEABLE_SHIFT) |
     107                ((!p->p) << PAGE_PRESENT_SHIFT) |
     108                (1 << PAGE_USER_SHIFT) |
     109                (1 << PAGE_READ_SHIFT) |
     110                (1 << PAGE_WRITE_SHIFT) |
     111                (1 << PAGE_EXEC_SHIFT) |
     112                (p->g << PAGE_GLOBAL_SHIFT)
     113        );
     114}
     115
     116static inline void set_pt_flags(pte_t *pt, index_t i, int flags)
     117{
     118        pte_t *p = &pt[i];
     119       
     120        p->p = !(flags & PAGE_NOT_PRESENT);
     121        p->g = (flags & PAGE_GLOBAL) != 0;
     122        p->valid = 1;
     123}
     124
    89125extern void page_arch_init(void);
     126
     127#define PHT_BITS        16
     128#define PHT_ORDER       4
     129
     130typedef struct {
     131        unsigned v : 1;          /**< Valid */
     132        unsigned vsid : 24;      /**< Virtual Segment ID */
     133        unsigned h : 1;          /**< Primary/secondary hash */
     134        unsigned api : 6;        /**< Abbreviated Page Index */
     135        unsigned rpn : 20;       /**< Real Page Number */
     136        unsigned reserved0 : 3;
     137        unsigned r : 1;          /**< Reference */
     138        unsigned c : 1;          /**< Change */
     139        unsigned wimg : 4;       /**< Access control */
     140        unsigned reserved1 : 1;
     141        unsigned pp : 2;         /**< Page protection */
     142} phte_t;
     143
     144extern void pht_refill(bool data, istate_t *istate);
     145extern void pht_init(void);
    90146
    91147#endif /* __ASM__ */
  • arch/ppc64/include/mm/tlb.h

    rbd55bbb r48c1ef9  
    3030#define __ppc64_TLB_H__
    3131
    32 #define tlb_arch_init()
    33 #define tlb_print()
    3432
    3533#endif
  • arch/ppc64/include/types.h

    rbd55bbb r48c1ef9  
    3434typedef signed char __s8;
    3535typedef signed short __s16;
    36 typedef signed long __s32;
    37 typedef signed long long __s64;
     36typedef signed int __s32;
     37typedef signed long __s64;
    3838
    3939typedef unsigned char __u8;
     
    4343
    4444typedef __u64 __address;
    45 typedef __u32 pfn_t;
     45typedef __u64 pfn_t;
    4646
    4747typedef __u64 ipl_t;
    4848
    49 typedef __u64 __native;
     49typedef __u32 __native;
    5050
    51 typedef __u32 pte_t;
     51/** Page Table Entry. */
     52typedef struct {
     53        unsigned p : 1;       /**< Present bit. */
     54        unsigned a : 1;       /**< Accessed bit. */
     55        unsigned g : 1;       /**< Global bit. */
     56        unsigned valid : 1;   /**< Valid content even if not present. */
     57        unsigned pfn : 20;    /**< Physical frame number. */
     58} pte_t;
    5259
    5360#endif
Note: See TracChangeset for help on using the changeset viewer.