ref: c748ba68a174ed7f2cc4ac8975d72b9b959d6b63
dir: /hantest.c/
#include <u.h> #include <libc.h> static u32int *g1, *g2; void main(int argc, char **argv) { ARGBEGIN{ }ARGEND if((g1 = segattach(0, "vpu_hantro_g1", 0, 0x200)) == (void*)-1) sysfatal("no G1"); if((g2 = segattach(0, "vpu_hantro_g2", 0, 0x40c+4)) == (void*)-1) sysfatal("no G2"); print("bus: "); switch((g1[50]>>16)&7){ case 1: print("ahb master, ahb slave"); break; case 2: print("ocp master, ocp slave"); break; case 3: print("axi master, axi slave"); break; case 4: print("axi master, apb slave"); break; case 5: print("axi master, ahb slave"); break; default: print("ERROR\n"); break; } char *buswidth[] = {"ERROR", "32", "64", "128"}; print(", %s bit\n", buswidth[(g1[50]>>12)&3]); print("cores: %d\n", 1+(g1[54]>>7)&7); print("g1: h.264=%d vp8=%d max_owidth=%d\n", !!(g1[57]&(1<<31)), (g1[54]&(1<<23)) && (g1[57]&(1<<20)), ((g1[54]>>14)&3)<<11 | g1[50]&((1<<11)-1) ); print("g2: hevc=%d (main%d) vp9=%d (profile %d) downscale=%d max_owidth=%d max_oheight=%d\n", !!(g2[23]&(1<<0)), 8 + 2*((g2[23]>>8)&0xf), !!(g2[23]&(1<<1)), 0 + 2*((g2[23]>>12)&0xf), !!(g2[23]&(1<<3)), ((g2[54]>>14)&3)<<11 | g2[50]&((1<<11)-1), g2[56]&((1<<13)-1) ); print("pp: exists=%d dithering=%d deinterlace=%d upscale=%d downscale=%d max_owidth=%d\n", !!(g1[99]&(1<<31)), !!(g1[100]&(1<<28)), (g1[100]&(1<<25)) && (g1[99]&(1<<30)), !!((g1[100]>>26)&3), ((g1[100]>>26)&3) == 3, g1[100]&((1<<13)-1) ); segdetach(g1); segdetach(g2); exits(nil); }