xref: /haiku/src/add-ons/kernel/drivers/graphics/intel_extreme/intel_extreme_private.h (revision e5d65858f2361fe0552495b61620c84dcee6bc00)
1 /*
2  * Copyright 2006-2008, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Axel Dörfler, axeld@pinc-software.de
7  */
8 #ifndef INTEL_EXTREME_PRIVATE_H
9 #define INTEL_EXTREME_PRIVATE_H
10 
11 
12 #include <AGP.h>
13 #include <KernelExport.h>
14 #include <PCI.h>
15 
16 #include "intel_extreme.h"
17 #include "lock.h"
18 
19 
20 struct intel_info {
21 	int32			open_count;
22 	status_t		init_status;
23 	int32			id;
24 	pci_info*		pci;
25 	addr_t			aperture_base;
26 	aperture_id		aperture;
27 
28 	uint8*			registers;
29 
30 	area_id			registers_area;
31 	struct intel_shared_info* shared_info;
32 	area_id			shared_area;
33 
34 	struct overlay_registers* overlay_registers;
35 
36 	bool			fake_interrupts;
37 
38 	const char*		device_identifier;
39 	DeviceType		device_type;
40 };
41 
42 
43 static inline uint32
44 find_reg(const intel_info& info, uint32 target)
45 {
46 	if (REGISTER_BLOCK(target) != REGS_FLAT) {
47 		panic("find_reg is only supposed to be used for unrouped registers\n");
48 		return target;
49 	}
50 
51 	if (!info.device_type.HasPlatformControlHub())
52 		return target;
53 
54 	#define RETURN_REG(x)	case INTEL_##x: return PCH_##x;
55 
56 	switch (target) {
57 		RETURN_REG(INTERRUPT_ENABLED)
58 		RETURN_REG(INTERRUPT_IDENTITY)
59 		RETURN_REG(INTERRUPT_MASK)
60 		RETURN_REG(INTERRUPT_STATUS)
61 	}
62 
63 	#undef RETURN_REG
64 
65 	panic("find_reg didn't have any matching register\n");
66 	return target;
67 }
68 
69 
70 extern status_t intel_free_memory(intel_info& info, addr_t offset);
71 extern status_t intel_allocate_memory(intel_info& info, size_t size,
72 	size_t alignment, uint32 flags, addr_t* _offset,
73 	phys_addr_t* _physicalBase = NULL);
74 extern status_t intel_extreme_init(intel_info& info);
75 extern void intel_extreme_uninit(intel_info& info);
76 
77 #endif  /* INTEL_EXTREME_PRIVATE_H */
78