PERFORCE change 66119 for review
Sam Leffler
sam at FreeBSD.org
Tue Nov 30 10:14:23 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=66119
Change 66119 by sam at sam_ebb on 2004/11/30 18:14:17
add more power save portability shims
Affected files ...
.. //depot/projects/wifi/sys/net80211/ieee80211_freebsd.h#7 edit
Differences ...
==== //depot/projects/wifi/sys/net80211/ieee80211_freebsd.h#7 (text+ko) ====
@@ -64,17 +64,39 @@
mtx_destroy(&(_ni)->ni_savedq.ifq_mtx)
#define IEEE80211_NODE_SAVEQ_QLEN(_ni) \
_IF_QLEN(&(_ni)->ni_savedq)
+#define IEEE80211_NODE_SAVEQ_LOCK(_ni) do { \
+ IF_LOCK(&(_ni)->ni_savedq); \
+} while (0)
+#define IEEE80211_NODE_SAVEQ_UNLOCK(_ni) do { \
+ IF_UNLOCK(&(_ni)->ni_savedq); \
+} while (0)
#define IEEE80211_NODE_SAVEQ_DEQUEUE(_ni, _m, _qlen) do { \
- IF_LOCK(&(_ni)->ni_savedq); \
+ IEEE80211_NODE_SAVEQ_LOCK(_ni); \
_IF_DEQUEUE(&(_ni)->ni_savedq, _m); \
- (_qlen) = _IF_QLEN(&(_ni)->ni_savedq); \
- IF_UNLOCK(&(_ni)->ni_savedq); \
+ (_qlen) = IEEE80211_NODE_SAVEQ_QLEN(_ni); \
+ IEEE80211_NODE_SAVEQ_UNLOCK(_ni); \
} while (0)
#define IEEE80211_NODE_SAVEQ_DRAIN(_ni, _qlen) do { \
- IF_LOCK(&(_ni)->ni_savedq); \
- (_qlen) = _IF_QLEN(&(_ni)->ni_savedq); \
+ IEEE80211_NODE_SAVEQ_LOCK(_ni); \
+ (_qlen) = IEEE80211_NODE_SAVEQ_QLEN(_ni); \
_IF_DRAIN(&(_ni)->ni_savedq); \
- IF_UNLOCK(&(_ni)->ni_savedq); \
+ IEEE80211_NODE_SAVEQ_UNLOCK(_ni); \
+} while (0)
+/* XXX could be optimized */
+#define _IEEE80211_NODE_SAVEQ_DEQUEUE_HEAD(_ni, _m) do { \
+ _IF_DEQUEUE(&(_ni)->ni_savedq, m); \
+} while (0)
+#define _IEEE80211_NODE_SAVEQ_ENQUEUE(_ni, _m, _qlen, _age) do {\
+ (_m)->m_nextpkt = NULL; \
+ if ((_ni)->ni_savedq.ifq_tail != NULL) { \
+ _age -= M_AGE_GET((_ni)->ni_savedq.ifq_tail); \
+ (_ni)->ni_savedq.ifq_tail->m_nextpkt = (_m); \
+ } else { \
+ (_ni)->ni_savedq.ifq_head = (_m); \
+ } \
+ M_AGE_SET(_m, _age); \
+ (_ni)->ni_savedq.ifq_tail = (_m); \
+ (_qlen) = ++(_ni)->ni_savedq.ifq_len; \
} while (0)
/*
@@ -129,6 +151,15 @@
((ac) << M_WME_AC_SHIFT))
#define M_WME_GETAC(m) (((m)->m_flags >> M_WME_AC_SHIFT) & 0x3)
+/*
+ * Mbufs on the power save queue are tagged with an age and
+ * timed out. We reuse the hardware checksum field in the
+ * mbuf packet header to store this data.
+ */
+#define M_AGE_SET(m,v) (m->m_pkthdr.csum_data = v)
+#define M_AGE_GET(m) (m->m_pkthdr.csum_data)
+#define M_AGE_SUB(m,adj) (m->m_pkthdr.csum_data -= adj)
+
extern void get_random_bytes(void *, size_t);
struct ieee80211com;
More information about the p4-projects
mailing list