summaryrefslogtreecommitdiff
path: root/nouveau/nouveau_channel.h
blob: 294f7497f3eb2140b07056ac07c105b6e934af88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
 * Copyright 2007 Nouveau Project
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef __NOUVEAU_CHANNEL_H__
#define __NOUVEAU_CHANNEL_H__

struct nouveau_subchannel {
	struct nouveau_grobj *gr;
	unsigned sequence;
};

struct nouveau_channel {
	struct nouveau_device *device;
	int id;

	struct nouveau_pushbuf *pushbuf;

	struct nouveau_grobj *nullobj;
	struct nouveau_grobj *vram;
	struct nouveau_grobj *gart;

	void *user_private;
	void (*hang_notify)(struct nouveau_channel *);
	void (*flush_notify)(struct nouveau_channel *);

	struct nouveau_subchannel subc[8];
	unsigned subc_sequence;
};

int
nouveau_channel_alloc(struct nouveau_device *, uint32_t fb, uint32_t tt,
		      struct nouveau_channel **);

void
nouveau_channel_free(struct nouveau_channel **);

#endif
class="hl pps">"drmP.h" #include "drm_pciids.h" /* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */ static drm_pci_id_list_t tdfx_pciidlist[] = { tdfx_PCI_IDS }; static void tdfx_configure(struct drm_device *dev) { dev->driver->driver_features = DRIVER_USE_MTRR; dev->driver->buf_priv_size = 1; /* No dev_priv */ dev->driver->max_ioctl = 0; dev->driver->name = DRIVER_NAME; dev->driver->desc = DRIVER_DESC; dev->driver->date = DRIVER_DATE; dev->driver->major = DRIVER_MAJOR; dev->driver->minor = DRIVER_MINOR; dev->driver->patchlevel = DRIVER_PATCHLEVEL; } static int tdfx_probe(device_t dev) { return drm_probe(dev, tdfx_pciidlist); } static int tdfx_attach(device_t nbdev) { struct drm_device *dev = device_get_softc(nbdev); bzero(dev, sizeof(struct drm_device)); dev->driver = malloc(sizeof(struct drm_driver_info), M_DRM, M_WAITOK | M_ZERO); tdfx_configure(dev); return drm_attach(nbdev, tdfx_pciidlist); } static int tdfx_detach(device_t nbdev) { struct drm_device *dev = device_get_softc(nbdev); int ret; ret = drm_detach(nbdev); free(dev->driver, M_DRM); return ret; } static device_method_t tdfx_methods[] = { /* Device interface */ DEVMETHOD(device_probe, tdfx_probe), DEVMETHOD(device_attach, tdfx_attach), DEVMETHOD(device_detach, tdfx_detach), { 0, 0 } }; static driver_t tdfx_driver = { "drm", tdfx_methods, sizeof(struct drm_device) }; extern devclass_t drm_devclass; #if __FreeBSD_version >= 700010 DRIVER_MODULE(tdfx, vgapci, tdfx_driver, drm_devclass, 0, 0); #else DRIVER_MODULE(tdfx, pci, tdfx_driver, drm_devclass, 0, 0); #endif MODULE_DEPEND(tdfx, drm, 1, 1, 1);