diff --git a/transport/HidlTransportSupport.cpp b/transport/HidlTransportSupport.cpp
index b433b70..e645cd0 100644
--- a/transport/HidlTransportSupport.cpp
+++ b/transport/HidlTransportSupport.cpp
@@ -13,13 +13,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <hidl/HidlBinderSupport.h>
 #include <hidl/HidlTransportSupport.h>
-#include <hidl/Static.h>
+
+#include <hidl/HidlBinderSupport.h>
+#include "InternalStatic.h"
 
 #include <android-base/logging.h>
 #include <android/hidl/manager/1.0/IServiceManager.h>
 
+#include <linux/sched.h>
+
 namespace android {
 namespace hardware {
 
@@ -92,6 +95,10 @@
     return true;
 }
 
+SchedPrio getMinSchedulerPolicy(const sp<IBase>& service) {
+    return details::gServicePrioMap->get(service, {SCHED_NORMAL, 0});
+}
+
 bool setRequestingSid(const sp<IBase>& service, bool requesting) {
     if (service->isRemote()) {
         LOG(ERROR) << "Can't set requesting sid on remote service.";
@@ -108,6 +115,10 @@
     return true;
 }
 
+bool getRequestingSid(const sp<IBase>& service) {
+    return details::gServiceSidMap->get(service.get(), false);
+}
+
 bool interfacesEqual(const sp<IBase>& left, const sp<IBase>& right) {
     if (left == nullptr || right == nullptr || !left->isRemote() || !right->isRemote()) {
         return left == right;
diff --git a/transport/InternalStatic.h b/transport/InternalStatic.h
index 1dfaae4..666b2b6 100644
--- a/transport/InternalStatic.h
+++ b/transport/InternalStatic.h
@@ -20,19 +20,26 @@
 #ifndef ANDROID_HARDWARE_HIDL_INTERNAL_STATIC_H
 #define ANDROID_HARDWARE_HIDL_INTERNAL_STATIC_H
 
+#include <hidl/HidlTransportSupport.h>  // for SchedPrio
 #include <hidl/Static.h>
 
 namespace android {
 namespace hardware {
 namespace details {
 
-// TODO(b/69122224): remove this
+// TODO(b/69122224): remove this once no prebuilts reference it
 // deprecated; use getBnConstructorMap instead.
 extern DoNotDestruct<BnConstructorMap> gBnConstructorMap;
-// TODO(b/69122224): remove this
+// TODO(b/69122224): remove this once no prebuilts reference it
 // deprecated; use getBsConstructorMap instead.
 extern DoNotDestruct<BsConstructorMap> gBsConstructorMap;
 
+// TODO(b/69122224): remove this once no prebuilts reference it
+extern DoNotDestruct<ConcurrentMap<wp<::android::hidl::base::V1_0::IBase>, SchedPrio>>
+        gServicePrioMap;
+// TODO(b/69122224): remove this once no prebuilts reference it
+extern DoNotDestruct<ConcurrentMap<wp<::android::hidl::base::V1_0::IBase>, bool>> gServiceSidMap;
+
 }  // namespace details
 }  // namespace hardware
 }  // namespace android
diff --git a/transport/include/hidl/HidlTransportSupport.h b/transport/include/hidl/HidlTransportSupport.h
index a132bfa..454a4e5 100644
--- a/transport/include/hidl/HidlTransportSupport.h
+++ b/transport/include/hidl/HidlTransportSupport.h
@@ -84,6 +84,13 @@
 bool setMinSchedulerPolicy(const sp<::android::hidl::base::V1_0::IBase>& service,
                            int policy, int priority);
 
+struct SchedPrio {
+    int sched_policy;
+    int prio;
+};
+
+SchedPrio getMinSchedulerPolicy(const sp<::android::hidl::base::V1_0::IBase>& service);
+
 /**
  * Sets whether or not this object should request security contexts to be populatd for incoming
  * calls (e.g. with getCallingSid).
@@ -97,6 +104,12 @@
 bool setRequestingSid(const sp<::android::hidl::base::V1_0::IBase>& service, bool requesting);
 
 /**
+ * Says whether or not this service is requesting a SID. If this was set after the service was
+ * sent to another process, then it will not take effect.
+ */
+bool getRequestingSid(const sp<::android::hidl::base::V1_0::IBase>& service);
+
+/**
  * Returns whether two interfaces represent the same interface. References to interfaces in the same
  * process will always be equivalent. However, in order to compare a service that is a proxy to a
  * different process, its underlying structure may have to be checked.
diff --git a/transport/include/hidl/Static.h b/transport/include/hidl/Static.h
index be74bae..3f6203c 100644
--- a/transport/include/hidl/Static.h
+++ b/transport/include/hidl/Static.h
@@ -32,17 +32,6 @@
 namespace hardware {
 namespace details {
 
-struct SchedPrio {
-    int sched_policy;
-    int prio;
-};
-
-// TODO(b/69122224): remove this
-extern DoNotDestruct<ConcurrentMap<wp<::android::hidl::base::V1_0::IBase>, SchedPrio>>
-        gServicePrioMap;
-// TODO(b/69122224): remove this
-extern DoNotDestruct<ConcurrentMap<wp<::android::hidl::base::V1_0::IBase>, bool>> gServiceSidMap;
-
 // TODO(b/69122224): remove this
 // For HidlBinderSupport and autogenerated code
 extern DoNotDestruct<ConcurrentMap<const ::android::hidl::base::V1_0::IBase*,
