#ifndef __NOUVEAU_SOFTWARE_H__
#define __NOUVEAU_SOFTWARE_H__

struct nouveau_software_priv {
	struct nouveau_exec_engine base;
	struct list_head vblank;
};

struct nouveau_software_chan {
	struct list_head flip;
	struct {
		struct list_head list;
		struct nouveau_bo *bo;
		u32 offset;
		u32 value;
		u32 head;
	} vblank;
};

static inline void
nouveau_software_vblank(struct drm_device *dev, int crtc)
{
	struct nouveau_software_priv *psw = nv_engine(dev, NVOBJ_ENGINE_SW);
	struct nouveau_software_chan *pch, *tmp;

	list_for_each_entry_safe(pch, tmp, &psw->vblank, vblank.list) {
		if (pch->vblank.head != crtc)
			continue;

		nouveau_bo_wr32(pch->vblank.bo, pch->vblank.offset,
						pch->vblank.value);
		list_del(&pch->vblank.list);
		drm_vblank_put(dev, crtc);
	}
}

static inline void
nouveau_software_context_new(struct nouveau_software_chan *pch)
{
	INIT_LIST_HEAD(&pch->flip);
}

static inline void
nouveau_software_create(struct nouveau_software_priv *psw)
{
	INIT_LIST_HEAD(&psw->vblank);
}

static inline u16
nouveau_software_class(struct drm_device *dev)
{
	struct drm_nouveau_private *dev_priv = dev->dev_private;
	if (dev_priv->card_type <= NV_04)
		return 0x006e;
	if (dev_priv->card_type <= NV_40)
		return 0x016e;
	if (dev_priv->card_type <= NV_50)
		return 0x506e;
	if (dev_priv->card_type <= NV_E0)
		return 0x906e;
	return 0x0000;
}

int nv04_software_create(struct drm_device *);
int nv50_software_create(struct drm_device *);
int nvc0_software_create(struct drm_device *);
u64 nvc0_software_crtc(struct nouveau_channel *, int crtc);

#endif
