xserver-xorg-video-openchrome: Changes to 'upstream-unstable'
ChangeLog | 63 +++++++++++++
src/openchrome.man | 13 ++
src/via_accel.c | 34 +++++--
src/via_bandwidth.c | 88 +++++++++++++-----
src/via_crtc.c | 11 +-
src/via_cursor.c | 56 +++++++++--
src/via_dri.c | 5 +
src/via_driver.c | 148 +++++++++++++++++++++++--------
src/via_driver.h | 3
src/via_id.c | 4
src/via_mode.h | 88 +++++++++---------
src/via_panel.c | 83 +++++++++++------
src/via_video.c | 248 ++++++++++++++++++----------------------------------
src/via_video.h | 6 +
14 files changed, 531 insertions(+), 319 deletions(-)
New commits:
commit 86597ffa35e37f87516090bb62065cccc38134ad
Author: gang65 <gang65@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Wed Apr 21 21:40:28 2010 +0000
Replace RegionsEqual with REGION_EQUAL and use
the xf86XVFillKeyHelperDrawable instead of xf86XVFillKeyHelper
git-svn-id: http://svn.openchrome.org/svn/trunk@842 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/ChangeLog b/ChangeLog
index 4fd4601..a676752 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-04-21 Bartosz Kosiorek <gang65@poczta.onet.pl>
+
+ Replace RegionsEqual with REGION_EQUAL and use
+ the xf86XVFillKeyHelperDrawable instead of xf86XVFillKeyHelper
+
+ * src/via_video.c: (viaReputImage), (viaPutImage):
+
2010-03-07 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix segfaults with EXA and XV (Ticket #359)
diff --git a/src/via_video.c b/src/via_video.c
index 2510949..5dac4ec 100644
--- a/src/via_video.c
+++ b/src/via_video.c
@@ -685,34 +685,6 @@ viaInitVideo(ScreenPtr pScreen)
}
}
-static Bool
-RegionsEqual(RegionPtr A, RegionPtr B)
-{
- int *dataA, *dataB;
- int num;
-
- num = REGION_NUM_RECTS(A);
- if (num != REGION_NUM_RECTS(B))
- return FALSE;
-
- if ((A->extents.x1 != B->extents.x1) ||
- (A->extents.x2 != B->extents.x2) ||
- (A->extents.y1 != B->extents.y1) || (A->extents.y2 != B->extents.y2))
- return FALSE;
-
- dataA = (int *)REGION_RECTS(A);
- dataB = (int *)REGION_RECTS(B);
-
- while (num--) {
- if ((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
- return FALSE;
- dataA += 2;
- dataB += 2;
- }
-
- return TRUE;
-}
-
/*
* This one gets called, for example, on panning.
@@ -729,7 +701,7 @@ viaReputImage(ScrnInfoPtr pScrn,
viaPortPrivPtr pPriv = (viaPortPrivPtr) data;
VIAPtr pVia = VIAPTR(pScrn);
- if (!RegionsEqual(&pPriv->clip, clipBoxes)) {
+ if (!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
if (pPriv->autoPaint) {
if (pDraw->type == DRAWABLE_WINDOW) {
@@ -1392,7 +1364,7 @@ viaPutImage(ScrnInfoPtr pScrn,
&& (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h)
&& (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO)
&& (pVia->VideoStatus & VIDEO_SWOV_ON) &&
- RegionsEqual(&pPriv->clip, clipBoxes)) {
+ REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
viaXvError(pScrn, pPriv, xve_none);
return Success;
}
@@ -1410,17 +1382,12 @@ viaPutImage(ScrnInfoPtr pScrn,
pVia->VideoStatus |= VIDEO_SWOV_ON;
/* BitBlt: Draw the colorkey rectangle */
- if (!RegionsEqual(&pPriv->clip, clipBoxes)) {
+ if (!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
if (pPriv->autoPaint) {
if (pDraw->type == DRAWABLE_WINDOW) {
- /* TODO Replace xf86XVFillKeyHelper with xf86XVFillKeyHelperDrawable
- Currently resizing problem exists in VLC Media Player
- Example of implementation:
xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
DamageDamageRegion(pDraw, clipBoxes);
- */
- xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
} else {
xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
}
commit d7c3589310fd086adc385e7c61b5da219eb5d3ad
Author: gang65 <gang65@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Wed Mar 17 21:39:05 2010 +0000
Fix build on old kernels
git-svn-id: http://svn.openchrome.org/svn/trunk@841 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/src/via_drm.h b/src/via_drm.h
index 182f879..9d85a1e 100644
--- a/src/via_drm.h
+++ b/src/via_drm.h
@@ -16,7 +16,7 @@
* 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 NON-INFRINGEMENT. IN NO EVENT SHALL
- * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * THE AUTHOR(S) OR COPYRIGHT HOLDER(S) 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.
@@ -24,8 +24,6 @@
#ifndef _VIA_DRM_H_
#define _VIA_DRM_H_
-#include "drm.h"
-
/* WARNING: These defines must be the same as what the Xserver uses.
* if you change them, you must change the defines in the Xserver.
*/
@@ -33,14 +31,16 @@
#ifndef _VIA_DEFINES_
#define _VIA_DEFINES_
+#if !defined(__KERNEL__) && !defined(_KERNEL)
#include "via_drmclient.h"
+#endif
-#define VIA_NR_SAREA_CLIPRECTS 8
+#define VIA_NR_SAREA_CLIPRECTS 8
#define VIA_NR_XVMC_PORTS 10
#define VIA_NR_XVMC_LOCKS 5
#define VIA_MAX_CACHELINE_SIZE 64
#define XVMCLOCKPTR(saPriv,lockNo) \
- ((__volatile__ struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
+ ((volatile drm_hw_lock_t *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
(VIA_MAX_CACHELINE_SIZE - 1)) & \
~(VIA_MAX_CACHELINE_SIZE - 1)) + \
VIA_MAX_CACHELINE_SIZE*(lockNo)))
@@ -107,26 +107,27 @@
#define VIA_BACK 0x2
#define VIA_DEPTH 0x4
#define VIA_STENCIL 0x8
+
#define VIA_MEM_VIDEO 0 /* matches drm constant */
#define VIA_MEM_AGP 1 /* matches drm constant */
-#define VIA_MEM_SYSTEM 2
+#define VIA_MEM_SYSTEM 2
#define VIA_MEM_MIXED 3
#define VIA_MEM_UNKNOWN 4
typedef struct {
- __u32 offset;
- __u32 size;
+ uint32_t offset;
+ uint32_t size;
} drm_via_agp_t;
typedef struct {
- __u32 offset;
- __u32 size;
+ uint32_t offset;
+ uint32_t size;
} drm_via_fb_t;
typedef struct {
- __u32 context;
- __u32 type;
- __u32 size;
+ uint32_t context;
+ uint32_t type;
+ uint32_t size;
unsigned long index;
unsigned long offset;
} drm_via_mem_t;
@@ -148,16 +149,16 @@ typedef struct _drm_via_futex {
VIA_FUTEX_WAIT = 0x00,
VIA_FUTEX_WAKE = 0X01
} func;
- __u32 ms;
- __u32 lock;
- __u32 val;
+ uint32_t ms;
+ uint32_t lock;
+ uint32_t val;
} drm_via_futex_t;
typedef struct _drm_via_dma_init {
enum {
VIA_INIT_DMA = 0x01,
VIA_CLEANUP_DMA = 0x02,
- VIA_DMA_INITIALIZED = 0x03
+ VIA_DMA_INITIALIZED = 0x03
} func;
unsigned long offset;
@@ -166,7 +167,7 @@ typedef struct _drm_via_dma_init {
} drm_via_dma_init_t;
typedef struct _drm_via_cmdbuffer {
- char *buf;
+ char __user *buf;
unsigned long size;
} drm_via_cmdbuffer_t;
@@ -182,7 +183,7 @@ typedef struct _drm_via_tex_region {
typedef struct _drm_via_sarea {
unsigned int dirty;
unsigned int nbox;
- struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS];
+ drm_clip_rect_t boxes[VIA_NR_SAREA_CLIPRECTS];
drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1];
int texAge; /* last time texture was uploaded */
int ctxOwner; /* last context to upload state */
@@ -198,11 +199,12 @@ typedef struct _drm_via_sarea {
unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS];
unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS];
- unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */
+ unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */
/* Used by the 3d driver only at this point, for pageflipping:
*/
- unsigned int pfCurrentOffset;
+
+ unsigned int pfCurrentOffset;
} drm_via_sarea_t;
typedef struct _drm_via_cmdbuf_size {
@@ -211,7 +213,7 @@ typedef struct _drm_via_cmdbuf_size {
VIA_CMDBUF_LAG = 0x02
} func;
int wait;
- __u32 size;
+ uint32_t size;
} drm_via_cmdbuf_size_t;
typedef enum {
@@ -223,21 +225,19 @@ typedef enum {
#define VIA_IRQ_FLAGS_MASK 0xF0000000
-enum drm_via_irqs {
- drm_via_irq_hqv0 = 0,
- drm_via_irq_hqv1,
- drm_via_irq_dma0_dd,
- drm_via_irq_dma0_td,
- drm_via_irq_dma1_dd,
- drm_via_irq_dma1_td,
- drm_via_irq_num
-};
+enum drm_via_irqs{drm_via_irq_hqv0 = 0,
+ drm_via_irq_hqv1,
+ drm_via_irq_dma0_dd,
+ drm_via_irq_dma0_td,
+ drm_via_irq_dma1_dd,
+ drm_via_irq_dma1_td,
+ drm_via_irq_num};
-struct drm_via_wait_irq_request {
+struct drm_via_wait_irq_request{
unsigned irq;
via_irq_seq_type_t type;
- __u32 sequence;
- __u32 signal;
+ uint32_t sequence;
+ uint32_t signal;
};
typedef union drm_via_irqwait {
@@ -245,31 +245,26 @@ typedef union drm_via_irqwait {
struct drm_wait_vblank_reply reply;
} drm_via_irqwait_t;
-typedef struct drm_via_blitsync {
- __u32 sync_handle;
+typedef struct drm_via_blitsync {
+ uint32_t sync_handle;
unsigned engine;
} drm_via_blitsync_t;
-/* - * Below,"flags" is currently unused but will be used for possible future
- * extensions like kernel space bounce buffers for bad alignments and
- * blit engine busy-wait polling for better latency in the absence of
- * interrupts.
- */
-
typedef struct drm_via_dmablit {
- __u32 num_lines;
- __u32 line_length;
+ uint32_t num_lines;
+ uint32_t line_length;
- __u32 fb_addr;
- __u32 fb_stride;
+ uint32_t fb_addr;
+ uint32_t fb_stride;
- unsigned char *mem_addr;
- __u32 mem_stride;
+ unsigned char *mem_addr;
+ uint32_t mem_stride;
+
+ int bounce_buffer;
+ int to_fb;
- __u32 flags;
- int to_fb;
-
- drm_via_blitsync_t sync;
+ drm_via_blitsync_t sync;
} drm_via_dmablit_t;
+
#endif /* _VIA_DRM_H_ */
commit 2c0285fed8103c5fb84929999b11bf518989b6dd
Author: gang65 <gang65@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Sun Mar 7 20:34:29 2010 +0000
Fix segfaults with EXA and XV (Ticket #359)
Tested on K8M890 and VN800
git-svn-id: http://svn.openchrome.org/svn/trunk@840 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/ChangeLog b/ChangeLog
index d99fd71..4fd4601 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-03-07 Bartosz Kosiorek <gang65@poczta.onet.pl>
+
+ Fix segfaults with EXA and XV (Ticket #359)
+ Tested on K8M890 and VN800
+
+ * src/via_video.c: (viaReputImage), (viaPutImage):
+
2010-02-10 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix bug with suspend and VT switch on VX800 and 64bit systems
diff --git a/src/via_video.c b/src/via_video.c
index 94ae300..2510949 100644
--- a/src/via_video.c
+++ b/src/via_video.c
@@ -713,105 +713,6 @@ RegionsEqual(RegionPtr A, RegionPtr B)
return TRUE;
}
-static void
-viaVideoFillPixmap(ScrnInfoPtr pScrn,
- char *base,
- unsigned long pitch,
- int depth,
- int x, int y, int w, int h,
- unsigned long color)
-{
- int i;
-
- ErrorF("pitch %lu, depth %d, x %d, y %d, w %d, h %d, color 0x%08lx\n",
- pitch, depth, x, y, w, h, color);
-
- depth = (depth + 7) >> 3;
-
- base += y*pitch + x*depth;
-
- switch(depth) {
- case 4:
- while(h--) {
- register CARD32 *p = (CARD32 *)base;
- for (i=0; i<w; ++i) {
- *p++ = color;
- }
- base += pitch;
- }
- break;
- case 2: {
- register CARD16 col = color & 0x0000FFFF;
- while(h--) {
- register CARD16 *p = (CARD16 *)base;
- for (i=0; i<w; ++i) {
- *p++ = col;
- }
- base += pitch;
- }
- break;
- }
- case 1: {
- register CARD8 col = color & 0xFF;
- while(h--) {
- register CARD8 *p = (CARD8 *)base;
- for (i=0; i<w; ++i) {
- *p++ = col;
- }
- base += pitch;
- }
- break;
- }
- default:
- break;
- }
-}
-
-
-
-static int
-viaPaintColorkey(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, RegionPtr clipBoxes,
- DrawablePtr pDraw)
-{
-
- if (pDraw->type == DRAWABLE_WINDOW) {
-
- VIAPtr pVia = VIAPTR(pScrn);
- PixmapPtr pPix = (pScrn->pScreen->GetWindowPixmap)((WindowPtr) pDraw);
- unsigned long pitch = pPix->devKind;
- long offset = (long) pPix->devPrivate.ptr - (long) pVia->FBBase;
- int x,y;
- BoxPtr pBox;
- int nBox;
-
- REGION_TRANSLATE(pScrn->pScreen, clipBoxes, - pPix->screen_x,
- - pPix->screen_y);
-
- nBox = REGION_NUM_RECTS(clipBoxes);
- pBox = REGION_RECTS(clipBoxes);
-
- while(nBox--) {
- if (pVia->NoAccel || offset < 0 ||
- offset > pScrn->videoRam*1024) {
- viaVideoFillPixmap(pScrn, pPix->devPrivate.ptr, pitch,
- pDraw->bitsPerPixel, pBox->x1, pBox->y1,
- pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
- pPriv->colorKey);
- } else {
- viaAccelFillPixmap(pScrn, offset, pitch,
- pDraw->bitsPerPixel, pBox->x1, pBox->y1,
- pBox->x2 - pBox->x1, pBox->y2 - pBox->y1,
- pPriv->colorKey);
- }
- pBox++;
- }
-
- DamageDamageRegion(pPix, clipBoxes);
- }
-
- return 0;
-}
-
/*
* This one gets called, for example, on panning.
@@ -832,10 +733,15 @@ viaReputImage(ScrnInfoPtr pScrn,
REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
if (pPriv->autoPaint) {
if (pDraw->type == DRAWABLE_WINDOW) {
- viaPaintColorkey(pScrn, pPriv, clipBoxes, pDraw);
+ /* TODO Replace xf86XVFillKeyHelper with xf86XVFillKeyHelperDrawable
+ Currently resizing problem exist in VLC Media Player
+ Example of implementation:
+ xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
+ DamageDamageRegion(pDraw, clipBoxes); */
+
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
} else {
- xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey,
- clipBoxes);
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
}
}
}
@@ -1347,7 +1253,7 @@ viaPutImage(ScrnInfoPtr pScrn,
unsigned long retCode;
# ifdef XV_DEBUG
- ErrorF(" via_video.c : viaPutImage : called\n");
+ ErrorF(" via_video.c : viaPutImage : called, Screen[%d]\n", pScrn->scrnIndex);
ErrorF(" via_video.c : FourCC=0x%x width=%d height=%d sync=%d\n", id,
width, height, sync);
ErrorF
@@ -1456,12 +1362,11 @@ viaPutImage(ScrnInfoPtr pScrn,
lpUpdateOverlay->dwFlags = DDOVER_KEYDEST;
- if (pScrn->bitsPerPixel == 8)
- lpUpdateOverlay->dwColorSpaceLowValue =
- pPriv->colorKey & 0xff;
- else
- lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey;
-
+ if (pScrn->bitsPerPixel == 8) {
+ lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff;
+ } else {
+ lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey;
+ }
/* If use extend FIFO mode */
if (pScrn->currentMode->HDisplay > 1024) {
dwUseExtendedFIFO = 1;
@@ -1509,12 +1414,19 @@ viaPutImage(ScrnInfoPtr pScrn,
REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
if (pPriv->autoPaint) {
if (pDraw->type == DRAWABLE_WINDOW) {
- viaPaintColorkey(pScrn, pPriv, clipBoxes, pDraw);
+ /* TODO Replace xf86XVFillKeyHelper with xf86XVFillKeyHelperDrawable
+ Currently resizing problem exists in VLC Media Player
+ Example of implementation:
+ xf86XVFillKeyHelperDrawable(pDraw, pPriv->colorKey, clipBoxes);
+ DamageDamageRegion(pDraw, clipBoxes);
+ */
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
} else {
- xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey,
- clipBoxes);
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
}
}
+ } else {
+ DBG_DD(ErrorF(" via_video.c : // No need to draw Colorkey!! \n"));
}
/*
* Update video overlay
commit cca48c41a0a7feea7affc2da7492af1c232d1dda
Author: gang65 <gang65@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Fri Feb 12 16:37:44 2010 +0000
Synchronize via_drm.h with drm-2.4.17
git-svn-id: http://svn.openchrome.org/svn/trunk@839 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/src/via_drm.h b/src/via_drm.h
index 9d85a1e..182f879 100644
--- a/src/via_drm.h
+++ b/src/via_drm.h
@@ -16,7 +16,7 @@
* 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 NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS 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.
@@ -24,6 +24,8 @@
#ifndef _VIA_DRM_H_
#define _VIA_DRM_H_
+#include "drm.h"
+
/* WARNING: These defines must be the same as what the Xserver uses.
* if you change them, you must change the defines in the Xserver.
*/
@@ -31,16 +33,14 @@
#ifndef _VIA_DEFINES_
#define _VIA_DEFINES_
-#if !defined(__KERNEL__) && !defined(_KERNEL)
#include "via_drmclient.h"
-#endif
-#define VIA_NR_SAREA_CLIPRECTS 8
+#define VIA_NR_SAREA_CLIPRECTS 8
#define VIA_NR_XVMC_PORTS 10
#define VIA_NR_XVMC_LOCKS 5
#define VIA_MAX_CACHELINE_SIZE 64
#define XVMCLOCKPTR(saPriv,lockNo) \
- ((volatile drm_hw_lock_t *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
+ ((__volatile__ struct drm_hw_lock *)(((((unsigned long) (saPriv)->XvMCLockArea) + \
(VIA_MAX_CACHELINE_SIZE - 1)) & \
~(VIA_MAX_CACHELINE_SIZE - 1)) + \
VIA_MAX_CACHELINE_SIZE*(lockNo)))
@@ -107,27 +107,26 @@
#define VIA_BACK 0x2
#define VIA_DEPTH 0x4
#define VIA_STENCIL 0x8
-
#define VIA_MEM_VIDEO 0 /* matches drm constant */
#define VIA_MEM_AGP 1 /* matches drm constant */
-#define VIA_MEM_SYSTEM 2
+#define VIA_MEM_SYSTEM 2
#define VIA_MEM_MIXED 3
#define VIA_MEM_UNKNOWN 4
typedef struct {
- uint32_t offset;
- uint32_t size;
+ __u32 offset;
+ __u32 size;
} drm_via_agp_t;
typedef struct {
- uint32_t offset;
- uint32_t size;
+ __u32 offset;
+ __u32 size;
} drm_via_fb_t;
typedef struct {
- uint32_t context;
- uint32_t type;
- uint32_t size;
+ __u32 context;
+ __u32 type;
+ __u32 size;
unsigned long index;
unsigned long offset;
} drm_via_mem_t;
@@ -149,16 +148,16 @@ typedef struct _drm_via_futex {
VIA_FUTEX_WAIT = 0x00,
VIA_FUTEX_WAKE = 0X01
} func;
- uint32_t ms;
- uint32_t lock;
- uint32_t val;
+ __u32 ms;
+ __u32 lock;
+ __u32 val;
} drm_via_futex_t;
typedef struct _drm_via_dma_init {
enum {
VIA_INIT_DMA = 0x01,
VIA_CLEANUP_DMA = 0x02,
- VIA_DMA_INITIALIZED = 0x03
+ VIA_DMA_INITIALIZED = 0x03
} func;
unsigned long offset;
@@ -167,7 +166,7 @@ typedef struct _drm_via_dma_init {
} drm_via_dma_init_t;
typedef struct _drm_via_cmdbuffer {
- char __user *buf;
+ char *buf;
unsigned long size;
} drm_via_cmdbuffer_t;
@@ -183,7 +182,7 @@ typedef struct _drm_via_tex_region {
typedef struct _drm_via_sarea {
unsigned int dirty;
unsigned int nbox;
- drm_clip_rect_t boxes[VIA_NR_SAREA_CLIPRECTS];
+ struct drm_clip_rect boxes[VIA_NR_SAREA_CLIPRECTS];
drm_via_tex_region_t texList[VIA_NR_TEX_REGIONS + 1];
int texAge; /* last time texture was uploaded */
int ctxOwner; /* last context to upload state */
@@ -199,12 +198,11 @@ typedef struct _drm_via_sarea {
unsigned int XvMCDisplaying[VIA_NR_XVMC_PORTS];
unsigned int XvMCSubPicOn[VIA_NR_XVMC_PORTS];
- unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */
+ unsigned int XvMCCtxNoGrabbed; /* Last context to hold decoder */
/* Used by the 3d driver only at this point, for pageflipping:
*/
-
- unsigned int pfCurrentOffset;
+ unsigned int pfCurrentOffset;
} drm_via_sarea_t;
typedef struct _drm_via_cmdbuf_size {
@@ -213,7 +211,7 @@ typedef struct _drm_via_cmdbuf_size {
VIA_CMDBUF_LAG = 0x02
} func;
int wait;
- uint32_t size;
+ __u32 size;
} drm_via_cmdbuf_size_t;
typedef enum {
@@ -225,19 +223,21 @@ typedef enum {
#define VIA_IRQ_FLAGS_MASK 0xF0000000
-enum drm_via_irqs{drm_via_irq_hqv0 = 0,
- drm_via_irq_hqv1,
- drm_via_irq_dma0_dd,
- drm_via_irq_dma0_td,
- drm_via_irq_dma1_dd,
- drm_via_irq_dma1_td,
- drm_via_irq_num};
+enum drm_via_irqs {
+ drm_via_irq_hqv0 = 0,
+ drm_via_irq_hqv1,
+ drm_via_irq_dma0_dd,
+ drm_via_irq_dma0_td,
+ drm_via_irq_dma1_dd,
+ drm_via_irq_dma1_td,
+ drm_via_irq_num
+};
-struct drm_via_wait_irq_request{
+struct drm_via_wait_irq_request {
unsigned irq;
via_irq_seq_type_t type;
- uint32_t sequence;
- uint32_t signal;
+ __u32 sequence;
+ __u32 signal;
};
typedef union drm_via_irqwait {
@@ -245,26 +245,31 @@ typedef union drm_via_irqwait {
struct drm_wait_vblank_reply reply;
} drm_via_irqwait_t;
-typedef struct drm_via_blitsync {
- uint32_t sync_handle;
+typedef struct drm_via_blitsync {
+ __u32 sync_handle;
unsigned engine;
} drm_via_blitsync_t;
+/* - * Below,"flags" is currently unused but will be used for possible future
+ * extensions like kernel space bounce buffers for bad alignments and
+ * blit engine busy-wait polling for better latency in the absence of
+ * interrupts.
+ */
+
typedef struct drm_via_dmablit {
- uint32_t num_lines;
- uint32_t line_length;
+ __u32 num_lines;
+ __u32 line_length;
- uint32_t fb_addr;
- uint32_t fb_stride;
+ __u32 fb_addr;
+ __u32 fb_stride;
- unsigned char *mem_addr;
- uint32_t mem_stride;
-
- int bounce_buffer;
- int to_fb;
+ unsigned char *mem_addr;
+ __u32 mem_stride;
- drm_via_blitsync_t sync;
-} drm_via_dmablit_t;
+ __u32 flags;
+ int to_fb;
+ drm_via_blitsync_t sync;
+} drm_via_dmablit_t;
#endif /* _VIA_DRM_H_ */
commit 87f025c1aaf76c6ae25b9faa13a16fe0d4e29118
Author: gang65 <gang65@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Wed Feb 10 15:32:54 2010 +0000
Fix bug with suspend and VT switch on VX800 chipset and 64bit systems
git-svn-id: http://svn.openchrome.org/svn/trunk@838 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/ChangeLog b/ChangeLog
index a0863ab..d99fd71 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-02-10 Bartosz Kosiorek <gang65@poczta.onet.pl>
+
+ Fix bug with suspend and VT switch on VX800 and 64bit systems
+
+ * src/via_driver.h:
+ * src/via_video.c: (viaResetVideo), (viaSaveVideo),
+ (viaRestoreVideo), (viaExitVideo):
+ * src/via_video.h:
+
2010-01-24 Bartosz Kosiorek <gang65@poczta.onet.pl>
Fix starting address restore and save (initial 64-bit support)
diff --git a/src/via_driver.h b/src/via_driver.h
index 15b551c..9e31b98 100644
--- a/src/via_driver.h
+++ b/src/via_driver.h
@@ -419,10 +419,10 @@ typedef struct _VIA {
Bool PrintVGARegs;
Bool PrintTVRegs;
Bool I2CScan;
+#endif /* HAVE_DEBUG */
Bool UseLegacyModeSwitch ;
video_via_regs* VideoRegs ;
-#endif /* HAVE_DEBUG */
} VIARec, *VIAPtr;
#define VIAPTR(p) ((VIAPtr)((p)->driverPrivate))
diff --git a/src/via_video.c b/src/via_video.c
index 00a8861..94ae300 100644
--- a/src/via_video.c
+++ b/src/via_video.c
@@ -466,8 +466,8 @@ viaResetVideo(ScrnInfoPtr pScrn)
viaVidEng->video1_ctl = 0;
viaVidEng->video3_ctl = 0;
- viaVidEng->compose = 0x80000000;
- viaVidEng->compose = 0x40000000;
+ viaVidEng->compose = V1_COMMAND_FIRE;
+ viaVidEng->compose = V3_COMMAND_FIRE;
viaVidEng->color_key = 0x821;
viaVidEng->snd_color_key = 0x821;
@@ -479,16 +479,16 @@ viaSaveVideo(ScrnInfoPtr pScrn)
VIAPtr pVia = VIAPTR(pScrn);
vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+ DBG_DD(ErrorF(" via_video.c : viaSaveVideo : \n"));
/* Save video registers */
- /* TODO: Identify which registers should be saved and restored */
memcpy(pVia->VideoRegs, (void*)viaVidEng, sizeof(video_via_regs));
pVia->dwV1 = ((vmmtr) viaVidEng)->video1_ctl;
pVia->dwV3 = ((vmmtr) viaVidEng)->video3_ctl;
viaVidEng->video1_ctl = 0;
viaVidEng->video3_ctl = 0;
- viaVidEng->compose = 0x80000000;
- viaVidEng->compose = 0x40000000;
+ viaVidEng->compose = V1_COMMAND_FIRE;
+ viaVidEng->compose = V3_COMMAND_FIRE;
}
void
@@ -496,16 +496,65 @@ viaRestoreVideo(ScrnInfoPtr pScrn)
{
VIAPtr pVia = VIAPTR(pScrn);
vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+ video_via_regs *localVidEng = pVia->VideoRegs;
+
+ DBG_DD(ErrorF(" via_video.c : viaRestoreVideo : \n"));
/* Restore video registers */
- /* TODO: Identify which registers should be saved and restored */
- memcpy((void*)viaVidEng, pVia->VideoRegs, sizeof(video_via_regs));
-
+ /* flush restored video engines' setting to VidMapBase */
+
+ viaVidEng->alphawin_hvstart = localVidEng->alphawin_hvstart;
+ viaVidEng->alphawin_size = localVidEng->alphawin_size;
+ viaVidEng->alphawin_ctl = localVidEng->alphawin_ctl;
+ viaVidEng->alphafb_stride = localVidEng->alphafb_stride;
+ viaVidEng->color_key = localVidEng->color_key;
+ viaVidEng->alphafb_addr = localVidEng->alphafb_addr;
+ viaVidEng->chroma_low = localVidEng->chroma_low;
+ viaVidEng->chroma_up = localVidEng->chroma_up;
+
+ if (pVia->ChipId != PCI_CHIP_VT3314)
+ {
+ /*VT3314 only has V3*/
+ viaVidEng->video1_ctl = localVidEng->video1_ctl;
+ viaVidEng->video1_fetch = localVidEng->video1_fetch;
+ viaVidEng->video1y_addr1 = localVidEng->video1y_addr1;
+ viaVidEng->video1_stride = localVidEng->video1_stride;
+ viaVidEng->video1_hvstart = localVidEng->video1_hvstart;
+ viaVidEng->video1_size = localVidEng->video1_size;
+ viaVidEng->video1y_addr2 = localVidEng->video1y_addr2;
+ viaVidEng->video1_zoom = localVidEng->video1_zoom;
+ viaVidEng->video1_mictl = localVidEng->video1_mictl;
+ viaVidEng->video1y_addr0 = localVidEng->video1y_addr0;
+ viaVidEng->video1_fifo = localVidEng->video1_fifo;
+ viaVidEng->video1y_addr3 = localVidEng->video1y_addr3;
+ viaVidEng->v1_source_w_h = localVidEng->v1_source_w_h ;
+ viaVidEng->video1_CSC1 = localVidEng->video1_CSC1;
+ viaVidEng->video1_CSC2 = localVidEng->video1_CSC2;
+ }
+ viaVidEng->snd_color_key = localVidEng->snd_color_key;
+ viaVidEng->v3alpha_prefifo = localVidEng->v3alpha_prefifo;
+ viaVidEng->v3alpha_fifo = localVidEng->v3alpha_fifo;
+ viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
+ viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
+ viaVidEng->v3_source_width = localVidEng->v3_source_width;
+ viaVidEng->video3_ctl = localVidEng->video3_ctl;
+ viaVidEng->video3_addr0 = localVidEng->video3_addr0;
+ viaVidEng->video3_addr1 = localVidEng->video3_addr1;
+ viaVidEng->video3_stride = localVidEng->video3_stride;
+ viaVidEng->video3_hvstart = localVidEng->video3_hvstart;
+ viaVidEng->video3_size = localVidEng->video3_size;
+ viaVidEng->v3alpha_fetch = localVidEng->v3alpha_fetch;
+ viaVidEng->video3_zoom = localVidEng->video3_zoom;
+ viaVidEng->video3_mictl = localVidEng->video3_mictl;
+ viaVidEng->video3_CSC1 = localVidEng->video3_CSC1;
+ viaVidEng->video3_CSC2 = localVidEng->video3_CSC2;
+ viaVidEng->compose = localVidEng->compose;
+
viaVidEng->video1_ctl = pVia->dwV1;
viaVidEng->video3_ctl = pVia->dwV3;
- viaVidEng->compose = 0x80000000;
- viaVidEng->compose = 0x40000000;
-
+ if (pVia->ChipId != PCI_CHIP_VT3314)
+ viaVidEng->compose = V1_COMMAND_FIRE;
+ viaVidEng->compose = V3_COMMAND_FIRE;
}
void
@@ -524,8 +573,8 @@ viaExitVideo(ScrnInfoPtr pScrn)
viaVidEng->video1_ctl = 0;
viaVidEng->video3_ctl = 0;
- viaVidEng->compose = 0x80000000;
- viaVidEng->compose = 0x40000000;
+ viaVidEng->compose = V1_COMMAND_FIRE;
+ viaVidEng->compose = V3_COMMAND_FIRE;
/*
* Free all adaptor info allocated in viaInitVideo.
diff --git a/src/via_video.h b/src/via_video.h
index 47a4d24..feb600d 100644
--- a/src/via_video.h
+++ b/src/via_video.h
@@ -44,6 +44,10 @@
#define VIDEO_BPP 2
+
+#define V1_COMMAND_FIRE 0x80000000 /* V1 commands fire */
+#define V3_COMMAND_FIRE 0x40000000 /* V3 commands fire */
+
typedef struct
{
CARD32 interruptflag; /* 200 */
@@ -89,7 +93,7 @@ typedef struct
CARD32 video3_ctl; /* 2a0 */
CARD32 video3_addr0; /* 2a4 */
CARD32 video3_addr1; /* 2a8 */
- CARD32 video3_stribe; /* 2ac */
+ CARD32 video3_stride; /* 2ac */
CARD32 video3_hvstart; /* 2b0 */
CARD32 video3_size; /* 2b4 */
CARD32 v3alpha_fetch; /* 2b8 */
commit 007a6bd8da8a29548361807dc8c3e41245f9bd71
Author: schlobinux <schlobinux@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Tue Feb 9 23:45:50 2010 +0000
MSI K8M890M2-V (ticket #356)
git-svn-id: http://svn.openchrome.org/svn/trunk@837 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/src/via_id.c b/src/via_id.c
index 3ffbcae..23319fd 100644
--- a/src/via_id.c
+++ b/src/via_id.c
@@ -171,6 +171,7 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"Asustek M2V-MX SE", VIA_K8M890, 0x1043, 0x8297, VIA_DEVICE_CRT},
{"Foxconn K8M890M2MA-RS2H", VIA_K8M890, 0x105B, 0x0C84, VIA_DEVICE_CRT},
{"Shuttle FX22V1", VIA_K8M890, 0x1297, 0x3080, VIA_DEVICE_CRT},
+ {"MSI K8M890M2-V", VIA_K8M890, 0x1462, 0x7139, VIA_DEVICE_CRT},
{"MSI K9VGM-V", VIA_K8M890, 0x1462, 0x7253, VIA_DEVICE_CRT},
{"Averatec 226x", VIA_K8M890, 0x14FF, 0xA002, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
{"Fujitsu/Siemens Amilo La 1703", VIA_K8M890, 0x1734, 0x10D9, VIA_DEVICE_CRT | VIA_DEVICE_LCD},
commit d742927142d228dec5e4e82a4fad329dc0e3d0af
Author: gang65 <gang65@e8d65cb0-85f4-0310-8831-c60e2a5ce829>
Date: Sat Jan 30 11:31:51 2010 +0000
Code clean up
git-svn-id: http://svn.openchrome.org/svn/trunk@832 e8d65cb0-85f4-0310-8831-c60e2a5ce829
diff --git a/src/via_driver.c b/src/via_driver.c
index 31b2db6..9dea66c 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -459,7 +459,6 @@ via_pci_probe(DriverPtr driver, int entity_num,
{
ScrnInfoPtr scrn = NULL;
Reply to: