net: ipa: use a bitmap for endpoint replenish_enabled
authorAlex Elder <elder@linaro.org>
Wed, 12 Jan 2022 13:30:11 +0000 (07:30 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Feb 2022 11:38:56 +0000 (12:38 +0100)
commit c1aaa01dbf4cef95af3e04a5a43986c290e06ea3 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ipa/ipa_endpoint.c
drivers/net/ipa/ipa_endpoint.h

index c8f90cb1ee8f3de794923edce5249971371deaaf..2109a4d7c9b416848f1e6870343cbf08e50bc410 100644 (file)
@@ -1069,7 +1069,7 @@ static void ipa_endpoint_replenish(struct ipa_endpoint *endpoint, bool add_one)
        u32 backlog;
        int delta;
 
-       if (!endpoint->replenish_enabled) {
+       if (!test_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags)) {
                if (add_one)
                        atomic_inc(&endpoint->replenish_saved);
                return;
@@ -1106,7 +1106,7 @@ static void ipa_endpoint_replenish_enable(struct ipa_endpoint *endpoint)
        u32 max_backlog;
        u32 saved;
 
-       endpoint->replenish_enabled = true;
+       set_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
        while ((saved = atomic_xchg(&endpoint->replenish_saved, 0)))
                atomic_add(saved, &endpoint->replenish_backlog);
 
@@ -1120,7 +1120,7 @@ static void ipa_endpoint_replenish_disable(struct ipa_endpoint *endpoint)
 {
        u32 backlog;
 
-       endpoint->replenish_enabled = false;
+       clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
        while ((backlog = atomic_xchg(&endpoint->replenish_backlog, 0)))
                atomic_add(backlog, &endpoint->replenish_saved);
 }
@@ -1665,7 +1665,7 @@ static void ipa_endpoint_setup_one(struct ipa_endpoint *endpoint)
                /* RX transactions require a single TRE, so the maximum
                 * 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,
                           gsi_channel_tre_max(gsi, endpoint->channel_id));
                atomic_set(&endpoint->replenish_backlog, 0);
index 0a859d10312dcefdfe3a5efc0ce6d8247cb02961..07d5c20e5f00004771179489796b5a859eef4b96 100644 (file)
@@ -40,6 +40,17 @@ enum ipa_endpoint_name {
 
 #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
  * @ipa:               IPA pointer
@@ -51,7 +62,7 @@ enum ipa_endpoint_name {
  * @trans_tre_max:     Maximum number of TRE descriptors per transaction
  * @evt_ring_id:       GSI event ring used by the endpoint
  * @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_saved:   Replenish requests held while disabled
  * @replenish_backlog: Number of buffers needed to fill hardware queue
@@ -72,7 +83,7 @@ struct ipa_endpoint {
        struct net_device *netdev;
 
        /* Receive buffer replenishing for RX endpoints */
-       bool replenish_enabled;
+       DECLARE_BITMAP(replenish_flags, IPA_REPLENISH_COUNT);
        u32 replenish_ready;
        atomic_t replenish_saved;
        atomic_t replenish_backlog;