Subversion Repositories Kolibri OS

Rev

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