static irqreturn_t z180_irq_handler(struct kgsl_device *device) { irqreturn_t result = IRQ_NONE; unsigned int status; struct z180_device *z180_dev = Z180_DEVICE(device); z180_regread(device, ADDR_VGC_IRQSTATUS >> 2, &status); trace_kgsl_z180_irq_status(device, status); if (status & GSL_VGC_INT_MASK) { z180_regwrite(device, ADDR_VGC_IRQSTATUS >> 2, status & GSL_VGC_INT_MASK); result = IRQ_HANDLED; if (status & REG_VGC_IRQSTATUS__FIFO_MASK) KGSL_DRV_ERR(device, "z180 fifo interrupt\n"); if (status & REG_VGC_IRQSTATUS__MH_MASK) kgsl_mh_intrcallback(device); if (status & REG_VGC_IRQSTATUS__G2D_MASK) { int count; z180_regread(device, ADDR_VGC_IRQ_ACTIVE_CNT >> 2, &count); count >>= 8; count &= 255; z180_dev->timestamp += count; queue_work(device->work_queue, &device->ts_expired_ws); wake_up_interruptible(&device->wait_queue); }
irqreturn_t a2xx_irq_handler(struct adreno_device *adreno_dev) { struct kgsl_device *device = &adreno_dev->dev; irqreturn_t result = IRQ_NONE; unsigned int status; adreno_regread(device, REG_MASTER_INT_SIGNAL, &status); if (status & MASTER_INT_SIGNAL__MH_INT_STAT) { kgsl_mh_intrcallback(device); result = IRQ_HANDLED; } if (status & MASTER_INT_SIGNAL__CP_INT_STAT) { a2xx_cp_intrcallback(device); result = IRQ_HANDLED; } if (status & MASTER_INT_SIGNAL__RBBM_INT_STAT) { a2xx_rbbm_intrcallback(device); result = IRQ_HANDLED; } return result; }
irqreturn_t kgsl_g12_isr(int irq, void *data) { irqreturn_t result = IRQ_NONE; struct kgsl_device *device = &kgsl_driver.g12_device; unsigned int status; kgsl_g12_regread(device, ADDR_VGC_IRQSTATUS >> 2, &status); if (status & GSL_VGC_INT_MASK) { kgsl_g12_regwrite(device, ADDR_VGC_IRQSTATUS >> 2, status & GSL_VGC_INT_MASK); result = IRQ_HANDLED; if (status & REG_VGC_IRQSTATUS__FIFO_MASK) KGSL_DRV_ERR("g12 fifo interrupt\n"); if (status & REG_VGC_IRQSTATUS__MH_MASK) kgsl_mh_intrcallback(device); if (status & REG_VGC_IRQSTATUS__G2D_MASK) { int count; KGSL_DRV_VDBG("g12 g2d interrupt\n"); kgsl_g12_regread(device, ADDR_VGC_IRQ_ACTIVE_CNT >> 2, &count); count >>= 8; count &= 255; device->timestamp += count; wake_up_interruptible(&(device->wait_timestamp_wq)); }
irqreturn_t kgsl_g12_isr(int irq, void *data) { irqreturn_t result = IRQ_NONE; unsigned int status; struct kgsl_device *device; struct kgsl_g12_device *g12_device; device = (struct kgsl_device *) data; g12_device = (struct kgsl_g12_device *) device; kgsl_g12_regread(device, ADDR_VGC_IRQSTATUS >> 2, &status); if (status & GSL_VGC_INT_MASK) { kgsl_g12_regwrite(device, ADDR_VGC_IRQSTATUS >> 2, status & GSL_VGC_INT_MASK); result = IRQ_HANDLED; if (status & REG_VGC_IRQSTATUS__FIFO_MASK) KGSL_DRV_ERR("g12 fifo interrupt\n"); if (status & REG_VGC_IRQSTATUS__MH_MASK) kgsl_mh_intrcallback(device); if (status & REG_VGC_IRQSTATUS__G2D_MASK) { int count; KGSL_DRV_VDBG("g12 g2d interrupt\n"); kgsl_g12_regread(device, ADDR_VGC_IRQ_ACTIVE_CNT >> 2, &count); count >>= 8; count &= 255; g12_device->timestamp += count; wake_up_interruptible(&(g12_device->wait_timestamp_wq)); atomic_notifier_call_chain( &(device->ts_notifier_list), KGSL_DEVICE_G12, NULL); }
static irqreturn_t z180_isr(int irq, void *data) { irqreturn_t result = IRQ_NONE; unsigned int status; struct kgsl_device *device = (struct kgsl_device *) data; struct z180_device *z180_dev = Z180_DEVICE(device); z180_regread(device, ADDR_VGC_IRQSTATUS >> 2, &status); if (status & GSL_VGC_INT_MASK) { z180_regwrite(device, ADDR_VGC_IRQSTATUS >> 2, status & GSL_VGC_INT_MASK); result = IRQ_HANDLED; if (status & REG_VGC_IRQSTATUS__FIFO_MASK) KGSL_DRV_ERR(device, "z180 fifo interrupt\n"); if (status & REG_VGC_IRQSTATUS__MH_MASK) kgsl_mh_intrcallback(device); if (status & REG_VGC_IRQSTATUS__G2D_MASK) { int count; z180_regread(device, ADDR_VGC_IRQ_ACTIVE_CNT >> 2, &count); count >>= 8; count &= 255; z180_dev->timestamp += count; queue_work(device->work_queue, &device->ts_expired_ws); wake_up_interruptible(&device->wait_queue); atomic_notifier_call_chain( &(device->ts_notifier_list), device->id, NULL); }