summaryrefslogtreecommitdiffstats
path: root/master/debian/kfreebsd-9_ada_devices.patch
blob: e1c22e485ada86f699c83a6a26310b88a99708d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
2011-06-16  Robert Millan  <rmh@gnu.org>

	Detect `ataraid' devices on GNU/kFreeBSD.  Fix for ATA devices using
	`ata' driver on kernel of FreeBSD 9.

	* util/deviceiter.c [__FreeBSD_kernel__] (get_ada_disk_name)
	(get_ataraid_disk_name): New functions.
	[__FreeBSD_kernel__] (grub_util_iterate_devices): Scan for ataraid
	(/dev/ar[0-9]+) and ada (/dev/ada[0-9]+) devices using
	get_ataraid_disk_name() and get_ada_disk_name().

=== modified file 'util/deviceiter.c'
--- a/util/deviceiter.c
+++ b/util/deviceiter.c
@@ -286,6 +286,20 @@
 #endif
 }
 
+#ifdef __FreeBSD_kernel__
+static void
+get_ada_disk_name (char *name, int unit)
+{
+  sprintf (name, "/dev/ada%d", unit);
+}
+
+static void
+get_ataraid_disk_name (char *name, int unit)
+{
+  sprintf (name, "/dev/ar%d", unit);
+}
+#endif
+
 #ifdef __linux__
 static void
 get_virtio_disk_name (char *name, int unit)
@@ -620,6 +634,35 @@
 	}
     }
 
+#ifdef __FreeBSD_kernel__
+  /* IDE disks using ATA Direct Access driver.  */
+  if (get_kfreebsd_version () >= 800000)
+    for (i = 0; i < 96; i++)
+      {
+	char name[16];
+
+	get_ada_disk_name (name, i);
+	if (check_device_readable_unique (name))
+	  {
+	    if (hook (name, 0))
+	      goto out;
+	  }
+      }
+
+  /* ATARAID disks.  */
+  for (i = 0; i < 8; i++)
+    {
+      char name[20];
+
+      get_ataraid_disk_name (name, i);
+      if (check_device_readable_unique (name))
+	{
+	  if (hook (name, 0))
+	    goto out;
+        }
+    }
+#endif
+
 #ifdef __linux__
   /* Virtio disks.  */
   for (i = 0; i < 26; i++)