drm_irq.c revision e92e3a8694f157faf8a9e44096a70ada86c556bf
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * drm_irq.c -- IRQ IOCTL and function support
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Created: Fri Oct 18 2003 by anholt@FreeBSD.org
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Copyright 2003 Eric Anholt
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * All Rights Reserved.
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Permission is hereby granted, free of charge, to any person obtaining a
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * copy of this software and associated documentation files (the "Software"),
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * to deal in the Software without restriction, including without limitation
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * the rights to use, copy, modify, merge, publish, distribute, sublicense,
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * and/or sell copies of the Software, and to permit persons to whom the
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Software is furnished to do so, subject to the following conditions:
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * The above copyright notice and this permission notice (including the next
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * paragraph) shall be included in all copies or substantial portions of the
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * ERIC ANHOLT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Eric Anholt <anholt@FreeBSD.org>
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Use is subject to license terms.
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye#pragma ident "%Z%%M% %I% %E% SMI"
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_COPY_FROM_USER_IOCTL(irq, (drm_irq_busid_t *)data, sizeof (irq));
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye irq.busnum, irq.devnum, irq.funcnum, irq.irq);
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_COPY_TO_USER_IOCTL((drm_irq_busid_t *)data, irq, sizeof (irq));
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_ERROR("drm_install_irq_handle: cannot get vgatext's dip");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye "high-level interrupts are not supported");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_ERROR("drm_install_irq_handle: cannot get iblock cookie");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye mutex_init(&dev->irq_lock, NULL, MUTEX_DRIVER, (void *)dev->intr_block);
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye /* setup the interrupt handler */
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye (ddi_idevice_cookie_t *)NULL, dev->irq_handler,
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_ERROR("drm_install_irq_handle: ddi_add_intr failed");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_DEBUG("drm_install_irq_handle: add the intr handle successful");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_ERROR("drm_irq_install: dev_private is NULL");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_ERROR("drm_irq_install: irq already enabled");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye mutex_init(&dev->tasklet_lock, NULL, MUTEX_DRIVER, NULL);
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye /* before installing handler */
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye /* install handler */
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_ERROR("drm_irq_install: drm_install_irq_handle failed");
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye /* after installing handler */
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye ddi_remove_intr(dev->dip, 0, dev->intr_block);
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_DEBUG("drm_control: install irq = %x\n", dev->irq);
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye DRM_COPY_FROM_USER_IOCTL(ctl, (drm_control_t *)data, sizeof (ctl));
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * Handle drivers whose DRM used to require IRQ setup but the
3f1e69bef33050bee99ea1e9992af13fc467281fCheng Sean Ye * no longer does.