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.
This commit is contained in:
parent
f6416cb484
commit
ac2d2894b4
@ -299,6 +299,7 @@ int fw_open_isodma(struct firewire_comm *, int);
|
||||
|
||||
extern int firewire_debug;
|
||||
extern devclass_t firewire_devclass;
|
||||
extern int firewire_phydma_enable;
|
||||
|
||||
#ifdef __DragonFly__
|
||||
#define FWPRI PCATCH
|
||||
|
@ -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 @@ fwohci_intr_core(struct fwohci_softc *sc, uint32_t stat, int count)
|
||||
|
||||
/* 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);
|
||||
|
||||
|
@ -824,6 +824,10 @@ sbp_post_explore(void *arg)
|
||||
SBP_DEBUG(0)
|
||||
printf("sbp_post_explore (sbp_cold=%d)\n", sbp_cold);
|
||||
END_DEBUG
|
||||
/* We need physical access */
|
||||
if (!firewire_phydma_enable)
|
||||
return;
|
||||
|
||||
if (sbp_cold > 0)
|
||||
sbp_cold --;
|
||||
|
||||
@ -1946,6 +1950,9 @@ sbp_attach(device_t dev)
|
||||
"SBP_MAXPHYS(%dKB).\n", DFLTPHYS / 1024,
|
||||
SBP_MAXPHYS / 1024);
|
||||
|
||||
if (!firewire_phydma_enable)
|
||||
device_printf(dev, "Warning, hw.firewire.phydma_enable must be 1 "
|
||||
"for SBP over FireWire.\n");
|
||||
SBP_DEBUG(0)
|
||||
printf("sbp_attach (cold=%d)\n", cold);
|
||||
END_DEBUG
|
||||
|
Loading…
x
Reference in New Issue
Block a user