Changes in uspace/drv/nic/rtl8139/driver.c [8820544:99e8fb7b] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/rtl8139/driver.c
r8820544 r99e8fb7b 27 27 */ 28 28 29 /* XXX Fix this */ 30 #define _DDF_DATA_IMPLANT 31 29 32 #include <assert.h> 30 33 #include <errno.h> … … 32 35 #include <byteorder.h> 33 36 #include <libarch/barrier.h> 37 34 38 #include <as.h> 35 39 #include <ddf/log.h> … … 38 42 #include <nic.h> 39 43 #include <pci_dev_iface.h> 40 #include <irc.h> 41 #include <stdio.h> 44 45 #include <ipc/irc.h> 46 #include <sysinfo.h> 47 #include <ipc/ns.h> 48 42 49 #include <str.h> 43 50 … … 852 859 /** Handle device interrupt 853 860 * 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) 861 * @param dev The rtl8139 device 862 * @param iid The IPC call id 863 * @param icall The IPC call structure 864 */ 865 static void rtl8139_interrupt_handler(ddf_dev_t *dev, ipc_callid_t iid, 866 ipc_call_t *icall) 861 867 { 862 868 assert(dev); … … 954 960 rtl8139->int_mask = RTL_DEFAULT_INTERRUPTS; 955 961 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 } 962 nic_enable_interrupt(nic_data, rtl8139->irq); 962 963 963 964 ddf_msg(LVL_DEBUG, "Device activated, interrupt %d registered", rtl8139->irq); … … 1140 1141 1141 1142 ddf_msg(LVL_DEBUG, "Creating buffers"); 1142 1143 rtl8139->tx_buff_virt = AS_AREA_ANY; 1143 1144 1144 rc = dmamem_map_anonymous(TX_PAGES * PAGE_SIZE, DMAMEM_4GiB, 1145 1145 AS_AREA_WRITE, 0, &rtl8139->tx_buff_phys, &rtl8139->tx_buff_virt); … … 1161 1161 ddf_msg(LVL_DEBUG, "Allocating receiver buffer of the size %d bytes", 1162 1162 RxBUF_TOT_LENGTH); 1163 1164 rtl8139->rx_buff_virt = AS_AREA_ANY; 1163 1165 1164 rc = dmamem_map_anonymous(RxBUF_TOT_LENGTH, DMAMEM_4GiB, 1166 1165 AS_AREA_READ, 0, &rtl8139->rx_buff_phys, &rtl8139->rx_buff_virt); … … 1324 1323 goto err_pio; 1325 1324 1325 rc = nic_connect_to_services(nic_data); 1326 if (rc != EOK) { 1327 ddf_msg(LVL_ERROR, "Failed to connect to services (%d)", rc); 1328 goto err_irq; 1329 } 1330 1326 1331 fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0"); 1327 1332 if (fun == NULL) { … … 1329 1334 goto err_srv; 1330 1335 } 1331 1332 1336 nic_set_ddf_fun(nic_data, fun); 1333 1337 ddf_fun_set_ops(fun, &rtl8139_dev_ops); 1338 ddf_fun_data_implant(fun, nic_data); 1334 1339 1335 1340 rc = ddf_fun_bind(fun); … … 1354 1359 ddf_fun_destroy(fun); 1355 1360 err_srv: 1361 /* XXX Disconnect from services */ 1362 err_irq: 1356 1363 unregister_interrupt_handler(dev, rtl8139->irq); 1357 1364 err_pio: … … 2171 2178 int main(void) 2172 2179 { 2173 printf("%s: HelenOS RTL8139 network adapter driver\n", NAME);2174 2175 2180 int rc = nic_driver_init(NAME); 2176 2181 if (rc != EOK) 2177 2182 return rc; 2178 2179 nic_driver_implement(&rtl8139_driver_ops, &rtl8139_dev_ops, 2180 &rtl8139_nic_iface); 2183 nic_driver_implement( 2184 &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface); 2181 2185 2182 2186 ddf_log_init(NAME); 2187 ddf_msg(LVL_NOTE, "HelenOS RTL8139 driver started"); 2183 2188 return ddf_driver_main(&rtl8139_driver); 2184 2189 }
Note:
See TracChangeset
for help on using the changeset viewer.