Ignore:
File:
1 edited

Legend:

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

    r8820544 r99e8fb7b  
    3333 */
    3434
     35/* XXX Fix this */
     36#define _DDF_DATA_IMPLANT
     37
    3538#include <assert.h>
    3639#include <stdio.h>
     
    3942#include <align.h>
    4043#include <byteorder.h>
    41 #include <irc.h>
     44#include <sysinfo.h>
     45#include <ipc/irc.h>
     46#include <ipc/ns.h>
     47#include <ddi.h>
    4248#include <as.h>
    43 #include <ddi.h>
    4449#include <ddf/log.h>
    4550#include <ddf/interrupt.h>
     
    7176/** ddf_fun_t * -> nic_driver_data_t* cast */
    7277#define NIC_DATA_FUN(fun) \
    73         ((nic_t *) ddf_dev_data_get(ddf_fun_get_dev(fun)))
     78        ((nic_t *) ddf_fun_data_get(fun))
    7479
    7580/** ddf_dev_t * -> nic_driver_data_t* cast */
     
    12291234/** Handle device interrupt
    12301235 *
     1236 * @param dev   E1000 device
    12311237 * @param iid   IPC call id
    12321238 * @param icall IPC call structure
    1233  * @param dev   E1000 device
    1234  *
    1235  */
    1236 static void e1000_interrupt_handler(ipc_callid_t iid, ipc_call_t *icall,
    1237     ddf_dev_t *dev)
     1239 *
     1240 */
     1241static void e1000_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid,
     1242    ipc_call_t *icall)
    12381243{
    12391244        uint32_t icr = (uint32_t) IPC_GET_ARG2(*icall);
     
    13701375        fibril_mutex_lock(&e1000->rx_lock);
    13711376       
    1372         e1000->rx_ring_virt = AS_AREA_ANY;
    13731377        int rc = dmamem_map_anonymous(
    13741378            E1000_RX_FRAME_COUNT * sizeof(e1000_rx_descriptor_t),
     
    13921396        }
    13931397       
    1394         for (size_t i = 0; i < E1000_RX_FRAME_COUNT; i++) {
    1395                 uintptr_t frame_phys;
    1396                 void *frame_virt = AS_AREA_ANY;
    1397                
     1398        size_t i;
     1399        uintptr_t frame_phys;
     1400        void *frame_virt;
     1401       
     1402        for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
    13981403                rc = dmamem_map_anonymous(E1000_MAX_SEND_FRAME_SIZE,
    13991404                    DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0,
     
    14071412       
    14081413        /* Write descriptor */
    1409         for (size_t i = 0; i < E1000_RX_FRAME_COUNT; i++)
     1414        for (i = 0; i < E1000_RX_FRAME_COUNT; i++)
    14101415                e1000_fill_new_rx_descriptor(nic, i);
    14111416       
     
    14161421       
    14171422error:
    1418         for (size_t i = 0; i < E1000_RX_FRAME_COUNT; i++) {
     1423        for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
    14191424                if (e1000->rx_frame_virt[i] != NULL) {
    14201425                        dmamem_unmap_anonymous(e1000->rx_frame_virt[i]);
     
    15661571       
    15671572        e1000->tx_ring_phys = 0;
    1568         e1000->tx_ring_virt = AS_AREA_ANY;
     1573        e1000->tx_ring_virt = NULL;
    15691574       
    15701575        e1000->tx_frame_phys = NULL;
     
    15921597       
    15931598        for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
    1594                 e1000->tx_frame_virt[i] = AS_AREA_ANY;
    15951599                rc = dmamem_map_anonymous(E1000_MAX_SEND_FRAME_SIZE,
    15961600                    DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE,
     
    17531757        e1000_enable_interrupts(e1000);
    17541758       
    1755         int rc = irc_enable_interrupt(e1000->irq);
    1756         if (rc != EOK) {
    1757                 e1000_disable_interrupts(e1000);
    1758                 fibril_mutex_unlock(&e1000->ctrl_lock);
    1759                 fibril_mutex_unlock(&e1000->tx_lock);
    1760                 fibril_mutex_unlock(&e1000->rx_lock);
    1761                 return rc;
    1762         }
     1759        nic_enable_interrupt(nic, e1000->irq);
    17631760       
    17641761        e1000_clear_rx_ring(e1000);
     
    17981795        e1000_disable_rx(e1000);
    17991796       
    1800         irc_disable_interrupt(e1000->irq);
     1797        nic_disable_interrupt(nic, e1000->irq);
    18011798        e1000_disable_interrupts(e1000);
    18021799       
     
    21502147        nic_set_ddf_fun(nic, fun);
    21512148        ddf_fun_set_ops(fun, &e1000_dev_ops);
     2149        ddf_fun_data_implant(fun, nic);
    21522150       
    21532151        rc = e1000_register_int_handler(nic);
    21542152        if (rc != EOK)
    21552153                goto err_fun_create;
     2154       
     2155        rc = nic_connect_to_services(nic);
     2156        if (rc != EOK)
     2157                goto err_irq;
    21562158       
    21572159        rc = e1000_initialize_rx_structure(nic);
     
    23762378int main(void)
    23772379{
    2378         printf("%s: HelenOS E1000 network adapter driver\n", NAME);
    2379        
    2380         if (nic_driver_init(NAME) != EOK)
    2381                 return 1;
     2380        int rc = nic_driver_init(NAME);
     2381        if (rc != EOK)
     2382                return rc;
    23822383       
    23832384        nic_driver_implement(&e1000_driver_ops, &e1000_dev_ops,
     
    23852386       
    23862387        ddf_log_init(NAME);
     2388        ddf_msg(LVL_NOTE, "HelenOS E1000 driver started");
    23872389        return ddf_driver_main(&e1000_driver);
    23882390}
Note: See TracChangeset for help on using the changeset viewer.