Lines Matching refs:cache
43 void MI_InitCache(MICache *cache, u32 page, void *buffer, u32 length) in MI_InitCache() argument
48 cache->pagewidth = MATH_CTZ(page); in MI_InitCache()
49 cache->valid_total = 0; in MI_InitCache()
50 cache->invalid_total = 0; in MI_InitCache()
51 cache->loading_total = 0; in MI_InitCache()
52 cache->valid = NULL; in MI_InitCache()
53 cache->invalid = NULL; in MI_InitCache()
54 cache->loading = NULL; in MI_InitCache()
60 cache->invalid_total += total; in MI_InitCache()
65 inf->next = cache->invalid; in MI_InitCache()
66 cache->invalid = inf; in MI_InitCache()
85 static void WFSi_TouchCachePages(MICache *cache, u32 head, u32 bitset) in WFSi_TouchCachePages() argument
91 for (load = &cache->loading; *load; load = &(*load)->next) in WFSi_TouchCachePages()
102 int rest = MATH_CountPopulation(bitset) - cache->invalid_total; in WFSi_TouchCachePages()
105 int del = cache->valid_total; in WFSi_TouchCachePages()
107 for (valid = &cache->valid; *valid; valid = &(*valid)->next) in WFSi_TouchCachePages()
112 for (pp = &cache->invalid; *pp; pp = &(*pp)->next) in WFSi_TouchCachePages()
117 cache->valid_total -= rest; in WFSi_TouchCachePages()
118 cache->invalid_total += rest; in WFSi_TouchCachePages()
125 while (cache->invalid && bitset) in WFSi_TouchCachePages()
127 MICachePage *p = cache->invalid; in WFSi_TouchCachePages()
129 cache->invalid = p->next; in WFSi_TouchCachePages()
134 --cache->invalid_total; in WFSi_TouchCachePages()
135 --cache->loading_total; in WFSi_TouchCachePages()
150 cache->invalid_total + cache->valid_total, in WFSi_TouchCachePages()
172 BOOL MI_ReadCache(MICache *cache, void *buffer, u32 offset, u32 length) in MI_ReadCache() argument
177 const u32 unit = (1UL << cache->pagewidth); in MI_ReadCache()
178 u32 head = (offset >> cache->pagewidth); in MI_ReadCache()
179 u32 tail = ((offset + length + unit - 1UL) >> cache->pagewidth); in MI_ReadCache()
188 for (pp = &cache->valid; *pp && bitset; pp = &(*pp)->next) in MI_ReadCache()
196 p->next = cache->valid; in MI_ReadCache()
197 cache->valid = p; in MI_ReadCache()
198 pp = &cache->valid; in MI_ReadCache()
203 int dst = (int)((p->offset << cache->pagewidth) - offset); in MI_ReadCache()
225 WFSi_TouchCachePages(cache, head, bitset); in MI_ReadCache()
247 void MI_LoadCache(MICache *cache, MIDevice *device) in MI_LoadCache() argument
252 MICachePage *p = cache->loading; in MI_LoadCache()
259 (p->offset << cache->pagewidth), in MI_LoadCache()
260 (1UL << cache->pagewidth)); in MI_LoadCache()
264 cache->loading = p->next; in MI_LoadCache()
265 p->next = cache->valid; in MI_LoadCache()
266 cache->valid = p; in MI_LoadCache()
267 ++cache->valid_total; in MI_LoadCache()
268 ++cache->loading_total; in MI_LoadCache()