Subversion Repositories Kolibri OS

Rev

Rev 5354 | 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/init.h>
  11. #include <linux/kernel.h>
  12. #include <linux/agp_backend.h>
  13. #include "agp.h"
  14. #include "intel-agp.h"
  15. #include <drm/intel-gtt.h>
  16.  
  17. #include <linux/spinlock.h>
  18.  
  19.  
  20.  
  21. #include <syscall.h>
  22.  
  23. #define __devinit
  24. #define PCI_VENDOR_ID_INTEL             0x8086
  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
  29.  
  30.  
  31. int intel_gmch_probe(struct pci_dev *bridge_pdev, struct pci_dev *gpu_pdev,
  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.  
  68.         if (intel_gmch_probe(pdev, NULL, bridge))
  69.  
  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.     }
  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),
  116.         ID(PCI_DEVICE_ID_INTEL_IRONLAKE_D2_HB),
  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),
  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.  
  140.  
  141.