Lines Matching refs:fw

270 static int check_register(struct host1x_firewall *fw, unsigned long offset)  in check_register()  argument
272 if (!fw->job->is_addr_reg) in check_register()
275 if (fw->job->is_addr_reg(fw->dev, fw->class, offset)) { in check_register()
276 if (!fw->num_relocs) in check_register()
279 if (!check_reloc(fw->reloc, fw->cmdbuf, fw->offset)) in check_register()
282 fw->num_relocs--; in check_register()
283 fw->reloc++; in check_register()
289 static int check_class(struct host1x_firewall *fw, u32 class) in check_class() argument
291 if (!fw->job->is_valid_class) { in check_class()
292 if (fw->class != class) in check_class()
295 if (!fw->job->is_valid_class(fw->class)) in check_class()
302 static int check_mask(struct host1x_firewall *fw) in check_mask() argument
304 u32 mask = fw->mask; in check_mask()
305 u32 reg = fw->reg; in check_mask()
309 if (fw->words == 0) in check_mask()
313 ret = check_register(fw, reg); in check_mask()
317 fw->words--; in check_mask()
318 fw->offset++; in check_mask()
327 static int check_incr(struct host1x_firewall *fw) in check_incr() argument
329 u32 count = fw->count; in check_incr()
330 u32 reg = fw->reg; in check_incr()
334 if (fw->words == 0) in check_incr()
337 ret = check_register(fw, reg); in check_incr()
342 fw->words--; in check_incr()
343 fw->offset++; in check_incr()
350 static int check_nonincr(struct host1x_firewall *fw) in check_nonincr() argument
352 u32 count = fw->count; in check_nonincr()
356 if (fw->words == 0) in check_nonincr()
359 ret = check_register(fw, fw->reg); in check_nonincr()
363 fw->words--; in check_nonincr()
364 fw->offset++; in check_nonincr()
371 static int validate(struct host1x_firewall *fw, struct host1x_job_gather *g) in validate() argument
373 u32 *cmdbuf_base = (u32 *)fw->job->gather_copy_mapped + in validate()
375 u32 job_class = fw->class; in validate()
378 fw->words = g->words; in validate()
379 fw->cmdbuf = g->bo; in validate()
380 fw->offset = 0; in validate()
382 while (fw->words && !err) { in validate()
383 u32 word = cmdbuf_base[fw->offset]; in validate()
386 fw->mask = 0; in validate()
387 fw->reg = 0; in validate()
388 fw->count = 0; in validate()
389 fw->words--; in validate()
390 fw->offset++; in validate()
394 fw->class = word >> 6 & 0x3ff; in validate()
395 fw->mask = word & 0x3f; in validate()
396 fw->reg = word >> 16 & 0xfff; in validate()
397 err = check_class(fw, job_class); in validate()
399 err = check_mask(fw); in validate()
404 fw->reg = word >> 16 & 0xfff; in validate()
405 fw->count = word & 0xffff; in validate()
406 err = check_incr(fw); in validate()
412 fw->reg = word >> 16 & 0xfff; in validate()
413 fw->count = word & 0xffff; in validate()
414 err = check_nonincr(fw); in validate()
420 fw->mask = word & 0xffff; in validate()
421 fw->reg = word >> 16 & 0xfff; in validate()
422 err = check_mask(fw); in validate()
441 struct host1x_firewall fw; in copy_gathers() local
446 fw.job = job; in copy_gathers()
447 fw.dev = dev; in copy_gathers()
448 fw.reloc = job->relocs; in copy_gathers()
449 fw.num_relocs = job->num_relocs; in copy_gathers()
450 fw.class = job->class; in copy_gathers()
490 if (validate(&fw, g)) in copy_gathers()
497 if (fw.num_relocs) in copy_gathers()