Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/nic/rtl8139/driver.c

    r6d8455d rd8da56b  
    3939#include <io/log.h>
    4040#include <nic.h>
    41 #include <packet_client.h>
    4241#include <device/pci.h>
    4342
     
    152151}
    153152
    154 /** Update the mask of accepted packets in the RCR register according to
     153/** Update the mask of accepted frames in the RCR register according to
    155154 * rcr_accept_mode value in rtl8139_t
    156155 *
     
    170169}
    171170
    172 /** Fill the mask of accepted multicast packets in the card registers
     171/** Fill the mask of accepted multicast frames in the card registers
    173172 *
    174173 *  @param rtl8139  The rtl8139 private data
     
    394393#define rtl8139_tbuf_busy(tsd) ((pio_read_32(tsd) & TSD_OWN) == 0)
    395394
    396 /** Send packet with the hardware
     395/** Send frame with the hardware
    397396 *
    398397 * note: the main_lock is locked when framework calls this function
     
    412411        ddf_msg(LVL_DEBUG, "Sending frame");
    413412
    414         if (size > RTL8139_PACKET_MAX_LENGTH) {
     413        if (size > RTL8139_FRAME_MAX_LENGTH) {
    415414                ddf_msg(LVL_ERROR, "Send frame: frame too long, %zu bytes",
    416415                    size);
     
    437436        fibril_mutex_unlock(&rtl8139->tx_lock);
    438437
    439         /* Get address of the buffer descriptor and packet data */
     438        /* Get address of the buffer descriptor and frame data */
    440439        void *tsd = rtl8139->io_port + TSD0 + tx_curr * 4;
    441440        void *buf_addr = rtl8139->tx_buff[tx_curr];
     
    505504}
    506505
    507 /** Create packet structure from the buffer data
     506/** Create frame structure from the buffer data
    508507 *
    509508 * @param nic_data      NIC driver data
    510509 * @param rx_buffer     The receiver buffer
    511510 * @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);
     511 * @param frame_start   The offset where packet data start
     512 * @param frame_size    The size of the frame data
     513 *
     514 * @return The frame list node (not connected)
     515 */
     516static nic_frame_t *rtl8139_read_frame(nic_t *nic_data,
     517    void *rx_buffer, size_t rx_size, size_t frame_start, size_t frame_size)
     518{
     519        nic_frame_t *frame = nic_alloc_frame(nic_data, frame_size);
    521520        if (! frame) {
    522                 ddf_msg(LVL_ERROR, "Can not allocate frame for received packet.");
     521                ddf_msg(LVL_ERROR, "Can not allocate frame for received frame.");
    523522                return NULL;
    524523        }
    525524
    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);
     525        void *ret = rtl8139_memcpy_wrapped(frame->data, rx_buffer, frame_start,
     526            RxBUF_SIZE, frame_size);
    535527        if (ret == NULL) {
    536528                nic_release_frame(nic_data, frame);
     
    568560}
    569561
    570 /** Receive all packets in queue
     562/** Receive all frames in queue
    571563 *
    572564 *  @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)
     565 *  @return The linked list of nic_frame_list_t nodes, each containing one frame
     566 */
     567static nic_frame_list_t *rtl8139_frame_receive(nic_t *nic_data)
    576568{
    577569        rtl8139_t *rtl8139 = nic_get_specific(nic_data);
     
    581573        nic_frame_list_t *frames = nic_alloc_frame_list();
    582574        if (!frames)
    583                 ddf_msg(LVL_ERROR, "Can not allocate frame list for received packets.");
     575                ddf_msg(LVL_ERROR, "Can not allocate frame list for received frames.");
    584576
    585577        void *rx_buffer = rtl8139->rx_buff_virt;
     
    605597        while (!rtl8139_hw_buffer_empty(rtl8139)) {
    606598                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;
     599                uint32_t frame_header = uint32_t_le2host( *((uint32_t*)rx_ptr) );
     600                uint16_t size = frame_header >> 16;
     601                uint16_t frame_size = size - RTL8139_CRC_SIZE;
     602                /* received frame flags in frame header */
     603                uint16_t rcs = (uint16_t) frame_header;
    612604
    613605                if (size == RTL8139_EARLY_SIZE) {
    614                         /* The packet copying is still in progress, break receiving */
     606                        /* The frame copying is still in progress, break receiving */
    615607                        ddf_msg(LVL_DEBUG, "Early threshold reached, not completely coppied");
    616608                        break;
     
    618610
    619611                /* Check if the header is valid, otherwise we are lost in the buffer */
    620                 if (size == 0 || size > RTL8139_PACKET_MAX_LENGTH) {
     612                if (size == 0 || size > RTL8139_FRAME_MAX_LENGTH) {
    621613                        ddf_msg(LVL_ERROR, "Receiver error -> receiver reset (size: %4"PRIu16", "
    622                             "header 0x%4"PRIx16". Offset: %zu)", size, packet_header,
     614                            "header 0x%4"PRIx16". Offset: %zu)", size, frame_header,
    623615                            rx_offset);
    624616                        goto rx_err;
     
    629621                }
    630622
    631                 cur_read += size + RTL_PACKET_HEADER_SIZE;
     623                cur_read += size + RTL_FRAME_HEADER_SIZE;
    632624                if (cur_read > max_read)
    633625                        break;
    634626
    635627                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);
     628                        nic_frame_t *frame = rtl8139_read_frame(nic_data, rx_buffer,
     629                            RxBUF_SIZE, rx_offset + RTL_FRAME_HEADER_SIZE, frame_size);
    638630
    639631                        if (frame)
     
    642634
    643635                /* 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
     636                rx_offset = ALIGN_UP(rx_offset + size + RTL_FRAME_HEADER_SIZE, 4);
     637
     638                /* Write lesser value to prevent overflow into unread frame
    647639                 * (the recomendation from the RealTech rtl8139 programming guide)
    648640                 */
     
    727719                tx_used++;
    728720
    729                 /* If the packet was sent */
     721                /* If the frame was sent */
    730722                if (tsd_value & TSD_TOK) {
    731723                        size_t size = REG_GET_VAL(tsd_value, TSD_SIZE);
     
    757749}
    758750
    759 /** Receive all packets from the buffer
     751/** Receive all frames from the buffer
    760752 *
    761753 *  @param rtl8139  driver private data
    762754 */
    763 static void rtl8139_receive_packets(nic_t *nic_data)
     755static void rtl8139_receive_frames(nic_t *nic_data)
    764756{
    765757        assert(nic_data);
     
    769761
    770762        fibril_mutex_lock(&rtl8139->rx_lock);
    771         nic_frame_list_t *frames = rtl8139_packet_receive(nic_data);
     763        nic_frame_list_t *frames = rtl8139_frame_receive(nic_data);
    772764        fibril_mutex_unlock(&rtl8139->rx_lock);
    773765
     
    825817        }
    826818
    827         /* Check transmittion interrupts first to allow transmit next packets
     819        /* Check transmittion interrupts first to allow transmit next frames
    828820         * sooner
    829821         */
     
    832824        }
    833825        if (isr & INT_ROK) {
    834                 rtl8139_receive_packets(nic_data);
     826                rtl8139_receive_frames(nic_data);
    835827        }
    836828        if (isr & (INT_RER | INT_RXOVW | INT_FIFOOVW)) {
     
    933925}
    934926
    935 /** Activate the device to receive and transmit packets
     927/** Activate the device to receive and transmit frames
    936928 *
    937929 *  @param nic_data  The nic driver data
     
    12131205                goto failed;
    12141206
    1215         /* Set default packet acceptance */
     1207        /* Set default frame acceptance */
    12161208        rtl8139->rcr_data.ucast_mask = RTL8139_RCR_UCAST_DEFAULT;
    12171209        rtl8139->rcr_data.mcast_mask = RTL8139_RCR_MCAST_DEFAULT;
    12181210        rtl8139->rcr_data.bcast_mask = RTL8139_RCR_BCAST_DEFAULT;
    12191211        rtl8139->rcr_data.defect_mask = RTL8139_RCR_DEFECT_DEFAULT;
    1220         /* Set receiver early treshold to 8/16 of packet length */
     1212        /* Set receiver early treshold to 8/16 of frame length */
    12211213        rtl8139->rcr_data.rcr_base = (0x8 << RCR_ERTH_SHIFT);
    12221214
     
    14771469};
    14781470
    1479 /** Check if pause packet operations are valid in current situation
     1471/** Check if pause frame operations are valid in current situation
    14801472 *
    14811473 *  @param rtl8139  RTL8139 private structure
     
    15021494}
    15031495
    1504 /** Get current pause packet configuration
     1496/** Get current pause frame configuration
    15051497 *
    15061498 *  Values are filled with NIC_RESULT_NOT_AVAILABLE if the value has no sense in
     
    15081500 *
    15091501 *  @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
     1502 *  @param[out] we_send     Sign if local constroller sends pause frame
     1503 *  @param[out] we_receive  Sign if local constroller receives pause frame
     1504 *  @param[out] time        Time filled in pause frames. 0xFFFF in rtl8139
    15131505 *
    15141506 *  @return EOK if succeed
     
    15401532};
    15411533
    1542 /** Set current pause packet configuration
     1534/** Set current pause frame configuration
    15431535 *
    15441536 *  @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
     1537 *  @param allow_send     Sign if local constroller sends pause frame
     1538 *  @param allow_receive  Sign if local constroller receives pause frames
    15471539 *  @param time           Time to use, ignored (not supported by device)
    15481540 *
    1549  *  @return EOK if succeed, INVAL if the pause packet has no sence
     1541 *  @return EOK if succeed, INVAL if the pause frame has no sence
    15501542 */
    15511543static int rtl8139_pause_set(ddf_fun_t *fun, int allow_send, int allow_receive,
     
    17961788}
    17971789
    1798 /** Set unicast packets acceptance mode
     1790/** Set unicast frames acceptance mode
    17991791 *
    18001792 *  @param nic_data  The nic device to update
     
    18541846}
    18551847
    1856 /** Set multicast packets acceptance mode
     1848/** Set multicast frames acceptance mode
    18571849 *
    18581850 *  @param nic_data  The nic device to update
     
    18991891}
    19001892
    1901 /** Set broadcast packets acceptance mode
     1893/** Set broadcast frames acceptance mode
    19021894 *
    19031895 *  @param nic_data  The nic device to update
     
    19291921}
    19301922
    1931 /** Get state of acceptance of weird packets
     1923/** Get state of acceptance of weird frames
    19321924 *
    19331925 *  @param[in]  device  The device to check
     
    19511943};
    19521944
    1953 /** Set acceptance of weird packets
     1945/** Set acceptance of weird frames
    19541946 *
    19551947 *  @param device  The device to update
     
    21272119}
    21282120
    2129 /** Force receiving all packets in the receive buffer
     2121/** Force receiving all frames in the receive buffer
    21302122 *
    21312123 *  @param device  The device to receive
Note: See TracChangeset for help on using the changeset viewer.