Ignore:
Timestamp:
Jul 4, 2017, 10:17:44 AM (7 years ago)
Author:
max@…
Message:

improve the APIC implementation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/x86_64/drivers/soclib_xcu.c

    r135 r137  
    3232extern size_t ioapic_pins;
    3333
     34uint64_t apic_fake_status __in_kdata = 0;
     35
     36/*
     37 * These indexes are used to translate a type::idx to a pin on the IOAPIC.
     38 */
     39uint32_t hwi_baseidx __in_kdata = 0;
     40uint32_t wti_baseidx __in_kdata = 0;
     41uint32_t pti_baseidx __in_kdata = 0;
     42
    3443void soclib_xcu_init(chdev_t *icu, lid_t lid)
    3544{
     
    3847        /* disable all IRQs */
    3948        for (i = 0; i < ioapic_pins; i++) {
    40                 hal_ioapic_set_entry(i, IOENTRY_DISABLE);
     49                hal_ioapic_disable_entry(i);
    4150        }
    4251
     
    4453}
    4554
    46 void soclib_xcu_disable_irq( chdev_t  * icu,
    47                              uint32_t   mask,
    48                              uint32_t   type,
    49                              lid_t      lid )
     55void soclib_xcu_enable_irq(chdev_t *icu, uint32_t idx, uint32_t type,
     56    lid_t lid)
    5057{
     58        uint32_t pin;
     59
     60        switch (type) {
     61                case HWI_TYPE:
     62                        pin = hwi_baseidx + idx;
     63                case WTI_TYPE:
     64                        pin = wti_baseidx + idx;
     65                case PTI_TYPE:
     66                        pin = pti_baseidx + idx;
     67                default:
     68                        x86_panic("enabling wrong irq");
     69        }
     70
    5171        x86_panic((char *)__func__);
    5272}
    5373
    54 void soclib_xcu_enable_irq( chdev_t  * icu,
    55                             uint32_t   mask,
    56                             uint32_t   type,
    57                             lid_t      lid )
     74void soclib_xcu_disable_irq(chdev_t *icu, uint32_t idx, uint32_t type,
     75    lid_t lid)
    5876{
    5977        x86_panic((char *)__func__);
     
    83101}
    84102
    85 void soclib_xcu_get_status( chdev_t  * icu,
    86                             lid_t      lid,
    87                             uint32_t * hwi_status,
    88                             uint32_t * wti_status,
    89                             uint32_t * pti_status )
     103
     104
     105
     106
     107void soclib_xcu_get_status(chdev_t *icu, lid_t lid, uint32_t *hwi_status,
     108    uint32_t *wti_status, uint32_t *pti_status)
    90109{
     110        if (lid != 0) {
     111                x86_panic("xcu_get_status should have lid==0");
     112        }
     113
    91114        x86_panic((char *)__func__);
    92115}
     116
     117
     118
     119
     120
    93121
    94122void soclib_xcu_send_ipi( xptr_t  icu_xp,
Note: See TracChangeset for help on using the changeset viewer.