struct bcom_task * bcom_gen_bd_rx_init(int queue_len, phys_addr_t fifo, int initiator, int ipr, int maxbufsize) { struct bcom_task *tsk; struct bcom_gen_bd_priv *priv; tsk = bcom_task_alloc(queue_len, sizeof(struct bcom_gen_bd), sizeof(struct bcom_gen_bd_priv)); if (!tsk) return NULL; tsk->flags = BCOM_FLAGS_NONE; priv = tsk->priv; priv->fifo = fifo; priv->initiator = initiator; priv->ipr = ipr; priv->maxbufsize = maxbufsize; if (bcom_gen_bd_rx_reset(tsk)) { bcom_task_free(tsk); return NULL; } return tsk; }
void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req) { unsigned long flags; spin_lock_irqsave(&lpbfifo.lock, flags); if (lpbfifo.req == req) { /* Put it into reset and clear the state */ bcom_gen_bd_rx_reset(lpbfifo.bcom_rx_task); bcom_gen_bd_tx_reset(lpbfifo.bcom_tx_task); out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); lpbfifo.req = NULL; } spin_unlock_irqrestore(&lpbfifo.lock, flags); }