Annotation of XNU/osfmk/ppc/exception.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * @OSF_COPYRIGHT@
                     24:  */
                     25: 
                     26: /* Miscellaneous constants and structures used by the exception
                     27:  * handlers
                     28:  */
                     29: 
                     30: #ifndef _PPC_EXCEPTION_H_
                     31: #define _PPC_EXCEPTION_H_
                     32: 
                     33: #ifndef ASSEMBLER
                     34: 
                     35: #include <cpus.h>
                     36: #include <mach_kdb.h>
                     37: #include <mach_kdp.h>
                     38: 
                     39: #include <mach/machine/vm_types.h>
                     40: #include <mach/boolean.h>
                     41: #include <pexpert/pexpert.h>
                     42: #include <IOKit/IOInterrupts.h>
                     43: 
                     44: /* When an exception is taken, this info is accessed via sprg0 */
                     45: /* We should always have this one on a cache line boundary */
                     46: struct per_proc_info {
                     47:        unsigned short  cpu_number;
                     48:        unsigned short  cpu_flags;                      /* Various low-level flags */
                     49:        vm_offset_t     istackptr;
                     50:        vm_offset_t     intstack_top_ss;
                     51: 
                     52: #if    MACH_KDP || MACH_KDB
                     53:        vm_offset_t     debstackptr;
                     54:        vm_offset_t     debstack_top_ss;
                     55: #else
                     56:        unsigned int    ppigas1[2];     /* Take up some space if no KDP or KDB */
                     57: #endif
                     58: 
                     59:        unsigned int    tempwork1;                      /* Temp work area - monitor use carefully */
                     60:        unsigned int    CPUflags;                       /* Temporary CPU flags */
                     61:        unsigned int    userspace;                      /* Last loaded user memory space ID  */
                     62: 
                     63:        /* PPC cache line boundary here - 020 */
                     64: 
                     65:        unsigned int    save_exception_type;
                     66:        unsigned int    phys_exception_handlers;
                     67:        unsigned int    virt_per_proc_info;     /* virt addr for our CPU */
                     68:        unsigned int    active_kloaded;         /* pointer to active_kloaded[CPU_NO] */
                     69:        unsigned int    cpu_data;                       /* pointer to cpu_data[CPU_NO] */
                     70:        unsigned int    active_stacks;          /* pointer to active_stacks[CPU_NO] */
                     71:        unsigned int    need_ast;                       /* pointer to need_ast[CPU_NO] */
                     72:        unsigned int    FPU_thread;                     /* Thread owning the FPU on this cpu */
                     73: 
                     74:        /* PPC cache line boundary here - 040 */
                     75:        unsigned int    VMX_thread;                     /* Thread owning the VMX on this cpu */
                     76:        unsigned int    quickfret;                      /* Pointer to savearea for exception exit to free */
                     77:        unsigned int    BlueBoxDesc;            /* Pointer to Blue Box description area */
                     78:        unsigned int    LastSpace;                      /* Last user space loaded into segment registers */
                     79:        unsigned int    Uassist;                        /* User Assist Word */
                     80:        unsigned int    liveVRSave;                     /* VRSave assiciated with live vector registers */
                     81:        unsigned int    spcFlags;                       /* Special thread flags */
                     82:        unsigned int    ppigas2;
                     83: 
                     84:        /* PPC cache line boundary here - 060 */
                     85:        boolean_t               (*set_interrupts_enabled)(boolean_t);
                     86:        boolean_t               (*get_interrupts_enabled)(void);
                     87:        IOInterruptHandler      interrupt_handler;
                     88:        void *                  interrupt_nub;
                     89:        unsigned int    interrupt_source;
                     90:        void *                  interrupt_target;
                     91:        void *                  interrupt_refCon;
                     92:        unsigned int    ppigas3;
                     93: 
                     94:        /* PPC cache line boundary here - 080 */
                     95:        unsigned int    MPsigpStat;                     /* Signal Processor status (interlocked update for this one) */
                     96: #define MPsigpMsgp             0xC0000000              /* Message pending (busy + pass) */
                     97: #define MPsigpBusy             0x80000000              /* Processor area busy, i.e., locked */
                     98: #define MPsigpPass             0x40000000              /* Busy lock passed to receiving processor */
                     99: #define MPsigpSrc              0x000000FF              /* Processor that owns busy, i.e., the ID of */
                    100:                                                                                /*   whomever set busy. When a busy is passed, */
                    101:                                                                                /*   this is the requestor of the function. */
                    102: #define MPsigpFunc             0x0000FF00              /* Current function */
                    103: #define MPsigpIdle             0x00                    /* No function pending */
                    104: #define MPsigpSigp             0x04                    /* Signal a processor */
                    105: #define SIGPast                0                                       /* Requests an ast on target processor */
                    106: #define SIGPdebug      2                                       /* Requests a debugger entry */
                    107: #define SIGPwake       3                                       /* Wake up a sleeping processor */
                    108:        unsigned int    MPsigpParm0;            /* SIGP parm 0 */
                    109:        unsigned int    MPsigpParm1;            /* SIGP parm 1 */
                    110:        unsigned int    MPsigpParm2;            /* SIGP parm 2 */
                    111:        cpu_id_t                cpu_id;
                    112:        vm_offset_t             start_paddr;
                    113:        unsigned int    ppigas4[2];
                    114: 
                    115:        /* PPC cache line boundary here - 0A0 */
                    116:        double                  emfp0;                          /* Copies of floating point registers */
                    117:        double                  emfp1;                          /* Used for emulation purposes */
                    118:        double                  emfp2;
                    119:        double                  emfp3;
                    120: 
                    121:        double                  emfp4;                          
                    122:        double                  emfp5;
                    123:        double                  emfp6;
                    124:        double                  emfp7;
                    125: 
                    126:        double                  emfp8;
                    127:        double                  emfp9;
                    128:        double                  emfp10;
                    129:        double                  emfp11;
                    130:        
                    131:        double                  emfp12;
                    132:        double                  emfp13;
                    133:        double                  emfp14;
                    134:        double                  emfp15;
                    135:        
                    136:        double                  emfp16;
                    137:        double                  emfp17;
                    138:        double                  emfp18;
                    139:        double                  emfp19;
                    140: 
                    141:        double                  emfp20;
                    142:        double                  emfp21;
                    143:        double                  emfp22;
                    144:        double                  emfp23;
                    145:        
                    146:        double                  emfp24;
                    147:        double                  emfp25;
                    148:        double                  emfp26;
                    149:        double                  emfp27;
                    150:        
                    151:        double                  emfp28;
                    152:        double                  emfp29;
                    153:        double                  emfp30;
                    154:        double                  emfp31;
                    155: 
                    156: /*                                                                - 1A0 */
                    157:        unsigned int    emfpscr_pad;
                    158:        unsigned int    emfpscr;
                    159:        unsigned int    empadfp[6];
                    160:        
                    161: /*                                                                - 1C0 */
                    162:        unsigned int    emvr0[4];                       /* Copies of vector registers used both */
                    163:        unsigned int    emvr1[4];                       /* for full vector emulation or */
                    164:        unsigned int    emvr2[4];                       /* as saveareas while assisting denorms */
                    165:        unsigned int    emvr3[4];
                    166:        unsigned int    emvr4[4];
                    167:        unsigned int    emvr5[4];
                    168:        unsigned int    emvr6[4];
                    169:        unsigned int    emvr7[4];
                    170:        unsigned int    emvr8[4];
                    171:        unsigned int    emvr9[4];
                    172:        unsigned int    emvr10[4];
                    173:        unsigned int    emvr11[4];
                    174:        unsigned int    emvr12[4];
                    175:        unsigned int    emvr13[4];
                    176:        unsigned int    emvr14[4];
                    177:        unsigned int    emvr15[4];
                    178:        unsigned int    emvr16[4];
                    179:        unsigned int    emvr17[4];
                    180:        unsigned int    emvr18[4];
                    181:        unsigned int    emvr19[4];
                    182:        unsigned int    emvr20[4];
                    183:        unsigned int    emvr21[4];
                    184:        unsigned int    emvr22[4];
                    185:        unsigned int    emvr23[4];
                    186:        unsigned int    emvr24[4];
                    187:        unsigned int    emvr25[4];
                    188:        unsigned int    emvr26[4];
                    189:        unsigned int    emvr27[4];
                    190:        unsigned int    emvr28[4];
                    191:        unsigned int    emvr29[4];
                    192:        unsigned int    emvr30[4];
                    193:        unsigned int    emvr31[4];
                    194:        unsigned int    emvscr[4];                      
                    195:        unsigned int    empadvr[4];                     
                    196: /*                                                                - 3E0 */
                    197: 
                    198: };
                    199: 
                    200: 
                    201: extern struct per_proc_info *per_proc_info;
                    202: /*     extern struct per_proc_info per_proc_info[NCPUS]; */
                    203: 
                    204: typedef struct savearea {
                    205: 
                    206: /*     The following area corresponds to ppc_saved_state and ppc_thread_state */
                    207: 
                    208: /*                                                                             offset 0x0000 */
                    209:        unsigned int    save_srr0;
                    210:        unsigned int    save_srr1;
                    211:        unsigned int    save_r0;
                    212:        unsigned int    save_r1;
                    213:        unsigned int    save_r2;
                    214:        unsigned int    save_r3;
                    215:        unsigned int    save_r4;
                    216:        unsigned int    save_r5;
                    217: 
                    218:        unsigned int    save_r6;
                    219:        unsigned int    save_r7;
                    220:        unsigned int    save_r8;
                    221:        unsigned int    save_r9;
                    222:        unsigned int    save_r10;
                    223:        unsigned int    save_r11;
                    224:        unsigned int    save_r12;
                    225:        unsigned int    save_r13;
                    226: 
                    227:        unsigned int    save_r14;
                    228:        unsigned int    save_r15;
                    229:        unsigned int    save_r16;
                    230:        unsigned int    save_r17;
                    231:        unsigned int    save_r18;
                    232:        unsigned int    save_r19;
                    233:        unsigned int    save_r20;
                    234:        unsigned int    save_r21;
                    235: 
                    236:        unsigned int    save_r22;
                    237:        unsigned int    save_r23;
                    238:        unsigned int    save_r24;
                    239:        unsigned int    save_r25;
                    240:        unsigned int    save_r26;       
                    241:        unsigned int    save_r27;
                    242:        unsigned int    save_r28;
                    243:        unsigned int    save_r29;
                    244: 
                    245:        unsigned int    save_r30;
                    246:        unsigned int    save_r31;
                    247:        unsigned int    save_cr;                
                    248:        unsigned int    save_xer;
                    249:        unsigned int    save_lr;
                    250:        unsigned int    save_ctr;
                    251:        unsigned int    save_mq;                                
                    252:        unsigned int    save_vrsave;
                    253:        
                    254:        unsigned int    save_sr_copyin;
                    255:        unsigned int    save_space;
                    256:        unsigned int    save_pad2[6];
                    257: 
                    258: 
                    259: /*     The following corresponds to ppc_exception_state */
                    260: 
                    261: /*                                                                             offset 0x00C0 */
                    262:        unsigned int    save_dar;
                    263:        unsigned int    save_dsisr;
                    264:        unsigned int    save_exception;
                    265:        unsigned int    save_pad3[5];
                    266: 
                    267: /*     The following corresponds to ppc_float_state */
                    268: 
                    269: /*                                                                             offset 0x00E0 */
                    270:        double                  save_fp0;
                    271:        double                  save_fp1;
                    272:        double                  save_fp2;
                    273:        double                  save_fp3;
                    274: 
                    275:        double                  save_fp4;
                    276:        double                  save_fp5;
                    277:        double                  save_fp6;
                    278:        double                  save_fp7;
                    279: 
                    280:        double                  save_fp8;
                    281:        double                  save_fp9;
                    282:        double                  save_fp10;
                    283:        double                  save_fp11;
                    284:        
                    285:        double                  save_fp12;
                    286:        double                  save_fp13;
                    287:        double                  save_fp14;
                    288:        double                  save_fp15;
                    289:        
                    290:        double                  save_fp16;
                    291:        double                  save_fp17;
                    292:        double                  save_fp18;
                    293:        double                  save_fp19;
                    294: 
                    295:        double                  save_fp20;
                    296:        double                  save_fp21;
                    297:        double                  save_fp22;
                    298:        double                  save_fp23;
                    299:        
                    300:        double                  save_fp24;
                    301:        double                  save_fp25;
                    302:        double                  save_fp26;
                    303:        double                  save_fp27;
                    304:        
                    305:        double                  save_fp28;
                    306:        double                  save_fp29;
                    307:        double                  save_fp30;
                    308:        double                  save_fp31;
                    309: 
                    310:        unsigned int    save_fpscr_pad;
                    311:        unsigned int    save_fpscr;
                    312:        unsigned int    save_pad4[6];
                    313:        
                    314: /*     The following is the save area for the VMX registers */
                    315: 
                    316: /*                                                                             offset 0x0200 */
                    317:        unsigned int    save_vr0[4];
                    318:        unsigned int    save_vr1[4];
                    319:        unsigned int    save_vr2[4];
                    320:        unsigned int    save_vr3[4];
                    321:        unsigned int    save_vr4[4];
                    322:        unsigned int    save_vr5[4];
                    323:        unsigned int    save_vr6[4];
                    324:        unsigned int    save_vr7[4];
                    325:        unsigned int    save_vr8[4];
                    326:        unsigned int    save_vr9[4];
                    327:        unsigned int    save_vr10[4];
                    328:        unsigned int    save_vr11[4];
                    329:        unsigned int    save_vr12[4];
                    330:        unsigned int    save_vr13[4];
                    331:        unsigned int    save_vr14[4];
                    332:        unsigned int    save_vr15[4];
                    333:        unsigned int    save_vr16[4];
                    334:        unsigned int    save_vr17[4];
                    335:        unsigned int    save_vr18[4];
                    336:        unsigned int    save_vr19[4];
                    337:        unsigned int    save_vr20[4];
                    338:        unsigned int    save_vr21[4];
                    339:        unsigned int    save_vr22[4];
                    340:        unsigned int    save_vr23[4];
                    341:        unsigned int    save_vr24[4];
                    342:        unsigned int    save_vr25[4];
                    343:        unsigned int    save_vr26[4];
                    344:        unsigned int    save_vr27[4];
                    345:        unsigned int    save_vr28[4];
                    346:        unsigned int    save_vr29[4];
                    347:        unsigned int    save_vr30[4];
                    348:        unsigned int    save_vr31[4];
                    349:        unsigned int    save_vscr[4];                   /* Note that this is always valid if VMX has been used */
                    350:        unsigned int    save_pad5[4];                   /* Insures that vrvalid is on a cache line */
                    351:        unsigned int    save_vrvalid;                   /* VRs that have been saved */
                    352:        unsigned int    save_pad6[7];
                    353:        
                    354: /*     The following is the save area for the segment registers */
                    355: 
                    356: /*                                                                             offset 0x0440 */
                    357: 
                    358:        unsigned int    save_sr0;
                    359:        unsigned int    save_sr1;
                    360:        unsigned int    save_sr2;
                    361:        unsigned int    save_sr3;
                    362:        unsigned int    save_sr4;
                    363:        unsigned int    save_sr5;
                    364:        unsigned int    save_sr6;
                    365:        unsigned int    save_sr7;
                    366: 
                    367:        unsigned int    save_sr8;
                    368:        unsigned int    save_sr9;
                    369:        unsigned int    save_sr10;
                    370:        unsigned int    save_sr11;
                    371:        unsigned int    save_sr12;
                    372:        unsigned int    save_sr13;
                    373:        unsigned int    save_sr14;
                    374:        unsigned int    save_sr15;
                    375: 
                    376: 
                    377: 
                    378: /* The following are the control area for this save area */
                    379: 
                    380: /*                                                                             offset 0x0480 */
                    381: 
                    382:        struct savearea *save_prev;                             /* The address of the previous normal savearea */
                    383:        struct savearea *save_prev_float;               /* The address of the previous floating point savearea */
                    384:        struct savearea *save_prev_vector;              /* The address of the previous vector savearea */
                    385:        struct savearea *save_qfret;                    /* The "quick release" chain */
                    386:        struct savearea *save_phys;                             /* The physical address of this savearea */
                    387:        struct thread_activation        *save_act;      /* Pointer to the associated activation */
                    388:        unsigned int    save_flags;                             /* Various flags */
                    389: #define save_perm      0x80000000                              /* Permanent area, cannot be released */
                    390:        unsigned int    save_level_fp;                  /* Level that floating point state belongs to */
                    391:        unsigned int    save_level_vec;                 /* Level that vector state belongs to */
                    392: 
                    393: } savearea;
                    394: 
                    395: typedef struct savectl {                                       /* Savearea control */
                    396:        
                    397:        unsigned int    *sac_next;                              /* Points to next savearea page that has a free slot  - real */
                    398:        unsigned int    sac_vrswap;                             /* XOR mask to swap V to R or vice versa */
                    399:        unsigned int    sac_alloc;                              /* Bitmap of allocated slots */
                    400:        unsigned int    sac_flags;                              /* Various flags */
                    401: } savectl;
                    402: 
                    403: struct Saveanchor {
                    404:        unsigned int    savelock;                               /* Lock word for savearea manipulation */
                    405:        int                             savecount;                              /* The total number of save areas allocated */
                    406:        int                             saveinuse;                              /* Number of areas in use */
                    407:        int                             savemin;                                /* We abend if lower than this */
                    408:        int                             saveneghyst;                    /* The negative hysteresis value */
                    409:        int                             savetarget;                             /* The target point for free save areas */
                    410:        int                             saveposhyst;                    /* The positive hysteresis value */
                    411:        unsigned int    savefree;                               /* Anchor for the freelist queue */
                    412:                                                                                        /* Cache line (32-byte) boundary */
                    413:        int                             savextnd;                               /* Free list extention count */
                    414:        int                             saveneed;                               /* Number of savearea's needed.  So far, we assume we need 3 per activation */
                    415:        int                             savespare[6];                   /* Spare */
                    416: };
                    417: 
                    418: 
                    419: extern char *trap_type[];
                    420: 
                    421: #endif /* ndef ASSEMBLER */
                    422: 
                    423: #define sac_empty      0xC0000000                              /* Mask with all entries empty */
                    424: #define sac_cnt                2                                               /* Number of entries per page */
                    425: #define sac_busy       0x80000000                              /* This page is busy - used during initial allocation */
                    426: #define sac_perm       0x40000000                              /* Page permanently assigned */
                    427: 
                    428: #define SAVattach      0x80000000                              /* Savearea is attached to a thread */
                    429: #define SAVfpuvalid    0x40000000                              /* Savearea contains FPU context */
                    430: #define SAVvmxvalid    0x20000000                              /* Savearea contains VMX context */
                    431: #define SAVinuse       0xE0000000                              /* Save area is inuse */
                    432: #define SAVrststk      0x00010000                              /* Indicates that the current stack should be reset to empty */
                    433: #define SAVsyscall     0x00020000                              /* Indicates that the savearea is associated with a syscall */
                    434: #define SAVredrive     0x00040000                              /* Indicates that the low-level fault handler associated */
                    435:                                                                                        /* with this savearea should be redriven */
                    436: #define SIGPactive     0x8000
                    437: #define needSRload     0x4000
                    438: #define turnEEon       0x2000
                    439: #define T_VECTOR_SIZE  4                                       /* function pointer size */
                    440: #define InitialSaveMin         4                               /* The initial value for the minimum number of saveareas */
                    441: #define InitialNegHysteresis   5                       /* The number off from target before we adjust upwards */
                    442: #define InitialPosHysteresis   10                      /* The number off from target before we adjust downwards */
                    443: #define InitialSaveTarget      20                              /* The number of saveareas for an initial target */
                    444: #define        InitialSaveAreas        20                              /* The number of saveareas to allocate at boot */
                    445: #define        InitialSaveBloks        (InitialSaveAreas+sac_cnt-1)/sac_cnt    /* The number of savearea blocks to allocate at boot */
                    446: 
                    447: /* Hardware exceptions */
                    448: 
                    449: #define T_IN_VAIN                              (0x00 * T_VECTOR_SIZE)
                    450: #define T_RESET                                        (0x01 * T_VECTOR_SIZE)
                    451: #define T_MACHINE_CHECK                        (0x02 * T_VECTOR_SIZE)
                    452: #define T_DATA_ACCESS                  (0x03 * T_VECTOR_SIZE)
                    453: #define T_INSTRUCTION_ACCESS   (0x04 * T_VECTOR_SIZE)
                    454: #define T_INTERRUPT                            (0x05 * T_VECTOR_SIZE)
                    455: #define T_ALIGNMENT                            (0x06 * T_VECTOR_SIZE)
                    456: #define T_PROGRAM                              (0x07 * T_VECTOR_SIZE)
                    457: #define T_FP_UNAVAILABLE               (0x08 * T_VECTOR_SIZE)
                    458: #define T_DECREMENTER                  (0x09 * T_VECTOR_SIZE)
                    459: #define T_IO_ERROR                             (0x0a * T_VECTOR_SIZE)
                    460: #define T_RESERVED                             (0x0b * T_VECTOR_SIZE)
                    461: #define T_SYSTEM_CALL                  (0x0c * T_VECTOR_SIZE)
                    462: #define T_TRACE                                        (0x0d * T_VECTOR_SIZE)
                    463: #define T_FP_ASSIST                            (0x0e * T_VECTOR_SIZE)
                    464: #define T_PERF_MON                             (0x0f * T_VECTOR_SIZE)
                    465: #define T_VMX                                  (0x10 * T_VECTOR_SIZE)
                    466: #define T_INVALID_EXCP0                        (0x11 * T_VECTOR_SIZE)
                    467: #define T_INVALID_EXCP1                        (0x12 * T_VECTOR_SIZE)
                    468: #define T_INVALID_EXCP2                        (0x13 * T_VECTOR_SIZE)
                    469: #define T_INSTRUCTION_BKPT             (0x14 * T_VECTOR_SIZE)
                    470: #define T_SYSTEM_MANAGEMENT            (0x15 * T_VECTOR_SIZE)
                    471: #define T_ALTIVEC_ASSIST               (0x16 * T_VECTOR_SIZE)
                    472: #define T_INVALID_EXCP4                        (0x17 * T_VECTOR_SIZE)
                    473: #define T_INVALID_EXCP5                        (0x18 * T_VECTOR_SIZE)
                    474: #define T_INVALID_EXCP6                        (0x19 * T_VECTOR_SIZE)
                    475: #define T_INVALID_EXCP7                        (0x1A * T_VECTOR_SIZE)
                    476: #define T_INVALID_EXCP8                        (0x1B * T_VECTOR_SIZE)
                    477: #define T_INVALID_EXCP9                        (0x1C * T_VECTOR_SIZE)
                    478: #define T_INVALID_EXCP10               (0x1D * T_VECTOR_SIZE)
                    479: #define T_INVALID_EXCP11               (0x1E * T_VECTOR_SIZE)
                    480: #define T_INVALID_EXCP12               (0x1F * T_VECTOR_SIZE)
                    481: #define T_INVALID_EXCP13               (0x20 * T_VECTOR_SIZE)
                    482: 
                    483: #define T_RUNMODE_TRACE                        (0x21 * T_VECTOR_SIZE) /* 601 only */
                    484: 
                    485: #define T_SIGP                                 (0x22 * T_VECTOR_SIZE)
                    486: #define T_PREEMPT                              (0x23 * T_VECTOR_SIZE)
                    487: #define T_CSWITCH                              (0x24 * T_VECTOR_SIZE)
                    488: 
                    489: #define T_AST                                  (0x100 * T_VECTOR_SIZE) 
                    490: #define T_MAX                                  T_CSWITCH                /* Maximum exception no */
                    491: 
                    492: #define        EXCEPTION_VECTOR(exception)     (exception * 0x100 /T_VECTOR_SIZE )
                    493: 
                    494: #ifndef ASSEMBLER
                    495: 
                    496: typedef struct resethandler {
                    497:        unsigned int    type;
                    498:        vm_offset_t     call_paddr;
                    499:        vm_offset_t     arg__paddr;
                    500: } resethandler_t;
                    501: 
                    502: extern resethandler_t ResetHandler;
                    503: 
                    504: #endif
                    505: 
                    506: #define        RESET_HANDLER_NULL      0x0
                    507: #define        RESET_HANDLER_START     0x1
                    508: 
                    509: #endif /* _PPC_EXCEPTION_H_ */

unix.superglobalmegacorp.com

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