Changes in uspace/drv/nic/rtl8139/driver.c [d87561c:8820544] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/rtl8139/driver.c
rd87561c r8820544 27 27 */ 28 28 29 /* XXX Fix this */30 #define _DDF_DATA_IMPLANT31 32 29 #include <assert.h> 33 30 #include <errno.h> … … 35 32 #include <byteorder.h> 36 33 #include <libarch/barrier.h> 37 38 34 #include <as.h> 39 35 #include <ddf/log.h> … … 41 37 #include <io/log.h> 42 38 #include <nic.h> 43 #include <device/pci.h> 44 45 #include <ipc/irc.h> 46 #include <sysinfo.h> 47 #include <ipc/ns.h> 48 39 #include <pci_dev_iface.h> 40 #include <irc.h> 41 #include <stdio.h> 49 42 #include <str.h> 50 43 … … 190 183 return; 191 184 } 192 193 #include <device/pci.h>194 185 195 186 /** Set PmEn (Power management enable) bit value … … 861 852 /** Handle device interrupt 862 853 * 863 * @param dev The rtl8139 device 864 * @param iid The IPC call id 865 * @param icall The IPC call structure 866 */ 867 static void rtl8139_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid, 868 ipc_call_t *icall) 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) 869 861 { 870 862 assert(dev); … … 962 954 rtl8139->int_mask = RTL_DEFAULT_INTERRUPTS; 963 955 rtl8139_hw_int_enable(rtl8139); 964 nic_enable_interrupt(nic_data, rtl8139->irq); 956 957 int rc = irc_enable_interrupt(rtl8139->irq); 958 if (rc != EOK) { 959 rtl8139_on_stopped(nic_data); 960 return rc; 961 } 965 962 966 963 ddf_msg(LVL_DEBUG, "Device activated, interrupt %d registered", rtl8139->irq); … … 1087 1084 ddf_msg(LVL_DEBUG, "%s device: irq 0x%x assigned", ddf_dev_get_name(dev), rtl8139->irq); 1088 1085 1089 rtl8139->io_addr = IOADDR_TO_PTR( hw_resources->io_ranges.ranges[0].address);1086 rtl8139->io_addr = IOADDR_TO_PTR(RNGABS(hw_resources->io_ranges.ranges[0])); 1090 1087 if (hw_resources->io_ranges.ranges[0].size < RTL8139_IO_SIZE) { 1091 1088 ddf_msg(LVL_ERROR, "i/o range assigned to the device " … … 1143 1140 1144 1141 ddf_msg(LVL_DEBUG, "Creating buffers"); 1145 1146 rc = dmamem_map_anonymous(TX_PAGES * PAGE_SIZE, AS_AREA_WRITE, 0, 1147 &rtl8139->tx_buff_phys, &rtl8139->tx_buff_virt); 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); 1148 1146 if (rc != EOK) { 1149 1147 ddf_msg(LVL_ERROR, "Can not allocate transmitter buffers."); … … 1163 1161 ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %d bytes", 1164 1162 RxBUF_TOT_LENGTH); 1165 1166 rc = dmamem_map_anonymous(RxBUF_TOT_LENGTH, AS_AREA_READ, 0, 1167 &rtl8139->rx_buff_phys, &rtl8139->rx_buff_virt); 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); 1168 1167 if (rc != EOK) { 1169 1168 ddf_msg(LVL_ERROR, "Can not allocate receive buffer."); … … 1325 1324 goto err_pio; 1326 1325 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 1333 1326 fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0"); 1334 1327 if (fun == NULL) { … … 1336 1329 goto err_srv; 1337 1330 } 1331 1338 1332 nic_set_ddf_fun(nic_data, fun); 1339 1333 ddf_fun_set_ops(fun, &rtl8139_dev_ops); 1340 ddf_fun_data_implant(fun, nic_data);1341 1334 1342 1335 rc = ddf_fun_bind(fun); … … 1361 1354 ddf_fun_destroy(fun); 1362 1355 err_srv: 1363 /* XXX Disconnect from services */1364 err_irq:1365 1356 unregister_interrupt_handler(dev, rtl8139->irq); 1366 1357 err_pio: … … 2180 2171 int main(void) 2181 2172 { 2173 printf("%s: HelenOS RTL8139 network adapter driver\n", NAME); 2174 2182 2175 int rc = nic_driver_init(NAME); 2183 2176 if (rc != EOK) 2184 2177 return rc; 2185 nic_driver_implement( 2186 &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface); 2178 2179 nic_driver_implement(&rtl8139_driver_ops, &rtl8139_dev_ops, 2180 &rtl8139_nic_iface); 2187 2181 2188 2182 ddf_log_init(NAME); 2189 ddf_msg(LVL_NOTE, "HelenOS RTL8139 driver started");2190 2183 return ddf_driver_main(&rtl8139_driver); 2191 2184 }
Note:
See TracChangeset
for help on using the changeset viewer.