예제 #1
0
void decode_g80_3d_verbose(struct pushbuf_decode_state *pstate)
{
	int mthd = pstate->mthd;
	uint32_t data = pstate->mthd_data;

	if (check_addresses_verbose(pstate, g80_3d_addresses))
	{ }
	else if (mthd == 0x140c && dump_vp) // VP_START_ID
		g80_3d_disassemble(g80_3d.vp.buffer, "vp", data);
	else if (mthd == 0x1414 && dump_fp) // FP_START_ID
		g80_3d_disassemble(g80_3d.fp.buffer, "fp", data);
	else if (mthd == 0x1410 && dump_gp) // GP_START_ID
		g80_3d_disassemble(g80_3d.gp.buffer, "gp", data);
	else if (mthd >= 0x1444 && mthd < 0x1448 + 0x8 * 3)
	{
		int i;
		for (i = 0; i < 3; ++i)
		{
			if (dump_tsc && g80_3d.tsc.buffer && mthd == 0x1444 + i * 0x8) // BIND_TSC[i]
			{
				int j, tsc = (data >> 12) & 0xff;
				mmt_debug("bind tsc[%d]: 0x%08x\n", i, tsc);
				uint32_t *tsc_data = (uint32_t *)&g80_3d.tsc.buffer->data[8 * tsc];

				for (j = 0; j < 8; ++j)
					decode_tsc(tsc, j, tsc_data);

				break;
			}
			if (dump_tic && g80_3d.tic.buffer && mthd == 0x1448 + i * 0x8) // BIND_TIC[i]
			{
				int j, tic = (data >> 9) & 0x1ffff;
				mmt_debug("bind tic[%d]: 0x%08x\n", i, tic);
				uint32_t *tic_data = (uint32_t *)&g80_3d.tic.buffer->data[8 * tic];

				for (j = 0; j < 8; ++j)
					decode_tic(tic, j, tic_data);

				break;
			}
예제 #2
0
void decode_g80_compute_verbose(struct gpu_object *obj, struct pushbuf_decode_state *pstate)
{
	int mthd = pstate->mthd;
	uint32_t data = pstate->mthd_data;
	struct g80_compute_data *objdata = obj->class_data;

	if (check_addresses_verbose(pstate, objdata->addresses))
	{ }
	else if (mthd == 0x0378)
		objdata->linked_tsc = data;
	else if (mthd == 0x03b4 && dump_cp) // CP_START_ID
		g80_3d_disassemble(pstate, &objdata->cp, "cp", data);
	else if (mthd == 0x3c0 || mthd == 0x3c4)
	{
		uint32_t is_tsc = mthd == 0x3c0;

		if (dump_tsc && objdata->tsc.gpu_mapping && (
			    is_tsc || objdata->linked_tsc))
		{
			int tsc;
			if (is_tsc)
				tsc = (data >> 12) & 0xff;
			else