Beispiel #1
0
int b1dma_detect(avmcard *card)
{
	b1dmaoutmeml(card->mbase+AMCC_MCSR, 0);
	mdelay(10);
	b1dmaoutmeml(card->mbase+AMCC_MCSR, 0x0f000000); /* reset all */
	mdelay(10);
	b1dmaoutmeml(card->mbase+AMCC_MCSR, 0);
	mdelay(42);

	b1dmaoutmeml(card->mbase+AMCC_RXLEN, 0);
	b1dmaoutmeml(card->mbase+AMCC_TXLEN, 0);
	card->csr = 0x0;
	b1dmaoutmeml(card->mbase+AMCC_INTCSR, card->csr);

	if (b1dmainmeml(card->mbase+AMCC_MCSR) != 0x000000E6)
		return 1;

	b1dmaoutmeml(card->mbase+AMCC_RXPTR, 0xffffffff);
	b1dmaoutmeml(card->mbase+AMCC_TXPTR, 0xffffffff);
	if (   b1dmainmeml(card->mbase+AMCC_RXPTR) != 0xfffffffc
	    || b1dmainmeml(card->mbase+AMCC_TXPTR) != 0xfffffffc)
		return 2;

	b1dmaoutmeml(card->mbase+AMCC_RXPTR, 0x0);
	b1dmaoutmeml(card->mbase+AMCC_TXPTR, 0x0);
	if (   b1dmainmeml(card->mbase+AMCC_RXPTR) != 0x0
	    || b1dmainmeml(card->mbase+AMCC_TXPTR) != 0x0)
		return 3;

	t1outp(card->port, 0x10, 0x00);
	t1outp(card->port, 0x07, 0x00);
	
	t1outp(card->port, 0x02, 0x02);
	t1outp(card->port, 0x03, 0x02);

	if (   (t1inp(card->port, 0x02) & 0xFE) != 0x02
	    || t1inp(card->port, 0x3) != 0x03)
		return 4;

	t1outp(card->port, 0x02, 0x00);
	t1outp(card->port, 0x03, 0x00);

	if (   (t1inp(card->port, 0x02) & 0xFE) != 0x00
	    || t1inp(card->port, 0x3) != 0x01)
		return 5;

	return 0;
}
static int b1dma_detect(avmcard *card)
{
	b1dma_writel(card, 0, AMCC_MCSR);
	mdelay(10);
	b1dma_writel(card, 0x0f000000, AMCC_MCSR); /*           */
	mdelay(10);
	b1dma_writel(card, 0, AMCC_MCSR);
	mdelay(42);

	b1dma_writel(card, 0, AMCC_RXLEN);
	b1dma_writel(card, 0, AMCC_TXLEN);
	card->csr = 0x0;
	b1dma_writel(card, card->csr, AMCC_INTCSR);

	if (b1dma_readl(card, AMCC_MCSR) != 0x000000E6)
		return 1;

	b1dma_writel(card, 0xffffffff, AMCC_RXPTR);
	b1dma_writel(card, 0xffffffff, AMCC_TXPTR);
	if (b1dma_readl(card, AMCC_RXPTR) != 0xfffffffc
	    || b1dma_readl(card, AMCC_TXPTR) != 0xfffffffc)
		return 2;

	b1dma_writel(card, 0x0, AMCC_RXPTR);
	b1dma_writel(card, 0x0, AMCC_TXPTR);
	if (b1dma_readl(card, AMCC_RXPTR) != 0x0
	    || b1dma_readl(card, AMCC_TXPTR) != 0x0)
		return 3;

	t1outp(card->port, 0x10, 0x00);
	t1outp(card->port, 0x07, 0x00);

	t1outp(card->port, 0x02, 0x02);
	t1outp(card->port, 0x03, 0x02);

	if ((t1inp(card->port, 0x02) & 0xFE) != 0x02
	    || t1inp(card->port, 0x3) != 0x03)
		return 4;

	t1outp(card->port, 0x02, 0x00);
	t1outp(card->port, 0x03, 0x00);

	if ((t1inp(card->port, 0x02) & 0xFE) != 0x00
	    || t1inp(card->port, 0x3) != 0x01)
		return 5;

	return 0;
}
Beispiel #3
0
static int b1dma_fromlink(avmcard *card, void *buf, unsigned int len)
{
	unsigned long stop = jiffies + 1 * HZ;	/* maximum wait time 1 sec */
	unsigned char *s = (unsigned char *)buf;
	while (len--) {
		while (   !b1dma_rx_full(card->port)
		       && time_before(jiffies, stop));
		if (!b1dma_rx_full(card->port)) 
			return -1;
	        *s++ = t1inp(card->port, 0x00);
	}
	return 0;
}