#ifndef _AGP_H_
#define _AGP_H_
#include <bus_manager.h>
typedef struct agp_info {
ushort vendor_id;
ushort device_id;
uchar bus;
uchar device;
uchar function;
uchar class_sub;
uchar class_base;
struct {
uint32 capability_id;
uint32 status;
uint32 command;
} interface;
} agp_info;
typedef struct aperture_info {
phys_addr_t physical_base;
addr_t base;
size_t size;
size_t reserved_size;
} aperture_info;
enum {
B_APERTURE_NON_RESERVED = 0x01,
B_APERTURE_NEED_PHYSICAL = 0x02,
};
typedef int32 aperture_id;
typedef struct gart_bus_module_info gart_bus_module_info;
typedef struct agp_gart_module_info {
bus_manager_info info;
status_t (*get_nth_agp_info)(uint32 index, agp_info *info);
status_t (*acquire_agp)(void);
void (*release_agp)(void);
uint32 (*set_agp_mode)(uint32 command);
aperture_id (*map_aperture)(uint8 bus, uint8 device, uint8 function,
size_t size, addr_t *_apertureBase);
aperture_id (*map_custom_aperture)(gart_bus_module_info *module,
addr_t *_apertureBase);
status_t (*unmap_aperture)(aperture_id id);
status_t (*get_aperture_info)(aperture_id id, aperture_info *info);
status_t (*allocate_memory)(aperture_id id, size_t size,
size_t alignment, uint32 flags, addr_t *_apertureBase,
phys_addr_t *_physicalBase);
status_t (*free_memory)(aperture_id id, addr_t apertureBase);
status_t (*reserve_aperture)(aperture_id id, size_t size,
addr_t *_apertureBase);
status_t (*unreserve_aperture)(aperture_id id, addr_t apertureBase);
status_t (*bind_aperture)(aperture_id id, area_id area, addr_t base,
size_t size, size_t alignment, addr_t reservedBase,
addr_t *_apertureBase);
status_t (*unbind_aperture)(aperture_id id, addr_t apertureBase);
} agp_gart_module_info;
#define B_AGP_GART_MODULE_NAME "bus_managers/agp_gart/v0"
struct agp_gart_for_bus_module_info {
module_info info;
};
#define B_AGP_GART_FOR_BUS_MODULE_NAME "bus_managers/agp_gart/bus/v0"
struct agp_gart_bus_module_info {
module_info info;
status_t (*create_aperture)(uint8 bus, uint8 device, uint8 function,
size_t size, void **_aperture);
void (*delete_aperture)(void *aperture);
status_t (*get_aperture_info)(void *aperture, aperture_info *info);
status_t (*set_aperture_size)(void *aperture, size_t size);
status_t (*bind_page)(void *aperture, uint32 offset,
phys_addr_t physicalAddress);
status_t (*unbind_page)(void *aperture, uint32 offset);
void (*flush_tlbs)(void *aperture);
};
#define AGP_REV_MINOR 0x000f0000
#define AGP_REV_MINOR_SHIFT 16
#define AGP_REV_MAJOR 0x00f00000
#define AGP_REV_MAJOR_SHIFT 20
#define AGP_2_1x 0x00000001
#define AGP_2_2x 0x00000002
#define AGP_2_4x 0x00000004
#define AGP_3_4x 0x00000001
#define AGP_3_8x 0x00000002
#define AGP_RATE_MASK 0x00000007
#define AGP_3_MODE 0x00000008
#define AGP_FAST_WRITE 0x00000010
#define AGP_ABOVE_4G 0x00000020
#define AGP_SBA 0x00000200
#define AGP_REQUEST 0xff000000
#define AGP_REQUEST_SHIFT 24
#define AGP_ENABLE 0x00000100
#endif