bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/5] Make linux drivers optional


From: Damien Zammit
Subject: [PATCH 1/5] Make linux drivers optional
Date: Fri, 26 Mar 2021 20:48:46 +1100

Defaults to build with linux drivers.
To build without linux drivers, use:

--enable-qemu-group=no --enable-net-group=no
--enable-scsi-group=no --enable-wireless-group=no --enable-pcmcia-group=no

---
 device/intr.c       | 36 ++++++++++++++++++++++++++++++++++++
 linux/configfrag.ac | 38 +++++++++++++++++++++++---------------
 2 files changed, 59 insertions(+), 15 deletions(-)

diff --git a/device/intr.c b/device/intr.c
index fbb9f495..5a8ee758 100644
--- a/device/intr.c
+++ b/device/intr.c
@@ -12,6 +12,7 @@
  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  */
 
+#include <kern/assert.h>
 #include <device/intr.h>
 #include <device/device_types.h>
 #include <device/device_port.h>
@@ -26,6 +27,14 @@
 queue_head_t main_intr_queue;
 static boolean_t deliver_intr (int id, ipc_port_t dst_port);
 
+#ifndef LINUX_DEV
+struct intr_list {
+  user_intr_t *user_intr;
+  struct intr_list *next;
+};
+static struct intr_list *user_intr_handlers;
+#endif
+
 static user_intr_t *
 search_intr (struct irqdev *dev, ipc_port_t dst_port)
 {
@@ -147,6 +156,33 @@ out:
   return ret;
 }
 
+#ifndef LINUX_DEV
+int
+install_user_intr_handler (struct irqdev *dev, int id, unsigned long flags,
+                         user_intr_t *user_intr)
+{
+  unsigned int irq = dev->irq[id];
+  struct intr_list *old = user_intr_handlers;
+
+  assert (irq < NINTR);
+
+  while (old)
+    {
+      /* Test whether the irq handler has been set */
+      if (old->user_intr->dst_port && old->user_intr->dst_port == 
user_intr->dst_port)
+        {
+          printf ("This interrupt handler has already been installed on line 
%d", irq);
+          return 1;
+        }
+      old = old->next;
+    }
+
+  old = kalloc (sizeof (struct intr_list));
+  *(old->user_intr) = *user_intr;
+  return deliver_user_intr(dev, irq, old->user_intr);
+}
+#endif
+
 void
 intr_thread (void)
 {
diff --git a/linux/configfrag.ac b/linux/configfrag.ac
index 78b59d7f..26c99e45 100644
--- a/linux/configfrag.ac
+++ b/linux/configfrag.ac
@@ -33,6 +33,8 @@ dnl USE OF THIS SOFTWARE.
     '')
       # No group.
       :;;
+    qemu)
+      device_driver_group_qemu=selected;;
     net)
       device_driver_group_net=selected;;
     pcmcia)
@@ -75,7 +77,7 @@ fi
 case $host_platform:$host_cpu in
   at:i?86)
     case $enable_device_drivers:'$2' in
-      default:*by\ default* | qemu:*for\ qemu*)
+      default:*by\ default*)
         enableval=${enableval-yes};;
       *)
         enableval=${enableval-no};;
@@ -129,10 +131,6 @@ AC_DEFUN([AC_Linux_DRIVER], [
   AC_OPTION_Linux_ix86_at([$1], [Linux device driver for $2; on ix86-at 
enabled]
     [by default], [$3], [$4])
 ])
-AC_DEFUN([AC_Linux_DRIVER_qemu], [
-  AC_OPTION_Linux_ix86_at([$1], [Linux device driver for $2; on ix86-at 
enabled]
-    [by default and for qemu], [$3], [$4])
-])
 AC_DEFUN([AC_Linux_DRIVER_nodef], [
   AC_OPTION_Linux_ix86_at_nodef([$1], [Linux device driver for $2], [$3], [$4])
 ])
@@ -141,13 +139,21 @@ AC_DEFUN([AC_Linux_DRIVER_nodef], [
 # Configuration options.
 #
 
-AC_Linux_DRIVER_qemu([floppy],
-  [PC floppy],
-  [CONFIG_BLK_DEV_FD])
+dnl QEMU drivers.
+AC_OPTION_Linux_group([qemu], [QEMU drivers])
 
-AC_Linux_DRIVER_qemu([ide],
+AC_Linux_DRIVER([floppy],
+  [PC floppy],
+  [CONFIG_BLK_DEV_FD],
+  [qemu])
+AC_Linux_DRIVER([ide],
   [IDE disk controllers],
-  [CONFIG_BLK_DEV_IDE])
+  [CONFIG_BLK_DEV_IDE],
+  [qemu])
+AC_Linux_DRIVER([ne],
+  [Ethernet controller NE2000/NE1000 ISA (ne, ne1000, ne2000)],
+  [CONFIG_NE2000],
+  [qemu])
 
 AC_ARG_ENABLE([ide-forcedma],
   AS_HELP_STRING([--enable-ide-forcedma], [enable forced use of DMA on IDE]),
@@ -431,10 +437,6 @@ AC_Linux_DRIVER([natsemi],
   [Ethernet controller National Semiconductor DP8381x series PCI Ethernet],
   [CONFIG_NATSEMI],
   [net])
-AC_Linux_DRIVER_qemu([ne],
-  [Ethernet controller NE2000/NE1000 ISA (ne, ne1000, ne2000)],
-  [CONFIG_NE2000],
-  [net])
 AC_Linux_DRIVER([ne2k-pci],
   [Ethernet controller PCI NE2000],
   [CONFIG_NE2K_PCI],
@@ -582,7 +584,13 @@ AC_Linux_DRIVER([orinoco_cs],
 # that get brought in, need special symbols defined, etc.
 #
 
-[if [ x"$device_driver_group_net" = xselected ]; then]
+[if [ x"$device_driver_group_qemu" = xselected ]; then]
+  AC_DEFINE([CONFIG_QEMU], [1], [CONFIG_QEMU])
+  AM_CONDITIONAL([device_driver_group_qemu], [true])
+[else] AM_CONDITIONAL([device_driver_group_qemu], [false])
+[fi
+
+if [ x"$device_driver_group_net" = xselected ]; then]
   AC_DEFINE([CONFIG_INET], [1], [CONFIG_INET])
   AM_CONDITIONAL([device_driver_group_net], [true])
 [else] AM_CONDITIONAL([device_driver_group_net], [false])
-- 
2.30.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]