···1/* i915_dma.c -- DMA support for the I915 -*- linux-c -*-2 */3-/**************************************************************************4- *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.7 *···24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.26 *27- **************************************************************************/2829#include "drmP.h"30#include "drm.h"···195 return 0;196}197198-static int i915_resume(drm_device_t * dev)199{200 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;201···252 retcode = i915_dma_cleanup(dev);253 break;254 case I915_RESUME_DMA:255- retcode = i915_resume(dev);256 break;257 default:258 retcode = -EINVAL;···652 break;653 case I915_PARAM_ALLOW_BATCHBUFFER:654 value = dev_priv->allow_batchbuffer ? 1 : 0;000655 break;656 default:657 DRM_ERROR("Unkown parameter %d\n", param.param);
···1/* i915_dma.c -- DMA support for the I915 -*- linux-c -*-2 */3+/*04 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.5 * All Rights Reserved.6 *···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28+ */2930#include "drmP.h"31#include "drm.h"···196 return 0;197}198199+static int i915_dma_resume(drm_device_t * dev)200{201 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;202···253 retcode = i915_dma_cleanup(dev);254 break;255 case I915_RESUME_DMA:256+ retcode = i915_dma_resume(dev);257 break;258 default:259 retcode = -EINVAL;···653 break;654 case I915_PARAM_ALLOW_BATCHBUFFER:655 value = dev_priv->allow_batchbuffer ? 1 : 0;656+ break;657+ case I915_PARAM_LAST_DISPATCH:658+ value = READ_BREADCRUMB(dev_priv);659 break;660 default:661 DRM_ERROR("Unkown parameter %d\n", param.param);
+3-3
drivers/char/drm/i915_drm.h
···1-/**************************************************************************2- *3 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.4 * All Rights Reserved.5 *···22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24 *25- **************************************************************************/2627#ifndef _I915_DRM_H_28#define _I915_DRM_H_···151 */152#define I915_PARAM_IRQ_ACTIVE 1153#define I915_PARAM_ALLOW_BATCHBUFFER 20154155typedef struct drm_i915_getparam {156 int param;
···1+/*02 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.3 * All Rights Reserved.4 *···23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.25 *26+ */2728#ifndef _I915_DRM_H_29#define _I915_DRM_H_···152 */153#define I915_PARAM_IRQ_ACTIVE 1154#define I915_PARAM_ALLOW_BATCHBUFFER 2155+#define I915_PARAM_LAST_DISPATCH 3156157typedef struct drm_i915_getparam {158 int param;
+4-3
drivers/char/drm/i915_drv.c
···1/* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-2 */3-/**************************************************************************4 *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28- **************************************************************************/2930#include "drmP.h"31#include "drm.h"···44 */45 .driver_features =46 DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | /* DRIVER_USE_MTRR |*/47- DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED,48 .load = i915_driver_load,49 .lastclose = i915_driver_lastclose,50 .preclose = i915_driver_preclose,51 .device_is_agp = i915_driver_device_is_agp,052 .irq_preinstall = i915_driver_irq_preinstall,53 .irq_postinstall = i915_driver_irq_postinstall,54 .irq_uninstall = i915_driver_irq_uninstall,
···1/* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-2 */3+/*4 *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28+ */2930#include "drmP.h"31#include "drm.h"···44 */45 .driver_features =46 DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | /* DRIVER_USE_MTRR |*/47+ DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL,48 .load = i915_driver_load,49 .lastclose = i915_driver_lastclose,50 .preclose = i915_driver_preclose,51 .device_is_agp = i915_driver_device_is_agp,52+ .vblank_wait = i915_driver_vblank_wait,53 .irq_preinstall = i915_driver_irq_preinstall,54 .irq_postinstall = i915_driver_irq_postinstall,55 .irq_uninstall = i915_driver_irq_uninstall,
+23-16
drivers/char/drm/i915_drv.h
···1/* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-2 */3-/**************************************************************************4 *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28- **************************************************************************/2930#ifndef _I915_DRV_H_31#define _I915_DRV_H_···3738#define DRIVER_NAME "i915"39#define DRIVER_DESC "Intel Graphics"40-#define DRIVER_DATE "20040405"4142/* Interface history:43 *44 * 1.1: Original.0045 */46#define DRIVER_MAJOR 147-#define DRIVER_MINOR 148#define DRIVER_PATCHLEVEL 049-50-/* We use our own dma mechanisms, not the drm template code. However,51- * the shared IRQ code is useful to us:52- */53-#define __HAVE_PM 15455typedef struct _drm_i915_ring_buffer {56 int tail_mask;···94 int tex_lru_log_granularity;95 int allow_batchbuffer;96 struct mem_block *agp_heap;097} drm_i915_private_t;9899extern drm_ioctl_desc_t i915_ioctls[];···106extern void i915_driver_lastclose(drm_device_t * dev);107extern void i915_driver_preclose(drm_device_t * dev, DRMFILE filp);108extern int i915_driver_device_is_agp(drm_device_t * dev);00109110/* i915_irq.c */111extern int i915_irq_emit(DRM_IOCTL_ARGS);112extern int i915_irq_wait(DRM_IOCTL_ARGS);1130114extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS);115extern void i915_driver_irq_preinstall(drm_device_t * dev);116extern void i915_driver_irq_postinstall(drm_device_t * dev);···127extern void i915_mem_release(drm_device_t * dev,128 DRMFILE filp, struct mem_block *heap);129130-extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,131- unsigned long arg);132-133-#define I915_READ(reg) DRM_READ32(dev_priv->mmio_map, reg)134-#define I915_WRITE(reg,val) DRM_WRITE32(dev_priv->mmio_map, reg, val)135-#define I915_READ16(reg) DRM_READ16(dev_priv->mmio_map, reg)136-#define I915_WRITE16(reg,val) DRM_WRITE16(dev_priv->mmio_map, reg, val)137138#define I915_VERBOSE 0139···194#define PPCR 0x61204195#define PPCR_ON (1<<0)1960000000197#define ADPA 0x61100198#define ADPA_DPMS_MASK (~(3<<10))199#define ADPA_DPMS_ON (0<<10)···263#define ASYNC_FLIP (1<<22)264265#define CMD_OP_DESTBUFFER_INFO ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)00266267#endif
···1/* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-2 */3+/*4 *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28+ */2930#ifndef _I915_DRV_H_31#define _I915_DRV_H_···3738#define DRIVER_NAME "i915"39#define DRIVER_DESC "Intel Graphics"40+#define DRIVER_DATE "20051209"4142/* Interface history:43 *44 * 1.1: Original.45+ * 1.2: Add Power Management46+ * 1.3: Add vblank support47 */48#define DRIVER_MAJOR 149+#define DRIVER_MINOR 350#define DRIVER_PATCHLEVEL 0000005152typedef struct _drm_i915_ring_buffer {53 int tail_mask;···97 int tex_lru_log_granularity;98 int allow_batchbuffer;99 struct mem_block *agp_heap;100+ unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;101} drm_i915_private_t;102103extern drm_ioctl_desc_t i915_ioctls[];···108extern void i915_driver_lastclose(drm_device_t * dev);109extern void i915_driver_preclose(drm_device_t * dev, DRMFILE filp);110extern int i915_driver_device_is_agp(drm_device_t * dev);111+extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,112+ unsigned long arg);113114/* i915_irq.c */115extern int i915_irq_emit(DRM_IOCTL_ARGS);116extern int i915_irq_wait(DRM_IOCTL_ARGS);117118+extern int i915_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence);119extern irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS);120extern void i915_driver_irq_preinstall(drm_device_t * dev);121extern void i915_driver_irq_postinstall(drm_device_t * dev);···126extern void i915_mem_release(drm_device_t * dev,127 DRMFILE filp, struct mem_block *heap);128129+#define I915_READ(reg) DRM_READ32(dev_priv->mmio_map, (reg))130+#define I915_WRITE(reg,val) DRM_WRITE32(dev_priv->mmio_map, (reg), (val))131+#define I915_READ16(reg) DRM_READ16(dev_priv->mmio_map, (reg))132+#define I915_WRITE16(reg,val) DRM_WRITE16(dev_priv->mmio_map, (reg), (val))000133134#define I915_VERBOSE 0135···196#define PPCR 0x61204197#define PPCR_ON (1<<0)198199+#define DVOB 0x61140200+#define DVOB_ON (1<<31)201+#define DVOC 0x61160202+#define DVOC_ON (1<<31)203+#define LVDS 0x61180204+#define LVDS_ON (1<<31)205+206#define ADPA 0x61100207#define ADPA_DPMS_MASK (~(3<<10))208#define ADPA_DPMS_ON (0<<10)···258#define ASYNC_FLIP (1<<22)259260#define CMD_OP_DESTBUFFER_INFO ((0x3<<29)|(0x1d<<24)|(0x8e<<16)|1)261+262+#define READ_BREADCRUMB(dev_priv) (((u32 *)(dev_priv->hw_status_page))[5])263264#endif
+39-9
drivers/char/drm/i915_irq.c
···1-/* i915_dma.c -- DMA support for the I915 -*- linux-c -*-2 */3-/**************************************************************************4- *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.7 *···24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.26 *27- **************************************************************************/2829#include "drmP.h"30#include "drm.h"31#include "i915_drm.h"32#include "i915_drv.h"3334-#define USER_INT_FLAG 0x200035#define MAX_NOPID ((u32)~0)36-#define READ_BREADCRUMB(dev_priv) (((u32*)(dev_priv->hw_status_page))[5])3738irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)39{···44 u16 temp;4546 temp = I915_READ16(I915REG_INT_IDENTITY_R);47- temp &= USER_INT_FLAG;4849 DRM_DEBUG("%s flag=%08x\n", __FUNCTION__, temp);50···52 return IRQ_NONE;5354 I915_WRITE16(I915REG_INT_IDENTITY_R, temp);55- DRM_WAKEUP(&dev_priv->irq_queue);000000005657 return IRQ_HANDLED;58}···110 dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);111 return ret;112}000000000000000000000113114/* Needs the lock as it touches the ring.115 */···195{196 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;197198- I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG);199 DRM_INIT_WAITQUEUE(&dev_priv->irq_queue);200}201
···1+/* i915_irq.c -- IRQ support for the I915 -*- linux-c -*-2 */3+/*04 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.5 * All Rights Reserved.6 *···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28+ */2930#include "drmP.h"31#include "drm.h"32#include "i915_drm.h"33#include "i915_drv.h"3435+#define USER_INT_FLAG (1<<1)36+#define VSYNC_PIPEB_FLAG (1<<5)37+#define VSYNC_PIPEA_FLAG (1<<7)38+39#define MAX_NOPID ((u32)~0)04041irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)42{···43 u16 temp;4445 temp = I915_READ16(I915REG_INT_IDENTITY_R);46+ temp &= (USER_INT_FLAG | VSYNC_PIPEA_FLAG);4748 DRM_DEBUG("%s flag=%08x\n", __FUNCTION__, temp);49···51 return IRQ_NONE;5253 I915_WRITE16(I915REG_INT_IDENTITY_R, temp);54+55+ if (temp & USER_INT_FLAG)56+ DRM_WAKEUP(&dev_priv->irq_queue);57+58+ if (temp & VSYNC_PIPEA_FLAG) {59+ atomic_inc(&dev->vbl_received);60+ DRM_WAKEUP(&dev->vbl_queue);61+ drm_vbl_send_signals(dev);62+ }6364 return IRQ_HANDLED;65}···101 dev_priv->sarea_priv->last_dispatch = READ_BREADCRUMB(dev_priv);102 return ret;103}104+105+int i915_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence)106+{107+ drm_i915_private_t *dev_priv = dev->dev_private;108+ unsigned int cur_vblank;109+ int ret = 0;110+111+ if (!dev_priv) {112+ DRM_ERROR("%s called with no initialization\n", __FUNCTION__);113+ return DRM_ERR(EINVAL);114+ }115+116+ DRM_WAIT_ON(ret, dev->vbl_queue, 3 * DRM_HZ,117+ (((cur_vblank = atomic_read(&dev->vbl_received))118+ - *sequence) <= (1<<23)));119+120+ *sequence = cur_vblank;121+122+ return ret;123+}124+125126/* Needs the lock as it touches the ring.127 */···165{166 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;167168+ I915_WRITE16(I915REG_INT_ENABLE_R, USER_INT_FLAG | VSYNC_PIPEA_FLAG);169 DRM_INIT_WAITQUEUE(&dev_priv->irq_queue);170}171
+2-3
drivers/char/drm/i915_mem.c
···1/* i915_mem.c -- Simple agp/fb memory manager for i915 -*- linux-c -*-2 */3-/**************************************************************************4- *5 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.6 * All Rights Reserved.7 *···24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.26 *27- **************************************************************************/2829#include "drmP.h"30#include "drm.h"
···1/* i915_mem.c -- Simple agp/fb memory manager for i915 -*- linux-c -*-2 */3+/*04 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.5 * All Rights Reserved.6 *···25 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE26 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.27 *28+ */2930#include "drmP.h"31#include "drm.h"