1    /* 
     2     * Copyright (c) 2012, Texas Instruments Incorporated
     3     * All rights reserved.
     4     *
     5     * Redistribution and use in source and binary forms, with or without
     6     * modification, are permitted provided that the following conditions
     7     * are met:
     8     *
     9     * *  Redistributions of source code must retain the above copyright
    10     *    notice, this list of conditions and the following disclaimer.
    11     *
    12     * *  Redistributions in binary form must reproduce the above copyright
    13     *    notice, this list of conditions and the following disclaimer in the
    14     *    documentation and/or other materials provided with the distribution.
    15     *
    16     * *  Neither the name of Texas Instruments Incorporated nor the names of
    17     *    its contributors may be used to endorse or promote products derived
    18     *    from this software without specific prior written permission.
    19     *
    20     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    21     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    22     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    23     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    24     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    25     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    26     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    27     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    28     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    29     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    30     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    31     * */
    32    /*
    33     *  ======== Hwi.xdc ========
    34     *
    35     */
    36    package ti.sysbios.family.arm.tms570;
    37    
    38    import xdc.runtime.Diags;
    39    import xdc.runtime.Error;
    40    import xdc.runtime.Log;
    41    import xdc.rov.ViewInfo;
    42    
    43    /*!
    44     *  ======== Hwi ========
    45     *  Hardware Interrupt Support Module.
    46     *  
    47     *  This Hwi module provides TMS570 (VIM) specific implementations of the
    48     *  APIs defined in {@link ti.sysbios.interfaces.IHwi IHwi}.
    49     *
    50     *  Additional ARM device-specific APIs are also provided.
    51     *
    52     *  @a(NOTE)
    53     *  In this Hwi module implementation, the instance config parameter value
    54     *  {@link #MaskingOption_LOWER} is equivalent to {@link #MaskingOption_SELF}.
    55     *  Statically configuring a Hwi object's {@link #Params.maskSetting} to 
    56     *  {@link #MaskingOption_LOWER} will result in the generation of a benign
    57     *  build warning. Dynamic usages of {@link #MaskingOption_LOWER} will be
    58     *  silently converted to {@link #MaskingOption_SELF}.
    59     *
    60     *  @p(html)
    61     *  <h3> Calling Context </h3>
    62     *  <table border="1" cellpadding="3">
    63     *    <colgroup span="1"></colgroup> <colgroup span="5" align="center"></colgroup>
    64     *
    65     *    <tr><th> Function                 </th><th>  Hwi   </th><th>  Swi   </th><th>  Task  </th><th>  Main  </th><th>  Startup  </th></tr>
    66     *    <!--                                                                                                                 -->
    67     *    <tr><td> {@link #clearInterrupt}   </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    68     *    <tr><td> {@link #create}           </td><td>   N    </td><td>   N    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    69     *    <tr><td> {@link #disable}          </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    70     *    <tr><td> {@link #disableREQMASKSET0}     </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    71     *    <tr><td> {@link #disableREQMASKSET1}     </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    72     *    <tr><td> {@link #disableFIQ}       </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    73     *    <tr><td> {@link #disableInterrupt} </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    74     *    <tr><td> {@link #disableIRQ}       </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    75     *    <tr><td> {@link #enable}           </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td><td>   N    </td></tr>
    76     *    <tr><td> {@link #enableREQMASKSET0}      </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    77     *    <tr><td> {@link #enableREQMASKSET1}      </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    78     *    <tr><td> {@link #enableFIQ}        </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td><td>   N    </td></tr>
    79     *    <tr><td> {@link #enableInterrupt}  </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    80     *    <tr><td> {@link #enableIRQ}        </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td><td>   N    </td></tr>
    81     *    <tr><td> {@link #getHandle}      </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    82     *    <tr><td> {@link #Params_init}      </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    83     *    <tr><td> {@link #restore}          </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    84     *    <tr><td> {@link #restoreREQMASKSET0}     </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    85     *    <tr><td> {@link #restoreREQMASKSET1}     </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    86     *    <tr><td> {@link #restoreFIQ}       </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    87     *    <tr><td> {@link #restoreInterrupt} </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    88     *    <tr><td> {@link #restoreIRQ}       </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td></tr>
    89     *    <tr><td> {@link #setPriority}      </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    90     *    <tr><td> {@link #construct}        </td><td>   N    </td><td>   N    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    91     *    <tr><td> {@link #delete}           </td><td>   N    </td><td>   N    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    92     *    <tr><td> {@link #destruct}         </td><td>   N    </td><td>   N    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    93     *    <tr><td> {@link #getHookContext}   </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    94     *    <tr><td> {@link #reconfig}         </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    95     *    <tr><td> {@link #setFunc}          </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    96     *    <tr><td> {@link #setHookContext}   </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   Y    </td><td>   N    </td></tr>
    97     *    <tr><td colspan="6"> Definitions: <br />
    98     *       <ul>
    99     *         <li> <b>Hwi</b>: API is callable from a Hwi thread. </li>
   100     *         <li> <b>Swi</b>: API is callable from a Swi thread. </li>
   101     *         <li> <b>Task</b>: API is callable from a Task thread. </li>
   102     *         <li> <b>Main</b>: API is callable during any of these phases: </li>
   103     *           <ul>
   104     *             <li> In your module startup after this module is started (e.g. Hwi_Module_startupDone() returns TRUE). </li>
   105     *             <li> During xdc.runtime.Startup.lastFxns. </li>
   106     *             <li> During main().</li>
   107     *             <li> During BIOS.startupFxns.</li>
   108     *           </ul>
   109     *         <li> <b>Startup</b>: API is callable during any of these phases:</li>
   110     *           <ul>
   111     *             <li> During xdc.runtime.Startup.firstFxns.</li>
   112     *             <li> In your module startup before this module is started (e.g. Hwi_Module_startupDone() returns FALSE).</li>
   113     *           </ul>
   114     *       </ul>
   115     *    </td></tr>
   116     *
   117     *
   118     *  </table>
   119     *  @p
   120     */
   121    
   122    @Template("./Hwi.xdt")  /* generates the vector table and the dispatcher */
   123    @ModuleStartup          /* generates call to Hwi_Module_startup at startup */
   124    
   125    module Hwi inherits ti.sysbios.interfaces.IHwi
   126    {
   127    
   128        // -------- Module Constants --------
   129    
   130        /*! The TMS570 ARM Interrupt Controller supports 64 interrupts. */
   131        const Int NUM_INTERRUPTS = 64;
   132    
   133        // -------- Module Types --------
   134    
   135        /*! Hwi vector function type definition. */
   136        typedef Void (*VectorFuncPtr)(void);
   137    
   138        /*! @_nodoc Hwi plug function type definition. */
   139        typedef Void (*PlugFuncPtr)(void);
   140    
   141        /*! Interrupt type. IRQ or FIQ */
   142        enum Type {
   143            Type_IRQ,               /*! IRQ interrupt. */
   144            Type_FIQ                /*! FIQ interrupt. */
   145        };
   146    
   147        /*!
   148         * ARM Interrupt Controller. 
   149         */
   150        struct VIM {
   151            UInt32 PARFLG;          /*! 0xFDEC VIM RAM Parity Flag Register */
   152            UInt32 PARCTL;          /*! 0xFDF0 VIM RAM Parity Control Register */
   153            UInt32 ADDERR;          /*! 0xFDF4 Address Parity Error Register */
   154            UInt32 FBPARERR;        /*! 0xFDF8 Fallback Parity Error Register */
   155            UInt32 RESFC;           /*! 0xFDFC reserved */
   156    
   157            UInt32 IRQINDEX;        /*! 0x0000 current IRQ id */
   158            UInt32 FIQINDEX;        /*! 0x0004 current FIQ id */
   159            UInt32 RES08[2];        /*! 0x0008 reserved */
   160    
   161            UInt32 FIRQPR[4];       /*! 0x0010-0x001C FIQ/IRQ Program Control Registers */
   162            UInt32 INTREQ[4];       /*! 0x0020-0x002C Pending Interrupt Request Registers */
   163    
   164            UInt32 REQENASET[4];    /*! 0x0030-0x003C Interrupt (Enable) Mask Set Registers */
   165            UInt32 REQENACLR[4];    /*! 0x0040-0x004C Interrupt (Enable) Mask Clear Registers */
   166    
   167            UInt32 WAKEENASET[4];   /*! 0x0050-0x005C Wake Mask Set Registers */
   168            UInt32 WAKEENACLR[4];   /*! 0x0060-0x006C Wake Mask Clear Registers */
   169    
   170            UInt32 IRQVECREG;       /*! 0x0070 IRQ vector */
   171            UInt32 FIQVECREG;       /*! 0x0074 FIQ vector */
   172    
   173            UInt32 CAPEVT;          /*! 0x0078 Capture Event Register */
   174            UInt32 RES7C[1];        /*! 0x007C reserved */
   175    
   176            UInt8 CHANMAP[128];     /*! 0x0080-0x00FF Channel Map (Priority) Registers */
   177        };
   178    
   179        /*!
   180         * Physical Vectored Interrupt Manager (VIM) Device. 
   181         * Short name is "Hwi_vim" 
   182         * Long name is "ti_sysbios_family_arm_tms570_Hwi_vim" 
   183         */
   184        extern volatile VIM vim;
   185    
   186        /*! @_nodoc */
   187        metaonly struct BasicView {
   188            Ptr         halHwiHandle;
   189            String      label;
   190            Int         intNum;
   191            Int         priority;
   192            String      fxn; 
   193            UArg        arg; 
   194            Ptr         irp; 
   195            String      status;
   196        };
   197        
   198        /*! @_nodoc */
   199        metaonly struct ModuleView {
   200            String      options[4];
   201            SizeT       hwiStackPeak;
   202            SizeT       hwiStackSize;
   203            Ptr         hwiStackBase;
   204        };
   205    
   206        /*! @_nodoc */
   207        @Facet
   208        metaonly config ViewInfo.Instance rovViewInfo = 
   209            ViewInfo.create({
   210                viewMap: [
   211                    ['Basic', {type: ViewInfo.INSTANCE, viewInitFxn: 'viewInitBasic', structName: 'BasicView'}],
   212                    ['Module', {type: ViewInfo.MODULE, viewInitFxn: 'viewInitModule', structName: 'ModuleView'}]
   213                ]
   214            });
   215    
   216        // -------- Module Parameters --------
   217    
   218        /*! Reset Handler. Default is c_int00 */
   219        metaonly config VectorFuncPtr resetFunc;
   220    
   221        /*! Undefined instruction exception handler. Default is self loop */
   222        metaonly config VectorFuncPtr undefinedInstFunc;
   223    
   224        /*! SWI Handler. Default is internal SWI handler */
   225        metaonly config VectorFuncPtr swiFunc;
   226    
   227        /*! Prefetch abort exception handler. Default is self loop */
   228        metaonly config VectorFuncPtr prefetchAbortFunc;
   229    
   230        /*! Data abort exception handler. Default is self loop */
   231        metaonly config VectorFuncPtr dataAbortFunc;
   232    
   233        /*! Reserved exception handler. Default is self loop */
   234        metaonly config VectorFuncPtr reservedFunc;
   235    
   236        /*! IRQ interrupt handler. Default is internal IRQ dispatcher */
   237        metaonly config VectorFuncPtr irqFunc;
   238    
   239        /*! FIQ interrupt handler. Default is internal FIQ dispatcher */
   240        metaonly config VectorFuncPtr fiqFunc;
   241    
   242        /*! 
   243         *  FIQ stack pointer. Default = null.
   244         *  (Indicates that stack is to be created using
   245         *  staticPlace()
   246         */
   247        config Ptr fiqStack = null;
   248    
   249        /*! 
   250         *  FIQ stack size in MAUs.
   251         *  Default is 1024 bytes.
   252         */
   253        metaonly config SizeT fiqStackSize = 1024;
   254    
   255        /*! 
   256         *  Memory section used for FIQ stack
   257         *  Default is null.
   258         */
   259        metaonly config String fiqStackSection = null;
   260    
   261        /*!
   262         *  Error raised when Hwi is already defined
   263         */
   264        config Error.Id E_alreadyDefined = {
   265            msg: "E_alreadyDefined: Hwi already defined: intr# %d"
   266        };
   267    
   268        /*!
   269         *  Issued just prior to Hwi function invocation (with interrupts disabled)
   270         */
   271        config Log.Event LM_begin = {
   272            mask: Diags.USER1 | Diags.USER2,
   273            msg: "LM_begin: hwi: 0x%x, func: 0x%x, preThread: %d, intNum: %d, irp: 0x%x"
   274        };
   275    
   276        /*!
   277         *  Issued just after return from Hwi function (with interrupts disabled)
   278         */
   279        config Log.Event LD_end = {
   280            mask: Diags.USER2,
   281            msg: "LD_end: hwi: 0x%x"
   282        };
   283    
   284    
   285        // -------- Module Functions --------
   286    
   287        /*!
   288         *  ======== disable ========
   289         */
   290        @Macro
   291        override UInt disable();
   292    
   293        /*!
   294         *  ======== enable ========
   295         */
   296        @Macro
   297        override UInt enable();
   298    
   299        /*!
   300         *  ======== restore ========
   301         */
   302        @Macro
   303        override Void restore(UInt key);
   304    
   305        /*!
   306         *  ======== inUseMeta ========
   307         *  @_nodoc
   308         *  Check for Hwi already in use.
   309         *  For internal SYS/BIOS use only. 
   310         *  Should be called prior to any internal Hwi.create().
   311         *
   312         *  @param(intNum)  interrupt number
   313         */
   314        metaonly Bool inUseMeta(UInt intNum);
   315    
   316        /*!
   317         *  ======== getHandle ========
   318         *  Returns pointer to Hwi instance object.
   319         *
   320         *  @param(intNum)  interrupt number
   321         */
   322        @DirectCall
   323        Object *getHandle(UInt intNum);
   324    
   325        /*!
   326         *  ======== enableFIQ ========
   327         *  Enable FIQ interrupts.
   328         *
   329         *  @b(returns)     previous FIQ interrupt enable/disable state
   330         */
   331        @DirectCall
   332        UInt enableFIQ();
   333    
   334        /*!
   335         *  ======== disableFIQ ========
   336         *  Disable FIQ interrupts.
   337         *
   338         *  @b(returns)     previous FIQ interrupt enable/disable state
   339         */
   340        @DirectCall
   341        UInt disableFIQ();
   342    
   343        /*!
   344         *  ======== restoreFIQ ========
   345         *  Restore FIQ interrupts.
   346         *
   347         *  @param(key)     enable/disable state to restore
   348         */
   349        @DirectCall
   350        Void restoreFIQ(UInt key);
   351    
   352        /*!
   353         *  ======== enableIRQ ========
   354         *  Enable IRQ interrupts.
   355         *
   356         *  @param(key)     enable/disable state to restore
   357         */
   358        @DirectCall
   359        UInt enableIRQ();
   360    
   361        /*!
   362         *  ======== disableIRQ ========
   363         *  Disable IRQ interrupts.
   364         *
   365         *  @b(returns)     previous IRQ interrupt enable/disable state
   366         */
   367        @DirectCall
   368        UInt disableIRQ();
   369    
   370        /*!
   371         *  ======== restoreIRQ ========
   372         *  Restore IRQ interrupts.
   373         *
   374         *  @param(key)     enable/disable state to restore
   375         */
   376        @DirectCall
   377        Void restoreIRQ(UInt key);
   378    
   379        /*!
   380         *  ======== setPriority ========
   381         *  Set an interrupt's relative priority.
   382         *
   383         *  @param(intNum)      ID of interrupt
   384         *  @param(priority)    priority (0-63)
   385         */
   386        @DirectCall
   387        Void setPriority(UInt intNum, UInt priority);
   388    
   389        /*!
   390         *  ======== setType ========
   391         *  Set an interrupt's type (FIQ/IRQ).
   392         *
   393         *  Not an instance function so that it can be used
   394         *  with non-dispatched interrupts.
   395         *
   396         *  @param(intNum)      ID of interrupt
   397         *  @param(type)        type = FIQ/IRQ
   398         */
   399        @DirectCall
   400        Void setType(UInt intNum, Type type);
   401    
   402    instance:
   403    
   404        /*! disableMask0. default is derived from MaskingOption_SELF maskSetting. */
   405        config Bits32 disableMask0 = 0;
   406    
   407        /*! disableMask1. default is derived from MaskingOption_SELF maskSetting. */
   408        config Bits32 disableMask1 = 0;
   409    
   410        /*! restoreMask0. default is derived from MaskingOption_SELF maskSetting. */
   411        config Bits32 restoreMask0 = 0;
   412    
   413        /*! restoreMask1. default is derived from MaskingOption_SELF maskSetting. */
   414        config Bits32 restoreMask1 = 0;
   415    
   416        /*! wakeEnable. default is true. */
   417        config Bool wakeEnable = true;
   418    
   419        /*! Interrupt type (IRQ/FIQ. Default is IRQ. */
   420        config Type type = Type_IRQ;
   421    
   422        /*!
   423         *  ======== reconfig ========
   424         *  Reconfigure a dispatched interrupt.
   425         */
   426        @DirectCall
   427        Void reconfig(FuncPtr fxn, const Params *params);
   428    
   429    internal:   /* not for client use */
   430    
   431        /* 
   432         * Swi and Task module function pointers. 
   433         * Used to decouple Hwi from Swi and Task when 
   434         * dispatcherSwiSupport or
   435         * dispatcherTaskSupport is false.
   436         */
   437        config UInt (*swiDisable)();
   438        config Void (*swiRestoreHwi)(UInt);
   439        config UInt (*taskDisable)();
   440        config Void (*taskRestoreHwi)(UInt);
   441    
   442        /* assembly code mode registers setup */
   443        Void init();
   444    
   445        /* Interrupt Dispatcher assembly code wrapper */
   446        Void dispatchIRQ();
   447    
   448        /* IRQ Interrupt Dispatcher */
   449        Void dispatchIRQC(Irp irp);
   450    
   451        /* default FIQ Interrupt Dispatcher */
   452        Void dispatchFIQC();
   453    
   454        /*!
   455         *  ======== plug ========
   456         *  Plug an interrupt vector with an ISR address.
   457         *
   458         *  @param(intNum)  interrupt number
   459         *  @param(fxn)     pointer to ISR function
   460         */
   461        Void plug(UInt intNum, PlugFuncPtr fxn);
   462    
   463        /*!
   464         *  const array to hold all HookSet objects.
   465         */
   466        config HookSet hooks[length] = [];
   467    
   468        /*! Meta World Only Hwi Configuration Object. */
   469        metaonly struct InterruptObj {
   470            Bool used;              /* Interrupt already defined? */
   471            Bool useDispatcher;     /* Should dispatcher handle this Int? */
   472            FuncPtr fxn;            /* Dispatched ISR function */
   473        };
   474    
   475        /*!
   476         * Meta-only array of interrupt objects.
   477         * This meta-only array of Hwi config objects is initialized
   478         * in Hwi.xs:module$meta$init().
   479         */
   480        metaonly config InterruptObj interrupt[NUM_INTERRUPTS];
   481    
   482        struct Instance_State {
   483            Type        type;           // Interrupt Type
   484            UInt        priority;       // Interrupt Priority
   485            Bits32      disableMask0;   // REQENASET0 disable mask
   486            Bits32      disableMask1;   // REQENASET1 disable mask
   487            Bits32      restoreMask0;   // REQENASET0 restore mask
   488            Bits32      restoreMask1;   // REQENASET1 restore mask
   489            UArg        arg;            // Argument to Hwi function.
   490            FuncPtr     fxn;            // Hwi function.
   491            Int         intNum;         // Interrupt number
   492            Irp         irp;            // current IRP
   493            Ptr         hookEnv[];
   494        };
   495     
   496        struct Module_State {
   497            VIM         *vim;
   498            Bits32      req0Mask;       // Initial REQENASET0 mask
   499            Bits32      req1Mask;       // Initial REQENASET1 mask
   500            UInt        irp;            // temporary irp storage for IRQ handler
   501            Char        *taskSP;        // temporary storage of interrupted
   502                                        // Task's SP during ISR execution
   503    
   504            /* ROM */
   505            Char        *isrStack;      // Points to isrStack address
   506            Ptr         isrStackBase;   // _stack
   507            Ptr         isrStackSize;   // _STACK_SIZE
   508            Char        fiqStack[];     // buffer used for FIQ stack
   509            SizeT       fiqStackSize;
   510            UInt        *vimRam;        // VIM RAM
   511            Handle      dispatchTable[NUM_INTERRUPTS]; 
   512                                        // dispatch table
   513        };
   514    }
   515    
   516    /*
   517     *  @(#) ti.sysbios.family.arm.tms570; 2, 0, 0, 0,285; 2-24-2012 11:39:44; /db/vtree/library/trees/avala/avala-q28x/src/ xlibrary
   518    
   519     */
   520