Make these compile. Next step is to connect newbus plumbing.

This commit is contained in:
Warner Losh 1999-10-27 05:24:09 +00:00
parent 48a1466abf
commit fac207b0b2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=52548
5 changed files with 88 additions and 70 deletions

View File

@ -1,8 +1,6 @@
/* $NetBSD: i82365.c,v 1.23 1999/02/19 03:14:00 mycroft Exp $ */
/* $FreeBSD$ */
#define PCICDEBUG
/*
* Copyright (c) 1997 Marc Horowitz. All rights reserved.
*
@ -45,6 +43,8 @@
#include <sys/rman.h>
#include <machine/resource.h>
#include <machine/clock.h>
#include <sys/proc.h>
#include <sys/wait.h>
#include <sys/kthread.h>
@ -67,6 +67,9 @@ int pcic_debug = 0;
#define DPRINTF(arg)
#endif
#define DETACH_FORCE 0x1
#define PCIC_VENDOR_UNKNOWN 0
#define PCIC_VENDOR_I82365SLR0 1
#define PCIC_VENDOR_I82365SLR1 2
@ -83,8 +86,10 @@ int pcic_debug = 0;
void pcic_attach_socket __P((struct pcic_handle *));
void pcic_init_socket __P((struct pcic_handle *));
#if XXX
int pcic_submatch __P((struct device *, struct cfdata *, void *));
int pcic_print __P((void *arg, const char *pnp));
#endif
int pcic_intr_socket __P((struct pcic_handle *));
void pcic_attach_card __P((struct pcic_handle *));
@ -174,9 +179,10 @@ pcic_vendor_to_string(vendor)
}
void
pcic_attach(sc)
struct pcic_softc *sc;
pcic_attach(device_t dev)
{
struct pcic_softc *sc = (struct pcic_softc *)
device_get_softc(dev);
int vendor, count, i, reg;
/* now check for each controller/socket */
@ -265,7 +271,7 @@ pcic_attach(sc)
*/
if (sc->handle[i].flags & PCIC_FLAG_SOCKETP)
{
SIMPLEQ_INIT(&sc->handle[i].events);
STAILQ_INIT(&sc->handle[i].events);
pcic_write(&sc->handle[i], PCIC_CSC_INTR, 0);
pcic_read(&sc->handle[i], PCIC_CSC);
}
@ -275,7 +281,7 @@ pcic_attach(sc)
(sc->handle[1].flags & PCIC_FLAG_SOCKETP)) {
vendor = pcic_vendor(&sc->handle[0]);
printf("%s: controller 0 (%s) has ", sc->dev.dv_xname,
device_printf(dev, "controller 0 (%s) has ",
pcic_vendor_to_string(vendor));
if ((sc->handle[0].flags & PCIC_FLAG_SOCKETP) &&
@ -295,7 +301,7 @@ pcic_attach(sc)
(sc->handle[3].flags & PCIC_FLAG_SOCKETP)) {
vendor = pcic_vendor(&sc->handle[2]);
printf("%s: controller 1 (%s) has ", sc->dev.dv_xname,
device_printf(dev, "controller 1 (%s) has ",
pcic_vendor_to_string(vendor));
if ((sc->handle[2].flags & PCIC_FLAG_SOCKETP) &&
@ -344,8 +350,10 @@ pcic_attach_socket(h)
paa.iobase = h->sc->iobase;
paa.iosize = h->sc->iosize;
#if XXX
h->pccard = config_found_sm(&h->sc->dev, &paa, pcic_print,
pcic_submatch);
#endif
/* if there's actually a pccard device attached, initialize the slot */
@ -377,14 +385,14 @@ pcic_create_event_thread(arg)
panic("pcic_create_event_thread: unknown pcic socket");
}
if (kthread_create1(pcic_event_thread, h, &h->event_thread,
"%s,%s", h->sc->dev.dv_xname, cs)) {
printf("%s: unable to create event thread for sock 0x%02x\n",
h->sc->dev.dv_xname, h->sock);
if (kthread_create(pcic_event_thread, h, &h->event_thread,
"%s,%s", device_get_name(h->sc->dev), cs)) {
device_printf(h->sc->dev,
"cannot create event thread for sock 0x%02x\n", h->sock);
panic("pcic_create_event_thread");
} else
printf("%s: create event thread for sock 0x%02x\n",
h->sc->dev.dv_xname, h->sock);
device_printf(h->sc->dev,
"create event thread for sock 0x%02x\n", h->sock);
}
@ -398,7 +406,7 @@ pcic_event_thread(arg)
while (h->shutdown == 0) {
s = splhigh();
if ((pe = SIMPLEQ_FIRST(&h->events)) == NULL) {
if ((pe = STAILQ_FIRST(&h->events)) == NULL) {
splx(s);
(void) tsleep(&h->events, PWAIT, "pcicev", 0);
continue;
@ -408,7 +416,7 @@ pcic_event_thread(arg)
(void) tsleep((caddr_t)pcic_event_thread, PWAIT, "pcicss", hz/4);
}
s = splhigh();
SIMPLEQ_REMOVE_HEAD(&h->events, pe, pe_q);
STAILQ_REMOVE_HEAD_UNTIL(&h->events, pe, pe_q);
splx(s);
switch (pe->pe_type) {
@ -417,16 +425,16 @@ pcic_event_thread(arg)
while (1) {
struct pcic_event *pe1, *pe2;
if ((pe1 = SIMPLEQ_FIRST(&h->events)) == NULL)
if ((pe1 = STAILQ_FIRST(&h->events)) == NULL)
break;
if (pe1->pe_type != PCIC_EVENT_REMOVAL)
break;
if ((pe2 = SIMPLEQ_NEXT(pe1, pe_q)) == NULL)
if ((pe2 = STAILQ_NEXT(pe1, pe_q)) == NULL)
break;
if (pe2->pe_type == PCIC_EVENT_INSERTION) {
SIMPLEQ_REMOVE_HEAD(&h->events, pe1, pe_q);
STAILQ_REMOVE_HEAD_UNTIL(&h->events, pe1, pe_q);
free(pe1, M_TEMP);
SIMPLEQ_REMOVE_HEAD(&h->events, pe2, pe_q);
STAILQ_REMOVE_HEAD_UNTIL(&h->events, pe2, pe_q);
free(pe2, M_TEMP);
}
}
@ -441,16 +449,16 @@ pcic_event_thread(arg)
while (1) {
struct pcic_event *pe1, *pe2;
if ((pe1 = SIMPLEQ_FIRST(&h->events)) == NULL)
if ((pe1 = STAILQ_FIRST(&h->events)) == NULL)
break;
if (pe1->pe_type != PCIC_EVENT_INSERTION)
break;
if ((pe2 = SIMPLEQ_NEXT(pe1, pe_q)) == NULL)
if ((pe2 = STAILQ_NEXT(pe1, pe_q)) == NULL)
break;
if (pe2->pe_type == PCIC_EVENT_REMOVAL) {
SIMPLEQ_REMOVE_HEAD(&h->events, pe1, pe_q);
STAILQ_REMOVE_HEAD_UNTIL(&h->events, pe1, pe_q);
free(pe1, M_TEMP);
SIMPLEQ_REMOVE_HEAD(&h->events, pe2, pe_q);
STAILQ_REMOVE_HEAD_UNTIL(&h->events, pe2, pe_q);
free(pe2, M_TEMP);
}
}
@ -488,7 +496,7 @@ pcic_init_socket(h)
if (h->event_thread != NULL)
panic("pcic_attach_socket: event thread");
#endif
kthread_create(pcic_create_event_thread, h);
pcic_create_event_thread(h);
/* set up the card to interrupt on card detect */
@ -522,6 +530,7 @@ pcic_init_socket(h)
}
}
#if XXX
int
pcic_submatch(parent, cf, aux)
struct device *parent;
@ -583,7 +592,9 @@ pcic_submatch(parent, cf, aux)
return ((*cf->cf_attach->ca_match)(parent, cf, aux));
}
#endif
#if XXX
int
pcic_print(arg, pnp)
void *arg;
@ -615,6 +626,7 @@ pcic_print(arg, pnp)
return (UNCONF);
}
#endif
int
pcic_intr(arg)
@ -707,7 +719,7 @@ pcic_queue_event(h, event)
pe->pe_type = event;
s = splhigh();
SIMPLEQ_INSERT_TAIL(&h->events, pe, pe_q);
STAILQ_INSERT_TAIL(&h->events, pe, pe_q);
splx(s);
wakeup(&h->events);
}
@ -718,8 +730,10 @@ pcic_attach_card(h)
{
struct pccard_softc *psc = (void*)h->pccard;
if (!(h->flags & PCIC_FLAG_CARDP)) {
#if XXX
/* call the MI attach function */
psc->sc_if.if_card_attach (psc);
#endif
h->flags |= PCIC_FLAG_CARDP;
} else {
@ -737,7 +751,9 @@ pcic_detach_card(h, flags)
h->flags &= ~PCIC_FLAG_CARDP;
/* call the MI detach function */
#if XXX
psc->sc_if.if_card_detach (psc, flags);
#endif
} else {
DPRINTF(("pcic_detach_card: already detached"));
}
@ -749,7 +765,9 @@ pcic_deactivate_card(h)
{
struct pccard_softc *psc = (void*)h->pccard;
/* call the MI deactivate function */
#if XXX
psc->sc_if.if_card_deactivate (psc);
#endif
/* power down the socket */
pcic_write(h, PCIC_PWRCTL, 0);
@ -784,10 +802,12 @@ pcic_chip_mem_alloc(pch, size, pcmhp)
for (i = 0; i <= PCIC_MAX_MEM_PAGES - sizepg; i++) {
if ((h->sc->subregionmask & (mask << i)) == (mask << i)) {
#if XXX
if (bus_space_subregion(h->sc->memt, h->sc->memh,
i * PCIC_MEM_PAGESIZE,
sizepg * PCIC_MEM_PAGESIZE, &memh))
return (1);
#endif
mhandle = mask << i;
addr = h->sc->membase + (i * PCIC_MEM_PAGESIZE);
h->sc->subregionmask &= ~(mhandle);
@ -1037,16 +1057,20 @@ pcic_chip_io_alloc(pch, start, size, align, pcihp)
if (start) {
ioaddr = start;
#if XXX
if (bus_space_map(iot, start, size, 0, &ioh))
return (1);
#endif
DPRINTF(("pcic_chip_io_alloc map port %lx+%lx\n",
(u_long) ioaddr, (u_long) size));
} else {
flags |= PCCARD_IO_ALLOCATED;
#if XXX
if (bus_space_alloc(iot, h->sc->iobase,
h->sc->iobase + h->sc->iosize, size, align, 0, 0,
&ioaddr, &ioh))
return (1);
#endif
DPRINTF(("pcic_chip_io_alloc alloc port %lx+%lx\n",
(u_long) ioaddr, (u_long) size));
}
@ -1069,10 +1093,12 @@ pcic_chip_io_free(pch, pcihp)
bus_space_handle_t ioh = pcihp->ioh;
bus_size_t size = pcihp->size;
#if XXX
if (pcihp->flags & PCCARD_IO_ALLOCATED)
bus_space_free(iot, ioh, size);
else
bus_space_unmap(iot, ioh, size);
#endif
}
@ -1314,7 +1340,9 @@ pcic_chip_socket_enable(pch)
/* set the card type */
#if XXX
cardtype = psc->sc_if.if_card_gettype (psc);
#endif
reg = pcic_read(h, PCIC_INTR);
reg &= ~(PCIC_INTR_CARDTYPE_MASK | PCIC_INTR_IRQ_MASK | PCIC_INTR_ENABLE);

View File

@ -1,8 +1,6 @@
/* $NetBSD: i82365_isa.c,v 1.11 1998/06/09 07:25:00 thorpej Exp $ */
/* $FreeBSD$ */
#define PCICISADEBUG
/*
* Copyright (c) 1997 Marc Horowitz. All rights reserved.
*
@ -70,22 +68,9 @@ int pcicisa_debug = 0 /* XXX */ ;
#define DPRINTF(arg)
#endif
int pcic_isa_probe __P((struct device *, struct cfdata *, void *));
void pcic_isa_attach __P((struct device *, struct device *, void *));
int pcic_isa_probe(device_t dev);
int pcic_isa_attach(device_t dev);
void *pcic_isa_chip_intr_establish __P((pccard_chipset_handle_t,
struct pccard_function *, int, int (*) (void *), void *));
void pcic_isa_chip_intr_disestablish __P((pccard_chipset_handle_t, void *));
#ifdef __FreeBSD__
struct cfattach pcic_isa_ca = {
sizeof(struct pcic_softc), pcic_isa_probe, pcic_isa_attach
};
#else
struct cfattach pcic_isa_ca = {
sizeof(struct pcic_softc), pcic_isa_probe, pcic_isa_attach
};
#endif
static struct pccard_chip_functions pcic_isa_functions = {
pcic_chip_mem_alloc,
pcic_chip_mem_free,
@ -105,11 +90,9 @@ static struct pccard_chip_functions pcic_isa_functions = {
};
int
pcic_isa_probe(parent, match, aux)
struct device *parent;
struct cfdata *match;
void *aux;
pcic_isa_probe(device_t dev)
{
#if XXX
struct isa_attach_args *ia = aux;
bus_space_tag_t iot = ia->ia_iot;
bus_space_handle_t ioh, memh;
@ -182,15 +165,14 @@ pcic_isa_probe(parent, match, aux)
return (0);
ia->ia_iosize = PCIC_IOSIZE;
#endif
return (1);
}
void
pcic_isa_attach(parent, self, aux)
struct device *parent, *self;
void *aux;
int
pcic_isa_attach(device_t dev)
{
#if 0
struct pcic_softc *sc = (void *) self;
struct isa_attach_args *ia = aux;
isa_chipset_tag_t ic = ia->ia_ic;
@ -259,4 +241,6 @@ pcic_isa_attach(parent, self, aux)
}
pcic_attach_sockets(sc);
#endif
return 0;
}

View File

@ -1,8 +1,6 @@
/* $NetBSD: i82365_isasubr.c,v 1.1 1998/06/07 18:28:31 sommerfe Exp $ */
/* $FreeBSD$ */
#define PCICISADEBUG
/*
* Copyright (c) 1998 Bill Sommerfeld. All rights reserved.
* Copyright (c) 1997 Marc Horowitz. All rights reserved.
@ -121,13 +119,15 @@ int pcicsubr_debug = 0 /* XXX */ ;
#define DPRINTF(arg)
#endif
void pcic_isa_bus_width_probe (sc, iot, ioh, base, length)
struct pcic_softc *sc;
void pcic_isa_bus_width_probe (dev, iot, ioh, base, length)
device_t dev;
bus_space_tag_t iot;
bus_space_handle_t ioh;
bus_addr_t base;
u_int32_t length;
{
struct pcic_softc *sc = (struct pcic_softc *)
device_get_softc(dev);
bus_space_handle_t ioh_high;
int i, iobuswidth, tmp1, tmp2;
@ -138,12 +138,13 @@ void pcic_isa_bus_width_probe (sc, iot, ioh, base, length)
iobuswidth = 12;
#if XXX
/* Map i/o space. */
if (bus_space_map(iot, base + 0x400, length, 0, &ioh_high)) {
printf("%s: can't map high i/o space\n", sc->dev.dv_xname);
return;
}
#endif
for (i = 0; i < PCIC_NSLOTS; i++) {
if (sc->handle[i].flags & PCIC_FLAG_SOCKETP) {
/*
@ -164,7 +165,9 @@ void pcic_isa_bus_width_probe (sc, iot, ioh, base, length)
}
}
#if XXX
bus_space_free(iot, ioh_high, length);
#endif
/*
* XXX mycroft recommends I/O space range 0x400-0xfff . I should put
@ -227,6 +230,8 @@ pcic_isa_chip_intr_establish(pch, pf, ipl, fct, arg)
int (*fct) __P((void *));
void *arg;
{
#define IST_LEVEL 1
#define IST_PULSE 2
struct pcic_handle *h = (struct pcic_handle *) pch;
isa_chipset_tag_t ic = h->sc->intr_est;
int irq, ist;
@ -240,12 +245,14 @@ pcic_isa_chip_intr_establish(pch, pf, ipl, fct, arg)
else
ist = IST_LEVEL;
#if XXX
if (isa_intr_alloc(ic,
PCIC_INTR_IRQ_VALIDMASK & pcic_isa_intr_alloc_mask, ist, &irq))
return (NULL);
if ((ih = isa_intr_establish(ic, irq, ist, ipl,
fct, arg)) == NULL)
return (NULL);
#endif
reg = pcic_read(h, PCIC_INTR);
reg &= ~PCIC_INTR_IRQ_MASK;
@ -254,7 +261,7 @@ pcic_isa_chip_intr_establish(pch, pf, ipl, fct, arg)
h->ih_irq = irq;
printf("%s: card irq %d\n", h->pccard->dv_xname, irq);
printf("card irq %d\n",irq);
return (ih);
}
@ -274,5 +281,7 @@ pcic_isa_chip_intr_disestablish(pch, ih)
reg &= ~(PCIC_INTR_IRQ_MASK | PCIC_INTR_ENABLE);
pcic_write(h, PCIC_INTR, reg);
#if XXX
isa_intr_disestablish(ic, ih);
#endif
}

View File

@ -34,17 +34,17 @@
extern int pcic_isa_intr_alloc_mask;
/*
* Establish/disestablish interrupts for PCMCIA functions.
* Establish/disestablish interrupts for PCCARD functions.
*/
void *pcic_isa_chip_intr_establish __P((pcmcia_chipset_handle_t,
struct pcmcia_function *, int, int (*) (void *), void *));
void pcic_isa_chip_intr_disestablish __P((pcmcia_chipset_handle_t, void *));
void *pcic_isa_chip_intr_establish __P((pccard_chipset_handle_t,
struct pccard_function *, int, int (*) (void *), void *));
void pcic_isa_chip_intr_disestablish __P((pccard_chipset_handle_t, void *));
/*
* Figure out how wide the ISA bus is...
*/
void pcic_isa_bus_width_probe __P((struct pcic_softc *, bus_space_tag_t,
bus_space_handle_t, bus_addr_t, u_int32_t));
void pcic_isa_bus_width_probe (device_t, bus_space_tag_t, bus_space_handle_t,
bus_addr_t, u_int32_t);

View File

@ -38,7 +38,7 @@
struct proc;
struct pcic_event {
SIMPLEQ_ENTRY(pcic_event) pe_q;
STAILQ_ENTRY(pcic_event) pe_q;
int pe_type;
};
@ -70,7 +70,7 @@ struct pcic_handle {
int shutdown;
struct proc *event_thread;
SIMPLEQ_HEAD(, pcic_event) events;
STAILQ_HEAD(, pcic_event) events;
};
#define PCIC_FLAG_SOCKETP 0x0001
@ -96,7 +96,7 @@ struct pcic_handle {
#define PCIC_NSLOTS 4
struct pcic_softc {
struct device dev;
device_t dev;
bus_space_tag_t memt;
bus_space_handle_t memh;
@ -136,13 +136,10 @@ int pcic_ident_ok __P((int));
int pcic_vendor __P((struct pcic_handle *));
char *pcic_vendor_to_string __P((int));
void pcic_attach __P((struct pcic_softc *));
void pcic_attach(device_t dev);
void pcic_attach_sockets __P((struct pcic_softc *));
int pcic_intr __P((void *arg));
static __inline int pcic_read __P((struct pcic_handle *, int));
static __inline void pcic_write __P((struct pcic_handle *, int, int));
int pcic_chip_mem_alloc __P((pccard_chipset_handle_t, bus_size_t,
struct pccard_mem_handle *));
void pcic_chip_mem_free __P((pccard_chipset_handle_t,