コード例 #1
0
static irqreturn_t qc_dpram_irq_handler(int irq, void *data)
{
	struct dpram_link_device *dpld = (struct dpram_link_device *)data;
	struct link_device *ld = (struct link_device *)&dpld->ld;
	u16 int2ap = 0;

	if (unlikely(ld->mode == LINK_MODE_OFFLINE))
		return IRQ_HANDLED;

	int2ap = dpld->recv_intr(dpld);

	if (int2ap == INT_POWERSAFE_FAIL) {
		mif_info("%s: int2ap == INT_POWERSAFE_FAIL\n", ld->name);
		goto exit;
	}

	if (int2ap == 0x1234 || int2ap == 0xDBAB || int2ap == 0xABCD) {
		qc_dload_cmd_handler(dpld, int2ap);
		goto exit;
	}

	if (likely(INT_VALID(int2ap)))
		dpld->ipc_rx_handler(dpld, int2ap);
	else
		mif_info("%s: ERR! invalid intr 0x%04X\n", ld->name, int2ap);

exit:
	return IRQ_HANDLED;
}
コード例 #2
0
static irqreturn_t qc_dpram_irq_handler(int irq, void *data)
{
	struct dpram_link_device *dpld = (struct dpram_link_device *)data;
	struct link_device *ld = &dpld->ld;
	struct mem_status stat;
	u16 int2ap = 0;

	if (ld->mode == LINK_MODE_OFFLINE)
		return IRQ_HANDLED;

	dpld->get_dpram_status(dpld, RX, &stat);
	int2ap = stat.int2ap;

	if (int2ap == INT_POWERSAFE_FAIL) {
		mif_info("int2ap == INT_POWERSAFE_FAIL\n");
		goto exit;
	}

	if (int2ap == 0x1234 || int2ap == 0xDBAB || int2ap == 0xABCD) {
		qc_dload_cmd_handler(dpld, int2ap);
		goto exit;
	} else if (int2ap == 0x4321 || int2ap == 0x5432) {
		mif_err("ERR! CP error command (0x%04X)\n", int2ap);
		goto exit;
	}

	if (likely(INT_VALID(int2ap)))
		dpld->ipc_rx_handler(dpld, &stat);
	else
		mif_info("ERR! invalid intr 0x%04X\n", int2ap);

exit:
	return IRQ_HANDLED;
}