acpigen: Add and use acpigen_write_method.

The sequence of bytes to create a method is used several times in codebase.
Put it into a function with logical arguments rather than duplicating magic
bytes everywhere.

Change-Id: I0e55d8dc7d5e8e92a521c7a83117c470d0614008
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/7347
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
This commit is contained in:
Vladimir Serbinenko
2014-11-05 10:28:28 +01:00
parent f9cdb486d1
commit 80fb8edaea
6 changed files with 25 additions and 41 deletions

View File

@@ -395,6 +395,19 @@ int acpigen_write_empty_PTC(void)
return len + nlen; return len + nlen;
} }
int acpigen_write_method(const char *name, int nargs)
{
int len;
/* method op */
len = acpigen_emit_byte(0x14);
len += acpigen_write_len_f();
len += acpigen_emit_namestring(name);
len += acpigen_emit_byte(nargs & 7);
return len;
}
/* /*
* Generates a func with max supported P-states. * Generates a func with max supported P-states.
*/ */
@@ -407,18 +420,13 @@ int acpigen_write_PPC(u8 nr)
} }
*/ */
int len; int len;
/* method op */ len = acpigen_write_method("_PPC", 0);
acpigen_emit_byte(0x14);
len = acpigen_write_len_f();
len += acpigen_emit_namestring("_PPC");
/* no fnarg */
acpigen_emit_byte(0x00);
/* return */ /* return */
acpigen_emit_byte(0xa4); acpigen_emit_byte(0xa4);
/* arg */ /* arg */
len += acpigen_write_byte(nr); len += acpigen_write_byte(nr);
/* add all single bytes */ /* add all single bytes */
len += 3; len += 1;
acpigen_patch_len(len - 1); acpigen_patch_len(len - 1);
return len; return len;
} }
@@ -436,18 +444,14 @@ int acpigen_write_PPC_NVS(void)
} }
*/ */
int len; int len;
/* method op */
acpigen_emit_byte(0x14); len = acpigen_write_method("_PPC", 0);
len = acpigen_write_len_f();
len += acpigen_emit_namestring("_PPC");
/* no fnarg */
acpigen_emit_byte(0x00);
/* return */ /* return */
acpigen_emit_byte(0xa4); acpigen_emit_byte(0xa4);
/* arg */ /* arg */
len += acpigen_emit_namestring("PPCM"); len += acpigen_emit_namestring("PPCM");
/* add all single bytes */ /* add all single bytes */
len += 3; len += 1;
acpigen_patch_len(len - 1); acpigen_patch_len(len - 1);
return len; return len;
} }
@@ -463,10 +467,7 @@ int acpigen_write_TPC(const char *gnvs_tpc_limit)
*/ */
int len; int len;
len = acpigen_emit_byte(0x14); /* MethodOp */ len = acpigen_write_method("_TPC", 0);
len += acpigen_write_len_f(); /* PkgLength */
len += acpigen_emit_namestring("_TPC");
len += acpigen_emit_byte(0x00); /* No Arguments */
len += acpigen_emit_byte(0xa4); /* ReturnOp */ len += acpigen_emit_byte(0xa4); /* ReturnOp */
len += acpigen_emit_namestring(gnvs_tpc_limit); len += acpigen_emit_namestring(gnvs_tpc_limit);
acpigen_patch_len(len - 1); acpigen_patch_len(len - 1);

View File

@@ -43,6 +43,7 @@ int acpigen_write_name_dword(const char *name, uint32_t val);
int acpigen_write_name_qword(const char *name, uint64_t val); int acpigen_write_name_qword(const char *name, uint64_t val);
int acpigen_write_name_byte(const char *name, uint8_t val); int acpigen_write_name_byte(const char *name, uint8_t val);
int acpigen_write_scope(const char *name); int acpigen_write_scope(const char *name);
int acpigen_write_method(const char *name, int nargs);
int acpigen_write_PPC(u8 nr); int acpigen_write_PPC(u8 nr);
int acpigen_write_PPC_NVS(void); int acpigen_write_PPC_NVS(void);
int acpigen_write_empty_PCT(void); int acpigen_write_empty_PCT(void);

View File

@@ -106,10 +106,7 @@ static void generate_C_state_entries(void)
if (!cpu || !cpu->cstates) if (!cpu || !cpu->cstates)
return; return;
acpigen_emit_byte(0x14); /* MethodOp */ acpigen_write_method("_CST", 0);
acpigen_write_len_f(); /* PkgLength */
acpigen_emit_namestring("_CST");
acpigen_emit_byte(0x00); /* No Arguments */
/* If running on AC power */ /* If running on AC power */
acpigen_emit_byte(0xa0); /* IfOp */ acpigen_emit_byte(0xa0); /* IfOp */

View File

@@ -106,10 +106,7 @@ static void generate_C_state_entries(void)
if (!cpu || !cpu->cstates) if (!cpu || !cpu->cstates)
return; return;
acpigen_emit_byte(0x14); /* MethodOp */ acpigen_write_method("_CST", 0);
acpigen_write_len_f(); /* PkgLength */
acpigen_emit_namestring("_CST");
acpigen_emit_byte(0x00); /* No Arguments */
/* If running on AC power */ /* If running on AC power */
acpigen_emit_byte(0xa0); /* IfOp */ acpigen_emit_byte(0xa0); /* IfOp */

View File

@@ -106,10 +106,7 @@ static void generate_C_state_entries(void)
if (!cpu || !cpu->cstates) if (!cpu || !cpu->cstates)
return; return;
acpigen_emit_byte(0x14); /* MethodOp */ acpigen_write_method("_CST", 0);
acpigen_write_len_f(); /* PkgLength */
acpigen_emit_namestring("_CST");
acpigen_emit_byte(0x00); /* No Arguments */
/* If running on AC power */ /* If running on AC power */
acpigen_emit_byte(0xa0); /* IfOp */ acpigen_emit_byte(0xa0); /* IfOp */

View File

@@ -115,12 +115,7 @@ drivers_lenovo_serial_ports_ssdt_generate(const char *scope,
acpigen_write_resourcetemplate_footer(reslen); acpigen_write_resourcetemplate_footer(reslen);
/* method op */ acpigen_write_method("_STA", 0);
acpigen_emit_byte(0x14);
acpigen_write_len_f();
acpigen_emit_namestring("_STA");
/* no fnarg */
acpigen_emit_byte(0x00);
/* return */ /* return */
acpigen_emit_byte(0xa4); acpigen_emit_byte(0xa4);
acpigen_write_byte(0xf); acpigen_write_byte(0xf);
@@ -151,11 +146,7 @@ drivers_lenovo_serial_ports_ssdt_generate(const char *scope,
acpigen_write_resourcetemplate_footer(reslen); acpigen_write_resourcetemplate_footer(reslen);
/* method op */ /* method op */
acpigen_emit_byte(0x14); acpigen_write_method("_STA", 0);
acpigen_write_len_f();
acpigen_emit_namestring("_STA");
/* no fnarg */
acpigen_emit_byte(0x00);
/* return */ /* return */
acpigen_emit_byte(0xa4); acpigen_emit_byte(0xa4);
acpigen_write_byte(0xf); acpigen_write_byte(0xf);