Lines Matching refs:lpbfifo

57 static struct mpc52xx_lpbfifo lpbfifo;  variable
75 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); in mpc52xx_lpbfifo_kick()
78 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x00000001); in mpc52xx_lpbfifo_kick()
94 reg = lpbfifo.regs + LPBFIFO_REG_FIFO_DATA; in mpc52xx_lpbfifo_kick()
101 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x00000301); in mpc52xx_lpbfifo_kick()
111 out_be32(lpbfifo.regs + LPBFIFO_REG_FIFO_ALARM, 0x1e4); in mpc52xx_lpbfifo_kick()
112 out_8(lpbfifo.regs + LPBFIFO_REG_FIFO_CONTROL, 7); in mpc52xx_lpbfifo_kick()
113 lpbfifo.bcom_cur_task = lpbfifo.bcom_tx_task; in mpc52xx_lpbfifo_kick()
115 out_be32(lpbfifo.regs + LPBFIFO_REG_FIFO_ALARM, 0x1ff); in mpc52xx_lpbfifo_kick()
116 out_8(lpbfifo.regs + LPBFIFO_REG_FIFO_CONTROL, 0); in mpc52xx_lpbfifo_kick()
117 lpbfifo.bcom_cur_task = lpbfifo.bcom_rx_task; in mpc52xx_lpbfifo_kick()
120 if (lpbfifo.dma_irqs_enabled) { in mpc52xx_lpbfifo_kick()
121 disable_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task)); in mpc52xx_lpbfifo_kick()
122 lpbfifo.dma_irqs_enabled = 0; in mpc52xx_lpbfifo_kick()
125 if (!lpbfifo.dma_irqs_enabled) { in mpc52xx_lpbfifo_kick()
126 enable_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task)); in mpc52xx_lpbfifo_kick()
127 lpbfifo.dma_irqs_enabled = 1; in mpc52xx_lpbfifo_kick()
132 bd = bcom_prepare_next_buffer(lpbfifo.bcom_cur_task); in mpc52xx_lpbfifo_kick()
150 bcom_submit_next_buffer(lpbfifo.bcom_cur_task, NULL); in mpc52xx_lpbfifo_kick()
158 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, bit_fields); in mpc52xx_lpbfifo_kick()
162 out_be32(lpbfifo.regs + LPBFIFO_REG_START_ADDRESS, in mpc52xx_lpbfifo_kick()
164 out_be32(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, transfer_size); in mpc52xx_lpbfifo_kick()
169 out_be32(lpbfifo.regs + LPBFIFO_REG_CONTROL, bit_fields); in mpc52xx_lpbfifo_kick()
172 if (!lpbfifo.req->defer_xfer_start) in mpc52xx_lpbfifo_kick()
173 out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01); in mpc52xx_lpbfifo_kick()
175 bcom_enable(lpbfifo.bcom_cur_task); in mpc52xx_lpbfifo_kick()
222 u32 status = in_8(lpbfifo.regs + LPBFIFO_REG_BYTES_DONE_STATUS); in mpc52xx_lpbfifo_irq()
231 spin_lock_irqsave(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_irq()
234 req = lpbfifo.req; in mpc52xx_lpbfifo_irq()
236 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_irq()
246 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_irq()
257 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); in mpc52xx_lpbfifo_irq()
263 count = in_be32(lpbfifo.regs + LPBFIFO_REG_BYTES_DONE_STATUS); in mpc52xx_lpbfifo_irq()
268 reg = lpbfifo.regs + LPBFIFO_REG_FIFO_DATA; in mpc52xx_lpbfifo_irq()
285 out_8(lpbfifo.regs + LPBFIFO_REG_BYTES_DONE_STATUS, 0x01); in mpc52xx_lpbfifo_irq()
298 bcom_retrieve_buffer(lpbfifo.bcom_cur_task, &status, NULL); in mpc52xx_lpbfifo_irq()
305 lpbfifo.req = NULL; in mpc52xx_lpbfifo_irq()
311 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_irq()
332 spin_lock_irqsave(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_bcom_irq()
335 req = lpbfifo.req; in mpc52xx_lpbfifo_bcom_irq()
337 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_bcom_irq()
344 if (!bcom_buffer_done(lpbfifo.bcom_cur_task)) { in mpc52xx_lpbfifo_bcom_irq()
345 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_bcom_irq()
354 bcom_retrieve_buffer(lpbfifo.bcom_cur_task, &status, NULL); in mpc52xx_lpbfifo_bcom_irq()
361 lpbfifo.req = NULL; in mpc52xx_lpbfifo_bcom_irq()
365 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_bcom_irq()
378 struct mpc52xx_lpbfifo_request *req = lpbfifo.req; in mpc52xx_lpbfifo_poll()
400 if (!lpbfifo.regs) in mpc52xx_lpbfifo_submit()
403 spin_lock_irqsave(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_submit()
406 if (lpbfifo.req) { in mpc52xx_lpbfifo_submit()
407 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_submit()
412 lpbfifo.req = req; in mpc52xx_lpbfifo_submit()
419 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_submit()
428 if (!lpbfifo.regs) in mpc52xx_lpbfifo_start_xfer()
431 spin_lock_irqsave(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_start_xfer()
437 if (lpbfifo.req && !lpbfifo.req->defer_xfer_start) { in mpc52xx_lpbfifo_start_xfer()
438 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_start_xfer()
446 if (lpbfifo.req && lpbfifo.req == req && in mpc52xx_lpbfifo_start_xfer()
447 lpbfifo.req->defer_xfer_start) { in mpc52xx_lpbfifo_start_xfer()
448 out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01); in mpc52xx_lpbfifo_start_xfer()
451 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_start_xfer()
460 spin_lock_irqsave(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_abort()
461 if (lpbfifo.req == req) { in mpc52xx_lpbfifo_abort()
463 bcom_gen_bd_rx_reset(lpbfifo.bcom_rx_task); in mpc52xx_lpbfifo_abort()
464 bcom_gen_bd_tx_reset(lpbfifo.bcom_tx_task); in mpc52xx_lpbfifo_abort()
465 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); in mpc52xx_lpbfifo_abort()
466 lpbfifo.req = NULL; in mpc52xx_lpbfifo_abort()
468 spin_unlock_irqrestore(&lpbfifo.lock, flags); in mpc52xx_lpbfifo_abort()
477 if (lpbfifo.dev != NULL) in mpc52xx_lpbfifo_probe()
480 lpbfifo.irq = irq_of_parse_and_map(op->dev.of_node, 0); in mpc52xx_lpbfifo_probe()
481 if (!lpbfifo.irq) in mpc52xx_lpbfifo_probe()
486 lpbfifo.regs_phys = res.start; in mpc52xx_lpbfifo_probe()
487 lpbfifo.regs = of_iomap(op->dev.of_node, 0); in mpc52xx_lpbfifo_probe()
488 if (!lpbfifo.regs) in mpc52xx_lpbfifo_probe()
491 spin_lock_init(&lpbfifo.lock); in mpc52xx_lpbfifo_probe()
494 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); in mpc52xx_lpbfifo_probe()
497 rc = request_irq(lpbfifo.irq, mpc52xx_lpbfifo_irq, 0, in mpc52xx_lpbfifo_probe()
498 "mpc52xx-lpbfifo", &lpbfifo); in mpc52xx_lpbfifo_probe()
503 lpbfifo.bcom_rx_task = in mpc52xx_lpbfifo_probe()
507 if (!lpbfifo.bcom_rx_task) in mpc52xx_lpbfifo_probe()
510 rc = request_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task), in mpc52xx_lpbfifo_probe()
512 "mpc52xx-lpbfifo-rx", &lpbfifo); in mpc52xx_lpbfifo_probe()
516 lpbfifo.dma_irqs_enabled = 1; in mpc52xx_lpbfifo_probe()
519 lpbfifo.bcom_tx_task = in mpc52xx_lpbfifo_probe()
522 if (!lpbfifo.bcom_tx_task) in mpc52xx_lpbfifo_probe()
525 lpbfifo.dev = &op->dev; in mpc52xx_lpbfifo_probe()
529 free_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task), &lpbfifo); in mpc52xx_lpbfifo_probe()
531 bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task); in mpc52xx_lpbfifo_probe()
534 iounmap(lpbfifo.regs); in mpc52xx_lpbfifo_probe()
535 lpbfifo.regs = NULL; in mpc52xx_lpbfifo_probe()
544 if (lpbfifo.dev != &op->dev) in mpc52xx_lpbfifo_remove()
548 out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); in mpc52xx_lpbfifo_remove()
551 free_irq(bcom_get_task_irq(lpbfifo.bcom_tx_task), &lpbfifo); in mpc52xx_lpbfifo_remove()
552 bcom_gen_bd_tx_release(lpbfifo.bcom_tx_task); in mpc52xx_lpbfifo_remove()
555 free_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task), &lpbfifo); in mpc52xx_lpbfifo_remove()
556 bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task); in mpc52xx_lpbfifo_remove()
558 free_irq(lpbfifo.irq, &lpbfifo); in mpc52xx_lpbfifo_remove()
559 iounmap(lpbfifo.regs); in mpc52xx_lpbfifo_remove()
560 lpbfifo.regs = NULL; in mpc52xx_lpbfifo_remove()
561 lpbfifo.dev = NULL; in mpc52xx_lpbfifo_remove()