Lines Matching defs:ainfo

242 static int nv3_iterate(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
259 cur = ainfo->cur;
263 if (ainfo->gburst_size == 128) max_gfsize = GFIFO_SIZE_128;
268 if (ainfo->vid_en)
270 if (ainfo->wcvocc > ainfo->vocc) ainfo->wcvocc = ainfo->vocc;
271 if (ainfo->wcvlwm > vlwm) ainfo->wcvlwm = vlwm ;
272 ns = 1000000 * ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
273 vfsize = ns * ainfo->vdrain_rate / 1000000;
274 vfsize = ainfo->wcvlwm - ainfo->vburst_size + vfsize;
278 if (ainfo->wcmocc > ainfo->mocc) ainfo->wcmocc = ainfo->mocc;
280 if (ainfo->gr_en)
282 if (ainfo->wcglwm > glwm) ainfo->wcglwm = glwm ;
283 if (ainfo->wcgocc > ainfo->gocc) ainfo->wcgocc = ainfo->gocc;
284 ns = 1000000 * (ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
285 gfsize = (ns * (long) ainfo->gdrain_rate)/1000000;
286 gfsize = ainfo->wcglwm - ainfo->gburst_size + gfsize;
289 if (!state->gr_during_vid && ainfo->vid_en)
290 if (ainfo->vid_en && (ainfo->vocc < 0) && !ainfo->vid_only_once)
292 else if (ainfo->mocc < 0)
294 else if (ainfo->gocc< ainfo->by_gfacc)
297 else switch (ainfo->priority)
300 if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
302 else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
304 else if (ainfo->mocc<0)
309 if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
311 else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
313 else if (ainfo->mocc<0)
318 if (ainfo->mocc<0)
320 else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
322 else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
334 else if (ainfo->first_vacc) misses = vmisses;
336 ainfo->first_vacc = 0;
340 vlwm = ns * ainfo->vdrain_rate/ 1000000;
341 vlwm = ainfo->vocc - vlwm;
343 ns = 1000000*(misses*state->mem_page_miss + ainfo->vburst_size)/(state->memory_width/8)/state->mclk_khz;
344 ainfo->vocc = ainfo->vocc + ainfo->vburst_size - ns*ainfo->vdrain_rate/1000000;
345 ainfo->gocc = ainfo->gocc - ns*ainfo->gdrain_rate/1000000;
346 ainfo->mocc = ainfo->mocc - ns*ainfo->mdrain_rate/1000000;
350 else if (ainfo->first_gacc) misses = gmisses;
352 ainfo->first_gacc = 0;
356 glwm = ns * ainfo->gdrain_rate/1000000;
357 glwm = ainfo->gocc - glwm;
359 ns = 1000000*(misses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
360 ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
361 ainfo->gocc = ainfo->gocc + ainfo->gburst_size - ns*ainfo->gdrain_rate/1000000;
362 ainfo->mocc = ainfo->mocc + 0 - ns*ainfo->mdrain_rate/1000000;
366 else if (ainfo->first_macc) misses = mmisses;
368 ainfo->first_macc = 0;
370 ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
371 ainfo->gocc = ainfo->gocc + 0 - ns*ainfo->gdrain_rate/1000000;
372 ainfo->mocc = ainfo->mocc + mburst_size - ns*ainfo->mdrain_rate/1000000;
377 ainfo->converged = 0;
380 ns = 1000000*ainfo->gburst_size/(state->memory_width/8)/state->mclk_khz;
381 tmp = ns * ainfo->gdrain_rate/1000000;
382 if (abs(ainfo->gburst_size) + ((abs(ainfo->wcglwm) + 16 ) & ~0x7) - tmp > max_gfsize)
384 ainfo->converged = 0;
387 ns = 1000000*ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
388 tmp = ns * ainfo->vdrain_rate/1000000;
389 if (abs(ainfo->vburst_size) + (abs(ainfo->wcvlwm + 32) & ~0xf) - tmp> VFIFO_SIZE)
391 ainfo->converged = 0;
394 if (abs(ainfo->gocc) > max_gfsize)
396 ainfo->converged = 0;
399 if (abs(ainfo->vocc) > VFIFO_SIZE)
401 ainfo->converged = 0;
404 if (abs(ainfo->mocc) > MFIFO_SIZE)
406 ainfo->converged = 0;
411 ainfo->converged = 0;
416 ainfo->converged = 0;
421 ainfo->converged = 0;
426 static char nv3_arb(nv3_fifo_info * res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
440 ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000;
441 ainfo->wcmocc = 0;
442 ainfo->wcgocc = 0;
443 ainfo->wcvocc = 0;
444 ainfo->wcvlwm = 0;
445 ainfo->wcglwm = 0;
446 ainfo->engine_en = 1;
447 ainfo->converged = 1;
448 if (ainfo->engine_en)
451 ainfo->mocc = state->enable_mp ? 0-ens*ainfo->mdrain_rate/1000000 : 0;
452 ainfo->vocc = ainfo->vid_en ? 0-ens*ainfo->vdrain_rate/1000000 : 0;
453 ainfo->gocc = ainfo->gr_en ? 0-ens*ainfo->gdrain_rate/1000000 : 0;
454 ainfo->cur = ENGINE;
455 ainfo->first_vacc = 1;
456 ainfo->first_gacc = 1;
457 ainfo->first_macc = 1;
458 nv3_iterate(res_info, state,ainfo);
463 ainfo->mocc = state->enable_mp ? 0 : mburst_size - mns*ainfo->mdrain_rate/1000000;
464 ainfo->vocc = ainfo->vid_en ? 0 : 0- mns*ainfo->vdrain_rate/1000000;
465 ainfo->gocc = ainfo->gr_en ? 0: 0- mns*ainfo->gdrain_rate/1000000;
466 ainfo->cur = MPORT;
467 ainfo->first_vacc = 1;
468 ainfo->first_gacc = 1;
469 ainfo->first_macc = 0;
470 nv3_iterate(res_info, state,ainfo);
472 if (ainfo->gr_en)
474 ainfo->first_vacc = 1;
475 ainfo->first_gacc = 0;
476 ainfo->first_macc = 1;
477 gns = 1000000*(gmisses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
478 ainfo->gocc = ainfo->gburst_size - gns*ainfo->gdrain_rate/1000000;
479 ainfo->vocc = ainfo->vid_en? 0-gns*ainfo->vdrain_rate/1000000 : 0;
480 ainfo->mocc = state->enable_mp ? 0-gns*ainfo->mdrain_rate/1000000: 0;
481 ainfo->cur = GRAPHICS;
482 nv3_iterate(res_info, state,ainfo);
484 if (ainfo->vid_en)
486 ainfo->first_vacc = 0;
487 ainfo->first_gacc = 1;
488 ainfo->first_macc = 1;
489 vns = 1000000*(vmisses*state->mem_page_miss + ainfo->vburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
490 ainfo->vocc = ainfo->vburst_size - vns*ainfo->vdrain_rate/1000000;
491 ainfo->gocc = ainfo->gr_en? (0-vns*ainfo->gdrain_rate/1000000) : 0;
492 ainfo->mocc = state->enable_mp? 0-vns*ainfo->mdrain_rate/1000000 :0 ;
493 ainfo->cur = VIDEO;
494 nv3_iterate(res_info, state, ainfo);
496 if (ainfo->converged)
498 res_info->graphics_lwm = (int)abs(ainfo->wcglwm) + 16;
499 res_info->video_lwm = (int)abs(ainfo->wcvlwm) + 32;
500 res_info->graphics_burst_size = ainfo->gburst_size;
501 res_info->video_burst_size = ainfo->vburst_size;
502 res_info->graphics_hi_priority = (ainfo->priority == GRAPHICS);
503 res_info->media_hi_priority = (ainfo->priority == MPORT);
512 ainfo->converged = 0;
532 static char nv3_get_param(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
543 ainfo->priority = p;
544 ainfo->gburst_size = g;
545 ainfo->vburst_size = v;
546 done = nv3_arb(res_info, state,ainfo);
566 nv3_arb_info ainfo;
569 ainfo.gr_en = 1;
570 ainfo.vid_en = state->enable_video;
571 ainfo.vid_only_once = 0;
572 ainfo.gr_only_once = 0;
573 ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
574 ainfo.vdrain_rate = (int) state->pclk_khz * 2;
576 ainfo.vdrain_rate = ainfo.vdrain_rate/state->video_scale;
577 ainfo.mdrain_rate = 33000;
581 ainfo.gr_only_once = 1;
582 ainfo.gr_en = 1;
583 ainfo.gdrain_rate = 0;
584 res_vid = nv3_get_param(res_info, state, &ainfo);
585 res_vid = ainfo.converged;
588 ainfo.vid_en = 1;
589 ainfo.vid_only_once = 1;
590 ainfo.gr_en = 1;
591 ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
592 ainfo.vdrain_rate = 0;
593 res_gr = nv3_get_param(res_info, state, &ainfo);
594 res_gr = ainfo.converged;
601 if (!ainfo.gr_en) ainfo.gdrain_rate = 0;
602 if (!ainfo.vid_en) ainfo.vdrain_rate = 0;
603 res_gr = nv3_get_param(res_info, state, &ainfo);
604 res_info->valid = ainfo.converged;