summaryrefslogtreecommitdiff
path: root/sys/dev/iwm
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2019-11-07 23:34:28 +0000
committerMark Johnston <markj@FreeBSD.org>2019-11-07 23:34:28 +0000
commit4e5deb67345d90e9645ccc4dd0a94f9eaf6d7e68 (patch)
tree497d59fdacc8a98d736fb03a3fcf64f720e03a27 /sys/dev/iwm
parent9dd27490442be76f31ce365fd265481cefc7e324 (diff)
Notes
Diffstat (limited to 'sys/dev/iwm')
-rw-r--r--sys/dev/iwm/if_iwm_pcie_trans.c21
-rw-r--r--sys/dev/iwm/if_iwm_pcie_trans.h4
2 files changed, 25 insertions, 0 deletions
diff --git a/sys/dev/iwm/if_iwm_pcie_trans.c b/sys/dev/iwm/if_iwm_pcie_trans.c
index a50e47945812..a8c8ac9fa00a 100644
--- a/sys/dev/iwm/if_iwm_pcie_trans.c
+++ b/sys/dev/iwm/if_iwm_pcie_trans.c
@@ -185,6 +185,27 @@ iwm_write_prph(struct iwm_softc *sc, uint32_t addr, uint32_t val)
IWM_WRITE(sc, IWM_HBUS_TARG_PRPH_WDAT, val);
}
+void
+iwm_write_prph64(struct iwm_softc *sc, uint64_t addr, uint64_t val)
+{
+ iwm_write_prph(sc, (uint32_t)addr, val & 0xffffffff);
+ iwm_write_prph(sc, (uint32_t)addr + 4, val >> 32);
+}
+
+int
+iwm_poll_prph(struct iwm_softc *sc, uint32_t addr, uint32_t bits, uint32_t mask,
+ int timeout)
+{
+ do {
+ if ((iwm_read_prph(sc, addr) & mask) == (bits & mask))
+ return (0);
+ DELAY(10);
+ timeout -= 10;
+ } while (timeout > 0);
+
+ return (ETIMEDOUT);
+}
+
#ifdef IWM_DEBUG
/* iwlwifi: pcie/trans.c */
int
diff --git a/sys/dev/iwm/if_iwm_pcie_trans.h b/sys/dev/iwm/if_iwm_pcie_trans.h
index e04dd52f3fe3..bdbd85476af3 100644
--- a/sys/dev/iwm/if_iwm_pcie_trans.h
+++ b/sys/dev/iwm/if_iwm_pcie_trans.h
@@ -106,6 +106,10 @@
extern uint32_t iwm_read_prph(struct iwm_softc *sc, uint32_t addr);
extern void iwm_write_prph(struct iwm_softc *sc, uint32_t addr, uint32_t val);
+extern void iwm_write_prph64(struct iwm_softc *sc, uint64_t addr,
+ uint64_t val);
+extern int iwm_poll_prph(struct iwm_softc *sc, uint32_t addr, uint32_t bits,
+ uint32_t mask, int timeout);
extern int iwm_read_mem(struct iwm_softc *sc, uint32_t addr, void *buf, int dwords);
extern int iwm_write_mem(struct iwm_softc *sc, uint32_t addr, const void *buf,
int dwords);