;
; Copyright (c) 2011, Hewlett-Packard Company. All rights reserved.<BR>
; 
; SPDX-License-Identifier: BSD-2-Clause-Patent
; 

  LOCAL &fvbase &fvsig &fvsig &ffsoffset &ffsfilesize &ffsfileaddr
  ENTRY &fvbase

  &fvsig=Data.Long(a:&fvbase+0x28)
  if &fvsig!=0x4856465F
  (
	  print "FV does not have proper signature, exiting"
	  return
  )
  
  print "FV signature found"
  
  &fvlen=Data.Long(a:&fvbase+0x20)
  
  ; first ffs file is after fv header, use headerlength field
  &ffsoffset=(Data.Long(a:&fvbase+0x30)&0xffff)
  
  ; loop through ffs files
  &ffsfilesize=1
  while (&ffsfilesize!=0)&&(&ffsoffset<(&fvlen))
	(
	  &ffsfileaddr=&fvbase+&ffsoffset
	  ;print "found ffs file at &ffsfileaddr"
	  
		; process ffs file and increment by ffs file size field
 		gosub ProcessFfsFile &ffsfileaddr
 		
 		&ffsfilesize=(Data.Long(a:&ffsfileaddr+0x14)&0x00ffffff)
 		;print "ffsfilesize is &ffsfilesize"
 		
	  &ffsoffset=&ffsoffset+&ffsfilesize

    &ffsfilesize=(Data.Long(a:&fvbase+&ffsoffset+0x14)&0x00ffffff)
    ;print "ffsfilesize now is &ffsfilesize"
    if &ffsfilesize==0xffffff
 		(
 		  enddo
 		)
 		
	  ; align to next 8 byte boundary
    if (&ffsoffset&0x7)!=0
	  (
		  &ffsoffset=&ffsoffset+(0x8-(&ffsoffset&0x7))
	  )
	  
  ) ; end fv ffs loop

enddo

ProcessFfsFile:
  LOCAL &ffsfilestart &ffsfilesize &ffsfiletype &secoffset &secsize
  ENTRY &ffsfilestart

  ;print "processing ffs file at &ffsfilestart"
  &ffsfilesize=Data.Long(a:&ffsfilestart+0x14)
  &ffsfiletype=(&ffsfilesize&0xff000000)>>24.
  &ffsfilesize=&ffsfilesize&0x00ffffff

  if &ffsfiletype==0
  (
    return
  )

	print "ffs file at &ffsfilestart size &ffsfilesize type &ffsfiletype"

  &secoffset=&ffsfilestart+0x18
  
  ; loop through sections in file
  while &secoffset<(&ffsfilestart+&ffsfilesize)
	(
	  print "secoffset at &secoffset"
	  
		; process fv section and increment section offset by size
    &secsize=(Data.Long(a:&secoffset)&0x00ffffff)
    
    gosub ProcessFvSection &secoffset
    
    
		&secoffset=(&secoffset+&secsize)

    ;print "secsize is &secsize"
    ;print "secoffset at &secoffset"
    
	  ; align to next 4 byte boundary
    if (&secoffset&0x3)!=0
		(
			&secoffset=&secoffset+(0x4-(&secoffset&0x3))
		)
	) ; end section loop
  return
  
  
ProcessFvSection:
  LOCAL &secstart &sectionsize &sectiontype &secoffset &secsize
  ENTRY &secstart

	&sectionsize=Data.Long(a:&secstart)
  &sectiontype=((&sectionsize&0xff000000)>>24.)
  &sectionsize=&sectionsize&0x00ffffff;

	print "fv section at &secstart size &sectionsize type &sectiontype"

	if &sectiontype==0x10 ; PE32
  (
    do EfiProcessPeImage (&secstart+0x4)
	)
	else
	(
	  if &sectiontype==0x12 ; TE
	  (
		  do EfiProcessTeImage (&secstart+0x4)
 	  )
 	  else
    (
      print "unknown section type"
    )
 	)
  
  return
