Annotation of qemu/roms/openbios/include/arch/ppc/processor.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *   Creation Date: <2000/10/29 01:43:29 samuel>
                      3:  *   Time-stamp: <2003/07/27 22:37:49 samuel>
                      4:  *
                      5:  *     <processor.h>
                      6:  *
                      7:  *     Extract from <asm/processor.h>
                      8:  *
                      9:  *
                     10:  *   This program is free software; you can redistribute it and/or
                     11:  *   modify it under the terms of the GNU General Public License
                     12:  *   as published by the Free Software Foundation
                     13:  *
                     14:  */
                     15: 
                     16: #ifndef _H_PROCESSOR
                     17: #define _H_PROCESSOR
                     18: 
                     19: 
                     20: #define PTE0_VSID(s)   (((s)>>7) & 0xffffff)
                     21: #define PTE0_V         BIT(0)
                     22: #define PTE0_H         BIT(25)
                     23: #define PTE0_API       0x3f
                     24: 
                     25: #define PTE1_R         BIT(23)
                     26: #define PTE1_C         BIT(24)
                     27: #define PTE1_W         BIT(25)
                     28: #define PTE1_I         BIT(26)
                     29: #define PTE1_M         BIT(27)
                     30: #define PTE1_G         BIT(28)
                     31: #define PTE1_WIMG      (PTE1_W | PTE1_I | PTE1_M | PTE1_G)
                     32: #define PTE1_PP                0x3
                     33: #define PTE1_RPN       (~0xfffUL)
                     34: 
                     35: #define VSID_Ks                BIT(1)
                     36: #define VSID_Kp                BIT(2)
                     37: #define VSID_N         BIT(3)
                     38: 
                     39: 
                     40: 
                     41: #ifndef MSR_VEC
                     42: 
                     43: #define MSR_SF      (1 << 63)   /* Sixty-Four Bit Mode */
                     44: 
                     45: #define MSR_VEC                (1<<25)         /*  6: Enable AltiVec */
                     46: #define MSR_POW                (1<<18)         /* 13: Enable Power Management */
                     47: #define MSR_TGPR       (1<<17)         /* 14: TLB Update registers in use */
                     48: #define MSR_ILE                (1<<16)         /* 15: Interrupt Little Endian */
                     49: #define MSR_EE         (1<<15)         /* 16: External Interrupt Enable */
                     50: #define MSR_PR         (1<<14)         /* 17: Privilege Level */
                     51: #define MSR_FP         (1<<13)         /* 18: Floating Point enable */
                     52: #define MSR_ME         (1<<12)         /* 19: Machine Check Enable */
                     53: #define MSR_FE0                (1<<11)         /* 20: Floating Exception mode 0 */
                     54: #define MSR_SE         (1<<10)         /* 21: Single Step */
                     55: #define MSR_BE         (1<<9)          /* 22: Branch Trace */
                     56: #define MSR_FE1                (1<<8)          /* 23: Floating Exception mode 1 */
                     57: #define MSR_IP         (1<<6)          /* 25: Exception prefix 0x000/0xFFF */
                     58: #define MSR_IR         (1<<5)          /* 26: Instruction Relocate */
                     59: #define MSR_DR         (1<<4)          /* 27: Data Relocate */
                     60: #define MSR_PE         (1<<2)          /* 29: Performance Monitor Flag */
                     61: #define MSR_RI         (1<<1)          /* 30: Recoverable Exception */
                     62: #define MSR_LE         (1<<0)          /* 31: Little Endian */
                     63: 
                     64: #endif /* MSR_VEC */
                     65: 
                     66: #ifndef S_SPRG0
                     67: 
                     68: #define NUM_SPRS       1024
                     69: //#define S_XER                1
                     70: #define S_RTCU_R       4       /* 601 RTC Upper/Lower (Reading) */
                     71: #define S_RTCL_R               5
                     72: //#define S_LR         8
                     73: //#define S_CTR                9
                     74: #define        S_DSISR         18      /* Source Instruction Service Register */
                     75: #define S_DAR          19      /* Data Address Register */
                     76: #define S_RTCU_W       20      /* 601 RTC Upper/Lower (Writing) */
                     77: #define S_RTCL_W               21
                     78: #define S_DEC          22      /* Decrementer Register */
                     79: #define S_SDR1         25      /* Table Search Description Register */
                     80: #define S_SRR0         26      /* Save and Restore Register 0 */
                     81: #define S_SRR1         27      /* Save and Restore Register 1 */
                     82: #define S_VRSAVE       256     /* (AltiVec) Vector Register Save Register */
                     83: #define S_TBRL         268     /* Time base Upper/Lower (Reading) */
                     84: #define S_TBRU         269
                     85: #define S_SPRG0                272     /* SPR General 0-3 */
                     86: #define S_SPRG1                273
                     87: #define S_SPRG2                274
                     88: #define S_SPRG3                275
                     89: #define S_SPRG4                276     /* SPR General 4-7 (7445/7455) */
                     90: #define S_SPRG5                277
                     91: #define S_SPRG6                278
                     92: #define S_SPRG7                279
                     93: #define S_EAR          282     /* External Access Register */
                     94: #define S_TBWL         284     /* Time base Upper/Lower (Writing) */
                     95: #define S_TBWU         285
                     96: #define S_PVR          287     /* Processor Version Register */
                     97: #define S_HIOR         311     /* Hardware Interrupt Offset Register */
                     98: #define S_IBAT0U       528
                     99: #define S_IBAT0L       529
                    100: #define S_IBAT1U       530
                    101: #define S_IBAT1L       531
                    102: #define S_IBAT2U       532
                    103: #define S_IBAT2L       533
                    104: #define S_IBAT3U       534
                    105: #define S_IBAT3L       535
                    106: #define S_DBAT0U       536
                    107: #define S_DBAT0L       537
                    108: #define S_DBAT1U       538
                    109: #define S_DBAT1L       539
                    110: #define S_DBAT2U       540
                    111: #define S_DBAT2L       541
                    112: #define S_DBAT3U       542
                    113: #define S_DBAT3L       543
                    114: #define S_UMMCR2       928
                    115: #define S_UPMC5                929     /* User Performance Monitor Counter Register */
                    116: #define S_UPMC6                930
                    117: #define S_UBAMR                935
                    118: #define S_UMMCR0       936     /* User Monitor Mode Control Register */
                    119: #define S_UPMC1                937
                    120: #define S_UPMC2                938
                    121: #define S_USIAR                939     /* User Sampled Instruction Address Register */
                    122: #define S_UMMCR1       940
                    123: #define S_UPMC3                941
                    124: #define S_UPMC4                942     /* User Performance Monitor Counter Register 4 */
                    125: #define S_USDAR                943     /* User Sampled Data Address Register */
                    126: #define S_MMCR2                944     /* Monitor Mode Control Register */
                    127: #define S_PMC5         945
                    128: #define S_PMC6         946
                    129: #define S_BAMR         951     /* Breakpoint Address Mask Register (74xx) */
                    130: #define S_MMCR0                952     /* Monitor Mode Control Register 0 */
                    131: #define S_PMC1         953     /* Performance Counter Register */
                    132: #define S_PMC2         954
                    133: #define S_SIAR         955     /* Sampled Instruction Address Register */
                    134: #define S_MMCR1                956
                    135: #define S_PMC3         957
                    136: #define S_PMC4         958
                    137: #define S_SDAR         959     /* Sampled Data Address Register */
                    138: #define S_DMISS                976     /* 603 */
                    139: #define S_DCMP         977     /* 603 */
                    140: #define S_HASH1                978     /* 603 */
                    141: #define S_HASH2                979     /* 603 */
                    142: #define S_IMISS                980     /* 603 */
                    143: #define S_TLBMISS      980     /* 7445/7455 */
                    144: #define S_ICMP         981     /* 603 */
                    145: #define S_PTEHI                981     /* 7445/7455 */
                    146: #define S_RPA          982     /* 603 */
                    147: #define S_PTELO                982     /* 7445/7455 */
                    148: #define S_L3PM         983     /* L3 Private Memory Address Control Register */
                    149: #define S_L3ITCR0      984     /* ??? */
                    150: #define S_L3OHCR       1000    /* ??? */
                    151: #define S_L3ITCR1      1001    /* ??? */
                    152: #define S_L3ITCR2      1002    /* ??? */
                    153: #define S_L3ITCR3      1003    /* ??? */
                    154: #define S_HID0         1008    /* Hardware Implementation Registers */
                    155: #define S_HID1         1009
                    156: #define S_HID2         1010
                    157: #define S_IABR         S_HID2  /* HID2 - Instruction Address Breakpoint Register */
                    158: #define S_ICTRL                1011    /* HID3 - Instruction Cache & Interrupt control reg */
                    159: #define S_HID4         1012    /* HID4 - Instruction Address Compare 1 (?) */
                    160: #define S_HID5         1013
                    161: #define S_DABR         S_HID5  /* HID5 - Data Address Breakpoint */
                    162: #define S_MSSCR0       1014    /* HID6 - Memory Subsystem Control Register 0 */
                    163: #define S_MSSCR1       1015    /* HID7 - Memory Subsystem Control Register 1 */
                    164: #define S_LDSTCR       1016    /* HID8 - Load/Store Control Register */
                    165: #define S_L2CR         1017    /* HID9 - Level 2 Cache Control Regsiter */
                    166: #define S_L3CR         1018    /* HID10 - Level 3 Cache Control Regsiter (7450) */
                    167: #define S_HID11                1019
                    168: #define S_ICTC         S_HID11 /* HID11 - Instruction Cache Throttling Control Reg */
                    169: #define S_ICCR         S_HID11 /* Instruction Cache Cacheability Reigster */
                    170: #define S_THRM1                1020    /* HID12 - Thermal Management Register 1 */
                    171: #define S_THRM2                1021    /* HID13 - Thermal Management Register 2 */
                    172: #define S_THRM3                1022    /* HID14 - Thermal Management Register 3 */
                    173: #define S_HID15                1023
                    174: #define S_PIR          S_HID15 /* HID15 - Processor Identification Register */
                    175: 
                    176: #endif /* S_SPRG0 */
                    177: 
                    178: /* the kernel might define these too... */
                    179: #if !defined(__KERNEL__) || defined(__ASSEMBLY__)
                    180: 
                    181: /* Floating Point Status and Control Register (FPSCR) Fields */
                    182: #define FPSCR_FX       0x80000000      /* FPU exception summary */
                    183: #define FPSCR_FEX      0x40000000      /* FPU enabled exception summary */
                    184: #define FPSCR_VX       0x20000000      /* Invalid operation summary */
                    185: #define FPSCR_OX       0x10000000      /* Overflow exception summary */
                    186: #define FPSCR_UX       0x08000000      /* Underflow exception summary */
                    187: #define FPSCR_ZX       0x04000000      /* Zero-devide exception summary */
                    188: #define FPSCR_XX       0x02000000      /* Inexact exception summary */
                    189: #define FPSCR_VXSNAN   0x01000000      /* Invalid op for SNaN */
                    190: #define FPSCR_VXISI    0x00800000      /* Invalid op for Inv - Inv */
                    191: #define FPSCR_VXIDI    0x00400000      /* Invalid op for Inv / Inv */
                    192: #define FPSCR_VXZDZ    0x00200000      /* Invalid op for Zero / Zero */
                    193: #define FPSCR_VXIMZ    0x00100000      /* Invalid op for Inv * Zero */
                    194: #define FPSCR_VXVC     0x00080000      /* Invalid op for Compare */
                    195: #define FPSCR_FR       0x00040000      /* Fraction rounded */
                    196: #define FPSCR_FI       0x00020000      /* Fraction inexact */
                    197: #define FPSCR_FPRF     0x0001f000      /* FPU Result Flags */
                    198: #define FPSCR_FPCC     0x0000f000      /* FPU Condition Codes */
                    199: #define FPSCR_VXSOFT   0x00000400      /* Invalid op for software request */
                    200: #define FPSCR_VXSQRT   0x00000200      /* Invalid op for square root */
                    201: #define FPSCR_VXCVI    0x00000100      /* Invalid op for integer convert */
                    202: #define FPSCR_VE       0x00000080      /* Invalid op exception enable */
                    203: #define FPSCR_OE       0x00000040      /* IEEE overflow exception enable */
                    204: #define FPSCR_UE       0x00000020      /* IEEE underflow exception enable */
                    205: #define FPSCR_ZE       0x00000010      /* IEEE zero divide exception enable */
                    206: #define FPSCR_XE       0x00000008      /* FP inexact exception enable */
                    207: #define FPSCR_NI       0x00000004      /* FPU non IEEE-Mode */
                    208: #define FPSCR_RN       0x00000003      /* FPU rounding control */
                    209: 
                    210: /* SPR_HID0 */
                    211: #define        HID0_EMCP       (1<<31)         /* Enable Machine Check pin */
                    212: #define        HID0_EBA        (1<<29)         /* Enable Bus Address Parity */
                    213: #define        HID0_EBD        (1<<28)         /* Enable Bus Data Parity */
                    214: #define        HID0_SBCLK      (1<<27)
                    215: #define        HID0_EICE       (1<<26)
                    216: #define        HID0_ECLK       (1<<25)
                    217: #define        HID0_PAR        (1<<24)
                    218: #define        HID0_DOZE       (1<<23)
                    219: #define        HID0_NAP        (1<<22)
                    220: #define        HID0_SLEEP      (1<<21)
                    221: #define        HID0_DPM        (1<<20)
                    222: #define        HID0_NHR        (1<<16)         /* Not Hard Reset */
                    223: #define        HID0_ICE        (1<<15)         /* Instruction Cache Enable */
                    224: #define        HID0_DCE        (1<<14)         /* Data Cache Enable */
                    225: #define        HID0_ILOCK      (1<<13)         /* Instruction Cache Lock */
                    226: #define        HID0_DLOCK      (1<<12)         /* Data Cache Lock */
                    227: #define        HID0_ICFI       (1<<11)         /* Instr. Cache Flash Invalidate */
                    228: #define        HID0_DCFI       (1<<10)         /* Data Cache Flash Invalidate */
                    229: #define HID0_SPD       (1<<9)          /* Speculative disable */
                    230: #define HID0_SGE       (1<<7)          /* Store Gathering Enable */
                    231: #define        HID0_SIED       (1<<7)          /* Serial Instr. Execution [Disable] */
                    232: #define HID0_BTIC      (1<<5)          /* Branch Target Instruction Cache Enable */
                    233: #define HID0_ABE       (1<<3)          /* Address Broadcast Enable */
                    234: #define        HID0_BHT        (1<<2)          /* Branch History Table Enable */
                    235: #define        HID0_BTCD       (1<<1)          /* Branch target cache disable */
                    236: 
                    237: #define L2CR_L2E       BIT(0)          /* L2 enable */
                    238: #define L2CR_L2PE      BIT(1)          /* L2 data parity generation and checking */
                    239: #define L2CR_L2SIZ_512K        BIT(2)
                    240: #define L2CR_L2SIZ_256K        BIT(3)
                    241: #define L2CR_L2SIZ_1MB (BIT(2)|BIT(3))
                    242: #define L2CR_L2CLK_1   BIT(6)          /* L2 clock ration */
                    243: #define L2CR_L2CLK_15  (BIT(6)*2)
                    244: #define L2CR_L2CLK_2   (BIT(6)*4)
                    245: #define L2CR_L2CLK_25  (BIT(6)*5)
                    246: #define L2CR_L2CLK_3   (BIT(6)*6)
                    247: #define L2CR_L2RAM_FT  0               /* flow-through (reg-buf) synchronous SRAM */
                    248: #define L2CR_L2RAM_PB  BIT(7)          /* Piplined (reg-reg) synchronous burst SRAM */
                    249: #define L2CR_L2RAM_PLW (BIT(7)|BIT(8)) /* Piplined (reg-reg) synchronous late-write */
                    250: #define L2CR_L2DO      BIT(9)          /* L2 data-only */
                    251: #define L2CR_L2I       BIT(10)         /* L2 global invalidate */
                    252: #define L2CR_L2CTL     BIT(11)         /* L2 RAM control (ZZ enable, low-power mode) */
                    253: #define L2CR_L2WT      BIT(12)         /* L2 write-through */
                    254: #define L2CR_L2TS      BIT(13)         /* L2 test support */
                    255: #define L2CR_L2OH_05   0               /* L2 output hold 0.5 nS */
                    256: #define L2CR_L2OH_10   BIT(15)         /* L2 output hold 1.0 nS */
                    257: #define L2CR_L2SL      BIT(16)         /* L2 DLL slow (use if bus freq < 150 MHz) */
                    258: #define L2CR_L2DF      BIT(17)         /* L2 differential clock */
                    259: #define L2CR_L2BYP     BIT(18)         /* L2 DLL bypass */
                    260: #define L2CR_L2IP      BIT(31)         /* L2 global invalidate in progress */
                    261: 
                    262: /* SPR_THRM1 */
                    263: #define THRM1_TIN      (1 << 31)
                    264: #define THRM1_TIV      (1 << 30)
                    265: #define THRM1_THRES(x) ((x&0x7f)<<23)
                    266: #define THRM3_SITV(x)  ((x&0x3fff)<<1)
                    267: #define THRM1_TID      (1<<2)
                    268: #define THRM1_TIE      (1<<1)
                    269: #define THRM1_V                (1<<0)
                    270: 
                    271: /* SPR_THRM3 */
                    272: #define THRM3_E                (1<<0)
                    273: 
                    274: /* Processor Version Numbers */
                    275: 
                    276: #define        PVR_VER(pvr)  (((pvr) >>  16) & 0xFFFF) /* Version field */
                    277: #define        PVR_REV(pvr)  (((pvr) >>   0) & 0xFFFF) /* Revison field */
                    278: 
                    279: #define        PVR_403GA       0x00200000
                    280: #define        PVR_403GB       0x00200100
                    281: #define        PVR_403GC       0x00200200
                    282: #define        PVR_403GCX      0x00201400
                    283: #define        PVR_405GP       0x40110000
                    284: #define        PVR_601         0x00010000
                    285: #define        PVR_602         0x00050000
                    286: #define        PVR_603         0x00030000
                    287: #define        PVR_603e        0x00060000
                    288: #define        PVR_603ev       0x00070000
                    289: #define        PVR_603r        0x00071000
                    290: #define        PVR_604         0x00040000
                    291: #define        PVR_604e        0x00090000
                    292: #define        PVR_604r        0x000A0000
                    293: #define        PVR_620         0x00140000
                    294: #define        PVR_740         0x00080000
                    295: #define        PVR_750         PVR_740
                    296: #define        PVR_740P        0x10080000
                    297: #define        PVR_750P        PVR_740P
                    298: #define        PVR_821         0x00500000
                    299: #define        PVR_823         PVR_821
                    300: #define        PVR_850         PVR_821
                    301: #define        PVR_860         PVR_821
                    302: #define        PVR_7400        0x000C0000
                    303: #define        PVR_8240        0x00810100
                    304: #define        PVR_8260        PVR_8240
                    305: 
                    306: /* Vector VSCR register */
                    307: #define VSCR_NJ        0x10000
                    308: #define VSCR_SAT 0x1
                    309: 
                    310: #endif /* __KERNEL__ */
                    311: 
                    312: 
                    313: #ifdef __ASSEMBLY__
                    314: 
                    315: #define        CTR     S_CTR           /* Counter Register */
                    316: #define        DAR     S_DAR           /* Data Address Register */
                    317: #define        DABR    S_DABR          /* Data Address Breakpoint Register */
                    318: #define        DBAT0L  S_DBAT0L        /* Data BAT 0 Lower Register */
                    319: #define        DBAT0U  S_DBAT0U        /* Data BAT 0 Upper Register */
                    320: #define        DBAT1L  S_DBAT1L        /* Data BAT 1 Lower Register */
                    321: #define        DBAT1U  S_DBAT1U        /* Data BAT 1 Upper Register */
                    322: #define        DBAT2L  S_DBAT2L        /* Data BAT 2 Lower Register */
                    323: #define        DBAT2U  S_DBAT2U        /* Data BAT 2 Upper Register */
                    324: #define        DBAT3L  S_DBAT3L        /* Data BAT 3 Lower Register */
                    325: #define        DBAT3U  S_DBAT3U        /* Data BAT 3 Upper Register */
                    326: #define        DCMP    S_DCMP          /* Data TLB Compare Register */
                    327: #define        DEC     S_DEC           /* Decrement Register */
                    328: #define        DMISS   S_DMISS         /* Data TLB Miss Register */
                    329: #define        DSISR   S_DSISR         /* Data Storage Interrupt Status Register */
                    330: #define        EAR     S_EAR           /* External Address Register */
                    331: #define        HASH1   S_HASH1         /* Primary Hash Address Register */
                    332: #define        HASH2   S_HASH2         /* Secondary Hash Address Register */
                    333: #define        HID0    S_HID0          /* Hardware Implementation Register 0 */
                    334: #define        HID1    S_HID1  /* Hardware Implementation Register 1 */
                    335: #define        IABR    S_IABR          /* Instruction Address Breakpoint Register */
                    336: #define        IBAT0L  S_IBAT0L        /* Instruction BAT 0 Lower Register */
                    337: #define        IBAT0U  S_IBAT0U        /* Instruction BAT 0 Upper Register */
                    338: #define        IBAT1L  S_IBAT1L        /* Instruction BAT 1 Lower Register */
                    339: #define        IBAT1U  S_IBAT1U        /* Instruction BAT 1 Upper Register */
                    340: #define        IBAT2L  S_IBAT2L        /* Instruction BAT 2 Lower Register */
                    341: #define        IBAT2U  S_IBAT2U        /* Instruction BAT 2 Upper Register */
                    342: #define        IBAT3L  S_IBAT3L        /* Instruction BAT 3 Lower Register */
                    343: #define        IBAT3U  S_IBAT3U        /* Instruction BAT 3 Upper Register */
                    344: #define        ICMP    S_ICMP  /* Instruction TLB Compare Register */
                    345: #define        IMISS   S_IMISS /* Instruction TLB Miss Register */
                    346: #define        IMMR    S_IMMR          /* PPC 860/821 Internal Memory Map Register */
                    347: #define        L2CR    S_L2CR          /* PPC 750 L2 control register */
                    348: #define        PVR     S_PVR   /* Processor Version */
                    349: #define        RPA     S_RPA   /* Required Physical Address Register */
                    350: #define        SDR1    S_SDR1          /* MMU hash base register */
                    351: #define        SPR0    S_SPRG0 /* Supervisor Private Registers */
                    352: #define        SPR1    S_SPRG1
                    353: #define        SPR2    S_SPRG2
                    354: #define        SPR3    S_SPRG3
                    355: #define        SPRG0   S_SPRG0
                    356: #define        SPRG1   S_SPRG1
                    357: #define        SPRG2   S_SPRG2
                    358: #define        SPRG3   S_SPRG3
                    359: #define        SRR0    S_SRR0          /* Save and Restore Register 0 */
                    360: #define        SRR1    S_SRR1          /* Save and Restore Register 1 */
                    361: #define        TBRL    S_STBRL         /* Time Base Read Lower Register */
                    362: #define        TBRU    S_TBRU          /* Time Base Read Upper Register */
                    363: #define        TBWL    S_TBWL          /* Time Base Write Lower Register */
                    364: #define        TBWU    S_TBWU          /* Time Base Write Upper Register */
                    365: #define ICTC   S_ICTC
                    366: #define        THRM1   S_THRM1         /* Thermal Management Register 1 */
                    367: #define        THRM2   S_THRM2         /* Thermal Management Register 2 */
                    368: #define        THRM3   S_THRM3         /* Thermal Management Register 3 */
                    369: #define SIAR   S_SIAR
                    370: #define SDAR   S_SDAR
                    371: #define        XER     1
                    372: 
                    373: #define        SR0     0               /* Segment registers */
                    374: #define        SR1     1
                    375: #define        SR2     2
                    376: #define        SR3     3
                    377: #define        SR4     4
                    378: #define        SR5     5
                    379: #define        SR6     6
                    380: #define        SR7     7
                    381: #define        SR8     8
                    382: #define        SR9     9
                    383: #define        SR10    10
                    384: #define        SR11    11
                    385: #define        SR12    12
                    386: #define        SR13    13
                    387: #define        SR14    14
                    388: #define        SR15    15
                    389: 
                    390: #endif /* __ASSEMBLY__ */
                    391: 
                    392: /* opcode macros */
                    393: 
                    394: #define OPCODE_PRIM(n)         ( ((unsigned long)(n)) >> 26 )
                    395: #define OPCODE_EXT(n)          ( (((unsigned long)(n)) >> 1) & 0x3ff )
                    396: #define OPCODE(op,op_ext)      ( ((op)<<10) + op_ext )
                    397: 
                    398: #define        B1(n)                   ( (((unsigned long)(n)) >> 21) & 0x1f )
                    399: #define        B2(n)                   ( (((unsigned long)(n)) >> 16) & 0x1f )
                    400: #define        B3(n)                   ( (((unsigned long)(n)) >> 11) & 0x1f )
                    401: 
                    402: #define BD(n)  ((unsigned long)((n) & 0x7fff) + (((n) & 0x8000) ? (unsigned long)0xffff8000 : 0))
                    403: 
                    404: #define SPRNUM_FLIP( v )       ( (((v)>>5) & 0x1f) | (((v)<<5) & 0x3e0) )
                    405: 
                    406: /* C helpers */
                    407: 
                    408: #ifndef __ASSEMBLER__
                    409: 
                    410: #define __stringify_1(x)       #x
                    411: #define __stringify(x)         __stringify_1(x)
                    412: #define mtspr(rn, v)           asm volatile("mtspr " __stringify(rn) ",%0" : : "r" (v))
                    413: 
                    414: static inline unsigned long mfmsr(void)
                    415: {
                    416:     unsigned long msr;
                    417:     asm volatile("mfmsr %0" : "=r" (msr));
                    418:     return msr;
                    419: }
                    420: 
                    421: static inline void mtmsr(unsigned long msr)
                    422: {
                    423: #ifdef __powerpc64__
                    424:     asm volatile("mtmsrd %0" :: "r" (msr));
                    425: #else
                    426:     asm volatile("mtmsr  %0" :: "r" (msr));
                    427: #endif
                    428: }
                    429: 
                    430: #ifdef __powerpc64__
                    431: #define SDR1_HTABORG_MASK 0x3FFFFFFFFFFC0000UL
                    432: #else
                    433: #define SDR1_HTABORG_MASK 0xffff0000
                    434: #endif
                    435: 
                    436: static inline unsigned long mfsdr1(void)
                    437: {
                    438:     unsigned long sdr1;
                    439:     asm volatile("mfsdr1 %0" : "=r" (sdr1));
                    440:     return sdr1;
                    441: }
                    442: 
                    443: static inline void mtsdr1(unsigned long sdr1)
                    444: {
                    445:     asm volatile("mtsdr1 %0" :: "r" (sdr1));
                    446: }
                    447: 
                    448: static inline unsigned int mfpvr(void)
                    449: {
                    450:     unsigned int pvr;
                    451:     asm volatile("mfspr %0, 0x11f" : "=r" (pvr) );
                    452:     return pvr;
                    453: }
                    454: 
                    455: static inline void slbia(void)
                    456: {
                    457:     asm volatile("slbia" ::: "memory");
                    458: }
                    459: 
                    460: static inline void slbmte(unsigned long rs, unsigned long rb)
                    461: {
                    462:     asm volatile("slbmte %0,%1 ; isync" :: "r" (rs), "r" (rb) : "memory");
                    463: }
                    464: 
                    465: #endif /* !__ASSEMBLER__ */
                    466: 
                    467: #endif   /* _H_PROCESSOR */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.