static void rt2400pci_init_rxring(struct rt2x00_dev *rt2x00dev)
 {
        struct data_ring *ring = rt2x00dev->rx;
-       struct data_desc *rxd;
+       __le32 *rxd;
        unsigned int i;
        u32 word;
 
 static void rt2400pci_init_txring(struct rt2x00_dev *rt2x00dev, const int queue)
 {
        struct data_ring *ring = rt2x00lib_get_ring(rt2x00dev, queue);
-       struct data_desc *txd;
+       __le32 *txd;
        unsigned int i;
        u32 word;
 
  * TX descriptor initialization
  */
 static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                                   struct data_desc *txd,
+                                   __le32 *txd,
                                    struct txdata_entry_desc *desc,
                                    struct ieee80211_hdr *ieee80211hdr,
                                    unsigned int length,
 static void rt2400pci_fill_rxdone(struct data_entry *entry,
                                  struct rxdata_entry_desc *desc)
 {
-       struct data_desc *rxd = entry->priv;
+       __le32 *rxd = entry->priv;
        u32 word0;
        u32 word2;
 
 {
        struct data_ring *ring = rt2x00lib_get_ring(rt2x00dev, queue);
        struct data_entry *entry;
-       struct data_desc *txd;
+       __le32 *txd;
        u32 word;
        int tx_status;
        int retry;
 
 /*
  * DMA descriptor defines.
  */
-#define TXD_DESC_SIZE                  ( 8 * sizeof(struct data_desc) )
-#define RXD_DESC_SIZE                  ( 8 * sizeof(struct data_desc) )
+#define TXD_DESC_SIZE                  ( 8 * sizeof(__le32) )
+#define RXD_DESC_SIZE                  ( 8 * sizeof(__le32) )
 
 /*
  * TX descriptor format for TX, PRIO, ATIM and Beacon Ring.
 
 static void rt2500pci_init_rxring(struct rt2x00_dev *rt2x00dev)
 {
        struct data_ring *ring = rt2x00dev->rx;
-       struct data_desc *rxd;
+       __le32 *rxd;
        unsigned int i;
        u32 word;
 
 static void rt2500pci_init_txring(struct rt2x00_dev *rt2x00dev, const int queue)
 {
        struct data_ring *ring = rt2x00lib_get_ring(rt2x00dev, queue);
-       struct data_desc *txd;
+       __le32 *txd;
        unsigned int i;
        u32 word;
 
  * TX descriptor initialization
  */
 static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                                   struct data_desc *txd,
+                                   __le32 *txd,
                                    struct txdata_entry_desc *desc,
                                    struct ieee80211_hdr *ieee80211hdr,
                                    unsigned int length,
 static void rt2500pci_fill_rxdone(struct data_entry *entry,
                                  struct rxdata_entry_desc *desc)
 {
-       struct data_desc *rxd = entry->priv;
+       __le32 *rxd = entry->priv;
        u32 word0;
        u32 word2;
 
 {
        struct data_ring *ring = rt2x00lib_get_ring(rt2x00dev, queue);
        struct data_entry *entry;
-       struct data_desc *txd;
+       __le32 *txd;
        u32 word;
        int tx_status;
        int retry;
 
 /*
  * DMA descriptor defines.
  */
-#define TXD_DESC_SIZE                  ( 11 * sizeof(struct data_desc) )
-#define RXD_DESC_SIZE                  ( 11 * sizeof(struct data_desc) )
+#define TXD_DESC_SIZE                  ( 11 * sizeof(__le32) )
+#define RXD_DESC_SIZE                  ( 11 * sizeof(__le32) )
 
 /*
  * TX descriptor format for TX, PRIO, ATIM and Beacon Ring.
 
  * TX descriptor initialization
  */
 static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                                   struct data_desc *txd,
+                                   __le32 *txd,
                                    struct txdata_entry_desc *desc,
                                    struct ieee80211_hdr *ieee80211hdr,
                                    unsigned int length,
                                  struct rxdata_entry_desc *desc)
 {
        struct urb *urb = entry->priv;
-       struct data_desc *rxd = (struct data_desc *)(entry->skb->data +
-                                                    (urb->actual_length -
-                                                     entry->ring->desc_size));
+       __le32 *rxd = (__le32 *)(entry->skb->data +
+                                (urb->actual_length - entry->ring->desc_size));
        u32 word0;
        u32 word1;
 
        skb_push(skb, ring->desc_size);
        memset(skb->data, 0, ring->desc_size);
 
-       rt2x00lib_write_tx_desc(rt2x00dev, (struct data_desc *)skb->data,
+       rt2x00lib_write_tx_desc(rt2x00dev, (__le32 *)skb->data,
                                (struct ieee80211_hdr *)(skb->data +
                                                         ring->desc_size),
                                skb->len - ring->desc_size, control);
 
 /*
  * DMA descriptor defines.
  */
-#define TXD_DESC_SIZE                  ( 5 * sizeof(struct data_desc) )
-#define RXD_DESC_SIZE                  ( 4 * sizeof(struct data_desc) )
+#define TXD_DESC_SIZE                  ( 5 * sizeof(__le32) )
+#define RXD_DESC_SIZE                  ( 4 * sizeof(__le32) )
 
 /*
  * TX descriptor format for TX, PRIO, ATIM and Beacon Ring.
 
         * TX control handlers
         */
        void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev,
-                              struct data_desc *txd,
+                              __le32 *txd,
                               struct txdata_entry_desc *desc,
                               struct ieee80211_hdr *ieee80211hdr,
                               unsigned int length,
  * TX descriptor initializer
  */
 void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                            struct data_desc *txd,
+                            __le32 *txd,
                             struct ieee80211_hdr *ieee80211hdr,
                             unsigned int length,
                             struct ieee80211_tx_control *control);
 
  * TX descriptor initializer
  */
 void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                            struct data_desc *txd,
+                            __le32 *txd,
                             struct ieee80211_hdr *ieee80211hdr,
                             unsigned int length,
                             struct ieee80211_tx_control *control)
 
 {
        struct ieee80211_hdr *ieee80211hdr = (struct ieee80211_hdr *)skb->data;
        struct data_entry *entry = rt2x00_get_data_entry(ring);
-       struct data_desc *txd = entry->priv;
+       __le32 *txd = entry->priv;
        u32 word;
 
        if (rt2x00_ring_full(ring)) {
 {
        struct data_ring *ring = rt2x00dev->rx;
        struct data_entry *entry;
-       struct data_desc *rxd;
        struct sk_buff *skb;
        struct ieee80211_hdr *hdr;
        struct rxdata_entry_desc desc;
        int header_size;
+       __le32 *rxd;
        int align;
        u32 word;
 
 
 #ifndef RT2X00RING_H
 #define RT2X00RING_H
 
-/*
- * data_desc
- * Each data entry also contains a descriptor which is used by the
- * device to determine what should be done with the packet and
- * what the current status is.
- * This structure is greatly simplified, but the descriptors
- * are basically a list of little endian 32 bit values.
- * Make the array by default 1 word big, this will allow us
- * to use sizeof() correctly.
- */
-struct data_desc {
-       __le32 word[1];
-};
-
 /*
  * rxdata_entry_desc
  * Summary of information that has been read from the
 /*
  * TX/RX Descriptor access functions.
  */
-static inline void rt2x00_desc_read(struct data_desc *desc,
+static inline void rt2x00_desc_read(__le32 *desc,
                                    const u8 word, u32 *value)
 {
-       *value = le32_to_cpu(desc->word[word]);
+       *value = le32_to_cpu(desc[word]);
 }
 
-static inline void rt2x00_desc_write(struct data_desc *desc,
+static inline void rt2x00_desc_write(__le32 *desc,
                                     const u8 word, const u32 value)
 {
-       desc->word[word] = cpu_to_le32(value);
+       desc[word] = cpu_to_le32(value);
 }
 
 #endif /* RT2X00RING_H */
 
        struct data_entry *entry = (struct data_entry *)urb->context;
        struct data_ring *ring = entry->ring;
        struct rt2x00_dev *rt2x00dev = ring->rt2x00dev;
-       struct data_desc *txd = (struct data_desc *)entry->skb->data;
+       __le32 *txd = (__le32 *)entry->skb->data;
        u32 word;
        int tx_status;
 
        skb_push(skb, ring->desc_size);
        memset(skb->data, 0, ring->desc_size);
 
-       rt2x00lib_write_tx_desc(rt2x00dev, (struct data_desc *)skb->data,
+       rt2x00lib_write_tx_desc(rt2x00dev, (__le32 *)skb->data,
                                (struct ieee80211_hdr *)(skb->data +
                                                         ring->desc_size),
                                skb->len - ring->desc_size, control);
 
 static void rt61pci_init_rxring(struct rt2x00_dev *rt2x00dev)
 {
        struct data_ring *ring = rt2x00dev->rx;
-       struct data_desc *rxd;
+       __le32 *rxd;
        unsigned int i;
        u32 word;
 
 static void rt61pci_init_txring(struct rt2x00_dev *rt2x00dev, const int queue)
 {
        struct data_ring *ring = rt2x00lib_get_ring(rt2x00dev, queue);
-       struct data_desc *txd;
+       __le32 *txd;
        unsigned int i;
        u32 word;
 
  * TX descriptor initialization
  */
 static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                                 struct data_desc *txd,
+                                 __le32 *txd,
                                  struct txdata_entry_desc *desc,
                                  struct ieee80211_hdr *ieee80211hdr,
                                  unsigned int length,
 static void rt61pci_fill_rxdone(struct data_entry *entry,
                                struct rxdata_entry_desc *desc)
 {
-       struct data_desc *rxd = entry->priv;
+       __le32 *rxd = entry->priv;
        u32 word0;
        u32 word1;
 
        struct data_ring *ring;
        struct data_entry *entry;
        struct data_entry *entry_done;
-       struct data_desc *txd;
+       __le32 *txd;
        u32 word;
        u32 reg;
        u32 old_reg;
        skb_push(skb, TXD_DESC_SIZE);
        memset(skb->data, 0, TXD_DESC_SIZE);
 
-       rt2x00lib_write_tx_desc(rt2x00dev, (struct data_desc *)skb->data,
+       rt2x00lib_write_tx_desc(rt2x00dev, (__le32 *)skb->data,
                                (struct ieee80211_hdr *)(skb->data +
                                                         TXD_DESC_SIZE),
                                skb->len - TXD_DESC_SIZE, control);
 
 /*
  * DMA descriptor defines.
  */
-#define TXD_DESC_SIZE                  ( 16 * sizeof(struct data_desc) )
-#define RXD_DESC_SIZE                  ( 16 * sizeof(struct data_desc) )
+#define TXD_DESC_SIZE                  ( 16 * sizeof(__le32) )
+#define RXD_DESC_SIZE                  ( 16 * sizeof(__le32) )
 
 /*
  * TX descriptor format for TX, PRIO and Beacon Ring.
 
  * TX descriptor initialization
  */
 static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                                 struct data_desc *txd,
+                                 __le32 *txd,
                                  struct txdata_entry_desc *desc,
                                  struct ieee80211_hdr *ieee80211hdr,
                                  unsigned int length,
 static void rt73usb_fill_rxdone(struct data_entry *entry,
                                struct rxdata_entry_desc *desc)
 {
-       struct data_desc *rxd = (struct data_desc *)entry->skb->data;
+       __le32 *rxd = (__le32 *)entry->skb->data;
        u32 word0;
        u32 word1;
 
        skb_push(skb, TXD_DESC_SIZE);
        memset(skb->data, 0, TXD_DESC_SIZE);
 
-       rt2x00lib_write_tx_desc(rt2x00dev, (struct data_desc *)skb->data,
+       rt2x00lib_write_tx_desc(rt2x00dev, (__le32 *)skb->data,
                                (struct ieee80211_hdr *)(skb->data +
                                                         TXD_DESC_SIZE),
                                skb->len - TXD_DESC_SIZE, control);
 
 /*
  * DMA descriptor defines.
  */
-#define TXD_DESC_SIZE                  ( 6 * sizeof(struct data_desc) )
-#define RXD_DESC_SIZE                  ( 6 * sizeof(struct data_desc) )
+#define TXD_DESC_SIZE                  ( 6 * sizeof(__le32) )
+#define RXD_DESC_SIZE                  ( 6 * sizeof(__le32) )
 
 /*
  * TX descriptor format for TX, PRIO and Beacon Ring.