Hi Alex, On 18 June 2018 at 09:00, Alexander Graf <ag...@suse.de> wrote: > On 06/18/2018 04:08 PM, Simon Glass wrote: >> >> At present this function takes a pointer as its argument, then passes this >> to efi_allocate_pages(), which actually takes an address. It uses casts, >> which are not supported on sandbox. > > > I think this is the big API misunderstanding that caused our disagreements: > efi_allocate_pages(uint64_t *memory) gets a uint64_t *address as input > parameter, but uses the same field to actually return a void * pointer. This > is the function that really converts between virtual and physical address > space. > > This is the explicit wording of the spec[1] page 168: > > The AllocatePages() function allocates the requested number of pages and > returns a pointer to the base address of the page range in the location > referenced by Memory.
The code at present uses *Memory as the address on both input and output. The spec is confusing, but I suspect that is what it meant. > > So yes, we have to cast. There is no other way around it without completely > creating a trainwreck of the API. efi_allocate_pages_ext() can do this though. We don't need to copy the API to efi_allocate_pages(). Of course this is future possible work, we don't need to do it now. > > > Alex > > [1] > http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_7_A%20Sept%206.pdf > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot