Ignore:
File:
1 edited

Legend:

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

    r8820544 rd87561c  
    2727 */
    2828
     29/* XXX Fix this */
     30#define _DDF_DATA_IMPLANT
     31
    2932#include <assert.h>
    3033#include <errno.h>
     
    3235#include <byteorder.h>
    3336#include <libarch/barrier.h>
     37
    3438#include <as.h>
    3539#include <ddf/log.h>
     
    3741#include <io/log.h>
    3842#include <nic.h>
    39 #include <pci_dev_iface.h>
    40 #include <irc.h>
    41 #include <stdio.h>
     43#include <device/pci.h>
     44
     45#include <ipc/irc.h>
     46#include <sysinfo.h>
     47#include <ipc/ns.h>
     48
    4249#include <str.h>
    4350
     
    183190        return;
    184191}
     192
     193#include <device/pci.h>
    185194
    186195/** Set PmEn (Power management enable) bit value
     
    852861/** Handle device interrupt
    853862 *
    854  * @param iid    The IPC call id
    855  * @param icall  The IPC call structure
    856  * @param dev    The rtl8139 device
    857  *
    858  */
    859 static void rtl8139_interrupt_handler(ipc_callid_t iid, ipc_call_t *icall,
    860     ddf_dev_t *dev)
     863 *  @param dev    The rtl8139 device
     864 *  @param iid    The IPC call id
     865 *  @param icall  The IPC call structure
     866 */
     867static void rtl8139_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid,
     868    ipc_call_t *icall)
    861869{
    862870        assert(dev);
     
    954962        rtl8139->int_mask = RTL_DEFAULT_INTERRUPTS;
    955963        rtl8139_hw_int_enable(rtl8139);
    956 
    957         int rc = irc_enable_interrupt(rtl8139->irq);
    958         if (rc != EOK) {
    959                 rtl8139_on_stopped(nic_data);
    960                 return rc;
    961         }
     964        nic_enable_interrupt(nic_data, rtl8139->irq);
    962965
    963966        ddf_msg(LVL_DEBUG, "Device activated, interrupt %d registered", rtl8139->irq);
     
    10841087        ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", ddf_dev_get_name(dev), rtl8139->irq);
    10851088
    1086         rtl8139->io_addr = IOADDR_TO_PTR(RNGABS(hw_resources->io_ranges.ranges[0]));
     1089        rtl8139->io_addr = IOADDR_TO_PTR(hw_resources->io_ranges.ranges[0].address);
    10871090        if (hw_resources->io_ranges.ranges[0].size < RTL8139_IO_SIZE) {
    10881091                ddf_msg(LVL_ERROR, "i/o range assigned to the device "
     
    11401143
    11411144        ddf_msg(LVL_DEBUG, "Creating buffers");
    1142        
    1143         rtl8139->tx_buff_virt = AS_AREA_ANY;
    1144         rc = dmamem_map_anonymous(TX_PAGES * PAGE_SIZE, DMAMEM_4GiB,
    1145             AS_AREA_WRITE, 0, &rtl8139->tx_buff_phys, &rtl8139->tx_buff_virt);
     1145
     1146        rc = dmamem_map_anonymous(TX_PAGES * PAGE_SIZE, AS_AREA_WRITE, 0,
     1147            &rtl8139->tx_buff_phys, &rtl8139->tx_buff_virt);
    11461148        if (rc != EOK) {
    11471149                ddf_msg(LVL_ERROR, "Can not allocate transmitter buffers.");
     
    11611163        ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %d bytes",
    11621164            RxBUF_TOT_LENGTH);
    1163        
    1164         rtl8139->rx_buff_virt = AS_AREA_ANY;
    1165         rc = dmamem_map_anonymous(RxBUF_TOT_LENGTH, DMAMEM_4GiB,
    1166             AS_AREA_READ, 0, &rtl8139->rx_buff_phys, &rtl8139->rx_buff_virt);
     1165
     1166        rc = dmamem_map_anonymous(RxBUF_TOT_LENGTH, AS_AREA_READ, 0,
     1167            &rtl8139->rx_buff_phys, &rtl8139->rx_buff_virt);
    11671168        if (rc != EOK) {
    11681169                ddf_msg(LVL_ERROR, "Can not allocate receive buffer.");
     
    13241325                goto err_pio;
    13251326
     1327        rc = nic_connect_to_services(nic_data);
     1328        if (rc != EOK) {
     1329                ddf_msg(LVL_ERROR, "Failed to connect to services (%d)", rc);
     1330                goto err_irq;
     1331        }
     1332
    13261333        fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0");
    13271334        if (fun == NULL) {
     
    13291336                goto err_srv;
    13301337        }
    1331 
    13321338        nic_set_ddf_fun(nic_data, fun);
    13331339        ddf_fun_set_ops(fun, &rtl8139_dev_ops);
     1340        ddf_fun_data_implant(fun, nic_data);
    13341341
    13351342        rc = ddf_fun_bind(fun);
     
    13541361        ddf_fun_destroy(fun);
    13551362err_srv:
     1363        /* XXX Disconnect from services */
     1364err_irq:
    13561365        unregister_interrupt_handler(dev, rtl8139->irq);
    13571366err_pio:
     
    21712180int main(void)
    21722181{
    2173         printf("%s: HelenOS RTL8139 network adapter driver\n", NAME);
    2174 
    21752182        int rc = nic_driver_init(NAME);
    21762183        if (rc != EOK)
    21772184                return rc;
    2178 
    2179         nic_driver_implement(&rtl8139_driver_ops, &rtl8139_dev_ops,
    2180             &rtl8139_nic_iface);
     2185        nic_driver_implement(
     2186                &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface);
    21812187
    21822188        ddf_log_init(NAME);
     2189        ddf_msg(LVL_NOTE, "HelenOS RTL8139 driver started");
    21832190        return ddf_driver_main(&rtl8139_driver);
    21842191}
Note: See TracChangeset for help on using the changeset viewer.