]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - android/external-libkmsxx.git/blobdiff - libkms++/card.cpp
card: fix has_atomic if libdrm does not have atomic support
[android/external-libkmsxx.git] / libkms++ / card.cpp
index 3aaa8a6ee0ac691c884b9e3c11d842251fc9bcd3..a0e395eb19acf40eb5ff8f76073d37444cfdd8b2 100644 (file)
 
 #include "kms++.h"
 
-#ifndef DRM_CLIENT_CAP_ATOMIC
-#define DRM_CLIENT_CAP_ATOMIC 3
-#endif
-
 using namespace std;
 
 namespace kms
@@ -42,12 +38,16 @@ Card::Card()
                m_has_universal_planes = false;
        }
 
+#ifdef DRM_CLIENT_CAP_ATOMIC
        if (getenv("LIBKMSXX_DISABLE_ATOMIC") == 0) {
                r = drmSetClientCap(m_fd, DRM_CLIENT_CAP_ATOMIC, 1);
                m_has_atomic = r == 0;
        } else {
                m_has_atomic = false;
        }
+#else
+       m_has_atomic = false;
+#endif
 
        uint64_t has_dumb;
        r = drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &has_dumb);
@@ -132,32 +132,9 @@ void Card::restore_modes()
                conn->restore_mode();
 }
 
-template <class T> static void print_obs(const map<uint32_t, DrmObject*>& obmap)
-{
-       for (auto pair : obmap) {
-               auto ob = pair.second;
-               if (dynamic_cast<T*>(ob)) {
-                       ob->print_short();
-                       //ob->print_props();
-               }
-       }
-}
-
-void Card::print_short() const
-{
-       print_obs<Connector>(m_obmap);
-       print_obs<Encoder>(m_obmap);
-       print_obs<Crtc>(m_obmap);
-       print_obs<Plane>(m_obmap);
-}
-
 Property* Card::get_prop(const string& name) const
 {
-       for (auto pair : m_obmap) {
-               auto prop = dynamic_cast<Property*>(pair.second);
-               if (!prop)
-                       continue;
-
+       for (auto prop : m_properties) {
                if (name == prop->name())
                        return prop;
        }
@@ -167,10 +144,8 @@ Property* Card::get_prop(const string& name) const
 
 Connector* Card::get_first_connected_connector() const
 {
-       for(auto pair : m_obmap) {
-               auto c = dynamic_cast<Connector*>(pair.second);
-
-               if (c && c->connected())
+       for(auto c : m_connectors) {
+               if (c->connected())
                        return c;
        }
 
@@ -182,40 +157,7 @@ DrmObject* Card::get_object(uint32_t id) const
        return m_obmap.at(id);
 }
 
-vector<Connector*> Card::get_connectors() const
-{
-       vector<Connector*> v;
-       for(auto pair : m_obmap) {
-               auto p = dynamic_cast<Connector*>(pair.second);
-               if (p)
-                       v.push_back(p);
-       }
-       return v;
-}
-
-vector<Crtc*> Card::get_crtcs() const
-{
-       vector<Crtc*> v;
-       for(auto pair : m_obmap) {
-               auto p = dynamic_cast<Crtc*>(pair.second);
-               if (p)
-                       v.push_back(p);
-       }
-       return v;
-}
-
-vector<Plane*> Card::get_planes() const
-{
-       vector<Plane*> v;
-       for(auto pair : m_obmap) {
-               auto p = dynamic_cast<Plane*>(pair.second);
-               if (p)
-                       v.push_back(p);
-       }
-       return v;
-}
-
-vector<DrmObject*> Card::get_objects() const
+const vector<DrmObject*> Card::get_objects() const
 {
        vector<DrmObject*> v;
        for(auto pair : m_obmap)
@@ -225,12 +167,7 @@ vector<DrmObject*> Card::get_objects() const
 
 Crtc* Card::get_crtc_by_index(uint32_t idx) const
 {
-       for(auto pair : m_obmap) {
-               auto crtc = dynamic_cast<Crtc*>(pair.second);
-               if (crtc && crtc->idx() == idx)
-                       return crtc;
-       }
-       throw invalid_argument(string("Crtc #") + to_string(idx) + " not found");
+       return m_crtcs[idx];
 }
 
 Connector* Card::get_connector(uint32_t id) const { return dynamic_cast<Connector*>(get_object(id)); }