Changes in uspace/drv/nic/rtl8139/driver.c [d51838f:582a0b8] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/rtl8139/driver.c
rd51838f r582a0b8 36 36 #include <ddf/log.h> 37 37 #include <ddf/interrupt.h> 38 #include <device/hw_res.h>39 38 #include <io/log.h> 40 39 #include <nic.h> 41 40 #include <pci_dev_iface.h> 41 #include <irc.h> 42 42 #include <stdio.h> 43 43 #include <str.h> … … 125 125 126 126 127 /** Setinterrupts on controller127 /** Disable interrupts on controller 128 128 * 129 129 * @param rtl8139 The card private structure 130 130 */ 131 inline static void rtl8139_hw_int_set(rtl8139_t *rtl8139) 131 inline static void rtl8139_hw_int_disable(rtl8139_t *rtl8139) 132 { 133 pio_write_16(rtl8139->io_port + IMR, 0x0); 134 } 135 /** Enable interrupts on controller 136 * 137 * @param rtl8139 The card private structure 138 */ 139 inline static void rtl8139_hw_int_enable(rtl8139_t *rtl8139) 132 140 { 133 141 pio_write_16(rtl8139->io_port + IMR, rtl8139->int_mask); … … 266 274 } 267 275 276 /** Provide OR in the 32bit register (set selected bits to 1) 277 * 278 * @param rtl8139 The rtl8139 structure 279 * @param reg_offset Register offset in the device IO space 280 * @param bits_add The value to or 281 */ 282 inline static void rtl8139_hw_reg_add_32(rtl8139_t * rtl8139, size_t reg_offset, 283 uint32_t bits_add) 284 { 285 uint32_t value = pio_read_32(rtl8139->io_port + reg_offset); 286 value |= bits_add; 287 pio_write_32(rtl8139->io_port + reg_offset, value); 288 } 289 268 290 /** Unset selected bits in 8bit register 269 291 * … … 279 301 pio_write_8(rtl8139->io_port + reg_offset, value); 280 302 } 303 304 /** Unset selected bits in 32bit register 305 * 306 * @param rtl8139 The rtl8139 structure 307 * @param reg_offset Register offset in the device IO space 308 * @param bits_add The mask of bits to remove 309 */ 310 inline static void rtl8139_hw_reg_rem_32(rtl8139_t * rtl8139, size_t reg_offset, 311 uint32_t bits_add) 312 { 313 uint32_t value = pio_read_32(rtl8139->io_port + reg_offset); 314 value &= ~bits_add; 315 pio_write_32(rtl8139->io_port + reg_offset, value); 316 } 317 281 318 282 319 static int rtl8139_set_addr(ddf_fun_t *fun, const nic_address_t *); … … 834 871 835 872 /* Turn the interrupts on again */ 836 rtl8139_hw_int_ set(rtl8139);873 rtl8139_hw_int_enable(rtl8139); 837 874 }; 838 875 … … 844 881 * @param nic_data The driver data 845 882 * 846 * @return IRQ capability handle if the handler was registered. 847 * @return Negative error code otherwise. 883 * @return EOK if the handler was registered, negative error code otherwise 848 884 */ 849 885 inline static int rtl8139_register_int_handler(nic_t *nic_data) … … 858 894 rtl8139_irq_code.cmds[2].addr = rtl8139->io_addr + ISR; 859 895 rtl8139_irq_code.cmds[3].addr = rtl8139->io_addr + IMR; 860 int cap= register_interrupt_handler(nic_get_ddf_dev(nic_data),896 int rc = register_interrupt_handler(nic_get_ddf_dev(nic_data), 861 897 rtl8139->irq, rtl8139_interrupt_handler, &rtl8139_irq_code); 862 898 863 899 RTL8139_IRQ_STRUCT_UNLOCK(); 864 900 865 return cap;901 return rc; 866 902 } 867 903 … … 918 954 919 955 rtl8139->int_mask = RTL_DEFAULT_INTERRUPTS; 920 rtl8139_hw_int_ set(rtl8139);921 922 int rc = hw_res_enable_interrupt(rtl8139->parent_sess,rtl8139->irq);956 rtl8139_hw_int_enable(rtl8139); 957 958 int rc = irc_enable_interrupt(rtl8139->irq); 923 959 if (rc != EOK) { 924 960 rtl8139_on_stopped(nic_data); … … 976 1012 return NULL; 977 1013 978 rtl8139_t *rtl8139 = calloc(1,sizeof(rtl8139_t));1014 rtl8139_t *rtl8139 = malloc(sizeof(rtl8139_t)); 979 1015 if (!rtl8139) { 980 1016 nic_unbind_and_destroy(dev); … … 982 1018 } 983 1019 984 rtl8139->dev = dev;1020 memset(rtl8139, 0, sizeof(rtl8139_t)); 985 1021 986 1022 rtl8139->nic_data = nic_data; … … 1166 1202 1167 1203 ddf_msg(LVL_DEBUG, "rtl8139: dev_data created"); 1168 rtl8139->parent_sess = ddf_dev_parent_sess_get(dev);1169 if (rtl8139->parent_sess == NULL) {1170 ddf_msg(LVL_ERROR, "Error connecting parent device.");1171 return EIO;1172 }1173 1204 1174 1205 /* Obtain and fill hardware resources info and connect to parent */ … … 1263 1294 ddf_fun_t *fun; 1264 1295 1296 assert(dev); 1265 1297 ddf_msg(LVL_NOTE, "RTL8139_dev_add %s (handle = %zu)", 1266 1298 ddf_dev_get_name(dev), ddf_dev_get_handle(dev)); … … 1289 1321 1290 1322 /* Register interrupt handler */ 1291 int irq_cap = rtl8139_register_int_handler(nic_data); 1292 if (irq_cap < 0) { 1293 rc = irq_cap; 1323 rc = rtl8139_register_int_handler(nic_data); 1324 if (rc != EOK) 1294 1325 goto err_pio; 1295 }1296 1326 1297 1327 fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0"); … … 1325 1355 ddf_fun_destroy(fun); 1326 1356 err_srv: 1327 unregister_interrupt_handler(dev, irq_cap);1357 unregister_interrupt_handler(dev, rtl8139->irq); 1328 1358 err_pio: 1329 1359 // rtl8139_pio_disable(dev); … … 2087 2117 /* Disable timer interrupts while working with timer-related data */ 2088 2118 rtl8139->int_mask = 0; 2089 rtl8139_hw_int_ set(rtl8139);2119 rtl8139_hw_int_enable(rtl8139); 2090 2120 2091 2121 rtl8139->poll_timer = new_timer; … … 2110 2140 } 2111 2141 2112 rtl8139_hw_int_ set(rtl8139);2142 rtl8139_hw_int_enable(rtl8139); 2113 2143 2114 2144 fibril_mutex_unlock(&rtl8139->rx_lock);
Note:
See TracChangeset
for help on using the changeset viewer.