Ignore:
File:
1 edited

Legend:

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

    r870841cf rfafb8e5  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
    32 * Copyright (c) 2014 Agnieszka Tabaka
    43 * All rights reserved.
     
    7574static errno_t rtl8169_on_stopped(nic_t *nic_data);
    7675static void rtl8169_send_frame(nic_t *nic_data, void *data, size_t size);
    77 static void rtl8169_irq_handler(ipc_call_t *icall, void *);
     76static void rtl8169_irq_handler(ipc_call_t *icall, ddf_dev_t *dev);
    7877static inline errno_t rtl8169_register_int_handler(nic_t *nic_data,
    7978    cap_irq_handle_t *handle);
     
    165164
    166165static errno_t rtl8169_dev_add(ddf_dev_t *dev);
    167 static errno_t rtl8169_dev_quiesce(ddf_dev_t *dev);
    168166
    169167/** Basic driver operations for RTL8169 driver */
    170168static driver_ops_t rtl8169_driver_ops = {
    171169        .dev_add = &rtl8169_dev_add,
    172         .dev_quiesce = &rtl8169_dev_quiesce
    173170};
    174171
     
    365362}
    366363
    367 static errno_t rtl8169_register_int_handler(nic_t *nic_data,
     364inline static errno_t rtl8169_register_int_handler(nic_t *nic_data,
    368365    cap_irq_handle_t *handle)
    369366{
     
    375372        rtl8169_irq_code.cmds[3].addr = rtl8169->regs + IMR;
    376373        errno_t rc = register_interrupt_handler(nic_get_ddf_dev(nic_data),
    377             rtl8169->irq, rtl8169_irq_handler, (void *)rtl8169,
    378             &rtl8169_irq_code, handle);
     374            rtl8169->irq, rtl8169_irq_handler, &rtl8169_irq_code, handle);
    379375
    380376        return rc;
     
    487483}
    488484
    489 static 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);
    503 
    504         return EOK;
    505 }
    506 
    507485static errno_t rtl8169_set_addr(ddf_fun_t *fun, const nic_address_t *addr)
    508486{
     
    783761}
    784762
    785 static void rtl8169_reset(rtl8169_t *rtl8169)
     763inline static void rtl8169_reset(rtl8169_t *rtl8169)
    786764{
    787765        pio_write_8(rtl8169->regs + CR, CR_RST);
     
    828806 *  @param was_promisc  Sign if the promiscuous mode was active before disabling
    829807 */
    830 static void rtl8169_rcx_promics_rem(nic_t *nic_data,
     808inline static void rtl8169_rcx_promics_rem(nic_t *nic_data,
    831809    nic_multicast_mode_t mcast_mode, uint8_t was_promisc)
    832810{
     
    10551033}
    10561034
    1057 /** RTL8169 IRQ handler.
    1058  *
    1059  * @param icall IRQ event notification
    1060  * @param arg Argument (rtl8169_t *)
    1061  */
    1062 static void rtl8169_irq_handler(ipc_call_t *icall, void *arg)
    1063 {
     1035static void rtl8169_irq_handler(ipc_call_t *icall, ddf_dev_t *dev)
     1036{
     1037        assert(dev);
     1038        assert(icall);
     1039
    10641040        uint16_t isr = (uint16_t) ipc_get_arg2(icall) & INT_KNOWN;
    1065         rtl8169_t *rtl8169 = (rtl8169_t *)arg;
     1041        nic_t *nic_data = nic_get_from_ddf_dev(dev);
     1042        rtl8169_t *rtl8169 = nic_get_specific(nic_data);
    10661043
    10671044        ddf_msg(LVL_DEBUG, "rtl8169_irq_handler(): isr=0x%04x", isr);
     
    10731050                /* Packet underrun or link change */
    10741051                if (isr & INT_PUN) {
    1075                         rtl8169_link_change(rtl8169->dev);
     1052                        rtl8169_link_change(dev);
    10761053                        pio_write_16(rtl8169->regs + ISR, INT_PUN);
    10771054                }
     
    10791056                /* Transmit notification */
    10801057                if (isr & (INT_TER | INT_TOK | INT_TDU)) {
    1081                         rtl8169_transmit_done(rtl8169->dev);
     1058                        rtl8169_transmit_done(dev);
    10821059                        pio_write_16(rtl8169->regs + ISR, (INT_TER | INT_TOK | INT_TDU));
    10831060                }
     
    10951072
    10961073                if (isr & (INT_RER | INT_ROK)) {
    1097                         rtl8169_receive_done(rtl8169->dev);
     1074                        rtl8169_receive_done(dev);
    10981075                        pio_write_16(rtl8169->regs + ISR, (INT_RER | INT_ROK));
    10991076                }
Note: See TracChangeset for help on using the changeset viewer.