Subversion Repositories Kolibri OS

Rev

Rev 4104 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Intel AGPGART routines.
  3.  */
  4.  
  5. #include <linux/module.h>
  6. #include <linux/mod_devicetable.h>
  7. #include <linux/gfp.h>
  8. #include <linux/pci.h>
  9. #include <linux/slab.h>
  10. #include <linux/kernel.h>
  11. #include <linux/agp_backend.h>
  12. #include "agp.h"
  13. #include "intel-agp.h"
  14. #include <drm/intel-gtt.h>
  15.  
  16. #include <linux/spinlock.h>
  17.  
  18.  
  19.  
  20. #include <syscall.h>
  21.  
  22. #define __devinit
  23. #define PCI_VENDOR_ID_INTEL             0x8086
  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
  28.  
  29.  
  30. int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev,
  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.  
  67.         if (intel_gmch_probe(pdev, NULL, bridge))
  68.  
  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.     }
  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),
  115.         ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D2_HB),
  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),
  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.  
  139.  
  140.