OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 835 to Rev 836
    Reverse comparison

Rev 835 → Rev 836

/trunk/or1ksim/testbench/eth.c
46,10 → 46,18
printf ("Int\n");
switch (*eth_int_source & 0x7f) {
case 0x2 : printf ("Transmit Error.\n"); break;
case 0x8 : printf ("Receive Error\n");break;
case 0x2 :
printf ("Transmit Error.\n");
*eth_int_source = 0x2;
break;
case 0x8 :
printf ("Receive Error\n");
*eth_int_source = 0x8;
break;
case 0x4 :
printf ("Receive Frame\n");
*eth_int_source = 0x4;
 
CLEAR_FLAG(*eth_moder, ETH_MODER, RXEN);
len = GET_FIELD(eth_bd_base[*eth_tx_bd_num + 2], ETH_RX_BD, LENGTH);
60,17 → 68,21
exit(1);
}
break;
case 0x10: printf ("Busy\n"); break;
case 0x10:
printf ("Busy\n");
*eth_int_source = 0x10;
break;
case 0x1 :
printf ("Transmit Frame.\n");
CLEAR_FLAG(*eth_moder, ETH_MODER, RXEN);
*eth_int_source = 0x1;
CLEAR_FLAG(*eth_moder, ETH_MODER, TXEN);
break;
default:
printf ("Invalid int @ %0x\n", *eth_int_source & 0x1f);
exit (1);
printf ("Invalid int @ %0x\n", (unsigned int)*eth_int_source & 0x7f);
*eth_int_source = 0x7f;
exit (1);
}
*eth_int_source = 0;
 
mtspr(SPR_PICSR, 0);
int_happend = 1;
101,7 → 113,7
/* Now wait till sent */
while ( TEST_FLAG( eth_bd_base[tx_bindex], ETH_TX_BD, READY ) );
CLEAR_FLAG(*eth_moder, ETH_MODER, TXEN);
*eth_int_source = 0;
*eth_int_source = 0x7f;
}
 
static void transmit_one_packet_int( void )
138,7 → 150,7
 
while ( TEST_FLAG( eth_bd_base[rx_bindex], ETH_RX_BD, READY ) );
CLEAR_FLAG(*eth_moder, ETH_MODER, RXEN);
*eth_int_source = 0;
*eth_int_source = 0x7f;
len = GET_FIELD(eth_bd_base[rx_bindex], ETH_RX_BD, LENGTH);
for (i=0; i<len; i++)
189,17 → 201,19
mtspr (SPR_SR, mfspr(SPR_SR) | SPR_SR_IEE);
mtspr (SPR_PICMR, mfspr(SPR_PICMR) | (0x00000001L << ETH_INT_LINE));
printf("set mask flags\n");
printf("set mask flags TX\n");
SET_FLAG(*eth_int_mask, ETH_INT_MASK, TXB_M);
transmit_one_packet_int();
tx_bindex += 2;
printf("waiting for int\n");
while (!int_happend);
CLEAR_FLAG(*eth_int_mask, ETH_INT_MASK, TXB_M);
printf("seting mask flagx RX\n");
printf("seting mask flag RX\n");
SET_FLAG(*eth_int_mask, ETH_INT_MASK, RXB_M);
receive_one_packet_int();
printf("waiting for int RX\n");
rx_bindex += 2;
printf("waiting for int\n");
while (!int_happend);
CLEAR_FLAG(*eth_int_mask, ETH_INT_MASK, RXB_M);
207,7 → 221,7
printf( "Ending Ethernet test\n" );
report (0xdeaddead);
return 0;
exit(1);
}
 
 
/trunk/or1ksim/peripheral/eth.c
185,6 → 185,7
if (nwritten == eth->tx.packet_length) {
CLEAR_FLAG (eth->tx.bd, ETH_TX_BD, READY);
SET_FLAG (eth->regs.int_source, ETH_INT_SOURCE, TXB);
debug (4, "ETH_INT_SOURCE = %0x\n", eth->regs.int_source);
debug (3, "TX - entering state IDLE\n");
eth->tx.state = ETH_TXSTATE_IDLE;
299,7 → 300,7
if ( eth_read_rx_file( eth, &(eth->rx.packet_length), sizeof(eth->rx.packet_length) )
< sizeof(eth->rx.packet_length) ) {
/* TODO: just do what real ethernet would do (some kind of error state) */
debug (4, "eth_start_rx(): File does not have a packet ready for RX\n" );
debug (4, "eth_start_rx(): File does not have a packet ready for RX (len = %d)\n", eth->rx.packet_length );
cont_run = 0;
break;
}
309,7 → 310,7
debug( 3, "eth_start_rx(): Packet too small\n" );
eth_rx_next_packet( eth );
 
debug (3, "RX - entering state IDLE\n");
debug (3, "RX - entering state IDLE\n");
eth->rx.state = ETH_RXSTATE_IDLE;
break;
}
353,17 → 354,18
break;
}
eth->rx.packet_length = nread;
eth->rx.bytes_left = nread;
eth->rx.bytes_read = 0;
debug (3, "RX - entering state WRITEFIFO\n");
eth->rx.state = ETH_RXSTATE_WRITEFIFO;
break;
}
break;
 
eth->rx.packet_length = nread;
eth->rx.bytes_left = nread;
eth->rx.bytes_read = 0;
 
debug (3, "RX - entering state WRITEFIFO\n");
eth->rx.state = ETH_RXSTATE_WRITEFIFO;
break;
case ETH_RXSTATE_WRITEFIFO:
#if 1
send_word = ((unsigned long)eth->rx_buff[eth->rx.bytes_read] << 24) |
386,6 → 388,7
SET_FIELD( eth->rx.bd, ETH_RX_BD, LENGTH, eth->rx.packet_length );
CLEAR_FLAG( eth->rx.bd, ETH_RX_BD, READY);
SET_FLAG( eth->regs.int_source, ETH_INT_SOURCE, RXB);
debug (4, "ETH_INT_SOURCE = %0x\n", eth->regs.int_source);
if ( eth->rx.packet_length < GET_FIELD( eth->regs.packetlen, ETH_PACKETLEN, MINFL ) )
SET_FLAG( eth->rx.bd, ETH_RX_BD, TOOSHORT);
451,7 → 454,7
}
 
result = read( eth->rx.fd, buf, count );
debug (4, "Ethernet: read result = %d \n", result);
if ( eth->rx.offset && result >= 0 )
*(eth->rx.offset) += result;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.