public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Michael Brown <mcb30@ipxe.org>
To: Laszlo Ersek <lersek@redhat.com>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>,
	Leif Lindholm <leif.lindholm@linaro.org>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Gao, Liming" <liming.gao@intel.com>
Subject: Re: [PATCH] MdePkg: add big-endian MMIO BaseBeIoLib
Date: Mon, 16 Apr 2018 23:14:25 +0100	[thread overview]
Message-ID: <52f131ae-ed51-9276-ac91-e3dded7472e2@ipxe.org> (raw)
In-Reply-To: <09cc135a-c3b7-bcbd-1a71-6454e3ba7623@redhat.com>

On 16/04/18 21:42, Laszlo Ersek wrote:
> On 04/16/18 16:34, Michael Brown wrote:
>> On 16/04/18 15:10, Kinney, Michael D wrote:
>>> I think we only need a single lib class and lib
>>> Instance that does the byte swap and we should
>>> not use Le or Be in any of the names of the class,
>>> instance, or APIs.  Just "Swap".
>>
>> I may have misunderstood, but wouldn't using "Swap" within the API names
>> effectively encode knowledge of the endianness of the _build_ platform
>> into the source code?  This would prevent the same source code being
>> built for both little-endian and big-endian CPUs.
> 
> Under this scenario, all drivers meant to be portable to both byte
> orders would have to:
> - link against both IoLib and IoSwapLib,
> - determine at device binding time, from CPU endianness and device
>    endianness combined, whether swapping was needed for that device,
> - call the IoLib or IoSwapLib APIs through wrapper functions, or
>    function pointers.

Given that "all drivers meant to be portable to both byte orders" would 
include almost the complete set of PCI device drivers, that sounds like 
an incredibly large amount of unnecessarily duplicated boilerplate code.

Maybe we need some kind of wrapper library that provides an abstraction 
layer to automatically determine whether or not swapping is needed and 
then call the appropriate IoLib or IoSwapLib API function.  For example, 
the wrapper library could provide a function 
SwapIfNeededForBigEndianDeviceMmioRead16() which would perform a runtime 
check on each call to determine the current CPU endianness and then call 
MmioRead16() or SwapMmioRead16() as appropriate.

Michael


  reply	other threads:[~2018-04-16 22:14 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-13 17:42 [PATCH] MdePkg: add big-endian MMIO BaseBeIoLib Leif Lindholm
2018-04-13 19:24 ` Kinney, Michael D
2018-04-13 19:31   ` Leif Lindholm
2018-04-13 23:32     ` Kinney, Michael D
2018-04-16 10:07       ` Leif Lindholm
2018-04-16 14:10         ` Kinney, Michael D
2018-04-16 14:34           ` Michael Brown
2018-04-16 20:42             ` Laszlo Ersek
2018-04-16 22:14               ` Michael Brown [this message]
2018-04-17  8:01                 ` Laszlo Ersek
2018-04-17  8:24                   ` Michael Brown
2018-04-17  9:57                     ` Laszlo Ersek
2018-04-17 13:26               ` Leif Lindholm
2018-04-17 15:20                 ` Kinney, Michael D
2018-04-17  6:57           ` Udit Kumar
2018-04-16 19:32         ` Laszlo Ersek
2018-04-17  8:15           ` Udit Kumar
2018-04-17  9:42             ` Laszlo Ersek
2018-04-17 10:32               ` Udit Kumar
2018-04-17 13:55           ` (spawning off more style discussion) Leif Lindholm
2018-04-18  8:51             ` Laszlo Ersek
2018-04-16  4:39 ` [PATCH] MdePkg: add big-endian MMIO BaseBeIoLib Udit Kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52f131ae-ed51-9276-ac91-e3dded7472e2@ipxe.org \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox