usb: gadget: add a inline function gether_bitrate()
In function ecm_bitrate(), it is not support report bit rate for super speed plus mode, but it can use same bit rate value defined in ncm and rndis. Add a common inline function gether_bitrate() which report different for all possible speeds, it can be used by ecm, ncm and rndis, also remove old function from them. Signed-off-by: Linyu Yuan <quic_linyyuan@quicinc.com> Link: https://lore.kernel.org/r/20230803091053.9714-3-quic_linyyuan@quicinc.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
98102ae154
commit
8165763f82
@ -65,17 +65,6 @@ static inline struct f_ecm *func_to_ecm(struct usb_function *f)
|
||||
return container_of(f, struct f_ecm, port.func);
|
||||
}
|
||||
|
||||
/* peak (theoretical) bulk transfer rate in bits-per-second */
|
||||
static inline unsigned ecm_bitrate(struct usb_gadget *g)
|
||||
{
|
||||
if (g->speed == USB_SPEED_SUPER)
|
||||
return 13 * 1024 * 8 * 1000 * 8;
|
||||
else if (g->speed == USB_SPEED_HIGH)
|
||||
return 13 * 512 * 8 * 1000 * 8;
|
||||
else
|
||||
return 19 * 64 * 1 * 1000 * 8;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
@ -411,10 +400,10 @@ static void ecm_do_notify(struct f_ecm *ecm)
|
||||
|
||||
/* SPEED_CHANGE data is up/down speeds in bits/sec */
|
||||
data = req->buf + sizeof *event;
|
||||
data[0] = cpu_to_le32(ecm_bitrate(cdev->gadget));
|
||||
data[0] = cpu_to_le32(gether_bitrate(cdev->gadget));
|
||||
data[1] = data[0];
|
||||
|
||||
DBG(cdev, "notify speed %d\n", ecm_bitrate(cdev->gadget));
|
||||
DBG(cdev, "notify speed %d\n", gether_bitrate(cdev->gadget));
|
||||
ecm->notify_state = ECM_NOTIFY_NONE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -80,21 +80,6 @@ static inline struct f_ncm *func_to_ncm(struct usb_function *f)
|
||||
return container_of(f, struct f_ncm, port.func);
|
||||
}
|
||||
|
||||
/* peak (theoretical) bulk transfer rate in bits-per-second */
|
||||
static inline unsigned ncm_bitrate(struct usb_gadget *g)
|
||||
{
|
||||
if (!g)
|
||||
return 0;
|
||||
else if (g->speed >= USB_SPEED_SUPER_PLUS)
|
||||
return 4250000000U;
|
||||
else if (g->speed == USB_SPEED_SUPER)
|
||||
return 3750000000U;
|
||||
else if (g->speed == USB_SPEED_HIGH)
|
||||
return 13 * 512 * 8 * 1000 * 8;
|
||||
else
|
||||
return 19 * 64 * 1 * 1000 * 8;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
@ -576,10 +561,10 @@ static void ncm_do_notify(struct f_ncm *ncm)
|
||||
|
||||
/* SPEED_CHANGE data is up/down speeds in bits/sec */
|
||||
data = req->buf + sizeof *event;
|
||||
data[0] = cpu_to_le32(ncm_bitrate(cdev->gadget));
|
||||
data[0] = cpu_to_le32(gether_bitrate(cdev->gadget));
|
||||
data[1] = data[0];
|
||||
|
||||
DBG(cdev, "notify speed %u\n", ncm_bitrate(cdev->gadget));
|
||||
DBG(cdev, "notify speed %u\n", gether_bitrate(cdev->gadget));
|
||||
ncm->notify_state = NCM_NOTIFY_CONNECT;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -84,19 +84,6 @@ static inline struct f_rndis *func_to_rndis(struct usb_function *f)
|
||||
return container_of(f, struct f_rndis, port.func);
|
||||
}
|
||||
|
||||
/* peak (theoretical) bulk transfer rate in bits-per-second */
|
||||
static unsigned int bitrate(struct usb_gadget *g)
|
||||
{
|
||||
if (g->speed >= USB_SPEED_SUPER_PLUS)
|
||||
return 4250000000U;
|
||||
if (g->speed == USB_SPEED_SUPER)
|
||||
return 3750000000U;
|
||||
else if (g->speed == USB_SPEED_HIGH)
|
||||
return 13 * 512 * 8 * 1000 * 8;
|
||||
else
|
||||
return 19 * 64 * 1 * 1000 * 8;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
@ -640,7 +627,7 @@ static void rndis_open(struct gether *geth)
|
||||
DBG(cdev, "%s\n", __func__);
|
||||
|
||||
rndis_set_param_medium(rndis->params, RNDIS_MEDIUM_802_3,
|
||||
bitrate(cdev->gadget) / 100);
|
||||
gether_bitrate(cdev->gadget) / 100);
|
||||
rndis_signal_connect(rndis->params);
|
||||
}
|
||||
|
||||
|
||||
@ -279,4 +279,17 @@ static inline bool can_support_ecm(struct usb_gadget *gadget)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* peak (theoretical) bulk transfer rate in bits-per-second */
|
||||
static inline unsigned int gether_bitrate(struct usb_gadget *g)
|
||||
{
|
||||
if (g->speed >= USB_SPEED_SUPER_PLUS)
|
||||
return 4250000000U;
|
||||
if (g->speed == USB_SPEED_SUPER)
|
||||
return 3750000000U;
|
||||
else if (g->speed == USB_SPEED_HIGH)
|
||||
return 13 * 512 * 8 * 1000 * 8;
|
||||
else
|
||||
return 19 * 64 * 1 * 1000 * 8;
|
||||
}
|
||||
|
||||
#endif /* __U_ETHER_H */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user