Software Drivers

scugic v2_1

The generic interrupt controller driver component.

The interrupt controller driver uses the idea of priority for the various handlers. Priority is an integer within the range of 1 and 31 inclusive with default of 1 being the highest priority interrupt source. The priorities of the various sources can be dynamically altered as needed through hardware configuration.

The generic interrupt controller supports the following features:

Details about connecting the interrupt handler of the driver are contained in the source file specific to interrupt processing, xscugic_intr.c.

This driver is intended to be RTOS and processor independent. It works with physical addresses only. Any needs for dynamic memory management, threads or thread mutual exclusion, virtual memory, or cache control must be satisfied by the layer above this driver.

Interrupt Vector Tables

The device ID of the interrupt controller device is used by the driver as a direct index into the configuration data table. The user should populate the vector table with handlers and callbacks at run-time using the XScuGic_Connect() and XScuGic_Disconnect() functions.

Each vector table entry corresponds to a device that can generate an interrupt. Each entry contains an interrupt handler function and an argument to be passed to the handler when an interrupt occurs. The user must use XScuGic_Connect() when the interrupt handler takes an argument other than the base address.

Nested Interrupts Processing

Nested interrupts are not supported by this driver.

NOTE: The generic interrupt controller is not a part of the snoop control unit as indicated by the prefix "scu" in the name of the driver. It is an independent module in APU.

 MODIFICATION HISTORY:

 Ver   Who  Date     Changes
 ----- ---- -------- ---------------------------------------------------------
 1.00a drg  01/19/00 First release
 1.01a sdm  11/09/11 The XScuGic and XScuGic_Config structures have changed.
		      The HandlerTable (of type XScuGic_VectorTableEntry) is
		      moved to XScuGic_Config structure from XScuGic structure.

		      The "Config" entry in XScuGic structure is made as
		      pointer for better efficiency.

		      A new file named as xscugic_hw.c is now added. It is
		      to implement low level driver routines without using
		      any xscugic instance pointer. They are useful when the
		      user wants to use xscugic through device id or
		      base address. The driver routines provided are explained
		      below.
		      XScuGic_DeviceInitialize that takes device id as
		      argument and initializes the device (without calling
		      XScuGic_CfgInitialize).
		      XScuGic_DeviceInterruptHandler that takes device id
		      as argument and calls appropriate handlers from the
		      HandlerTable.
		      XScuGic_RegisterHandler that registers a new handler
		      by taking xscugic hardware base address as argument.
		      LookupConfigByBaseAddress is used to return the
		      corresponding config structure from XScuGic_ConfigTable
		      based on the scugic base address passed.
 1.02a sdm  12/20/11 Removed AckBeforeService from the XScuGic_Config
		      structure.
 1.03a srt  02/27/13 Moved Offset calculation macros from *.c and *_hw.c to
		      *_hw.h
		      Added APIs

 
Copyright @ 1995-2014 Xilinx, Inc. All rights reserved.