PERFORCE change 107749 for review
Roman Divacky
rdivacky at FreeBSD.org
Thu Oct 12 01:41:16 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=107749
Change 107749 by rdivacky at rdivacky_witten on 2006/10/12 08:40:29
IFC
Affected files ...
.. //depot/projects/linuxolator/src/sys/amd64/amd64/intr_machdep.c#2 integrate
.. //depot/projects/linuxolator/src/sys/amd64/amd64/io_apic.c#2 integrate
.. //depot/projects/linuxolator/src/sys/amd64/amd64/local_apic.c#4 integrate
.. //depot/projects/linuxolator/src/sys/amd64/amd64/machdep.c#3 integrate
.. //depot/projects/linuxolator/src/sys/amd64/amd64/mp_machdep.c#3 integrate
.. //depot/projects/linuxolator/src/sys/amd64/include/apicvar.h#2 integrate
.. //depot/projects/linuxolator/src/sys/amd64/include/intr_machdep.h#2 integrate
.. //depot/projects/linuxolator/src/sys/amd64/isa/atpic.c#2 integrate
.. //depot/projects/linuxolator/src/sys/compat/linprocfs/linprocfs.c#4 integrate
.. //depot/projects/linuxolator/src/sys/compat/linux/linux_ipc.c#2 integrate
.. //depot/projects/linuxolator/src/sys/ddb/db_command.c#3 integrate
.. //depot/projects/linuxolator/src/sys/ddb/db_output.c#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/ath/if_athvar.h#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/iwi/if_iwi.c#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/ofw/openfirm.c#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/pci/pci.c#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/pci/pci_if.m#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/pci/pci_pci.c#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/pci/pci_private.h#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/pci/pcivar.h#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/sk/if_sk.c#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/sk/if_skreg.h#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/sound/pci/hda/hdac.c#3 integrate
.. //depot/projects/linuxolator/src/sys/geom/raid3/g_raid3.c#4 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/intr_machdep.c#2 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/io_apic.c#2 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/local_apic.c#4 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/mp_machdep.c#3 integrate
.. //depot/projects/linuxolator/src/sys/i386/include/apicvar.h#2 integrate
.. //depot/projects/linuxolator/src/sys/i386/include/intr_machdep.h#2 integrate
.. //depot/projects/linuxolator/src/sys/i386/isa/atpic.c#2 integrate
.. //depot/projects/linuxolator/src/sys/kern/kern_timeout.c#2 integrate
.. //depot/projects/linuxolator/src/sys/net/if_vlan.c#3 integrate
.. //depot/projects/linuxolator/src/sys/netgraph/netflow/netflow.c#2 integrate
.. //depot/projects/linuxolator/src/sys/netgraph/netflow/ng_netflow.c#2 integrate
.. //depot/projects/linuxolator/src/sys/netgraph/ng_base.c#2 integrate
.. //depot/projects/linuxolator/src/sys/netinet/ip_fw2.c#4 integrate
.. //depot/projects/linuxolator/src/sys/netinet/libalias/libalias.3#4 integrate
.. //depot/projects/linuxolator/src/sys/pci/agp_amd64.c#2 integrate
.. //depot/projects/linuxolator/src/sys/powerpc/powerpc/db_interface.c#2 integrate
.. //depot/projects/linuxolator/src/sys/security/audit/audit_syscalls.c#4 integrate
.. //depot/projects/linuxolator/src/sys/security/mac_portacl/mac_portacl.c#2 integrate
.. //depot/projects/linuxolator/src/sys/sparc64/pci/ofw_pcib.c#2 integrate
.. //depot/projects/linuxolator/src/sys/sparc64/pci/ofw_pcib_subr.c#2 integrate
.. //depot/projects/linuxolator/src/sys/sparc64/sparc64/db_interface.c#2 integrate
.. //depot/projects/linuxolator/src/sys/sun4v/conf/NOTES#2 integrate
.. //depot/projects/linuxolator/src/sys/sun4v/sun4v/fpemu.c#2 delete
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_inode.c#2 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_snapshot.c#3 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_vnops.c#2 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ufs/inode.h#3 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ufs/ufs_vnops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/vm/vm_contig.c#2 integrate
.. //depot/projects/linuxolator/src/sys/vm/vnode_pager.c#3 integrate
Differences ...
==== //depot/projects/linuxolator/src/sys/amd64/amd64/intr_machdep.c#2 (text+ko) ====
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/amd64/intr_machdep.c,v 1.20 2006/07/12 21:22:42 jhb Exp $
+ * $FreeBSD: src/sys/amd64/amd64/intr_machdep.c,v 1.21 2006/10/10 23:23:11 jhb Exp $
*/
/*
@@ -37,6 +37,7 @@
* that source.
*/
+#include "opt_atpic.h"
#include "opt_ddb.h"
#include <sys/param.h>
@@ -62,6 +63,7 @@
static int intrcnt_index;
static struct intsrc *interrupt_sources[NUM_IO_INTS];
static struct mtx intr_table_lock;
+static STAILQ_HEAD(, pic) pics;
#ifdef SMP
static int assign_cpu;
@@ -70,11 +72,46 @@
#endif
static void intr_init(void *__dummy);
+static int intr_pic_registered(struct pic *pic);
static void intrcnt_setname(const char *name, int index);
static void intrcnt_updatename(struct intsrc *is);
static void intrcnt_register(struct intsrc *is);
+static int
+intr_pic_registered(struct pic *pic)
+{
+ struct pic *p;
+
+ STAILQ_FOREACH(p, &pics, pics) {
+ if (p == pic)
+ return (1);
+ }
+ return (0);
+}
+
/*
+ * Register a new interrupt controller (PIC). This is to support suspend
+ * and resume where we suspend/resume controllers rather than individual
+ * sources. This also allows controllers with no active sources (such as
+ * 8259As in a system using the APICs) to participate in suspend and resume.
+ */
+int
+intr_register_pic(struct pic *pic)
+{
+ int error;
+
+ mtx_lock_spin(&intr_table_lock);
+ if (intr_pic_registered(pic))
+ error = EBUSY;
+ else {
+ STAILQ_INSERT_TAIL(&pics, pic, pics);
+ error = 0;
+ }
+ mtx_unlock_spin(&intr_table_lock);
+ return (error);
+}
+
+/*
* Register a new interrupt source with the global interrupt system.
* The global interrupts need to be disabled when this function is
* called.
@@ -84,6 +121,7 @@
{
int error, vector;
+ KASSERT(intr_pic_registered(isrc->is_pic), ("unregistered PIC"));
vector = isrc->is_pic->pic_vector(isrc);
if (interrupt_sources[vector] != NULL)
return (EEXIST);
@@ -255,26 +293,29 @@
void
intr_resume(void)
{
- struct intsrc **isrc;
- int i;
+ struct pic *pic;
+#ifndef DEV_ATPIC
+ atpic_reset();
+#endif
mtx_lock_spin(&intr_table_lock);
- for (i = 0, isrc = interrupt_sources; i < NUM_IO_INTS; i++, isrc++)
- if (*isrc != NULL && (*isrc)->is_pic->pic_resume != NULL)
- (*isrc)->is_pic->pic_resume(*isrc);
+ STAILQ_FOREACH(pic, &pics, pics) {
+ if (pic->pic_resume != NULL)
+ pic->pic_resume(pic);
+ }
mtx_unlock_spin(&intr_table_lock);
}
void
intr_suspend(void)
{
- struct intsrc **isrc;
- int i;
+ struct pic *pic;
mtx_lock_spin(&intr_table_lock);
- for (i = 0, isrc = interrupt_sources; i < NUM_IO_INTS; i++, isrc++)
- if (*isrc != NULL && (*isrc)->is_pic->pic_suspend != NULL)
- (*isrc)->is_pic->pic_suspend(*isrc);
+ STAILQ_FOREACH(pic, &pics, pics) {
+ if (pic->pic_suspend != NULL)
+ pic->pic_suspend(pic);
+ }
mtx_unlock_spin(&intr_table_lock);
}
@@ -327,10 +368,33 @@
intrcnt_setname("???", 0);
intrcnt_index = 1;
+ STAILQ_INIT(&pics);
mtx_init(&intr_table_lock, "intr table", NULL, MTX_SPIN);
}
SYSINIT(intr_init, SI_SUB_INTR, SI_ORDER_FIRST, intr_init, NULL)
+#ifndef DEV_ATPIC
+/* Initialize the two 8259A's to a known-good shutdown state. */
+void
+atpic_reset(void)
+{
+
+ outb(IO_ICU1, ICW1_RESET | ICW1_IC4);
+ outb(IO_ICU1 + ICU_IMR_OFFSET, IDT_IO_INTS);
+ outb(IO_ICU1 + ICU_IMR_OFFSET, 1 << 2);
+ outb(IO_ICU1 + ICU_IMR_OFFSET, ICW4_8086);
+ outb(IO_ICU1 + ICU_IMR_OFFSET, 0xff);
+ outb(IO_ICU1, OCW3_SEL | OCW3_RR);
+
+ outb(IO_ICU2, ICW1_RESET | ICW1_IC4);
+ outb(IO_ICU2 + ICU_IMR_OFFSET, IDT_IO_INTS + 8);
+ outb(IO_ICU2 + ICU_IMR_OFFSET, 2);
+ outb(IO_ICU2 + ICU_IMR_OFFSET, ICW4_8086);
+ outb(IO_ICU2 + ICU_IMR_OFFSET, 0xff);
+ outb(IO_ICU2, OCW3_SEL | OCW3_RR);
+}
+#endif
+
#ifdef DDB
/*
* Dump data about interrupt handlers
==== //depot/projects/linuxolator/src/sys/amd64/amd64/io_apic.c#2 (text+ko) ====
@@ -28,9 +28,8 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.24 2006/04/05 20:43:19 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.25 2006/10/10 23:23:11 jhb Exp $");
-#include "opt_atpic.h"
#include "opt_isa.h"
#include <sys/param.h>
@@ -61,8 +60,6 @@
#define IRQ_SMI (NUM_IO_INTS + 3)
#define IRQ_DISABLED (NUM_IO_INTS + 4)
-#define TODO printf("%s: not implemented!\n", __func__)
-
static MALLOC_DEFINE(M_IOAPIC, "io_apic", "I/O APIC structures");
/*
@@ -115,8 +112,7 @@
static int ioapic_source_pending(struct intsrc *isrc);
static int ioapic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
-static void ioapic_suspend(struct intsrc *isrc);
-static void ioapic_resume(struct intsrc *isrc);
+static void ioapic_resume(struct pic *pic);
static void ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id);
static void ioapic_program_intpin(struct ioapic_intsrc *intpin);
@@ -124,7 +120,7 @@
struct pic ioapic_template = { ioapic_enable_source, ioapic_disable_source,
ioapic_eoi_source, ioapic_enable_intr,
ioapic_vector, ioapic_source_pending,
- ioapic_suspend, ioapic_resume,
+ NULL, ioapic_resume,
ioapic_config_intr, ioapic_assign_cpu };
static int next_ioapic_base;
@@ -419,17 +415,13 @@
}
static void
-ioapic_suspend(struct intsrc *isrc)
+ioapic_resume(struct pic *pic)
{
+ struct ioapic *io = (struct ioapic *)pic;
+ int i;
- TODO;
-}
-
-static void
-ioapic_resume(struct intsrc *isrc)
-{
-
- ioapic_program_intpin((struct ioapic_intsrc *)isrc);
+ for (i = 0; i < io->io_numintr; i++)
+ ioapic_program_intpin(&io->io_pins[i]);
}
/*
@@ -727,6 +719,7 @@
io->io_intbase + io->io_numintr - 1);
/* Register valid pins as interrupt sources. */
+ intr_register_pic(&io->io_pic);
for (i = 0, pin = io->io_pins; i < io->io_numintr; i++, pin++)
if (pin->io_irq < NUM_IO_INTS)
intr_register_source(&pin->io_intsrc);
==== //depot/projects/linuxolator/src/sys/amd64/amd64/local_apic.c#4 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.31 2006/09/27 22:09:35 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.32 2006/10/10 23:23:11 jhb Exp $");
#include "opt_hwpmc_hooks.h"
@@ -151,12 +151,15 @@
static u_long lapic_timer_divisor, lapic_timer_period, lapic_timer_hz;
static void lapic_enable(void);
+static void lapic_resume(struct pic *pic);
static void lapic_timer_enable_intr(void);
static void lapic_timer_oneshot(u_int count);
static void lapic_timer_periodic(u_int count);
static void lapic_timer_set_divisor(u_int divisor);
static uint32_t lvt_mode(struct lapic *la, u_int pin, uint32_t value);
+struct pic lapic_pic = { .pic_resume = lapic_resume };
+
static uint32_t
lvt_mode(struct lapic *la, u_int pin, uint32_t value)
{
@@ -277,7 +280,7 @@
}
void
-lapic_setup(void)
+lapic_setup(int boot)
{
struct lapic *la;
u_int32_t maxlvt;
@@ -306,9 +309,13 @@
/* Program timer LVT and setup handler. */
lapic->lvt_timer = lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
- snprintf(buf, sizeof(buf), "cpu%d: timer", PCPU_GET(cpuid));
- intrcnt_add(buf, &la->la_timer_count);
- if (PCPU_GET(cpuid) != 0) {
+ if (boot) {
+ snprintf(buf, sizeof(buf), "cpu%d: timer", PCPU_GET(cpuid));
+ intrcnt_add(buf, &la->la_timer_count);
+ }
+
+ /* We don't setup the timer during boot on the BSP until later. */
+ if (!(boot && PCPU_GET(cpuid) == 0)) {
KASSERT(lapic_timer_period != 0, ("lapic%u: zero divisor",
lapic_id()));
lapic_timer_set_divisor(lapic_timer_divisor);
@@ -398,6 +405,14 @@
lapic->svr = value;
}
+/* Reset the local APIC on the BSP during resume. */
+static void
+lapic_resume(struct pic *pic)
+{
+
+ lapic_setup(0);
+}
+
int
lapic_id(void)
{
@@ -983,7 +998,8 @@
* Finish setting up the local APIC on the BSP once we know how to
* properly program the LINT pins.
*/
- lapic_setup();
+ lapic_setup(1);
+ intr_register_pic(&lapic_pic);
if (bootverbose)
lapic_dump("BSP");
}
==== //depot/projects/linuxolator/src/sys/amd64/amd64/machdep.c#3 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.654 2006/10/02 15:42:01 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.655 2006/10/10 23:23:11 jhb Exp $");
#include "opt_atalk.h"
#include "opt_atpic.h"
@@ -1212,19 +1212,7 @@
atpic_startup();
#else
/* Reset and mask the atpics and leave them shut down. */
- outb(IO_ICU1, ICW1_RESET | ICW1_IC4);
- outb(IO_ICU1 + ICU_IMR_OFFSET, IDT_IO_INTS);
- outb(IO_ICU1 + ICU_IMR_OFFSET, 1 << 2);
- outb(IO_ICU1 + ICU_IMR_OFFSET, ICW4_8086);
- outb(IO_ICU1 + ICU_IMR_OFFSET, 0xff);
- outb(IO_ICU1, OCW3_SEL | OCW3_RR);
-
- outb(IO_ICU2, ICW1_RESET | ICW1_IC4);
- outb(IO_ICU2 + ICU_IMR_OFFSET, IDT_IO_INTS + 8);
- outb(IO_ICU2 + ICU_IMR_OFFSET, 2);
- outb(IO_ICU2 + ICU_IMR_OFFSET, ICW4_8086);
- outb(IO_ICU2 + ICU_IMR_OFFSET, 0xff);
- outb(IO_ICU2, OCW3_SEL | OCW3_RR);
+ atpic_reset();
/*
* Point the ICU spurious interrupt vectors at the APIC spurious
==== //depot/projects/linuxolator/src/sys/amd64/amd64/mp_machdep.c#3 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.277 2006/09/11 20:10:42 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mp_machdep.c,v 1.278 2006/10/10 23:23:11 jhb Exp $");
#include "opt_cpu.h"
#include "opt_kstack_pages.h"
@@ -543,7 +543,7 @@
mtx_lock_spin(&ap_boot_mtx);
/* Init local apic for irq's */
- lapic_setup();
+ lapic_setup(1);
/* Set memory range attributes for this CPU to match the BSP */
mem_range_AP_init();
==== //depot/projects/linuxolator/src/sys/amd64/include/apicvar.h#2 (text+ko) ====
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.18 2006/05/01 21:36:47 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.19 2006/10/10 23:23:11 jhb Exp $
*/
#ifndef _MACHINE_APICVAR_H_
@@ -211,7 +211,7 @@
int lapic_set_lvt_triggermode(u_int apic_id, u_int lvt,
enum intr_trigger trigger);
void lapic_set_tpr(u_int vector);
-void lapic_setup(void);
+void lapic_setup(int boot);
int lapic_setup_clock(void);
#endif /* !LOCORE */
==== //depot/projects/linuxolator/src/sys/amd64/include/intr_machdep.h#2 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/include/intr_machdep.h,v 1.9 2006/02/28 22:24:54 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/intr_machdep.h,v 1.11 2006/10/10 23:23:11 jhb Exp $
*/
#ifndef __MACHINE_INTR_MACHDEP_H__
@@ -56,9 +56,9 @@
* - 7 counters for each CPU for IPI counters for SMP.
*/
#ifdef SMP
+#define INTRCNT_COUNT (1 + NUM_IO_INTS * 2 + (1 + 7) * MAXCPU)
+#else
#define INTRCNT_COUNT (1 + NUM_IO_INTS * 2 + 1)
-#else
-#define INTRCNT_COUNT (1 + NUM_IO_INTS * 2 + (1 + 7) * MAXCPU)
#endif
#ifndef LOCORE
@@ -81,11 +81,12 @@
void (*pic_enable_intr)(struct intsrc *);
int (*pic_vector)(struct intsrc *);
int (*pic_source_pending)(struct intsrc *);
- void (*pic_suspend)(struct intsrc *);
- void (*pic_resume)(struct intsrc *);
+ void (*pic_suspend)(struct pic *);
+ void (*pic_resume)(struct pic *);
int (*pic_config_intr)(struct intsrc *, enum intr_trigger,
enum intr_polarity);
void (*pic_assign_cpu)(struct intsrc *, u_int apic_id);
+ STAILQ_ENTRY(pic) pics;
};
/* Flags for pic_disable_source() */
@@ -114,6 +115,9 @@
extern struct mtx icu_lock;
extern int elcr_found;
+#ifndef DEV_ATPIC
+void atpic_reset(void);
+#endif
/* XXX: The elcr_* prototypes probably belong somewhere else. */
int elcr_probe(void);
enum intr_trigger elcr_read_trigger(u_int irq);
@@ -130,6 +134,7 @@
enum intr_polarity pol);
void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame);
struct intsrc *intr_lookup_source(int vector);
+int intr_register_pic(struct pic *pic);
int intr_register_source(struct intsrc *isrc);
int intr_remove_handler(void *cookie);
void intr_resume(void);
==== //depot/projects/linuxolator/src/sys/amd64/isa/atpic.c#2 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/isa/atpic.c,v 1.19 2006/02/28 22:24:54 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/isa/atpic.c,v 1.20 2006/10/10 23:23:11 jhb Exp $");
#include "opt_auto_eoi.h"
#include "opt_isa.h"
@@ -138,7 +138,7 @@
static void atpic_eoi_slave(struct intsrc *isrc);
static void atpic_enable_intr(struct intsrc *isrc);
static int atpic_vector(struct intsrc *isrc);
-static void atpic_resume(struct intsrc *isrc);
+static void atpic_resume(struct pic *pic);
static int atpic_source_pending(struct intsrc *isrc);
static int atpic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
@@ -285,16 +285,13 @@
}
static void
-atpic_resume(struct intsrc *isrc)
+atpic_resume(struct pic *pic)
{
- struct atpic_intsrc *ai = (struct atpic_intsrc *)isrc;
- struct atpic *ap = (struct atpic *)isrc->is_pic;
+ struct atpic *ap = (struct atpic *)pic;
- if (ai->at_irq == 0) {
- i8259_init(ap, ap == &atpics[SLAVE]);
- if (ap == &atpics[SLAVE] && elcr_found)
- elcr_resume();
- }
+ i8259_init(ap, ap == &atpics[SLAVE]);
+ if (ap == &atpics[SLAVE] && elcr_found)
+ elcr_resume();
}
static int
@@ -465,6 +462,14 @@
int i;
/*
+ * Register our PICs, even if we aren't going to use any of their
+ * pins so that they are suspended and resumed.
+ */
+ if (intr_register_pic(&atpics[0].at_pic) != 0 ||
+ intr_register_pic(&atpics[1].at_pic) != 0)
+ panic("Unable to register ATPICs");
+
+ /*
* If any of the ISA IRQs have an interrupt source already, then
* assume that the APICs are being used and don't register any
* of our interrupt sources. This makes sure we don't accidentally
==== //depot/projects/linuxolator/src/sys/compat/linprocfs/linprocfs.c#4 (text+ko) ====
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.98 2006/10/08 16:55:27 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.99 2006/10/11 20:32:46 keramida Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -925,7 +925,7 @@
}
/*
- * Filler function for proc/pid_max
+ * Filler function for proc/sys/kernel/pid_max
*/
static int
linprocfs_dopid_max(PFS_FILL_ARGS)
==== //depot/projects/linuxolator/src/sys/compat/linux/linux_ipc.c#2 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_ipc.c,v 1.48 2006/07/08 19:51:37 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_ipc.c,v 1.51 2006/10/10 22:46:50 jhb Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -465,7 +465,7 @@
} */ bsd_args;
bsd_args.semid = args->semid;
- bsd_args.sops = (struct sembuf *)PTRIN(args->tsops);
+ bsd_args.sops = PTRIN(args->tsops);
bsd_args.nsops = args->nsops;
return semop(td, &bsd_args);
}
@@ -520,7 +520,7 @@
case LINUX_IPC_SET:
cmd = IPC_SET;
error = linux_semid_pullup(args->cmd & LINUX_IPC_64,
- &linux_semid, (caddr_t)PTRIN(args->arg.buf));
+ &linux_semid, PTRIN(args->arg.buf));
if (error)
return (error);
linux_to_bsd_semid_ds(&linux_semid, &semid);
@@ -540,7 +540,7 @@
return (error);
bsd_to_linux_semid_ds(&semid, &linux_semid);
error = linux_semid_pushdown(args->cmd & LINUX_IPC_64,
- &linux_semid, (caddr_t)PTRIN(args->arg.buf));
+ &linux_semid, PTRIN(args->arg.buf));
if (error == 0)
td->td_retval[0] = (cmd == SEM_STAT) ? rval : 0;
return (error);
@@ -628,13 +628,14 @@
struct l_msqid_ds linux_msqid;
struct msqid_ds bsd_msqid;
- error = linux_msqid_pullup(args->cmd & LINUX_IPC_64,
- &linux_msqid, (caddr_t)PTRIN(args->buf));
- if (error != 0)
- return (error);
bsd_cmd = args->cmd & ~LINUX_IPC_64;
- if (bsd_cmd == LINUX_IPC_SET)
+ if (bsd_cmd == LINUX_IPC_SET) {
+ error = linux_msqid_pullup(args->cmd & LINUX_IPC_64,
+ &linux_msqid, PTRIN(args->buf));
+ if (error)
+ return (error);
linux_to_bsd_msqid_ds(&linux_msqid, &bsd_msqid);
+ }
error = kern_msgctl(td, args->msqid, bsd_cmd, &bsd_msqid);
if (error != 0)
@@ -644,7 +645,7 @@
if (bsd_cmd == LINUX_IPC_STAT) {
bsd_to_linux_msqid_ds(&bsd_msqid, &linux_msqid);
return (linux_msqid_pushdown(args->cmd & LINUX_IPC_64,
- &linux_msqid, (caddr_t)PTRIN(args->buf)));
+ &linux_msqid, PTRIN(args->buf)));
}
return (0);
@@ -710,7 +711,6 @@
struct l_shminfo linux_shminfo;
struct l_shm_info linux_shm_info;
struct shmid_ds bsd_shmid;
- size_t bufsz;
int error;
switch (args->cmd & ~LINUX_IPC_64) {
@@ -720,14 +720,14 @@
/* Perform shmctl wanting removed segments lookup */
error = kern_shmctl(td, args->shmid, IPC_INFO,
- (void *)&bsd_shminfo, &bufsz);
+ (void *)&bsd_shminfo, NULL);
if (error)
return error;
bsd_to_linux_shminfo(&bsd_shminfo, &linux_shminfo);
return (linux_shminfo_pushdown(args->cmd & LINUX_IPC_64,
- &linux_shminfo, (caddr_t)PTRIN(args->buf)));
+ &linux_shminfo, PTRIN(args->buf)));
}
case LINUX_SHM_INFO: {
@@ -735,43 +735,43 @@
/* Perform shmctl wanting removed segments lookup */
error = kern_shmctl(td, args->shmid, SHM_INFO,
- (void *)&bsd_shm_info, &bufsz);
+ (void *)&bsd_shm_info, NULL);
if (error)
return error;
bsd_to_linux_shm_info(&bsd_shm_info, &linux_shm_info);
- return copyout(&linux_shm_info, (caddr_t)PTRIN(args->buf),
+ return copyout(&linux_shm_info, PTRIN(args->buf),
sizeof(struct l_shm_info));
}
case LINUX_IPC_STAT:
/* Perform shmctl wanting removed segments lookup */
error = kern_shmctl(td, args->shmid, IPC_STAT,
- (void *)&bsd_shmid, &bufsz);
+ (void *)&bsd_shmid, NULL);
if (error)
return error;
bsd_to_linux_shmid_ds(&bsd_shmid, &linux_shmid);
return (linux_shmid_pushdown(args->cmd & LINUX_IPC_64,
- &linux_shmid, (caddr_t)PTRIN(args->buf)));
+ &linux_shmid, PTRIN(args->buf)));
case LINUX_SHM_STAT:
/* Perform shmctl wanting removed segments lookup */
error = kern_shmctl(td, args->shmid, IPC_STAT,
- (void *)&bsd_shmid, &bufsz);
+ (void *)&bsd_shmid, NULL);
if (error)
return error;
bsd_to_linux_shmid_ds(&bsd_shmid, &linux_shmid);
return (linux_shmid_pushdown(args->cmd & LINUX_IPC_64,
- &linux_shmid, (caddr_t)PTRIN(args->buf)));
+ &linux_shmid, PTRIN(args->buf)));
case LINUX_IPC_SET:
error = linux_shmid_pullup(args->cmd & LINUX_IPC_64,
- &linux_shmid, (caddr_t)PTRIN(args->buf));
+ &linux_shmid, PTRIN(args->buf));
if (error)
return error;
@@ -779,7 +779,7 @@
/* Perform shmctl wanting removed segments lookup */
return kern_shmctl(td, args->shmid, IPC_SET,
- (void *)&bsd_shmid, &bufsz);
+ (void *)&bsd_shmid, NULL);
case LINUX_IPC_RMID: {
void *buf;
@@ -788,13 +788,13 @@
buf = NULL;
else {
error = linux_shmid_pullup(args->cmd & LINUX_IPC_64,
- &linux_shmid, (caddr_t)PTRIN(args->buf));
+ &linux_shmid, PTRIN(args->buf));
if (error)
return error;
linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid);
buf = (void *)&bsd_shmid;
}
- return kern_shmctl(td, args->shmid, IPC_RMID, buf, &bufsz);
+ return kern_shmctl(td, args->shmid, IPC_RMID, buf, NULL);
}
case LINUX_SHM_LOCK:
==== //depot/projects/linuxolator/src/sys/ddb/db_command.c#3 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ddb/db_command.c,v 1.70 2006/10/08 18:37:00 bde Exp $");
+__FBSDID("$FreeBSD: src/sys/ddb/db_command.c,v 1.71 2006/10/10 07:26:53 bde Exp $");
#include <sys/param.h>
#include <sys/linker_set.h>
@@ -68,6 +68,7 @@
static db_cmdfcn_t db_fncall;
static db_cmdfcn_t db_gdb;
+static db_cmdfcn_t db_halt;
static db_cmdfcn_t db_kill;
static db_cmdfcn_t db_reset;
static db_cmdfcn_t db_stack_trace;
@@ -134,7 +135,8 @@
{ "show", 0, 0, &db_show_table },
{ "ps", db_ps, 0, 0 },
{ "gdb", db_gdb, 0, 0 },
- { "registers", db_show_regs, 0, 0 },
+ { "halt", db_halt, 0, 0 },
+ { "reboot", db_reset, 0, 0 },
{ "reset", db_reset, 0, 0 },
{ "kill", db_kill, CS_OWN, 0 },
{ "watchdog", db_watchdog, 0, 0 },
@@ -538,6 +540,13 @@
}
static void
+db_halt(db_expr_t dummy, boolean_t dummy2, db_expr_t dummy3, char *dummy4)
+{
+
+ cpu_halt();
+}
+
+static void
db_kill(dummy1, dummy2, dummy3, dummy4)
db_expr_t dummy1;
boolean_t dummy2;
==== //depot/projects/linuxolator/src/sys/ddb/db_output.c#3 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ddb/db_output.c,v 1.36 2006/10/08 18:15:08 bde Exp $");
+__FBSDID("$FreeBSD: src/sys/ddb/db_output.c,v 1.37 2006/10/10 06:36:01 bde Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -142,7 +142,6 @@
}
else if (c == '\n') {
/* Newline */
- db_force_whitespace();
cnputc(c);
db_output_position = 0;
db_last_non_space = 0;
@@ -155,7 +154,6 @@
}
else if (c == '\r') {
/* Return */
- db_force_whitespace();
cnputc(c);
db_output_position = 0;
db_last_non_space = 0;
@@ -247,7 +245,9 @@
#endif
}
}
- db_printf(" \r");
+ db_printf(" ");
+ db_force_whitespace();
+ db_printf("\r");
db_newlines = 0;
}
==== //depot/projects/linuxolator/src/sys/dev/ath/if_athvar.h#3 (text+ko) ====
@@ -33,7 +33,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
- * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.53 2006/09/18 16:26:19 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.54 2006/10/09 23:45:26 sam Exp $
*/
/*
@@ -418,7 +418,7 @@
((*(_ah)->ah_getDiagState)((_ah), (_id), \
(_indata), (_insize), (_outdata), (_outsize)))
#define ath_hal_getfatalstate(_ah, _outdata, _outsize) \
- ath_hal_getdiagstate(_ah, 27, NULL, 0, (void **)(_outdata), _outsize)
+ ath_hal_getdiagstate(_ah, 29, NULL, 0, (void **)(_outdata), _outsize)
#define ath_hal_setuptxqueue(_ah, _type, _irq) \
((*(_ah)->ah_setupTxQueue)((_ah), (_type), (_irq)))
#define ath_hal_resettxqueue(_ah, _q) \
==== //depot/projects/linuxolator/src/sys/dev/iwi/if_iwi.c#2 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/iwi/if_iwi.c,v 1.39 2006/07/26 03:09:32 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/iwi/if_iwi.c,v 1.40 2006/10/10 18:02:22 mlaier Exp $");
/*-
* Intel(R) PRO/Wireless 2200BG/2225BG/2915ABG driver
@@ -2699,7 +2699,7 @@
struct ieee80211com *ic = &sc->sc_ic;
const struct ieee80211_channel *c;
struct iwi_scan_ext scan;
- int i, ix, start, scan_type;
+ int i, ix, start, scan_type, error;
memset(&scan, 0, sizeof scan);
@@ -2710,8 +2710,22 @@
scan.full_scan_index = htole32(ic->ic_scan.nt_scangen);
- scan_type = (ic->ic_des_esslen != 0) ? IWI_SCAN_TYPE_BDIRECTED :
- IWI_SCAN_TYPE_BROADCAST;
+ if (ic->ic_des_esslen != 0) {
+ scan_type = IWI_SCAN_TYPE_BDIRECTED;
+#ifdef IWI_DEBUG
+ if (iwi_debug > 0) {
+ printf("Setting desired ESSID to ");
+ ieee80211_print_essid(ic->ic_des_essid,
+ ic->ic_des_esslen);
+ printf("\n");
+ }
+#endif
+ error = iwi_cmd(sc, IWI_CMD_SET_ESSID, ic->ic_des_essid,
+ ic->ic_des_esslen);
+ if (error != 0)
+ return error;
+ } else
+ scan_type = IWI_SCAN_TYPE_BROADCAST;
ix = 0;
if (ic->ic_modecaps & IEEE80211_MODE_5GHZ) {
==== //depot/projects/linuxolator/src/sys/dev/ofw/openfirm.c#3 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ofw/openfirm.c,v 1.16 2006/10/09 04:45:17 kmacy Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ofw/openfirm.c,v 1.17 2006/10/11 02:52:46 kmacy Exp $");
/*-
* Copyright (C) 2000 Benno Rice.
* All rights reserved.
@@ -842,8 +842,8 @@
0,
};
- args.tba_addr = p1275_ptr2cell(tba_addr);
- args.mmfsa_ra = p1275_ptr2cell(mmfsa_ra);
+ args.tba_addr = (cell_t)tba_addr;
+ args.mmfsa_ra = (cell_t)mmfsa_ra;
openfirmware(&args);
}
==== //depot/projects/linuxolator/src/sys/dev/pci/pci.c#3 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.314 2006/09/20 06:47:14 jmg Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/pci/pci.c,v 1.315 2006/10/09 16:15:55 jmg Exp $");
#include "opt_bus.h"
@@ -41,7 +41,7 @@
#include <sys/kernel.h>
#include <sys/queue.h>
#include <sys/sysctl.h>
-#include <sys/types.h>
+#include <sys/endian.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -90,6 +90,13 @@
static void pci_hdrtypedata(device_t pcib, int b, int s, int f,
pcicfgregs *cfg);
static void pci_read_extcap(device_t pcib, pcicfgregs *cfg);
+static uint32_t pci_read_vpd_reg(device_t pcib, pcicfgregs *cfg,
+ int reg);
+#if 0
+static void pci_write_vpd_reg(device_t pcib, pcicfgregs *cfg,
+ int reg, uint32_t data);
+#endif
+static void pci_read_vpd(device_t pcib, pcicfgregs *cfg);
static device_method_t pci_methods[] = {
/* Device interface */
@@ -127,6 +134,8 @@
DEVMETHOD(pci_disable_busmaster, pci_disable_busmaster_method),
DEVMETHOD(pci_enable_io, pci_enable_io_method),
DEVMETHOD(pci_disable_io, pci_disable_io_method),
+ DEVMETHOD(pci_get_vpd_ident, pci_get_vpd_ident_method),
+ DEVMETHOD(pci_get_vpd_readonly, pci_get_vpd_readonly_method),
DEVMETHOD(pci_get_powerstate, pci_get_powerstate_method),
DEVMETHOD(pci_set_powerstate, pci_set_powerstate_method),
DEVMETHOD(pci_assign_interrupt, pci_assign_interrupt_method),
@@ -344,7 +353,6 @@
}
/* read configuration header into pcicfgregs structure */
-
struct pci_devinfo *
pci_read_device(device_t pcib, int b, int s, int f, size_t size)
{
@@ -428,7 +436,7 @@
ptrptr = PCIR_CAP_PTR;
break;
case 2:
- ptrptr = PCIR_CAP_PTR_2;
+ ptrptr = PCIR_CAP_PTR_2; /* cardbus capabilities ptr */
break;
default:
return; /* no extended capabilities support */
@@ -468,13 +476,304 @@
cfg->msi.msi_data = PCIR_MSI_DATA;
cfg->msi.msi_msgnum = 1 << ((cfg->msi.msi_ctrl &
PCIM_MSICTRL_MMC_MASK)>>1);
+ break;
+ case PCIY_VPD: /* PCI Vital Product Data */
+ cfg->vpd.vpd_reg = ptr;
+ pci_read_vpd(pcib, cfg);
+ break;
+ default:
+ break;
+ }
+ }
+/* REG use carry through to next functions */
+}
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list