diff options
author | Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | 2007-01-08 05:19:57 -0500 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2007-02-07 21:24:25 -0500 |
commit | 689692e73ea4b95c9fa5d5913eade33147db2e5a (patch) | |
tree | 7b6c843a7649f32affd7533092e97a6443b61a01 /drivers/char/drm/via_verifier.c | |
parent | 76f625511e61f9d5561885c77d2ff1436ed83797 (diff) |
via: add some new chipsets
Disable 3D functionality and AGP DMA for chipsets with the DX9 3D engine.
Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers/char/drm/via_verifier.c')
-rw-r--r-- | drivers/char/drm/via_verifier.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/char/drm/via_verifier.c b/drivers/char/drm/via_verifier.c index 70c897c8876..24fc7cb6e7d 100644 --- a/drivers/char/drm/via_verifier.c +++ b/drivers/char/drm/via_verifier.c | |||
@@ -961,7 +961,13 @@ via_verify_command_stream(const uint32_t * buf, unsigned int size, | |||
961 | uint32_t cmd; | 961 | uint32_t cmd; |
962 | const uint32_t *buf_end = buf + (size >> 2); | 962 | const uint32_t *buf_end = buf + (size >> 2); |
963 | verifier_state_t state = state_command; | 963 | verifier_state_t state = state_command; |
964 | int pro_group_a = dev_priv->pro_group_a; | 964 | int cme_video; |
965 | int supported_3d; | ||
966 | |||
967 | cme_video = (dev_priv->chipset == VIA_PRO_GROUP_A || | ||
968 | dev_priv->chipset == VIA_DX9_0); | ||
969 | |||
970 | supported_3d = dev_priv->chipset != VIA_DX9_0; | ||
965 | 971 | ||
966 | hc_state->dev = dev; | 972 | hc_state->dev = dev; |
967 | hc_state->unfinished = no_sequence; | 973 | hc_state->unfinished = no_sequence; |
@@ -986,17 +992,21 @@ via_verify_command_stream(const uint32_t * buf, unsigned int size, | |||
986 | state = via_check_vheader6(&buf, buf_end); | 992 | state = via_check_vheader6(&buf, buf_end); |
987 | break; | 993 | break; |
988 | case state_command: | 994 | case state_command: |
989 | if (HALCYON_HEADER2 == (cmd = *buf)) | 995 | if ((HALCYON_HEADER2 == (cmd = *buf)) && |
996 | supported_3d) | ||
990 | state = state_header2; | 997 | state = state_header2; |
991 | else if ((cmd & HALCYON_HEADER1MASK) == HALCYON_HEADER1) | 998 | else if ((cmd & HALCYON_HEADER1MASK) == HALCYON_HEADER1) |
992 | state = state_header1; | 999 | state = state_header1; |
993 | else if (pro_group_a | 1000 | else if (cme_video |
994 | && (cmd & VIA_VIDEOMASK) == VIA_VIDEO_HEADER5) | 1001 | && (cmd & VIA_VIDEOMASK) == VIA_VIDEO_HEADER5) |
995 | state = state_vheader5; | 1002 | state = state_vheader5; |
996 | else if (pro_group_a | 1003 | else if (cme_video |
997 | && (cmd & VIA_VIDEOMASK) == VIA_VIDEO_HEADER6) | 1004 | && (cmd & VIA_VIDEOMASK) == VIA_VIDEO_HEADER6) |
998 | state = state_vheader6; | 1005 | state = state_vheader6; |
999 | else { | 1006 | else if ((cmd == HALCYON_HEADER2) && !supported_3d) { |
1007 | DRM_ERROR("Accelerated 3D is not supported on this chipset yet.\n"); | ||
1008 | state = state_error; | ||
1009 | } else { | ||
1000 | DRM_ERROR | 1010 | DRM_ERROR |
1001 | ("Invalid / Unimplemented DMA HEADER command. 0x%x\n", | 1011 | ("Invalid / Unimplemented DMA HEADER command. 0x%x\n", |
1002 | cmd); | 1012 | cmd); |