cvs commit: src/sys/dev/firewire firewirereg.h fwohci.c sbp.c
Nate Lawson
nate at root.org
Thu Jun 7 17:04:02 UTC 2007
Hidetoshi Shimokawa wrote:
> simokawa 2007-06-07 13:20:49 UTC
>
> FreeBSD src repository
>
> Modified files:
> sys/dev/firewire firewirereg.h fwohci.c sbp.c
> Log:
> Add a tunable hw.firewire.phydma_enable.
>
> This is enabled by default. It should be disabled for
> those who are uneasy with peeking/poking from FireWire.
>
> Please note sbp(4) and dcons(4) over FireWire need
> this feature.
>
> Revision Changes Path
> 1.48 +1 -0 src/sys/dev/firewire/firewirereg.h
> 1.91 +11 -6 src/sys/dev/firewire/fwohci.c
> 1.94 +7 -0 src/sys/dev/firewire/sbp.c
>
>
> Index: src/sys/dev/firewire/firewirereg.h
> diff -u src/sys/dev/firewire/firewirereg.h:1.47 src/sys/dev/firewire/firewirereg.h:1.48
> --- src/sys/dev/firewire/firewirereg.h:1.47 Wed Jun 6 14:31:36 2007
> +++ src/sys/dev/firewire/firewirereg.h Thu Jun 7 13:20:48 2007
> @@ -299,6 +299,7 @@
>
> extern int firewire_debug;
> extern devclass_t firewire_devclass;
> +extern int firewire_phydma_enable;
>
> #ifdef __DragonFly__
> #define FWPRI PCATCH
> Index: src/sys/dev/firewire/fwohci.c
> diff -u src/sys/dev/firewire/fwohci.c:1.90 src/sys/dev/firewire/fwohci.c:1.91
> --- src/sys/dev/firewire/fwohci.c:1.90 Wed Jun 6 14:31:36 2007
> +++ src/sys/dev/firewire/fwohci.c Thu Jun 7 13:20:48 2007
> @@ -79,9 +79,13 @@
> #undef OHCI_DEBUG
>
> static int nocyclemaster = 0;
> +int firewire_phydma_enable = 1;
> SYSCTL_DECL(_hw_firewire);
> SYSCTL_INT(_hw_firewire, OID_AUTO, nocyclemaster, CTLFLAG_RW, &nocyclemaster, 0,
> "Do not send cycle start packets");
> +SYSCTL_INT(_hw_firewire, OID_AUTO, phydma_enable, CTLFLAG_RW,
> + &firewire_phydma_enable, 1, "Allow physical request DMA from firewire");
> +TUNABLE_INT("hw.firewire.phydma_enable", &firewire_phydma_enable);
>
> static char dbcode[16][0x10]={"OUTM", "OUTL","INPM","INPL",
> "STOR","LOAD","NOP ","STOP",};
> @@ -1862,12 +1866,13 @@
>
> /* Allow async. request to us */
> OWRITE(sc, OHCI_AREQHI, 1 << 31);
> - /* XXX insecure ?? */
> - /* allow from all nodes */
> - OWRITE(sc, OHCI_PREQHI, 0x7fffffff);
> - OWRITE(sc, OHCI_PREQLO, 0xffffffff);
> - /* 0 to 4GB regison */
> - OWRITE(sc, OHCI_PREQUPPER, 0x10000);
> + if (firewire_phydma_enable) {
> + /* allow from all nodes */
> + OWRITE(sc, OHCI_PREQHI, 0x7fffffff);
> + OWRITE(sc, OHCI_PREQLO, 0xffffffff);
> + /* 0 to 4GB region */
> + OWRITE(sc, OHCI_PREQUPPER, 0x10000);
> + }
> /* Set ATRetries register */
> OWRITE(sc, OHCI_ATRETRY, 1<<(13+16) | 0xfff);
I see this runs each time a PHY_SID intr arrives. Is that enough to
really prevent access if a pre-existing host on the bus requests DMA? I
don't think an intr is generated in that case.
Should this be a separate function run directly by the sysctl that sets
the filters immediately?
--
Nate
More information about the cvs-src
mailing list