13863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#ifndef __NOUVEAU_BAR_H__
23863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#define __NOUVEAU_BAR_H__
33863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
43863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#include <core/subdev.h>
53863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#include <core/device.h>
63863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
752225551ddcae9c4df6c48bc3c78833aac5074f4Ben Skeggsstruct nouveau_mem;
83863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggsstruct nouveau_vma;
93863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
103863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggsstruct nouveau_bar {
113863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	struct nouveau_subdev base;
123863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
133863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	int (*alloc)(struct nouveau_bar *, struct nouveau_object *,
143863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		     struct nouveau_mem *, struct nouveau_object **);
153863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
163863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	int (*kmap)(struct nouveau_bar *, struct nouveau_mem *,
173863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		    u32 flags, struct nouveau_vma *);
183863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	int (*umap)(struct nouveau_bar *, struct nouveau_mem *,
193863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		    u32 flags, struct nouveau_vma *);
203863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	void (*unmap)(struct nouveau_bar *, struct nouveau_vma *);
213863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	void (*flush)(struct nouveau_bar *);
22e2a4e78cdccc4bb2d3729981313da237ad4ad43fAlexandre Courbot
23e2a4e78cdccc4bb2d3729981313da237ad4ad43fAlexandre Courbot	/* whether the BAR supports to be ioremapped WC or should be uncached */
24e2a4e78cdccc4bb2d3729981313da237ad4ad43fAlexandre Courbot	bool iomap_uncached;
253863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs};
263863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
273863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggsstatic inline struct nouveau_bar *
283863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggsnouveau_bar(void *obj)
293863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs{
303863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs	return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_BAR];
313863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs}
323863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
333863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggsextern struct nouveau_oclass nv50_bar_oclass;
343863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggsextern struct nouveau_oclass nvc0_bar_oclass;
35ec1afbf4e1025f74e636ada2e7da3963c8da4c06Alexandre Courbotextern struct nouveau_oclass gk20a_bar_oclass;
363863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs
373863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#endif
38