This adds a user for the new weak DMA mask API. This removes the b43 DMA mask probe loop. Signed-off-by: Michael Buesch <mb@xxxxxxxxx> Index: linux-2.6/drivers/net/wireless/b43/dma.c =================================================================== --- linux-2.6.orig/drivers/net/wireless/b43/dma.c 2008-05-01 13:19:51.000000000 +0200 +++ linux-2.6/drivers/net/wireless/b43/dma.c 2008-05-01 14:45:52.000000000 +0200 @@ -980,37 +980,27 @@ void b43_dma_free(struct b43_wldev *dev) destroy_ring(dma, tx_ring_mcast); } +static inline unsigned int mask_to_bit(u64 dma_mask) +{ + return fls64(dma_mask); +} + static int b43_dma_set_mask(struct b43_wldev *dev, u64 mask) { u64 orig_mask = mask; - bool fallback = 0; int err; - /* Try to set the DMA mask. If it fails, try falling back to a - * lower mask, as we can always also support a lower one. */ - while (1) { - err = ssb_dma_set_mask(dev->dev, mask); - if (!err) - break; - if (mask == DMA_64BIT_MASK) { - mask = DMA_32BIT_MASK; - fallback = 1; - continue; - } - if (mask == DMA_32BIT_MASK) { - mask = DMA_30BIT_MASK; - fallback = 1; - continue; - } + err = ssb_dma_set_mask_weak(dev->dev, &mask); + if (err) { b43err(dev->wl, "The machine/kernel does not support " "the required %u-bit DMA mask\n", - (unsigned int)dma_mask_to_engine_type(orig_mask)); + mask_to_bit(orig_mask)); return -EOPNOTSUPP; } - if (fallback) { + if (mask != orig_mask) { b43info(dev->wl, "DMA mask fallback from %u-bit to %u-bit\n", - (unsigned int)dma_mask_to_engine_type(orig_mask), - (unsigned int)dma_mask_to_engine_type(mask)); + mask_to_bit(orig_mask), + mask_to_bit(mask)); } return 0; -- Greetings Michael. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html