189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu/*
289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * Mesa 3-D graphics library
389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * Version:  7.8
489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu *
589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * Copyright (C) 2009-2010 Chia-I Wu <olv@0xlab.org>
689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu *
789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * copy of this software and associated documentation files (the "Software"),
989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * to deal in the Software without restriction, including without limitation
1089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the
1289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * Software is furnished to do so, subject to the following conditions:
1389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu *
1489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * The above copyright notice and this permission notice shall be included
1589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * in all copies or substantial portions of the Software.
1689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu *
17ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * DEALINGS IN THE SOFTWARE.
2489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu */
2589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
2689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu#ifndef _NATIVE_MODESET_H_
2789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu#define _NATIVE_MODESET_H_
2889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
2989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu#include "pipe/p_compiler.h"
3089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
3189a75b763467d83d4d402c91db55548682be14f0Chia-I Wustruct native_display;
3289a75b763467d83d4d402c91db55548682be14f0Chia-I Wustruct native_surface;
3389a75b763467d83d4d402c91db55548682be14f0Chia-I Wustruct native_config;
3489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
3589a75b763467d83d4d402c91db55548682be14f0Chia-I Wustruct native_connector {
3689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   int dummy;
3789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu};
3889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
3989a75b763467d83d4d402c91db55548682be14f0Chia-I Wustruct native_mode {
4089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   const char *desc;
4189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   int width, height;
42662e098b560c6983f5ac320cc5ff7a82ecdc5f8aChia-I Wu   int refresh_rate; /* HZ * 1000 */
4389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu};
4489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
4589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu/**
4689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * Mode setting interface of the native display.  It exposes the mode setting
4789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu * capabilities of the underlying graphics hardware.
4889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu */
4989a75b763467d83d4d402c91db55548682be14f0Chia-I Wustruct native_display_modeset {
5089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   /**
5189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * Get the available physical connectors and the number of CRTCs.
5289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    */
5389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   const struct native_connector **(*get_connectors)(struct native_display *ndpy,
5489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                                                     int *num_connectors,
5589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                                                     int *num_crtcs);
5689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
5789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   /**
5889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * Get the current supported modes of a connector.  The returned modes may
5989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * change every time this function is called and those from previous calls
6089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * might become invalid.
6189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    */
6289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   const struct native_mode **(*get_modes)(struct native_display *ndpy,
6389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                                           const struct native_connector *nconn,
6489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                                           int *num_modes);
6589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
6689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   /**
67f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu    * Create a scan-out surface.  Required unless no config has scanout_bit
68f7730c0740cc8a43c3573dcdbf43e76630d957f6Chia-I Wu    * set.
6989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    */
7089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   struct native_surface *(*create_scanout_surface)(struct native_display *ndpy,
7189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                                                    const struct native_config *nconf,
7289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                                                    uint width, uint height);
7389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
7489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   /**
7589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * Program the CRTC to output the surface to the given connectors with the
7689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * given mode.  When surface is not given, the CRTC is disabled.
7789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    *
7889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * This interface does not export a way to query capabilities of the CRTCs.
7989a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * The native display usually needs to dynamically map the index to a CRTC
8089a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    * that supports the given connectors.
8189a75b763467d83d4d402c91db55548682be14f0Chia-I Wu    */
8289a75b763467d83d4d402c91db55548682be14f0Chia-I Wu   boolean (*program)(struct native_display *ndpy, int crtc_idx,
8389a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                      struct native_surface *nsurf, uint x, uint y,
8489a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                      const struct native_connector **nconns, int num_nconns,
8589a75b763467d83d4d402c91db55548682be14f0Chia-I Wu                      const struct native_mode *nmode);
8689a75b763467d83d4d402c91db55548682be14f0Chia-I Wu};
8789a75b763467d83d4d402c91db55548682be14f0Chia-I Wu
8889a75b763467d83d4d402c91db55548682be14f0Chia-I Wu#endif /* _NATIVE_MODESET_H_ */
89