Annotation of XNU/iokit/Drivers/platform/drvAppleMPIC/AppleMPIC.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1998-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:  * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved.
                     24:  *
                     25:  *  DRI: Josh de Cesare
                     26:  *
                     27:  */
                     28: 
                     29: #ifndef _IOKIT_APPLEMPIC_H
                     30: #define _IOKIT_APPLEMPIC_H
                     31: 
                     32: #include <IOKit/IOInterrupts.h>
                     33: #include <IOKit/IOInterruptController.h>
                     34: 
                     35: // Offsets and strides to MPIC registers.
                     36: 
                     37: #define kFeatureOffset         (0x01000)
                     38: #define kGlobal0Offset         (0x01020)
                     39: #define kVendorIDOffset        (0x01080)
                     40: #define kProcInitOffset        (0x01090)
                     41: #define kIPInVecPriOffset      (0x010A0)
                     42: #define kIPInVecPriStride      (0x00010)
                     43: #define kSpurVectOffset        (0x010E0)
                     44: #define kTmrFreqOffset         (0x010F0)
                     45: #define kTnCurrCntOffset       (0x01100)
                     46: #define kTnBaseCntOffset       (0x01110)
                     47: #define kTnVecPriOffset        (0x01120)
                     48: #define kTnDestOffset          (0x01130)
                     49: #define kTnStride              (0x00040)
                     50: #define kIntnVecPriOffset      (0x10000)
                     51: #define kIntnDestOffset        (0x10010)
                     52: #define kIntnStride            (0x00020)
                     53: #define kPnIPImDispOffset      (0x20040)
                     54: #define kPnIPImDispStride      (0x00010)
                     55: #define kPnCurrTskPriOffset    (0x20080)
                     56: #define kPnIntAckOffset        (0x200A0)
                     57: #define kPnEOIOffset           (0x200B0)
                     58: #define kPnStride              (0x01000)
                     59: 
                     60: // Feature Reporting Register
                     61: #define kFRRVersionMask        (0x000000FF)
                     62: #define kFRRVersionShift       (0)
                     63: #define kFRRNumCPUMask         (0x00001F00)
                     64: #define kFRRNumCPUShift        (8)
                     65: #define kFRRNumIRQsMask        (0x07FF0000)
                     66: #define kFRRNumIRQsShift       (16)
                     67: 
                     68: // Global Configuration Register 0
                     69: #define kGCR0Reset             (0x80000000)
                     70: #define kGCR0Cascade           (0x20000000)
                     71: 
                     72: // Vendor ID Register
                     73: #define kVIDRVendorIDMask      (0x000000FF)
                     74: #define kVIDRVendorIDShift     (0)
                     75: #define kVIDRDeviceIDMask      (0x0000FF00)
                     76: #define kVIDRDeviceIDShift     (8)
                     77: 
                     78: // Spurious Vector
                     79: #define kSpuriousVectorNumber  (0xFF)
                     80: 
                     81: // Interrupt Source n Vector/Priority Registers
                     82: #define kIntnVPRMask           (0x80000000)
                     83: #define kIntnVPRActive         (0x40000000)
                     84: #define kIntnVPRSense          (0x00400000)
                     85: #define kIntnVPRPriorityMask   (0x000F0000)
                     86: #define kIntnVPRPriorityShift  (16)
                     87: #define kIntnVPRVectorMask     (0x000000FF)
                     88: #define kIntnVPRVectorShift    (0)
                     89: 
                     90: class AppleMPICInterruptController : public IOInterruptController
                     91: {
                     92:   OSDeclareDefaultStructors(AppleMPICInterruptController);
                     93:   
                     94: private:
                     95:   IOLogicalAddress       mpicBaseAddress;
                     96:   IOMemoryMap            *mpicMemoryMap;
                     97:   int                    numCPUs;
                     98:   int                    numVectors;
                     99:   OSSymbol               *interruptControllerName;
                    100:   IOService              *parentNub;
                    101:   long                   *senses;
                    102:   
                    103: public:
                    104:   virtual bool start(IOService *provider);
                    105:   
                    106:   virtual IOReturn getInterruptType(IOService *nub, int source,
                    107:                                    int *interruptType);
                    108:   
                    109:   virtual IOInterruptAction getInterruptHandlerAddress(void);
                    110:   virtual IOReturn handleInterrupt(void *refCon,
                    111:                                   IOService *nub, int source);
                    112:   
                    113:   virtual bool vectorCanBeShared(long vectorNumber, IOInterruptVector *vector);
                    114:   virtual void initVector(long vectorNumber, IOInterruptVector *vector);
                    115:   virtual void disableVectorHard(long vectorNumber, IOInterruptVector *vector);
                    116:   virtual void enableVector(long vectorNumber, IOInterruptVector *vector);
                    117: 
                    118:   virtual OSData *getIPIVector(long physCPU);
                    119:   virtual void   dispatchIPI(long source, long targetMask);
                    120: };
                    121: 
                    122: 
                    123: #endif /* ! _IOKIT_APPLEMPIC_H */

unix.superglobalmegacorp.com

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