[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
- gnumach: IOAPIC and LAPIC support, Damien Zammit, 2021/03/26
- [PATCH 2/5] fixup acpi base table search, Damien Zammit, 2021/03/26
- [PATCH 1/5] Make linux drivers optional,
Damien Zammit <=
- [PATCH 3/5] fix timer bug, Damien Zammit, 2021/03/26
- [PATCH 4/5] fix EISA check in init_IRQ, Damien Zammit, 2021/03/26
- [PATCH 5/5] ioapic interrupts and lapic timer support, Damien Zammit, 2021/03/26
- Re: gnumach: IOAPIC and LAPIC support, Samuel Thibault, 2021/03/26