Changeset 8d7ec69d in mainline for uspace/srv/net/nil/eth/eth.c


Ignore:
Timestamp:
2012-01-22T10:40:07Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c38e417, cf9cb36
Parents:
e98fe28c
Message:

NIC should talk to its client via a callback connection with NIC-defined
protocol (was using nil, was connecting via NS).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/nil/eth/eth.c

    re98fe28c r8d7ec69d  
    170170INT_MAP_IMPLEMENT(eth_protos, eth_proto_t);
    171171
    172 int nil_device_state_msg_local(nic_device_id_t device_id, sysarg_t state)
     172static void eth_nic_cb_connection(ipc_callid_t iid, ipc_call_t *icall,
     173    void *arg);
     174
     175static int eth_device_state(nic_device_id_t device_id, sysarg_t state)
    173176{
    174177        int index;
     
    344347        }
    345348       
    346         nic_connect_to_nil(device->sess, SERVICE_ETHERNET, device_id);
     349        rc = nic_callback_create(device->sess, device_id,
     350            eth_nic_cb_connection, NULL);
     351        if (rc != EOK) {
     352                fibril_rwlock_write_unlock(&eth_globals.devices_lock);
     353                async_hangup(device->sess);
     354                free(device);
     355                return EIO;
     356        }
    347357       
    348358        /* Get hardware address */
     
    822832       
    823833        rc = async_data_write_accept(&data, false, 0, 0, 0, &size);
    824         if (rc != EOK)
     834        if (rc != EOK) {
     835                printf("%s: data_write_accept() failed\n", NAME);
    825836                return rc;
     837        }
    826838       
    827839        packet_t *packet = packet_get_1_remote(eth_globals.net_sess, size);
     
    943955               
    944956                return EOK;
    945         case NET_NIL_DEVICE_STATE:
    946                 nil_device_state_msg_local(IPC_GET_DEVICE(*call), IPC_GET_STATE(*call));
    947                 async_answer_0(callid, EOK);
    948                 return EOK;
    949         case NET_NIL_RECEIVED:
    950                 rc = eth_received(IPC_GET_ARG1(*call));
    951                 async_answer_0(callid, (sysarg_t) rc);
    952                 return rc;
    953         case NET_NIL_ADDR_CHANGED:
    954                 rc = eth_addr_changed(IPC_GET_DEVICE(*call));
    955                 async_answer_0(callid, (sysarg_t) rc);
    956                 return rc;
    957957        }
    958958       
    959959        return ENOTSUP;
     960}
     961
     962static void eth_nic_cb_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     963{
     964        int rc;
     965       
     966        async_answer_0(iid, EOK);
     967       
     968        while (true) {
     969                ipc_call_t call;
     970                ipc_callid_t callid = async_get_call(&call);
     971               
     972                if (!IPC_GET_IMETHOD(call))
     973                        break;
     974               
     975                switch (IPC_GET_IMETHOD(call)) {
     976                case NIC_EV_DEVICE_STATE:
     977                        rc = eth_device_state(IPC_GET_ARG1(call),
     978                            IPC_GET_ARG2(call));
     979                        async_answer_0(callid, (sysarg_t) rc);
     980                        break;
     981                case NIC_EV_RECEIVED:
     982                        rc = eth_received(IPC_GET_ARG1(call));
     983                        async_answer_0(callid, (sysarg_t) rc);
     984                        break;
     985                case NIC_EV_ADDR_CHANGED:
     986                        rc = eth_addr_changed(IPC_GET_ARG1(call));
     987                        async_answer_0(callid, (sysarg_t) rc);
     988                        break;
     989                default:
     990                        async_answer_0(callid, ENOTSUP);
     991                }
     992        }
    960993}
    961994
Note: See TracChangeset for help on using the changeset viewer.