diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-23 11:47:02 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-23 11:47:02 -0700 | 
| commit | 5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0 (patch) | |
| tree | 7851ef1c93aa1aba7ef327ca4b75fd35e6d10f29 /drivers/net/wireless/rt2x00/rt2x00queue.h | |
| parent | 02f36038c568111ad4fc433f6fa760ff5e38fab4 (diff) | |
| parent | ec37a48d1d16c30b655ac5280209edf52a6775d4 (diff) | |
| download | olio-linux-3.10-5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0.tar.xz olio-linux-3.10-5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1699 commits)
  bnx2/bnx2x: Unsupported Ethtool operations should return -EINVAL.
  vlan: Calling vlan_hwaccel_do_receive() is always valid.
  tproxy: use the interface primary IP address as a default value for --on-ip
  tproxy: added IPv6 support to the socket match
  cxgb3: function namespace cleanup
  tproxy: added IPv6 support to the TPROXY target
  tproxy: added IPv6 socket lookup function to nf_tproxy_core
  be2net: Changes to use only priority codes allowed by f/w
  tproxy: allow non-local binds of IPv6 sockets if IP_TRANSPARENT is enabled
  tproxy: added tproxy sockopt interface in the IPV6 layer
  tproxy: added udp6_lib_lookup function
  tproxy: added const specifiers to udp lookup functions
  tproxy: split off ipv6 defragmentation to a separate module
  l2tp: small cleanup
  nf_nat: restrict ICMP translation for embedded header
  can: mcp251x: fix generation of error frames
  can: mcp251x: fix endless loop in interrupt handler if CANINTF_MERRF is set
  can-raw: add msg_flags to distinguish local traffic
  9p: client code cleanup
  rds: make local functions/variables static
  ...
Fix up conflicts in net/core/dev.c, drivers/net/pcmcia/smc91c92_cs.c and
drivers/net/wireless/ath/ath9k/debug.c as per David
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00queue.h')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.h | 56 | 
1 files changed, 42 insertions, 14 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h index 191e7775a9c..d81d85f3486 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.h +++ b/drivers/net/wireless/rt2x00/rt2x00queue.h @@ -1,5 +1,5 @@  /* -	Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com> +	Copyright (C) 2004 - 2010 Ivo van Doorn <IvDoorn@gmail.com>  	<http://rt2x00.serialmonkey.com>  	This program is free software; you can redistribute it and/or modify @@ -268,6 +268,7 @@ struct txdone_entry_desc {   * @ENTRY_TXD_HT_AMPDU: This frame is part of an AMPDU.   * @ENTRY_TXD_HT_BW_40: Use 40MHz Bandwidth.   * @ENTRY_TXD_HT_SHORT_GI: Use short GI. + * @ENTRY_TXD_HT_MIMO_PS: The receiving STA is in dynamic SM PS mode.   */  enum txentry_desc_flags {  	ENTRY_TXD_RTS_FRAME, @@ -286,6 +287,7 @@ enum txentry_desc_flags {  	ENTRY_TXD_HT_AMPDU,  	ENTRY_TXD_HT_BW_40,  	ENTRY_TXD_HT_SHORT_GI, +	ENTRY_TXD_HT_MIMO_PS,  };  /** @@ -294,7 +296,7 @@ enum txentry_desc_flags {   * Summary of information for the frame descriptor before sending a TX frame.   *   * @flags: Descriptor flags (See &enum queue_entry_flags). - * @queue: Queue identification (See &enum data_queue_qid). + * @qid: Queue identification (See &enum data_queue_qid).   * @length: Length of the entire frame.   * @header_length: Length of 802.11 header.   * @length_high: PLCP length high word. @@ -320,7 +322,7 @@ enum txentry_desc_flags {  struct txentry_desc {  	unsigned long flags; -	enum data_queue_qid queue; +	enum data_queue_qid qid;  	u16 length;  	u16 header_length; @@ -358,17 +360,17 @@ struct txentry_desc {   * @ENTRY_OWNER_DEVICE_DATA: This entry is owned by the device for data   *	transfer (either TX or RX depending on the queue). The entry should   *	only be touched after the device has signaled it is done with it. - * @ENTRY_OWNER_DEVICE_CRYPTO: This entry is owned by the device for data - *	encryption or decryption. The entry should only be touched after - *	the device has signaled it is done with it.   * @ENTRY_DATA_PENDING: This entry contains a valid frame and is waiting   *	for the signal to start sending. + * @ENTRY_DATA_IO_FAILED: Hardware indicated that an IO error occured + *	while transfering the data to the hardware. No TX status report will + *	be expected from the hardware.   */  enum queue_entry_flags {  	ENTRY_BCN_ASSIGNED,  	ENTRY_OWNER_DEVICE_DATA, -	ENTRY_OWNER_DEVICE_CRYPTO,  	ENTRY_DATA_PENDING, +	ENTRY_DATA_IO_FAILED  };  /** @@ -399,18 +401,18 @@ struct queue_entry {   *   * @Q_INDEX: Index pointer to the current entry in the queue, if this entry is   *	owned by the hardware then the queue is considered to be full. + * @Q_INDEX_DMA_DONE: Index pointer for the next entry which will have been + *	transfered to the hardware.   * @Q_INDEX_DONE: Index pointer to the next entry which will be completed by   *	the hardware and for which we need to run the txdone handler. If this   *	entry is not owned by the hardware the queue is considered to be empty. - * @Q_INDEX_CRYPTO: Index pointer to the next entry which encryption/decription - *	will be completed by the hardware next.   * @Q_INDEX_MAX: Keep last, used in &struct data_queue to determine the size   *	of the index array.   */  enum queue_index {  	Q_INDEX, +	Q_INDEX_DMA_DONE,  	Q_INDEX_DONE, -	Q_INDEX_CRYPTO,  	Q_INDEX_MAX,  }; @@ -446,13 +448,12 @@ struct data_queue {  	enum data_queue_qid qid;  	spinlock_t lock; -	unsigned long last_index; -	unsigned long last_index_done;  	unsigned int count;  	unsigned short limit;  	unsigned short threshold;  	unsigned short length;  	unsigned short index[Q_INDEX_MAX]; +	unsigned long last_action[Q_INDEX_MAX];  	unsigned short txop;  	unsigned short aifs; @@ -565,6 +566,22 @@ struct data_queue_desc {  	queue_loop(__entry, (__dev)->tx, queue_end(__dev))  /** + * rt2x00queue_for_each_entry - Loop through all entries in the queue + * @queue: Pointer to @data_queue + * @start: &enum queue_index Pointer to start index + * @end: &enum queue_index Pointer to end index + * @fn: The function to call for each &struct queue_entry + * + * This will walk through all entries in the queue, in chronological + * order. This means it will start at the current @start pointer + * and will walk through the queue until it reaches the @end pointer. + */ +void rt2x00queue_for_each_entry(struct data_queue *queue, +				enum queue_index start, +				enum queue_index end, +				void (*fn)(struct queue_entry *entry)); + +/**   * rt2x00queue_empty - Check if the queue is empty.   * @queue: Queue to check if empty.   */ @@ -601,12 +618,23 @@ static inline int rt2x00queue_threshold(struct data_queue *queue)  }  /** - * rt2x00queue_timeout - Check if a timeout occured for this queue + * rt2x00queue_timeout - Check if a timeout occured for STATUS reorts   * @queue: Queue to check.   */  static inline int rt2x00queue_timeout(struct data_queue *queue)  { -	return time_after(queue->last_index, queue->last_index_done + (HZ / 10)); +	return time_after(queue->last_action[Q_INDEX_DMA_DONE], +			  queue->last_action[Q_INDEX_DONE] + (HZ / 10)); +} + +/** + * rt2x00queue_timeout - Check if a timeout occured for DMA transfers + * @queue: Queue to check. + */ +static inline int rt2x00queue_dma_timeout(struct data_queue *queue) +{ +	return time_after(queue->last_action[Q_INDEX], +			  queue->last_action[Q_INDEX_DMA_DONE] + (HZ / 10));  }  /**  |