1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <zircon/compiler.h> 8#include <ddk/driver.h> 9#include <zircon/pixelformat.h> 10 11#if __cplusplus 12 13#include <ddktl/device.h> 14#include <ddktl/protocol/display-controller.h> 15#include <fbl/unique_ptr.h> 16#include <lib/zx/vmo.h> 17 18class SimpleDisplay; 19using DeviceType = ddk::Device<SimpleDisplay, ddk::Unbindable>; 20 21class SimpleDisplay : public DeviceType, 22 public ddk::DisplayControllerProtocol<SimpleDisplay> { 23public: 24 SimpleDisplay(zx_device_t* parent, zx_handle_t vmo, 25 uintptr_t framebuffer, uint64_t framebuffer_size, 26 uint32_t width, uint32_t height, 27 uint32_t stride, zx_pixel_format_t format); 28 ~SimpleDisplay(); 29 30 void DdkUnbind(); 31 void DdkRelease(); 32 zx_status_t Bind(const char* name, fbl::unique_ptr<SimpleDisplay>* controller_ptr); 33 34 void SetDisplayControllerCb(void* cb_ctx, display_controller_cb_t* cb); 35 zx_status_t ImportVmoImage(image_t* image, const zx::vmo& vmo, size_t offset); 36 void ReleaseImage(image_t* image); 37 void CheckConfiguration(const display_config_t** display_config, 38 uint32_t* display_cfg_result, uint32_t** layer_cfg_result, 39 uint32_t display_count); 40 void ApplyConfiguration(const display_config_t** display_config, uint32_t display_count); 41 uint32_t ComputeLinearStride(uint32_t width, zx_pixel_format_t format); 42 zx_status_t AllocateVmo(uint64_t size, zx_handle_t* vmo_out); 43 44private: 45 zx::vmo framebuffer_handle_; 46 uintptr_t framebuffer_; 47 uint64_t framebuffer_size_; 48 zx_koid_t framebuffer_koid_; 49 50 uint32_t width_; 51 uint32_t height_; 52 uint32_t stride_; 53 zx_pixel_format_t format_; 54 55 display_controller_cb_t* cb_; 56 void* cb_ctx_; 57}; 58 59#endif // __cplusplus 60 61__BEGIN_CDECLS 62zx_status_t bind_simple_pci_display(zx_device_t* dev, const char* name, uint32_t bar, 63 uint32_t width, uint32_t height, 64 uint32_t stride, zx_pixel_format_t format); 65 66zx_status_t bind_simple_pci_display_bootloader(zx_device_t* dev, const char* name, uint32_t bar); 67__END_CDECLS 68