rt2x00: Serialize TX operations on a queue.
[linux-flexiantxendom0-natty.git] / drivers / net / wireless / rt2x00 / rt2x00queue.h
index baa39b7..d94ab20 100644 (file)
 /**
  * enum data_queue_qid: Queue identification
  *
+ * @QID_AC_VO: AC VO queue
+ * @QID_AC_VI: AC VI queue
  * @QID_AC_BE: AC BE queue
  * @QID_AC_BK: AC BK queue
- * @QID_AC_VI: AC VI queue
- * @QID_AC_VO: AC VO queue
  * @QID_HCCA: HCCA queue
  * @QID_MGMT: MGMT queue (prio queue)
  * @QID_RX: RX queue
  * @QID_ATIM: Atim queue (value unspeficied, don't send it to device)
  */
 enum data_queue_qid {
-       QID_AC_BE = 0,
-       QID_AC_BK = 1,
-       QID_AC_VI = 2,
-       QID_AC_VO = 3,
+       QID_AC_VO = 0,
+       QID_AC_VI = 1,
+       QID_AC_BE = 2,
+       QID_AC_BK = 3,
        QID_HCCA = 4,
        QID_MGMT = 13,
        QID_RX = 14,
@@ -340,12 +340,16 @@ struct txentry_desc {
  * @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.
+ * @ENTRY_DATA_STATUS_PENDING: The entry has been send to the device and
+ *     returned. It is now waiting for the status reporting before the
+ *     entry can be reused again.
  */
 enum queue_entry_flags {
        ENTRY_BCN_ASSIGNED,
        ENTRY_OWNER_DEVICE_DATA,
        ENTRY_DATA_PENDING,
-       ENTRY_DATA_IO_FAILED
+       ENTRY_DATA_IO_FAILED,
+       ENTRY_DATA_STATUS_PENDING,
 };
 
 /**
@@ -418,6 +422,7 @@ enum data_queue_flags {
  * @flags: Entry flags, see &enum queue_entry_flags.
  * @status_lock: The mutex for protecting the start/stop/flush
  *     handling on this queue.
+ * @tx_lock: Spinlock to serialize tx operations on this queue.
  * @index_lock: Spinlock to protect index handling. Whenever @index, @index_done or
  *     @index_crypt needs to be changed this lock should be grabbed to prevent
  *     index corruption due to concurrency.
@@ -444,6 +449,7 @@ struct data_queue {
        unsigned long flags;
 
        struct mutex status_lock;
+       spinlock_t tx_lock;
        spinlock_t index_lock;
 
        unsigned int count;