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; |
|