summaryrefslogtreecommitdiff
path: root/image_pattern.c
blob: 9fc9966ce8ae25b387b0c71c1be5d70a929c59ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdint.h>
#include <nouveau_class.h>
#include <nouveau_pushbuf.h>
#include <nouveau_notifier.h>

#include "screen.h"
#include "object.h"
#include "fifo.h"

void image_pattern_init(void)
{
	struct nouveau_grobj *subchImagePattern = grobj[NvSubImagePattern];

	printf("-- Image pattern, init\n");

	BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_DMA_NOTIFY, 1);
	OUT_RING  (chan, notifier->handle);

	BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_MONOCHROME_FORMAT, 3);
	OUT_RING  (chan, NV04_IMAGE_PATTERN_MONOCHROME_FORMAT_CGA6);
	OUT_RING  (chan, NV04_IMAGE_PATTERN_MONOCHROME_SHAPE_8X8);
	OUT_RING  (chan, NV04_IMAGE_PATTERN_PATTERN_SELECT_MONO);

	BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_COLOR_FORMAT, 1);
	OUT_RING  (chan, (screen_bpp == 32)
		? NV04_IMAGE_PATTERN_COLOR_FORMAT_A8R8G8B8
		: NV04_IMAGE_PATTERN_COLOR_FORMAT_A16R5G6B5
	);

	BEGIN_RING(chan, subchImagePattern, NV04_IMAGE_PATTERN_MONOCHROME_COLOR0, 4);
	OUT_RING  (chan, 0x5a6b7d8d);	/* color for bit=0 */
	OUT_RING  (chan, 0xf9e8d7c6);	/* color for bit=1 */
	OUT_RING  (chan, 0x5a5a5a5a);	/* pattern */
	OUT_RING  (chan, 0xaa55aa55);

	FIRE_RING(chan);
}