nv50_display.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * Copyright (C) 2008 Maarten Maathuis.
  3. * All Rights Reserved.
  4. *
  5. * Permission is hereby granted, free of charge, to any person obtaining
  6. * a copy of this software and associated documentation files (the
  7. * "Software"), to deal in the Software without restriction, including
  8. * without limitation the rights to use, copy, modify, merge, publish,
  9. * distribute, sublicense, and/or sell copies of the Software, and to
  10. * permit persons to whom the Software is furnished to do so, subject to
  11. * the following conditions:
  12. *
  13. * The above copyright notice and this permission notice (including the
  14. * next paragraph) shall be included in all copies or substantial
  15. * portions of the Software.
  16. *
  17. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  18. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  20. * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
  21. * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  22. * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  23. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  24. *
  25. */
  26. #ifndef __NV50_DISPLAY_H__
  27. #define __NV50_DISPLAY_H__
  28. #include "nouveau_display.h"
  29. #include "nouveau_crtc.h"
  30. #include "nouveau_reg.h"
  31. #include "nv50_evo.h"
  32. struct nv50_display_crtc {
  33. struct nouveau_channel *sync;
  34. struct {
  35. struct nouveau_bo *bo;
  36. u32 offset;
  37. u16 value;
  38. } sem;
  39. };
  40. struct nv50_display {
  41. struct nouveau_channel *master;
  42. struct nouveau_gpuobj *ramin;
  43. u32 dmao;
  44. u32 hash;
  45. struct nv50_display_crtc crtc[2];
  46. struct tasklet_struct tasklet;
  47. struct {
  48. struct dcb_output *dcb;
  49. u16 script;
  50. u32 pclk;
  51. } irq;
  52. };
  53. static inline struct nv50_display *
  54. nv50_display(struct drm_device *dev)
  55. {
  56. return nouveau_display(dev)->priv;
  57. }
  58. int nv50_display_early_init(struct drm_device *dev);
  59. void nv50_display_late_takedown(struct drm_device *dev);
  60. int nv50_display_create(struct drm_device *dev);
  61. int nv50_display_init(struct drm_device *dev);
  62. void nv50_display_fini(struct drm_device *dev);
  63. void nv50_display_destroy(struct drm_device *dev);
  64. void nv50_display_intr(struct drm_device *);
  65. int nv50_crtc_blank(struct nouveau_crtc *, bool blank);
  66. int nv50_crtc_set_clock(struct drm_device *, int head, int pclk);
  67. u32 nv50_display_active_crtcs(struct drm_device *);
  68. int nv50_display_sync(struct drm_device *);
  69. int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *,
  70. struct nouveau_channel *chan);
  71. void nv50_display_flip_stop(struct drm_crtc *);
  72. int nv50_evo_create(struct drm_device *dev);
  73. void nv50_evo_destroy(struct drm_device *dev);
  74. int nv50_evo_init(struct drm_device *dev);
  75. void nv50_evo_fini(struct drm_device *dev);
  76. void nv50_evo_dmaobj_init(struct nouveau_gpuobj *, u32 memtype, u64 base,
  77. u64 size);
  78. int nv50_evo_dmaobj_new(struct nouveau_channel *, u32 handle, u32 memtype,
  79. u64 base, u64 size, struct nouveau_gpuobj **);
  80. int nvd0_display_create(struct drm_device *);
  81. void nvd0_display_destroy(struct drm_device *);
  82. int nvd0_display_init(struct drm_device *);
  83. void nvd0_display_fini(struct drm_device *);
  84. void nvd0_display_intr(struct drm_device *);
  85. void nvd0_display_flip_stop(struct drm_crtc *);
  86. int nvd0_display_flip_next(struct drm_crtc *, struct drm_framebuffer *,
  87. struct nouveau_channel *, u32 swap_interval);
  88. struct nouveau_bo *nv50_display_crtc_sema(struct drm_device *, int head);
  89. struct nouveau_bo *nvd0_display_crtc_sema(struct drm_device *, int head);
  90. #endif /* __NV50_DISPLAY_H__ */