The extlinux and PXE code for booting is almost the same. Move it into
the common file so it is easier to keep it in sync.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 boot/bootmeth_extlinux.c | 24 +++---------------------
 boot/bootmeth_pxe.c      | 19 +------------------
 boot/ext_pxe_common.c    | 24 ++++++++++++++++++++++++
 include/extlinux.h       | 11 +++++++++++
 4 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/boot/bootmeth_extlinux.c b/boot/bootmeth_extlinux.c
index ce11077ee35..df5b5ea7bf4 100644
--- a/boot/bootmeth_extlinux.c
+++ b/boot/bootmeth_extlinux.c
@@ -138,27 +138,9 @@ static int extlinux_read_bootflow(struct udevice *dev, 
struct bootflow *bflow)
        return 0;
 }
 
-static int extlinux_boot(struct udevice *dev, struct bootflow *bflow)
+static int extlinux_local_boot(struct udevice *dev, struct bootflow *bflow)
 {
-       struct extlinux_plat *plat = dev_get_plat(dev);
-       ulong addr;
-       int ret;
-
-       addr = map_to_sysmem(bflow->buf);
-
-       plat->info.dev = dev;
-       plat->info.bflow = bflow;
-
-       ret = pxe_setup_ctx(&plat->ctx, extlinux_getfile, &plat->info, true,
-                           bflow->fname, false, plat->use_fallback, bflow);
-       if (ret)
-               return log_msg_ret("ctx", -EINVAL);
-
-       ret = pxe_process(&plat->ctx, addr, false);
-       if (ret)
-               return log_msg_ret("bread", -EINVAL);
-
-       return 0;
+       return extlinux_boot(dev, bflow, extlinux_getfile);
 }
 
 static int extlinux_bootmeth_bind(struct udevice *dev)
@@ -176,7 +158,7 @@ static struct bootmeth_ops extlinux_bootmeth_ops = {
        .check          = extlinux_check,
        .read_bootflow  = extlinux_read_bootflow,
        .read_file      = bootmeth_common_read_file,
-       .boot           = extlinux_boot,
+       .boot           = extlinux_local_boot,
        .set_property   = extlinux_set_property,
 };
 
diff --git a/boot/bootmeth_pxe.c b/boot/bootmeth_pxe.c
index a9608edcef9..6ecf81d7878 100644
--- a/boot/bootmeth_pxe.c
+++ b/boot/bootmeth_pxe.c
@@ -139,24 +139,7 @@ static int extlinux_pxe_read_file(struct udevice *dev, 
struct bootflow *bflow,
 
 static int extlinux_pxe_boot(struct udevice *dev, struct bootflow *bflow)
 {
-       struct extlinux_plat *plat = dev_get_plat(dev);
-       struct pxe_context *ctx = &plat->ctx;
-       ulong addr;
-       int ret;
-
-       addr = map_to_sysmem(bflow->buf);
-       plat->info.dev = dev;
-       plat->info.bflow = bflow;
-       ret = pxe_setup_ctx(ctx, extlinux_pxe_getfile, &plat->info, false,
-                           bflow->subdir, false, plat->use_fallback, bflow);
-       if (ret)
-               return log_msg_ret("ctx", -EINVAL);
-
-       ret = pxe_process(ctx, addr, false);
-       if (ret)
-               return log_msg_ret("bread", -EINVAL);
-
-       return 0;
+       return extlinux_boot(dev, bflow, extlinux_pxe_getfile);
 }
 
 static int extlinux_bootmeth_pxe_bind(struct udevice *dev)
diff --git a/boot/ext_pxe_common.c b/boot/ext_pxe_common.c
index e42865b84f5..7b9c41b5f77 100644
--- a/boot/ext_pxe_common.c
+++ b/boot/ext_pxe_common.c
@@ -74,3 +74,27 @@ int extlinux_set_property(struct udevice *dev, const char 
*property,
 
        return 0;
 }
+
+int extlinux_boot(struct udevice *dev, struct bootflow *bflow,
+                 pxe_getfile_func getfile)
+{
+       struct extlinux_plat *plat = dev_get_plat(dev);
+       ulong addr;
+       int ret;
+
+       addr = map_to_sysmem(bflow->buf);
+
+       plat->info.dev = dev;
+       plat->info.bflow = bflow;
+
+       ret = pxe_setup_ctx(&plat->ctx, getfile, &plat->info, true,
+                           bflow->fname, false, plat->use_fallback, bflow);
+       if (ret)
+               return log_msg_ret("ctx", -EINVAL);
+
+       ret = pxe_process(&plat->ctx, addr, false);
+       if (ret)
+               return log_msg_ret("bread", -EINVAL);
+
+       return 0;
+}
diff --git a/include/extlinux.h b/include/extlinux.h
index f97164954cc..69781e666c3 100644
--- a/include/extlinux.h
+++ b/include/extlinux.h
@@ -49,4 +49,15 @@ struct extlinux_plat {
 int extlinux_set_property(struct udevice *dev, const char *property,
                          const char *value);
 
+/**
+ * extlinux_boot() - Boot a bootflow
+ *
+ * @dev: bootmeth device
+ * @bflow: Bootflow to boot
+ * @getfile: Function to use to read files
+ * Return: 0 if OK, -ve error code on failure
+ */
+int extlinux_boot(struct udevice *dev, struct bootflow *bflow,
+                 pxe_getfile_func getfile);
+
 #endif
-- 
2.34.1

Reply via email to