acpigen: Add new function acpigen_pop_len
acpigen_patch_len doesn't really need its argument: length always includes everything from length bytes to current pointer and never bytes before it. Hence just infer all the info implicitly. Argument is wrong in several places through the codebase but ACPI parsing is lax enough to swallow incorrect SSDT. After this function is used throughout the codebase, these issues will be fixed. Change-Id: I9fa536a614c5595146a7a1cd71f2676d8a8d9c2f Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com> Reviewed-on: http://review.coreboot.org/7325 Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins)
This commit is contained in:
		
				
					committed by
					
						
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							689ddf6832
						
					
				
				
					commit
					430363ace7
				
			@@ -57,6 +57,19 @@ void acpigen_patch_len(int len)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void acpigen_pop_len(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int len;
 | 
				
			||||||
 | 
						ASSERT(ltop > 0)
 | 
				
			||||||
 | 
						char *p = len_stack[--ltop];
 | 
				
			||||||
 | 
						len = gencurrent - p;
 | 
				
			||||||
 | 
						ASSERT(len <= ACPIGEN_MAXLEN)
 | 
				
			||||||
 | 
						/* generate store length for 0xfff max */
 | 
				
			||||||
 | 
						p[0] = (0x40 | (len & 0xf));
 | 
				
			||||||
 | 
						p[1] = (len >> 4 & 0xff);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void acpigen_set_current(char *curr)
 | 
					void acpigen_set_current(char *curr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	gencurrent = curr;
 | 
						gencurrent = curr;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int acpigen_write_len_f(void);
 | 
					int acpigen_write_len_f(void);
 | 
				
			||||||
void acpigen_patch_len(int len);
 | 
					void acpigen_patch_len(int len);
 | 
				
			||||||
 | 
					void acpigen_pop_len(void);
 | 
				
			||||||
void acpigen_set_current(char *curr);
 | 
					void acpigen_set_current(char *curr);
 | 
				
			||||||
char *acpigen_get_current(void);
 | 
					char *acpigen_get_current(void);
 | 
				
			||||||
int acpigen_write_package(int nr_el);
 | 
					int acpigen_write_package(int nr_el);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user