[prev in list] [next in list] [prev in thread] [next in thread] 

List:       dri-devel
Subject:    [Patch VIA UniChrome DRM][2/3 Ver2] Add interfaces for communication
From:       <BruceChang () via ! com ! tw>
Date:       2009-10-30 6:11:01
Message-ID: 62692B81D079DA49BA9287A3CDF6B41C9FD7D6 () exchtp12 ! taipei ! via ! com ! tw
[Download RAW message or body]

Hello Sirs:
    This patch is to add the interface to communicate with V4L and DDMPEG. 

Signed-off-by Bruce C. Chang <brucechang@via.com.tw>

diff -ruN old/drivers/gpu/drm/via/via_dma.c new/drivers/gpu/drm/via/via_dma.c
--- old/drivers/gpu/drm/via/via_dma.c	2009-10-22 10:42:10.000000000 +0800
+++ new/drivers/gpu/drm/via/via_dma.c	2009-10-22 12:48:26.000000000 +0800
@@ -824,6 +824,7 @@
 	DRM_IOCTL_DEF(DRM_VIA_FB_INIT, via_fb_init, DRM_AUTH|DRM_MASTER),
 	DRM_IOCTL_DEF(DRM_VIA_MAP_INIT, via_map_init, DRM_AUTH|DRM_MASTER),
 	DRM_IOCTL_DEF(DRM_VIA_DEC_FUTEX, via_decoder_futex, DRM_AUTH),
+	DRM_IOCTL_DEF(DRM_VIA_GET_INFO, via_get_drm_info, DRM_AUTH),
 	DRM_IOCTL_DEF(DRM_VIA_DMA_INIT, via_dma_init, DRM_AUTH),
 	DRM_IOCTL_DEF(DRM_VIA_CMDBUFFER, via_cmdbuffer, DRM_AUTH),
 	DRM_IOCTL_DEF(DRM_VIA_FLUSH, via_flush_ioctl, DRM_AUTH),
diff -ruN old/drivers/gpu/drm/via/via_drv.h new/drivers/gpu/drm/via/via_drv.h
--- old/drivers/gpu/drm/via/via_drv.h	2009-10-22 10:42:10.000000000 +0800
+++ new/drivers/gpu/drm/via/via_drv.h	2009-10-22 12:48:26.000000000 +0800
@@ -121,6 +121,8 @@
 extern int via_agp_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern int via_map_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern int via_decoder_futex(struct drm_device *dev, void *data, struct drm_file *file_priv);
+extern int via_get_drm_info(struct drm_device *dev, void *data,
+	struct drm_file *file_priv);
 extern int via_wait_irq(struct drm_device *dev, void *data, struct drm_file *file_priv);
 extern int via_dma_blit_sync( struct drm_device *dev, void *data, struct drm_file *file_priv );
 extern int via_dma_blit( struct drm_device *dev, void *data, struct drm_file *file_priv );
diff -ruN old/drivers/gpu/drm/via/via_map.c new/drivers/gpu/drm/via/via_map.c
--- old/drivers/gpu/drm/via/via_map.c	2009-10-22 10:42:10.000000000 +0800
+++ new/drivers/gpu/drm/via/via_map.c	2009-10-22 12:48:26.000000000 +0800
@@ -143,3 +143,21 @@
 
 	return 0;
 }
+
+/* This function is for via another video decoder driver to get information */
+int via_get_drm_info(struct drm_device *dev, void *data,
+	struct drm_file *file_priv)
+{
+	drm_via_private_t *dev_priv = (drm_via_private_t *)dev->dev_private;
+	struct drm_via_info *info = data;
+
+	if (!dev_priv->initialize || !dev->agp_buffer_map)
+		return -EINVAL;
+
+	info->RegSize = dev_priv->mmio->size;
+	info->AgpSize = dev->agp_buffer_map->size;
+	info->RegHandle = dev_priv->mmio->offset;
+	info->AgpHandle = dev->agp_buffer_map->offset;
+
+	return 0;
+}
diff -ruN old/drivers/gpu/drm/via/via_mm.c new/drivers/gpu/drm/via/via_mm.c
--- old/drivers/gpu/drm/via/via_mm.c	2009-10-22 10:42:10.000000000 +0800
+++ new/drivers/gpu/drm/via/via_mm.c	2009-10-22 12:48:26.000000000 +0800
@@ -57,6 +57,8 @@
 	DRM_DEBUG("offset = %u, size = %u\n", agp->offset, agp->size);
 	return 0;
 }
+static void *global_dev;
+static void *global_file_priv;
 
 int via_fb_init(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
@@ -79,6 +81,8 @@
 
 	mutex_unlock(&dev->struct_mutex);
 	DRM_DEBUG("offset = %u, size = %u\n", fb->offset, fb->size);
+	global_dev = dev;
+	global_file_priv = file_priv;
 
 	return 0;
 
@@ -291,3 +295,28 @@
 	mutex_unlock(&dev->struct_mutex);
 	return;
 }
+
+/* These two function is exported for via V4L module communication */
+static int via_fb_alloc(drm_via_mem_t *mem)
+{
+	struct drm_device *dev = global_dev;
+	struct drm_file *file_priv = global_file_priv;
+
+	if (dev && file_priv)
+		return via_mem_alloc(dev, mem, file_priv);
+	else
+		return -EINVAL;
+}
+EXPORT_SYMBOL(via_fb_alloc);
+
+static int via_fb_free(drm_via_mem_t *mem)
+{
+	struct drm_device *dev = global_dev;
+	struct drm_file *file_priv = global_file_priv;
+
+	if (dev && file_priv)
+		return via_mem_free(dev, mem, file_priv);
+	else
+		return -EINVAL;
+}
+EXPORT_SYMBOL(via_fb_free);
diff -ruN old/include/drm/via_drm.h new/include/drm/via_drm.h
--- old/include/drm/via_drm.h	2009-10-22 10:42:10.000000000 +0800
+++ new/include/drm/via_drm.h	2009-10-22 12:52:51.000000000 +0800
@@ -53,6 +53,12 @@
 #define VIA_LOG_MIN_TEX_REGION_SIZE 16
 #endif
 
+struct drm_via_info {
+	unsigned long AgpHandle;
+	unsigned long AgpSize;
+	unsigned long RegHandle;
+	unsigned long RegSize;
+} ;
 #define VIA_UPLOAD_TEX0IMAGE  0x1	/* handled clientside */
 #define VIA_UPLOAD_TEX1IMAGE  0x2	/* handled clientside */
 #define VIA_UPLOAD_CTX        0x4
@@ -69,7 +75,7 @@
 #define DRM_VIA_FB_INIT	        0x03
 #define DRM_VIA_MAP_INIT	0x04
 #define DRM_VIA_DEC_FUTEX       0x05
-#define NOT_USED
+#define DRM_VIA_GET_INFO    0x06
 #define DRM_VIA_DMA_INIT	0x07
 #define DRM_VIA_CMDBUFFER	0x08
 #define DRM_VIA_FLUSH	        0x09
@@ -86,6 +92,8 @@
 #define DRM_IOCTL_VIA_FB_INIT	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_FB_INIT, drm_via_fb_t)
 #define DRM_IOCTL_VIA_MAP_INIT	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_MAP_INIT, drm_via_init_t)
 #define DRM_IOCTL_VIA_DEC_FUTEX   DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_DEC_FUTEX, drm_via_futex_t)
+#define DRM_IOCTL_VIA_GET_INFO    DRM_IOR(DRM_COMMAND_BASE + \
+					DRM_VIA_GET_INFO, struct drm_via_info)
 #define DRM_IOCTL_VIA_DMA_INIT	  DRM_IOWR(DRM_COMMAND_BASE + DRM_VIA_DMA_INIT, drm_via_dma_init_t)
 #define DRM_IOCTL_VIA_CMDBUFFER	  DRM_IOW( DRM_COMMAND_BASE + DRM_VIA_CMDBUFFER, drm_via_cmdbuffer_t)
 #define DRM_IOCTL_VIA_FLUSH	  DRM_IO(  DRM_COMMAND_BASE + DRM_VIA_FLUSH)

Thanks and Best Regards 
=================================================
Bruce C. Chang(張祖明)
VIA Technologies, Inc. 
Address: 1F, 531, Chung-Cheng Road, Hsin-Tien, 231 Taipei
Tel: +886-2-22185452 Ext 7323
Mobile: +886-968343824
Fax: +886-2-22186282
Skype: Bruce.C.Chang
Email: BruceChang@via.com.tw
------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic