rt2x00: Centralize RX packet alignment handling in rt2x00lib.

When rt2x00pci will be switched over to dynamically mapped skb's
instead of statically allocated DMA buffers, it no longer can handle
alignment of RX packets in a copy step, and needs to implement the
same scheme as rt2x00usb does.

In order to make the patch on dynamically mapped skb's smaller,
already centralize the alignment handling into rt2x00lib. This allows
us to move more code in rt2x00lib, and thus remove code duplication
between rt2x00usb and rt2x00pci.

Signed-off-by: Gertjan van Wingerde <gwingerde@kpnplanet.nl>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
index 797023c..33833bc 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -260,44 +260,6 @@
 /*
  * RX data handlers.
  */
-static struct sk_buff* rt2x00usb_alloc_rxskb(struct data_queue *queue)
-{
-	struct sk_buff *skb;
-	unsigned int frame_size;
-	unsigned int reserved_size;
-
-	/*
-	 * The frame size includes descriptor size, because the
-	 * hardware directly receive the frame into the skbuffer.
-	 */
-	frame_size = queue->data_size + queue->desc_size;
-
-	/*
-	 * For the allocation we should keep a few things in mind:
-	 * 1) 4byte alignment of 802.11 payload
-	 *
-	 * For (1) we need at most 4 bytes to guarentee the correct
-	 * alignment. We are going to optimize the fact that the chance
-	 * that the 802.11 header_size % 4 == 2 is much bigger then
-	 * anything else. However since we need to move the frame up
-	 * to 3 bytes to the front, which means we need to preallocate
-	 * 6 bytes.
-	 */
-	reserved_size = 6;
-
-	/*
-	 * Allocate skbuffer.
-	 */
-	skb = dev_alloc_skb(frame_size + reserved_size);
-	if (!skb)
-		return NULL;
-
-	skb_reserve(skb, reserved_size);
-	skb_put(skb, frame_size);
-
-	return skb;
-}
-
 static void rt2x00usb_interrupt_rxdone(struct urb *urb)
 {
 	struct queue_entry *entry = (struct queue_entry *)urb->context;
@@ -305,8 +267,6 @@
 	struct sk_buff *skb;
 	struct skb_frame_desc *skbdesc;
 	struct rxdone_entry_desc rxdesc;
-	unsigned int header_size;
-	unsigned int align;
 
 	if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags) ||
 	    !test_and_clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
@@ -330,26 +290,9 @@
 	memset(&rxdesc, 0, sizeof(rxdesc));
 	rt2x00dev->ops->lib->fill_rxdone(entry, &rxdesc);
 
-	header_size = ieee80211_get_hdrlen_from_skb(entry->skb);
-
 	/*
-	 * The data behind the ieee80211 header must be
-	 * aligned on a 4 byte boundary. We already reserved
-	 * 2 bytes for header_size % 4 == 2 optimization.
-	 * To determine the number of bytes which the data
-	 * should be moved to the left, we must add these
-	 * 2 bytes to the header_size.
+	 * Trim the skb to the correct size.
 	 */
-	align = (header_size + 2) % 4;
-
-	if (align) {
-		skb_push(entry->skb, align);
-		/* Move entire frame in 1 command */
-		memmove(entry->skb->data, entry->skb->data + align,
-			rxdesc.size);
-	}
-
-	/* Update data pointers, trim buffer to correct size */
 	skb_trim(entry->skb, rxdesc.size);
 
 	/*
@@ -357,7 +300,7 @@
 	 * If allocation fails, we should drop the current frame
 	 * so we can recycle the existing sk buffer for the new frame.
 	 */
-	skb = rt2x00usb_alloc_rxskb(entry->queue);
+	skb = rt2x00queue_alloc_rxskb(entry->queue);
 	if (!skb)
 		goto skip_entry;
 
@@ -529,7 +472,7 @@
 	 */
 	entry_size = rt2x00dev->rx->data_size + rt2x00dev->rx->desc_size;
 	for (i = 0; i < rt2x00dev->rx->limit; i++) {
-		skb = rt2x00usb_alloc_rxskb(rt2x00dev->rx);
+		skb = rt2x00queue_alloc_rxskb(rt2x00dev->rx);
 		if (!skb)
 			goto exit;