Lines Matching +full:4 +full:- +full:pixel +full:- +full:align
1 // SPDX-License-Identifier: GPL-2.0
21 * The hardware cursor definition requires 2 bits per pixel. The
28 * 00 - pixel colour = CURSOR_CLR_0
29 * 01 - pixel colour = CURSOR_CLR_1
30 * 10 - pixel colour = transparent (current display pixel)
31 * 11 - pixel colour = 1's complement of current display pixel
36 * |<--------------->| | |
70 struct atyfb_par *par = (struct atyfb_par *) info->par; in atyfb_cursor()
75 if (par->mmaped) in atyfb_cursor()
76 return -EPERM; in atyfb_cursor()
78 if (par->asleep) in atyfb_cursor()
79 return -EPERM; in atyfb_cursor()
82 if (cursor->enable) in atyfb_cursor()
90 if (cursor->set & FB_CUR_SETPOS) { in atyfb_cursor()
91 x = cursor->image.dx - cursor->hot.x - info->var.xoffset; in atyfb_cursor()
93 xoff = -x; in atyfb_cursor()
99 y = cursor->image.dy - cursor->hot.y - info->var.yoffset; in atyfb_cursor()
101 yoff = -y; in atyfb_cursor()
107 h = cursor->image.height; in atyfb_cursor()
113 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) { in atyfb_cursor()
118 aty_st_le32(CUR_OFFSET, (info->fix.smem_len >> 3) + (yoff << 1), par); in atyfb_cursor()
120 ((u32) (64 - h + yoff) << 16) | xoff, par); in atyfb_cursor()
125 if (cursor->set & FB_CUR_SETCMAP) { in atyfb_cursor()
128 fg_idx = cursor->image.fg_color; in atyfb_cursor()
129 bg_idx = cursor->image.bg_color; in atyfb_cursor()
131 fg = ((info->cmap.red[fg_idx] & 0xff) << 24) | in atyfb_cursor()
132 ((info->cmap.green[fg_idx] & 0xff) << 16) | in atyfb_cursor()
133 ((info->cmap.blue[fg_idx] & 0xff) << 8) | 0xff; in atyfb_cursor()
135 bg = ((info->cmap.red[bg_idx] & 0xff) << 24) | in atyfb_cursor()
136 ((info->cmap.green[bg_idx] & 0xff) << 16) | in atyfb_cursor()
137 ((info->cmap.blue[bg_idx] & 0xff) << 8); in atyfb_cursor()
144 if (cursor->set & (FB_CUR_SETSHAPE | FB_CUR_SETIMAGE)) { in atyfb_cursor()
145 u8 *src = (u8 *)cursor->image.data; in atyfb_cursor()
146 u8 *msk = (u8 *)cursor->mask; in atyfb_cursor()
147 u8 __iomem *dst = (u8 __iomem *)info->sprite.addr; in atyfb_cursor()
148 unsigned int width = (cursor->image.width + 7) >> 3; in atyfb_cursor()
149 unsigned int height = cursor->image.height; in atyfb_cursor()
150 unsigned int align = info->sprite.scan_align; in atyfb_cursor() local
158 offset = align - width*2; in atyfb_cursor()
165 switch (cursor->rop) { in atyfb_cursor()
167 // Upper 4 bits of mask data in atyfb_cursor()
168 l = cursor_bits_lookup[(b ^ m) >> 4] | in atyfb_cursor()
169 // Lower 4 bits of mask in atyfb_cursor()
173 // Upper 4 bits of mask data in atyfb_cursor()
174 l = cursor_bits_lookup[(b & m) >> 4] | in atyfb_cursor()
175 // Lower 4 bits of mask in atyfb_cursor()
183 if ((j + 1) * 8 > cursor->image.width) { in atyfb_cursor()
185 (1 << ((cursor->image.width & 7) * 2)) - 1); in atyfb_cursor()
201 info->fix.smem_len -= PAGE_SIZE; in aty_init_cursor()
204 addr = (unsigned long) info->screen_base - 0x800000 + info->fix.smem_len; in aty_init_cursor()
205 info->sprite.addr = (u8 *) addr; in aty_init_cursor()
208 addr = info->fix.smem_start - 0x800000 + info->fix.smem_len; in aty_init_cursor()
209 info->sprite.addr = (u8 *) ioremap(addr, 1024); in aty_init_cursor()
211 addr = (unsigned long) info->screen_base + info->fix.smem_len; in aty_init_cursor()
212 info->sprite.addr = (u8 *) addr; in aty_init_cursor()
215 if (!info->sprite.addr) in aty_init_cursor()
216 return -ENXIO; in aty_init_cursor()
217 info->sprite.size = PAGE_SIZE; in aty_init_cursor()
218 info->sprite.scan_align = 16; /* Scratch pad 64 bytes wide */ in aty_init_cursor()
219 info->sprite.buf_align = 16; /* and 64 lines tall. */ in aty_init_cursor()
220 info->sprite.flags = FB_PIXMAP_IO; in aty_init_cursor()
222 atyfb_ops->fb_cursor = atyfb_cursor; in aty_init_cursor()