2 * Copyright 2004-2010, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
9 #include <bus_manager.h>
12 typedef struct agp_info
{
13 ushort vendor_id
; /* vendor id */
14 ushort device_id
; /* device id */
15 uchar bus
; /* bus number */
16 uchar device
; /* device number on bus */
17 uchar function
; /* function number in device */
18 uchar class_sub
; /* specific device function */
19 uchar class_base
; /* device type (display vs host bridge) */
21 uint32 capability_id
; /* AGP capability register */
22 uint32 status
; /* AGP status register */
23 uint32 command
; /* AGP command register */
27 typedef struct aperture_info
{
28 phys_addr_t physical_base
;
34 /* flags for allocate_memory */
36 B_APERTURE_NON_RESERVED
= 0x01,
37 B_APERTURE_NEED_PHYSICAL
= 0x02,
40 typedef int32 aperture_id
;
41 typedef struct gart_bus_module_info gart_bus_module_info
;
43 typedef struct agp_gart_module_info
{
44 bus_manager_info info
;
46 /* AGP functionality */
47 status_t (*get_nth_agp_info
)(uint32 index
, agp_info
*info
);
48 status_t (*acquire_agp
)(void);
49 void (*release_agp
)(void);
50 uint32 (*set_agp_mode
)(uint32 command
);
52 /* GART functionality */
53 aperture_id (*map_aperture
)(uint8 bus
, uint8 device
, uint8 function
,
54 size_t size
, addr_t
*_apertureBase
);
55 aperture_id (*map_custom_aperture
)(gart_bus_module_info
*module
,
56 addr_t
*_apertureBase
);
57 status_t (*unmap_aperture
)(aperture_id id
);
58 status_t (*get_aperture_info
)(aperture_id id
, aperture_info
*info
);
60 status_t (*allocate_memory
)(aperture_id id
, size_t size
,
61 size_t alignment
, uint32 flags
, addr_t
*_apertureBase
,
62 phys_addr_t
*_physicalBase
);
63 status_t (*free_memory
)(aperture_id id
, addr_t apertureBase
);
64 status_t (*reserve_aperture
)(aperture_id id
, size_t size
,
65 addr_t
*_apertureBase
);
66 status_t (*unreserve_aperture
)(aperture_id id
, addr_t apertureBase
);
67 status_t (*bind_aperture
)(aperture_id id
, area_id area
, addr_t base
,
68 size_t size
, size_t alignment
, addr_t reservedBase
,
69 addr_t
*_apertureBase
);
70 status_t (*unbind_aperture
)(aperture_id id
, addr_t apertureBase
);
71 } agp_gart_module_info
;
73 #define B_AGP_GART_MODULE_NAME "bus_managers/agp_gart/v0"
75 struct agp_gart_for_bus_module_info
{
79 #define B_AGP_GART_FOR_BUS_MODULE_NAME "bus_managers/agp_gart/bus/v0"
81 struct agp_gart_bus_module_info
{
84 // TODO: add some stuff for non-generic AGP support as well
86 status_t (*create_aperture
)(uint8 bus
, uint8 device
, uint8 function
,
87 size_t size
, void **_aperture
);
88 void (*delete_aperture
)(void *aperture
);
90 status_t (*get_aperture_info
)(void *aperture
, aperture_info
*info
);
91 status_t (*set_aperture_size
)(void *aperture
, size_t size
);
92 status_t (*bind_page
)(void *aperture
, uint32 offset
,
93 phys_addr_t physicalAddress
);
94 status_t (*unbind_page
)(void *aperture
, uint32 offset
);
95 void (*flush_tlbs
)(void *aperture
);
98 /* defines for capability ID register bits */
99 #define AGP_REV_MINOR 0x000f0000 /* AGP Revision minor number reported */
100 #define AGP_REV_MINOR_SHIFT 16
101 #define AGP_REV_MAJOR 0x00f00000 /* AGP Revision major number reported */
102 #define AGP_REV_MAJOR_SHIFT 20
104 /* defines for status and command register bits */
105 #define AGP_2_1x 0x00000001 /* AGP Revision 2.0 1x speed transfer mode */
106 #define AGP_2_2x 0x00000002 /* AGP Revision 2.0 2x speed transfer mode */
107 #define AGP_2_4x 0x00000004 /* AGP Revision 2.0 4x speed transfer mode */
108 #define AGP_3_4x 0x00000001 /* AGP Revision 3.0 4x speed transfer mode */
109 #define AGP_3_8x 0x00000002 /* AGP Revision 3.0 8x speed transfer mode */
110 #define AGP_RATE_MASK 0x00000007 /* mask for supported rates info */
111 #define AGP_3_MODE 0x00000008 /* 0 if AGP Revision 2.0 or earlier rate scheme,
112 * 1 if AGP Revision 3.0 rate scheme */
113 #define AGP_FAST_WRITE 0x00000010 /* 1 if fast write transfers supported */
114 #define AGP_ABOVE_4G 0x00000020 /* 1 if adresses above 4G bytes supported */
115 #define AGP_SBA 0x00000200 /* 1 if side band adressing supported */
116 #define AGP_REQUEST 0xff000000 /* max. number of enqueued AGP command requests
117 * supported, minus one */
118 #define AGP_REQUEST_SHIFT 24
120 /* masks for command register bits */
121 #define AGP_ENABLE 0x00000100 /* set to 1 if AGP should be enabled */