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

Subversion Repositories or1k

[/] [or1k/] [tags/] [stable_0_1_0/] [or1ksim/] [peripheral/] [eth.c] - Diff between revs 744 and 836

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 744 Rev 836
Line 183... Line 183...
 
 
        /* set BD status */
        /* set BD status */
        if (nwritten == eth->tx.packet_length) {
        if (nwritten == eth->tx.packet_length) {
            CLEAR_FLAG (eth->tx.bd, ETH_TX_BD, READY);
            CLEAR_FLAG (eth->tx.bd, ETH_TX_BD, READY);
            SET_FLAG (eth->regs.int_source, ETH_INT_SOURCE, TXB);
            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");
            debug (3, "TX - entering state IDLE\n");
            eth->tx.state = ETH_TXSTATE_IDLE;
            eth->tx.state = ETH_TXSTATE_IDLE;
            debug (3, "send (%d)bytes OK\n", nwritten);
            debug (3, "send (%d)bytes OK\n", nwritten);
        }
        }
Line 297... Line 298...
        case ETH_RTX_FILE:
        case ETH_RTX_FILE:
            /* Read packet length */
            /* Read packet length */
            if ( eth_read_rx_file( eth, &(eth->rx.packet_length), sizeof(eth->rx.packet_length) )
            if ( eth_read_rx_file( eth, &(eth->rx.packet_length), sizeof(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) */
                /* 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;
                cont_run = 0;
                break;
                break;
            }
            }
 
 
            /* Packet must be big enough to hold a header */
            /* Packet must be big enough to hold a header */
Line 351... Line 352...
                    eth->mac_address[1] != eth->rx_buff[4] ||
                    eth->mac_address[1] != eth->rx_buff[4] ||
                    eth->mac_address[0] != eth->rx_buff[5])
                    eth->mac_address[0] != eth->rx_buff[5])
                        break;
                        break;
            }
            }
 
 
 
            break;
 
        }
 
 
            eth->rx.packet_length = nread;
            eth->rx.packet_length = nread;
            eth->rx.bytes_left = nread;
            eth->rx.bytes_left = nread;
            eth->rx.bytes_read = 0;
            eth->rx.bytes_read = 0;
 
 
            debug (3, "RX - entering state WRITEFIFO\n");
            debug (3, "RX - entering state WRITEFIFO\n");
            eth->rx.state = ETH_RXSTATE_WRITEFIFO;
            eth->rx.state = ETH_RXSTATE_WRITEFIFO;
 
 
            break;
            break;
        }
 
        break;
 
 
 
    case ETH_RXSTATE_WRITEFIFO:
    case ETH_RXSTATE_WRITEFIFO:
#if 1
#if 1
        send_word = ((unsigned long)eth->rx_buff[eth->rx.bytes_read]   << 24) |
        send_word = ((unsigned long)eth->rx_buff[eth->rx.bytes_read]   << 24) |
                    ((unsigned long)eth->rx_buff[eth->rx.bytes_read+1] << 16) |
                    ((unsigned long)eth->rx_buff[eth->rx.bytes_read+1] << 16) |
Line 384... Line 386...
        if ( eth->rx.bytes_left <= 0 ) {
        if ( eth->rx.bytes_left <= 0 ) {
            /* Write result to bd */
            /* Write result to bd */
            SET_FIELD( eth->rx.bd, ETH_RX_BD, LENGTH, eth->rx.packet_length );
            SET_FIELD( eth->rx.bd, ETH_RX_BD, LENGTH, eth->rx.packet_length );
            CLEAR_FLAG( eth->rx.bd, ETH_RX_BD, READY);
            CLEAR_FLAG( eth->rx.bd, ETH_RX_BD, READY);
            SET_FLAG( eth->regs.int_source, ETH_INT_SOURCE, RXB);
            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 ) )
            if ( eth->rx.packet_length < GET_FIELD( eth->regs.packetlen, ETH_PACKETLEN, MINFL ) )
                SET_FLAG( eth->rx.bd, ETH_RX_BD, TOOSHORT);
                SET_FLAG( eth->rx.bd, ETH_RX_BD, TOOSHORT);
            if ( eth->rx.packet_length > GET_FIELD( eth->regs.packetlen, ETH_PACKETLEN, MAXFL ) )
            if ( eth->rx.packet_length > GET_FIELD( eth->regs.packetlen, ETH_PACKETLEN, MAXFL ) )
                SET_FLAG( eth->rx.bd, ETH_RX_BD, TOOBIG);
                SET_FLAG( eth->rx.bd, ETH_RX_BD, TOOBIG);
Line 449... Line 452...
            debug( 3,  "Ethernet: Error seeking RX file\n" );
            debug( 3,  "Ethernet: Error seeking RX file\n" );
            return 0;
            return 0;
        }
        }
 
 
    result = read( eth->rx.fd, buf, count );
    result = read( eth->rx.fd, buf, count );
 
    debug (4, "Ethernet: read result = %d \n", result);
    if ( eth->rx.offset && result >= 0 )
    if ( eth->rx.offset && result >= 0 )
        *(eth->rx.offset) += result;
        *(eth->rx.offset) += result;
 
 
    return result;
    return result;
}
}

powered by: WebSVN 2.1.0

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