Lines Matching full:via
6 * The Cuda or Egret is a 6805 microcontroller interfaced to the 6522 VIA.
35 static volatile unsigned char __iomem *via; variable
38 /* VIA registers - spaced 0x200 bytes apart */
61 * VIA pin | Egret pin
64 * PB4 (output) | VIA full (active high)
67 * VIA pin | Cuda pin
111 out_8(&via[B], in_8(&via[B]) | TIP); in assert_TIP()
113 out_8(&via[B], in_8(&via[B]) & ~TIP); in assert_TIP()
120 out_8(&via[B], in_8(&via[B]) | TIP | TACK); in assert_TIP_and_TACK()
122 out_8(&via[B], in_8(&via[B]) & ~(TIP | TACK)); in assert_TIP_and_TACK()
129 out_8(&via[B], in_8(&via[B]) | TACK); in assert_TACK()
131 out_8(&via[B], in_8(&via[B]) & ~TACK); in assert_TACK()
136 out_8(&via[B], in_8(&via[B]) ^ TACK); in toggle_TACK()
143 out_8(&via[B], in_8(&via[B]) & ~TACK); in negate_TACK()
145 out_8(&via[B], in_8(&via[B]) | TACK); in negate_TACK()
152 out_8(&via[B], in_8(&via[B]) & ~(TIP | TACK)); in negate_TIP_and_TACK()
154 out_8(&via[B], in_8(&via[B]) | TIP | TACK); in negate_TIP_and_TACK()
216 via = via1; in find_via_cuda()
223 via = NULL; in find_via_cuda()
244 vias = of_find_node_by_name(NULL, "via-cuda"); in find_via_cuda()
250 printk(KERN_ERR "via-cuda: No \"reg\" property !\n"); in find_via_cuda()
255 printk(KERN_ERR "via-cuda: Can't translate address !\n"); in find_via_cuda()
258 via = ioremap(taddr, 0x2000); in find_via_cuda()
259 if (via == NULL) { in find_via_cuda()
260 printk(KERN_ERR "via-cuda: Can't map address !\n"); in find_via_cuda()
270 via = NULL; in find_via_cuda()
275 /* for us by the main VIA driver in arch/m68k/mac/via.c */ in find_via_cuda()
277 out_8(&via[IFR], 0x7f); /* clear interrupts by writing 1s */ in find_via_cuda()
278 out_8(&via[IER], IER_SET|SR_INT); /* enable interrupt from SR */ in find_via_cuda()
296 if (via == NULL) in via_cuda_start()
304 printk(KERN_ERR "via-cuda: can't map interrupts for %pOF\n", in via_cuda_start()
311 printk(KERN_ERR "via-cuda: can't request irq %d\n", cuda_irq); in via_cuda_start()
335 if (via == NULL) in cuda_probe()
343 if (TREQ_asserted(in_8(&via[B]))) { in sync_egret()
349 (void)in_8(&via[SR]); in sync_egret()
351 if (!TREQ_asserted(in_8(&via[B]))) in sync_egret()
355 } else if (in_8(&via[B]) & TIP) { in sync_egret()
363 if (in_8(&via[IFR]) & SR_INT) in sync_egret()
364 (void)in_8(&via[SR]); in sync_egret()
384 out_8(&via[IER], 0x7f); /* disable interrupts from VIA */ in cuda_init_via()
385 (void)in_8(&via[IER]); in cuda_init_via()
387 out_8(&via[IER], SR_INT); /* disable SR interrupt from VIA */ in cuda_init_via()
390 out_8(&via[DIRB], (in_8(&via[DIRB]) | TACK | TIP) & ~TREQ); /* TACK & TIP out */ in cuda_init_via()
391 out_8(&via[ACR], (in_8(&via[ACR]) & ~SR_CTRL) | SR_EXT); /* SR data in */ in cuda_init_via()
392 (void)in_8(&via[SR]); /* clear any left-over data */ in cuda_init_via()
401 (void)in_8(&via[SR]); in cuda_init_via()
402 out_8(&via[IFR], SR_INT); in cuda_init_via()
408 WAIT_FOR(TREQ_asserted(in_8(&via[B])), "CUDA response to sync"); in cuda_init_via()
411 WAIT_FOR(in_8(&via[IFR]) & SR_INT, "CUDA response to sync (2)"); in cuda_init_via()
412 (void)in_8(&via[SR]); in cuda_init_via()
413 out_8(&via[IFR], SR_INT); in cuda_init_via()
419 WAIT_FOR(!TREQ_asserted(in_8(&via[B])), "CUDA response to sync (3)"); in cuda_init_via()
420 WAIT_FOR(in_8(&via[IFR]) & SR_INT, "CUDA response to sync (4)"); in cuda_init_via()
421 (void)in_8(&via[SR]); in cuda_init_via()
422 out_8(&via[IFR], SR_INT); in cuda_init_via()
434 if ((via == NULL) || !cuda_fully_inited) { in cuda_send_request()
459 if ((via == NULL) || !cuda_fully_inited) in cuda_adb_autopoll()
474 if ((via == NULL) || !cuda_fully_inited) in cuda_reset_adb_bus()
492 if (via == NULL) { in cuda_request()
544 if (TREQ_asserted(in_8(&via[B]))) in cuda_start()
548 out_8(&via[ACR], in_8(&via[ACR]) | SR_OUT); in cuda_start()
549 out_8(&via[SR], current_req->data[data_index++]); in cuda_start()
579 /* On powermacs, this handler is registered for the VIA IRQ. But they use in cuda_interrupt()
580 * just the shift register IRQ -- other VIA interrupt sources are disabled. in cuda_interrupt()
581 * On m68k macs, the VIA IRQ sources are dispatched individually. Unless in cuda_interrupt()
589 if ((in_8(&via[IFR]) & SR_INT) == 0) { in cuda_interrupt()
593 out_8(&via[IFR], SR_INT); in cuda_interrupt()
597 status = in_8(&via[B]) & (TIP | TACK | TREQ); in cuda_interrupt()
602 (void)in_8(&via[SR]); in cuda_interrupt()
612 (void)in_8(&via[SR]); in cuda_interrupt()
622 out_8(&via[ACR], in_8(&via[ACR]) & ~SR_OUT); in cuda_interrupt()
623 (void)in_8(&via[SR]); in cuda_interrupt()
630 out_8(&via[SR], current_req->data[data_index++]); in cuda_interrupt()
641 out_8(&via[ACR], in_8(&via[ACR]) & ~SR_OUT); in cuda_interrupt()
642 (void)in_8(&via[SR]); in cuda_interrupt()
655 out_8(&via[SR], req->data[data_index++]); in cuda_interrupt()
666 (void)in_8(&via[SR]); in cuda_interrupt()
668 *reply_ptr++ = in_8(&via[SR]); in cuda_interrupt()
686 (void)in_8(&via[SR]); in cuda_interrupt()
719 if (cuda_state == idle && TREQ_asserted(in_8(&via[B]))) { in cuda_interrupt()
765 * to trigger a recovery for the VIA shift register errata. in cuda_input()