tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: several evbarm kernels broken in current. know the issue. don't know how best to fix it.
On Sun, Apr 12, 2009 at 09:39:03PM -0700, Martin Fouts wrote:
> I'm getting ready to port NetBSD to another ARM device (personal, not for my
> employer,) and I tried to make a release in current in preparation. This did
> not go so well, as there's build breakage in may of the evbarm kernels. In
> outline, the problem is that sys/device.h includes some other include file
> that starts an include chain that ends up with an include file that uses
> things defined later in sys/device.h. The clearest example is:
>
> In file included from
> /home/marty/projects/netbsd/current/src/sys/arch/evbarm/ifpga/ifpga_intr.h:5
> 0,
> from ./machine/intr.h:151,
> from
> /home/marty/projects/netbsd/current/src/sys/sys/intr.h:35,
> from
> /home/marty/projects/netbsd/current/src/sys/sys/mutex.h:177,
> from
> /home/marty/projects/netbsd/current/src/sys/sys/device.h:85,
> from ./arm/cpu.h:233,
> from ./machine/cpu.h:3,
> from ./arm/arm32/param.h:39,
> from ./machine/param.h:45,
> from
> /home/marty/projects/netbsd/current/src/sys/sys/param.h:164,
> from /tmp/genassym.27565/assym.c:2:
> /home/marty/projects/netbsd/current/src/sys/arch/evbarm/ifpga/ifpgavar.h:48:
> error: field 'sc_dev' has incomplete type
>
> To make a long story short, 'sc_dev is declared as 'struct device sc_dev';
> but mutex.h is included in device.h before device.h defines struct device.
Here is a compilable, *un*tested patch that fixes the INTEGRATOR case.
Dave
--
David Young OJC Technologies
dyoung%ojctech.com@localhost Urbana, IL * (217) 278-3933
Index: sys/arch/evbarm/ifpga/ifpga.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ifpga/ifpga.c,v
retrieving revision 1.22
diff -p -u -u -p -r1.22 ifpga.c
--- sys/arch/evbarm/ifpga/ifpga.c 27 Apr 2008 18:58:46 -0000 1.22
+++ sys/arch/evbarm/ifpga/ifpga.c 13 Apr 2009 23:43:55 -0000
@@ -66,12 +66,12 @@ __KERNEL_RCSID(0, "$NetBSD: ifpga.c,v 1.
#include "locators.h"
/* Prototypes */
-static int ifpga_match (struct device *, struct cfdata *, void
*);
-static void ifpga_attach (struct device *, struct device *, void *);
+static int ifpga_match (device_t, cfdata_t, void *);
+static void ifpga_attach (device_t, device_t, void *);
static int ifpga_print (void *, const char *);
/* Drive and attach structures */
-CFATTACH_DECL(ifpga, sizeof(struct ifpga_softc),
+CFATTACH_DECL_NEW(ifpga, sizeof(struct ifpga_softc),
ifpga_match, ifpga_attach, NULL, NULL);
int ifpga_found;
@@ -91,6 +91,8 @@ static struct bus_space ifpga_pci_mem_ta
static struct bus_space ifpga_bs_tag;
struct ifpga_softc *ifpga_sc;
+device_t ifpga_dev;
+
/*
* Print the configuration information for children
*/
@@ -109,10 +111,9 @@ ifpga_print(void *aux, const char *pnp)
}
static int
-ifpga_search(struct device *parent, struct cfdata *cf,
- const int *ldesc, void *aux)
+ifpga_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux)
{
- struct ifpga_softc *sc = (struct ifpga_softc *)parent;
+ struct ifpga_softc *sc = device_private(parent);
struct ifpga_attach_args ifa;
int tryagain;
@@ -133,7 +134,7 @@ ifpga_search(struct device *parent, stru
}
static int
-ifpga_match(struct device *parent, struct cfdata *cf, void *aux)
+ifpga_match(device_t parent, cfdata_t cf, void *aux)
{
#if 0
struct mainbus_attach_args *ma = aux;
@@ -151,9 +152,9 @@ ifpga_match(struct device *parent, struc
}
static void
-ifpga_attach(struct device *parent, struct device *self, void *aux)
+ifpga_attach(device_t parent, device_t self, void *aux)
{
- struct ifpga_softc *sc = (struct ifpga_softc *)self;
+ struct ifpga_softc *sc = device_private(self);
u_int id, sysclk;
#if defined(PCI_NETBSD_CONFIGURE) && NPCI > 0
struct extent *ioext, *memext, *pmemext;
@@ -176,13 +177,14 @@ ifpga_attach(struct device *parent, stru
sc->sc_iot = &ifpga_bs_tag;
+ ifpga_dev = self;
ifpga_sc = sc;
/* Now map in the IFPGA motherboard registers. */
if (bus_space_map(sc->sc_iot, IFPGA_IO_SC_BASE, IFPGA_IO_SC_SIZE, 0,
&sc->sc_sc_ioh))
panic("%s: Cannot map system controller registers",
- self->dv_xname);
+ device_xname(self));
id = bus_space_read_4(sc->sc_iot, sc->sc_sc_ioh, IFPGA_SC_ID);
@@ -221,7 +223,7 @@ ifpga_attach(struct device *parent, stru
panic(" Unsupported bus");
}
- printf("\n%s: FPGA ", self->dv_xname);
+ printf("\n%s: FPGA ", device_xname(self));
switch (id & IFPGA_SC_ID_FPGA_MASK)
{
@@ -246,20 +248,22 @@ ifpga_attach(struct device *parent, stru
if (bus_space_map(sc->sc_iot, IFPGA_IO_IRQ_BASE, IFPGA_IO_IRQ_SIZE,
BUS_SPACE_MAP_LINEAR, &sc->sc_irq_ioh))
panic("%s: Cannot map irq controller registers",
- self->dv_xname);
+ device_xname(self));
/* We can write to the IRQ/FIQ controller now. */
ifpga_intr_postinit();
/* Map the core module */
if (bus_space_map(sc->sc_iot, IFPGA_IO_CM_BASE, IFPGA_IO_CM_SIZE, 0,
- &sc->sc_cm_ioh))
- panic("%s: Cannot map core module registers", self->dv_xname);
+ &sc->sc_cm_ioh)) {
+ panic("%s: Cannot map core module registers",
+ device_xname(self));
+ }
/* Map the timers */
if (bus_space_map(sc->sc_iot, IFPGA_IO_TMR_BASE, IFPGA_IO_TMR_SIZE, 0,
&sc->sc_tmr_ioh))
- panic("%s: Cannot map timer registers", self->dv_xname);
+ panic("%s: Cannot map timer registers", device_xname(self));
printf("\n");
@@ -275,7 +279,7 @@ ifpga_attach(struct device *parent, stru
&pci_sc->sc_conf_ioh)
|| bus_space_map(pci_sc->sc_memt, IFPGA_V360_REG_BASE,
IFPGA_V360_REG_SIZE, 0, &pci_sc->sc_reg_ioh))
- panic("%s: Cannot map pci memory", self->dv_xname);
+ panic("%s: Cannot map pci memory", device_xname(self));
{
pcireg_t id_reg, class_reg;
@@ -287,7 +291,7 @@ ifpga_attach(struct device *parent, stru
pci_sc->sc_reg_ioh, V360_PCI_CC_REV);
pci_devinfo(id_reg, class_reg, 1, buf, sizeof(buf));
- printf("%s: %s\n", self->dv_xname, buf);
+ printf("%s: %s\n", device_xname(self), buf);
}
#if defined(PCI_NETBSD_CONFIGURE)
Index: sys/arch/evbarm/ifpga/ifpga_clock.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ifpga/ifpga_clock.c,v
retrieving revision 1.13
diff -p -u -u -p -r1.13 ifpga_clock.c
--- sys/arch/evbarm/ifpga/ifpga_clock.c 18 Mar 2009 10:22:27 -0000 1.13
+++ sys/arch/evbarm/ifpga/ifpga_clock.c 13 Apr 2009 23:43:55 -0000
@@ -99,6 +99,7 @@ static struct timecounter ifpga_timecoun
static volatile uint32_t ifpga_base;
extern struct ifpga_softc *ifpga_sc;
+extern device_t ifpga_dev;
static int clock_started = 0;
@@ -287,7 +288,7 @@ cpu_initclocks(void)
IPL_CLOCK, clockhandler, 0);
if (ifpga_sc->sc_clockintr == NULL)
panic("%s: Cannot install timer 1 interrupt handler",
- ifpga_sc->sc_dev.dv_xname);
+ device_xname(ifpga_dev));
ifpga_sc->sc_clock_count
= load_timer(IFPGA_TIMER1_BASE, intvl);
@@ -306,7 +307,7 @@ cpu_initclocks(void)
IPL_HIGH, statclockhandler, 0);
if (ifpga_sc->sc_statclockintr == NULL)
panic("%s: Cannot install timer 2 interrupt handler",
- ifpga_sc->sc_dev.dv_xname);
+ device_xname(ifpga_dev));
load_timer(IFPGA_TIMER2_BASE, statint);
tc_init(&ifpga_timecounter);
Index: sys/arch/evbarm/ifpga/ifpga_pci.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ifpga/ifpga_pci.c,v
retrieving revision 1.12
diff -p -u -u -p -r1.12 ifpga_pci.c
--- sys/arch/evbarm/ifpga/ifpga_pci.c 11 Dec 2005 12:17:09 -0000 1.12
+++ sys/arch/evbarm/ifpga/ifpga_pci.c 13 Apr 2009 23:43:55 -0000
@@ -85,7 +85,7 @@ __KERNEL_RCSID(0, "$NetBSD: ifpga_pci.c,
#include <evbarm/dev/v360reg.h>
-void ifpga_pci_attach_hook (struct device *, struct device *,
+void ifpga_pci_attach_hook (device_t, device_t,
struct pcibus_attach_args *);
int ifpga_pci_bus_maxdevs (void *, int);
pcitag_t ifpga_pci_make_tag (void *, int, int, int);
@@ -156,7 +156,7 @@ pci_intr(void *arg)
void
-ifpga_pci_attach_hook(struct device *parent, struct device *self,
+ifpga_pci_attach_hook(device_t parent, device_t self,
struct pcibus_attach_args *pba)
{
#ifdef PCI_DEBUG
Index: sys/arch/evbarm/ifpga/ifpga_pcivar.h
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ifpga/ifpga_pcivar.h,v
retrieving revision 1.1
diff -p -u -u -p -r1.1 ifpga_pcivar.h
--- sys/arch/evbarm/ifpga/ifpga_pcivar.h 27 Oct 2001 16:19:09 -0000
1.1
+++ sys/arch/evbarm/ifpga/ifpga_pcivar.h 13 Apr 2009 23:43:55 -0000
@@ -30,8 +30,6 @@
*/
struct ifpga_pci_softc {
- struct device sc_dev;
-
bus_space_tag_t sc_iot;
bus_space_handle_t sc_io_ioh;
bus_space_handle_t sc_conf_ioh;
Index: sys/arch/evbarm/ifpga/ifpgavar.h
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ifpga/ifpgavar.h,v
retrieving revision 1.4
diff -p -u -u -p -r1.4 ifpgavar.h
--- sys/arch/evbarm/ifpga/ifpgavar.h 11 Dec 2005 12:17:09 -0000 1.4
+++ sys/arch/evbarm/ifpga/ifpgavar.h 13 Apr 2009 23:43:55 -0000
@@ -45,7 +45,6 @@
typedef paddr_t ifpga_addr_t;
struct ifpga_softc {
- struct device sc_dev; /* Device node */
bus_space_tag_t sc_iot; /* Bus tag */
bus_space_handle_t sc_sc_ioh; /* System Controller handle */
bus_space_handle_t sc_cm_ioh; /* Core Module handle */
Index: sys/arch/evbarm/ifpga/pl030_rtc.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbarm/ifpga/pl030_rtc.c,v
retrieving revision 1.8
diff -p -u -u -p -r1.8 pl030_rtc.c
--- sys/arch/evbarm/ifpga/pl030_rtc.c 19 Feb 2007 02:08:12 -0000 1.8
+++ sys/arch/evbarm/ifpga/pl030_rtc.c 13 Apr 2009 23:43:55 -0000
@@ -52,16 +52,15 @@ __KERNEL_RCSID(0, "$NetBSD: pl030_rtc.c,
#define PL030_RTC_SIZE 0x14
struct plrtc_softc {
- struct device sc_dev;
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
struct todr_chip_handle sc_todr;
};
-static int plrtc_probe (struct device *, struct cfdata *, void *);
-static void plrtc_attach (struct device *, struct device *, void *);
+static int plrtc_probe (device_t, cfdata_t, void *);
+static void plrtc_attach (device_t, device_t, void *);
-CFATTACH_DECL(plrtc, sizeof(struct plrtc_softc),
+CFATTACH_DECL_NEW(plrtc, sizeof(struct plrtc_softc),
plrtc_probe, plrtc_attach, NULL, NULL);
static int
@@ -86,21 +85,21 @@ plrtc_settime(todr_chip_handle_t todr, v
}
static int
-plrtc_probe(struct device *parent, struct cfdata *cf, void *aux)
+plrtc_probe(device_t parent, cfdata_t cf, void *aux)
{
return 1;
}
static void
-plrtc_attach(struct device *parent, struct device *self, void *aux)
+plrtc_attach(device_t parent, device_t self, void *aux)
{
struct ifpga_attach_args *ifa = aux;
- struct plrtc_softc *sc = (struct plrtc_softc *)self;
+ struct plrtc_softc *sc = device_private(self);
sc->sc_iot = ifa->ifa_iot;
if (bus_space_map(ifa->ifa_iot, ifa->ifa_addr, PL030_RTC_SIZE, 0,
&sc->sc_ioh)) {
- printf("%s: unable to map device\n", sc->sc_dev.dv_xname);
+ printf("%s: unable to map device\n", device_xname(self));
return;
}
Home |
Main Index |
Thread Index |
Old Index