Subversion Repositories Kolibri OS

Rev

Rev 1246 | Rev 1275 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1221 serge 1
 
2
#include 
3
#include 
4
#include 
5
#include "radeon_drm.h"
6
#include "radeon.h"
7
#include "radeon_object.h"
8
#include "display.h"
1246 serge 9
1221 serge 10
 
1246 serge 11
1221 serge 12
 
1246 serge 13
static void       __stdcall move_cursor(cursor_t *cursor, int x, int y);
14
1221 serge 15
 
16
{
17
    struct radeon_device *rdev;
18
19
 
20
    uint32_t *src;
21
22
 
23
    int       r;
24
25
 
26
27
 
28
                     false,
29
                     RADEON_GEM_DOMAIN_VRAM,
30
                     false, &cursor->robj);
31
32
 
33
        return r;
34
35
 
1246 serge 36
1221 serge 37
 
38
    if (r) {
39
         DRM_ERROR("radeon: failed to map cursor (%d).\n", r);
40
         return r;
41
    };
42
43
 
44
45
 
46
    {
47
        for(j = 0; j < 32; j++)
48
            *bits++ = *src++;
49
        for(j = 32; j < CURSOR_WIDTH; j++)
1230 serge 50
            *bits++ = 0;
1221 serge 51
    }
52
    for(i = 0; i < CURSOR_WIDTH*(CURSOR_HEIGHT-32); i++)
53
        *bits++ = 0;
54
55
 
56
57
 
58
};
59
60
 
1246 serge 61
{
1221 serge 62
    struct radeon_device *rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
1246 serge 63
1230 serge 64
 
65
        WREG32(RADEON_MM_INDEX, AVIVO_D1CUR_CONTROL);
1246 serge 66
        WREG32(RADEON_MM_DATA, AVIVO_D1CURSOR_EN |
1230 serge 67
                 (AVIVO_D1CURSOR_MODE_24BPP << AVIVO_D1CURSOR_MODE_SHIFT));
68
    } else {
69
            WREG32(RADEON_MM_INDEX, RADEON_CRTC_GEN_CNTL);
70
        WREG32_P(RADEON_MM_DATA, (RADEON_CRTC_CUR_EN |
71
                      (RADEON_CRTC_CUR_MODE_24BPP << RADEON_CRTC_CUR_MODE_SHIFT)),
72
             ~(RADEON_CRTC_CUR_EN | RADEON_CRTC_CUR_MODE_MASK));
73
    }
74
}
75
76
 
77
{
1221 serge 78
    struct radeon_device *rdev;
79
    cursor_t *old;
80
    uint32_t  gpu_addr;
81
82
 
83
84
 
1230 serge 85
1221 serge 86
 
1230 serge 87
    gpu_addr = cursor->robj->gpu_addr;
1221 serge 88
89
 
90
        WREG32(AVIVO_D1CUR_SURFACE_ADDRESS,  gpu_addr);
1246 serge 91
    else {
1221 serge 92
        WREG32(RADEON_CUR_OFFSET, gpu_addr - rdev->mc.vram_location);
1246 serge 93
    }
1221 serge 94
1230 serge 95
 
1221 serge 96
};
97
98
 
1246 serge 99
{
100
    struct radeon_device *rdev;
101
1221 serge 102
 
1246 serge 103
104
 
105
106
 
107
        cur_lock = RREG32(AVIVO_D1CUR_UPDATE);
108
        if (lock)
109
            cur_lock |= AVIVO_D1CURSOR_UPDATE_LOCK;
110
        else
111
            cur_lock &= ~AVIVO_D1CURSOR_UPDATE_LOCK;
112
        WREG32(AVIVO_D1CUR_UPDATE, cur_lock);
113
    } else {
114
        cur_lock = RREG32(RADEON_CUR_OFFSET);
115
        if (lock)
116
            cur_lock |= RADEON_CUR_LOCK;
117
        else
118
            cur_lock &= ~RADEON_CUR_LOCK;
119
        WREG32(RADEON_CUR_OFFSET, cur_lock);
120
    }
121
}
122
123
 
124
 
1230 serge 125
{
1221 serge 126
    struct radeon_device *rdev;
1230 serge 127
    rdev = (struct radeon_device *)rdisplay->ddev->dev_private;
128
1221 serge 129
 
1230 serge 130
    int hot_y = cursor->hot_y;
131
1221 serge 132
 
1246 serge 133
    if (ASIC_IS_AVIVO(rdev))
1221 serge 134
    {
135
        int w = 32;
136
        int i = 0;
137
138
 
1246 serge 139
        WREG32(AVIVO_D1CUR_HOT_SPOT, (hot_x << 16) | hot_y);
140
        WREG32(AVIVO_D1CUR_SIZE, ((w - 1) << 16) | 31);
141
            } else {
1221 serge 142
        uint32_t  gpu_addr;
1246 serge 143
1221 serge 144
 
1246 serge 145
               (RADEON_CUR_LOCK | (hot_x << 16) | (hot_y << 16)));
1221 serge 146
        WREG32(RADEON_CUR_HORZ_VERT_POSN,
1246 serge 147
               (RADEON_CUR_LOCK | (x << 16) | y));
1221 serge 148
149
 
1246 serge 150
151
 
1221 serge 152
        WREG32(RADEON_CUR_OFFSET,
1246 serge 153
         (gpu_addr - rdev->mc.vram_location + (hot_y * 256)));
154
    }
1221 serge 155
    radeon_lock_cursor(false);
1246 serge 156
}
1221 serge 157
158
 
1230 serge 159
{
160
};
161
1221 serge 162
 
1233 serge 163
 
1239 serge 164
{
1233 serge 165
    struct drm_device  *dev;
1239 serge 166
1246 serge 167
 
1233 serge 168
    bool                 retval = true;
1268 serge 169
    u32_t                ifl;
1246 serge 170
1233 serge 171
 
172
173
 
174
175
 
1239 serge 176
1233 serge 177
 
1246 serge 178
    {
179
    list_for_each_entry(cursor, &rdisplay->cursors, list)
1233 serge 180
    {
181
        init_cursor(cursor);
182
    };
183
184
 
1268 serge 185
    rdisplay->init_cursor   = init_cursor;
1233 serge 186
    rdisplay->select_cursor = select_cursor;
187
    rdisplay->show_cursor   = NULL;
188
    rdisplay->move_cursor   = move_cursor;
189
    rdisplay->restore_cursor = restore_cursor;
190
191
 
1246 serge 192
        radeon_show_cursor();
193
    };
194
    safe_sti(ifl);
195
196
 
1233 serge 197
198
 
1239 serge 199
};
1233 serge 200