public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* Driver health : Posting message in MessageList
@ 2021-03-30  5:56 EDK
  2021-03-31 13:58 ` EDK
  0 siblings, 1 reply; 2+ messages in thread
From: EDK @ 2021-03-30  5:56 UTC (permalink / raw)
  To: discuss, devel; +Cc: daniel.samuelraj

[-- Attachment #1: Type: text/plain, Size: 6521 bytes --]

Hi ,

For our products, we have UEFI Driver and HII Driver as two separate images
(this is a requirement for our product because we want to keep UEFI Driver
as thin as possible).

   - Main role of UEFI Driver is providing boot services, reporting/solving
   health issues, posting messages in message list, EXT SPT etc.

FYI: UEFI Driver will install HII Config access protocol (*CAP*) and driver
health formset on the controller handle if the controller has health issue;
at this time, HII image won't be in picture (HII image come into play ONLY
when controller is healthy); if UEFI Driver detects controller is healthy
then it will not install HII Config access protocol (if it had installed,
it would uninstall before loading HII image from controller flash to host)

Note: We have our own API to load the HII Image from controller flash to
host

   - Role of HII is, installing HII config access protocol and Management
   formset on the controller handle and allowing the user to view
   controller/PD/VD/other hardware properties, perform various
   controller/PD/VD level operations etc.



Requirement (need to see whether this is feasible or not): There are cases
where our controller is healthy but we would like to post certain
informational messages in messageList.

How do I achieve this? That is I want UEFI Driver to have the capability to
post the message in messageList and our HII Image also to be
loaded/present.



Can UEFI Driver and HII driver install HII Config access protocol on the
same handle? AFAIK, the answer is “no”.

I experimented just adding the driver health formset to the package via the
HiiAddPackages() on the controller handle (that is from UEFI Driver I was
not installing HII CAP but just installed the formset on controller handle)
and it is not working. In this case HII image is also loaded (this means
HII image would have installed HII CAP and its own formset on the same
controller handle).



Appreciate your input.



Thanks,

Daniel

Backup:

*Excerpt from UEFI Spec: *

*MessageList      *A pointer to an array of warning or error messages associ
ated with

the controller specified by *ControllerHandle *and *ChildHandle*.

This is an optional parameter that may be *NULL*. *M**essageList *is

allocated by this function with the EFI Boot Service

*AllocatePool()*, and it is the caller’s responsibility to free

*MessageList *with the EFI Boot Service *F**reePool()*. Each

message is specified by tuple of an *EFI_HII_HANDLE *and an

*EFI_STRING_ID*. The array of messages is terminated by tuple

containing a *EFI_HII_HANDLE *with a value of *NULL*. The

*EFI_HII_STRING_PROTOCOL.GetString() *function can be used

to retrieve the warning or error message as a Null-terminated string

in a specific language. Messages may be returned for any of the

*HealthStatus *values except

*EfiDriverHealthStatusReconnectRequired *and

*EfiDriverHealthStatusRebootRequired*.

*FormHiiHandle    *A pointer to the HII handle containing the HII form used
when configuration is required. The HII handle is associated with the
controller specified by *ControllerHandle *and

*C**hildHandle*. If this is *N**ULL*, then no HII form is available. An HII
handle will only be returned with a *HealthStatus *value of

*E**fiDriverHealthStatusConfigurationRequired*.



…







If *MessageList *is not *NULL*, and *HealthStatu**s *is
*EfiDriverHealthStatusReconnectRequired
*or *EfiDriverHealthStatusRebootRequired *then no messages are
returned and **MessageList
*must be set to *NULL*.

If *MessageList *is not *NULL*, and there are no warning or error messages
associated with the controller specified by *ControllerHandle *and
*ChildHandle*, then **MessageList *must be set to *NULL*.

If *MessageList *is not *NULL*, and there are one or more warning or error
messages associated with the controller specified by *ControllerHandle *and
*ChildHandle*, then **MessageList *must point to a buffer allocated with
the EFI Boot Service *AllocatePool()*. The number of
*EFI_DRIVER_HEALTH_HII_MESSAGE
*structures allocated in the buffer must be one more than the total number
of warning or error messages, and the *HiiHandle *field of the last
*EFI_DRIVER_HEALTH_HII_MESSAGE
*structure must be set to *NULL *to terminate the list of messages. It is
the caller’s responsibility to free the buffer returned in **MessageList *using
the EFI Boot Service *FreePool()*. Each message is specified by an
*EFI_HII_HANDLE
*and an *EFI_STRING_ID*. The caller may use the
*EFI_HII_STRING_PROTOCOL.GetString()
*function to convert each message into a Null-terminated string that can
may be displayed on a console device.

If *FormHiiHandle *is *NULL*, then no forms are returned from this function.

If *FormHiiHandle *is not *NULL*, and *HealthStatus *is not
*EfiDriverHealthStatusConfigurationRequired*, then no forms are returned
and **FormHiiHandle *must be set to *NULL*.

If *FormHiiHandle *is not *NULL*, and *FormSetGuid *is not *NULL*, and
*HealthStatus
*is *EfiDriverHealthStatusConfigurationRequired*, then *FormHiiHandle *is
assigned to the HII handle which contains the HII form required to perform
the configuration operation.



…

*//********************************************************

*// EFI_DRIVER_HEALTH_HII_MESSAGE*

*//********************************************************

*typedef struct { EFI_HII_HANDLE **H**iiHandle**; **EF**I_STRING_ID  **S*
*tringId**; **UI**NT64     **MessageCode;*

*} EFI_DRIVER_HEALTH_HII_MESSAGE;*

*HiiHandle        *The *EFI_HII_HANDLE *that was returned by
*EFI_HII_DATABASE_PROTOCOL.NewPackageList()
*when the string pack containing StringId was registered with the HII Databa
se.

*StringId         *The identifier for a single string token in the string
pack associated with *HiiHandle.*

*MessageCode      *64-bit numeric value of the warning/error specified by
this message.

A value of *0x0000000000000000 *is used to indicate that

*MessageCode *is not specified.

The values *0**x0000000000000001 *to *0x0fffffffffffffff *are reserved for
allocation by the UEFI Specification.

The values *0**x1000000000000000 *to *0x1fffffffffffffff *are reserved for
IHV-developed drivers.

The values *0**x8000000000000000 *to *0x8fffffffffffffff *is reserved for
platform/OEM drivers.

All other values are reserved and should not be used.

[-- Attachment #2: Type: text/html, Size: 63060 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Driver health : Posting message in MessageList
  2021-03-30  5:56 Driver health : Posting message in MessageList EDK
@ 2021-03-31 13:58 ` EDK
  0 siblings, 0 replies; 2+ messages in thread
From: EDK @ 2021-03-31 13:58 UTC (permalink / raw)
  To: discuss, devel, michael.d.kinney; +Cc: daniel.samuelraj

[-- Attachment #1: Type: text/plain, Size: 6897 bytes --]

+ Mike

On Tue, Mar 30, 2021 at 1:56 AM EDK <edk.dan@gmail.com> wrote:

> Hi ,
>
> For our products, we have UEFI Driver and HII Driver as two separate
> images (this is a requirement for our product because we want to keep UEFI
> Driver as thin as possible).
>
>    - Main role of UEFI Driver is providing boot services,
>    reporting/solving health issues, posting messages in message list, EXT SPT
>    etc.
>
> FYI: UEFI Driver will install HII Config access protocol (*CAP*) and
> driver health formset on the controller handle if the controller has health
> issue; at this time, HII image won't be in picture (HII image come into
> play ONLY when controller is healthy); if UEFI Driver detects controller is
> healthy then it will not install HII Config access protocol (if it had
> installed, it would uninstall before loading HII image from controller
> flash to host)
>
> Note: We have our own API to load the HII Image from controller flash to
> host
>
>    - Role of HII is, installing HII config access protocol and Management
>    formset on the controller handle and allowing the user to view
>    controller/PD/VD/other hardware properties, perform various
>    controller/PD/VD level operations etc.
>
>
>
> Requirement (need to see whether this is feasible or not): There are cases
> where our controller is healthy but we would like to post certain
> informational messages in messageList.
>
> How do I achieve this? That is I want UEFI Driver to have the capability
> to post the message in messageList and our HII Image also to be
> loaded/present.
>
>
>
> Can UEFI Driver and HII driver install HII Config access protocol on the
> same handle? AFAIK, the answer is “no”.
>
> I experimented just adding the driver health formset to the package via
> the HiiAddPackages() on the controller handle (that is from UEFI Driver I
> was not installing HII CAP but just installed the formset on controller
> handle) and it is not working. In this case HII image is also loaded (this
> means HII image would have installed HII CAP and its own formset on the
> same controller handle).
>
>
>
> Appreciate your input.
>
>
>
> Thanks,
>
> Daniel
>
> Backup:
>
> *Excerpt from UEFI Spec: *
>
> *MessageList      *A pointer to an array of warning or error messages asso
> ciated with
>
> the controller specified by *ControllerHandle *and *ChildHandle*.
>
> This is an optional parameter that may be *NULL*. *M**essageList *is
>
> allocated by this function with the EFI Boot Service
>
> *AllocatePool()*, and it is the caller’s responsibility to free
>
> *MessageList *with the EFI Boot Service *F**reePool()*. Each
>
> message is specified by tuple of an *EFI_HII_HANDLE *and an
>
> *EFI_STRING_ID*. The array of messages is terminated by tuple
>
> containing a *EFI_HII_HANDLE *with a value of *NULL*. The
>
> *EFI_HII_STRING_PROTOCOL.GetString() *function can be used
>
> to retrieve the warning or error message as a Null-terminated string
>
> in a specific language. Messages may be returned for any of the
>
> *HealthStatus *values except
>
> *EfiDriverHealthStatusReconnectRequired *and
>
> *EfiDriverHealthStatusRebootRequired*.
>
> *FormHiiHandle    *A pointer to the HII handle containing the HII form
> used when configuration is required. The HII handle is associated with the
> controller specified by *ControllerHandle *and
>
> *C**hildHandle*. If this is *N**ULL*, then no HII form is available. An
> HII handle will only be returned with a *HealthStatus *value of
>
> *E**fiDriverHealthStatusConfigurationRequired*.
>
>
>
> …
>
>
>
>
>
>
>
> If *MessageList *is not *NULL*, and *HealthStatu**s *is *EfiDriverHealthStatusReconnectRequired
> *or *EfiDriverHealthStatusRebootRequired *then no messages are returned
> and **MessageList *must be set to *NULL*.
>
> If *MessageList *is not *NULL*, and there are no warning or error
> messages associated with the controller specified by *ControllerHandle *and
> *ChildHandle*, then **MessageList *must be set to *NULL*.
>
> If *MessageList *is not *NULL*, and there are one or more warning or
> error messages associated with the controller specified by *ControllerHandle
> *and *ChildHandle*, then **MessageList *must point to a buffer allocated
> with the EFI Boot Service *AllocatePool()*. The number of *EFI_DRIVER_HEALTH_HII_MESSAGE
> *structures allocated in the buffer must be one more than the total
> number of warning or error messages, and the *HiiHandle *field of the
> last *EFI_DRIVER_HEALTH_HII_MESSAGE *structure must be set to *NULL *to
> terminate the list of messages. It is the caller’s responsibility to free
> the buffer returned in **MessageList *using the EFI Boot Service
> *FreePool()*. Each message is specified by an *EFI_HII_HANDLE *and an
> *EFI_STRING_ID*. The caller may use the *EFI_HII_STRING_PROTOCOL.GetString()
> *function to convert each message into a Null-terminated string that can
> may be displayed on a console device.
>
> If *FormHiiHandle *is *NULL*, then no forms are returned from this
> function.
>
> If *FormHiiHandle *is not *NULL*, and *HealthStatus *is not
> *EfiDriverHealthStatusConfigurationRequired*, then no forms are returned
> and **FormHiiHandle *must be set to *NULL*.
>
> If *FormHiiHandle *is not *NULL*, and *FormSetGuid *is not *NULL*, and *HealthStatus
> *is *EfiDriverHealthStatusConfigurationRequired*, then *FormHiiHandle *is
> assigned to the HII handle which contains the HII form required to perform
> the configuration operation.
>
>
>
> …
>
> *//********************************************************
>
> *// EFI_DRIVER_HEALTH_HII_MESSAGE*
>
> *//********************************************************
>
> *typedef struct { EFI_HII_HANDLE **H**iiHandle**; **EF**I_STRING_ID  **S*
> *tringId**; **UI**NT64     **MessageCode;*
>
> *} EFI_DRIVER_HEALTH_HII_MESSAGE;*
>
> *HiiHandle        *The *EFI_HII_HANDLE *that was returned by *EFI_HII_DATABASE_PROTOCOL.NewPackageList()
> *when the string pack containing StringId was registered with the HII Data
> base.
>
> *StringId         *The identifier for a single string token in the string
> pack associated with *HiiHandle.*
>
> *MessageCode      *64-bit numeric value of the warning/error specified by
> this message.
>
> A value of *0x0000000000000000 *is used to indicate that
>
> *MessageCode *is not specified.
>
> The values *0**x0000000000000001 *to *0x0fffffffffffffff *are reserved for
> allocation by the UEFI Specification.
>
> The values *0**x1000000000000000 *to *0x1fffffffffffffff *are reserved for
> IHV-developed drivers.
>
> The values *0**x8000000000000000 *to *0x8fffffffffffffff *is reserved for
> platform/OEM drivers.
>
> All other values are reserved and should not be used.
>

[-- Attachment #2: Type: text/html, Size: 60966 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-03-31 13:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-03-30  5:56 Driver health : Posting message in MessageList EDK
2021-03-31 13:58 ` EDK

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox