nouveau: Rename winsys file
[mesa.git] / src / gallium / winsys / nouveau / drm / nouveau_drm_winsys.c
1 #include "pipe/p_context.h"
2 #include "pipe/p_state.h"
3 #include "util/u_format.h"
4 #include "util/u_memory.h"
5 #include "util/u_inlines.h"
6
7 #include "nouveau_drm_winsys.h"
8
9 #include "nouveau_drmif.h"
10 #include "nouveau_channel.h"
11 #include "nouveau_bo.h"
12
13 #include "nouveau/nouveau_winsys.h"
14 #include "nouveau/nouveau_screen.h"
15
16 static void
17 nouveau_drm_destroy_winsys(struct pipe_winsys *s)
18 {
19 struct nouveau_winsys *nv_winsys = nouveau_winsys(s);
20 struct nouveau_screen *nv_screen= nouveau_screen(nv_winsys->pscreen);
21 nouveau_device_close(&nv_screen->device);
22 FREE(nv_winsys);
23 }
24
25 static struct pipe_screen *
26 nouveau_drm_create_screen(struct drm_api *api, int fd)
27 {
28 struct nouveau_winsys *nvws;
29 struct pipe_winsys *ws;
30 struct nouveau_device *dev = NULL;
31 struct pipe_screen *(*init)(struct pipe_winsys *,
32 struct nouveau_device *);
33 int ret;
34
35 ret = nouveau_device_open_existing(&dev, 0, fd, 0);
36 if (ret)
37 return NULL;
38
39 switch (dev->chipset & 0xf0) {
40 case 0x30:
41 case 0x40:
42 case 0x60:
43 init = nvfx_screen_create;
44 break;
45 case 0x50:
46 case 0x80:
47 case 0x90:
48 case 0xa0:
49 init = nv50_screen_create;
50 break;
51 default:
52 debug_printf("%s: unknown chipset nv%02x\n", __func__,
53 dev->chipset);
54 return NULL;
55 }
56
57 nvws = CALLOC_STRUCT(nouveau_winsys);
58 if (!nvws) {
59 nouveau_device_close(&dev);
60 return NULL;
61 }
62 ws = &nvws->base;
63 ws->destroy = nouveau_drm_destroy_winsys;
64
65 nvws->pscreen = init(ws, dev);
66 if (!nvws->pscreen) {
67 ws->destroy(ws);
68 return NULL;
69 }
70
71 return nvws->pscreen;
72 }
73
74 static struct drm_api nouveau_drm_api_hooks = {
75 .name = "nouveau",
76 .driver_name = "nouveau",
77 .create_screen = nouveau_drm_create_screen,
78 .destroy = NULL,
79 };
80
81 struct drm_api *
82 drm_api_create() {
83 return &nouveau_drm_api_hooks;
84 }
85