Lines Matching refs:dev

171 drm_firstopen(drm_device_t *dev)
178 retval = drm_addmap(dev, 0, SAREA_MAX, _DRM_SHM,
185 if (dev->driver->use_agp) {
186 DRM_DEBUG("drm_firstopen: use_agp=%d", dev->driver->use_agp);
187 if (drm_device_is_agp(dev))
188 dev->agp = drm_agp_init(dev);
189 if (dev->driver->require_agp && dev->agp == NULL) {
195 if (dev->driver->firstopen)
196 retval = dev->driver->firstopen(dev);
203 dev->buf_use = 0;
205 if (dev->driver->use_dma) {
206 i = drm_dma_setup(dev);
210 dev->counters = 6;
211 dev->types[0] = _DRM_STAT_LOCK;
212 dev->types[1] = _DRM_STAT_OPENS;
213 dev->types[2] = _DRM_STAT_CLOSES;
214 dev->types[3] = _DRM_STAT_IOCTLS;
215 dev->types[4] = _DRM_STAT_LOCKS;
216 dev->types[5] = _DRM_STAT_UNLOCKS;
218 for (i = 0; i < DRM_ARRAY_SIZE(dev->counts); i++)
219 *(&dev->counts[i]) = 0;
222 dev->magiclist[i].head = NULL;
223 dev->magiclist[i].tail = NULL;
226 dev->irq_enabled = 0;
227 dev->context_flag = 0;
228 dev->last_context = 0;
229 dev->if_version = 0;
236 drm_lastclose(drm_device_t *dev)
242 DRM_SPINLOCK_ASSERT(&dev->dev_lock);
244 if (dev->driver->lastclose != NULL)
245 dev->driver->lastclose(dev);
247 if (dev->irq_enabled)
248 (void) drm_irq_uninstall(dev);
250 if (dev->unique) {
251 drm_free(dev->unique, dev->unique_len + 1, DRM_MEM_DRIVER);
252 dev->unique = NULL;
253 dev->unique_len = 0;
258 for (pt = dev->magiclist[i].head; pt; pt = next) {
262 dev->magiclist[i].head = dev->magiclist[i].tail = NULL;
266 if (dev->agp) {
271 * Remove AGP resources, but leave dev->agp
274 for (entry = dev->agp->memory; entry; entry = nexte) {
278 (unsigned long)entry->handle, dev);
282 dev->agp->memory = NULL;
284 if (dev->agp->acquired)
285 (void) drm_agp_do_release(dev);
287 dev->agp->acquired = 0;
288 dev->agp->enabled = 0;
289 drm_agp_fini(dev);
292 if (dev->sg != NULL) {
294 entry = dev->sg;
295 dev->sg = NULL;
296 drm_sg_cleanup(dev, entry);
301 TAILQ_FOREACH_SAFE(map, &dev->maplist, link, mapsave) {
303 drm_rmmap(dev, map);
306 drm_dma_takedown(dev);
307 if (dev->lock.hw_lock) {
308 dev->lock.hw_lock = NULL; /* SHM removed */
309 dev->lock.filp = NULL;
311 mutex_enter(&(dev->lock.lock_mutex));
312 cv_broadcast(&(dev->lock.lock_cv));
313 mutex_exit(&(dev->lock.lock_mutex));
320 drm_load(drm_device_t *dev)
324 cv_init(&(dev->lock.lock_cv), NULL, CV_DRIVER, NULL);
325 mutex_init(&(dev->lock.lock_mutex), NULL, MUTEX_DRIVER, NULL);
326 mutex_init(&(dev->dev_lock), NULL, MUTEX_DRIVER, NULL);
327 mutex_init(&dev->drw_lock, NULL, MUTEX_DRIVER, NULL);
329 dev->pci_vendor = pci_get_vendor(dev);
330 dev->pci_device = pci_get_device(dev);
332 TAILQ_INIT(&dev->maplist);
333 TAILQ_INIT(&dev->minordevs);
334 TAILQ_INIT(&dev->files);
335 if (dev->driver->load != NULL) {
336 retcode = dev->driver->load(dev, 0);
343 retcode = drm_ctxbitmap_init(dev);
349 if (drm_init_kstats(dev)) {
356 dev->driver->driver_name,
357 dev->driver->driver_major,
358 dev->driver->driver_minor,
359 dev->driver->driver_patchlevel,
360 dev->driver->driver_date);
365 (void) drm_lastclose(dev);
367 cv_destroy(&(dev->lock.lock_cv));
368 mutex_destroy(&(dev->lock.lock_mutex));
369 mutex_destroy(&(dev->dev_lock));
370 mutex_destroy(&dev->drw_lock);
377 drm_unload(drm_device_t *dev)
381 drm_ctxbitmap_cleanup(dev);
384 (void) drm_lastclose(dev);
387 while ((map = TAILQ_FIRST(&dev->maplist)) != NULL) {
388 drm_rmmap(dev, map);
391 if (dev->driver->unload != NULL)
392 dev->driver->unload(dev);
394 cv_destroy(&dev->lock.lock_cv);
395 mutex_destroy(&dev->lock.lock_mutex);
396 mutex_destroy(&dev->dev_lock);
397 mutex_destroy(&dev->drw_lock);
403 drm_open(drm_device_t *dev, drm_cminor_t *mp, int openflags,
408 retcode = drm_open_helper(dev, mp, openflags, otyp, credp);
411 atomic_inc_32(&dev->counts[_DRM_STAT_OPENS]);
413 if (!dev->open_count ++)
414 retcode = drm_firstopen(dev);
423 drm_close(drm_device_t *dev, int minor, int flag, int otyp,
431 mp = drm_find_file_by_minor(dev, minor);
444 if (dev->driver->preclose != NULL)
445 dev->driver->preclose(dev, fpriv);
451 DRM_CURRENTPID, dev->open_count);
453 if (dev->lock.hw_lock &&
454 _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
455 dev->lock.filp == fpriv) {
458 _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
459 if (dev->driver->reclaim_buffers_locked != NULL)
460 dev->driver->reclaim_buffers_locked(dev, fpriv);
461 (void) drm_lock_free(dev, &dev->lock.hw_lock->lock,
462 _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
463 } else if (dev->driver->reclaim_buffers_locked != NULL &&
464 dev->lock.hw_lock != NULL) {
469 if (dev->driver->use_dma)
470 drm_reclaim_buffers(dev, fpriv);
473 if (dev->driver->postclose != NULL)
474 dev->driver->postclose(dev, fpriv);
475 TAILQ_REMOVE(&dev->files, fpriv, link);
479 atomic_inc_32(&dev->counts[_DRM_STAT_CLOSES]);
481 TAILQ_REMOVE(&dev->minordevs, mp, link);
484 if (--dev->open_count == 0) {
485 retcode = drm_lastclose(dev);
493 drm_attach(drm_device_t *dev)
496 return (drm_load(dev));
500 drm_detach(drm_device_t *dev)
502 drm_unload(dev);
503 drm_fini_kstats(dev);
508 drm_get_businfo(drm_device_t *dev)
510 dev->irq = pci_get_irq(dev);
511 if (dev->irq == -1) {
516 dev->pci_domain = 0;
517 if (pci_get_info(dev, &dev->pci_bus,
518 &dev->pci_slot, &dev->pci_func) != DDI_SUCCESS) {
523 dev->pci_bus, dev->pci_slot, dev->pci_func);
528 drm_probe(drm_device_t *dev, const drm_pci_id_list_t *idlist)
533 vendor = pci_get_vendor(dev);
534 device = pci_get_device(dev);
538 dev->desc = s;
539 if (drm_get_businfo(dev) != DDI_SUCCESS) {