int __init rtcfg_init_frames(void) { int ret; rtskb_queue_init(&rx_queue); rtos_event_sem_init(&rx_event); if (rtskb_pool_init(&rtcfg_pool, num_rtskbs) < num_rtskbs) { ret = -ENOMEM; goto error1; } ret = rtos_task_init(&rx_task, rtcfg_rx_task, 0, RTOS_LOWEST_RT_PRIORITY); if (ret < 0) goto error1; ret = rtdev_add_pack(&rtcfg_packet_type); if (ret < 0) goto error2; return 0; error2: rtos_task_delete(&rx_task); error1: rtos_event_sem_delete(&rx_event); rtskb_pool_release(&rtcfg_pool); return ret; }
static void rtcfg_client_detach(int ifindex, struct rt_proc_call *call) { struct rtcfg_device *rtcfg_dev = &device[ifindex]; struct rtcfg_cmd *cmd_event; cmd_event = rtpc_get_priv(call, struct rtcfg_cmd); cmd_event->args.detach.station_addr_list = rtcfg_dev->spec.clt.station_addr_list; cmd_event->args.detach.stage2_chain = rtcfg_dev->spec.clt.stage2_chain; while (1) { call = rtcfg_dequeue_blocking_call(ifindex); if (call == NULL) break; rtpc_complete_call(call, -ENODEV); } if (rtcfg_dev->flags & FLAG_TIMER_STARTED) { rtcfg_dev->flags |= FLAG_TIMER_SHUTDOWN; rtos_task_delete(&rtcfg_dev->timer_task); } rtcfg_reset_device(ifindex); rtcfg_next_main_state(cmd_event->ifindex, RTCFG_MAIN_OFF); rtos_res_unlock(&rtcfg_dev->dev_lock); }
void nomac_proto_cleanup(void) { shutdown = 1; rtos_event_sem_signal(&wakeup_sem); rtos_task_delete(&wrapper_task); rtos_event_sem_delete(&wakeup_sem); }
void cleanup_module(void) { #ifdef CONFIG_RTOS_STARTSTOP_TIMER if (start_timer) rtos_timer_stop(); #endif /* Important: First close the socket! */ while (rt_dev_close(sock) == -EAGAIN) { printk("frag-ip: Socket busy - waiting...\n"); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1*HZ); /* wait a second */ } rtos_task_delete(&rt_xmit_task); rtos_task_delete(&rt_recv_task); }
void cleanup_module(void) { /* Important: First close the socket! */ while (close_rt(sock) == -EAGAIN) { rtos_print("rt_server: Not all buffers freed yet - waiting...\n"); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1*HZ); /* wait a second */ } rtos_task_delete(&rt_task); }
void cleanup_module(void) { rtos_irq_disable(&irq_handle); rtos_irq_free(&irq_handle); while (close_rt(sock) == -EAGAIN) { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1*HZ); /* wait a second */ } while (close_rt(tdma) == -EAGAIN) { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1*HZ); /* wait a second */ } rtos_event_sem_delete(&event_sem); rtos_task_delete(&task); }
void rtcfg_cleanup_frames(void) { struct rtskb *rtskb; while (rtdev_remove_pack(&rtcfg_packet_type) == -EAGAIN) { RTCFG_DEBUG(3, "RTcfg: waiting for protocol unregistration\n"); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1*HZ); /* wait a second */ } rtos_event_sem_delete(&rx_event); rtos_task_delete(&rx_task); while ((rtskb = rtskb_dequeue(&rx_queue)) != NULL) { rtdev_dereference(rtskb->rtdev); kfree_rtskb(rtskb); } rtskb_pool_release(&rtcfg_pool); }
void rtpc_cleanup(void) { rtos_task_delete(&dispatch_task); rtos_event_sem_delete(&dispatch_event); rtos_nrt_signal_delete(&rtpc_nrt_signal); }
int init_module(void) { int ret; unsigned int i; struct sockaddr_in local_addr; unsigned long dest_ip = rt_inet_aton(dest_ip_s); if (size > 65505) size = 65505; printk("destination ip address %s=%08x\n", dest_ip_s, (unsigned int)dest_ip); printk("size %d\n", size); #ifdef CONFIG_RTOS_STARTSTOP_TIMER printk("start timer %d\n", start_timer); #endif /* fill output buffer with test pattern */ for (i = 0; i < sizeof(buffer_out); i++) buffer_out[i] = i & 0xFF; /* create rt-socket */ sock = rt_dev_socket(AF_INET,SOCK_DGRAM,0); if (sock < 0) { printk(" rt_dev_socket() = %d!\n", sock); return sock; } /* extend the socket pool */ ret = rt_dev_ioctl(sock, RTNET_RTIOC_EXTPOOL, &add_rtskbs); if (ret != (int)add_rtskbs) { printk(" rt_dev_ioctl(RT_IOC_SO_EXTPOOL) = %d\n", ret); rt_dev_close(sock); return -1; } /* bind the rt-socket to a port */ memset(&local_addr, 0, sizeof(struct sockaddr_in)); local_addr.sin_family = AF_INET; local_addr.sin_port = htons(PORT); local_addr.sin_addr.s_addr = INADDR_ANY; ret = rt_dev_bind(sock, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in)); if (ret < 0) { printk(" rt_dev_bind() = %d!\n", ret); rt_dev_close(sock); return ret; } /* set destination address */ memset(&dest_addr, 0, sizeof(struct sockaddr_in)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); dest_addr.sin_addr.s_addr = dest_ip; #ifdef CONFIG_RTOS_STARTSTOP_TIMER if (start_timer) { rtos_timer_start_oneshot(); } #endif ret = rtos_task_init(&rt_recv_task, recv_msg, 0, 9); if (ret != 0) { printk(" rtos_task_init(recv) = %d!\n", ret); rt_dev_close(sock); return ret; } ret = rtos_task_init_periodic(&rt_xmit_task, send_msg, 0, 10, CYCLE); if (ret != 0) { printk(" rtos_task_init_periodic(xmit) = %d!\n", ret); rt_dev_close(sock); rtos_task_delete(&rt_recv_task); return ret; } return 0; }