]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
On i386-ieee1275 we run in paged mode. So we need to explicitly map
authorVladimir Serbinenko <phcoder@gmail.com>
Mon, 18 Nov 2013 03:32:33 +0000 (04:32 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Mon, 18 Nov 2013 03:32:33 +0000 (04:32 +0100)
the devices before accessing them.

ChangeLog
grub-core/Makefile.core.def
grub-core/bus/i386/ieee1275/pci.c [new file with mode: 0644]
include/grub/i386/pci.h

index 2ff66607f5fcc59ee29cbb51418f757275fc55cb..7f1cf0e5377b2ff4a22328ebb8e681823ff16fe7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-11-18  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       On i386-ieee1275 we run in paged mode. So we need to explicitly map
+       the devices before accessing them.
+
 2013-11-18  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/lib/relocator.c (grub_mm_check_real): Accept const char *
index 4fff57f169d0793b7ed573cf466c12827052bb0e..5cd84b1836e4378d3f1ee14b2f74a4901871ef37 100644 (file)
@@ -563,6 +563,7 @@ module = {
 module = {
   name = pci;
   common = bus/pci.c;
+  i386_ieee1275 = bus/i386/ieee1275/pci.c;
 
   enable = i386_pc;
   enable = i386_ieee1275;
diff --git a/grub-core/bus/i386/ieee1275/pci.c b/grub-core/bus/i386/ieee1275/pci.c
new file mode 100644 (file)
index 0000000..1fd3b56
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2013  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/dl.h>
+#include <grub/pci.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/ieee1275/ieee1275.h>
+
+volatile void *
+grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
+                          grub_addr_t base,
+                          grub_size_t size)
+{
+  if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_REAL_MODE))
+    return (volatile void *) base;
+  if (grub_ieee1275_map (base, base, size, 7))
+    grub_fatal ("couldn't map 0x%lx", base);
+  return (volatile void *) base;
+}
+
+void
+grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
+                            volatile void *mem __attribute__ ((unused)),
+                            grub_size_t size __attribute__ ((unused)))
+{
+}
index 795dec58bc452c350e54ac25b98f7e7af36dfeec..dffeb56953079587afac01824bd85d926a6adcb3 100644 (file)
@@ -70,6 +70,8 @@ grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
   grub_outb (data, GRUB_PCI_DATA_REG + (addr & 3));
 }
 
+#ifndef GRUB_MACHINE_IEEE1275
+
 static inline volatile void *
 grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
                           grub_addr_t base,
@@ -85,5 +87,19 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
 {
 }
 
+#else
+
+volatile void *
+grub_pci_device_map_range (grub_pci_device_t dev,
+                          grub_addr_t base,
+                          grub_size_t size);
+
+void
+grub_pci_device_unmap_range (grub_pci_device_t dev,
+                            volatile void *mem,
+                            grub_size_t size);
+
+#endif
+
 
 #endif /* GRUB_CPU_PCI_H */