Changeset 03362fbd in mainline for uspace/drv/nic/rtl8139/driver.c


Ignore:
Timestamp:
2013-02-09T23:14:45Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
22dfd38
Parents:
b5d2e57 (diff), 005b765 (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.

Conflict resulting from bool.h → stdbool.h move and ddf structs turning opaque.
Fails to boot to shell console.

File:
1 edited

Legend:

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

    rb5d2e57 r03362fbd  
    2727 */
    2828
     29/* XXX Fix this */
     30#define _DDF_DATA_IMPLANT
     31
    2932#include <assert.h>
    3033#include <errno.h>
    3134#include <align.h>
    3235#include <byteorder.h>
    33 #include <libarch/ddi.h>
    3436#include <libarch/barrier.h>
    3537
     
    212214        rtl8139_regs_lock(rtl8139->io_port);
    213215
     216        async_sess_t *pci_sess =
     217                ddf_dev_parent_sess_get(nic_get_ddf_dev(rtl8139->nic_data));
     218
    214219        if (bit_val) {
    215                 async_sess_t *pci_sess =
    216                         nic_get_ddf_dev(rtl8139->nic_data)->parent_sess;
    217220                uint8_t pmen;
    218221                pci_config_space_read_8(pci_sess, 0x55, &pmen);
    219222                pci_config_space_write_8(pci_sess, 0x55, pmen | 1 | (1 << 7));
    220223        } else {
    221                 async_sess_t *pci_sess =
    222                         nic_get_ddf_dev(rtl8139->nic_data)->parent_sess;
    223224                uint8_t pmen;
    224225                pci_config_space_read_8(pci_sess, 0x55, &pmen);
     
    618619                /* Check if the header is valid, otherwise we are lost in the buffer */
    619620                if (size == 0 || size > RTL8139_FRAME_MAX_LENGTH) {
    620                         ddf_msg(LVL_ERROR, "Receiver error -> receiver reset (size: %4"PRIu16", "
    621                             "header 0x%4"PRIx16". Offset: %zu)", size, frame_header,
     621                        ddf_msg(LVL_ERROR, "Receiver error -> receiver reset (size: %4" PRIu16 ", "
     622                            "header 0x%4" PRIx16 ". Offset: %d)", size, frame_header,
    622623                            rx_offset);
    623624                        goto rx_err;
     
    10521053        assert(dev);
    10531054
    1054         if (dev->driver_data)
     1055        if (ddf_dev_data_get(dev))
    10551056                nic_unbind_and_destroy(dev);
    1056 
    1057         if (dev->parent_sess != NULL) {
    1058                 async_hangup(dev->parent_sess);
    1059                 dev->parent_sess = NULL;
    1060         }
    10611057}
    10621058
     
    10801076
    10811077        if (hw_resources->irqs.count != 1) {
    1082                 ddf_msg(LVL_ERROR, "%s device: unexpected irq count", dev->name);
     1078                ddf_msg(LVL_ERROR, "%s device: unexpected irq count", ddf_dev_get_name(dev));
    10831079                return EINVAL;
    10841080        };
    10851081        if (hw_resources->io_ranges.count != 1) {
    1086                 ddf_msg(LVL_ERROR, "%s device: unexpected io ranges count", dev->name);
     1082                ddf_msg(LVL_ERROR, "%s device: unexpected io ranges count", ddf_dev_get_name(dev));
    10871083                return EINVAL;
    10881084        }
    10891085
    10901086        rtl8139->irq = hw_resources->irqs.irqs[0];
    1091         ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", dev->name, rtl8139->irq);
     1087        ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", ddf_dev_get_name(dev), rtl8139->irq);
    10921088
    10931089        rtl8139->io_addr = IOADDR_TO_PTR(hw_resources->io_ranges.ranges[0].address);
    10941090        if (hw_resources->io_ranges.ranges[0].size < RTL8139_IO_SIZE) {
    10951091                ddf_msg(LVL_ERROR, "i/o range assigned to the device "
    1096                     "%s is too small.", dev->name);
     1092                    "%s is too small.", ddf_dev_get_name(dev));
    10971093                return EINVAL;
    10981094        }
    1099         ddf_msg(LVL_DEBUG, "%s device: i/o addr %p assigned.", dev->name, rtl8139->io_addr);
     1095        ddf_msg(LVL_DEBUG, "%s device: i/o addr %p assigned.", ddf_dev_get_name(dev), rtl8139->io_addr);
    11001096
    11011097        return EOK;
     
    11651161
    11661162        /* Allocate buffer for receiver */
    1167         ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %zu bytes",
     1163        ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %d bytes",
    11681164            RxBUF_TOT_LENGTH);
    11691165
     
    11921188static int rtl8139_device_initialize(ddf_dev_t *dev)
    11931189{
    1194         ddf_msg(LVL_DEBUG, "rtl8139_dev_initialize %s", dev->name);
     1190        ddf_msg(LVL_DEBUG, "rtl8139_dev_initialize %s", ddf_dev_get_name(dev));
    11951191
    11961192        int ret = EOK;
     
    12011197        rtl8139_t *rtl8139 = rtl8139_create_dev_data(dev);
    12021198        if (rtl8139 == NULL) {
    1203                 ddf_msg(LVL_ERROR, "Not enough memory for initializing %s.", dev->name);
     1199                ddf_msg(LVL_ERROR, "Not enough memory for initializing %s.", ddf_dev_get_name(dev));
    12041200                return ENOMEM;
    12051201        }
     
    12461242static int rtl8139_pio_enable(ddf_dev_t *dev)
    12471243{
    1248         ddf_msg(LVL_DEBUG, NAME ": rtl8139_pio_enable %s", dev->name);
     1244        ddf_msg(LVL_DEBUG, NAME ": rtl8139_pio_enable %s", ddf_dev_get_name(dev));
    12491245
    12501246        rtl8139_t *rtl8139 = nic_get_specific(nic_get_from_ddf_dev(dev));
     
    12521248        /* Gain control over port's registers. */
    12531249        if (pio_enable(rtl8139->io_addr, RTL8139_IO_SIZE, &rtl8139->io_port)) {
    1254                 ddf_msg(LVL_ERROR, "Cannot gain the port %lx for device %s.", rtl8139->io_addr,
    1255                     dev->name);
     1250                ddf_msg(LVL_ERROR, "Cannot gain the port %p for device %s.", rtl8139->io_addr,
     1251                    ddf_dev_get_name(dev));
    12561252                return EADDRNOTAVAIL;
    12571253        }
     
    12991295
    13001296        assert(dev);
    1301         ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %d)", dev->name, dev->handle);
     1297        ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %zu)",
     1298            ddf_dev_get_name(dev), ddf_dev_get_handle(dev));
    13021299
    13031300        /* Init device structure for rtl8139 */
     
    13301327        rc = nic_connect_to_services(nic_data);
    13311328        if (rc != EOK) {
    1332                 ddf_msg(LVL_ERROR, "Failed to connect to services", rc);
     1329                ddf_msg(LVL_ERROR, "Failed to connect to services (%d)", rc);
    13331330                goto err_irq;
    13341331        }
     
    13401337        }
    13411338        nic_set_ddf_fun(nic_data, fun);
    1342         fun->ops = &rtl8139_dev_ops;
    1343         fun->driver_data = nic_data;
     1339        ddf_fun_set_ops(fun, &rtl8139_dev_ops);
     1340        ddf_fun_data_implant(fun, nic_data);
    13441341
    13451342        rc = ddf_fun_bind(fun);
     
    13551352
    13561353        ddf_msg(LVL_NOTE, "The %s device has been successfully initialized.",
    1357             dev->name);
     1354            ddf_dev_get_name(dev));
    13581355
    13591356        return EOK;
     
    21412138                pio_write_32(rtl8139->io_port + TCTR, 0);
    21422139
    2143                 ddf_msg(LVL_DEBUG, "Periodic mode. Interrupt mask %"PRIx16", poll.full_skips %"
    2144                     PRIu32", last timer %"PRIu32".", rtl8139->int_mask,
    2145                     rtl8139->poll_timer.full_skips, rtl8139->poll_timer.last_val);
     2140                ddf_msg(LVL_DEBUG, "Periodic mode. Interrupt mask %" PRIx16 ", "
     2141                    "poll.full_skips %zu, last timer %" PRIu32,
     2142                    rtl8139->int_mask, rtl8139->poll_timer.full_skips,
     2143                    rtl8139->poll_timer.last_val);
    21462144                break;
    21472145        default:
     
    21882186                &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface);
    21892187
    2190         ddf_log_init(NAME, LVL_ERROR);
     2188        ddf_log_init(NAME);
    21912189        ddf_msg(LVL_NOTE, "HelenOS RTL8139 driver started");
    21922190        return ddf_driver_main(&rtl8139_driver);
Note: See TracChangeset for help on using the changeset viewer.