static struct ps_base * rmt_ps_cas_create(struct rina_component * component) { struct rmt * rmt = rmt_from_component(component); struct rmt_ps * ps = rkzalloc(sizeof(*ps), GFP_KERNEL); struct cas_rmt_ps_data * data = rkzalloc(sizeof(*data), GFP_KERNEL); if (!ps || !data) { return NULL; } /* FIXME: to be configured using rmt_config */ data->q_max = 200; ps->base.set_policy_set_param = rmt_cas_set_policy_set_param; ps->dm = rmt; ps->priv = data; ps->rmt_q_create_policy = cas_rmt_q_create_policy; ps->rmt_q_destroy_policy = cas_rmt_q_destroy_policy; ps->rmt_enqueue_policy = cas_rmt_enqueue_policy; ps->rmt_dequeue_policy = cas_rmt_dequeue_policy; return &ps->base; }
/* * CREATE */ static struct ps_base * rmt_ps_deltaq_create( struct rina_component * component) { struct rmt * rmt = rmt_from_component(component); rmtdata_p ps = rkzalloc(sizeof(*ps), GFP_KERNEL); if (!ps) { return NULL; } ps->base.base.set_policy_set_param = rmt_ps_set_policy_set_param; ps->base.dm = rmt; ps->base.priv = NULL; ps->base.rmt_q_monitor_policy_rx = NULL; ps->base.max_q_policy_rx = NULL; /* Not used, in-drop at EFCP /* ps->base.rmt_scheduling_policy_rx = limiter_rx; * instead */ ps->base.rmt_scheduling_policy_rx = NULL; ps->base.rmt_q_monitor_policy_tx_enq = NULL; ps->base.rmt_enqueue_scheduling_policy_tx = enqueue_tx; ps->base.max_q_policy_tx = NULL; ps->base.rmt_next_scheduled_policy_tx = dequeue_tx; ps->base.rmt_q_monitor_policy_tx_deq = NULL; ps->base.rmt_requeue_scheduling_policy_tx = requeue_tx; ps->base.rmt_next_scheduled_policy_allownull = true; ps->base.rmt_scheduling_create_policy_tx = rmt_ps_deltaq_create; ps->base.rmt_scheduling_destroy_policy_tx = rmt_ps_deltaq_destroy; ps->portvals_begin = NULL; ps->qosparams_begin = NULL; ps->bufferST_begin = NULL; ps->bufferT_begin = NULL; ps->bufferPDU_begin = NULL; return &ps->base.base; }
static struct ps_base * rmt_ps_default_create(struct rina_component * component) { struct rmt * rmt = rmt_from_component(component); struct rmt_ps * ps = rkzalloc(sizeof(*ps), GFP_KERNEL); struct rmt_ps_data * data = rkzalloc(sizeof(*data), GFP_KERNEL); if (!ps || !data) { return NULL; } /* Allocate policy-set private data. */ data->ss = rkzalloc(sizeof(*data->ss), GFP_KERNEL); if (!data->ss) { rkfree(ps); rkfree(data); return NULL; } data->outqs = rmt_queue_set_create(); if (!data->outqs) { rkfree(data->ss); rkfree(ps); rkfree(data); return NULL; } ps->priv = data; ps->base.set_policy_set_param = rmt_ps_set_policy_set_param; ps->dm = rmt; ps->max_q_policy_tx = default_max_q_policy_tx; ps->max_q_policy_rx = default_max_q_policy_rx; ps->rmt_q_monitor_policy_tx = default_rmt_q_monitor_policy_tx; ps->rmt_q_monitor_policy_rx = default_rmt_q_monitor_policy_rx; ps->rmt_next_scheduled_policy_tx = default_rmt_next_scheduled_policy_tx; ps->rmt_enqueue_scheduling_policy_tx = default_rmt_enqueue_scheduling_policy_tx; ps->rmt_scheduling_policy_rx = default_rmt_scheduling_policy_rx; ps->rmt_scheduling_create_policy_tx = default_rmt_scheduling_create_policy_tx; ps->rmt_scheduling_destroy_policy_tx = default_rmt_scheduling_destroy_policy_tx; return &ps->base; }
static struct ps_base * rmt_ps_skeleton_create(struct rina_component * component) { struct rmt * rmt = rmt_from_component(component); struct rmt_ps * ps = rkzalloc(sizeof(*ps), GFP_KERNEL); if (!ps) { return NULL; } ps->base.set_policy_set_param = rmt_ps_set_policy_set_param; ps->dm = rmt; ps->priv = NULL; ps->max_q_policy_tx = skeleton_max_q_policy_tx; ps->max_q_policy_rx = skeleton_max_q_policy_rx; ps->rmt_q_monitor_policy_tx = skeleton_rmt_q_monitor_policy_tx; ps->rmt_q_monitor_policy_rx = skeleton_rmt_q_monitor_policy_rx; ps->rmt_next_scheduled_policy_tx = skeleton_rmt_next_scheduled_policy_tx; ps->rmt_enqueue_scheduling_policy_tx = skeleton_rmt_enqueue_scheduling_policy_tx; ps->rmt_scheduling_create_policy_tx = skeleton_rmt_scheduling_create_policy_tx; ps->rmt_scheduling_destroy_policy_tx = skeleton_rmt_scheduling_destroy_policy_tx; return &ps->base; }