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