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