]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Close cards before boot.
authorManoel R. Abranches <mrabran@br.ibm.com>
Sat, 18 Jun 2011 23:18:25 +0000 (20:18 -0300)
committerManoel R. Abranches <mrabran@br.ibm.com>
Sat, 18 Jun 2011 23:18:25 +0000 (20:18 -0300)
grub-core/kern/ieee1275/init.c
grub-core/net/drivers/ieee1275/ofnet.c
grub-core/net/net.c
include/grub/net.h

index ad34ea188e52a47bf177b06fdf38f40ca777a16f..3c55096a4d7f3431d3cf6ac22457c683f8ffb93e 100644 (file)
@@ -264,6 +264,8 @@ grub_machine_init (void)
 void
 grub_machine_fini (void)
 {
+  if (grub_grubnet_fini)
+    grub_grubnet_fini ();
   grub_ofdisk_fini ();
   grub_console_fini ();
 }
index 751583e9de723ecada3e971c12e56c35372a388c..9789f2261212dad0dfd8fbb03b79633d49225b26 100644 (file)
@@ -225,6 +225,10 @@ GRUB_MOD_INIT(ofnet)
 
 GRUB_MOD_FINI(ofnet)
 {
+  struct grub_net_card *card;
+  FOR_NET_CARDS (card) 
+    if (card->driver && !grub_strcmp (card->driver->name, "ofnet"))
+      card->driver->fini (card);
   grub_net_card_driver_unregister (&ofdriver);
   grub_getbootp = NULL;
 }
index 380eec3b54373da0310b5df612247300d7b3db70..c7732ecbf1e2156411b1e3aed5199184f79257fb 100644 (file)
@@ -1021,6 +1021,15 @@ grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
                     "unrecognised format specification %s", args[3]);
 }
 
+static void
+grub_grubnet_fini_real (void)
+{
+  struct grub_net_card *card;
+  FOR_NET_CARDS (card)
+    if (card->driver)
+      card->driver->fini (card);
+}
+
 static struct grub_fs grub_net_fs =
   {
     .name = "netfs",
@@ -1060,6 +1069,7 @@ GRUB_MOD_INIT(net)
   grub_fs_register (&grub_net_fs);
   grub_net_open = grub_net_open_real;
   grub_file_net_seek = grub_net_seek_real;
+  grub_grubnet_fini = grub_grubnet_fini_real;
 }
 
 GRUB_MOD_FINI(net)
@@ -1074,4 +1084,5 @@ GRUB_MOD_FINI(net)
   grub_fs_unregister (&grub_net_fs);
   grub_net_open = NULL;
   grub_file_net_seek = NULL;
+  grub_grubnet_fini = NULL;
 }
index f9745acec31193563911756dc0c3f58432125f25..006ec0686212f7e738fac2119ece2e2b91ae4acb 100644 (file)
@@ -239,6 +239,7 @@ typedef struct grub_net
 
 extern grub_net_t (*EXPORT_VAR (grub_net_open)) (const char *name);
 extern grub_err_t (*EXPORT_VAR (grub_file_net_seek)) (struct grub_file *file, grub_off_t offset);
+void (*EXPORT_VAR (grub_grubnet_fini)) (void);
 
 struct grub_net_network_level_interface
 {