PUBLIC void JpegEnc_HwSubModuleCfg(void) { int32 cmd = 0; JPEG_CODEC_T *jpeg_fw_codec = Get_JPEGEncCodec(); SCI_ASSERT(jpeg_fw_codec != PNULL); //BSM Module cfg cmd = (jpeg_fw_codec->pingpang_buf_len+3)>>2; if(cmd > 0x1FFFFF) { cmd = 0x1FFFFF; } /*cmd = (0<<31) | ((jpeg_fw_codec->pingpang_buf_len+3)>>2);*/ JPG_WRITE_REG(JPG_BSM_REG_BASE+BSM_CFG0_OFFSET, cmd, "BSM_CFG0: buffer0 for write, and the max buffer size"); #if _CMODEL_ g_bs_pingpang_bfr0 = jpeg_fw_codec->stream_0; g_bs_pingpang_bfr1 = jpeg_fw_codec->stream_1; init_bsm(); #endif //VLC Module cfg, config total mcu number here, it will be modified for slice mode in JPEG_HWEncStart() function. cmd = ((jpeg_fw_codec->mcu_num_y * jpeg_fw_codec->mcu_num_x) & 0xfffff); JPG_WRITE_REG(JPG_VLC_REG_BASE+VLC_TOTAL_MCU_OFFSET, cmd, "VLC_CFG_OFF: total mcu number"); //DCT Module cfg cmd = (DCT_QUANT_EN << 8) | (DCT_AUTO_MODE << 1) | (DCT_MODE); JPG_WRITE_REG(JPG_DCT_REG_BASE+DCT_CFG_OFFSET, cmd, "DCT_CONFIG: enable quant, auto-mode, dct-mode"); JPG_WRITE_REG(JPG_DCT_REG_BASE+DCT_CFG_DONE_OFFSET, 1, "DCT_CFG_FINISH: config finished"); //MBIO Module cfg JPG_WRITE_REG(JPG_MBIO_REG_BASE+CFG_OFFSET, (MBIO_RUN_FREE_MODE), "MBIO_CFG: disable post-filter and free_run_mode"); return; }
/*------------------------------------------------------------------------ * sysinit -- initialize all Xinu data structeres and devices *------------------------------------------------------------------------ */ LOCAL sysinit() { static long currsp; int i,j; struct pentry *pptr; struct sentry *sptr; struct mblock *mptr; SYSCALL pfintr(); numproc = 0; /* initialize system variables */ nextproc = NPROC-1; nextsem = NSEM-1; nextqueue = NPROC; /* q[0..NPROC-1] are processes */ /* initialize free memory list */ /* PC version has to pre-allocate 640K-1024K "hole" */ if (maxaddr+1 > HOLESTART) { memlist.mnext = mptr = (struct mblock *) roundmb(&end); mptr->mnext = (struct mblock *)HOLEEND; mptr->mlen = (int) truncew(((unsigned) HOLESTART - (unsigned)&end)); mptr->mlen -= 4; mptr = (struct mblock *) HOLEEND; mptr->mnext = 0; mptr->mlen = (int) truncew((unsigned)maxaddr - HOLEEND - NULLSTK); /* mptr->mlen = (int) truncew((unsigned)maxaddr - (4096 - 1024 ) * 4096 - HOLEEND - NULLSTK); */ } else { /* initialize free memory list */ memlist.mnext = mptr = (struct mblock *) roundmb(&end); mptr->mnext = 0; mptr->mlen = (int) truncew((unsigned)maxaddr - (int)&end - NULLSTK); } for (i=0 ; i<NPROC ; i++) /* initialize process table */ proctab[i].pstate = PRFREE; #ifdef MEMMARK _mkinit(); /* initialize memory marking */ #endif #ifdef RTCLOCK clkinit(); /* initialize r.t.clock */ #endif mon_init(); /* init monitor */ #ifdef NDEVS for (i=0 ; i<NDEVS ; i++ ) { init_dev(i); } #endif pptr = &proctab[NULLPROC]; /* initialize null process entry */ pptr->pstate = PRCURR; for (j=0; j<7; j++) pptr->pname[j] = "prnull"[j]; pptr->plimit = (WORD)(maxaddr + 1) - NULLSTK; pptr->pbase = (WORD) maxaddr - 3; /* pptr->plimit = (WORD)(maxaddr + 1) - NULLSTK - (4096 - 1024 )*4096; pptr->pbase = (WORD) maxaddr - 3 - (4096-1024)*4096; */ pptr->pesp = pptr->pbase-4; /* for stkchk; rewritten before used */ *( (int *)pptr->pbase ) = MAGIC; pptr->paddr = (WORD) nulluser; pptr->pargs = 0; pptr->pprio = 0; currpid = NULLPROC; for (i=0 ; i<NSEM ; i++) { /* initialize semaphores */ (sptr = &semaph[i])->sstate = SFREE; sptr->sqtail = 1 + (sptr->sqhead = newqueue()); } rdytail = 1 + (rdyhead=newqueue());/* initialize ready list */ //OS proj 3 modify //OS proj 3 modify init_bsm(); //initialize 16 Backing stores init_frm(); //initialize 1024 frames set_evec(14,pfintr); return(OK); }
/*------------------------------------------------------------------------ * nulluser -- initialize system and become the null process (id==0) *------------------------------------------------------------------------ */ nulluser() /* babysit CPU when no one is home */ { int userpid; unsigned long temp; console_dev = SERIAL0; /* set console to COM0 */ initevec(); kprintf("system running up!\n"); sysinit(); enable(); /* enable interrupts */ sprintf(vers, "PC Xinu %s", VERSION); kprintf("\n\n%s\n", vers); if (reboot++ < 1) kprintf("\n"); else kprintf(" (reboot %d)\n", reboot); kprintf("%d bytes real mem\n", (unsigned long) maxaddr+1); #ifdef DETAIL kprintf(" %d", (unsigned long) 0); kprintf(" to %d\n", (unsigned long) (maxaddr) ); #endif kprintf("%d bytes Xinu code\n", (unsigned long) ((unsigned long) &end - (unsigned long) start)); #ifdef DETAIL kprintf(" %d", (unsigned long) start); kprintf(" to %d\n", (unsigned long) &end ); #endif #ifdef DETAIL kprintf("%d bytes user stack/heap space\n", (unsigned long) ((unsigned long) maxaddr - (unsigned long) &end)); kprintf(" %d", (unsigned long) &end); kprintf(" to %d\n", (unsigned long) maxaddr); #endif kprintf("clock %sabled\n", clkruns == 1?"en":"dis"); /* initialize_pagedirectory(); initialize_pagetable(); get_frame(1,FR_DIR,0); get_frame(1,FR_TBL,0); get_frame(1,FR_TBL,0); get_frame(1,FR_TBL,0); get_frame(1,FR_TBL,0); */ init_frm(); init_bsm(); temp = create_ps() ; write_cr3(0x400000); set_evec(14,pfintr); proctab[currpid].pdbr = temp; // pageq.next= &pageq; //Always points to head myheadq = NULL; //actual pointer used by page replacement policyi currq = NULL; pcurrq = NULL; /* create a process to execute the user's main program */ userpid = create(main,INITSTK,INITPRIO,INITNAME,INITARGS); enable_paging(); resume(userpid); while (TRUE) /* empty */; }