Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 1bc35b5 in mainline


Ignore:
Timestamp:
2012-01-19T08:13:45Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
d8da56b
Parents:
3ea725e
Message:

Remove most use of packet_t from NIC drivers.

Location:
uspace
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/e1k/e1k.c

    r3ea725e r1bc35b5  
    5252#include <nil_remote.h>
    5353#include <ops/nic.h>
    54 #include <packet_client.h>
    55 #include <packet_remote.h>
    56 #include <net/packet_header.h>
    5754#include "e1k.h"
    5855
     
    6259
    6360/* Must be power of 8 */
    64 #define E1000_RX_PACKETS_COUNT  128
    65 #define E1000_TX_PACKETS_COUNT  128
     61#define E1000_RX_FRAME_COUNT  128
     62#define E1000_TX_FRAME_COUNT  128
    6663
    6764#define E1000_RECEIVE_ADDRESS  16
    6865
    69 /** Maximum sending packet size */
     66/** Maximum sending frame size */
    7067#define E1000_MAX_SEND_FRAME_SIZE  2048
    71 /** Maximum receiving packet size */
    72 #define E1000_MAX_RECEIVE_PACKET_SIZE  2048
     68/** Maximum receiving frmae size */
     69#define E1000_MAX_RECEIVE_FRAME_SIZE  2048
    7370
    7471/** nic_driver_data_t* -> e1000_t* cast */
     
    137134        void *rx_ring_virt;
    138135       
    139         /** Packets in rx ring  */
    140         packet_t **rx_ring_packets;
     136        /** Ring of RX frames, physical address */
     137        void **rx_frame_phys;
     138        /** Ring of RX frames, virtual address */
     139        void **rx_frame_virt;
    141140       
    142141        /** VLAN tag */
    143142        uint16_t vlan_tag;
    144143       
    145         /** Add VLAN tag to packet */
     144        /** Add VLAN tag to frame */
    146145        bool vlan_tag_add;
    147146       
     
    477476}
    478477
    479 /** Get state of acceptance of weird packets
     478/** Get state of acceptance of weird frames
    480479 *
    481480 * @param      device Device to check
     
    495494};
    496495
    497 /** Set acceptance of weird packets
     496/** Set acceptance of weird frames
    498497 *
    499498 * @param device Device to update
     
    679678}
    680679
    681 /** Disable receiving packets for default address
     680/** Disable receiving frames for default address
    682681 *
    683682 * @param e1000 E1000 data structure
     
    691690}
    692691
    693 /** Enable receiving packets for default address
     692/** Enable receiving frames for default address
    694693 *
    695694 * @param e1000 E1000 data structure
     
    751750}
    752751
    753 /** Enable accepting of broadcast packets
     752/** Enable accepting of broadcast frames
    754753 *
    755754 * @param e1000 E1000 data structure
     
    763762}
    764763
    765 /** Disable accepting of broadcast packets
     764/** Disable accepting of broadcast frames
    766765 *
    767766 * @param e1000 E1000 data structure
     
    799798}
    800799
    801 /** Set multicast packets acceptance mode
     800/** Set multicast frames acceptance mode
    802801 *
    803802 * @param nic      NIC device to update
     
    853852}
    854853
    855 /** Set unicast packets acceptance mode
     854/** Set unicast frames acceptance mode
    856855 *
    857856 * @param nic      NIC device to update
     
    911910}
    912911
    913 /** Set broadcast packets acceptance mode
     912/** Set broadcast frames acceptance mode
    914913 *
    915914 * @param nic  NIC device to update
     
    996995        if (vlan_mask) {
    997996                /*
    998                  * Disable receiving, so that packet matching
     997                 * Disable receiving, so that frame matching
    999998                 * partially written VLAN is not received.
    1000999                 */
     
    10631062}
    10641063
    1065 /** Fill receive descriptor with new empty packet
    1066  *
    1067  * Store packet in e1000->rx_ring_packets
     1064/** Fill receive descriptor with new empty buffer
     1065 *
     1066 * Store frame in e1000->rx_frame_phys
    10681067 *
    10691068 * @param nic    NIC data stricture
     
    10741073{
    10751074        e1000_t *e1000 = DRIVER_DATA_NIC(nic);
    1076         packet_t *packet =
    1077             nic_alloc_packet(nic, E1000_MAX_RECEIVE_PACKET_SIZE);
    1078        
    1079         assert(packet);
    1080        
    1081         *(e1000->rx_ring_packets + offset) = packet;
     1075       
    10821076        e1000_rx_descriptor_t *rx_descriptor = (e1000_rx_descriptor_t *)
    10831077            (e1000->rx_ring_virt + offset * sizeof(e1000_rx_descriptor_t));
    10841078       
    1085         void *phys;
    1086         int rc =
    1087             nic_dma_lock_packet(packet, E1000_MAX_RECEIVE_PACKET_SIZE, &phys);
    1088        
    1089         if (rc == EOK)
    1090                 rx_descriptor->phys_addr = PTR_TO_U64(phys + packet->data_start);
    1091         else
    1092                 rx_descriptor->phys_addr = 0;
    1093        
     1079        rx_descriptor->phys_addr = PTR_TO_U64(e1000->rx_frame_phys[offset]);
    10941080        rx_descriptor->length = 0;
    10951081        rx_descriptor->checksum = 0;
     
    11551141}
    11561142
    1157 /** Receive packets
     1143/** Receive frames
    11581144 *
    11591145 * @param nic NIC data
    11601146 *
    11611147 */
    1162 static void e1000_receive_packets(nic_t *nic)
     1148static void e1000_receive_frames(nic_t *nic)
    11631149{
    11641150        e1000_t *e1000 = DRIVER_DATA_NIC(nic);
     
    11671153       
    11681154        uint32_t *tail_addr = E1000_REG_ADDR(e1000, E1000_RDT);
    1169         uint32_t next_tail = e1000_inc_tail(*tail_addr, E1000_RX_PACKETS_COUNT);
     1155        uint32_t next_tail = e1000_inc_tail(*tail_addr, E1000_RX_FRAME_COUNT);
    11701156       
    11711157        e1000_rx_descriptor_t *rx_descriptor = (e1000_rx_descriptor_t *)
     
    11731159       
    11741160        while (rx_descriptor->status & 0x01) {
    1175                 uint32_t packet_size = rx_descriptor->length - E1000_CRC_SIZE;
     1161                uint32_t frame_size = rx_descriptor->length - E1000_CRC_SIZE;
    11761162               
    1177                 packet_t *packet = *(e1000->rx_ring_packets + next_tail);
    1178                 packet_suffix(packet, packet_size);
    1179                
    1180                 nic_dma_unlock_packet(packet, E1000_MAX_RECEIVE_PACKET_SIZE);
    1181                 nic_received_packet(nic, packet);
     1163                nic_frame_t *frame = nic_alloc_frame(nic, frame_size);
     1164                if (frame != NULL) {
     1165                        memcpy(frame->data, e1000->rx_frame_virt[next_tail], frame_size);
     1166                        nic_received_frame(nic, frame);
     1167                } else {
     1168                        ddf_msg(LVL_ERROR, "Memory allocation failed. Frame dropped.");
     1169                }
    11821170               
    11831171                e1000_fill_new_rx_descriptor(nic, next_tail);
    11841172               
    1185                 *tail_addr = e1000_inc_tail(*tail_addr, E1000_RX_PACKETS_COUNT);
    1186                 next_tail = e1000_inc_tail(*tail_addr, E1000_RX_PACKETS_COUNT);
     1173                *tail_addr = e1000_inc_tail(*tail_addr, E1000_RX_FRAME_COUNT);
     1174                next_tail = e1000_inc_tail(*tail_addr, E1000_RX_FRAME_COUNT);
    11871175               
    11881176                rx_descriptor = (e1000_rx_descriptor_t *)
     
    12251213{
    12261214        if (icr & ICR_RXT0)
    1227                 e1000_receive_packets(nic);
     1215                e1000_receive_frames(nic);
    12281216}
    12291217
     
    12741262}
    12751263
    1276 /** Force receiving all packets in the receive buffer
     1264/** Force receiving all frames in the receive buffer
    12771265 *
    12781266 * @param nic NIC data
     
    13471335static void e1000_initialize_rx_registers(e1000_t *e1000)
    13481336{
    1349         E1000_REG_WRITE(e1000, E1000_RDLEN, E1000_RX_PACKETS_COUNT * 16);
     1337        E1000_REG_WRITE(e1000, E1000_RDLEN, E1000_RX_FRAME_COUNT * 16);
    13501338        E1000_REG_WRITE(e1000, E1000_RDH, 0);
    13511339       
    13521340        /* It is not posible to let HW use all descriptors */
    1353         E1000_REG_WRITE(e1000, E1000_RDT, E1000_RX_PACKETS_COUNT - 1);
     1341        E1000_REG_WRITE(e1000, E1000_RDT, E1000_RX_FRAME_COUNT - 1);
    13541342       
    13551343        /* Set Broadcast Enable Bit */
     
    13711359       
    13721360        int rc = dmamem_map_anonymous(
    1373             E1000_RX_PACKETS_COUNT * sizeof(e1000_rx_descriptor_t),
     1361            E1000_RX_FRAME_COUNT * sizeof(e1000_rx_descriptor_t),
    13741362            AS_AREA_READ | AS_AREA_WRITE, 0, &e1000->rx_ring_phys,
    13751363            &e1000->rx_ring_virt);
     
    13821370            (uint32_t) PTR_TO_U64(e1000->rx_ring_phys));
    13831371       
    1384         e1000->rx_ring_packets =
    1385             malloc(E1000_RX_PACKETS_COUNT * sizeof(packet_t *));
    1386         // FIXME: Check return value
    1387        
     1372        e1000->rx_frame_phys =
     1373            calloc(E1000_RX_FRAME_COUNT, sizeof(void *));
     1374        e1000->rx_frame_virt =
     1375            calloc(E1000_RX_FRAME_COUNT, sizeof(void *));
     1376        if (e1000->rx_frame_phys == NULL || e1000->rx_frame_virt == NULL) {
     1377                rc = ENOMEM;
     1378                goto error;
     1379        }
     1380       
     1381        size_t i;
     1382        void *frame_virt;
     1383        void *frame_phys;
     1384       
     1385        for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
     1386                rc = dmamem_map_anonymous(
     1387                    E1000_MAX_SEND_FRAME_SIZE, AS_AREA_READ | AS_AREA_WRITE,
     1388                    0, &frame_phys, &frame_virt);
     1389                if (rc != EOK)
     1390                        goto error;
     1391               
     1392                e1000->rx_frame_virt[i] = frame_virt;
     1393                e1000->rx_frame_phys[i] = frame_phys;
     1394        }
     1395       
     1396        /* Write descriptor */
     1397        for (i = 0; i < E1000_RX_FRAME_COUNT; i++)
     1398                e1000_fill_new_rx_descriptor(nic, i);
     1399       
     1400        e1000_initialize_rx_registers(e1000);
     1401       
     1402        fibril_mutex_unlock(&e1000->rx_lock);
     1403        return EOK;
     1404error:
     1405        for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
     1406                if (e1000->rx_frame_virt[i] != NULL) {
     1407                        dmamem_unmap_anonymous(e1000->rx_frame_virt[i]);
     1408                        e1000->rx_frame_virt[i] = NULL;
     1409                        e1000->rx_frame_phys[i] = NULL;
     1410                }
     1411        }
     1412        if (e1000->rx_frame_phys != NULL) {
     1413                free(e1000->rx_frame_phys);
     1414                e1000->rx_frame_phys = NULL;
     1415        }
     1416        if (e1000->rx_frame_virt != NULL) {
     1417                free(e1000->rx_frame_virt);
     1418                e1000->rx_frame_phys = NULL;
     1419        }
     1420        return rc;
     1421}
     1422
     1423/** Uninitialize receive structure
     1424 *
     1425 * @param nic NIC data
     1426 *
     1427 */
     1428static void e1000_uninitialize_rx_structure(nic_t *nic)
     1429{
     1430        e1000_t *e1000 = DRIVER_DATA_NIC(nic);
     1431       
     1432        /* Write descriptor */
     1433        for (unsigned int offset = 0; offset < E1000_RX_FRAME_COUNT; offset++) {
     1434                dmamem_unmap_anonymous(e1000->rx_frame_virt[offset]);
     1435                e1000->rx_frame_virt[offset] = NULL;
     1436                e1000->rx_frame_phys[offset] = NULL;
     1437        }
     1438       
     1439        free(e1000->rx_frame_virt);
     1440        free(e1000->rx_frame_phys);
     1441        e1000->rx_frame_virt = NULL;
     1442        e1000->rx_frame_phys = NULL;
     1443        dmamem_unmap_anonymous(e1000->rx_ring_virt);
     1444}
     1445
     1446/** Clear receive descriptor ring
     1447 *
     1448 * @param e1000 E1000 data
     1449 *
     1450 */
     1451static void e1000_clear_rx_ring(e1000_t *e1000)
     1452{
    13881453        /* Write descriptor */
    13891454        for (unsigned int offset = 0;
    1390             offset < E1000_RX_PACKETS_COUNT;
    1391             offset++)
    1392                 e1000_fill_new_rx_descriptor(nic, offset);
    1393        
    1394         e1000_initialize_rx_registers(e1000);
    1395        
    1396         fibril_mutex_unlock(&e1000->rx_lock);
    1397         return EOK;
    1398 }
    1399 
    1400 /** Uninitialize receive structure
    1401  *
    1402  * @param nic NIC data
    1403  *
    1404  */
    1405 static void e1000_uninitialize_rx_structure(nic_t *nic)
    1406 {
    1407         e1000_t *e1000 = DRIVER_DATA_NIC(nic);
    1408        
    1409         /* Write descriptor */
    1410         for (unsigned int offset = 0;
    1411             offset < E1000_RX_PACKETS_COUNT;
    1412             offset++) {
    1413                 packet_t *packet = *(e1000->rx_ring_packets + offset);
    1414                 nic_dma_unlock_packet(packet, E1000_MAX_RECEIVE_PACKET_SIZE);
    1415                 nic_release_packet(nic, packet);
    1416         }
    1417        
    1418         free(e1000->rx_ring_packets);
    1419         dmamem_unmap_anonymous(e1000->rx_ring_virt);
    1420 }
    1421 
    1422 /** Clear receive descriptor ring
    1423  *
    1424  * @param e1000 E1000 data
    1425  *
    1426  */
    1427 static void e1000_clear_rx_ring(e1000_t *e1000)
    1428 {
    1429         /* Write descriptor */
    1430         for (unsigned int offset = 0;
    1431             offset < E1000_RX_PACKETS_COUNT;
     1455            offset < E1000_RX_FRAME_COUNT;
    14321456            offset++)
    14331457                e1000_clear_rx_descriptor(e1000, offset);
     
    14981522static void e1000_initialize_tx_registers(e1000_t *e1000)
    14991523{
    1500         E1000_REG_WRITE(e1000, E1000_TDLEN, E1000_TX_PACKETS_COUNT * 16);
     1524        E1000_REG_WRITE(e1000, E1000_TDLEN, E1000_TX_FRAME_COUNT * 16);
    15011525        E1000_REG_WRITE(e1000, E1000_TDH, 0);
    15021526        E1000_REG_WRITE(e1000, E1000_TDT, 0);
     
    15301554       
    15311555        int rc = dmamem_map_anonymous(
    1532             E1000_TX_PACKETS_COUNT * sizeof(e1000_tx_descriptor_t),
     1556            E1000_TX_FRAME_COUNT * sizeof(e1000_tx_descriptor_t),
    15331557            AS_AREA_READ | AS_AREA_WRITE, 0, &e1000->tx_ring_phys,
    15341558            &e1000->tx_ring_virt);
     
    15371561       
    15381562        bzero(e1000->tx_ring_virt,
    1539             E1000_TX_PACKETS_COUNT * sizeof(e1000_tx_descriptor_t));
    1540        
    1541         e1000->tx_frame_phys = calloc(E1000_TX_PACKETS_COUNT, sizeof(void *));
    1542         e1000->tx_frame_virt = calloc(E1000_TX_PACKETS_COUNT, sizeof(void *));
     1563            E1000_TX_FRAME_COUNT * sizeof(e1000_tx_descriptor_t));
     1564       
     1565        e1000->tx_frame_phys = calloc(E1000_TX_FRAME_COUNT, sizeof(void *));
     1566        e1000->tx_frame_virt = calloc(E1000_TX_FRAME_COUNT, sizeof(void *));
    15431567
    15441568        if (e1000->tx_frame_phys == NULL || e1000->tx_frame_virt == NULL) {
     
    15471571        }
    15481572       
    1549         for (i = 0; i < E1000_TX_PACKETS_COUNT; i++) {
     1573        for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    15501574                rc = dmamem_map_anonymous(
    15511575                    E1000_MAX_SEND_FRAME_SIZE, AS_AREA_READ | AS_AREA_WRITE,
     
    15721596       
    15731597        if (e1000->tx_frame_phys != NULL && e1000->tx_frame_virt != NULL) {
    1574                 for (i = 0; i < E1000_TX_PACKETS_COUNT; i++) {
     1598                for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    15751599                        if (e1000->tx_frame_virt[i] != NULL) {
    15761600                                dmamem_unmap_anonymous(e1000->tx_frame_virt[i]);
     
    16031627        size_t i;
    16041628       
    1605         for (i = 0; i < E1000_TX_PACKETS_COUNT; i++) {
     1629        for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    16061630                dmamem_unmap_anonymous(e1000->tx_frame_virt[i]);
    16071631                e1000->tx_frame_virt[i] = NULL;
     
    16301654        /* Write descriptor */
    16311655        for (unsigned int offset = 0;
    1632             offset < E1000_TX_PACKETS_COUNT;
     1656            offset < E1000_TX_FRAME_COUNT;
    16331657            offset++)
    16341658                e1000_clear_tx_descriptor(nic, offset);
     
    16871711}
    16881712
    1689 /** Activate the device to receive and transmit packets
     1713/** Activate the device to receive and transmit frames
    16901714 *
    16911715 * @param nic NIC driver data
     
    22832307       
    22842308        if (!descriptor_available) {
    2285                 /* Packet lost */
     2309                /* Frame lost */
    22862310                fibril_mutex_unlock(&e1000->tx_lock);
    22872311                return;
     
    23122336       
    23132337        tdt++;
    2314         if (tdt == E1000_TX_PACKETS_COUNT)
     2338        if (tdt == E1000_TX_FRAME_COUNT)
    23152339                tdt = 0;
    23162340       
  • uspace/drv/nic/e1k/e1k.h

    r3ea725e r1bc35b5  
    3939#include <stdint.h>
    4040
    41 /** Ethernet CRC size after packet received in rx_descriptor */
     41/** Ethernet CRC size after frame received in rx_descriptor */
    4242#define E1000_CRC_SIZE  4
    4343
     
    109109/** Transmit descriptor COMMAND field bits */
    110110typedef enum {
    111         TXDESCRIPTOR_COMMAND_VLE = (1 << 6),   /**< VLAN Packet Enable */
     111        TXDESCRIPTOR_COMMAND_VLE = (1 << 6),   /**< VLAN frame Enable */
    112112        TXDESCRIPTOR_COMMAND_RS = (1 << 3),    /**< Report Status */
    113113        TXDESCRIPTOR_COMMAND_IFCS = (1 << 1),  /**< Insert FCS */
  • uspace/drv/nic/ne2k/dp8390.c

    r3ea725e r1bc35b5  
    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       
     
    393391        /*
    394392         * Reset the transmit ring. If we were transmitting a frame,
    395          * we pretend that the packet is processed. Higher layers will
    396          * 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.
    397395         */
    398396        ne2k->sq.dirty = false;
     
    448446                return NULL;
    449447       
    450         void *buf = packet_suffix(frame->packet, length);
    451         bzero(buf, length);
     448        bzero(frame->data, length);
    452449        uint8_t last = page + length / DP_PAGE;
    453450       
     
    455452                size_t left = (ne2k->stop_page - page) * DP_PAGE
    456453                    - sizeof(recv_header_t);
    457                 ne2k_download(ne2k, buf, page * DP_PAGE + sizeof(recv_header_t),
     454                ne2k_download(ne2k, frame->data, page * DP_PAGE + sizeof(recv_header_t),
    458455                    left);
    459                 ne2k_download(ne2k, buf + left, ne2k->start_page * DP_PAGE,
     456                ne2k_download(ne2k, frame->data + left, ne2k->start_page * DP_PAGE,
    460457                    length - left);
    461458        } else {
    462                 ne2k_download(ne2k, buf, page * DP_PAGE + sizeof(recv_header_t),
     459                ne2k_download(ne2k, frame->data, page * DP_PAGE + sizeof(recv_header_t),
    463460                    length);
    464461        }
     
    541538                 * Update the boundary pointer
    542539                 * to the value of the page
    543                  * prior to the next packet to
     540                 * prior to the next frame to
    544541                 * be processed.
    545542                 */
     
    584581                fibril_mutex_lock(&ne2k->sq_mutex);
    585582                if (ne2k->sq.dirty) {
    586                         /* Prepare the buffer for next packet */
     583                        /* Prepare the buffer for next frame */
    587584                        ne2k->sq.dirty = false;
    588585                        ne2k->sq.size = 0;
  • uspace/drv/nic/ne2k/ne2k.c

    r3ea725e r1bc35b5  
    261261        /* Note: some frame with previous physical address may slip to NIL here
    262262         * (for a moment the filtering is not exact), but ethernet should be OK with
    263          * that. Some packet may also be lost, but this is not a problem.
     263         * that. Some frames may also be lost, but this is not a problem.
    264264         */
    265265        ne2k_set_physical_address((ne2k_t *) nic_get_specific(nic_data), address);
  • uspace/drv/nic/rtl8139/defs.h

    r3ea725e r1bc35b5  
    4242#define RTL8139_IO_SIZE 256
    4343
    44 /** The maximal transmitted packet length in bytes allowed according to RTL8139
     44/** The maximal transmitted frame length in bytes allowed according to RTL8139
    4545 *  documentation (see SIZE part of TSD documentation)
    4646 */
    47 #define RTL8139_PACKET_MAX_LENGTH 1792
     47#define RTL8139_FRAME_MAX_LENGTH 1792
    4848
    4949
     
    9494
    9595        CR      = 0x37,  /**< Command register, 1b */
    96         CAPR    = 0x38,  /**< Current address of packet read, 2b */
     96        CAPR    = 0x38,  /**< Current address of frame read, 2b */
    9797        CBA     = 0x3a,  /**< Current buffer address, 2b */
    9898
     
    282282        RCR_MulERINT = 1 << 17,    /**< Multiple early interrupt select */
    283283
    284         /** Minimal error packet length (1 = 8B, 0 = 64B). If AER/AR is set, RER8
     284        /** Minimal error frame length (1 = 8B, 0 = 64B). If AER/AR is set, RER8
    285285         * is "Don't care"
    286286         */
     
    302302
    303303        RCR_WRAP              = 1 << 7,  /**< Rx buffer wrapped */
    304         RCR_ACCEPT_ERROR      = 1 << 5,  /**< Accept error packet */
    305         RCR_ACCEPT_RUNT       = 1 << 4,  /**< Accept Runt (8-64 bytes) packets */
     304        RCR_ACCEPT_ERROR      = 1 << 5,  /**< Accept error frame */
     305        RCR_ACCEPT_RUNT       = 1 << 4,  /**< Accept Runt (8-64 bytes) frames */
    306306        RCR_ACCEPT_BROADCAST  = 1 << 3,  /**< Accept broadcast */
    307307        RCR_ACCEPT_MULTICAST  = 1 << 2,  /**< Accept multicast */
    308308        RCR_ACCEPT_PHYS_MATCH = 1 << 1,  /**< Accept device MAC address match */
    309         RCR_ACCEPT_ALL_PHYS   = 1 << 0,  /**< Accept all packets with
     309        RCR_ACCEPT_ALL_PHYS   = 1 << 0,  /**< Accept all frames with
    310310                                          * phys. desticnation
    311311                                                                          */
     
    362362        ANAR_ACK          = (1 << 14),  /**< Capability reception acknowledge */
    363363        ANAR_REMOTE_FAULT = (1 << 13),  /**< Remote fault detection capability */
    364         ANAR_PAUSE        = (1 << 10),  /**< Symetric pause packet capability */
     364        ANAR_PAUSE        = (1 << 10),  /**< Symetric pause frame capability */
    365365        ANAR_100T4        = (1 << 9),   /**< T4, not supported by the device */
    366366        ANAR_100TX_FD     = (1 << 8),   /**< 100BASE_TX full duplex */
     
    399399        CONFIG3_GNT_SELECT = (1 << 7),  /**< Gnt select */
    400400        CONFIG3_PARM_EN    = (1 << 6),  /**< Parameter enabled (100MBit mode) */
    401         CONFIG3_MAGIC      = (1 << 5),  /**< WoL Magic packet enable */
     401        CONFIG3_MAGIC      = (1 << 5),  /**< WoL Magic frame enable */
    402402        CONFIG3_LINK_UP    = (1 << 4),  /**< Wakeup if link is reestablished */
    403403        CONFIG3_CLKRUN_EN  = (1 << 2),  /**< CLKRUN enabled */ /* TODO: check what does it mean */
     
    416416};
    417417
    418 /** Maximal runt packet size + 1 */
     418/** Maximal runt frame size + 1 */
    419419#define RTL8139_RUNT_MAX_SIZE 64
    420420
    421 /** Bits in packet header */
    422 enum rtl8139_packet_header {
     421/** Bits in frame header */
     422enum rtl8139_frame_header {
    423423        RSR_MAR  = (1 << 15),  /**< Multicast received */
    424424        RSR_PAM  = (1 << 14),  /**< Physical address match */
     
    426426
    427427        RSR_ISE  = (1 << 5),   /**< Invalid symbol error, 100BASE-TX only */
    428         RSR_RUNT = (1 << 4),   /**< Runt packet (< RTL8139_RUNT_MAX_SIZE bytes) */
    429 
    430         RSR_LONG = (1 << 3),   /**< Long packet (size > 4k bytes) */
     428        RSR_RUNT = (1 << 4),   /**< Runt frame (< RTL8139_RUNT_MAX_SIZE bytes) */
     429
     430        RSR_LONG = (1 << 3),   /**< Long frmae (size > 4k bytes) */
    431431        RSR_CRC  = (1 << 2),   /**< CRC error */
    432432        RSR_FAE  = (1 << 1),   /**< Frame alignment error */
    433         RSR_ROK  = (1 << 0)    /**< Good packet received */
     433        RSR_ROK  = (1 << 0)    /**< Good frame received */
    434434};
    435435
     
    451451                                                                          */
    452452
    453         APPEND_CRC = 1 << 16,        /**< Append CRC at the end of a packet */
     453        APPEND_CRC = 1 << 16,        /**< Append CRC at the end of a frame */
    454454
    455455        MXTxDMA_SHIFT = 8,  /**< Max. DMA Burst per TxDMA shift, burst = 16^value */
     
    459459        TX_RETRY_COUNT_SIZE  = 4,            /**< Retries before aborting size */
    460460
    461         CLEAR_ABORT = 1 << 0    /**< Retransmit aborted packet at the last
     461        CLEAR_ABORT = 1 << 0    /**< Retransmit aborted frame at the last
    462462                                  *  transmitted descriptor
    463463                                                          */
     
    478478extern const struct rtl8139_hwver_map rtl8139_versions[RTL8139_VER_COUNT + 1];
    479479
    480 /** Size in the packet header while copying from RxFIFO to Rx buffer */
     480/** Size in the frame header while copying from RxFIFO to Rx buffer */
    481481#define RTL8139_EARLY_SIZE UINT16_C(0xfff0)
    482 /** The only supported pause packet time value */
     482/** The only supported pause frame time value */
    483483#define RTL8139_PAUSE_VAL UINT16_C(0xFFFF)
    484484
    485 /** Size of the packet header in front of the received frame */
    486 #define RTL_PACKET_HEADER_SIZE 4
     485/** Size of the frame header in front of the received frame */
     486#define RTL_FRAME_HEADER_SIZE 4
    487487
    488488/** 8k buffer */
  • uspace/drv/nic/rtl8139/driver.c

    r3ea725e r1bc35b5  
    3939#include <io/log.h>
    4040#include <nic.h>
    41 #include <packet_client.h>
     41//#include <packet_client.h>
    4242#include <device/pci.h>
    4343
     
    152152}
    153153
    154 /** Update the mask of accepted packets in the RCR register according to
     154/** Update the mask of accepted frames in the RCR register according to
    155155 * rcr_accept_mode value in rtl8139_t
    156156 *
     
    170170}
    171171
    172 /** Fill the mask of accepted multicast packets in the card registers
     172/** Fill the mask of accepted multicast frames in the card registers
    173173 *
    174174 *  @param rtl8139  The rtl8139 private data
     
    394394#define rtl8139_tbuf_busy(tsd) ((pio_read_32(tsd) & TSD_OWN) == 0)
    395395
    396 /** Send packet with the hardware
     396/** Send frame with the hardware
    397397 *
    398398 * note: the main_lock is locked when framework calls this function
     
    412412        ddf_msg(LVL_DEBUG, "Sending frame");
    413413
    414         if (size > RTL8139_PACKET_MAX_LENGTH) {
     414        if (size > RTL8139_FRAME_MAX_LENGTH) {
    415415                ddf_msg(LVL_ERROR, "Send frame: frame too long, %zu bytes",
    416416                    size);
     
    437437        fibril_mutex_unlock(&rtl8139->tx_lock);
    438438
    439         /* Get address of the buffer descriptor and packet data */
     439        /* Get address of the buffer descriptor and frame data */
    440440        void *tsd = rtl8139->io_port + TSD0 + tx_curr * 4;
    441441        void *buf_addr = rtl8139->tx_buff[tx_curr];
     
    505505}
    506506
    507 /** Create packet structure from the buffer data
     507/** Create frame structure from the buffer data
    508508 *
    509509 * @param nic_data      NIC driver data
    510510 * @param rx_buffer     The receiver buffer
    511511 * @param rx_size       The buffer size
    512  * @param packet_start  The offset where packet data start
    513  * @param packet_size   The size of the packet data
    514  *
    515  * @return The packet  list node (not connected)
    516  */
    517 static nic_frame_t *rtl8139_read_packet(nic_t *nic_data,
    518     void *rx_buffer, size_t rx_size, size_t packet_start, size_t packet_size)
    519 {
    520         nic_frame_t *frame = nic_alloc_frame(nic_data, packet_size);
     512 * @param frame_start   The offset where packet data start
     513 * @param frame_size    The size of the frame data
     514 *
     515 * @return The frame list node (not connected)
     516 */
     517static nic_frame_t *rtl8139_read_frame(nic_t *nic_data,
     518    void *rx_buffer, size_t rx_size, size_t frame_start, size_t frame_size)
     519{
     520        nic_frame_t *frame = nic_alloc_frame(nic_data, frame_size);
    521521        if (! frame) {
    522                 ddf_msg(LVL_ERROR, "Can not allocate frame for received packet.");
     522                ddf_msg(LVL_ERROR, "Can not allocate frame for received frame.");
    523523                return NULL;
    524524        }
    525525
    526         void *packet_data = packet_suffix(frame->packet, packet_size);
    527         if (!packet_data) {
    528                 ddf_msg(LVL_ERROR, "Can not get the packet suffix.");
    529                 nic_release_frame(nic_data, frame);
    530                 return NULL;
    531         }
    532 
    533         void *ret = rtl8139_memcpy_wrapped(packet_data, rx_buffer, packet_start,
    534             RxBUF_SIZE, packet_size);
     526        void *ret = rtl8139_memcpy_wrapped(frame->data, rx_buffer, frame_start,
     527            RxBUF_SIZE, frame_size);
    535528        if (ret == NULL) {
    536529                nic_release_frame(nic_data, frame);
     
    568561}
    569562
    570 /** Receive all packets in queue
     563/** Receive all frames in queue
    571564 *
    572565 *  @param nic_data  The controller data
    573  *  @return The linked list of packet_list_t nodes, each containing one packet
    574  */
    575 static nic_frame_list_t *rtl8139_packet_receive(nic_t *nic_data)
     566 *  @return The linked list of nic_frame_list_t nodes, each containing one frame
     567 */
     568static nic_frame_list_t *rtl8139_frame_receive(nic_t *nic_data)
    576569{
    577570        rtl8139_t *rtl8139 = nic_get_specific(nic_data);
     
    581574        nic_frame_list_t *frames = nic_alloc_frame_list();
    582575        if (!frames)
    583                 ddf_msg(LVL_ERROR, "Can not allocate frame list for received packets.");
     576                ddf_msg(LVL_ERROR, "Can not allocate frame list for received frames.");
    584577
    585578        void *rx_buffer = rtl8139->rx_buff_virt;
     
    605598        while (!rtl8139_hw_buffer_empty(rtl8139)) {
    606599                void *rx_ptr = rx_buffer + rx_offset % RxBUF_SIZE;
    607                 uint32_t packet_header = uint32_t_le2host( *((uint32_t*)rx_ptr) );
    608                 uint16_t size = packet_header >> 16;
    609                 uint16_t packet_size = size - RTL8139_CRC_SIZE;
    610                 /* received packet flags in packet header */
    611                 uint16_t rcs = (uint16_t) packet_header;
     600                uint32_t frame_header = uint32_t_le2host( *((uint32_t*)rx_ptr) );
     601                uint16_t size = frame_header >> 16;
     602                uint16_t frame_size = size - RTL8139_CRC_SIZE;
     603                /* received frame flags in frame header */
     604                uint16_t rcs = (uint16_t) frame_header;
    612605
    613606                if (size == RTL8139_EARLY_SIZE) {
    614                         /* The packet copying is still in progress, break receiving */
     607                        /* The frame copying is still in progress, break receiving */
    615608                        ddf_msg(LVL_DEBUG, "Early threshold reached, not completely coppied");
    616609                        break;
     
    618611
    619612                /* Check if the header is valid, otherwise we are lost in the buffer */
    620                 if (size == 0 || size > RTL8139_PACKET_MAX_LENGTH) {
     613                if (size == 0 || size > RTL8139_FRAME_MAX_LENGTH) {
    621614                        ddf_msg(LVL_ERROR, "Receiver error -> receiver reset (size: %4"PRIu16", "
    622                             "header 0x%4"PRIx16". Offset: %zu)", size, packet_header,
     615                            "header 0x%4"PRIx16". Offset: %zu)", size, frame_header,
    623616                            rx_offset);
    624617                        goto rx_err;
     
    629622                }
    630623
    631                 cur_read += size + RTL_PACKET_HEADER_SIZE;
     624                cur_read += size + RTL_FRAME_HEADER_SIZE;
    632625                if (cur_read > max_read)
    633626                        break;
    634627
    635628                if (frames) {
    636                         nic_frame_t *frame = rtl8139_read_packet(nic_data, rx_buffer,
    637                             RxBUF_SIZE, rx_offset + RTL_PACKET_HEADER_SIZE, packet_size);
     629                        nic_frame_t *frame = rtl8139_read_frame(nic_data, rx_buffer,
     630                            RxBUF_SIZE, rx_offset + RTL_FRAME_HEADER_SIZE, frame_size);
    638631
    639632                        if (frame)
     
    642635
    643636                /* Update offset */
    644                 rx_offset = ALIGN_UP(rx_offset + size + RTL_PACKET_HEADER_SIZE, 4);
    645 
    646                 /* Write lesser value to prevent overflow into unread packet
     637                rx_offset = ALIGN_UP(rx_offset + size + RTL_FRAME_HEADER_SIZE, 4);
     638
     639                /* Write lesser value to prevent overflow into unread frame
    647640                 * (the recomendation from the RealTech rtl8139 programming guide)
    648641                 */
     
    727720                tx_used++;
    728721
    729                 /* If the packet was sent */
     722                /* If the frame was sent */
    730723                if (tsd_value & TSD_TOK) {
    731724                        size_t size = REG_GET_VAL(tsd_value, TSD_SIZE);
     
    757750}
    758751
    759 /** Receive all packets from the buffer
     752/** Receive all frames from the buffer
    760753 *
    761754 *  @param rtl8139  driver private data
    762755 */
    763 static void rtl8139_receive_packets(nic_t *nic_data)
     756static void rtl8139_receive_frames(nic_t *nic_data)
    764757{
    765758        assert(nic_data);
     
    769762
    770763        fibril_mutex_lock(&rtl8139->rx_lock);
    771         nic_frame_list_t *frames = rtl8139_packet_receive(nic_data);
     764        nic_frame_list_t *frames = rtl8139_frame_receive(nic_data);
    772765        fibril_mutex_unlock(&rtl8139->rx_lock);
    773766
     
    825818        }
    826819
    827         /* Check transmittion interrupts first to allow transmit next packets
     820        /* Check transmittion interrupts first to allow transmit next frames
    828821         * sooner
    829822         */
     
    832825        }
    833826        if (isr & INT_ROK) {
    834                 rtl8139_receive_packets(nic_data);
     827                rtl8139_receive_frames(nic_data);
    835828        }
    836829        if (isr & (INT_RER | INT_RXOVW | INT_FIFOOVW)) {
     
    933926}
    934927
    935 /** Activate the device to receive and transmit packets
     928/** Activate the device to receive and transmit frames
    936929 *
    937930 *  @param nic_data  The nic driver data
     
    12131206                goto failed;
    12141207
    1215         /* Set default packet acceptance */
     1208        /* Set default frame acceptance */
    12161209        rtl8139->rcr_data.ucast_mask = RTL8139_RCR_UCAST_DEFAULT;
    12171210        rtl8139->rcr_data.mcast_mask = RTL8139_RCR_MCAST_DEFAULT;
    12181211        rtl8139->rcr_data.bcast_mask = RTL8139_RCR_BCAST_DEFAULT;
    12191212        rtl8139->rcr_data.defect_mask = RTL8139_RCR_DEFECT_DEFAULT;
    1220         /* Set receiver early treshold to 8/16 of packet length */
     1213        /* Set receiver early treshold to 8/16 of frame length */
    12211214        rtl8139->rcr_data.rcr_base = (0x8 << RCR_ERTH_SHIFT);
    12221215
     
    14771470};
    14781471
    1479 /** Check if pause packet operations are valid in current situation
     1472/** Check if pause frame operations are valid in current situation
    14801473 *
    14811474 *  @param rtl8139  RTL8139 private structure
     
    15021495}
    15031496
    1504 /** Get current pause packet configuration
     1497/** Get current pause frame configuration
    15051498 *
    15061499 *  Values are filled with NIC_RESULT_NOT_AVAILABLE if the value has no sense in
     
    15081501 *
    15091502 *  @param[in]  fun         The DDF structure of the RTL8139
    1510  *  @param[out] we_send     Sign if local constroller sends pause packets
    1511  *  @param[out] we_receive  Sign if local constroller receives pause packets
    1512  *  @param[out] time        Time filled in pause packets. 0xFFFF in rtl8139
     1503 *  @param[out] we_send     Sign if local constroller sends pause frame
     1504 *  @param[out] we_receive  Sign if local constroller receives pause frame
     1505 *  @param[out] time        Time filled in pause frames. 0xFFFF in rtl8139
    15131506 *
    15141507 *  @return EOK if succeed
     
    15401533};
    15411534
    1542 /** Set current pause packet configuration
     1535/** Set current pause frame configuration
    15431536 *
    15441537 *  @param fun            The DDF structure of the RTL8139
    1545  *  @param allow_send     Sign if local constroller sends pause packets
    1546  *  @param allow_receive  Sign if local constroller receives pause packets
     1538 *  @param allow_send     Sign if local constroller sends pause frame
     1539 *  @param allow_receive  Sign if local constroller receives pause frames
    15471540 *  @param time           Time to use, ignored (not supported by device)
    15481541 *
    1549  *  @return EOK if succeed, INVAL if the pause packet has no sence
     1542 *  @return EOK if succeed, INVAL if the pause frame has no sence
    15501543 */
    15511544static int rtl8139_pause_set(ddf_fun_t *fun, int allow_send, int allow_receive,
     
    17961789}
    17971790
    1798 /** Set unicast packets acceptance mode
     1791/** Set unicast frames acceptance mode
    17991792 *
    18001793 *  @param nic_data  The nic device to update
     
    18541847}
    18551848
    1856 /** Set multicast packets acceptance mode
     1849/** Set multicast frames acceptance mode
    18571850 *
    18581851 *  @param nic_data  The nic device to update
     
    18991892}
    19001893
    1901 /** Set broadcast packets acceptance mode
     1894/** Set broadcast frames acceptance mode
    19021895 *
    19031896 *  @param nic_data  The nic device to update
     
    19291922}
    19301923
    1931 /** Get state of acceptance of weird packets
     1924/** Get state of acceptance of weird frames
    19321925 *
    19331926 *  @param[in]  device  The device to check
     
    19511944};
    19521945
    1953 /** Set acceptance of weird packets
     1946/** Set acceptance of weird frames
    19541947 *
    19551948 *  @param device  The device to update
     
    21272120}
    21282121
    2129 /** Force receiving all packets in the receive buffer
     2122/** Force receiving all frames in the receive buffer
    21302123 *
    21312124 *  @param device  The device to receive
  • uspace/drv/nic/rtl8139/driver.h

    r3ea725e r1bc35b5  
    3939/** Transmittion buffers count */
    4040#define TX_BUFF_COUNT 4
    41 /** Size of buffer for one packet
     41/** Size of buffer for one frame
    4242 *  - 2kB
    4343 */
     
    4949#define RTL8139_CRC_SIZE 4
    5050
    51 /** The default mode of accepting unicast packets */
     51/** The default mode of accepting unicast frames */
    5252#define RTL8139_RCR_UCAST_DEFAULT RCR_ACCEPT_PHYS_MATCH
    53 /** The default mode of accepting multicast packets */
     53/** The default mode of accepting multicast frames */
    5454#define RTL8139_RCR_MCAST_DEFAULT 0
    55 /** The default mode of accepting broadcast packets */
     55/** The default mode of accepting broadcast frames */
    5656#define RTL8139_RCR_BCAST_DEFAULT RCR_ACCEPT_BROADCAST
    57 /** The default mode of accepting defect packets */
     57/** The default mode of accepting defect frames */
    5858#define RTL8139_RCR_DEFECT_DEFAULT 0
    5959
     
    112112        size_t tx_used;
    113113
    114         /** Buffer for receiving packets */
     114        /** Buffer for receiving frames */
    115115        void *rx_buff_phys;
    116116        void *rx_buff_virt;
  • uspace/lib/net/include/nil_remote.h

    r3ea725e r1bc35b5  
    3939#include <generic.h>
    4040#include <async.h>
     41#include <sys/types.h>
    4142
    4243#define nil_bind_service(service, device_id, me, receiver) \
     
    6162    size_t);
    6263extern int nil_device_state_msg(async_sess_t *, nic_device_id_t, sysarg_t);
    63 extern int nil_received_msg(async_sess_t *, nic_device_id_t, packet_id_t);
     64extern int nil_received_msg(async_sess_t *, nic_device_id_t, void *, size_t);
    6465extern int nil_addr_changed_msg(async_sess_t *, nic_device_id_t,
    6566    const nic_address_t *);
  • uspace/lib/net/nil/nil_remote.c

    r3ea725e r1bc35b5  
    7777 */
    7878int nil_received_msg(async_sess_t *sess, nic_device_id_t device_id,
    79     packet_id_t packet_id)
     79    void *data, size_t size)
    8080{
    81         return generic_received_msg_remote(sess, NET_NIL_RECEIVED,
    82             device_id, packet_id, 0, 0);
     81        async_exch_t *exch = async_exchange_begin(sess);
     82
     83        ipc_call_t answer;
     84        aid_t req = async_send_1(exch, NET_NIL_RECEIVED, (sysarg_t) device_id,
     85            &answer);
     86        sysarg_t retval = async_data_write_start(exch, data, size);
     87
     88        async_exchange_end(exch);
     89
     90        if (retval != EOK) {
     91                async_wait_for(req, NULL);
     92                return retval;
     93        }
     94
     95        async_wait_for(req, &retval);
     96        return retval;
    8397}
    8498
  • uspace/lib/nic/include/nic.h

    r3ea725e r1bc35b5  
    6161
    6262/**
    63  * Simple structure for sending the allocated frames (packets) in a list.
     63 * Simple structure for sending lists of frames.
    6464 */
    6565typedef struct {
    6666        link_t link;
    67         packet_t *packet;
     67        void *data;
     68        size_t size;
    6869} nic_frame_t;
    6970
     
    233234extern int nic_report_poll_mode(nic_t *, nic_poll_mode_t, struct timeval *);
    234235extern void nic_query_address(nic_t *, nic_address_t *);
    235 extern void nic_received_packet(nic_t *, packet_t *);
    236236extern void nic_received_noneth_packet(nic_t *, packet_t *);
    237237extern void nic_received_frame(nic_t *, nic_frame_t *);
  • uspace/lib/nic/include/nic_rx_control.h

    r3ea725e r1bc35b5  
    120120        const nic_address_t *prev_addr, const nic_address_t *curr_addr);
    121121extern int nic_rxc_check(const nic_rxc_t *rxc,
    122         const packet_t *packet, nic_frame_type_t *frame_type);
     122        const void *data, size_t size, nic_frame_type_t *frame_type);
    123123extern void nic_rxc_hw_filtering(nic_rxc_t *rxc,
    124124        int unicast_exact, int multicast_exact, int vlan_exact);
  • uspace/lib/nic/src/nic_driver.c

    r3ea725e r1bc35b5  
    290290 *
    291291 *  @param nic_data     The NIC driver data
    292  *  @param packet_size  Size of packet
    293  *  @param offload_size Size of packet offload
     292 *  @param size         Frame size in bytes
    294293 *  @return pointer to allocated frame if success, NULL otherwise
    295294 */
    296 nic_frame_t *nic_alloc_frame(nic_t *nic_data, size_t packet_size)
     295nic_frame_t *nic_alloc_frame(nic_t *nic_data, size_t size)
    297296{
    298297        nic_frame_t *frame;
     
    313312        }
    314313
    315         packet_t *packet = nic_alloc_packet(nic_data, packet_size);
    316         if (!packet) {
     314        frame->data = malloc(size);
     315        if (frame->data == NULL) {
    317316                free(frame);
    318317                return NULL;
    319318        }
    320319
    321         frame->packet = packet;
     320        frame->size = size;
    322321        return frame;
    323322}
     
    332331        if (!frame)
    333332                return;
    334         if (frame->packet != NULL) {
    335                 nic_release_packet(nic_data, frame->packet);
    336         }
     333
     334        if (frame->data != NULL) {
     335                free(frame->data);
     336                frame->data = NULL;
     337                frame->size = 0;
     338        }
     339
    337340        fibril_mutex_lock(&nic_globals.lock);
    338341        if (nic_globals.frame_cache_size >= NIC_GLOBALS_MAX_CACHE_SIZE) {
     
    622625
    623626/**
    624  * Provided for correct naming conventions.
    625  * The packet is checked by filters and then sent up to the NIL layer or
    626  * discarded, the frame is released.
    627  *
    628  * @param nic_data
    629  * @param frame         The frame containing received packet
     627 * This is the function that the driver should call when it receives a frame.
     628 * The frame is checked by filters and then sent up to the NIL layer or
     629 * discarded. The frame is released.
     630 *
     631 * @param nic_data
     632 * @param frame         The received frame
    630633 */
    631634void nic_received_frame(nic_t *nic_data, nic_frame_t *frame)
    632 {
    633         nic_received_packet(nic_data, frame->packet);
    634         frame->packet = NULL;
    635         nic_release_frame(nic_data, frame);
    636 }
    637 
    638 /**
    639  * This is the function that the driver should call when it receives a packet.
    640  * The packet is checked by filters and then sent up to the NIL layer or
    641  * discarded.
    642  *
    643  * @param nic_data
    644  * @param packet                The received packet
    645  */
    646 void nic_received_packet(nic_t *nic_data, packet_t *packet)
    647635{
    648636        /* Note: this function must not lock main lock, because loopback driver
    649637         *               calls it inside write_packet handler (with locked main lock) */
    650         packet_id_t pid = packet_get_id(packet);
    651        
    652638        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    653639        nic_frame_type_t frame_type;
    654         int check = nic_rxc_check(&nic_data->rx_control, packet, &frame_type);
     640        int check = nic_rxc_check(&nic_data->rx_control, frame->data,
     641            frame->size, &frame_type);
    655642        fibril_rwlock_read_unlock(&nic_data->rxc_lock);
    656643        /* Update statistics */
     
    659646        if (nic_data->state == NIC_STATE_ACTIVE && check) {
    660647                nic_data->stats.receive_packets++;
    661                 nic_data->stats.receive_bytes += packet_get_data_length(packet);
     648                nic_data->stats.receive_bytes += frame->size;
    662649                switch (frame_type) {
    663650                case NIC_FRAME_MULTICAST:
     
    671658                }
    672659                fibril_rwlock_write_unlock(&nic_data->stats_lock);
    673                 nil_received_msg(nic_data->nil_session, nic_data->device_id, pid);
     660                nil_received_msg(nic_data->nil_session, nic_data->device_id,
     661                    frame->data, frame->size);
    674662        } else {
    675663                switch (frame_type) {
     
    685673                }
    686674                fibril_rwlock_write_unlock(&nic_data->stats_lock);
    687                 nic_release_packet(nic_data, packet);
    688         }
     675        }
     676        nic_release_frame(nic_data, frame);
    689677}
    690678
     
    705693       
    706694        nil_received_msg(nic_data->nil_session, nic_data->device_id,
    707             packet_get_id(packet));
     695            packet_get_data(packet), packet_get_data_length(packet));
    708696}
    709697
     
    726714
    727715                list_remove(&frame->link);
    728                 nic_received_packet(nic_data, frame->packet);
    729                 frame->packet = NULL;
    730                 nic_release_frame(nic_data, frame);
     716                nic_received_frame(nic_data, frame);
    731717        }
    732718        nic_driver_release_frame_list(frames);
  • uspace/lib/nic/src/nic_rx_control.c

    r3ea725e r1bc35b5  
    392392 *
    393393 * @param rxc
    394  * @param packet        The probed frame
     394 * @param frame     The probed frame
    395395 *
    396396 * @return True if the frame passes, false if it does not
    397397 */
    398 int nic_rxc_check(const nic_rxc_t *rxc, const packet_t *packet,
     398int nic_rxc_check(const nic_rxc_t *rxc, const void *data, size_t size,
    399399        nic_frame_type_t *frame_type)
    400400{
    401401        assert(frame_type != NULL);
    402         uint8_t *dest_addr = (uint8_t *) packet + packet->data_start;
     402        uint8_t *dest_addr = (uint8_t *) data;
    403403        uint8_t *src_addr = dest_addr + ETH_ADDR;
     404
     405        if (size < 2 * ETH_ADDR)
     406                return false;
    404407
    405408        if (dest_addr[0] & 1) {
     
    448451        if (!rxc->vlan_exact && rxc->vlan_mask != NULL) {
    449452                vlan_header_t *vlan_header = (vlan_header_t *)
    450                         ((uint8_t *) packet + packet->data_start + 2 * ETH_ADDR);
     453                        ((uint8_t *) data + 2 * ETH_ADDR);
    451454                if (vlan_header->tpid_upper == VLAN_TPID_UPPER &&
    452455                        vlan_header->tpid_lower == VLAN_TPID_LOWER) {
  • uspace/srv/net/nil/eth/eth.c

    r3ea725e r1bc35b5  
    814814}
    815815
     816static int eth_received(nic_device_id_t device_id)
     817{
     818        void *data;
     819        size_t size;
     820        int rc;
     821       
     822        rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
     823        if (rc != EOK)
     824                return rc;
     825       
     826        packet_t *packet = packet_get_1_remote(eth_globals.net_sess, size);
     827        if (packet == NULL)
     828                return ENOMEM;
     829       
     830        void *pdata = packet_suffix(packet, size);
     831        memcpy(pdata, data, size);
     832        free(data);
     833       
     834        return nil_received_msg_local(device_id, packet);
     835}
     836
    816837static int eth_addr_changed(nic_device_id_t device_id)
    817838{
     
    926947                return EOK;
    927948        case NET_NIL_RECEIVED:
    928                 rc = packet_translate_remote(eth_globals.net_sess, &packet,
    929                     IPC_GET_ARG2(*call));
    930                 if (rc == EOK)
    931                         rc = nil_received_msg_local(IPC_GET_ARG1(*call), packet);
    932                
     949                rc = eth_received(IPC_GET_ARG1(*call));
    933950                async_answer_0(callid, (sysarg_t) rc);
    934951                return rc;
  • uspace/srv/net/nil/nildummy/nildummy.c

    r3ea725e r1bc35b5  
    370370}
    371371
     372static int nildummy_received(nic_device_id_t device_id)
     373{
     374        void *data;
     375        size_t size;
     376        int rc;
     377
     378        rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
     379        if (rc != EOK)
     380                return rc;
     381
     382        packet_t *packet = packet_get_1_remote(nildummy_globals.net_sess, size);
     383        if (packet == NULL)
     384                return ENOMEM;
     385
     386        void *pdata = packet_suffix(packet, size);
     387        memcpy(pdata, data, size);
     388        free(pdata);
     389
     390        return nil_received_msg_local(device_id, packet);
     391}
     392
    372393int nil_module_message(ipc_callid_t callid, ipc_call_t *call,
    373394    ipc_call_t *answer, size_t *answer_count)
     
    431452       
    432453        case NET_NIL_RECEIVED:
    433                 rc = packet_translate_remote(nildummy_globals.net_sess, &packet,
    434                     IPC_GET_ARG2(*call));
    435                 if (rc == EOK)
    436                         rc = nil_received_msg_local(IPC_GET_ARG1(*call), packet);
    437                
     454                rc = nildummy_received(IPC_GET_ARG1(*call));
    438455                async_answer_0(callid, (sysarg_t) rc);
    439456                return rc;
Note: See TracChangeset for help on using the changeset viewer.