
Hi Alex,
On 18 June 2018 at 09:00, Alexander Graf agraf@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...
Regards, Simon