Subversion Repositories Kolibri OS

Rev

Rev 1963 | Rev 2175 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1963 Rev 2004
Line 77... Line 77...
77
    KernelFree(cursor->data);
77
    KernelFree(cursor->data);
78
    __DestroyObject(cursor);
78
    __DestroyObject(cursor);
79
};
79
};
80
 
80
 
Line 81... Line -...
81
 
-
 
82
static void radeon_show_cursor()
81
static void radeon_show_cursor()
83
{
82
{
84
    struct radeon_device *rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
83
    struct radeon_device *rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
Line -... Line 84...
-
 
84
 
85
 
85
 
-
 
86
    if (ASIC_IS_DCE4(rdev)) {
-
 
87
        WREG32(RADEON_MM_INDEX, EVERGREEN_CUR_CONTROL);
-
 
88
        WREG32(RADEON_MM_DATA, EVERGREEN_CURSOR_EN |
-
 
89
               EVERGREEN_CURSOR_MODE(EVERGREEN_CURSOR_24_8_PRE_MULT));
86
    if (ASIC_IS_AVIVO(rdev)) {
90
    } else if (ASIC_IS_AVIVO(rdev)) {
87
        WREG32(RADEON_MM_INDEX, AVIVO_D1CUR_CONTROL);
91
        WREG32(RADEON_MM_INDEX, AVIVO_D1CUR_CONTROL);
88
        WREG32(RADEON_MM_DATA, AVIVO_D1CURSOR_EN |
92
        WREG32(RADEON_MM_DATA, AVIVO_D1CURSOR_EN |
89
                 (AVIVO_D1CURSOR_MODE_24BPP << AVIVO_D1CURSOR_MODE_SHIFT));
93
                 (AVIVO_D1CURSOR_MODE_24BPP << AVIVO_D1CURSOR_MODE_SHIFT));
90
    } else {
94
    } else {
Line 107... Line 111...
107
 
111
 
Line 108... Line 112...
108
    rdisplay->cursor = cursor;
112
    rdisplay->cursor = cursor;
109
    gpu_addr = radeon_bo_gpu_offset(cursor->robj);
113
    gpu_addr = radeon_bo_gpu_offset(cursor->robj);
Line -... Line 114...
-
 
114
 
-
 
115
    if (ASIC_IS_DCE4(rdev))
-
 
116
    {
-
 
117
        WREG32(EVERGREEN_CUR_SURFACE_ADDRESS_HIGH, 0);
-
 
118
        WREG32(EVERGREEN_CUR_SURFACE_ADDRESS, gpu_addr);
110
 
119
    }
-
 
120
    else if (ASIC_IS_AVIVO(rdev))
-
 
121
    {
-
 
122
        if (rdev->family >= CHIP_RV770)
111
    if (ASIC_IS_AVIVO(rdev))
123
            WREG32(R700_D1CUR_SURFACE_ADDRESS_HIGH, 0);
-
 
124
        WREG32(AVIVO_D1CUR_SURFACE_ADDRESS,  gpu_addr);
112
        WREG32(AVIVO_D1CUR_SURFACE_ADDRESS,  gpu_addr);
125
    }
113
    else {
126
    else {
114
        WREG32(RADEON_CUR_OFFSET, gpu_addr - rdev->mc.vram_start);
127
        WREG32(RADEON_CUR_OFFSET, gpu_addr - rdev->mc.vram_start);
Line 115... Line 128...
115
    }
128
    }
Line 124... Line 137...
124
    rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
137
    rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
Line 125... Line 138...
125
 
138
 
Line -... Line 139...
-
 
139
    uint32_t cur_lock;
-
 
140
 
-
 
141
	if (ASIC_IS_DCE4(rdev)) {
-
 
142
		cur_lock = RREG32(EVERGREEN_CUR_UPDATE);
-
 
143
		if (lock)
-
 
144
			cur_lock |= EVERGREEN_CURSOR_UPDATE_LOCK;
-
 
145
		else
126
    uint32_t cur_lock;
146
			cur_lock &= ~EVERGREEN_CURSOR_UPDATE_LOCK;
127
 
147
        WREG32(EVERGREEN_CUR_UPDATE, cur_lock);
128
    if (ASIC_IS_AVIVO(rdev)) {
148
	} else if (ASIC_IS_AVIVO(rdev)) {
129
        cur_lock = RREG32(AVIVO_D1CUR_UPDATE);
149
        cur_lock = RREG32(AVIVO_D1CUR_UPDATE);
130
        if (lock)
150
        if (lock)
131
            cur_lock |= AVIVO_D1CURSOR_UPDATE_LOCK;
151
            cur_lock |= AVIVO_D1CURSOR_UPDATE_LOCK;
Line 149... Line 169...
149
    rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
169
    rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
150
 
170
 
Line 151... Line 171...
151
    int hot_x = cursor->hot_x;
171
    int hot_x = cursor->hot_x;
152
    int hot_y = cursor->hot_y;
172
    int hot_y = cursor->hot_y;
-
 
173
    int w     = 32;
Line 153... Line 174...
153
 
174
 
154
    radeon_lock_cursor(true);
-
 
155
    if (ASIC_IS_AVIVO(rdev))
-
 
156
    {
-
 
Line -... Line 175...
-
 
175
    radeon_lock_cursor(true);
-
 
176
 
-
 
177
    if (ASIC_IS_DCE4(rdev)) {
-
 
178
        WREG32(EVERGREEN_CUR_POSITION,(x << 16) | y);
-
 
179
        WREG32(EVERGREEN_CUR_HOT_SPOT, (hot_x << 16) | hot_y);
157
        int w = 32;
180
        WREG32(EVERGREEN_CUR_SIZE, ((w - 1) << 16) | 31);
158
 
181
    } else if (ASIC_IS_AVIVO(rdev)) {
159
        WREG32(AVIVO_D1CUR_POSITION, (x << 16) | y);
182
        WREG32(AVIVO_D1CUR_POSITION, (x << 16) | y);
160
        WREG32(AVIVO_D1CUR_HOT_SPOT, (hot_x << 16) | hot_y);
183
        WREG32(AVIVO_D1CUR_HOT_SPOT, (hot_x << 16) | hot_y);