Subversion Repositories Kolibri OS

Rev

Rev 5354 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2325 Serge 1
/*
2
 * Intel AGPGART routines.
3
 */
4
 
5
#include 
6
#include 
5354 serge 7
#include 
2325 Serge 8
#include 
5354 serge 9
#include 
6660 serge 10
#include 
5354 serge 11
#include 
12
#include 
13
#include "agp.h"
14
#include "intel-agp.h"
15
#include 
2325 Serge 16
 
17
#include 
18
 
19
 
5354 serge 20
 
2325 Serge 21
#include 
22
 
23
#define __devinit
24
#define PCI_VENDOR_ID_INTEL             0x8086
2340 Serge 25
#define PCI_DEVICE_ID_INTEL_82915G_HB   0x2580
26
#define PCI_DEVICE_ID_INTEL_82915GM_HB  0x2590
27
#define PCI_DEVICE_ID_INTEL_82945G_HB   0x2770
28
#define PCI_DEVICE_ID_INTEL_82945GM_HB  0x27A0
2325 Serge 29
 
30
 
4104 Serge 31
int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev,
2325 Serge 32
                      struct agp_bridge_data *bridge);
33
 
34
int intel_agp_enabled;
35
 
36
struct agp_bridge_data *agp_alloc_bridge(void)
37
{
38
    struct agp_bridge_data *bridge;
39
 
40
    bridge = kzalloc(sizeof(*bridge), GFP_KERNEL);
41
    if (!bridge)
42
        return NULL;
43
 
44
    atomic_set(&bridge->agp_in_use, 0);
45
    atomic_set(&bridge->current_memory_agp, 0);
46
 
47
//    if (list_empty(&agp_bridges))
48
//      agp_bridge = bridge;
49
 
50
    return bridge;
51
}
52
 
53
static int __devinit agp_intel_probe(struct pci_dev *pdev,
54
                     const struct pci_device_id *ent)
55
{
56
    struct agp_bridge_data *bridge;
57
    u8 cap_ptr = 0;
58
    int err = -ENODEV;
59
 
60
    cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
61
 
62
    bridge = agp_alloc_bridge();
63
    if (!bridge)
64
        return -ENOMEM;
65
 
66
    bridge->capndx = cap_ptr;
67
 
4104 Serge 68
	if (intel_gmch_probe(pdev, NULL, bridge))
69
 
2325 Serge 70
    {
71
//        pci_set_drvdata(pdev, bridge);
72
//        err = agp_add_bridge(bridge);
73
//        if (!err)
74
        intel_agp_enabled = 1;
75
        err = 0;
76
    }
77
 
78
    return err;
79
}
80
 
81
static struct pci_device_id agp_intel_pci_table[] = {
82
#define ID(x)                       \
83
    {                       \
84
    .class      = (PCI_CLASS_BRIDGE_HOST << 8), \
85
    .class_mask = ~0,               \
86
    .vendor     = PCI_VENDOR_ID_INTEL,      \
87
    .device     = x,                \
88
    .subvendor  = PCI_ANY_ID,           \
89
    .subdevice  = PCI_ANY_ID,           \
90
    }
2340 Serge 91
	ID(PCI_DEVICE_ID_INTEL_E7221_HB),
92
	ID(PCI_DEVICE_ID_INTEL_82915G_HB),
93
	ID(PCI_DEVICE_ID_INTEL_82915GM_HB),
94
	ID(PCI_DEVICE_ID_INTEL_82945G_HB),
95
	ID(PCI_DEVICE_ID_INTEL_82945GM_HB),
96
	ID(PCI_DEVICE_ID_INTEL_82945GME_HB),
97
	ID(PCI_DEVICE_ID_INTEL_PINEVIEW_M_HB),
98
	ID(PCI_DEVICE_ID_INTEL_PINEVIEW_HB),
99
	ID(PCI_DEVICE_ID_INTEL_82946GZ_HB),
100
	ID(PCI_DEVICE_ID_INTEL_82G35_HB),
101
	ID(PCI_DEVICE_ID_INTEL_82965Q_HB),
102
	ID(PCI_DEVICE_ID_INTEL_82965G_HB),
103
	ID(PCI_DEVICE_ID_INTEL_82965GM_HB),
104
	ID(PCI_DEVICE_ID_INTEL_82965GME_HB),
105
	ID(PCI_DEVICE_ID_INTEL_G33_HB),
106
	ID(PCI_DEVICE_ID_INTEL_Q35_HB),
107
	ID(PCI_DEVICE_ID_INTEL_Q33_HB),
108
	ID(PCI_DEVICE_ID_INTEL_GM45_HB),
109
	ID(PCI_DEVICE_ID_INTEL_EAGLELAKE_HB),
110
	ID(PCI_DEVICE_ID_INTEL_Q45_HB),
111
	ID(PCI_DEVICE_ID_INTEL_G45_HB),
112
	ID(PCI_DEVICE_ID_INTEL_G41_HB),
113
	ID(PCI_DEVICE_ID_INTEL_B43_HB),
114
	ID(PCI_DEVICE_ID_INTEL_B43_1_HB),
115
	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D_HB),
3031 serge 116
	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D2_HB),
2340 Serge 117
	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB),
118
	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB),
119
	ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB),
2325 Serge 120
    { }
121
};
122
 
123
static pci_dev_t agp_device;
124
 
125
int init_agp(void)
126
{
127
    const struct pci_device_id  *ent;
128
 
129
    ent = find_pci_device(&agp_device, agp_intel_pci_table);
130
 
131
    if( unlikely(ent == NULL) )
132
    {
133
        dbgprintf("host controller not found\n");
134
        return -ENODEV;
135
    };
136
 
137
    return agp_intel_probe(&agp_device.pci_dev, ent);
138
}
139