Subversion Repositories Kolibri OS

Rev

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