Changes between Version 20 and Version 21 of kernel_interrupts


Ignore:
Timestamp:
Mar 27, 2015, 10:59:18 AM (9 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • kernel_interrupts

    v20 v21  
    3636|| EXT_IRQ_TER  || 3*NB_PROCS_MAX + lpid ||
    3737
     38 == __Global variables used for external IRQs routing__ ==
     39
     40 * unsigned char '''_ext_irq_index'''[GIET_ISR_TYPE_MAX][GIET_ISR_CHANNEL_MAX];
     41This array contains the external IRQ indexes (IOPIC input index) for each (isr/channel) couple.
     42This is an hardware feature defined in the mapping.
     43
     44 * unsigned char '''_wti_alloc_one'''[X_SIZE][Y_SIZE][NB_PROCS_MAX];
     45 * unsigned char '''_wti_alloc_two'''[X_SIZE][Y_SIZE][NB_PROCS_MAX];
     46 * unsigned char '''_wti_alloc_ter'''[X_SIZE][Y_SIZE][NB_PROCS_MAX];
     47These three arrays define the WTI allocators for each processor: non zero value when the entry has been allocated to a given external IRQ. This allocation is dynamically done by the kernel.
     48
     49
     50 == __Functions used for dynamic allocation of external IRQs__ ==
     51
     52 === void '''_ext_irq_init'''() ===
     53This function is only used when the architecture contains an external IOPIC component. It initializes the ''_ext_irq_index[isr][channel]'' kernel array. This array defines the IRQ index (i.e. the IOPIC input index) associated to an (isr_type / isr_channel) couple, as specified in the mapping. It is used by the kernel for dynamic routing of external IRQs.
     54
     55 === void '''_ext_irq_alloc( unsigned int isr_type , unsigned int isr_channel , unsigned int* wti_index ) ===
     56This function is used when the architecture contains an external IOPIC component. It dynamically allocates an external IRQ signaling completion of an I/O operation to the processor P[x,y,p] running the calling task. The two (isr_type / isr_channel) arguments define actually the external IRQ to be routed.
     57 * '''isr_type''' : type of ISR
     58 * '''isr_channel''' : ISR channel (for multi-channels peripherals)
     59 * '''wti_index''' : return value defining the index of the WTI mailbox allocated to P[x,y,p]
     60This function does three things:
     61 1. it allocates a WTI mailbox in the XCU of cluster[x,y] to the requesting processor ( index is in [4*p+1, 4*p+2, 4*p+3] ) ;
     62 2. it initialises the IOPIC entry associated to the (isr_type/isr_channel) IRQ.
     63 3. it initializes the proper entry in the WTI interrupt vector associated to processor P[x,y,p].
     64
     65 === void '''_ext_irq_release( unsigned int isr_type , unsigned int isr_channel , unsigned int wti_index ) ===
     66This function is used when the architecture contains an external IOPIC component. It desallocates the ressources allocated by the  previous _ext_irq_alloc() function to the calling processor. The two (isr_type, isr_channel) arguments define actually the external IRQ to be released.
     67 * '''isr_type''' : type of ISR
     68 * '''isr_channel''' : ISR channel (for multi-channels peripherals)
     69 * '''wti_index''' :  index of the WTI mailbox allocated to P[x,y,p] to be released.
     70This function does only two things:
     71 1.  it desactivates the PIC entry associated to the (isr_type/isr_channel) IRQ.
     72 2. it releases the WTI mailbox allocated to P[x,y,p].
     73 3. The WTI interrupt vector is NOT modified
     74
     75
    3876 == __Functions used for all HWI / PTI / WTI interrupts__ ==
    3977
     
    62100 === void '''_isr_default'''() ===
    63101This default ISR is called  when the interrupt handler is called, and there is no active IRQ. It simply displays a warning message on the kernel TTY[0].
    64 
    65  == __Functions used for dynamic allocation of external IRQs__ ==
    66 
    67  === void '''_ext_irq_init'''() ===
    68 This function is only used when the architecture contains an external IOPIC component. It initializes the ''_ext_irq_index[isr][channel]'' kernel array. This array defines the IRQ index (i.e. the IOPIC input index) associated to an (isr_type / isr_channel) couple, as specified in the mapping. It is used by the kernel for dynamic routing of external IRQs.
    69 
    70  === void '''_ext_irq_alloc( unsigned int isr_type , unsigned int isr_channel , unsigned int* wti_index ) ===
    71 This function is used when the architecture contains an external IOPIC component. It dynamically allocates an external IRQ signaling completion of an I/O operation to the processor P[x,y,p] running the calling task. The two (isr_type / isr_channel) arguments define actually the external IRQ to be routed.
    72  * '''isr_type''' : type of ISR
    73  * '''isr_channel''' : ISR channel (for multi-channels peripherals)
    74  * '''wti_index''' : return value defining the index of the WTI mailbox allocated to P[x,y,p]
    75 This function does three things:
    76  1. it allocates a WTI mailbox in the XCU of cluster[x,y] to the requesting processor ( index is in [4*p+1, 4*p+2, 4*p+3] ) ;
    77  2. it initialises the IOPIC entry associated to the (isr_type/isr_channel) IRQ.
    78  3. it initializes the proper entry in the WTI interrupt vector associated to processor P[x,y,p].
    79 
    80  === void '''_ext_irq_release( unsigned int isr_type , unsigned int isr_channel , unsigned int wti_index ) ===
    81 This function is used when the architecture contains an external IOPIC component. It desallocates the ressources allocated by the  previous _ext_irq_alloc() function to the calling processor. The two (isr_type, isr_channel) arguments define actually the external IRQ to be released.
    82  * '''isr_type''' : type of ISR
    83  * '''isr_channel''' : ISR channel (for multi-channels peripherals)
    84  * '''wti_index''' :  index of the WTI mailbox allocated to P[x,y,p] to be released.
    85 This function does only two things:
    86  1.  it desactivates the PIC entry associated to the (isr_type/isr_channel) IRQ.
    87  2. it releases the WTI mailbox allocated to P[x,y,p].
    88  3. The WTI interrupt vector is NOT modified
    89