net: ipa: use a bitmap for endpoint replenish_enabled
Define a new replenish_flags bitmap to contain Boolean flags associated with an endpoint's replenishing state. Replace the replenish_enabled field with a flag in that bitmap. This is to prepare for the next patch, which adds another flag. Signed-off-by: Alex Elder <elder@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
6c0e3b5ce9
commit
c1aaa01dbf
@@ -1082,7 +1082,7 @@ static void ipa_endpoint_replenish(struct ipa_endpoint *endpoint, bool add_one)
|
|||||||
u32 backlog;
|
u32 backlog;
|
||||||
int delta;
|
int delta;
|
||||||
|
|
||||||
if (!endpoint->replenish_enabled) {
|
if (!test_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags)) {
|
||||||
if (add_one)
|
if (add_one)
|
||||||
atomic_inc(&endpoint->replenish_saved);
|
atomic_inc(&endpoint->replenish_saved);
|
||||||
return;
|
return;
|
||||||
@@ -1119,7 +1119,7 @@ static void ipa_endpoint_replenish_enable(struct ipa_endpoint *endpoint)
|
|||||||
u32 max_backlog;
|
u32 max_backlog;
|
||||||
u32 saved;
|
u32 saved;
|
||||||
|
|
||||||
endpoint->replenish_enabled = true;
|
set_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
|
||||||
while ((saved = atomic_xchg(&endpoint->replenish_saved, 0)))
|
while ((saved = atomic_xchg(&endpoint->replenish_saved, 0)))
|
||||||
atomic_add(saved, &endpoint->replenish_backlog);
|
atomic_add(saved, &endpoint->replenish_backlog);
|
||||||
|
|
||||||
@@ -1133,7 +1133,7 @@ static void ipa_endpoint_replenish_disable(struct ipa_endpoint *endpoint)
|
|||||||
{
|
{
|
||||||
u32 backlog;
|
u32 backlog;
|
||||||
|
|
||||||
endpoint->replenish_enabled = false;
|
clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
|
||||||
while ((backlog = atomic_xchg(&endpoint->replenish_backlog, 0)))
|
while ((backlog = atomic_xchg(&endpoint->replenish_backlog, 0)))
|
||||||
atomic_add(backlog, &endpoint->replenish_saved);
|
atomic_add(backlog, &endpoint->replenish_saved);
|
||||||
}
|
}
|
||||||
@@ -1690,7 +1690,7 @@ static void ipa_endpoint_setup_one(struct ipa_endpoint *endpoint)
|
|||||||
/* RX transactions require a single TRE, so the maximum
|
/* RX transactions require a single TRE, so the maximum
|
||||||
* backlog is the same as the maximum outstanding TREs.
|
* backlog is the same as the maximum outstanding TREs.
|
||||||
*/
|
*/
|
||||||
endpoint->replenish_enabled = false;
|
clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
|
||||||
atomic_set(&endpoint->replenish_saved,
|
atomic_set(&endpoint->replenish_saved,
|
||||||
gsi_channel_tre_max(gsi, endpoint->channel_id));
|
gsi_channel_tre_max(gsi, endpoint->channel_id));
|
||||||
atomic_set(&endpoint->replenish_backlog, 0);
|
atomic_set(&endpoint->replenish_backlog, 0);
|
||||||
|
|||||||
@@ -40,6 +40,17 @@ enum ipa_endpoint_name {
|
|||||||
|
|
||||||
#define IPA_ENDPOINT_MAX 32 /* Max supported by driver */
|
#define IPA_ENDPOINT_MAX 32 /* Max supported by driver */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum ipa_replenish_flag: RX buffer replenish flags
|
||||||
|
*
|
||||||
|
* @IPA_REPLENISH_ENABLED: Whether receive buffer replenishing is enabled
|
||||||
|
* @IPA_REPLENISH_COUNT: Number of defined replenish flags
|
||||||
|
*/
|
||||||
|
enum ipa_replenish_flag {
|
||||||
|
IPA_REPLENISH_ENABLED,
|
||||||
|
IPA_REPLENISH_COUNT, /* Number of flags (must be last) */
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ipa_endpoint - IPA endpoint information
|
* struct ipa_endpoint - IPA endpoint information
|
||||||
* @ipa: IPA pointer
|
* @ipa: IPA pointer
|
||||||
@@ -51,7 +62,7 @@ enum ipa_endpoint_name {
|
|||||||
* @trans_tre_max: Maximum number of TRE descriptors per transaction
|
* @trans_tre_max: Maximum number of TRE descriptors per transaction
|
||||||
* @evt_ring_id: GSI event ring used by the endpoint
|
* @evt_ring_id: GSI event ring used by the endpoint
|
||||||
* @netdev: Network device pointer, if endpoint uses one
|
* @netdev: Network device pointer, if endpoint uses one
|
||||||
* @replenish_enabled: Whether receive buffer replenishing is enabled
|
* @replenish_flags: Replenishing state flags
|
||||||
* @replenish_ready: Number of replenish transactions without doorbell
|
* @replenish_ready: Number of replenish transactions without doorbell
|
||||||
* @replenish_saved: Replenish requests held while disabled
|
* @replenish_saved: Replenish requests held while disabled
|
||||||
* @replenish_backlog: Number of buffers needed to fill hardware queue
|
* @replenish_backlog: Number of buffers needed to fill hardware queue
|
||||||
@@ -72,7 +83,7 @@ struct ipa_endpoint {
|
|||||||
struct net_device *netdev;
|
struct net_device *netdev;
|
||||||
|
|
||||||
/* Receive buffer replenishing for RX endpoints */
|
/* Receive buffer replenishing for RX endpoints */
|
||||||
bool replenish_enabled;
|
DECLARE_BITMAP(replenish_flags, IPA_REPLENISH_COUNT);
|
||||||
u32 replenish_ready;
|
u32 replenish_ready;
|
||||||
atomic_t replenish_saved;
|
atomic_t replenish_saved;
|
||||||
atomic_t replenish_backlog;
|
atomic_t replenish_backlog;
|
||||||
|
|||||||
Reference in New Issue
Block a user