Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/ne2k/dp8390.c

    r80099c19 ra88a6eac  
    5959#include <stdio.h>
    6060#include <libarch/ddi.h>
    61 #include <net/packet.h>
    62 #include <packet_client.h>
    6361#include "dp8390.h"
    6462
     
    7674        uint8_t status;
    7775       
    78         /** Pointer to next packet */
     76        /** Pointer to next frame */
    7977        uint8_t next;
    8078       
     
    142140static void ne2k_upload(ne2k_t *ne2k, void *buf, size_t addr, size_t size)
    143141{
     142        size_t esize_ru = (size + 1) & ~1;
    144143        size_t esize = size & ~1;
    145144       
    146         pio_write_8(ne2k->port + DP_RBCR0, esize & 0xff);
    147         pio_write_8(ne2k->port + DP_RBCR1, (esize >> 8) & 0xff);
     145        pio_write_8(ne2k->port + DP_RBCR0, esize_ru & 0xff);
     146        pio_write_8(ne2k->port + DP_RBCR1, (esize_ru >> 8) & 0xff);
    148147        pio_write_8(ne2k->port + DP_RSAR0, addr & 0xff);
    149148        pio_write_8(ne2k->port + DP_RSAR1, (addr >> 8) & 0xff);
     
    392391        /*
    393392         * Reset the transmit ring. If we were transmitting a frame,
    394          * we pretend that the packet is processed. Higher layers will
    395          * retransmit if the packet wasn't actually sent.
     393         * we pretend that the frame is processed. Higher layers will
     394         * retransmit if the frame wasn't actually sent.
    396395         */
    397396        ne2k->sq.dirty = false;
     
    403402 *
    404403 * @param[in,out] ne2k   Network interface structure.
    405  * @param[in]     packet Frame to be sent.
    406  *
    407  */
    408 void ne2k_send(nic_t *nic_data, packet_t *packet)
     404 * @param[in]     data   Pointer to frame data
     405 * @param[in]     size   Frame size in bytes
     406 *
     407 */
     408void ne2k_send(nic_t *nic_data, void *data, size_t size)
    409409{
    410410        ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data);
     
    418418                fibril_condvar_wait(&ne2k->sq_cv, &ne2k->sq_mutex);
    419419        }
    420         void *buf = packet_get_data(packet);
    421         size_t size = packet_get_data_length(packet);
    422420       
    423421        if ((size < ETH_MIN_PACK_SIZE) || (size > ETH_MAX_PACK_SIZE_TAGGED)) {
     
    427425
    428426        /* Upload the frame to the ethernet card */
    429         ne2k_upload(ne2k, buf, ne2k->sq.page * DP_PAGE, size);
     427        ne2k_upload(ne2k, data, ne2k->sq.page * DP_PAGE, size);
    430428        ne2k->sq.dirty = true;
    431429        ne2k->sq.size = size;
     
    437435        pio_write_8(ne2k->port + DP_CR, CR_TXP | CR_STA);
    438436        fibril_mutex_unlock(&ne2k->sq_mutex);
    439 
    440         /* Relase packet */
    441         nic_release_packet(nic_data, packet);
    442437}
    443438
     
    451446                return NULL;
    452447       
    453         void *buf = packet_suffix(frame->packet, length);
    454         bzero(buf, length);
     448        bzero(frame->data, length);
    455449        uint8_t last = page + length / DP_PAGE;
    456450       
     
    458452                size_t left = (ne2k->stop_page - page) * DP_PAGE
    459453                    - sizeof(recv_header_t);
    460                 ne2k_download(ne2k, buf, page * DP_PAGE + sizeof(recv_header_t),
     454                ne2k_download(ne2k, frame->data, page * DP_PAGE + sizeof(recv_header_t),
    461455                    left);
    462                 ne2k_download(ne2k, buf + left, ne2k->start_page * DP_PAGE,
     456                ne2k_download(ne2k, frame->data + left, ne2k->start_page * DP_PAGE,
    463457                    length - left);
    464458        } else {
    465                 ne2k_download(ne2k, buf, page * DP_PAGE + sizeof(recv_header_t),
     459                ne2k_download(ne2k, frame->data, page * DP_PAGE + sizeof(recv_header_t),
    466460                    length);
    467461        }
     
    544538                 * Update the boundary pointer
    545539                 * to the value of the page
    546                  * prior to the next packet to
     540                 * prior to the next frame to
    547541                 * be processed.
    548542                 */
     
    587581                fibril_mutex_lock(&ne2k->sq_mutex);
    588582                if (ne2k->sq.dirty) {
    589                         /* Prepare the buffer for next packet */
     583                        /* Prepare the buffer for next frame */
    590584                        ne2k->sq.dirty = false;
    591585                        ne2k->sq.size = 0;
Note: See TracChangeset for help on using the changeset viewer.