/*** * rt_socket_init - initialises a new socket structure */ int rt_socket_init(struct rtdm_dev_context *context) { struct rtsocket *sock = (struct rtsocket *)&context->dev_private; unsigned int pool_size; sock->priority = RTSKB_PRIO_VALUE(SOCK_DEF_PRIO, RTSKB_DEF_RT_CHANNEL); sock->callback_func = NULL; rtskb_queue_init(&sock->incoming); rtos_nanosecs_to_time(0, &sock->timeout); rtos_spin_lock_init(&sock->param_lock); rtos_event_sem_init(&sock->wakeup_event); if (test_bit(RTDM_CREATED_IN_NRT, &context->context_flags)) pool_size = rtskb_pool_init(&sock->skb_pool, socket_rtskbs); else pool_size = rtskb_pool_init_rt(&sock->skb_pool, socket_rtskbs); atomic_set(&sock->pool_size, pool_size); if (pool_size < socket_rtskbs) { /* fix statistics */ if (pool_size == 0) rtskb_pools--; rt_socket_cleanup(context); return -ENOMEM; } return 0; }
/*** * rt_socket_init - initialises a new socket structure */ int rt_socket_init(struct rtdm_dev_context *sockctx, unsigned short protocol) { struct rtsocket *sock = (struct rtsocket *)&sockctx->dev_private; unsigned int pool_size; sock->callback_func = NULL; rtskb_queue_init(&sock->incoming); sock->timeout = 0; rtdm_lock_init(&sock->param_lock); rtdm_sem_init(&sock->pending_sem, 0); pool_size = rt_bare_socket_init(sock, protocol, RTSKB_PRIO_VALUE(SOCK_DEF_PRIO, RTSKB_DEF_RT_CHANNEL), socket_rtskbs); sock->pool_size = pool_size; mutex_init(&sock->pool_nrt_lock); if (pool_size < socket_rtskbs) { /* fix statistics */ if (pool_size == 0) rtskb_pools--; rt_socket_cleanup(sockctx); return -ENOMEM; } return 0; }
/*** * rt_socket_init - initialises a new socket structure */ int __rt_socket_init(struct rtdm_fd *fd, unsigned short protocol, struct module *module) { struct rtsocket *sock = rtdm_fd_to_private(fd); unsigned int pool_size; sock->flags = 0; sock->callback_func = NULL; rtskb_queue_init(&sock->incoming); sock->timeout = 0; rtdm_lock_init(&sock->param_lock); rtdm_sem_init(&sock->pending_sem, 0); pool_size = __rt_bare_socket_init(fd, protocol, RTSKB_PRIO_VALUE(SOCK_DEF_PRIO, RTSKB_DEF_RT_CHANNEL), socket_rtskbs, module); sock->pool_size = pool_size; mutex_init(&sock->pool_nrt_lock); if (pool_size < socket_rtskbs) { /* fix statistics */ if (pool_size == 0) rtskb_pools--; rt_socket_cleanup(fd); return -ENOMEM; } return 0; }