2020-04-10 11:30:30

by Oscar Carter

[permalink] [raw]
Subject: [PATCH 1/2] staging: vt6656: Refactor the assignment of the phy->signal variable

Create a constant array with the values of the "phy->signal" for every
rate. Remove all "phy->signal" assignments inside the switch statement
and replace these with a single reading from the new vnt_phy_signal
array.

Signed-off-by: Oscar Carter <[email protected]>
---
drivers/staging/vt6656/baseband.c | 101 +++++++-----------------------
1 file changed, 21 insertions(+), 80 deletions(-)

diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
index a19a563d8bcc..47f93bf6e07b 100644
--- a/drivers/staging/vt6656/baseband.c
+++ b/drivers/staging/vt6656/baseband.c
@@ -115,6 +115,21 @@ static const u16 vnt_frame_time[MAX_RATE] = {
10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
};

+static const u8 vnt_phy_signal[][2] = {
+ {0x00, 0x00}, /* RATE_1M */
+ {0x01, 0x09}, /* RATE_2M */
+ {0x02, 0x0a}, /* RATE_5M */
+ {0x03, 0x0b}, /* RATE_11M */
+ {0x8b, 0x9b}, /* RATE_6M */
+ {0x8f, 0x9f}, /* RATE_9M */
+ {0x8a, 0x9a}, /* RATE_12M */
+ {0x8e, 0x9e}, /* RATE_18M */
+ {0x89, 0x99}, /* RATE_24M */
+ {0x8d, 0x9d}, /* RATE_36M */
+ {0x88, 0x98}, /* RATE_48M */
+ {0x8c, 0x9c} /* RATE_54M */
+};
+
/*
* Description: Calculate data frame transmitting time
*
@@ -183,6 +198,7 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
u32 count = 0;
u32 tmp;
int ext_bit;
+ int i, j;
u8 preamble_type = priv->preamble_type;

bit_count = frame_length * 8;
@@ -191,27 +207,12 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
switch (tx_rate) {
case RATE_1M:
count = bit_count;
-
- phy->signal = 0x00;
-
break;
case RATE_2M:
count = bit_count / 2;
-
- if (preamble_type == 1)
- phy->signal = 0x09;
- else
- phy->signal = 0x01;
-
break;
case RATE_5M:
count = DIV_ROUND_UP(bit_count * 10, 55);
-
- if (preamble_type == 1)
- phy->signal = 0x0a;
- else
- phy->signal = 0x02;
-
break;
case RATE_11M:
count = bit_count / 11;
@@ -224,74 +225,14 @@ void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
ext_bit = true;
}

- if (preamble_type == 1)
- phy->signal = 0x0b;
- else
- phy->signal = 0x03;
-
- break;
- case RATE_6M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9b;
- else
- phy->signal = 0x8b;
-
- break;
- case RATE_9M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9f;
- else
- phy->signal = 0x8f;
-
- break;
- case RATE_12M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9a;
- else
- phy->signal = 0x8a;
-
- break;
- case RATE_18M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9e;
- else
- phy->signal = 0x8e;
-
- break;
- case RATE_24M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x99;
- else
- phy->signal = 0x89;
-
break;
- case RATE_36M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9d;
- else
- phy->signal = 0x8d;
+ }

- break;
- case RATE_48M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x98;
- else
- phy->signal = 0x88;
+ i = tx_rate > RATE_54M ? RATE_54M : tx_rate;
+ j = tx_rate > RATE_11M ? pkt_type == PK_TYPE_11A
+ : preamble_type == PREAMBLE_SHORT;

- break;
- case RATE_54M:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9c;
- else
- phy->signal = 0x8c;
- break;
- default:
- if (pkt_type == PK_TYPE_11A)
- phy->signal = 0x9c;
- else
- phy->signal = 0x8c;
- break;
- }
+ phy->signal = vnt_phy_signal[i][j];

if (pkt_type == PK_TYPE_11B) {
phy->service = 0x00;
--
2.20.1


2020-04-10 15:40:24

by Malcolm Priestley

[permalink] [raw]
Subject: Re: [PATCH 1/2] staging: vt6656: Refactor the assignment of the phy->signal variable



On 10/04/2020 12:28, Oscar Carter wrote:
> Create a constant array with the values of the "phy->signal" for every
> rate. Remove all "phy->signal" assignments inside the switch statement
> and replace these with a single reading from the new vnt_phy_signal
> array.
>
> Signed-off-by: Oscar Carter <[email protected]>
> ---
> drivers/staging/vt6656/baseband.c | 101 +++++++-----------------------
> 1 file changed, 21 insertions(+), 80 deletions(-)
>
> diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
> index a19a563d8bcc..47f93bf6e07b 100644
> --- a/drivers/staging/vt6656/baseband.c
> +++ b/drivers/staging/vt6656/baseband.c
> @@ -115,6 +115,21 @@ static const u16 vnt_frame_time[MAX_RATE] = {
> 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
> };

Actually you don't need the second values
>
> +static const u8 vnt_phy_signal[][2] = {
> + {0x00, 0x00}, /* RATE_1M */
The driver would never attempt use preamble at this rate
so it's safe to include in with the next 3 rates

> + {0x01, 0x09}, /* RATE_2M */
> + {0x02, 0x0a}, /* RATE_5M */
> + {0x03, 0x0b}, /* RATE_11M */
just |= BIT(3) for preamble.

> + {0x8b, 0x9b}, /* RATE_6M */
> + {0x8f, 0x9f}, /* RATE_9M */
> + {0x8a, 0x9a}, /* RATE_12M */
> + {0x8e, 0x9e}, /* RATE_18M */
> + {0x89, 0x99}, /* RATE_24M */
> + {0x8d, 0x9d}, /* RATE_36M */
> + {0x88, 0x98}, /* RATE_48M */
> + {0x8c, 0x9c} /* RATE_54M */

Again just |= BIT(4) for PK_TYPE_11A

Regards

Malcolm

2020-04-10 16:01:31

by Oscar Carter

[permalink] [raw]
Subject: Re: [PATCH 1/2] staging: vt6656: Refactor the assignment of the phy->signal variable

On Fri, Apr 10, 2020 at 04:37:59PM +0100, Malcolm Priestley wrote:
>
>
> On 10/04/2020 12:28, Oscar Carter wrote:
> > Create a constant array with the values of the "phy->signal" for every
> > rate. Remove all "phy->signal" assignments inside the switch statement
> > and replace these with a single reading from the new vnt_phy_signal
> > array.
> >
> > Signed-off-by: Oscar Carter <[email protected]>
> > ---
> > drivers/staging/vt6656/baseband.c | 101 +++++++-----------------------
> > 1 file changed, 21 insertions(+), 80 deletions(-)
> >
> > diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
> > index a19a563d8bcc..47f93bf6e07b 100644
> > --- a/drivers/staging/vt6656/baseband.c
> > +++ b/drivers/staging/vt6656/baseband.c
> > @@ -115,6 +115,21 @@ static const u16 vnt_frame_time[MAX_RATE] = {
> > 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
> > };
>
> Actually you don't need the second values

Great.
> >
> > +static const u8 vnt_phy_signal[][2] = {
> > + {0x00, 0x00}, /* RATE_1M */
> The driver would never attempt use preamble at this rate
> so it's safe to include in with the next 3 rates
>
> > + {0x01, 0x09}, /* RATE_2M */
> > + {0x02, 0x0a}, /* RATE_5M */
> > + {0x03, 0x0b}, /* RATE_11M */
> just |= BIT(3) for preamble.
>
Ok, I apply this OR operation.

> > + {0x8b, 0x9b}, /* RATE_6M */
> > + {0x8f, 0x9f}, /* RATE_9M */
> > + {0x8a, 0x9a}, /* RATE_12M */
> > + {0x8e, 0x9e}, /* RATE_18M */
> > + {0x89, 0x99}, /* RATE_24M */
> > + {0x8d, 0x9d}, /* RATE_36M */
> > + {0x88, 0x98}, /* RATE_48M */
> > + {0x8c, 0x9c} /* RATE_54M */
>
> Again just |= BIT(4) for PK_TYPE_11A
>
And this one.

> Regards
>
> Malcolm

I will create a new version of this patch and I will resend it.

Thanks,

Oscar Carter

2020-04-10 16:42:25

by Malcolm Priestley

[permalink] [raw]
Subject: Re: [PATCH 1/2] staging: vt6656: Refactor the assignment of the phy->signal variable



On 10/04/2020 16:59, Oscar Carter wrote:
> On Fri, Apr 10, 2020 at 04:37:59PM +0100, Malcolm Priestley wrote:
>>
>>
>> On 10/04/2020 12:28, Oscar Carter wrote:
>>> Create a constant array with the values of the "phy->signal" for every
>>> rate. Remove all "phy->signal" assignments inside the switch statement
>>> and replace these with a single reading from the new vnt_phy_signal
>>> array.
>>>
>>> Signed-off-by: Oscar Carter <[email protected]>
>>> ---
>>> drivers/staging/vt6656/baseband.c | 101 +++++++-----------------------
>>> 1 file changed, 21 insertions(+), 80 deletions(-)
>>>
>>> diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
>>> index a19a563d8bcc..47f93bf6e07b 100644
>>> --- a/drivers/staging/vt6656/baseband.c
>>> +++ b/drivers/staging/vt6656/baseband.c
>>> @@ -115,6 +115,21 @@ static const u16 vnt_frame_time[MAX_RATE] = {
>>> 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
>>> };
>>
>> Actually you don't need the second values
>
> Great.
>>>
>>> +static const u8 vnt_phy_signal[][2] = {
>>> + {0x00, 0x00}, /* RATE_1M */
>> The driver would never attempt use preamble at this rate
>> so it's safe to include in with the next 3 rates
Sorry got this wrong the driver is trying to do preamble (short)
at this rate and it is not working.

So don't apply it to RATE_1M rate.

Regards

Malcolm


2020-04-10 17:19:51

by Oscar Carter

[permalink] [raw]
Subject: Re: [PATCH 1/2] staging: vt6656: Refactor the assignment of the phy->signal variable

On Fri, Apr 10, 2020 at 05:40:52PM +0100, Malcolm Priestley wrote:
>
>
> On 10/04/2020 16:59, Oscar Carter wrote:
> > On Fri, Apr 10, 2020 at 04:37:59PM +0100, Malcolm Priestley wrote:
> > >
> > >
> > > On 10/04/2020 12:28, Oscar Carter wrote:
> > > > Create a constant array with the values of the "phy->signal" for every
> > > > rate. Remove all "phy->signal" assignments inside the switch statement
> > > > and replace these with a single reading from the new vnt_phy_signal
> > > > array.
> > > >
> > > > Signed-off-by: Oscar Carter <[email protected]>
> > > > ---
> > > > drivers/staging/vt6656/baseband.c | 101 +++++++-----------------------
> > > > 1 file changed, 21 insertions(+), 80 deletions(-)
> > > >
> > > > diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
> > > > index a19a563d8bcc..47f93bf6e07b 100644
> > > > --- a/drivers/staging/vt6656/baseband.c
> > > > +++ b/drivers/staging/vt6656/baseband.c
> > > > @@ -115,6 +115,21 @@ static const u16 vnt_frame_time[MAX_RATE] = {
> > > > 10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
> > > > };
> > >
> > > Actually you don't need the second values
> >
> > Great.
> > > >
> > > > +static const u8 vnt_phy_signal[][2] = {
> > > > + {0x00, 0x00}, /* RATE_1M */
> > > The driver would never attempt use preamble at this rate
> > > so it's safe to include in with the next 3 rates
> Sorry got this wrong the driver is trying to do preamble (short)
> at this rate and it is not working.
>
> So don't apply it to RATE_1M rate.

Ok, I take it into account.
>
> Regards
>
> Malcolm
>
Thanks,

Oscar Carter