Ignore:
Timestamp:
Jul 13, 2017, 9:27:38 AM (7 years ago)
Author:
max@…
Message:

initialize pic

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/x86_64/core/hal_init.c

    r168 r192  
    8686/* -------------------------------------------------------------------------- */
    8787
    88 static void init_bootinfo_icu(boot_device_t *dev)
    89 {
    90         extern uint32_t hwi_baseidx;
    91         extern uint32_t wti_baseidx;
    92         extern uint32_t pti_baseidx;
    93         extern size_t ioapic_pins;
    94 
    95         memset(dev, 0, sizeof(boot_device_t));
    96 
    97         dev->base = 0;
    98         dev->type = (DEV_FUNC_ICU << 16) | IMPL_ICU_XCU;
    99         dev->channels = 1;
    100 
    101 #if NOTYET
    102         /*
    103          * Give 20% of the pins to HWI, 80% to WTI.
    104          */
    105         dev->param0 = (ioapic_pins * 20) / 100;  /* hwi_nr */
    106         dev->param1 = ioapic_pins - dev->param0; /* wti_nr */
    107 #else
    108         dev->param0 = 1; /* hwi_nr */
    109         dev->param1 = 1; /* wti_nr */
    110 #endif
    111 
    112         /*
    113          * We always set 1 for pti_nr. On x86, timer interrupts are handled by
    114          * LAPIC, which is per-cpu and not global. Therefore, we always have one
    115          * timer for each CPU, and its IRQ number is faked to 0.
    116          */
    117         dev->param2 = 1; /* pti_nr */
    118 
    119         dev->param3 = 0;
    120 
    121         /* Set the base idx for the XCU driver */
    122         hwi_baseidx = 0;
    123         wti_baseidx = dev->param0;
    124         pti_baseidx = 0xFFFFFFFF;
    125 
    126 #ifdef NOTYET
    127     uint32_t    irqs;                 /*! number of input IRQs                              */
    128     boot_irq_t  irq[32];              /*! array of input IRQS (PIC and ICU only)            */
    129 #endif
    130 }
    131 
    13288static size_t init_bootinfo_pages_nr()
    13389{
     
    195151}
    196152
    197 static void init_bootinfo_txt(boot_device_t *dev)
     153static void init_bootinfo_pic(boot_device_t *dev)
    198154{
    199155        memset(dev, 0, sizeof(boot_device_t));
    200156
    201         dev->base = 0xB8000;
    202         dev->type = (DEV_FUNC_TXT << 16) | IMPL_TXT_X86;
     157        dev->base = 0;
     158        dev->type = (DEV_FUNC_PIC << 16) | IMPL_PIC_SCL;
    203159        dev->channels = 1;
    204160        dev->param0 = 0;
     
    207163        dev->param3 = 0;
    208164
    209 #ifdef NOTYET
    210     uint32_t    irqs;    /*! number of input IRQs                    */
    211     boot_irq_t  irq[32]; /*! array of input IRQS (PIC and ICU only)  */
    212 #endif
     165        dev->irqs = 5;
     166
     167        /* COM1 */
     168        dev->irq[4].dev_type = (DEV_FUNC_TXT << 16) | IMPL_TXT_TTY;
     169        dev->irq[4].channel = 0;
     170        dev->irq[4].is_rx = 0;
     171        dev->irq[4].valid = 1;
     172}
     173
     174static void init_bootinfo_txt(boot_device_t *dev)
     175{
     176        memset(dev, 0, sizeof(boot_device_t));
     177
     178        dev->base = 0;
     179        dev->type = (DEV_FUNC_TXT << 16) | IMPL_TXT_TTY;
     180        dev->channels = 1;
     181        dev->param0 = 0;
     182        dev->param1 = 0;
     183        dev->param2 = 0;
     184        dev->param3 = 0;
    213185}
    214186
     
    231203        info->io_cxy = 0;
    232204
    233         info->ext_dev_nr = 1;
     205        info->ext_dev_nr = 2;
    234206        init_bootinfo_txt(&info->ext_dev[0]);
     207        init_bootinfo_pic(&info->ext_dev[1]);
    235208
    236209        info->cxy = 0;
     
    240213        info->rsvd_nr = init_bootinfo_rsvd((boot_rsvd_t *)&info->rsvd);
    241214
    242         init_bootinfo_icu(&info->dev_icu);
     215        /* TODO: dev_icu */
    243216        /* TODO: dev_mmc */
    244217        /* TODO: dev_dma */
     
    308281        hal_enable_irq(&dummy);
    309282
    310         while (1);
    311 
    312283        kernel_init(&btinfo);
    313284
    314285        x86_printf("[+] kernel_init called\n");
    315 
     286/*
     287        void *ptr;
     288
     289        khm_t *khm = &LOCAL_CLUSTER->khm;
     290        ptr = khm_alloc(khm, 10);
     291        memset(ptr, 0, 10);
     292        khm_free(ptr);
     293
     294
     295        kcm_t *kcm = &LOCAL_CLUSTER->kcm;
     296        ptr = kcm_alloc(kcm);
     297        memset(ptr, 0, 1);
     298        kcm_free(ptr);
     299
     300        ptr = ppm_alloc_pages(1);
     301        ppm_free_pages(ptr);
     302*/
    316303        while (1);
    317304
Note: See TracChangeset for help on using the changeset viewer.