Rada v cistem C/C++

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
oneb1t
Začátečník
Začátečník
Uživatelský avatar
Registrován: 22. dub 2010

Rada v cistem C/C++

Příspěvek od oneb1t »

ne jeste ne tyhle modifikace budou potrebovat jeste zasah do getvoltageinfo a to jeste neni jasny co tam ktera hodnota vlastne dela

jestli tu nekdo umi dobre v cistym C/C++ tak by se mi hodila celkem rada abych s tim pohnul..

Kód: Vybrat vše

typedef struct  _GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2
{
  UCHAR    ucVoltageType;               // Input: To tell which voltage to set 
  UCHAR    ucVoltageMode;               // Input: Indicate action: Get voltage info
  USHORT   usVoltageLevel;              // Input: real voltage level in unit of mv or Voltage Phase
  ULONG    ulSCLKFreq;                  
}GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2;

typedef struct  _GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2
{
   USHORT   usVoltageLevel;                               // real voltage level in unit of mv
   USHORT   usVoltageId;                                  // Voltage Id programmed in Voltage Regulator
   ULONG    ulReseved;
}GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2;


union get_voltage_info {
	struct _GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 in;
	struct _GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2 evv_out;
};

int amdgpu_atombios_get_voltage_evv(struct amdgpu_device *adev,
				    u16 virtual_voltage_id,
				    u16 *voltage)
{
	int index = GetIndexIntoMasterTable(COMMAND, GetVoltageInfo);
	u32 entry_id;
	u32 count = adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count;
	union get_voltage_info args;

	for (entry_id = 0; entry_id < count; entry_id++) {
		if (adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].v ==
		    virtual_voltage_id)
			break;
	}

	if (entry_id >= count)
		return -EINVAL;

	args.in.ucVoltageType = VOLTAGE_TYPE_VDDC;
	args.in.ucVoltageMode = ATOM_GET_VOLTAGE_EVV_VOLTAGE;
	args.in.usVoltageLevel = cpu_to_le16(virtual_voltage_id);
	args.in.ulSCLKFreq =
		cpu_to_le32(adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].clk);

	amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args);

	*voltage = le16_to_cpu(args.evv_out.usVoltageLevel);

	return 0;
}
z tohodle mi vychazi ze najdu offset pro GetVoltageInfo a v tyhle tabulce jsou ulozeny data ve stylu
2byte usVoltageLevel
2byte usVoltageId
4byte reserved (takze prazdno)

ale ja najdu tabulku a kdyz se ji snazim parsnout podle tohodle systemu tak me vychazej blaboly :D kdyby se v tom nekdo chtel pohrabat s referencema tak http://lxr.free-electrons.com/source/dr ... os.c#L3273
Odpovědět

Zpět na „Programování a web“