b43: use the bitrev helpers rather than rolling a private one
PATCH 1/1 b43: use the bitrev helpers rather than rolling a private one
The 4-bit reversal flip_4bit is replaced with the bitrev helper bitrev8 and a 4-bit shift. The B43_WARN is moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so a B43_WARN is not added there.
--- drivers/net/wireless/b43/phy.c | 26 +++++--------------------- 1 files changed, 5 insertions(+), 21 deletions(-)
drivers/net/wireless/b43/phy.c +5 -21
@@ -28,6 +28,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/types.h> +#include <linux/bitrev.h> #include "b43.h" #include "phy.h"
@@ -85,23 +86,6 @@ const u8 b43_radio_channel_codes_bg[] = {static void b43_phy_initg (struct b43_wldev *dev); -/* Reverse the bits of a 4bit value. -* Example: 1101 is flipped 1011 -*/ -static u16 flip_4bit (u16 value) -{ -u16 flipped =0x0000 ; - -B43_WARN_ON (value & ~0x000F ); - - flipped |= (value &0x0001 ) <<3 ; - flipped |= (value &0x0002 ) <<1 ; - flipped |= (value &0x0004 ) >>1 ; - flipped |= (value &0x0008 ) >>3 ; - -return flipped; -} -static void generate_rfatt_list (struct b43_wldev *dev,struct b43_rfatt_list *list) {
@@ -3069,13 +3053,13 @@ b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode) }radio_stacksave (0x0078 ); tmp = (b43_radio_read16 (dev,0x0078 ) &0x001E ); - flipped =flip_4bit (tmp); +B43_WARN_ON (tmp >15 ); + flipped =bitrev8 (tmp) >>4 ;if (flipped <10 && flipped >=8 ) flipped =7 ;else if (flipped >=10 ) flipped -=3 ; - flipped =flip_4bit (flipped); - flipped = (flipped <<1 ) |0x0020 ; + flipped = (bitrev8 (flipped) >>3 ) |0x0020 ;b43_radio_write16 (dev,0x0078 , flipped);b43_calc_nrssi_threshold (dev);
@@ -3708,7 +3692,7 @@ u16 b43_radio_init2050(struct b43_wldev *dev) tmp1 >>=9 ;for (i =0 ; i <16 ; i++) { - radio78 = ((flip_4bit (i) <<1 ) |0x20 ); + radio78 = (bitrev8 (i) >>3 ) |0x0020 ;b43_radio_write16 (dev,0x78 , radio78);udelay (10 );for (j =0 ; j <16 ; j++) {
Signature · 1 line
1.5.5.1.482.g0f174
Quoted 7 lines · On Tuesday 13 May 2008 21:55:18 Harvey Harrison wrote:
The 4-bit reversal
flip_4bitis replaced with the bitrev helper bitrev8 and a 4-bit shift. TheB43_WARNis moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so aB43_WARNis not added there.Signed-off-by Harvey Harrison <[email protected]>
ACK
But I'd prefer if we had something like the following and use that:
#define bitrev4(x) (bitrev8(x) >> 4)
This way the confusing (confusing to me :) ) shifts in the code would go away. I have a hard time realizing that
bitrev8(x) >> 3
does actually mean
bitrev4(x) << 1
Maybe I'm just stupid, though. :)
Quoted 8 lines
drivers/net/wireless/b43/phy.c +2
-1@@ -3069,13 +3053,13 @@ b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode) }radio_stacksave (0x0078 ); tmp = (b43_radio_read16 (dev,0x0078 ) &0x001E ); - flipped =flip_4bit (tmp); +B43_WARN_ON (tmp >15 ); + flipped =bitrev8 (tmp) >>4 ;if (flipped <10 && flipped >=8 )
Signature · 1 line
Greetings Michael.
Quoted 14 lines · Michael Buesch
Quoted 7 lines · On Tuesday 13 May 2008 21:55:18 Harvey Harrison wrote:
The 4-bit reversal
flip_4bitis replaced with the bitrev helper bitrev8 and a 4-bit shift. TheB43_WARNis moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so aB43_WARNis not added there.Signed-off-by Harvey Harrison <[email protected]>ACK
But I'd prefer if we had something like the following and use that:
Quoted 9 lines
#define bitrev4(x) (bitrev8(x) >> 4)
This way the confusing (confusing to me :) ) shifts in the code would go away. I have a hard time realizing that
bitrev8(x) >> 3
does actually mean
bitrev4(x) << 1
Maybe I'm just stupid, though. :)
You're not, this was only valid because x < 16....if bit 4 could be set this doesn't work anymore as bitrev8(x) >> 4 would truncate bit 4 before shifting left. So there was some subtlety here that makes >> 3 ok.
Do you want an incremental patch adding a bitrev4 to phy.c or are you going to add it?
Harvey
Quoted 25 lines · On Wednesday 14 May 2008 02:53:56 Harvey Harrison wrote:
Quoted 14 lines · Michael Buesch
Quoted 7 lines · On Tuesday 13 May 2008 21:55:18 Harvey Harrison wrote:
The 4-bit reversal
flip_4bitis replaced with the bitrev helper bitrev8 and a 4-bit shift. TheB43_WARNis moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so aB43_WARNis not added there.Signed-off-by Harvey Harrison <[email protected]>ACK
But I'd prefer if we had something like the following and use that:
Quoted 9 lines
#define bitrev4(x) (bitrev8(x) >> 4)
This way the confusing (confusing to me :) ) shifts in the code would go away. I have a hard time realizing that
bitrev8(x) >> 3
does actually mean
bitrev4(x) << 1
Maybe I'm just stupid, though. :)
Quoted 4 lines
You're not, this was only valid because x < 16....if bit 4 could be set this doesn't work anymore as bitrev8(x) >> 4 would truncate bit 4 before shifting left. So there was some subtlety here that makes >> 3 ok.
I don't understand. These are all 4 bit values. The old flip helper enforced this with a B43_WARN_ON().
The >>3 actually is
((bitrev8(x) >> 4) << 1)
which is the same as
(bitrev4(x) << 1)
The <<1 is there, because the hardware wants is this way in the register. The <<1 is not related to the actual flip operation.
Quoted 2 lines
Do you want an incremental patch adding a bitrev4 to
phy.cor are you going to add it?
Can you just respin this one instead of doing an incremental one?
Signature · 1 line
Greetings Michael.
The 4-bit reversal flip_4bit is replaced with the bitrev helper bitrev8 and a 4-bit shift. The B43_WARN is moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so a B43_WARN is not added there.
--- drivers/net/wireless/b43/phy.c | 27 ++++++--------------------- 1 files changed, 6 insertions(+), 21 deletions(-)
drivers/net/wireless/b43/phy.c +6 -21
@@ -28,6 +28,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/types.h> +#include <linux/bitrev.h> #include "b43.h" #include "phy.h"
@@ -83,25 +84,9 @@ const u8 b43_radio_channel_codes_bg[] = { 72, 84, }; +#define bitrev4 (tmp) (bitrev8(tmp) >> 4)static void b43_phy_initg (struct b43_wldev *dev); -/* Reverse the bits of a 4bit value. -* Example: 1101 is flipped 1011 -*/ -static u16 flip_4bit (u16 value) -{ -u16 flipped =0x0000 ; - -B43_WARN_ON (value & ~0x000F ); - - flipped |= (value &0x0001 ) <<3 ; - flipped |= (value &0x0002 ) <<1 ; - flipped |= (value &0x0004 ) >>1 ; - flipped |= (value &0x0008 ) >>3 ; - -return flipped; -} -static void generate_rfatt_list (struct b43_wldev *dev,struct b43_rfatt_list *list) {
@@ -3069,13 +3054,13 @@ b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode) }radio_stacksave (0x0078 ); tmp = (b43_radio_read16 (dev,0x0078 ) &0x001E ); - flipped =flip_4bit (tmp); +B43_WARN_ON (tmp >15 ); + flipped =bitrev4 (tmp);if (flipped <10 && flipped >=8 ) flipped =7 ;else if (flipped >=10 ) flipped -=3 ; - flipped =flip_4bit (flipped); - flipped = (flipped <<1 ) |0x0020 ; + flipped = (bitrev4 (flipped) <<1 ) |0x0020 ;b43_radio_write16 (dev,0x0078 , flipped);b43_calc_nrssi_threshold (dev);
@@ -3708,7 +3693,7 @@ u16 b43_radio_init2050(struct b43_wldev *dev) tmp1 >>=9 ;for (i =0 ; i <16 ; i++) { - radio78 = ((flip_4bit (i) <<1 ) |0x20 ); + radio78 = (bitrev4 (i) <<1 ) |0x0020 ;b43_radio_write16 (dev,0x78 , radio78);udelay (10 );for (j =0 ; j <16 ; j++) {
Signature · 1 line
1.5.5.1.482.g0f174
Quoted 7 lines · On Wednesday 14 May 2008 03:13:35 Harvey Harrison wrote:
The 4-bit reversal
flip_4bitis replaced with the bitrev helper bitrev8 and a 4-bit shift. TheB43_WARNis moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so aB43_WARNis not added there.Signed-off-by Harvey Harrison <[email protected]>
Quoted 69 lines
--- drivers/net/wireless/b43/phy.c | 27 ++++++--------------------- 1 files changed, 6 insertions(+), 21 deletions(-)drivers/net/wireless/b43/phy.c +6
-21@@ -28,6 +28,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/types.h> +#include <linux/bitrev.h> #include "b43.h" #include "phy.h" @@ -83,25 +84,9 @@ const u8 b43_radio_channel_codes_bg[] = { 72, 84, }; +#define bitrev4 (tmp) (bitrev8(tmp) >> 4)static void b43_phy_initg (struct b43_wldev *dev); -/* Reverse the bits of a 4bit value. -* Example: 1101 is flipped 1011 -*/ -static u16 flip_4bit (u16 value) -{ -u16 flipped =0x0000 ; - -B43_WARN_ON (value & ~0x000F ); - - flipped |= (value &0x0001 ) <<3 ; - flipped |= (value &0x0002 ) <<1 ; - flipped |= (value &0x0004 ) >>1 ; - flipped |= (value &0x0008 ) >>3 ; - -return flipped; -} -static void generate_rfatt_list (struct b43_wldev *dev,struct b43_rfatt_list *list) {@@ -3069,13 +3054,13 @@ b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode) }radio_stacksave (0x0078 ); tmp = (b43_radio_read16 (dev,0x0078 ) &0x001E ); - flipped =flip_4bit (tmp); +B43_WARN_ON (tmp >15 ); + flipped =bitrev4 (tmp);if (flipped <10 && flipped >=8 ) flipped =7 ;else if (flipped >=10 ) flipped -=3 ; - flipped =flip_4bit (flipped); - flipped = (flipped <<1 ) |0x0020 ; + flipped = (bitrev4 (flipped) <<1 ) |0x0020 ;b43_radio_write16 (dev,0x0078 , flipped);b43_calc_nrssi_threshold (dev);@@ -3708,7 +3693,7 @@ u16 b43_radio_init2050(struct b43_wldev *dev) tmp1 >>=9 ;for (i =0 ; i <16 ; i++) { - radio78 = ((flip_4bit (i) <<1 ) |0x20 ); + radio78 = (bitrev4 (i) <<1 ) |0x0020 ;b43_radio_write16 (dev,0x78 , radio78);udelay (10 );for (j =0 ; j <16 ; j++) {
Signature · 1 line
Greetings Michael.
Quoted 10 lines · On Wednesday 14 May 2008 12:21:00 Michael Buesch wrote:
Quoted 7 lines · On Wednesday 14 May 2008 03:13:35 Harvey Harrison wrote:
The 4-bit reversal
flip_4bitis replaced with the bitrev helper bitrev8 and a 4-bit shift. TheB43_WARNis moved to the location where a register is read from for checking there. The other caller explicitly passes an array index which is guaranteed to be within range and so aB43_WARNis not added there.Signed-off-by Harvey Harrison <[email protected]>Reviewed-off-by Michael Buesch <[email protected]>
Reviewed-off bah :D
That's when want to you change a Signed-off-by to a Reviewed-by. ;)
Quoted 73 lines
Quoted 70 lines
--- drivers/net/wireless/b43/phy.c | 27 ++++++--------------------- 1 files changed, 6 insertions(+), 21 deletions(-)drivers/net/wireless/b43/phy.c +6
-21@@ -28,6 +28,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/types.h> +#include <linux/bitrev.h> #include "b43.h" #include "phy.h" @@ -83,25 +84,9 @@ const u8 b43_radio_channel_codes_bg[] = { 72, 84, }; +#define bitrev4 (tmp) (bitrev8(tmp) >> 4)static void b43_phy_initg (struct b43_wldev *dev); -/* Reverse the bits of a 4bit value. -* Example: 1101 is flipped 1011 -*/ -static u16 flip_4bit (u16 value) -{ -u16 flipped =0x0000 ; - -B43_WARN_ON (value & ~0x000F ); - - flipped |= (value &0x0001 ) <<3 ; - flipped |= (value &0x0002 ) <<1 ; - flipped |= (value &0x0004 ) >>1 ; - flipped |= (value &0x0008 ) >>3 ; - -return flipped; -} -static void generate_rfatt_list (struct b43_wldev *dev,struct b43_rfatt_list *list) {@@ -3069,13 +3054,13 @@ b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode) }radio_stacksave (0x0078 ); tmp = (b43_radio_read16 (dev,0x0078 ) &0x001E ); - flipped =flip_4bit (tmp); +B43_WARN_ON (tmp >15 ); + flipped =bitrev4 (tmp);if (flipped <10 && flipped >=8 ) flipped =7 ;else if (flipped >=10 ) flipped -=3 ; - flipped =flip_4bit (flipped); - flipped = (flipped <<1 ) |0x0020 ; + flipped = (bitrev4 (flipped) <<1 ) |0x0020 ;b43_radio_write16 (dev,0x0078 , flipped);b43_calc_nrssi_threshold (dev);@@ -3708,7 +3693,7 @@ u16 b43_radio_init2050(struct b43_wldev *dev) tmp1 >>=9 ;for (i =0 ; i <16 ; i++) { - radio78 = ((flip_4bit (i) <<1 ) |0x20 ); + radio78 = (bitrev4 (i) <<1 ) |0x0020 ;b43_radio_write16 (dev,0x78 , radio78);udelay (10 );for (j =0 ; j <16 ; j++) {
Signature · 1 line
Greetings Michael.