コード例 #1
0
ファイル: b1dma.c プロジェクト: liexusong/Linux-2.4.16
void b1dma_reset(avmcard *card)
{
	unsigned long flags;

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

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

	restore_flags(flags);

	b1dmaoutmeml(card->mbase+AMCC_MCSR, 0);
	mdelay(10);
	b1dmaoutmeml(card->mbase+AMCC_MCSR, 0x0f000000); /* reset all */
	mdelay(10);
	b1dmaoutmeml(card->mbase+AMCC_MCSR, 0);
	if (card->cardtype == avm_t1pci)
		mdelay(42);
	else
		mdelay(10);
}
コード例 #2
0
ファイル: b1dma.c プロジェクト: liexusong/Linux-2.4.16
int b1dma_load_firmware(struct capi_ctr *ctrl, capiloaddata *data)
{
	avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
	avmcard *card = cinfo->card;
	unsigned long flags;
	int retval;

	b1dma_reset(card);

	if ((retval = b1_load_t4file(card, &data->firmware))) {
		b1dma_reset(card);
		printk(KERN_ERR "%s: failed to load t4file!!\n",
					card->name);
		return retval;
	}

	if (data->configuration.len > 0 && data->configuration.data) {
		if ((retval = b1_load_config(card, &data->configuration))) {
			b1dma_reset(card);
			printk(KERN_ERR "%s: failed to load config!!\n",
					card->name);
			return retval;
		}
	}

	if (!b1dma_loaded(card)) {
		b1dma_reset(card);
		printk(KERN_ERR "%s: failed to load t4file.\n", card->name);
		return -EIO;
	}

	save_flags(flags);
	cli();

	card->csr = AVM_FLAG;
	b1dmaoutmeml(card->mbase+AMCC_INTCSR, card->csr);
	b1dmaoutmeml(card->mbase+AMCC_MCSR,
		EN_A2P_TRANSFERS|EN_P2A_TRANSFERS
		|A2P_HI_PRIORITY|P2A_HI_PRIORITY
		|RESET_A2P_FLAGS|RESET_P2A_FLAGS);
	t1outp(card->port, 0x07, 0x30);
	t1outp(card->port, 0x10, 0xF0);

	card->dma->recvlen = 0;
	b1dmaoutmeml(card->mbase+AMCC_RXPTR, virt_to_phys(card->dma->recvbuf));
	b1dmaoutmeml(card->mbase+AMCC_RXLEN, 4);
	card->csr |= EN_RX_TC_INT;
	b1dmaoutmeml(card->mbase+AMCC_INTCSR, card->csr);
	restore_flags(flags);

        b1dma_send_init(card);

	return 0;
}
コード例 #3
0
int b1dma_load_firmware(struct capi_ctr *ctrl, capiloaddata *data)
{
	avmctrl_info *cinfo = (avmctrl_info *)(ctrl->driverdata);
	avmcard *card = cinfo->card;
	int retval;

	b1dma_reset(card);

	if ((retval = b1_load_t4file(card, &data->firmware))) {
		b1dma_reset(card);
		printk(KERN_ERR "%s: failed to load t4file!!\n",
		       card->name);
		return retval;
	}

	if (data->configuration.len > 0 && data->configuration.data) {
		if ((retval = b1_load_config(card, &data->configuration))) {
			b1dma_reset(card);
			printk(KERN_ERR "%s: failed to load config!!\n",
			       card->name);
			return retval;
		}
	}

	if (!b1dma_loaded(card)) {
		b1dma_reset(card);
		printk(KERN_ERR "%s: failed to load t4file.\n", card->name);
		return -EIO;
	}

	card->csr = AVM_FLAG;
	b1dma_writel(card, card->csr, AMCC_INTCSR);
	b1dma_writel(card, EN_A2P_TRANSFERS | EN_P2A_TRANSFERS | A2P_HI_PRIORITY |
		     P2A_HI_PRIORITY | RESET_A2P_FLAGS | RESET_P2A_FLAGS,
		     AMCC_MCSR);
	t1outp(card->port, 0x07, 0x30);
	t1outp(card->port, 0x10, 0xF0);

	card->dma->recvlen = 0;
	b1dma_writel(card, card->dma->recvbuf.dmaaddr, AMCC_RXPTR);
	b1dma_writel(card, 4, AMCC_RXLEN);
	card->csr |= EN_RX_TC_INT;
	b1dma_writel(card, card->csr, AMCC_INTCSR);

	b1dma_send_init(card);

	return 0;
}
コード例 #4
0
void b1dma_reset(avmcard *card)
{
	card->csr = 0x0;
	b1dma_writel(card, card->csr, AMCC_INTCSR);
	b1dma_writel(card, 0, AMCC_MCSR);
	b1dma_writel(card, 0, AMCC_RXLEN);
	b1dma_writel(card, 0, AMCC_TXLEN);

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

	b1dma_writel(card, 0, AMCC_MCSR);
	mdelay(10);
	b1dma_writel(card, 0x0f000000, AMCC_MCSR); /*           */
	mdelay(10);
	b1dma_writel(card, 0, AMCC_MCSR);
	if (card->cardtype == avm_t1pci)
		mdelay(42);
	else
		mdelay(10);
}
コード例 #5
0
ファイル: b1dma.c プロジェクト: liexusong/Linux-2.4.16
static int b1dma_tolink(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_tx_empty(card->port)
		       && time_before(jiffies, stop));
		if (!b1dma_tx_empty(card->port)) 
			return -1;
	        t1outp(card->port, 0x01, *s++);
	}
	return 0;
}
コード例 #6
0
ファイル: b1dma.c プロジェクト: liexusong/Linux-2.4.16
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;
}
コード例 #7
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;
}