summaryrefslogtreecommitdiffstats
path: root/NetworkPkg/HttpBootDxe/HttpBootSupport.c
diff options
context:
space:
mode:
authorFu Siyuan <siyuan.fu@intel.com>2017-06-14 17:28:48 +0800
committerFu Siyuan <siyuan.fu@intel.com>2017-06-22 10:56:25 +0800
commit95b5c32fb3d6bf677d4cb6471d6c683939014c89 (patch)
tree137594a6db98505b14d74eecb46c22376a0be4c1 /NetworkPkg/HttpBootDxe/HttpBootSupport.c
parenta77d109ffa0df3662999598e09e3c1e5fd7a1bfb (diff)
downloadedk2-95b5c32fb3d6bf677d4cb6471d6c683939014c89.tar.gz
edk2-95b5c32fb3d6bf677d4cb6471d6c683939014c89.tar.bz2
edk2-95b5c32fb3d6bf677d4cb6471d6c683939014c89.zip
NetworkPkg/HttpBootDxe: Add HTTP Boot Callback protocol support.
This patch updates the HTTP Boot driver to install a default HTTP Callback protocol if the platform doesn't provide one. This callback implementation will print the boot file download progress in percentage format. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
Diffstat (limited to 'NetworkPkg/HttpBootDxe/HttpBootSupport.c')
-rw-r--r--NetworkPkg/HttpBootDxe/HttpBootSupport.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
index 8fe81eb8d9..5024f2e676 100644
--- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c
+++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c
@@ -671,6 +671,9 @@ HttpIoNotify (
@param[in] Controller The handle of the controller.
@param[in] IpVersion IP_VERSION_4 or IP_VERSION_6.
@param[in] ConfigData The HTTP_IO configuration data.
+ @param[in] Callback Callback function which will be invoked when specified
+ HTTP_IO_CALLBACK_EVENT happened.
+ @param[in] Context The Context data which will be passed to the Callback function.
@param[out] HttpIo The HTTP_IO.
@retval EFI_SUCCESS The HTTP_IO is created and configured.
@@ -687,6 +690,8 @@ HttpIoCreateIo (
IN EFI_HANDLE Controller,
IN UINT8 IpVersion,
IN HTTP_IO_CONFIG_DATA *ConfigData,
+ IN HTTP_IO_CALLBACK Callback,
+ IN VOID *Context,
OUT HTTP_IO *HttpIo
)
{
@@ -739,6 +744,8 @@ HttpIoCreateIo (
HttpIo->Controller = Controller;
HttpIo->IpVersion = IpVersion;
HttpIo->Http = Http;
+ HttpIo->Callback = Callback;
+ HttpIo->Context = Context;
ZeroMem (&HttpConfigData, sizeof (EFI_HTTP_CONFIG_DATA));
HttpConfigData.HttpVersion = HttpVersion11;
@@ -908,6 +915,17 @@ HttpIoSendRequest (
HttpIo->ReqToken.Message->BodyLength = BodyLength;
HttpIo->ReqToken.Message->Body = Body;
+ if (HttpIo->Callback != NULL) {
+ Status = HttpIo->Callback (
+ HttpIoRequest,
+ HttpIo->ReqToken.Message,
+ HttpIo->Context
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ }
+
//
// Queue the request token to HTTP instances.
//
@@ -1016,6 +1034,17 @@ HttpIoRecvResponse (
HttpIo->IsRxDone = FALSE;
}
+ if (!EFI_ERROR (HttpIo->RspToken.Status) && HttpIo->Callback != NULL) {
+ Status = HttpIo->Callback (
+ HttpIoResponse,
+ HttpIo->RspToken.Message,
+ HttpIo->Context
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+ }
+
//
// Store the received data into the wrapper.
//