Date: Tue, 8 Jul 2003 23:55:54 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 34230 for review Message-ID: <200307090655.h696tsEk099404@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=34230 Change 34230 by marcel@marcel_nfs on 2003/07/08 23:55:29 Add flag PUC_FLAGS_ALTRES. The flag tells puc(4) to try both memory and I/O port resources. The first one will be used. PUC_FLAGS_MEMORY tells puc(4) to try memory first. By default I/O port us tried first as that is the most common. Replace the magic 8 (size of ns8250 register resource) with ressz, which we set according to the subtype. Minor cleanups. Affected files ... .. //depot/projects/uart/dev/puc/puc.c#4 edit .. //depot/projects/uart/dev/puc/pucvar.h#4 edit Differences ... ==== //depot/projects/uart/dev/puc/puc.c#4 (text+ko) ==== @@ -220,8 +220,15 @@ res = bus_alloc_resource(dev, type, &rid, 0ul, ~0ul, 1, RF_ACTIVE); + if (res == NULL && + sc->sc_desc.ports[i].flags & PUC_FLAGS_ALTRES) { + type = (type == SYS_RES_IOPORT) + ? SYS_RES_MEMORY : SYS_RES_IOPORT; + res = bus_alloc_resource(dev, type, &rid, 0ul, ~0ul, 1, + RF_ACTIVE); + } if (res == NULL) { - printf("could not get resource\n"); + device_printf(dev, "could not get resource\n"); continue; } sc->sc_bar_mappings[bidx].type = type; @@ -306,11 +313,11 @@ rle->res->r_start = rman_get_start(res) + sc->sc_desc.ports[i].offset; - rle->res->r_end = rle->res->r_start + 8 - 1; + rle->res->r_end = rle->res->r_start + ressz - 1; rle->res->r_bustag = rman_get_bustag(res); bus_space_subregion(rle->res->r_bustag, rman_get_bushandle(res), - sc->sc_desc.ports[i].offset, 8, + sc->sc_desc.ports[i].offset, ressz, &rle->res->r_bushandle); } @@ -328,7 +335,7 @@ if (sc->sc_ports[i].dev == NULL) { if (sc->barmuxed) { bus_space_unmap(rman_get_bustag(rle->res), - rman_get_bushandle(rle->res), 8); + rman_get_bushandle(rle->res), ressz); free(rle->res, M_DEVBUF); free(pdev, M_DEVBUF); } @@ -348,8 +355,7 @@ if (device_probe_and_attach(sc->sc_ports[i].dev) != 0) { if (sc->barmuxed) { bus_space_unmap(rman_get_bustag(rle->res), - rman_get_bushandle(rle->res), - 8); + rman_get_bushandle(rle->res), ressz); free(rle->res, M_DEVBUF); free(pdev, M_DEVBUF); } @@ -438,7 +444,7 @@ printf("print_resource_list: rl %p\n", rl); SLIST_FOREACH(rle, rl, link) - printf(" type %x, rid %x start %x end %x count %x\n", + printf(" type %x, rid %x start %lx end %lx count %lx\n", rle->type, rle->rid, rle->start, rle->end, rle->count); printf("print_resource_list: end.\n"); #endif @@ -465,11 +471,9 @@ retval = NULL; rle = resource_list_find(rl, type, *rid); if (rle) { - start = rle->start; - end = rle->end; - count = rle->count; #ifdef PUC_DEBUG - printf("found rle, %lx, %lx, %lx\n", start, end, count); + printf("found rle, %lx, %lx, %lx\n", rle->start, rle->end, + rle->count); #endif retval = rle->res; } else ==== //depot/projects/uart/dev/puc/pucvar.h#4 (text+ko) ==== @@ -104,6 +104,7 @@ #define PUC_ILR_TYPE_DIGI 1 #define PUC_FLAGS_MEMORY 0x0001 /* Use memory mapped I/O. */ +#define PUC_FLAGS_ALTRES 0x0002 /* Use alternate I/O type. */ #define PUC_PORT_VALID(desc, port) \ ((port) < PUC_MAX_PORTS && (desc).ports[(port)].type != PUC_PORT_TYPE_NONE)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200307090655.h696tsEk099404>