Ignore:
Timestamp:
Sep 19, 2012, 10:52:43 AM (12 years ago)
Author:
alain
Message:

Introducing support for Network controller

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/boot/boot_init.c

    r215 r218  
    912912                    boot_exit();
    913913                }
    914                 if ( periph[periph_id].channels != NB_TTYS )
     914                if ( periph[periph_id].channels > NB_TTYS )
    915915                {
    916916                    boot_puts("\n[BOOT ERROR] Wrong NB_TTYS in cluster ");
     
    12961296            unsigned int*   pseg_base = (unsigned int*)pseg[pseg_id].base;
    12971297
    1298             //////// vci_block_device component
    1299             if      ( type == PERIPH_TYPE_IOC )
     1298#if BOOT_DEBUG_PERI
     1299boot_puts("- peripheral type : ");
     1300boot_putd( type );
     1301boot_puts(" / address = ");
     1302boot_putx( (unsigned int)pseg_base );
     1303boot_puts(" / channels = ");
     1304boot_putd( channels );
     1305boot_puts("\n");
     1306#endif
     1307
     1308            switch ( type )
    13001309            {
    1301 
    1302                 // activate interrupts
    1303                 pseg_base[BLOCK_DEVICE_IRQ_ENABLE] = 1;
    1304 
     1310                case PERIPH_TYPE_IOC:   // vci_block_device component
     1311                    pseg_base[BLOCK_DEVICE_IRQ_ENABLE] = 1;
    13051312#if BOOT_DEBUG_PERI
    1306 boot_puts("- IOC initialised : ");
    1307 boot_putd( channels );
    1308 boot_puts(" channels\n");
    1309 #endif
    1310             }
    1311 
    1312             //////// vci_multi_dma component
    1313             else if ( type == PERIPH_TYPE_DMA )
    1314             {
    1315                 for ( channel_id = 0 ; channel_id < channels ; channel_id++ )
    1316                 {
    1317                     // activate interrupts
    1318                     pseg_base[DMA_IRQ_DISABLE + channel_id*DMA_SPAN] = 0;
    1319                 }
    1320 
     1313boot_puts("- IOC initialised\n");
     1314#endif
     1315                break;
     1316                case PERIPH_TYPE_DMA:   // vci_multi_dma component
     1317                    for ( channel_id = 0 ; channel_id < channels ; channel_id++ )
     1318                    {
     1319                        pseg_base[DMA_IRQ_DISABLE + channel_id*DMA_SPAN] = 0;
     1320                    }
    13211321#if BOOT_DEBUG_PERI
    1322 boot_puts("- DMA initialised : ");
    1323 boot_putd( channels );
    1324 boot_puts(" channels\n");
    1325 #endif
    1326             }
    1327 
    1328             //////// vci_multi_nic component
    1329             else if ( type == PERIPH_TYPE_NIC  )
    1330             {
    1331                 for ( channel_id = 0 ; channel_id < channels ; channel_id++ )
    1332                 {
    1333                 // TODO
    1334                 }
    1335 
     1322boot_puts("- DMA initialised\n");
     1323#endif
     1324                break;
     1325                case PERIPH_TYPE_NIC:   // vci_multi_nic component
     1326                    for ( channel_id = 0 ; channel_id < channels ; channel_id++ )
     1327                    {
     1328                        // TODO
     1329                    }
    13361330#if BOOT_DEBUG_PERI
    1337 boot_puts("- NIC initialised : ");
    1338 boot_putd( channels );
    1339 boot_puts(" channels\n");
    1340 #endif
    1341             }
    1342 
    1343             //////// vci_io_bridge component
    1344             else if ( (type == PERIPH_TYPE_IOB) && IOMMU_ACTIVE )
    1345             {
    1346                 // get the iommu page table physical address
    1347                 // TODO
    1348 
    1349                 // define IPI address mapping the IOC interrupt
    1350                 // TODO
    1351 
    1352                 // set IOMMU page table address
    1353                 // pseg_base[IOB_IOMMU_PTPR] = ptab_pbase;   
    1354 
    1355                 // activate IOMMU
    1356                 // pseg_base[IOB_IOMMU_ACTIVE] = 1;       
    1357 
     1331boot_puts("- NIC initialised\n");
     1332#endif
     1333                break;
     1334                case PERIPH_TYPE_TTY:   // vci_multi_tty component
    13581335#if BOOT_DEBUG_PERI
    1359 boot_puts("- IOB initialised : ");
    1360 boot_putd( channels );
    1361 boot_puts(" channels\n");
    1362 #endif
    1363             }
    1364 
     1336boot_puts("- TTY initialised\n");
     1337#endif
     1338                break;
     1339                case PERIPH_TYPE_IOB:   // vci_io_bridge component
     1340                    if ( IOMMU_ACTIVE )
     1341                    {
     1342                        // TODO
     1343                        // get the iommu page table physical address
     1344                        // define IPI address mapping the IOC interrupt
     1345                        // set IOMMU page table address
     1346                        // pseg_base[IOB_IOMMU_PTPR] = ptab_pbase;   
     1347                        // activate IOMMU
     1348                        // pseg_base[IOB_IOMMU_ACTIVE] = 1;       
     1349                    }
     1350#if BOOT_DEBUG_PERI
     1351boot_puts("- IOB initialised\n");
     1352#endif
     1353                break;
     1354            } // end switch periph type
    13651355        } // end for periphs
     1356
     1357#if BOOT_DEBUG_PERI
     1358boot_puts("\n[BOOT DEBUG] ****** coprocessors initialisation in cluster ");
     1359boot_putd( cluster_id );
     1360boot_puts(" ******\n");
     1361#endif
    13661362
    13671363        for ( coproc_id = cluster[cluster_id].coproc_offset ;
     
    13741370
    13751371#if BOOT_DEBUG_PERI
    1376 boot_puts("[BOOT] mwmr coproc initialisation of ");
    1377 boot_puts((unsigned int) coproc[coproc_id].name);
    1378 boot_puts(", nb ports");
     1372boot_puts("- coprocessor name : ");
     1373boot_puts( coproc[coproc_id].name );
     1374boot_puts(" / nb ports = ");
    13791375boot_putd((unsigned int)coproc[coproc_id].ports);
    13801376boot_puts("\n");
     
    14431439    unsigned int        alloc_tty_channel;                 // TTY channel allocator
    14441440    unsigned int        alloc_nic_channel;                 // NIC channel allocator
    1445     unsigned int        alloc_fbdma_channel[NB_CLUSTERS];  // FBDMA channel allocators
     1441    unsigned int        alloc_dma_channel[NB_CLUSTERS];    // DMA channel allocators
    14461442    unsigned int        alloc_timer_channel[NB_CLUSTERS];  // user TIMER allocators
    14471443
     
    14641460    for ( cluster_id = 0 ; cluster_id < header->clusters ; cluster_id++ )
    14651461    {
    1466         alloc_fbdma_channel[cluster_id] = 0;
     1462        alloc_dma_channel[cluster_id]  = 0;
    14671463        alloc_timer_channel[cluster_id] = 0;
    14681464    }
     
    16781674            }
    16791675
    1680             // ctx_fbdma : DMA global index provided by a cluster allocator 
    1681             unsigned int ctx_fbdma = 0xFFFFFFFF;
    1682             if ( task[task_id].use_fbdma )
     1676            // ctx_dma : DMA global index provided by a cluster allocator 
     1677            unsigned int ctx_dma = 0xFFFFFFFF;
     1678            if ( task[task_id].use_fbdma || task[task_id].use_nic )
    16831679            {
    16841680                unsigned int cluster_id = task[task_id].clusterid;
    1685                 if ( alloc_fbdma_channel[cluster_id] >= NB_DMAS_MAX )
    1686                 {
    1687                     boot_puts("\n[BOOT ERROR] local FBDMA index too large for task ");
     1681                if ( alloc_dma_channel[cluster_id] >= NB_DMAS_MAX )
     1682                {
     1683                    boot_puts("\n[BOOT ERROR] local DMA index too large for task ");
    16881684                    boot_puts( task[task_id].name );
    16891685                    boot_puts(" in vspace ");
     
    16921688                    boot_exit();
    16931689                }
    1694                 ctx_fbdma = cluster_id*NB_DMAS_MAX + alloc_fbdma_channel[cluster_id];
    1695                 alloc_fbdma_channel[cluster_id]++;
     1690                ctx_dma = cluster_id*NB_DMAS_MAX + alloc_dma_channel[cluster_id];
     1691                alloc_dma_channel[cluster_id]++;
    16961692            }
    16971693
     
    17301726
    17311727            // initializes the task context in scheduler[gpid]
    1732             boot_scheduler_set_context( gpid, ltid, CTX_SR_ID    , ctx_sr     );
    1733             boot_scheduler_set_context( gpid, ltid, CTX_SP_ID    , ctx_sp     );
    1734             boot_scheduler_set_context( gpid, ltid, CTX_RA_ID    , ctx_ra     );
    1735             boot_scheduler_set_context( gpid, ltid, CTX_EPC_ID   , ctx_epc    );
    1736             boot_scheduler_set_context( gpid, ltid, CTX_PTPR_ID  , ctx_ptpr   );
    1737             boot_scheduler_set_context( gpid, ltid, CTX_TTY_ID   , ctx_tty    );
    1738             boot_scheduler_set_context( gpid, ltid, CTX_FBDMA_ID , ctx_fbdma  );
    1739             boot_scheduler_set_context( gpid, ltid, CTX_NIC_ID   , ctx_nic    );
    1740             boot_scheduler_set_context( gpid, ltid, CTX_TIMER_ID , ctx_timer  );
    1741             boot_scheduler_set_context( gpid, ltid, CTX_PTAB_ID  , ctx_ptab   );
    1742             boot_scheduler_set_context( gpid, ltid, CTX_LTID_ID  , ltid       );
    1743             boot_scheduler_set_context( gpid, ltid, CTX_VSID_ID  , vspace_id  );
    1744             boot_scheduler_set_context( gpid, ltid, CTX_RUN_ID   , 1          );
     1728            boot_scheduler_set_context( gpid, ltid, CTX_SR_ID    , ctx_sr    );
     1729            boot_scheduler_set_context( gpid, ltid, CTX_SP_ID    , ctx_sp    );
     1730            boot_scheduler_set_context( gpid, ltid, CTX_RA_ID    , ctx_ra    );
     1731            boot_scheduler_set_context( gpid, ltid, CTX_EPC_ID   , ctx_epc   );
     1732            boot_scheduler_set_context( gpid, ltid, CTX_PTPR_ID  , ctx_ptpr  );
     1733            boot_scheduler_set_context( gpid, ltid, CTX_TTY_ID   , ctx_tty   );
     1734            boot_scheduler_set_context( gpid, ltid, CTX_DMA_ID   , ctx_dma   );
     1735            boot_scheduler_set_context( gpid, ltid, CTX_NIC_ID   , ctx_nic   );
     1736            boot_scheduler_set_context( gpid, ltid, CTX_TIMER_ID , ctx_timer );
     1737            boot_scheduler_set_context( gpid, ltid, CTX_PTAB_ID  , ctx_ptab  );
     1738            boot_scheduler_set_context( gpid, ltid, CTX_LTID_ID  , ltid      );
     1739            boot_scheduler_set_context( gpid, ltid, CTX_VSID_ID  , vspace_id );
     1740            boot_scheduler_set_context( gpid, ltid, CTX_RUN_ID   , 1         );
    17451741                                       
    17461742#if BOOT_DEBUG_SCHED
     
    17851781boot_puts("\n");
    17861782
    1787 boot_puts("  - ctx[FBDMA]  = ");
    1788 boot_putd( ctx_fbdma );
     1783boot_puts("  - ctx[DMA]    = ");
     1784boot_putd( ctx_dma );
    17891785boot_puts("\n");
    17901786
Note: See TracChangeset for help on using the changeset viewer.