Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hw/netif/ne2000/ne2000.c

    ree2fa30a r57d129e  
    4343#include <malloc.h>
    4444#include <sysinfo.h>
    45 #include <ns.h>
    4645#include <ipc/services.h>
     46#include <ipc/ns.h>
    4747#include <ipc/irc.h>
    4848#include <net/modules.h>
     
    7676
    7777static bool irc_service = false;
    78 static async_sess_t *irc_sess = NULL;
     78static int irc_phone = -1;
    7979
    8080/** NE2000 kernel interrupt command sequence.
     
    152152        device_id_t device_id = IRQ_GET_DEVICE(*call);
    153153        netif_device_t *device;
    154         async_sess_t *nil_sess;
     154        int nil_phone;
    155155        ne2k_t *ne2k;
    156156       
    157157        fibril_rwlock_read_lock(&netif_globals.lock);
    158158       
    159         nil_sess = netif_globals.nil_sess;
    160        
    161         if (find_device(device_id, &device) == EOK)
     159        if (find_device(device_id, &device) == EOK) {
     160                nil_phone = device->nil_phone;
    162161                ne2k = (ne2k_t *) device->specific;
    163         else
     162        } else
    164163                ne2k = NULL;
    165164       
     
    167166       
    168167        if (ne2k != NULL) {
    169                 list_t *frames =
     168                link_t *frames =
    170169                    ne2k_interrupt(ne2k, IRQ_GET_ISR(*call), IRQ_GET_TSR(*call));
    171170               
    172171                if (frames != NULL) {
    173172                        while (!list_empty(frames)) {
    174                                 frame_t *frame = list_get_instance(
    175                                     list_first(frames), frame_t, link);
     173                                frame_t *frame =
     174                                    list_get_instance(frames->next, frame_t, link);
    176175                               
    177176                                list_remove(&frame->link);
    178                                 nil_received_msg(nil_sess, device_id, frame->packet,
     177                                nil_received_msg(nil_phone, device_id, frame->packet,
    179178                                    SERVICE_NONE);
    180179                                free(frame);
     
    277276       
    278277        device->device_id = device_id;
     278        device->nil_phone = -1;
    279279        device->specific = (void *) ne2k;
    280280        device->state = NETIF_STOPPED;
     
    329329                change_state(device, NETIF_ACTIVE);
    330330               
    331                 if (irc_service) {
    332                         async_exch_t *exch = async_exchange_begin(irc_sess);
    333                         async_msg_1(exch, IRC_ENABLE_INTERRUPT, ne2k->irq);
    334                         async_exchange_end(exch);
    335                 }
     331                if (irc_service)
     332                        async_msg_1(irc_phone, IRC_ENABLE_INTERRUPT, ne2k->irq);
    336333        }
    337334       
     
    391388       
    392389        if (irc_service) {
    393                 while (!irc_sess)
    394                         irc_sess = service_connect_blocking(EXCHANGE_SERIALIZE,
    395                             SERVICE_IRC, 0, 0);
     390                while (irc_phone < 0)
     391                        irc_phone = service_connect_blocking(SERVICE_IRC, 0, 0);
    396392        }
    397393       
    398394        async_set_interrupt_received(irq_handler);
    399395       
    400         return service_register(SERVICE_NE2000);
     396        return async_connect_to_me(PHONE_NS, SERVICE_NE2000, 0, 0, NULL);
    401397}
    402398
Note: See TracChangeset for help on using the changeset viewer.