Changeset 8e7c9fe in mainline for uspace/drv/nic/e1k/e1k.c


Ignore:
Timestamp:
2014-09-12T03:45:25Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c53b58e
Parents:
3eb0c85 (diff), 105d8d6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

most usb changes were reverted. blink and usbmass were fixed
known problems:
ehci won't initialize
usbmast asserts on unmount (happens on mainline too)

File:
1 edited

Legend:

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

    r3eb0c85 r8e7c9fe  
    3333 */
    3434
    35 /* XXX Fix this */
    36 #define _DDF_DATA_IMPLANT
    37 
    3835#include <assert.h>
    3936#include <stdio.h>
     
    4239#include <align.h>
    4340#include <byteorder.h>
    44 #include <sysinfo.h>
    45 #include <ipc/irc.h>
    46 #include <ipc/ns.h>
     41#include <irc.h>
     42#include <as.h>
    4743#include <ddi.h>
    48 #include <as.h>
    4944#include <ddf/log.h>
    5045#include <ddf/interrupt.h>
     
    7671/** ddf_fun_t * -> nic_driver_data_t* cast */
    7772#define NIC_DATA_FUN(fun) \
    78         ((nic_t *) ddf_fun_data_get(fun))
     73        ((nic_t *) ddf_dev_data_get(ddf_fun_get_dev(fun)))
    7974
    8075/** ddf_dev_t * -> nic_driver_data_t* cast */
     
    12341229/** Handle device interrupt
    12351230 *
    1236  * @param dev   E1000 device
    12371231 * @param iid   IPC call id
    12381232 * @param icall IPC call structure
    1239  *
    1240  */
    1241 static void e1000_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid,
    1242     ipc_call_t *icall)
     1233 * @param dev   E1000 device
     1234 *
     1235 */
     1236static void e1000_interrupt_handler(ipc_callid_t iid, ipc_call_t *icall,
     1237    ddf_dev_t *dev)
    12431238{
    12441239        uint32_t icr = (uint32_t) IPC_GET_ARG2(*icall);
     
    13751370        fibril_mutex_lock(&e1000->rx_lock);
    13761371       
     1372        e1000->rx_ring_virt = AS_AREA_ANY;
    13771373        int rc = dmamem_map_anonymous(
    13781374            E1000_RX_FRAME_COUNT * sizeof(e1000_rx_descriptor_t),
     
    13961392        }
    13971393       
    1398         size_t i;
    1399         uintptr_t frame_phys;
    1400         void *frame_virt;
    1401        
    1402         for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
     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               
    14031398                rc = dmamem_map_anonymous(E1000_MAX_SEND_FRAME_SIZE,
    14041399                    DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE, 0,
     
    14121407       
    14131408        /* Write descriptor */
    1414         for (i = 0; i < E1000_RX_FRAME_COUNT; i++)
     1409        for (size_t i = 0; i < E1000_RX_FRAME_COUNT; i++)
    14151410                e1000_fill_new_rx_descriptor(nic, i);
    14161411       
     
    14211416       
    14221417error:
    1423         for (i = 0; i < E1000_RX_FRAME_COUNT; i++) {
     1418        for (size_t i = 0; i < E1000_RX_FRAME_COUNT; i++) {
    14241419                if (e1000->rx_frame_virt[i] != NULL) {
    14251420                        dmamem_unmap_anonymous(e1000->rx_frame_virt[i]);
     
    15711566       
    15721567        e1000->tx_ring_phys = 0;
    1573         e1000->tx_ring_virt = NULL;
     1568        e1000->tx_ring_virt = AS_AREA_ANY;
    15741569       
    15751570        e1000->tx_frame_phys = NULL;
     
    15971592       
    15981593        for (i = 0; i < E1000_TX_FRAME_COUNT; i++) {
     1594                e1000->tx_frame_virt[i] = AS_AREA_ANY;
    15991595                rc = dmamem_map_anonymous(E1000_MAX_SEND_FRAME_SIZE,
    16001596                    DMAMEM_4GiB, AS_AREA_READ | AS_AREA_WRITE,
     
    17571753        e1000_enable_interrupts(e1000);
    17581754       
    1759         nic_enable_interrupt(nic, e1000->irq);
     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        }
    17601763       
    17611764        e1000_clear_rx_ring(e1000);
     
    17951798        e1000_disable_rx(e1000);
    17961799       
    1797         nic_disable_interrupt(nic, e1000->irq);
     1800        irc_disable_interrupt(e1000->irq);
    17981801        e1000_disable_interrupts(e1000);
    17991802       
     
    21472150        nic_set_ddf_fun(nic, fun);
    21482151        ddf_fun_set_ops(fun, &e1000_dev_ops);
    2149         ddf_fun_data_implant(fun, nic);
    21502152       
    21512153        rc = e1000_register_int_handler(nic);
    21522154        if (rc != EOK)
    21532155                goto err_fun_create;
    2154        
    2155         rc = nic_connect_to_services(nic);
    2156         if (rc != EOK)
    2157                 goto err_irq;
    21582156       
    21592157        rc = e1000_initialize_rx_structure(nic);
     
    23782376int main(void)
    23792377{
    2380         int rc = nic_driver_init(NAME);
    2381         if (rc != EOK)
    2382                 return rc;
     2378        printf("%s: HelenOS E1000 network adapter driver\n", NAME);
     2379       
     2380        if (nic_driver_init(NAME) != EOK)
     2381                return 1;
    23832382       
    23842383        nic_driver_implement(&e1000_driver_ops, &e1000_dev_ops,
     
    23862385       
    23872386        ddf_log_init(NAME);
    2388         ddf_msg(LVL_NOTE, "HelenOS E1000 driver started");
    23892387        return ddf_driver_main(&e1000_driver);
    23902388}
Note: See TracChangeset for help on using the changeset viewer.