16a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul/*
26a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Copyright (C) 2015 The Android Open Source Project
36a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *
46a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Licensed under the Apache License, Version 2.0 (the "License");
56a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * you may not use this file except in compliance with the License.
66a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * You may obtain a copy of the License at
76a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *
86a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *      http://www.apache.org/licenses/LICENSE-2.0
96a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul *
106a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * Unless required by applicable law or agreed to in writing, software
116a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * distributed under the License is distributed on an "AS IS" BASIS,
126a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * See the License for the specific language governing permissions and
146a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul * limitations under the License.
156a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul */
166a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
176a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#ifndef ANDROID_DRM_H_
186a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#define ANDROID_DRM_H_
196a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
20b386f1b1b3716c06831d82493e9ba5a156094701Sean Paul#include "drmcompositor.h"
216a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmconnector.h"
226a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmcrtc.h"
236a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmencoder.h"
24047b9b2484b4e68741df2cb522915f968c013373Sean Paul#include "drmeventlistener.h"
256a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include "drmplane.h"
266a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
276a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#include <stdint.h>
286a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
296a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulnamespace android {
306a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
316a55e9fb8e16c63c2e42bde31814f963205f722dSean Paulclass DrmResources {
326a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul public:
336a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmResources();
34047b9b2484b4e68741df2cb522915f968c013373Sean Paul  ~DrmResources();
356a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
366a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int Init();
376a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
38ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  int fd() const {
39ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner    return fd_.get();
40ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  }
41ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner
42ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  const std::vector<std::unique_ptr<DrmConnector>> &connectors() const {
43ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner    return connectors_;
44ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  }
456a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
46ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  const std::vector<std::unique_ptr<DrmPlane>> &planes() const {
47ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner    return planes_;
48ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  }
496a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
506a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmConnector *GetConnectorForDisplay(int display) const;
516a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmCrtc *GetCrtcForDisplay(int display) const;
526a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  DrmPlane *GetPlane(uint32_t id) const;
53b386f1b1b3716c06831d82493e9ba5a156094701Sean Paul  DrmCompositor *compositor();
54047b9b2484b4e68741df2cb522915f968c013373Sean Paul  DrmEventListener *event_listener();
556a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
566a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int GetPlaneProperty(const DrmPlane &plane, const char *prop_name,
576a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul                       DrmProperty *property);
58877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  int GetCrtcProperty(const DrmCrtc &crtc, const char *prop_name,
59877be974a2d4fc518700be8ffe803a50cb716eadSean Paul                      DrmProperty *property);
606a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int GetConnectorProperty(const DrmConnector &connector, const char *prop_name,
616a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul                           DrmProperty *property);
626a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
636a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  uint32_t next_mode_id();
64877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  int SetDisplayActiveMode(int display, const DrmMode &mode);
656a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int SetDpmsMode(int display, uint64_t mode);
666a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
67573554106db499d323bea12ff00363b1816f8c8aSean Paul  int CreatePropertyBlob(void *data, size_t length, uint32_t *blob_id);
68573554106db499d323bea12ff00363b1816f8c8aSean Paul  int DestroyPropertyBlob(uint32_t blob_id);
69573554106db499d323bea12ff00363b1816f8c8aSean Paul
706a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul private:
716a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int TryEncoderForDisplay(int display, DrmEncoder *enc);
726a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul  int GetProperty(uint32_t obj_id, uint32_t obj_type, const char *prop_name,
736a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul                  DrmProperty *property);
746a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
75877be974a2d4fc518700be8ffe803a50cb716eadSean Paul  int CreateDisplayPipe(DrmConnector *connector);
76877be974a2d4fc518700be8ffe803a50cb716eadSean Paul
77ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  UniqueFd fd_;
78ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  uint32_t mode_id_ = 0;
796a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
80ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  std::vector<std::unique_ptr<DrmConnector>> connectors_;
81ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  std::vector<std::unique_ptr<DrmEncoder>> encoders_;
82ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  std::vector<std::unique_ptr<DrmCrtc>> crtcs_;
83ff30b52303cdbeb9cbfb054e2a12da1135ea49c9Zach Reizner  std::vector<std::unique_ptr<DrmPlane>> planes_;
84b386f1b1b3716c06831d82493e9ba5a156094701Sean Paul  DrmCompositor compositor_;
85047b9b2484b4e68741df2cb522915f968c013373Sean Paul  DrmEventListener event_listener_;
866a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul};
876a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul}
886a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul
896a55e9fb8e16c63c2e42bde31814f963205f722dSean Paul#endif  // ANDROID_DRM_H_
90