Module Name: src
Committed By: riastradh
Date: Wed Jul 24 02:47:05 UTC 2013
Modified Files:
src/sys/external/bsd/drm2/dist/include/drm [riastradh-drm2]: drmP.h
Log Message:
Add operations to drmP.h for access to drm_local_map memory or I/O.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1.2.37 -r1.1.1.1.2.38 \
src/sys/external/bsd/drm2/dist/include/drm/drmP.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/include/drm/drmP.h
diff -u src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.37 src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.38
--- src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.37 Wed Jul 24 02:46:49 2013
+++ src/sys/external/bsd/drm2/dist/include/drm/drmP.h Wed Jul 24 02:47:05 2013
@@ -1987,5 +1987,103 @@ static __inline__ bool drm_can_sleep(voi
#endif
}
+#ifdef __NetBSD__
+static inline bool
+DRM_IS_BUS_SPACE(struct drm_local_map *map)
+{
+ switch (map->type) {
+ case _DRM_FRAME_BUFFER:
+ panic("I don't know how to access drm frame buffer memory!");
+
+ case _DRM_REGISTERS:
+ return true;
+
+ case _DRM_SHM:
+ panic("I don't know how to access drm shared memory!");
+
+ case _DRM_AGP:
+ panic("I don't know how to access drm agp memory!");
+
+ case _DRM_SCATTER_GATHER:
+ panic("I don't know how to access drm scatter-gather memory!");
+
+ case _DRM_CONSISTENT:
+ /*
+ * XXX Old drm uses bus space access for this, but
+ * consistent maps don't have bus space handles! They
+ * do, however, have kernel virtual addresses in the
+ * map->handle, so maybe that's right.
+ */
+#if 0
+ return false;
+#endif
+ panic("I don't know how to access drm consistent memory!");
+
+ case _DRM_GEM:
+ panic("I don't know how to access drm gem memory!");
+ }
+}
+
+static inline uint8_t
+DRM_READ8(struct drm_local_map *map, bus_size_t offset)
+{
+ if (DRM_IS_BUS_SPACE(map))
+ return bus_space_read_1(map->lm_data.bus_space.bst,
+ map->lm_data.bus_space.bsh, offset);
+ else
+ return *(volatile uint8_t *)((vaddr_t)map->handle + offset);
+}
+
+static inline uint16_t
+DRM_READ16(struct drm_local_map *map, bus_size_t offset)
+{
+ if (DRM_IS_BUS_SPACE(map))
+ return bus_space_read_2(map->lm_data.bus_space.bst,
+ map->lm_data.bus_space.bsh, offset);
+ else
+ return *(volatile uint16_t *)((vaddr_t)map->handle + offset);
+}
+
+static inline uint32_t
+DRM_READ32(struct drm_local_map *map, bus_size_t offset)
+{
+ if (DRM_IS_BUS_SPACE(map))
+ return bus_space_read_4(map->lm_data.bus_space.bst,
+ map->lm_data.bus_space.bsh, offset);
+ else
+ return *(volatile uint32_t *)((vaddr_t)map->handle + offset);
+}
+
+static inline void
+DRM_WRITE8(struct drm_local_map *map, bus_size_t offset, uint8_t value)
+{
+ if (DRM_IS_BUS_SPACE(map))
+ bus_space_write_1(map->lm_data.bus_space.bst,
+ map->lm_data.bus_space.bsh, offset, value);
+ else
+ *(volatile uint8_t *)((vaddr_t)map->handle + offset) = value;
+}
+
+static inline void
+DRM_WRITE16(struct drm_local_map *map, bus_size_t offset, uint16_t value)
+{
+ if (DRM_IS_BUS_SPACE(map))
+ bus_space_write_2(map->lm_data.bus_space.bst,
+ map->lm_data.bus_space.bsh, offset, value);
+ else
+ *(volatile uint16_t *)((vaddr_t)map->handle + offset) = value;
+}
+
+static inline void
+DRM_WRITE32(struct drm_local_map *map, bus_size_t offset, uint32_t value)
+{
+ if (DRM_IS_BUS_SPACE(map))
+ bus_space_write_4(map->lm_data.bus_space.bst,
+ map->lm_data.bus_space.bsh, offset, value);
+ else
+ *(volatile uint32_t *)((vaddr_t)map->handle + offset) = value;
+}
+#endif /* defined(__NetBSD__) */
+
#endif /* __KERNEL__ */
#endif