Subversion Repositories Kolibri OS

Rev

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