staging: vt6656: Move vnt_get_frame_time and vnt_get_phy_field to rxtx

These functions are only used by rxtx so move them and their arrays
used with them abbreviating the function description.

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Link: https://lore.kernel.org/r/2a4fd665-2fe1-f1ad-1e9a-1b01f698ea79@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Malcolm Priestley 2020-04-19 14:43:46 +01:00 committed by Greg Kroah-Hartman
parent 6f21cb793c
commit 3436accadc
4 changed files with 118 additions and 152 deletions

View file

@ -112,10 +112,6 @@ static u8 vnt_vt3184_vt3226d0[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0xff */
};
static const u16 vnt_frame_time[MAX_RATE] = {
10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216
};
struct vnt_threshold {
u8 bb_pre_ed_rssi;
u8 cr_201;
@ -196,141 +192,6 @@ static const struct vnt_threshold vt3342_vnt_threshold[] = {
{41, 0xff, 0x00}
};
static const u8 vnt_phy_signal[] = {
0x00, /* RATE_1M */
0x01, /* RATE_2M */
0x02, /* RATE_5M */
0x03, /* RATE_11M */
0x8b, /* RATE_6M */
0x8f, /* RATE_9M */
0x8a, /* RATE_12M */
0x8e, /* RATE_18M */
0x89, /* RATE_24M */
0x8d, /* RATE_36M */
0x88, /* RATE_48M */
0x8c /* RATE_54M */
};
/*
* Description: Calculate data frame transmitting time
*
* Parameters:
* In:
* preamble_type - Preamble Type
* pkt_type - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
* frame_length - Baseband Type
* tx_rate - Tx Rate
* Out:
*
* Return Value: FrameTime
*
*/
unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type,
unsigned int frame_length, u16 tx_rate)
{
unsigned int frame_time;
unsigned int preamble;
unsigned int rate;
if (tx_rate > RATE_54M)
return 0;
rate = (unsigned int)vnt_frame_time[tx_rate];
if (tx_rate <= RATE_11M) {
if (preamble_type == PREAMBLE_SHORT)
preamble = 96;
else
preamble = 192;
frame_time = DIV_ROUND_UP(frame_length * 80, rate);
return preamble + frame_time;
}
frame_time = DIV_ROUND_UP(frame_length * 8 + 22, rate);
frame_time = frame_time * 4;
if (pkt_type != PK_TYPE_11A)
frame_time += 6;
return 20 + frame_time;
}
/*
* Description: Calculate Length, Service, and Signal fields of Phy for Tx
*
* Parameters:
* In:
* priv - Device Structure
* frame_length - Tx Frame Length
* tx_rate - Tx Rate
* Out:
* struct vnt_phy_field *phy
* - pointer to Phy Length field
* - pointer to Phy Service field
* - pointer to Phy Signal field
*
* Return Value: none
*
*/
void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy)
{
u32 bit_count;
u32 count = 0;
u32 tmp;
int ext_bit;
int i;
u8 mask = 0;
u8 preamble_type = priv->preamble_type;
bit_count = frame_length * 8;
ext_bit = false;
switch (tx_rate) {
case RATE_1M:
count = bit_count;
break;
case RATE_2M:
count = bit_count / 2;
break;
case RATE_5M:
count = DIV_ROUND_UP(bit_count * 10, 55);
break;
case RATE_11M:
count = bit_count / 11;
tmp = count * 11;
if (tmp != bit_count) {
count++;
if ((bit_count - tmp) <= 3)
ext_bit = true;
}
break;
}
if (tx_rate > RATE_11M) {
if (pkt_type == PK_TYPE_11A)
mask = BIT(4);
} else if (tx_rate > RATE_1M) {
if (preamble_type == PREAMBLE_SHORT)
mask = BIT(3);
}
i = tx_rate > RATE_54M ? RATE_54M : tx_rate;
phy->signal = vnt_phy_signal[i] | mask;
phy->service = 0x00;
if (pkt_type == PK_TYPE_11B) {
if (ext_bit)
phy->service |= 0x80;
phy->len = cpu_to_le16((u16)count);
} else {
phy->len = cpu_to_le16((u16)frame_length);
}
}
/*
* Description: Set Antenna mode
*

View file

@ -66,19 +66,6 @@
#define TOP_RATE_2M 0x00200000
#define TOP_RATE_1M 0x00100000
/* Length, Service, and Signal fields of Phy for Tx */
struct vnt_phy_field {
u8 signal;
u8 service;
__le16 len;
} __packed;
unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type,
unsigned int frame_length, u16 tx_rate);
void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
u16 tx_rate, u8 pkt_type, struct vnt_phy_field *phy);
int vnt_set_short_slot_time(struct vnt_private *priv);
void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data);
int vnt_set_antenna_mode(struct vnt_private *priv, u8 antenna_mode);

View file

@ -45,6 +45,25 @@ static const u16 vnt_time_stampoff[2][MAX_RATE] = {
#define DATADUR_B 10
#define DATADUR_A 11
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[] = {
0x00, /* RATE_1M */
0x01, /* RATE_2M */
0x02, /* RATE_5M */
0x03, /* RATE_11M */
0x8b, /* RATE_6M */
0x8f, /* RATE_9M */
0x8a, /* RATE_12M */
0x8e, /* RATE_18M */
0x89, /* RATE_24M */
0x8d, /* RATE_36M */
0x88, /* RATE_48M */
0x8c /* RATE_54M */
};
static struct vnt_usb_send_context
*vnt_get_free_context(struct vnt_private *priv)
{
@ -78,6 +97,98 @@ static struct vnt_usb_send_context
return NULL;
}
/* Frame time for Tx */
static unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type,
unsigned int frame_length, u16 tx_rate)
{
unsigned int frame_time;
unsigned int preamble;
unsigned int rate;
if (tx_rate > RATE_54M)
return 0;
rate = (unsigned int)vnt_frame_time[tx_rate];
if (tx_rate <= RATE_11M) {
if (preamble_type == PREAMBLE_SHORT)
preamble = 96;
else
preamble = 192;
frame_time = DIV_ROUND_UP(frame_length * 80, rate);
return preamble + frame_time;
}
frame_time = DIV_ROUND_UP(frame_length * 8 + 22, rate);
frame_time = frame_time * 4;
if (pkt_type != PK_TYPE_11A)
frame_time += 6;
return 20 + frame_time;
}
/* Get Length, Service, and Signal fields of Phy for Tx */
static void vnt_get_phy_field(struct vnt_private *priv, u32 frame_length,
u16 tx_rate, u8 pkt_type,
struct vnt_phy_field *phy)
{
u32 bit_count;
u32 count = 0;
u32 tmp;
int ext_bit;
int i;
u8 mask = 0;
u8 preamble_type = priv->preamble_type;
bit_count = frame_length * 8;
ext_bit = false;
switch (tx_rate) {
case RATE_1M:
count = bit_count;
break;
case RATE_2M:
count = bit_count / 2;
break;
case RATE_5M:
count = DIV_ROUND_UP(bit_count * 10, 55);
break;
case RATE_11M:
count = bit_count / 11;
tmp = count * 11;
if (tmp != bit_count) {
count++;
if ((bit_count - tmp) <= 3)
ext_bit = true;
}
break;
}
if (tx_rate > RATE_11M) {
if (pkt_type == PK_TYPE_11A)
mask = BIT(4);
} else if (tx_rate > RATE_1M) {
if (preamble_type == PREAMBLE_SHORT)
mask = BIT(3);
}
i = tx_rate > RATE_54M ? RATE_54M : tx_rate;
phy->signal = vnt_phy_signal[i] | mask;
phy->service = 0x00;
if (pkt_type == PK_TYPE_11B) {
if (ext_bit)
phy->service |= 0x80;
phy->len = cpu_to_le16((u16)count);
} else {
phy->len = cpu_to_le16((u16)frame_length);
}
}
static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate)
{
return cpu_to_le16(vnt_time_stampoff[priv->preamble_type % 2]

View file

@ -23,6 +23,13 @@
#define DEFAULT_MGN_LIFETIME_RES_64us 125 /* 64us */
#define DEFAULT_MSDU_LIFETIME_RES_64us 8000
/* Length, Service, and Signal fields of Phy for Tx */
struct vnt_phy_field {
u8 signal;
u8 service;
__le16 len;
} __packed;
/* MIC HDR data header */
struct vnt_mic_hdr {
u8 id;