Changeset 452


Ignore:
Timestamp:
Nov 11, 2014, 4:24:24 PM (10 years ago)
Author:
alain
Message:

Update the boot.c file to initialise the new slots in task context.

File:
1 edited

Legend:

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

    r436 r452  
    999999
    10001000///////////////////////////////////////////////////////////////////////////////
    1001 // This function initializes all private vobjs defined in the vspaces,
    1002 // such as mwmr channels, barriers and locks, because these vobjs
    1003 // are not known, and not initialized by the compiler.
     1001// This function initializes the private vobjs that have the CONST type.
    10041002// The MMU is supposed to be activated...
    10051003///////////////////////////////////////////////////////////////////////////////
     
    10301028             vobj_id++)
    10311029        {
    1032             switch (vobj[vobj_id].type)
    1033             {
    1034                 case VOBJ_TYPE_MWMR:    // storage capacity is (vobj.length/4 - 5) words
    1035                 {
    1036 #if BOOT_DEBUG_VOBJS
    1037 _puts("MWMR    : ");
    1038 _puts(vobj[vobj_id].name);
    1039 _puts(" / vaddr = ");
    1040 _putx(vobj[vobj_id].vaddr);
    1041 _puts(" / paddr = ");
    1042 _putl(vobj[vobj_id].paddr);
    1043 _puts(" / length = ");
    1044 _putx(vobj[vobj_id].length);
    1045 _puts("\n");
    1046 #endif
    1047                     mwmr_channel_t* mwmr = (mwmr_channel_t *) (vobj[vobj_id].vbase);
    1048                     mwmr->ptw = 0;
    1049                     mwmr->ptr = 0;
    1050                     mwmr->sts = 0;
    1051                     mwmr->width = vobj[vobj_id].init;
    1052                     mwmr->depth = (vobj[vobj_id].length >> 2) - 6;
    1053                     mwmr->lock = 0;
    1054 #if BOOT_DEBUG_VOBJS
    1055 _puts("          fifo depth = ");
    1056 _putd(mwmr->depth);
    1057 _puts(" / width = ");
    1058 _putd(mwmr->width);
    1059 _puts("\n");
    1060 #endif
    1061                     break;
    1062                 }
    1063                 case VOBJ_TYPE_ELF:    // initialisation done by the loader
    1064                 {
    1065 #if BOOT_DEBUG_VOBJS
    1066 _puts("ELF     : ");
    1067 _puts(vobj[vobj_id].name);
    1068 _puts(" / vaddr = ");
    1069 _putx(vobj[vobj_id].vaddr);
    1070 _puts(" / paddr = ");
    1071 _putl(vobj[vobj_id].paddr);
    1072 _puts(" / length = ");
    1073 _putx(vobj[vobj_id].length);
    1074 _puts("\n");
    1075 #endif
    1076                     break;
    1077                 }
    1078                 case VOBJ_TYPE_BLOB:    // initialisation done by the loader
    1079                 {
    1080 #if BOOT_DEBUG_VOBJS
    1081 _puts("BLOB    : ");
    1082 _puts(vobj[vobj_id].name);
    1083 _puts(" / vaddr = ");
    1084 _putx(vobj[vobj_id].vaddr);
    1085 _puts(" / paddr = ");
    1086 _putl(vobj[vobj_id].paddr);
    1087 _puts(" / length = ");
    1088 _putx(vobj[vobj_id].length);
    1089 _puts("\n");
    1090 #endif
    1091                     break;
    1092                 }
    1093                 case VOBJ_TYPE_BARRIER:    // init is the number of participants
    1094                 {
    1095 #if BOOT_DEBUG_VOBJS
    1096 _puts("BARRIER : ");
    1097 _puts(vobj[vobj_id].name);
    1098 _puts(" / vaddr = ");
    1099 _putx(vobj[vobj_id].vaddr);
    1100 _puts(" / paddr = ");
    1101 _putl(vobj[vobj_id].paddr);
    1102 _puts(" / length = ");
    1103 _putx(vobj[vobj_id].length);
    1104 _puts("\n");
    1105 #endif
    1106                     giet_barrier_t* barrier = (giet_barrier_t *) (vobj[vobj_id].vbase);
    1107                     barrier->count  = vobj[vobj_id].init;
    1108                     barrier->ntasks = vobj[vobj_id].init;
    1109                     barrier->sense  = 0;
    1110 #if BOOT_DEBUG_VOBJS
    1111 _puts("          init_value = ");
    1112 _putd(barrier->init);
    1113 _puts("\n");
    1114 #endif
    1115                     break;
    1116                 }
    1117                 case VOBJ_TYPE_LOCK:    // init value is "not taken"
    1118                 {
    1119 #if BOOT_DEBUG_VOBJS
    1120 _puts("LOCK    : ");
    1121 _puts(vobj[vobj_id].name);
    1122 _puts(" / vaddr = ");
    1123 _putx(vobj[vobj_id].vaddr);
    1124 _puts(" / paddr = ");
    1125 _putl(vobj[vobj_id].paddr);
    1126 _puts(" / length = ");
    1127 _putx(vobj[vobj_id].length);
    1128 _puts("\n");
    1129 #endif
    1130                     unsigned int* lock = (unsigned int *) (vobj[vobj_id].vbase);
    1131                     *lock = 0;
    1132                     break;
    1133                 }
    1134                 case VOBJ_TYPE_BUFFER:    // nothing to initialise
    1135                 {
    1136 #if BOOT_DEBUG_VOBJS
    1137 _puts("BUFFER  : ");
    1138 _puts(vobj[vobj_id].name);
    1139 _puts(" / vaddr = ");
    1140 _putx(vobj[vobj_id].vaddr);
    1141 _puts(" / paddr = ");
    1142 _putl(vobj[vobj_id].paddr);
    1143 _puts(" / length = ");
    1144 _putx(vobj[vobj_id].length);
    1145 _puts("\n");
    1146 #endif
    1147                     break;
    1148                 }
    1149                 case VOBJ_TYPE_MEMSPACE:
    1150                 {
    1151 #if BOOT_DEBUG_VOBJS
    1152 _puts("MEMSPACE  : ");
    1153 _puts(vobj[vobj_id].name);
    1154 _puts(" / vaddr = ");
    1155 _putx(vobj[vobj_id].vaddr);
    1156 _puts(" / paddr = ");
    1157 _putl(vobj[vobj_id].paddr);
    1158 _puts(" / length = ");
    1159 _putx(vobj[vobj_id].length);
    1160 _puts("\n");
    1161 #endif
    1162                     giet_memspace_t* memspace = (giet_memspace_t *) vobj[vobj_id].vbase;
    1163                     memspace->buffer = (void *) vobj[vobj_id].vbase + 8;
    1164                     memspace->size = vobj[vobj_id].length - 8;
    1165 #if BOOT_DEBUG_VOBJS
    1166 _puts("          buffer vbase = ");
    1167 _putx((unsigned int)memspace->buffer);
    1168 _puts(" / size = ");
    1169 _putx(memspace->size);
    1170 _puts("\n");
    1171 #endif
    1172                     break;
    1173                 }
    1174                 case VOBJ_TYPE_CONST:
    1175                 {
     1030            if ( (vobj[vobj_id].type) == VOBJ_TYPE_CONST )
     1031            {
    11761032#if BOOT_DEBUG_VOBJS
    11771033_puts("CONST   : ");
    11781034_puts(vobj[vobj_id].name);
    1179 _puts(" / vaddr = ");
     1035_puts(" / vaddr  = ");
    11801036_putx(vobj[vobj_id].vaddr);
    1181 _puts(" / paddr = ");
     1037_puts(" / paddr  = ");
    11821038_putl(vobj[vobj_id].paddr);
    1183 _puts(" / length = ");
    1184 _putx(vobj[vobj_id].length);
    1185 _puts(" / init = ");
     1039_puts(" / value  = ");
    11861040_putx(vobj[vobj_id].init);
    11871041_puts("\n");
    11881042#endif
    1189                     unsigned int* addr = (unsigned int *) vobj[vobj_id].vbase;
    1190                     *addr = vobj[vobj_id].init;
    1191 
    1192 #if BOOT_DEBUG_VOBJS
    1193 _puts("          init = ");
    1194 _putx(*addr);
    1195 _puts("\n");
    1196 #endif
    1197                     break;
    1198                 }
    1199                 default:
    1200                 {
    1201                     _puts("\n[BOOT ERROR] in boot_vobjs_init() : Illegal vobj type ");
    1202                     _putd( vobj[vobj_id].type );
    1203                     _puts(" in vspace ");
    1204                     _puts( vspace[vspace_id].name );
    1205                     _puts("\n");
    1206                     _exit();
    1207                 }
    1208             }            // end switch type
    1209         }          // end loop on vobjs
    1210     }        // end loop on vspaces
     1043                unsigned int* addr = (unsigned int *) vobj[vobj_id].vbase;
     1044                *addr = vobj[vobj_id].init;
     1045            }
     1046        }
     1047    }
    12111048} // end boot_vobjs_init()
    12121049
     
    16731510
    16741511            // initializes the task context
    1675             psched->context[ltid][CTX_CR_ID]    = 0;
    1676             psched->context[ltid][CTX_SR_ID]    = ctx_sr;
    1677             psched->context[ltid][CTX_SP_ID]    = ctx_sp;
    1678             psched->context[ltid][CTX_EPC_ID]   = ctx_epc;
    1679             psched->context[ltid][CTX_PTPR_ID]  = ctx_ptpr;
    1680             psched->context[ltid][CTX_PTAB_ID]  = ctx_ptab;
    1681             psched->context[ltid][CTX_LTID_ID]  = ltid;
    1682             psched->context[ltid][CTX_GTID_ID]  = task_id;
    1683             psched->context[ltid][CTX_TRDID_ID] = thread_id;
    1684             psched->context[ltid][CTX_VSID_ID]  = vspace_id;
    1685             psched->context[ltid][CTX_RUN_ID]   = 1;
    1686 
    1687             psched->context[ltid][CTX_TTY_ID]   = 0xFFFFFFFF;
    1688             psched->context[ltid][CTX_FBCMA_ID] = 0xFFFFFFFF;
    1689             psched->context[ltid][CTX_RXCMA_ID] = 0xFFFFFFFF;
    1690             psched->context[ltid][CTX_TXCMA_ID] = 0xFFFFFFFF;
    1691             psched->context[ltid][CTX_NIC_ID]   = 0xFFFFFFFF;
    1692             psched->context[ltid][CTX_HBA_ID]   = 0xFFFFFFFF;
    1693             psched->context[ltid][CTX_TIM_ID]   = 0xFFFFFFFF;
     1512            psched->context[ltid][CTX_CR_ID]     = 0;
     1513            psched->context[ltid][CTX_SR_ID]     = ctx_sr;
     1514            psched->context[ltid][CTX_SP_ID]     = ctx_sp;
     1515            psched->context[ltid][CTX_EPC_ID]    = ctx_epc;
     1516            psched->context[ltid][CTX_PTPR_ID]   = ctx_ptpr;
     1517            psched->context[ltid][CTX_PTAB_ID]   = ctx_ptab;
     1518            psched->context[ltid][CTX_LTID_ID]   = ltid;
     1519            psched->context[ltid][CTX_GTID_ID]   = task_id;
     1520            psched->context[ltid][CTX_TRDID_ID]  = thread_id;
     1521            psched->context[ltid][CTX_VSID_ID]   = vspace_id;
     1522            psched->context[ltid][CTX_RUN_ID]    = 1;
     1523
     1524            psched->context[ltid][CTX_TTY_ID]    = 0xFFFFFFFF;
     1525            psched->context[ltid][CTX_CMA_FB_ID] = 0xFFFFFFFF;
     1526            psched->context[ltid][CTX_CMA_RX_ID] = 0xFFFFFFFF;
     1527            psched->context[ltid][CTX_CMA_TX_ID] = 0xFFFFFFFF;
     1528            psched->context[ltid][CTX_NIC_RX_ID] = 0xFFFFFFFF;
     1529            psched->context[ltid][CTX_NIC_TX_ID] = 0xFFFFFFFF;
     1530            psched->context[ltid][CTX_TIM_ID]    = 0xFFFFFFFF;
     1531            psched->context[ltid][CTX_HBA_ID]    = 0xFFFFFFFF;
    16941532
    16951533#if BOOT_DEBUG_SCHED
     
    24232261        _putd(_get_proctime());
    24242262        _puts("\n");
    2425 
     2263 
    24262264        // Initialise schedulers
    24272265        boot_schedulers_init();
Note: See TracChangeset for help on using the changeset viewer.