Lines Matching refs:fw
298 static int check_register(struct host1x_firewall *fw, unsigned long offset) in check_register() argument
300 if (fw->job->is_addr_reg(fw->dev, fw->class, offset)) { in check_register()
301 if (!fw->num_relocs) in check_register()
304 if (!check_reloc(fw->reloc, fw->cmdbuf, fw->offset)) in check_register()
307 fw->num_relocs--; in check_register()
308 fw->reloc++; in check_register()
314 static int check_mask(struct host1x_firewall *fw) in check_mask() argument
316 u32 mask = fw->mask; in check_mask()
317 u32 reg = fw->reg; in check_mask()
321 if (fw->words == 0) in check_mask()
325 ret = check_register(fw, reg); in check_mask()
329 fw->words--; in check_mask()
330 fw->offset++; in check_mask()
339 static int check_incr(struct host1x_firewall *fw) in check_incr() argument
341 u32 count = fw->count; in check_incr()
342 u32 reg = fw->reg; in check_incr()
346 if (fw->words == 0) in check_incr()
349 ret = check_register(fw, reg); in check_incr()
354 fw->words--; in check_incr()
355 fw->offset++; in check_incr()
362 static int check_nonincr(struct host1x_firewall *fw) in check_nonincr() argument
364 u32 count = fw->count; in check_nonincr()
368 if (fw->words == 0) in check_nonincr()
371 ret = check_register(fw, fw->reg); in check_nonincr()
375 fw->words--; in check_nonincr()
376 fw->offset++; in check_nonincr()
383 static int validate(struct host1x_firewall *fw, struct host1x_job_gather *g) in validate() argument
385 u32 *cmdbuf_base = (u32 *)fw->job->gather_copy_mapped + in validate()
389 if (!fw->job->is_addr_reg) in validate()
392 fw->words = g->words; in validate()
393 fw->cmdbuf = g->bo; in validate()
394 fw->offset = 0; in validate()
396 while (fw->words && !err) { in validate()
397 u32 word = cmdbuf_base[fw->offset]; in validate()
400 fw->mask = 0; in validate()
401 fw->reg = 0; in validate()
402 fw->count = 0; in validate()
403 fw->words--; in validate()
404 fw->offset++; in validate()
408 fw->class = word >> 6 & 0x3ff; in validate()
409 fw->mask = word & 0x3f; in validate()
410 fw->reg = word >> 16 & 0xfff; in validate()
411 err = check_mask(fw); in validate()
416 fw->reg = word >> 16 & 0xfff; in validate()
417 fw->count = word & 0xffff; in validate()
418 err = check_incr(fw); in validate()
424 fw->reg = word >> 16 & 0xfff; in validate()
425 fw->count = word & 0xffff; in validate()
426 err = check_nonincr(fw); in validate()
432 fw->mask = word & 0xffff; in validate()
433 fw->reg = word >> 16 & 0xfff; in validate()
434 err = check_mask(fw); in validate()
454 struct host1x_firewall fw; in copy_gathers() local
459 fw.job = job; in copy_gathers()
460 fw.dev = dev; in copy_gathers()
461 fw.reloc = job->relocarray; in copy_gathers()
462 fw.num_relocs = job->num_relocs; in copy_gathers()
463 fw.class = 0; in copy_gathers()
495 if (validate(&fw, g)) in copy_gathers()
502 if (fw.num_relocs) in copy_gathers()