[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[long] Lance on DS5k/200



Hi!

I'm tryin' to get a DS5000/200 to work. Currently, I see that declance.c
wasn't complete wrt. this system. Problem: ring buffer pointers not
initialized, Oops. I've copied that part from {PMAX_LANCE,ASIC_LANCE},
but that seems not to be enough. So now, the kernel loops infinitive
when trying to send a bootp packet.

Here's what I did:

static int __init dec_lance_init(struct net_device *dev, const int type)
{
[...]
	switch (type) {
[...]
	case PMAD_LANCE:
		slot = search_tc_card("PMAD-AA");
		claim_tc_card(slot);

		dev->mem_start = get_tc_base_addr(slot);
		dev->base_addr = dev->mem_start + 0x100000;
		dev->irq = get_tc_irq_nr(slot);
		esar_base = dev->mem_start + 0x1c0002;
		/*
		 * setup the pointer arrays, this sucks [tm] :-(
		 */
		for (i = 0; i < RX_RING_SIZE; i++) {
			lp->rx_buf_ptr_cpu[i] = (char *) (dev->mem_start + BUF_OFFSET_CPU
						 + 2 * i * RX_BUFF_SIZE);
			printk("lp->rx_buf_ptr_cpu[%d]=%p\n",
					i, lp->rx_buf_ptr_cpu[i]
			);
			lp->rx_buf_ptr_lnc[i] = (char *) (BUF_OFFSET_LNC
						     + i * RX_BUFF_SIZE);
			printk("lp->rx_buf_ptr_lnc[%d]=%p\n",
					i, lp->rx_buf_ptr_lnc[i]
			);
		}
		for (i = 0; i < TX_RING_SIZE; i++) {
			lp->tx_buf_ptr_cpu[i] = (char *) (dev->mem_start + BUF_OFFSET_CPU
					+ 2 * RX_RING_SIZE * RX_BUFF_SIZE
						 + 2 * i * TX_BUFF_SIZE);
			printk("lp->tx_buf_ptr_cpu[%d]=%p\n",
					i, lp->tx_buf_ptr_cpu[i]
			);
			lp->tx_buf_ptr_lnc[i] = (char *) (BUF_OFFSET_LNC
					    + RX_RING_SIZE * RX_BUFF_SIZE
						     + i * TX_BUFF_SIZE);
			printk("lp->tx_buf_ptr_lnc[%d]=%p\n",
					i, lp->tx_buf_ptr_lnc[i]
			);
		}

		break;
[...]
}

However, the chip actually does not transmit the frame. Please look
at it because I don't have a clue about the lance chip. Especially,
I see there problems:
	- lp->tx_buf_ptr_lnc[i] and lp->rx_buf_ptr_lnc[i] are
	  quite low addresses. Is this correct? Are they relative
	  to some other address (TC slot address?)
	- while kernel's bootp tries to send the packet, only
	  buffers [0] to [5] are used. Why are not all 16 buffers
	  used?

It would be *very* nice if the people who originally wrote this
driver could help me...

Here's the serial console's output:

>>boot 6/tftp console=ttyS3 root=/dev/nfs ip=bootp rw
1630208+139264+146848
This DECstation is a DS5000/200
Loading R[23]000 MMU routines.
[...]
TURBOchannel rev. 1 at 25.0 MHz (without parity)
    slot 5: DEC      PMAZ-AA  V5.3b   
    slot 6: DEC      PMAD-AA  V5.3a   
[...]
declance.c: v0.008 by Linux Mips DECstation task force
lp->rx_buf_ptr_cpu[0]=bf800240
lp->rx_buf_ptr_lnc[0]=00000120
lp->rx_buf_ptr_cpu[1]=bf800e40
lp->rx_buf_ptr_lnc[1]=00000720
lp->rx_buf_ptr_cpu[2]=bf801a40
lp->rx_buf_ptr_lnc[2]=00000d20
lp->rx_buf_ptr_cpu[3]=bf802640
lp->rx_buf_ptr_lnc[3]=00001320
lp->rx_buf_ptr_cpu[4]=bf803240
lp->rx_buf_ptr_lnc[4]=00001920
lp->rx_buf_ptr_cpu[5]=bf803e40
lp->rx_buf_ptr_lnc[5]=00001f20
lp->rx_buf_ptr_cpu[6]=bf804a40
lp->rx_buf_ptr_lnc[6]=00002520
lp->rx_buf_ptr_cpu[7]=bf805640
lp->rx_buf_ptr_lnc[7]=00002b20
lp->rx_buf_ptr_cpu[8]=bf806240
lp->rx_buf_ptr_lnc[8]=00003120
lp->rx_buf_ptr_cpu[9]=bf806e40
lp->rx_buf_ptr_lnc[9]=00003720
lp->rx_buf_ptr_cpu[10]=bf807a40
lp->rx_buf_ptr_lnc[10]=00003d20
lp->rx_buf_ptr_cpu[11]=bf808640
lp->rx_buf_ptr_lnc[11]=00004320
lp->rx_buf_ptr_cpu[12]=bf809240
lp->rx_buf_ptr_lnc[12]=00004920
lp->rx_buf_ptr_cpu[13]=bf809e40
lp->rx_buf_ptr_lnc[13]=00004f20
lp->rx_buf_ptr_cpu[14]=bf80aa40
lp->rx_buf_ptr_lnc[14]=00005520
lp->rx_buf_ptr_cpu[15]=bf80b640
lp->rx_buf_ptr_lnc[15]=00005b20
lp->tx_buf_ptr_cpu[0]=bf80c240
lp->tx_buf_ptr_lnc[0]=00006120
lp->tx_buf_ptr_cpu[1]=bf80ce40
lp->tx_buf_ptr_lnc[1]=00006720
lp->tx_buf_ptr_cpu[2]=bf80da40
lp->tx_buf_ptr_lnc[2]=00006d20
lp->tx_buf_ptr_cpu[3]=bf80e640
lp->tx_buf_ptr_lnc[3]=00007320
lp->tx_buf_ptr_cpu[4]=bf80f240
lp->tx_buf_ptr_lnc[4]=00007920
lp->tx_buf_ptr_cpu[5]=bf80fe40
lp->tx_buf_ptr_lnc[5]=00007f20
lp->tx_buf_ptr_cpu[6]=bf810a40
lp->tx_buf_ptr_lnc[6]=00008520
lp->tx_buf_ptr_cpu[7]=bf811640
lp->tx_buf_ptr_lnc[7]=00008b20
lp->tx_buf_ptr_cpu[8]=bf812240
lp->tx_buf_ptr_lnc[8]=00009120
lp->tx_buf_ptr_cpu[9]=bf812e40
lp->tx_buf_ptr_lnc[9]=00009720
lp->tx_buf_ptr_cpu[10]=bf813a40
lp->tx_buf_ptr_lnc[10]=00009d20
lp->tx_buf_ptr_cpu[11]=bf814640
lp->tx_buf_ptr_lnc[11]=0000a320
lp->tx_buf_ptr_cpu[12]=bf815240
lp->tx_buf_ptr_lnc[12]=0000a920
lp->tx_buf_ptr_cpu[13]=bf815e40
lp->tx_buf_ptr_lnc[13]=0000af20
lp->tx_buf_ptr_cpu[14]=bf816a40
lp->tx_buf_ptr_lnc[14]=0000b520
lp->tx_buf_ptr_cpu[15]=bf817640
lp->tx_buf_ptr_lnc[15]=0000bb20
eth0: PMAD-AA, addr = 08:00:2b:1c:44:ee, irq = 3
[...]
Sending BOOTP requests .lance_start_xmit:882: entry=0
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[0]=bf80c240, skb->data=8022c402, skblen=590)
.lance_start_xmit:882: entry=1
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[1]=bf80ce40, skb->data=8022c402, skblen=590)
.lance_start_xmit:882: entry=2
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[2]=bf80da40, skb->data=8022c402, skblen=590)
.lance_start_xmit:882: entry=3
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[3]=bf80e640, skb->data=8022c402, skblen=590)
.lance_start_xmit:882: entry=4
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[4]=bf80f240, skb->data=8022c402, skblen=590)
.lance_start_xmit:882: entry=5
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[5]=bf80fe40, skb->data=8022c402, skblen=590)
 timed out!
IP-Config: Retrying forever (NFS root)...
Sending BOOTP requests .lance_start_xmit:882: entry=0
lance_start_xmit:884: calling cp_to_buf((char *) lp->tx_buf_ptr_cpu[0]=bf80c240, skb->data=8022c402, skblen=590)
.lance_start_xmit:882: entry=1
[...]



Reply to: