Re: [RFC 12/22] dm: add a hidden link to efi object

Simon Glass
2021-10-10T14:16:58Z

Hi Takahiro,

On Thu, 30 Sept 2021 at 23:04, AKASHI Takahiro
<takahiro.akashi@linaro.org> wrote:
>
> This member field in udevice will be used to dereference from udevice
> to efi_object (or efi_handle).
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> ---
> include/dm/device.h | 4 ++++
> 1 file changed, 4 insertions(+)

I think this should be generalised.

Can we add a simple API for attaching things to devices? Something like:

config DM_TAG
bool "Support tags attached to devices"

enum dm_tag_t {
DM_TAG_EFI = 0,

DM_TAG_COUNT,
};

ret = dev_tag_set_ptr(dev, DM_TAG_EFI, ptr);

void *ptr = dev_tag_get_ptr(dev, DM_TAG_EFI);

ulong val = dev_tag_get_val(dev, DM_TAG_EFI);

Under the hood I think for now we could have a simple list of tags for
all of DM:

struct dmtag_node {
struct list_head sibling;
struct udevice *dev;
enum dm_tag_t tag;
union {
void *ptr;
ulong val;
};
};

This can be useful in other situations, for example I think we need to
be able to send an event when a device is probed so that other devices
(with tags attached) can take action. But in any case, it makes the
API separate from the data structure, so aids refactoring later.

If we find that this is slow we can change the impl, but I doubt it
will matter fornow.

>
> diff --git a/include/dm/device.h b/include/dm/device.h
> index 0a9718a5b81a..33b09a836f06 100644
> --- a/include/dm/device.h
> +++ b/include/dm/device.h
> @@ -190,6 +190,10 @@ struct udevice {
> #if CONFIG_IS_ENABLED(DM_DMA)
> ulong dma_offset;
> #endif
> +#if CONFIG_IS_ENABLED(EFI_LOADER)
> + /* link to efi_object */
> + void *efi_obj;
> +#endif
> };
>
> /**
> --
> 2.33.0
>

Regards,
Simon