2 * linux/drivers/video/savage/savage_accel.c -- Hardware Acceleration
4 * Copyright (C) 2004 Antonino Daplas<adaplas@pol.net>
7 * This file is subject to the terms and conditions of the GNU General Public
8 * License. See the file COPYING in the main directory of this archive for
11 #include <linux/kernel.h>
12 #include <linux/string.h>
14 #include <linux/module.h>
18 static u32 savagefb_rop
[] = {
23 int savagefb_sync(struct fb_info
*info
)
25 struct savagefb_par
*par
= info
->par
;
27 par
->SavageWaitIdle(par
);
31 void savagefb_copyarea(struct fb_info
*info
, const struct fb_copyarea
*region
)
33 struct savagefb_par
*par
= info
->par
;
34 int sx
= region
->sx
, dx
= region
->dx
;
35 int sy
= region
->sy
, dy
= region
->dy
;
38 if (!region
->width
|| !region
->height
)
41 cmd
= BCI_CMD_RECT
| BCI_CMD_DEST_GBD
| BCI_CMD_SRC_GBD
;
42 BCI_CMD_SET_ROP(cmd
, savagefb_rop
[0]);
45 cmd
|= BCI_CMD_RECT_XP
;
47 sx
+= region
->width
- 1;
48 dx
+= region
->width
- 1;
52 cmd
|= BCI_CMD_RECT_YP
;
54 sy
+= region
->height
- 1;
55 dy
+= region
->height
- 1;
58 par
->SavageWaitFifo(par
,4);
60 BCI_SEND(BCI_X_Y(sx
, sy
));
61 BCI_SEND(BCI_X_Y(dx
, dy
));
62 BCI_SEND(BCI_W_H(region
->width
, region
->height
));
65 void savagefb_fillrect(struct fb_info
*info
, const struct fb_fillrect
*rect
)
67 struct savagefb_par
*par
= info
->par
;
70 if (!rect
->width
|| !rect
->height
)
73 if (info
->fix
.visual
== FB_VISUAL_PSEUDOCOLOR
)
76 color
= ((u32
*)info
->pseudo_palette
)[rect
->color
];
78 cmd
= BCI_CMD_RECT
| BCI_CMD_RECT_XP
| BCI_CMD_RECT_YP
|
79 BCI_CMD_DEST_GBD
| BCI_CMD_SRC_SOLID
|
83 BCI_CMD_SET_ROP(cmd
, savagefb_rop
[rect
->rop
]);
85 par
->SavageWaitFifo(par
,4);
88 BCI_SEND( BCI_X_Y(rect
->dx
, rect
->dy
) );
89 BCI_SEND( BCI_W_H(rect
->width
, rect
->height
) );
92 void savagefb_imageblit(struct fb_info
*info
, const struct fb_image
*image
)
94 struct savagefb_par
*par
= info
->par
;
95 int fg
, bg
, size
, i
, width
;
97 u32
*src
= (u32
*) image
->data
;
99 if (!image
->width
|| !image
->height
)
102 if (image
->depth
!= 1) {
103 cfb_imageblit(info
, image
);
107 if (info
->fix
.visual
== FB_VISUAL_PSEUDOCOLOR
) {
108 fg
= image
->fg_color
;
109 bg
= image
->bg_color
;
111 fg
= ((u32
*)info
->pseudo_palette
)[image
->fg_color
];
112 bg
= ((u32
*)info
->pseudo_palette
)[image
->bg_color
];
115 cmd
= BCI_CMD_RECT
| BCI_CMD_RECT_XP
| BCI_CMD_RECT_YP
|
116 BCI_CMD_CLIP_LR
| BCI_CMD_DEST_GBD
| BCI_CMD_SRC_MONO
|
120 BCI_CMD_SET_ROP(cmd
, savagefb_rop
[0]);
122 width
= (image
->width
+ 31) & ~31;
123 size
= (width
* image
->height
)/8;
126 par
->SavageWaitFifo(par
, size
+ 5);
128 BCI_SEND(BCI_CLIP_LR(image
->dx
, image
->dx
+ image
->width
- 1));
131 BCI_SEND(BCI_X_Y(image
->dx
, image
->dy
));
132 BCI_SEND(BCI_W_H(width
, image
->height
));
133 for (i
= 0; i
< size
; i
++)
137 MODULE_LICENSE("GPL");