diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-25 06:44:44 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-25 06:44:44 -0400 |
commit | 76a9f26c9e40e9c0ed5dc8f0cedd74e733f0088d (patch) | |
tree | 8e2db4ba9263e92d264ef469c7dac28078f63874 /drivers/char/drm/radeon_state.c | |
parent | 9bf2aa129a107a0e9e2a5318d35aca731ae7e666 (diff) | |
parent | dfd8317d3340f03bc06eba6b58f0ec0861da4a13 (diff) |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Diffstat (limited to 'drivers/char/drm/radeon_state.c')
-rw-r--r-- | drivers/char/drm/radeon_state.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c index c5b8f774a599..5bb2234a9094 100644 --- a/drivers/char/drm/radeon_state.c +++ b/drivers/char/drm/radeon_state.c | |||
@@ -249,6 +249,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * | |||
249 | case R200_EMIT_PP_TXCTLALL_3: | 249 | case R200_EMIT_PP_TXCTLALL_3: |
250 | case R200_EMIT_PP_TXCTLALL_4: | 250 | case R200_EMIT_PP_TXCTLALL_4: |
251 | case R200_EMIT_PP_TXCTLALL_5: | 251 | case R200_EMIT_PP_TXCTLALL_5: |
252 | case R200_EMIT_VAP_PVS_CNTL: | ||
252 | /* These packets don't contain memory offsets */ | 253 | /* These packets don't contain memory offsets */ |
253 | break; | 254 | break; |
254 | 255 | ||
@@ -626,6 +627,7 @@ static struct { | |||
626 | {R200_PP_TXFILTER_3, 8, "R200_PP_TXCTLALL_3"}, | 627 | {R200_PP_TXFILTER_3, 8, "R200_PP_TXCTLALL_3"}, |
627 | {R200_PP_TXFILTER_4, 8, "R200_PP_TXCTLALL_4"}, | 628 | {R200_PP_TXFILTER_4, 8, "R200_PP_TXCTLALL_4"}, |
628 | {R200_PP_TXFILTER_5, 8, "R200_PP_TXCTLALL_5"}, | 629 | {R200_PP_TXFILTER_5, 8, "R200_PP_TXCTLALL_5"}, |
630 | {R200_VAP_PVS_CNTL_1, 2, "R200_VAP_PVS_CNTL"}, | ||
629 | }; | 631 | }; |
630 | 632 | ||
631 | /* ================================================================ | 633 | /* ================================================================ |
@@ -2595,7 +2597,8 @@ static __inline__ int radeon_emit_vectors(drm_radeon_private_t *dev_priv, | |||
2595 | int stride = header.vectors.stride; | 2597 | int stride = header.vectors.stride; |
2596 | RING_LOCALS; | 2598 | RING_LOCALS; |
2597 | 2599 | ||
2598 | BEGIN_RING(3 + sz); | 2600 | BEGIN_RING(5 + sz); |
2601 | OUT_RING_REG(RADEON_SE_TCL_STATE_FLUSH, 0); | ||
2599 | OUT_RING(CP_PACKET0(RADEON_SE_TCL_VECTOR_INDX_REG, 0)); | 2602 | OUT_RING(CP_PACKET0(RADEON_SE_TCL_VECTOR_INDX_REG, 0)); |
2600 | OUT_RING(start | (stride << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); | 2603 | OUT_RING(start | (stride << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); |
2601 | OUT_RING(CP_PACKET0_TABLE(RADEON_SE_TCL_VECTOR_DATA_REG, (sz - 1))); | 2604 | OUT_RING(CP_PACKET0_TABLE(RADEON_SE_TCL_VECTOR_DATA_REG, (sz - 1))); |
@@ -2607,6 +2610,32 @@ static __inline__ int radeon_emit_vectors(drm_radeon_private_t *dev_priv, | |||
2607 | return 0; | 2610 | return 0; |
2608 | } | 2611 | } |
2609 | 2612 | ||
2613 | static __inline__ int radeon_emit_veclinear(drm_radeon_private_t *dev_priv, | ||
2614 | drm_radeon_cmd_header_t header, | ||
2615 | drm_radeon_kcmd_buffer_t *cmdbuf) | ||
2616 | { | ||
2617 | int sz = header.veclinear.count * 4; | ||
2618 | int start = header.veclinear.addr_lo | (header.veclinear.addr_hi << 8); | ||
2619 | RING_LOCALS; | ||
2620 | |||
2621 | if (!sz) | ||
2622 | return 0; | ||
2623 | if (sz * 4 > cmdbuf->bufsz) | ||
2624 | return DRM_ERR(EINVAL); | ||
2625 | |||
2626 | BEGIN_RING(5 + sz); | ||
2627 | OUT_RING_REG(RADEON_SE_TCL_STATE_FLUSH, 0); | ||
2628 | OUT_RING(CP_PACKET0(RADEON_SE_TCL_VECTOR_INDX_REG, 0)); | ||
2629 | OUT_RING(start | (1 << RADEON_VEC_INDX_OCTWORD_STRIDE_SHIFT)); | ||
2630 | OUT_RING(CP_PACKET0_TABLE(RADEON_SE_TCL_VECTOR_DATA_REG, (sz - 1))); | ||
2631 | OUT_RING_TABLE(cmdbuf->buf, sz); | ||
2632 | ADVANCE_RING(); | ||
2633 | |||
2634 | cmdbuf->buf += sz * sizeof(int); | ||
2635 | cmdbuf->bufsz -= sz * sizeof(int); | ||
2636 | return 0; | ||
2637 | } | ||
2638 | |||
2610 | static int radeon_emit_packet3(drm_device_t * dev, | 2639 | static int radeon_emit_packet3(drm_device_t * dev, |
2611 | drm_file_t * filp_priv, | 2640 | drm_file_t * filp_priv, |
2612 | drm_radeon_kcmd_buffer_t *cmdbuf) | 2641 | drm_radeon_kcmd_buffer_t *cmdbuf) |
@@ -2865,6 +2894,14 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) | |||
2865 | goto err; | 2894 | goto err; |
2866 | } | 2895 | } |
2867 | break; | 2896 | break; |
2897 | case RADEON_CMD_VECLINEAR: | ||
2898 | DRM_DEBUG("RADEON_CMD_VECLINEAR\n"); | ||
2899 | if (radeon_emit_veclinear(dev_priv, header, &cmdbuf)) { | ||
2900 | DRM_ERROR("radeon_emit_veclinear failed\n"); | ||
2901 | goto err; | ||
2902 | } | ||
2903 | break; | ||
2904 | |||
2868 | default: | 2905 | default: |
2869 | DRM_ERROR("bad cmd_type %d at %p\n", | 2906 | DRM_ERROR("bad cmd_type %d at %p\n", |
2870 | header.header.cmd_type, | 2907 | header.header.cmd_type, |