Changeset 869d936 in mainline
- Timestamp:
- 2014-07-18T08:11:34Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e5424e9
- Parents:
- fc6abbe
- Location:
- uspace
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/nic/e1k/e1k.c
rfc6abbe r869d936 42 42 #include <align.h> 43 43 #include <byteorder.h> 44 #include <sysinfo.h> 45 #include <ipc/irc.h> 46 #include <ipc/ns.h> 44 #include <irc.h> 45 #include <as.h> 47 46 #include <ddi.h> 48 #include <as.h>49 47 #include <ddf/log.h> 50 48 #include <ddf/interrupt.h> … … 1758 1756 e1000_enable_interrupts(e1000); 1759 1757 1760 nic_enable_interrupt(nic,e1000->irq);1758 irc_enable_interrupt(e1000->irq); 1761 1759 1762 1760 e1000_clear_rx_ring(e1000); … … 1796 1794 e1000_disable_rx(e1000); 1797 1795 1798 nic_disable_interrupt(nic,e1000->irq);1796 irc_disable_interrupt(e1000->irq); 1799 1797 e1000_disable_interrupts(e1000); 1800 1798 … … 2153 2151 if (rc != EOK) 2154 2152 goto err_fun_create; 2155 2156 rc = nic_connect_to_services(nic);2157 if (rc != EOK)2158 goto err_irq;2159 2153 2160 2154 rc = e1000_initialize_rx_structure(nic); … … 2379 2373 int main(void) 2380 2374 { 2381 int rc = nic_driver_init(NAME); 2382 if (rc != EOK) 2383 return rc; 2375 printf("%s: HelenOS E1000 network adapter driver\n", NAME); 2376 2377 if (irc_init() != EOK) { 2378 printf("%s: Failed connecting IRC service\n", NAME); 2379 return 1; 2380 } 2381 2382 if (nic_driver_init(NAME) != EOK) 2383 return 1; 2384 2384 2385 2385 nic_driver_implement(&e1000_driver_ops, &e1000_dev_ops, … … 2387 2387 2388 2388 ddf_log_init(NAME); 2389 ddf_msg(LVL_NOTE, "HelenOS E1000 driver started");2390 2389 return ddf_driver_main(&e1000_driver); 2391 2390 } -
uspace/drv/nic/ne2k/ne2k.c
rfc6abbe r869d936 43 43 #include <stdio.h> 44 44 #include <errno.h> 45 #include <irc.h> 45 46 #include <stdlib.h> 46 47 #include <str_error.h> … … 260 261 } 261 262 262 nic_enable_interrupt(nic_data,ne2k->irq);263 irc_enable_interrupt(ne2k->irq); 263 264 } 264 265 return EOK; … … 269 270 ne2k_t *ne2k = (ne2k_t *) nic_get_specific(nic_data); 270 271 271 nic_disable_interrupt(nic_data,ne2k->irq);272 irc_disable_interrupt(ne2k->irq); 272 273 ne2k->receive_configuration = RCR_AB | RCR_AM; 273 274 ne2k_down(ne2k); … … 396 397 } 397 398 398 rc = nic_connect_to_services(nic_data);399 if (rc != EOK) {400 ne2k_dev_cleanup(dev);401 return rc;402 }403 404 399 fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0"); 405 400 if (fun == NULL) { … … 443 438 int main(int argc, char *argv[]) 444 439 { 440 printf("%s: HelenOS NE 2000 network adapter driver\n", NAME); 441 442 if (irc_init() != EOK) { 443 printf("%s: Failed connecting IRC service\n", NAME); 444 return 1; 445 } 446 445 447 nic_driver_init(NAME); 446 448 nic_driver_implement(&ne2k_driver_ops, &ne2k_dev_ops, &ne2k_nic_iface); -
uspace/drv/nic/rtl8139/driver.c
rfc6abbe r869d936 35 35 #include <byteorder.h> 36 36 #include <libarch/barrier.h> 37 38 37 #include <as.h> 39 38 #include <ddf/log.h> … … 42 41 #include <nic.h> 43 42 #include <pci_dev_iface.h> 44 45 #include <ipc/irc.h> 46 #include <sysinfo.h> 47 #include <ipc/ns.h> 48 43 #include <irc.h> 44 #include <stdio.h> 49 45 #include <str.h> 50 46 … … 960 956 rtl8139->int_mask = RTL_DEFAULT_INTERRUPTS; 961 957 rtl8139_hw_int_enable(rtl8139); 962 nic_enable_interrupt(nic_data,rtl8139->irq);958 irc_enable_interrupt(rtl8139->irq); 963 959 964 960 ddf_msg(LVL_DEBUG, "Device activated, interrupt %d registered", rtl8139->irq); … … 1325 1321 goto err_pio; 1326 1322 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 1323 fun = ddf_fun_create(nic_get_ddf_dev(nic_data), fun_exposed, "port0"); 1334 1324 if (fun == NULL) { … … 1361 1351 ddf_fun_destroy(fun); 1362 1352 err_srv: 1363 /* XXX Disconnect from services */1364 err_irq:1365 1353 unregister_interrupt_handler(dev, rtl8139->irq); 1366 1354 err_pio: … … 2180 2168 int main(void) 2181 2169 { 2170 printf("%s: HelenOS RTL8139 network adapter driver\n", NAME); 2171 2172 if (irc_init() != EOK) { 2173 printf("%s: Failed connecting IRC service\n", NAME); 2174 return 1; 2175 } 2176 2182 2177 int rc = nic_driver_init(NAME); 2183 2178 if (rc != EOK) 2184 2179 return rc; 2185 nic_driver_implement( 2186 &rtl8139_driver_ops, &rtl8139_dev_ops, &rtl8139_nic_iface); 2180 2181 nic_driver_implement(&rtl8139_driver_ops, &rtl8139_dev_ops, 2182 &rtl8139_nic_iface); 2187 2183 2188 2184 ddf_log_init(NAME); 2189 ddf_msg(LVL_NOTE, "HelenOS RTL8139 driver started");2190 2185 return ddf_driver_main(&rtl8139_driver); 2191 2186 } -
uspace/lib/c/Makefile
rfc6abbe r869d936 109 109 generic/iplink.c \ 110 110 generic/iplink_srv.c \ 111 generic/irc.c \ 111 112 generic/ieee_double.c \ 112 113 generic/power_of_ten.c \ -
uspace/lib/c/include/ipc/irc.h
rfc6abbe r869d936 33 33 */ 34 34 35 #ifndef LIBC_I RC_H_36 #define LIBC_I RC_H_35 #ifndef LIBC_IPC_IRC_H_ 36 #define LIBC_IPC_IRC_H_ 37 37 38 38 #include <ipc/common.h> -
uspace/lib/nic/include/nic.h
rfc6abbe r869d936 216 216 217 217 /* Functions called in add_device */ 218 extern int nic_connect_to_services(nic_t *);219 218 extern int nic_get_resources(nic_t *, hw_res_list_parsed_t *); 220 219 extern void nic_set_specific(nic_t *, void *); … … 245 244 extern void nic_received_frame(nic_t *, nic_frame_t *); 246 245 extern void nic_received_frame_list(nic_t *, nic_frame_list_t *); 247 extern void nic_disable_interrupt(nic_t *, int);248 extern void nic_enable_interrupt(nic_t *, int);249 246 extern nic_poll_mode_t nic_query_poll_mode(nic_t *, struct timeval *); 250 247 -
uspace/lib/nic/include/nic_driver.h
rfc6abbe r869d936 80 80 /** Client callback session */ 81 81 async_sess_t *client_session; 82 /** Phone to APIC or i8259 */83 async_sess_t *irc_session;84 82 /** Current polling mode of the NIC */ 85 83 nic_poll_mode_t poll_mode; -
uspace/lib/nic/src/nic_driver.c
rfc6abbe r869d936 42 42 #include <stdio.h> 43 43 #include <str_error.h> 44 #include <ipc/services.h>45 #include <ipc/ns.h>46 #include <ipc/irc.h>47 44 #include <sysinfo.h> 48 45 #include <as.h> … … 378 375 } 379 376 380 381 /**382 * Enable interrupts for this driver.383 *384 * @param nic_data385 * @param irq The IRQ number for this device386 */387 void nic_enable_interrupt(nic_t *nic_data, int irq)388 {389 async_exch_t *exch = async_exchange_begin(nic_data->irc_session);390 async_msg_1(exch, IRC_ENABLE_INTERRUPT, irq);391 async_exchange_end(exch);392 }393 394 /**395 * Disable interrupts for this driver.396 *397 * @param nic_data398 * @param irq The IRQ number for this device399 */400 void nic_disable_interrupt(nic_t *nic_data, int irq)401 {402 async_exch_t *exch = async_exchange_begin(nic_data->irc_session);403 async_msg_1(exch, IRC_CLEAR_INTERRUPT, irq);404 async_exchange_end(exch);405 }406 407 377 /** Get the polling mode information from the device 408 378 * … … 420 390 return nic_data->poll_mode; 421 391 }; 422 423 /**424 * Connect to IRC service. This function should be called only from425 * the add_device handler, thus no locking is required.426 *427 * @param nic_data428 *429 * @return EOK If connection was successful.430 * @return EINVAL If the IRC service cannot be determined.431 * @return EREFUSED If IRC service cannot be connected.432 */433 int nic_connect_to_services(nic_t *nic_data)434 {435 /* IRC service */436 sysarg_t apic;437 sysarg_t i8259;438 services_t irc_service = -1;439 if (((sysinfo_get_value("apic", &apic) == EOK) && (apic)) ||440 ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259)))441 irc_service = SERVICE_IRC;442 else443 return EINVAL;444 445 nic_data->irc_session = service_connect_blocking(EXCHANGE_SERIALIZE,446 irc_service, 0, 0);447 if (nic_data->irc_session == NULL)448 return errno;449 450 return EOK;451 }452 392 453 393 /** Inform the NICF about poll mode … … 668 608 nic_data->state = NIC_STATE_STOPPED; 669 609 nic_data->client_session = NULL; 670 nic_data->irc_session = NULL;671 610 nic_data->poll_mode = NIC_POLL_IMMEDIATE; 672 611 nic_data->default_poll_mode = NIC_POLL_IMMEDIATE;
Note:
See TracChangeset
for help on using the changeset viewer.