svn commit: r192450 - in head/sys/dev: aac acpica amr arcmsr
ata ciss cxgb iir mfi mpt pci twa twe wi
John Baldwin
jhb at freebsd.org
Wed May 20 17:55:34 UTC 2009
On Wednesday 20 May 2009 1:29:21 pm Warner Losh wrote:
> Author: imp
> Date: Wed May 20 17:29:21 2009
> New Revision: 192450
> URL: http://svn.freebsd.org/changeset/base/192450
>
> Log:
> We no longer need to use d_thread_t, migrate to struct thread *.
>
> Modified: head/sys/dev/ata/ata-all.c
> ==============================================================================
> --- head/sys/dev/ata/ata-all.c Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/ata/ata-all.c Wed May 20 17:29:21 2009 (r192450)
> @@ -663,7 +663,7 @@ ata_getparam(struct ata_device *atadev,
> btrim(atacap->serial, sizeof(atacap->serial));
> bpack(atacap->serial, atacap->serial, sizeof(atacap->serial));
>
> - if (bootverbose)
> + if (bootverbose || 1)
> printf("ata%d-%s: pio=%s wdma=%s udma=%s cable=%s wire\n",
> device_get_unit(ch->dev),
> ata_unit2str(atadev),
>
Oops?
> Modified: head/sys/dev/pci/pci.c
> ==============================================================================
> --- head/sys/dev/pci/pci.c Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/pci/pci.c Wed May 20 17:29:21 2009 (r192450)
> @@ -418,6 +418,38 @@ pci_hdrtypedata(device_t pcib, int b, in
> #undef REG
> }
>
> +/*
> + * This is a lame example: we should have some way of managing this table
> + * from userland. The user should be able to tell us from the boot loader
> + * or at runtime what mapping to do.
> + */
> +static struct pci_remap_entry
> +{
> + uint16_t vendor;
> + uint16_t device;
> + uint16_t mapped_vendor;
> + uint16_t mapped_device;
> +} pci_remap[] =
> +{
> + { 0x1039, 0x0901, 0x1039, 0x0900 } /* Map sis 901 to sis 900 */
> +};
> +static int pci_remap_entries = 1;
> +
> +static void
> +pci_apply_remap_table(pcicfgregs *cfg)
> +{
> + int i;
> +
> + for (i = 0; i < pci_remap_entries; i++) {
> + if (cfg->vendor == pci_remap[i].vendor &&
> + cfg->device == pci_remap[i].device) {
> + cfg->vendor = pci_remap[i].mapped_vendor;
> + cfg->device = pci_remap[i].mapped_device;
> + return;
> + }
> + }
> +}
> +
> /* read configuration header into pcicfgregs structure */
> struct pci_devinfo *
> pci_read_device(device_t pcib, int d, int b, int s, int f, size_t size)
> @@ -464,6 +496,7 @@ pci_read_device(device_t pcib, int d, in
>
> pci_fixancient(cfg);
> pci_hdrtypedata(pcib, b, s, f, cfg);
> + pci_apply_remap_table(cfg);
>
> if (REG(PCIR_STATUS, 2) & PCIM_STATUS_CAPPRESENT)
> pci_read_extcap(pcib, cfg);
> @@ -2619,6 +2652,59 @@ pci_add_resources(device_t bus, device_t
> }
> }
>
> +/*
> + * After we've added the children to the pci bus device, we need to fixup
> + * the children in various ways. This function fixes things that require
> + * multiple passes to get right, such as bus number and some resource
> + * things (although the latter hasn't been implemented yet). This must be
> + * done before the children are probe/attached, sicne by that point these
> + * things must be fixed.
> + */
> +static void
> +pci_fix_bridges(device_t dev)
> +{
> + int i, numdevs, error, secbus, subbus;
> + device_t child, *devlist;
> +
> + if ((error = device_get_children(dev, &devlist, &numdevs)))
> + return;
> + /*
> + * First pass, get the bus numbers that are in use
> + */
> + for (i = 0; i < numdevs; i++) {
> + child = devlist[i];
> + switch (pci_read_config(child, PCIR_HDRTYPE, 1) & PCIM_HDRTYPE) {
> + default:
> + continue;
> + case 1: /* PCI-PCI bridge */
> + case 2: /* CardBus bridge -- offsets are the same */
> + secbus = pci_read_config(child, PCIR_SECBUS_1, 1);
> + subbus = pci_read_config(child, PCIR_SUBBUS_1, 1);
> + break;
> + }
> + printf("%d:%d:%d:%d sec %d sub %d\n", pcib_get_domain(dev),
> + pci_get_bus(child), pci_get_slot(child),
> + pci_get_function(child), secbus, subbus);
> + }
> +#if 0
> + /*
> + * Second pass, Fix the bus numbers, as needed
> + */
> + for (i = 0; i < numdevs; i++) {
> + child = devlist[i];
> + switch (pci_read_config(dev, PCIR_HDRTYPE, 1) & PCIM_HDRTYPE) {
> + case 1: /* PCI-PCI bridge */
> + break;
> + case 2: /* CardBus bridge */
> + break;
> + default:
> + continue;
> + }
> + }
> +#endif
> + free(devlist, M_TEMP);
> +}
> +
> void
> pci_add_children(device_t dev, int domain, int busno, size_t dinfo_size)
> {
> @@ -2650,6 +2736,7 @@ pci_add_children(device_t dev, int domai
> }
> }
> #undef REG
> + pci_fix_bridges(dev);
> }
>
> void
>
> Modified: head/sys/dev/pci/pci_pci.c
> ==============================================================================
> --- head/sys/dev/pci/pci_pci.c Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/pci/pci_pci.c Wed May 20 17:29:21 2009 (r192450)
> @@ -52,6 +52,13 @@ __FBSDID("$FreeBSD$");
>
> #include "pcib_if.h"
>
> +// #define KLUDGE_O_MATIC
> +#ifdef KLUDGE_O_MATIC
> +int hack_unit = 1;
> +u_long mem_base = 0xc0400000ul;
> +u_long mem_limit = 0x00100000ul;
> +#endif
> +
> static int pcib_probe(device_t dev);
>
> static device_method_t pcib_methods[] = {
> @@ -324,6 +331,14 @@ pcib_attach(device_t dev)
> struct pcib_softc *sc;
> device_t child;
>
> +#ifdef KLUDGE_O_MATIC
> + if (device_get_unit(dev) == hack_unit) {
> + pci_write_config(dev, PCIR_COMMAND,
> + PCIM_CMD_MEMEN | pci_read_config(dev, PCIR_COMMAND, 1), 1);
> + pci_write_config(dev, PCIR_MEMBASE_1, mem_base >> 16, 2);
> + pci_write_config(dev, PCIR_MEMLIMIT_1, mem_limit >> 16, 2);
> + }
> +#endif
> pcib_attach_common(dev);
> sc = device_get_softc(dev);
> if (sc->secbus != 0) {
>
> Modified: head/sys/dev/pci/pcib_if.m
> ==============================================================================
> --- head/sys/dev/pci/pcib_if.m Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/pci/pcib_if.m Wed May 20 17:29:21 2009 (r192450)
> @@ -144,3 +144,17 @@ METHOD int map_msi {
> uint64_t *addr;
> uint32_t *data;
> };
> +
> +#
> +# Return the range of busses passed through this bridge. For normal
> +# pci-pci bridges (and compatible things like pci-x and pcie), this will
> +# just be the secbus and subbus configuration registers. For non-standard
> +# bridges, or for host bridges which have no standard, this will be the
> +# same data read from either device specific registers of from "perfect
> +# knowledge" of what they must be.
> +#
> +METHOD int bus_range {
> + device_t pcib;
> + u_int *secbus;
> + u_int *subbus;
> +};
>
More oops?
> Modified: head/sys/dev/wi/if_wavelan_ieee.h
> ==============================================================================
> --- head/sys/dev/wi/if_wavelan_ieee.h Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/wi/if_wavelan_ieee.h Wed May 20 17:29:21 2009 (r192450)
> @@ -58,14 +58,11 @@
> * value.
> */
> #define WI_MAX_DATALEN 512
> -
> -#if 0
> struct wi_req {
> u_int16_t wi_len;
> u_int16_t wi_type;
> u_int16_t wi_val[WI_MAX_DATALEN];
> };
> -#endif
>
> /*
> * Private LTV records (interpreted only by the driver). This is
>
> Modified: head/sys/dev/wi/if_wi.c
> ==============================================================================
> --- head/sys/dev/wi/if_wi.c Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/wi/if_wi.c Wed May 20 17:29:21 2009 (r192450)
> @@ -143,7 +143,6 @@ static int wi_alloc_fid(struct wi_softc
> static void wi_read_nicid(struct wi_softc *);
> static int wi_write_ssid(struct wi_softc *, int, u_int8_t *, int);
>
> -static int wi_cmd(struct wi_softc *, int, int, int, int);
> static int wi_seek_bap(struct wi_softc *, int, int);
> static int wi_read_bap(struct wi_softc *, int, int, void *, int);
> static int wi_write_bap(struct wi_softc *, int, int, void *, int);
> @@ -1801,7 +1800,7 @@ wi_write_wep(struct wi_softc *sc, struct
> return error;
> }
>
> -static int
> +int
> wi_cmd(struct wi_softc *sc, int cmd, int val0, int val1, int val2)
> {
> int i, s = 0;
> @@ -2120,3 +2119,5 @@ wi_free(device_t dev)
> sc->mem = NULL;
> }
> }
> +
> +MODULE_VERSION(wi, 1);
>
> Modified: head/sys/dev/wi/if_wivar.h
> ==============================================================================
> --- head/sys/dev/wi/if_wivar.h Wed May 20 17:19:30 2009 (r192449)
> +++ head/sys/dev/wi/if_wivar.h Wed May 20 17:29:21 2009 (r192450)
> @@ -186,3 +186,6 @@ void wi_init(void *);
> void wi_intr(void *);
> int wi_mgmt_xmit(struct wi_softc *, caddr_t, int);
> void wi_stop(struct wi_softc *, int);
> +
> +/* KLUDGE */
> +int wi_cmd(struct wi_softc *, int, int, int, int);
Also oops?
--
John Baldwin
More information about the svn-src-all
mailing list