1b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#ifndef __NVKM_DISP_OUTP_DP_H__ 2b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#define __NVKM_DISP_OUTP_DP_H__ 3b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 4b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#include <subdev/bios.h> 5b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#include <subdev/bios/dp.h> 6b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 7b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#include "outp.h" 8b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 9b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsstruct nvkm_output_dp { 10b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nvkm_output base; 11b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 12b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nvbios_dpout info; 13b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs u8 version; 14b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 1579ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs struct nvkm_notify irq; 16bb7ef1ec2e383d80acb9b0523a4692857b34ef1dBen Skeggs bool present; 17bb7ef1ec2e383d80acb9b0523a4692857b34ef1dBen Skeggs u8 dpcd[16]; 1855f083c33feb7231c7574a64cd01b0477715a370Ben Skeggs 1955f083c33feb7231c7574a64cd01b0477715a370Ben Skeggs struct { 2055f083c33feb7231c7574a64cd01b0477715a370Ben Skeggs struct work_struct work; 2155f083c33feb7231c7574a64cd01b0477715a370Ben Skeggs wait_queue_head_t wait; 2255f083c33feb7231c7574a64cd01b0477715a370Ben Skeggs atomic_t done; 2355f083c33feb7231c7574a64cd01b0477715a370Ben Skeggs } lt; 24b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs}; 25b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 26b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#define nvkm_output_dp_create(p,e,c,b,i,d) \ 27b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs nvkm_output_dp_create_((p), (e), (c), (b), (i), sizeof(**d), (void **)d) 28b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#define nvkm_output_dp_destroy(d) ({ \ 29b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nvkm_output_dp *_outp = (d); \ 30b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs _nvkm_output_dp_dtor(nv_object(_outp)); \ 31b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs}) 32b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#define nvkm_output_dp_init(d) ({ \ 33b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nvkm_output_dp *_outp = (d); \ 34b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs _nvkm_output_dp_init(nv_object(_outp)); \ 35b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs}) 36b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#define nvkm_output_dp_fini(d,s) ({ \ 37b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nvkm_output_dp *_outp = (d); \ 38b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs _nvkm_output_dp_fini(nv_object(_outp), (s)); \ 39b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs}) 40b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 41b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsint nvkm_output_dp_create_(struct nouveau_object *, struct nouveau_object *, 42b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nouveau_oclass *, struct dcb_output *, 43b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs int, int, void **); 44b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 45b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsint _nvkm_output_dp_ctor(struct nouveau_object *, struct nouveau_object *, 46b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nouveau_oclass *, void *, u32, 47b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nouveau_object **); 48b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsvoid _nvkm_output_dp_dtor(struct nouveau_object *); 49b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsint _nvkm_output_dp_init(struct nouveau_object *); 50b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsint _nvkm_output_dp_fini(struct nouveau_object *, bool); 51b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 52b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggsstruct nvkm_output_dp_impl { 53b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs struct nvkm_output_impl base; 543b52a1f90639a88b3c76e4d42b60c34dd950cad3Ben Skeggs int (*pattern)(struct nvkm_output_dp *, int); 551ecee1cda3a33029c32721b6f2c61bc3f371e3bdBen Skeggs int (*lnk_pwr)(struct nvkm_output_dp *, int nr); 563b52a1f90639a88b3c76e4d42b60c34dd950cad3Ben Skeggs int (*lnk_ctl)(struct nvkm_output_dp *, int nr, int bw, bool ef); 573b52a1f90639a88b3c76e4d42b60c34dd950cad3Ben Skeggs int (*drv_ctl)(struct nvkm_output_dp *, int ln, int vs, int pe, int pc); 58b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs}; 59b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs 6055f083c33feb7231c7574a64cd01b0477715a370Ben Skeggsint nvkm_output_dp_train(struct nvkm_output *, u32 rate, bool wait); 613b52a1f90639a88b3c76e4d42b60c34dd950cad3Ben Skeggs 62b8407c9e504f43a50ba0de746c5e8958521165aaBen Skeggs#endif 63