1*02c801a5SLawrence Tang /** 2*02c801a5SLawrence Tang * Functions for generating psuedo-random CPER generic processor sections. 3*02c801a5SLawrence Tang * 4*02c801a5SLawrence Tang * Author: Lawrence.Tang@arm.com 5*02c801a5SLawrence Tang **/ 6*02c801a5SLawrence Tang 7*02c801a5SLawrence Tang #include <stdlib.h> 8*02c801a5SLawrence Tang #include "../../edk/BaseTypes.h" 9*02c801a5SLawrence Tang #include "../gen-utils.h" 10*02c801a5SLawrence Tang #include "gen-section-generic.h" 11*02c801a5SLawrence Tang 12*02c801a5SLawrence Tang //Generates a single psuedo-random generic processor section, saving the resulting address to the given 13*02c801a5SLawrence Tang //location. Returns the size of the newly created section. 14*02c801a5SLawrence Tang size_t generate_section_generic(void** location) 15*02c801a5SLawrence Tang { 16*02c801a5SLawrence Tang //Create random bytes. 17*02c801a5SLawrence Tang size_t size = generate_random_section(location, 192); 18*02c801a5SLawrence Tang 19*02c801a5SLawrence Tang //Set reserved locations to zero. 20*02c801a5SLawrence Tang UINT8* start_byte = (UINT8*)*location; 21*02c801a5SLawrence Tang *((UINT64*)start_byte) &= 0xFFF; 22*02c801a5SLawrence Tang *(start_byte + 12) &= 0b111; 23*02c801a5SLawrence Tang *((UINT16*)(start_byte + 14)) = 0x0; 24*02c801a5SLawrence Tang 25*02c801a5SLawrence Tang return size; 26*02c801a5SLawrence Tang }