diff options
Diffstat (limited to 'include/drm/drmP.h')
| -rw-r--r-- | include/drm/drmP.h | 62 | 
1 files changed, 49 insertions, 13 deletions
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index c1b987158df..e2a4da7d7fa 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -9,6 +9,7 @@  /*   * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.   * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. + * Copyright (c) 2009-2010, Code Aurora Forum.   * All rights reserved.   *   * Permission is hereby granted, free of charge, to any person obtaining a @@ -48,9 +49,9 @@  #include <linux/proc_fs.h>  #include <linux/init.h>  #include <linux/file.h> +#include <linux/platform_device.h>  #include <linux/pci.h>  #include <linux/jiffies.h> -#include <linux/smp_lock.h>	/* For (un)lock_kernel */  #include <linux/dma-mapping.h>  #include <linux/mm.h>  #include <linux/cdev.h> @@ -144,6 +145,7 @@ extern void drm_ut_debug_printk(unsigned int request_level,  #define DRIVER_IRQ_VBL2    0x800  #define DRIVER_GEM         0x1000  #define DRIVER_MODESET     0x2000 +#define DRIVER_USE_PLATFORM_DEVICE  0x4000  /***********************************************************************/  /** \name Begin the DRM... */ @@ -403,6 +405,8 @@ struct drm_pending_event {  	struct drm_event *event;  	struct list_head link;  	struct drm_file *file_priv; +	pid_t pid; /* pid of requester, no guarantee it's valid by the time +		      we deliver the event, for tracing only */  	void (*destroy)(struct drm_pending_event *event);  }; @@ -823,6 +827,7 @@ struct drm_driver {  	int num_ioctls;  	struct file_operations fops;  	struct pci_driver pci_driver; +	struct platform_device *platform_device;  	/* List of devices hanging off this driver */  	struct list_head device_list;  }; @@ -1015,12 +1020,16 @@ struct drm_device {  	struct drm_agp_head *agp;	/**< AGP data */ +	struct device *dev;             /**< Device structure */  	struct pci_dev *pdev;		/**< PCI device structure */  	int pci_vendor;			/**< PCI vendor id */  	int pci_device;			/**< PCI device id */  #ifdef __alpha__  	struct pci_controller *hose;  #endif + +	struct platform_device *platformdev; /**< Platform device struture */ +  	struct drm_sg_mem *sg;	/**< Scatter gather memory */  	int num_crtcs;                  /**< Number of CRTCs on this device */  	void *dev_private;		/**< device private data */ @@ -1060,17 +1069,21 @@ struct drm_device {  }; -static inline int drm_dev_to_irq(struct drm_device *dev) -{ -	return dev->pdev->irq; -} -  static __inline__ int drm_core_check_feature(struct drm_device *dev,  					     int feature)  {  	return ((dev->driver->driver_features & feature) ? 1 : 0);  } + +static inline int drm_dev_to_irq(struct drm_device *dev) +{ +	if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE)) +		return platform_get_irq(dev->platformdev, 0); +	else +		return dev->pdev->irq; +} +  #ifdef __alpha__  #define drm_get_pci_domain(dev) dev->hose->index  #else @@ -1138,6 +1151,7 @@ extern long drm_compat_ioctl(struct file *filp,  extern int drm_lastclose(struct drm_device *dev);  				/* Device support (drm_fops.h) */ +extern struct mutex drm_global_mutex;  extern int drm_open(struct inode *inode, struct file *filp);  extern int drm_stub_open(struct inode *inode, struct file *filp);  extern int drm_fasync(int fd, struct file *filp, int on); @@ -1273,10 +1287,6 @@ extern int drm_freebufs(struct drm_device *dev, void *data,  extern int drm_mapbufs(struct drm_device *dev, void *data,  		       struct drm_file *file_priv);  extern int drm_order(unsigned long size); -extern resource_size_t drm_get_resource_start(struct drm_device *dev, -					      unsigned int resource); -extern resource_size_t drm_get_resource_len(struct drm_device *dev, -					    unsigned int resource);  				/* DMA support (drm_dma.h) */  extern int drm_dma_setup(struct drm_device *dev); @@ -1351,8 +1361,11 @@ extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,  struct drm_master *drm_master_create(struct drm_minor *minor);  extern struct drm_master *drm_master_get(struct drm_master *master);  extern void drm_master_put(struct drm_master **master); -extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, -		       struct drm_driver *driver); +extern int drm_get_pci_dev(struct pci_dev *pdev, +			   const struct pci_device_id *ent, +			   struct drm_driver *driver); +extern int drm_get_platform_dev(struct platform_device *pdev, +				struct drm_driver *driver);  extern void drm_put_dev(struct drm_device *dev);  extern int drm_put_minor(struct drm_minor **minor);  extern unsigned int drm_debug; @@ -1440,6 +1453,8 @@ void drm_gem_vm_open(struct vm_area_struct *vma);  void drm_gem_vm_close(struct vm_area_struct *vma);  int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma); +#include "drm_global.h" +  static inline void  drm_gem_object_reference(struct drm_gem_object *obj)  { @@ -1529,6 +1544,9 @@ static __inline__ struct drm_local_map *drm_core_findmap(struct drm_device *dev,  static __inline__ int drm_device_is_agp(struct drm_device *dev)  { +	if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE)) +		return 0; +  	if (dev->driver->device_is_agp != NULL) {  		int err = (*dev->driver->device_is_agp) (dev); @@ -1542,7 +1560,10 @@ static __inline__ int drm_device_is_agp(struct drm_device *dev)  static __inline__ int drm_device_is_pcie(struct drm_device *dev)  { -	return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP); +	if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE)) +		return 0; +	else +		return pci_find_capability(dev->pdev, PCI_CAP_ID_EXP);  }  static __inline__ void drm_core_dropmap(struct drm_local_map *map) @@ -1550,6 +1571,21 @@ static __inline__ void drm_core_dropmap(struct drm_local_map *map)  }  #include "drm_mem_util.h" + +static inline void *drm_get_device(struct drm_device *dev) +{ +	if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE)) +		return dev->platformdev; +	else +		return dev->pdev; +} + +extern int drm_platform_init(struct drm_driver *driver); +extern int drm_pci_init(struct drm_driver *driver); +extern int drm_fill_in_dev(struct drm_device *dev, +			   const struct pci_device_id *ent, +			   struct drm_driver *driver); +int drm_get_minor(struct drm_device *dev, struct drm_minor **minor, int type);  /*@}*/  #endif				/* __KERNEL__ */  |