Date: Thu, 15 Aug 2013 15:27:54 -0400 From: Jeremiah Lott <jlott@averesystems.com> To: freebsd-virtualization@freebsd.org Subject: legacy irq patch and e1000 emulation Message-ID: <B064FB88-5D5E-453F-83BE-38A59CD67EDD@averesystems.com>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Here is a small patch for automatic legacy irq assignment. I found that when I called:
pci_lintr_request(pi, -1);
It was always asserting and not able to find an irq. It is because the pci devices were being initialized before the lirq structure in pci_emul.c. The attached patch fixes the problem.
Related, I noticed Peter mentioned Intel NIC emulation work in a recent email. Is there work going on in this area? I've been kind of hacking on an implementation for a 82545EM card. Freebsd drive lem driver can probe it at this point, but it's still got a long way to go before it is functional. I'd hate to be duplicating work that is already done, though. Thanks,
Jeremiah
[-- Attachment #2 --]
commit 464abfd82c54bf605a3f8ffd372b588eda3d86b5
Author: Jeremiah Lott <jlott@averesystems.com>
Date: Wed Aug 14 20:04:37 2013 -0400
Fix automatic legacy interrupt assignment.
diff --git a/usr.sbin/bhyve/pci_emul.c b/usr.sbin/bhyve/pci_emul.c
index 00adf62..005e8b1 100644
--- a/usr.sbin/bhyve/pci_emul.c
+++ b/usr.sbin/bhyve/pci_emul.c
@@ -1008,6 +1008,16 @@ init_pci(struct vmctx *ctx)
pci_emul_membase32 = vm_get_lowmem_limit(ctx);
pci_emul_membase64 = PCI_EMUL_MEMBASE64;
+ /*
+ * Allow ISA IRQs 5,10,11,12, and 15 to be available for
+ * generic use
+ */
+ lirq[5].li_generic = 1;
+ lirq[10].li_generic = 1;
+ lirq[11].li_generic = 1;
+ lirq[12].li_generic = 1;
+ lirq[15].li_generic = 1;
+
for (slot = 0; slot < MAXSLOTS; slot++) {
for (func = 0; func < MAXFUNCS; func++) {
si = &pci_slotinfo[slot][func];
@@ -1023,16 +1033,6 @@ init_pci(struct vmctx *ctx)
}
/*
- * Allow ISA IRQs 5,10,11,12, and 15 to be available for
- * generic use
- */
- lirq[5].li_generic = 1;
- lirq[10].li_generic = 1;
- lirq[11].li_generic = 1;
- lirq[12].li_generic = 1;
- lirq[15].li_generic = 1;
-
- /*
* The guest physical memory map looks like the following:
* [0, lowmem) guest system memory
* [lowmem, lowmem_limit) memory hole (may be absent)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B064FB88-5D5E-453F-83BE-38A59CD67EDD>
