static int nvc0_fb_create(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_fb_engine *pfb = &dev_priv->engine.fb; struct nvc0_fb_priv *priv; priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; pfb->priv = priv; priv->r100c10_page = alloc_page(GFP_KERNEL | __GFP_ZERO); if (!priv->r100c10_page) { nvc0_fb_destroy(dev); return -ENOMEM; } priv->r100c10 = pci_map_page(dev->pdev, priv->r100c10_page, 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); if (pci_dma_mapping_error(dev->pdev, priv->r100c10)) { nvc0_fb_destroy(dev); return -EFAULT; } nouveau_irq_register(dev, 25, nvc0_mfb_isr); return 0; }
static void nv50_graph_init_intr(struct drm_device *dev) { NV_DEBUG(dev, "\n"); nouveau_irq_register(dev, 12, nv50_graph_isr); nv_wr32(dev, NV03_PGRAPH_INTR, 0xffffffff); nv_wr32(dev, 0x400138, 0xffffffff); nv_wr32(dev, NV40_PGRAPH_INTR_EN, 0xffffffff); }
void nv50_irq_user_init(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_user_irq_engine *user_irq = &dev_priv->engine.user_irq; struct nouveau_user_irq_handler *handler = &user_irq->handler[0]; INIT_WORK(&handler->work, nv50_irq_user_work); handler->dev = dev; nouveau_irq_register(dev, 28, &nv50_irq_user_isr); }