Lines Matching refs:dev

169 drm_firstopen(drm_device_t *dev)
176 retval = drm_addmap(dev, 0, SAREA_MAX, _DRM_SHM,
183 if (dev->driver->use_agp) {
184 DRM_DEBUG("drm_firstopen: use_agp=%d", dev->driver->use_agp);
185 if (drm_device_is_agp(dev))
186 dev->agp = drm_agp_init(dev);
187 if (dev->driver->require_agp && dev->agp == NULL) {
193 if (dev->driver->firstopen)
194 retval = dev->driver->firstopen(dev);
201 dev->buf_use = 0;
203 if (dev->driver->use_dma) {
204 i = drm_dma_setup(dev);
208 dev->counters = 6;
209 dev->types[0] = _DRM_STAT_LOCK;
210 dev->types[1] = _DRM_STAT_OPENS;
211 dev->types[2] = _DRM_STAT_CLOSES;
212 dev->types[3] = _DRM_STAT_IOCTLS;
213 dev->types[4] = _DRM_STAT_LOCKS;
214 dev->types[5] = _DRM_STAT_UNLOCKS;
216 for (i = 0; i < DRM_ARRAY_SIZE(dev->counts); i++)
217 *(&dev->counts[i]) = 0;
220 dev->magiclist[i].head = NULL;
221 dev->magiclist[i].tail = NULL;
224 dev->irq_enabled = 0;
225 dev->context_flag = 0;
226 dev->last_context = 0;
227 dev->if_version = 0;
234 drm_lastclose(drm_device_t *dev)
240 DRM_SPINLOCK_ASSERT(&dev->dev_lock);
242 if (dev->driver->lastclose != NULL)
243 dev->driver->lastclose(dev);
245 if (dev->irq_enabled)
246 (void) drm_irq_uninstall(dev);
248 if (dev->unique) {
249 drm_free(dev->unique, dev->unique_len + 1, DRM_MEM_DRIVER);
250 dev->unique = NULL;
251 dev->unique_len = 0;
256 for (pt = dev->magiclist[i].head; pt; pt = next) {
260 dev->magiclist[i].head = dev->magiclist[i].tail = NULL;
264 if (dev->agp) {
269 * Remove AGP resources, but leave dev->agp
272 for (entry = dev->agp->memory; entry; entry = nexte) {
276 (unsigned long)entry->handle, dev);
277 (void) drm_agp_free_memory(entry->handle, dev);
280 dev->agp->memory = NULL;
282 if (dev->agp->acquired)
283 (void) drm_agp_do_release(dev);
285 dev->agp->acquired = 0;
286 dev->agp->enabled = 0;
287 drm_agp_fini(dev);
290 if (dev->sg != NULL) {
292 entry = dev->sg;
293 dev->sg = NULL;
294 drm_sg_cleanup(dev, entry);
299 TAILQ_FOREACH_SAFE(map, &dev->maplist, link, mapsave) {
301 drm_rmmap(dev, map);
304 drm_dma_takedown(dev);
305 if (dev->lock.hw_lock) {
306 dev->lock.hw_lock = NULL; /* SHM removed */
307 dev->lock.filp = NULL;
309 mutex_enter(&(dev->lock.lock_mutex));
310 cv_broadcast(&(dev->lock.lock_cv));
311 mutex_exit(&(dev->lock.lock_mutex));
318 drm_load(drm_device_t *dev)
322 cv_init(&(dev->lock.lock_cv), NULL, CV_DRIVER, NULL);
323 mutex_init(&(dev->lock.lock_mutex), NULL, MUTEX_DRIVER, NULL);
324 mutex_init(&(dev->dev_lock), "drmdev", MUTEX_DRIVER, NULL);
325 mutex_init(&dev->irq_lock, "drmirq", MUTEX_DRIVER,
326 (void *)dev->intr_block);
327 mutex_init(&dev->drw_lock, "drmdrw", MUTEX_DRIVER, NULL);
328 mutex_init(&dev->tasklet_lock, "drmtsk", MUTEX_DRIVER, NULL);
330 dev->irq = pci_get_irq(dev);
331 dev->pci_vendor = pci_get_vendor(dev);
332 dev->pci_device = pci_get_device(dev);
334 TAILQ_INIT(&dev->maplist);
335 TAILQ_INIT(&dev->minordevs);
336 TAILQ_INIT(&dev->files);
337 if (dev->driver->load != NULL) {
338 retcode = dev->driver->load(dev, 0);
345 retcode = drm_ctxbitmap_init(dev);
351 if (dev->driver->use_gem == 1) {
352 retcode = drm_gem_init(dev);
360 if (drm_init_kstats(dev)) {
367 dev->driver->driver_name,
368 dev->driver->driver_major,
369 dev->driver->driver_minor,
370 dev->driver->driver_patchlevel,
371 dev->driver->driver_date);
376 (void) drm_lastclose(dev);
378 cv_destroy(&(dev->lock.lock_cv));
379 mutex_destroy(&(dev->lock.lock_mutex));
380 mutex_destroy(&dev->irq_lock);
381 mutex_destroy(&(dev->dev_lock));
382 mutex_destroy(&dev->drw_lock);
383 mutex_destroy(&dev->tasklet_lock);
390 drm_unload(drm_device_t *dev)
394 drm_vblank_cleanup(dev);
396 drm_ctxbitmap_cleanup(dev);
398 if (dev->driver->use_gem == 1) {
399 idr_list_free(&dev->object_name_idr);
400 mutex_destroy(&dev->object_name_lock);
404 (void) drm_lastclose(dev);
407 while ((map = TAILQ_FIRST(&dev->maplist)) != NULL) {
408 drm_rmmap(dev, map);
411 if (dev->driver->unload != NULL)
412 dev->driver->unload(dev);
415 cv_destroy(&dev->lock.lock_cv);
416 mutex_destroy(&dev->lock.lock_mutex);
417 mutex_destroy(&dev->irq_lock);
418 mutex_destroy(&dev->dev_lock);
419 mutex_destroy(&dev->drw_lock);
420 mutex_destroy(&dev->tasklet_lock);
422 dev->gtt_total = 0;
423 atomic_set(&dev->pin_memory, 0);
430 drm_open(drm_device_t *dev, drm_cminor_t *mp, int openflags,
435 retcode = drm_open_helper(dev, mp, openflags, otyp, credp);
438 atomic_inc_32(&dev->counts[_DRM_STAT_OPENS]);
440 if (!dev->open_count ++)
441 retcode = drm_firstopen(dev);
450 drm_close(drm_device_t *dev, int minor, int flag, int otyp,
458 mp = drm_find_file_by_minor(dev, minor);
471 if (dev->driver->preclose != NULL)
472 dev->driver->preclose(dev, fpriv);
478 DRM_CURRENTPID, dev->open_count);
480 if (dev->lock.hw_lock &&
481 _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
482 dev->lock.filp == fpriv) {
485 _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
486 if (dev->driver->reclaim_buffers_locked != NULL)
487 dev->driver->reclaim_buffers_locked(dev, fpriv);
488 (void) drm_lock_free(dev, &dev->lock.hw_lock->lock,
489 _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
490 } else if (dev->driver->reclaim_buffers_locked != NULL &&
491 dev->lock.hw_lock != NULL) {
496 if (dev->driver->use_dma) {
497 drm_reclaim_buffers(dev, fpriv);
500 if (dev->driver->use_gem == 1) {
501 drm_gem_release(dev, fpriv);
504 if (dev->driver->postclose != NULL) {
505 dev->driver->postclose(dev, fpriv);
507 TAILQ_REMOVE(&dev->files, fpriv, link);
511 atomic_inc_32(&dev->counts[_DRM_STAT_CLOSES]);
513 TAILQ_REMOVE(&dev->minordevs, mp, link);
516 if (--dev->open_count == 0) {
517 retcode = drm_lastclose(dev);
525 drm_attach(drm_device_t *dev)
527 return (drm_load(dev));
531 drm_detach(drm_device_t *dev)
533 drm_unload(dev);
534 drm_fini_kstats(dev);
539 drm_get_businfo(drm_device_t *dev)
541 dev->irq = pci_get_irq(dev);
542 if (dev->irq == -1) {
547 dev->pci_domain = 0;
548 if (pci_get_info(dev, &dev->pci_bus,
549 &dev->pci_slot, &dev->pci_func) != DDI_SUCCESS) {
554 dev->pci_bus, dev->pci_slot, dev->pci_func);
559 drm_probe(drm_device_t *dev, drm_pci_id_list_t *idlist)
564 vendor = pci_get_vendor(dev);
565 device = pci_get_device(dev);
569 dev->desc = s;
570 if (drm_get_businfo(dev) != DDI_SUCCESS) {