On 12/04/2019 10:33, Laszlo Ersek wrote:
> On 04/09/19 13:08, Anthony PERARD wrote:
>> @@ -72,7 +81,42 @@ XenGetE820Map (
>>      return EFI_SUCCESS;
>>    }
>>  
>> -  return EFI_NOT_FOUND;
>> +  //
>> +  // Otherwise, get the E820 table from the Xen hypervisor
>> +  //
>> +
>> +  if (E820EntriesCount > 0) {
>> +    *Entries = E820Entries;
>> +    *Count = E820EntriesCount;
>> +    return EFI_SUCCESS;
>> +  }
>> +
>> +  Parameters.nr_entries = 128;
>> +  set_xen_guest_handle (Parameters.buffer, E820Entries);
>> +
>> +  // Returns a errno
>> +  ReturnCode = XenHypercallMemoryOp (XENMEM_memory_map, &Parameters);
>> +  ASSERT (ReturnCode == 0);
>> +
>> +  E820EntriesCount = Parameters.nr_entries;
>> +
>> +  //
>> +  // Sort E820 entries
>> +  //
>> +  for (LoopIndex = 1; LoopIndex < E820EntriesCount; LoopIndex++) {
>> +    for (Index = LoopIndex; Index < E820EntriesCount; Index++) {
>> +      if (E820Entries[Index - 1].BaseAddr > E820Entries[Index].BaseAddr) {
>> +        TmpEntry = E820Entries[Index];
>> +        E820Entries[Index] = E820Entries[Index - 1];
>> +        E820Entries[Index - 1] = TmpEntry;
>> +      }
>> +    }
>> +  }
>> +
>> +  *Count = E820EntriesCount;
>> +  *Entries = E820Entries;
>> +
>> +  return EFI_SUCCESS;
>>  }
>>  
>>  /**
>>
> "xen_memory_map_t" and "set_xen_guest_handle" look really foreign in edk2, 
> but I guess we'll have to live with them.

For historical reasons, the ABI was described using C structures (and in
hindsight, a very poor idea, seeing as it all went to pot when "unsigned
long" changed size for 64bit), and the expectation was that every
downstream project wanting to make hypercalls would copy the "canonical
copy" of the ABI, which turns it into a defacto API as well.

However, there is absolutely nothing stopping a downstream project
deciding not to take this route, and having Xen's ABI expressed in their
local style.  Ultimately, that is down to the maintainers of the project
to decide which approach they would prefer.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to