38 #include <linux/module.h>
40 static int drm_psb_trap_pagefaults;
51 #
if defined(CONFIG_DRM_GMA600)
63 #
if defined(CONFIG_DRM_MEDFIELD)
73 #
if defined(CONFIG_DRM_GMA3600)
99 #define DRM_IOCTL_GMA_ADB \
100 DRM_IOWR(DRM_GMA_ADB + DRM_COMMAND_BASE, uint32_t)
101 #define DRM_IOCTL_GMA_MODE_OPERATION \
102 DRM_IOWR(DRM_GMA_MODE_OPERATION + DRM_COMMAND_BASE, \
103 struct drm_psb_mode_operation_arg)
104 #define DRM_IOCTL_GMA_STOLEN_MEMORY \
105 DRM_IOWR(DRM_GMA_STOLEN_MEMORY + DRM_COMMAND_BASE, \
106 struct drm_psb_stolen_memory_arg)
107 #define DRM_IOCTL_GMA_GAMMA \
108 DRM_IOWR(DRM_GMA_GAMMA + DRM_COMMAND_BASE, \
109 struct drm_psb_dpst_lut_arg)
110 #define DRM_IOCTL_GMA_DPST_BL \
111 DRM_IOWR(DRM_GMA_DPST_BL + DRM_COMMAND_BASE, \
113 #define DRM_IOCTL_GMA_GET_PIPE_FROM_CRTC_ID \
114 DRM_IOWR(DRM_GMA_GET_PIPE_FROM_CRTC_ID + DRM_COMMAND_BASE, \
115 struct drm_psb_get_pipe_from_crtc_id_arg)
116 #define DRM_IOCTL_GMA_GEM_CREATE \
117 DRM_IOWR(DRM_GMA_GEM_CREATE + DRM_COMMAND_BASE, \
118 struct drm_psb_gem_create)
119 #define DRM_IOCTL_GMA_GEM_MMAP \
120 DRM_IOWR(DRM_GMA_GEM_MMAP + DRM_COMMAND_BASE, \
121 struct drm_psb_gem_mmap)
124 struct drm_file *file_priv);
126 struct drm_file *file_priv);
128 struct drm_file *file_priv);
130 struct drm_file *file_priv);
132 struct drm_file *file_priv);
134 static struct drm_ioctl_desc psb_ioctls[] = {
135 DRM_IOCTL_DEF_DRV(GMA_ADB, psb_adb_ioctl, DRM_AUTH),
136 DRM_IOCTL_DEF_DRV(GMA_MODE_OPERATION, psb_mode_operation_ioctl,
138 DRM_IOCTL_DEF_DRV(GMA_STOLEN_MEMORY, psb_stolen_memory_ioctl,
140 DRM_IOCTL_DEF_DRV(GMA_GAMMA, psb_gamma_ioctl, DRM_AUTH),
141 DRM_IOCTL_DEF_DRV(GMA_DPST_BL, psb_dpst_bl_ioctl, DRM_AUTH),
142 DRM_IOCTL_DEF_DRV(GMA_GET_PIPE_FROM_CRTC_ID,
145 DRM_UNLOCKED | DRM_AUTH),
147 DRM_UNLOCKED | DRM_AUTH),
165 dev_err(dev->dev,
"Gatt must be 256M aligned. This is a bug.\n");
196 static int psb_driver_unload(
struct drm_device *dev)
208 if (dev_priv->
ops->chip_teardown)
209 dev_priv->
ops->chip_teardown(dev);
213 if (dev_priv->
pf_pd) {
249 dev->dev_private =
NULL;
259 unsigned long resource_start;
260 unsigned long irqflags;
265 dev_priv = kzalloc(
sizeof(*dev_priv),
GFP_KERNEL);
266 if (dev_priv ==
NULL)
271 dev->dev_private = (
void *) dev_priv;
291 ret = dev_priv->
ops->chip_setup(dev);
311 drm_psb_trap_pagefaults, 0,
317 if (!dev_priv->
pf_pd)
323 ret = psb_do_init(dev);
348 spin_unlock_irqrestore(&dev_priv->
irqmask_lock, irqflags);
352 dev->vblank_disable_allowed = 1;
354 dev->max_vblank_count = 0xffffff;
365 psb_intel_encoder = psb_intel_attached_encoder(connector);
367 switch (psb_intel_encoder->
type) {
381 pm_runtime_set_active(&dev->pdev->dev);
386 psb_driver_unload(dev);
390 static int psb_driver_device_is_agp(
struct drm_device *dev)
397 #ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
399 bd->
props.brightness = bd->
ops->get_brightness(bd);
400 backlight_update_status(bd);
406 struct drm_file *file_priv)
417 struct drm_file *file_priv)
428 struct drm_file *file_priv)
441 dev_dbg(dev->dev,
"Invalid Connector object.\n");
446 crtc = connector->
encoder->crtc;
449 for (i = 0; i < 256; i++)
457 static int psb_mode_operation_ioctl(
struct drm_device *dev,
void *data,
458 struct drm_file *file_priv)
520 resp = connector_funcs->
mode_valid(connector, mode);
532 dev_dbg(dev->dev,
"Unsupported psb mode operation\n");
539 static int psb_stolen_memory_ioctl(
struct drm_device *dev,
void *data,
540 struct drm_file *file_priv)
551 static int psb_driver_open(
struct drm_device *dev,
struct drm_file *
priv)
556 static void psb_driver_close(
struct drm_device *dev,
struct drm_file *
priv)
560 static long psb_unlocked_ioctl(
struct file *filp,
unsigned int cmd,
564 struct drm_device *dev = file_priv->minor->dev;
566 static unsigned int runtime_allowed;
568 if (runtime_allowed == 1 && dev_priv->
is_lvds_on) {
581 static void psb_driver_preclose(
struct drm_device *dev,
struct drm_file *
priv)
585 static void psb_remove(
struct pci_dev *pdev)
587 struct drm_device *dev = pci_get_drvdata(pdev);
599 static const struct vm_operations_struct psb_gem_vm_ops = {
609 .unlocked_ioctl = psb_unlocked_ioctl,
616 static struct drm_driver
driver = {
617 .driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | \
618 DRIVER_IRQ_VBL | DRIVER_MODESET | DRIVER_GEM ,
619 .load = psb_driver_load,
620 .unload = psb_driver_unload,
622 .ioctls = psb_ioctls,
623 .num_ioctls = DRM_ARRAY_SIZE(psb_ioctls),
624 .device_is_agp = psb_driver_device_is_agp,
632 .lastclose = psb_lastclose,
633 .open = psb_driver_open,
634 .preclose = psb_driver_preclose,
635 .postclose = psb_driver_close,
639 .gem_vm_ops = &psb_gem_vm_ops,
643 .fops = &psb_gem_fops,
654 .id_table = pciidlist,
656 .remove = psb_remove,
664 return drm_get_pci_dev(pdev, ent, &driver);
667 static int __init psb_init(
void)
672 static void __exit psb_exit(
void)