Changeset 1c7b0db7 in mainline


Ignore:
Timestamp:
2025-03-06T16:42:01Z (3 days ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
870841cf
Parents:
07039850
Message:

Implement quiesce in NE2k, RTL8139 and RTL8169.

Location:
uspace/drv/nic
Files:
5 edited

Legend:

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

    r07039850 r1c7b0db7  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2009 Lukas Mejdrech
    34 * Copyright (c) 2011 Martin Decky
     
    182183                        break;
    183184        }
     185}
     186
     187/** Quiesce NE2000.
     188 *
     189 * @param ne2k NE2000
     190 */
     191void ne2k_quiesce(ne2k_t *ne2k)
     192{
     193        ne2k_init(ne2k);
    184194}
    185195
  • uspace/drv/nic/ne2k/dp8390.h

    r07039850 r1c7b0db7  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2009 Lukas Mejdrech
    34 * Copyright (c) 2011 Martin Decky
     
    267268extern errno_t ne2k_probe(ne2k_t *);
    268269extern errno_t ne2k_up(ne2k_t *);
     270extern void ne2k_quiesce(ne2k_t *);
    269271extern void ne2k_down(ne2k_t *);
    270272extern void ne2k_send(nic_t *, void *, size_t);
  • uspace/drv/nic/ne2k/ne2k.c

    r07039850 r1c7b0db7  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2011 Martin Decky
    34 * Copyright (c) 2011 Radim Vansa
     
    459460}
    460461
     462static errno_t ne2k_dev_quiesce(ddf_dev_t *dev)
     463{
     464        nic_t *nic;
     465        ne2k_t *ne2k;
     466
     467        nic = nic_get_from_ddf_dev(dev);
     468
     469        ne2k = (ne2k_t *)nic_get_specific(nic);
     470        ne2k_quiesce(ne2k);
     471
     472        return EOK;
     473}
     474
    461475static nic_iface_t ne2k_nic_iface = {
    462476        .set_address = ne2k_set_address,
     
    467481
    468482static driver_ops_t ne2k_driver_ops = {
    469         .dev_add = ne2k_dev_add
     483        .dev_add = ne2k_dev_add,
     484        .dev_quiesce = ne2k_dev_quiesce
    470485};
    471486
  • uspace/drv/nic/rtl8139/driver.c

    r07039850 r1c7b0db7  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2011 Jiri Michalec
    34 * All rights reserved.
     
    338339
    339340static errno_t rtl8139_dev_add(ddf_dev_t *dev);
     341static errno_t rtl8139_dev_quiesce(ddf_dev_t *dev);
    340342
    341343/** Basic driver operations for RTL8139 driver */
    342344static driver_ops_t rtl8139_driver_ops = {
    343345        .dev_add = &rtl8139_dev_add,
     346        .dev_quiesce = &rtl8139_dev_quiesce
    344347};
    345348
     
    432435 *  @param io_base  The address of the i/o port mapping start
    433436 */
    434 inline static void rtl8139_hw_soft_reset(void *io_base)
     437static void rtl8139_hw_soft_reset(void *io_base)
    435438{
    436439        pio_write_8(io_base + CR, CR_RST);
     
    845848 *  @return An error code otherwise.
    846849 */
    847 inline static errno_t rtl8139_register_int_handler(nic_t *nic_data,
     850static errno_t rtl8139_register_int_handler(nic_t *nic_data,
    848851    cap_irq_handle_t *handle)
    849852{
     
    872875 * @param rtl8139  The card private data
    873876 */
    874 inline static void rtl8139_card_up(rtl8139_t *rtl8139)
     877static void rtl8139_card_up(rtl8139_t *rtl8139)
    875878{
    876879        void *io_base = rtl8139->io_port;
     
    12451248                }
    12461249        }
     1250}
     1251
     1252static void rtl8139_quiesce(rtl8139_t *rtl8139)
     1253{
     1254        rtl8139_hw_soft_reset(rtl8139->io_port);
    12471255}
    12481256
     
    13281336        rtl8139_dev_cleanup(dev);
    13291337        return rc;
     1338}
     1339
     1340/** Quiesce RTL8139.
     1341 *
     1342 * @param dev RTL8139 device.
     1343 * @return EOK on sucess, or an error code.
     1344 */
     1345errno_t rtl8139_dev_quiesce(ddf_dev_t *dev)
     1346{
     1347        nic_t *nic;
     1348        rtl8139_t *rtl8139;
     1349
     1350        ddf_msg(LVL_NOTE, "RTL8139_dev_quiesce %s (handle = %zu)",
     1351            ddf_dev_get_name(dev), ddf_dev_get_handle(dev));
     1352
     1353        nic = nic_get_from_ddf_dev(dev);
     1354        rtl8139 = nic_get_specific(nic);
     1355
     1356        rtl8139_quiesce(rtl8139);
     1357        return EOK;
    13301358}
    13311359
  • uspace/drv/nic/rtl8169/driver.c

    r07039850 r1c7b0db7  
    11/*
     2 * Copyright (c) 2025 Jiri Svoboda
    23 * Copyright (c) 2014 Agnieszka Tabaka
    34 * All rights reserved.
     
    164165
    165166static errno_t rtl8169_dev_add(ddf_dev_t *dev);
     167static errno_t rtl8169_dev_quiesce(ddf_dev_t *dev);
    166168
    167169/** Basic driver operations for RTL8169 driver */
    168170static driver_ops_t rtl8169_driver_ops = {
    169171        .dev_add = &rtl8169_dev_add,
     172        .dev_quiesce = &rtl8169_dev_quiesce
    170173};
    171174
     
    480483        rtl8169_dev_cleanup(dev);
    481484        return rc;
     485
     486        return EOK;
     487}
     488
     489static errno_t rtl8169_dev_quiesce(ddf_dev_t *dev)
     490{
     491        nic_t *nic;
     492        rtl8169_t *rtl8169;
     493
     494        ddf_msg(LVL_NOTE, "RTL8169_dev_quiesce %s (handle = %zu)",
     495            ddf_dev_get_name(dev), ddf_dev_get_handle(dev));
     496
     497        nic = nic_get_from_ddf_dev(dev);
     498        rtl8169 = nic_get_specific(nic);
     499
     500        /* Reset card */
     501        pio_write_8(rtl8169->regs + CONFIG0, 0);
     502        rtl8169_reset(rtl8169);
    482503
    483504        return EOK;
Note: See TracChangeset for help on using the changeset viewer.