Esempio n. 1
0
File: sysreq.c Progetto: ArcEye/RTAI
int init_module(void)
{
	srq = rt_request_srq(0xcacca, rtai_srq_handler, user_srq_handler);
        init_timer(&timer);
        timer.function = rt_timer_handler;
	mod_timer(&timer, (HZ/TIMER_FREQ));
        return 0 ;
}
Esempio n. 2
0
/***
 *	rtskb_pool_init
 */
int rtskb_pool_init(void)
{
	unsigned int i;
	int err = 0;
	struct rtskb* skb;

	rtskb_queue_head_init(&rtskb_pool);

	rtskb_cache = kmem_cache_create 
		(RTSKB_CACHE, sizeof (struct rtskb), 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
	if ( !rtskb_cache ) {
		rt_printk("RTnet: allocating 'rtskb_cache' failed.");
		return -ENOMEM;
	}
	rtskb_data_cache = kmem_cache_create 
		(RTSKB_DATA_CACHE, SKB_DATA_ALIGN(rtskb_max_size), 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
	if ( !rtskb_data_cache ) {
		rt_printk("RTnet: allocating 'rtskb_data_cache' failed.");
		return -ENOMEM;
	}

	for (i=0; i<rtskb_pool_default; i++) {
		skb = new_rtskb(); /* might return NULL */
		if (skb) {
			__rtskb_queue_tail(&rtskb_pool, skb);
		} else {
			printk("%s(): new_rtskb() returned NULL, qlen=%d\n", __FUNCTION__, rtskb_pool.qlen);
			break;
		}
	}

	if ( (inc_pool_srq=rt_request_srq (0, inc_pool_handler, 0)) < 0) {
		rt_printk("RTnet: allocating 'inc_pool_srq=%d' failed.\n", inc_pool_srq);
		return inc_pool_srq;
	}

	if ( (dec_pool_srq=rt_request_srq (0, dec_pool_handler, 0)) < 0) {
		rt_printk("RTnet: allocating 'dec_pool_srq=%d' failed.\n", dec_pool_srq);
		return dec_pool_srq;
	}

	return err;
}
Esempio n. 3
0
int init_module(void)
{
#ifdef CONFIG_X86_LOCAL_APIC
	params.mp        = 1;
#endif /* CONFIG_X86_LOCAL_APIC */
	params.freq_apic = RTAI_FREQ_APIC;
	params.cpu_freq  = RTAI_CPU_FREQ;
	rtf_create(0, FIFOBUFSIZE);
	if ((srq = rt_request_srq(CALSRQ, (void *)user_srq, user_srq)) < 0) {
                printk("No sysrq available for the calibration.\n");
                return srq;
	}
	return 0;
}
Esempio n. 4
0
/* ************************************************************************
 * ************************************************************************
 *   I N I T
 * ************************************************************************
 * ************************************************************************ */
static int __init rtnetproxy_init_module(void)
{
    int err;

    dev_rtnetproxy.init = rtnetproxy_init;
    SET_MODULE_OWNER(&dev_rtnetproxy);

    /* Define the name for this unit */
    err=dev_alloc_name(&dev_rtnetproxy,"rtproxy");

    if(err<0)
        return err;
    err = register_netdev(&dev_rtnetproxy);
    if (err<0)
        return err;

    /* Initialize the ringbuffers: */
    memset(&ring_rtskb_kernel_rtnet, 0, sizeof(ring_rtskb_kernel_rtnet));
    memset(&ring_rtskb_rtnet_kernel, 0, sizeof(ring_rtskb_rtnet_kernel));
    memset(&ring_skb_kernel_rtnet, 0, sizeof(ring_skb_kernel_rtnet));
    memset(&ring_skb_rtnet_kernel, 0, sizeof(ring_skb_rtnet_kernel));

    /* Init the task for transmission */
    rt_task_init(&rtnetproxy_thread, rtnetproxy_transmit_thread, 0, 2000,
                 RT_LOWEST_PRIORITY, 0, 0);

    /* Register srq */
    rtnetproxy_srq = rt_request_srq(0, rtnetproxy_rtai_srq, 0);

    /* rtNet stuff: */
    rt_ip_register_fallback(rtnetproxy_recv);

    printk("rtnetproxy installed as \"%s\"\n", dev_rtnetproxy.name);

    return 0;
}
Esempio n. 5
0
//---------------------------------------------------------------------------
int init_module (void) {
//---------------------------------------------------------------------------
  int err,inst;
  struct nas_priv *priv;
  char devicename[100];


  // Initialize parameters shared with RRC

  printk("Starting NASMESH, number of IMEI paramters %d, IMEI %X%X\n",m_arg,nas_IMEI[0],nas_IMEI[1]);

#ifndef NAS_NETLINK

#ifdef RTAI //with RTAI you have to indicate which irq# you want

  pdcp_2_nas_irq=rt_request_srq(0, nas_interrupt, NULL);
  
#endif
  
  if (pdcp_2_nas_irq == -EBUSY || pdcp_2_nas_irq == -EINVAL){
    printk("[NAS][INIT] No interrupt resource available\n");
    return -EBUSY;
  }
  else
    printk("[NAS][INIT]: Interrupt %d\n", pdcp_2_nas_irq);
  //rt_startup_irq(RTAI_IRQ);
  
  //rt_enable_irq(RTAI_IRQ);
  
  
#endif //NETLINK
  
  for (inst=0;inst<NB_INSTANCES_MAX;inst++) {
    printk("[NAS][INIT] nasmesh_init_module: begin init instance %d\n",inst);


    sprintf(devicename,"oai%d",inst);
    nasdev[inst]  = alloc_netdev(sizeof(struct nas_priv),devicename, nas_init);
    priv = netdev_priv(nasdev[inst]);

    if (nasdev[inst]){
      nas_mesh_init(inst);
      //memcpy(nasdev[inst]->dev_addr,&nas_IMEI[0],8);
      nas_TOOL_imei2iid(nas_IMEI, nasdev[inst]->dev_addr);// IMEI to device address (for stateless autoconfiguration address)
      nas_TOOL_imei2iid(nas_IMEI, (u8 *)priv->cx[0].iid6);
      // TO HAVE DIFFERENT HW @ 
      ((unsigned char*)nasdev[inst]->dev_addr)[7] = ((unsigned char*)nasdev[inst]->dev_addr)[7] + (unsigned char)inst + 1;
      printk("Setting HW addr for INST %d to : %X%X\n",inst,*((unsigned int *)&nasdev[inst]->dev_addr[0]),*((unsigned int *)&nasdev[inst]->dev_addr[4]));

    }



    err= register_netdev(nasdev[inst]);
    if (err){
      printk("[NAS][INIT] nasmesh_init_module (inst %d): error %i registering device %s\n", inst,err, nasdev[inst]->name);
    }else{
      printk("nasmesh_init_module: registering device %s, ifindex = %d\n\n",nasdev[inst]->name, nasdev[inst]->ifindex);
    }
  }

#ifdef NAS_NETLINK
  if ((err=nas_netlink_init()) == -1)
    printk("[NAS][INIT] NETLINK failed\n");
  printk("[NAS][INIT] NETLINK INIT\n");

#endif //NETLINK

  return err;

}
Esempio n. 6
0
//---------------------------------------------------------------------------
int init_module (void)
{
  //---------------------------------------------------------------------------
  int err;
  int inst = 0;
  int index;
  struct nas_priv *priv;
  char devicename[100];

  printk("\n\n\ninit_module: begin \n");

  // check IMEI parameter
  printk("number of IMEI parameters %d, IMEI ", m_arg);

  for (index = 0; index < m_arg;  index++) {
    printk("%02X ", nas_IMEI[index]);
  }

  printk("\n");


#ifndef PDCP_USE_NETLINK

  // Initialize parameters shared with RRC (done first to avoid going further)
  if (pt_nas_ue_irq==NULL) {
    printk("init_module: shared irq parameter not initialised\n");
    err =  -EBUSY;
    printk("init_module: returning %d \n\n", err);
    return err;
  }

  printk("init_module: pt_nas_ue_irq valid \n");
#endif

  // Allocate device structure
  sprintf(devicename,"oai%d",inst);
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
  gdev = alloc_netdev(sizeof(struct nas_priv), devicename, nasmt_init);
#else
  gdev = alloc_netdev(sizeof(struct nas_priv), devicename, NET_NAME_PREDICTABLE, nasmt_init);
#endif
  priv = netdev_priv(gdev);
  ////
#ifndef PDCP_USE_NETLINK
  priv->irq=rt_request_srq(0, nasmt_interrupt, NULL);

  if (priv->irq == -EBUSY || priv->irq == -EINVAL) {
    printk("\n init_module: No interrupt resource available\n");

    if (gdev) {
      free_netdev(gdev);
      printk("init_module: free_netdev ..\n");
    }

    return -EBUSY;
  } else
    printk("init_module: Interrupt %d, ret = %d \n", priv->irq , ret);

  if (pt_nas_ue_irq==NULL) {
    printk("init_module: shared irq parameter has been reset\n");
  } else {
    *pt_nas_ue_irq=priv->irq;
  }

#endif

#ifdef PDCP_USE_NETLINK

  if ((err=nasmt_netlink_init()) == -1)
    printk("init_module: NETLINK failed\n");

  printk("init_module: NETLINK INIT successful\n");
#endif //NETLINK
  //
  err= register_netdev(gdev);

  if (err) {
    printk("init_module: error %i registering device %s\n", err, gdev->name);
  } else {
    printk("init_module: registering device %s, ifindex = %d\n\n",gdev->name, gdev->ifindex);
  }

  return err;
}
//---------------------------------------------------------------------------
int init_module (void)
{
  //---------------------------------------------------------------------------
  int err;
  int inst = 0;
  struct nas_priv *priv;
  char devicename[100];

  printk("\n\n\n\nnasrg_init_module: begin \n");

  // Initialize parameters shared with RRC
#ifndef PDCP_USE_NETLINK

  if (pt_nas_rg_irq==NULL) {
    printk("nasrg_init_module: shared irq parameter not initialised\n");
    err =  -EBUSY;
    printk("nasrg_init_module: returning %d \n\n", err);
    return err;
  }

  printk("nasrg_init_module: pt_nas_rg_irq valid \n");
#endif

  /*
    if (pt_rg_own_cell_id==NULL){
      printk("nasrg_init_module: shared cell_id parameter not initialised\n");
      err =  -EBUSY;
      printk("nasrg_init_module: returning %d \n\n\n", err);
      return err;
    }
    printk("nasrg_init_module: pt_rg_own_cell_id valid \n");
    *pt_rg_own_cell_id = NASRG_OWN_CELLID;
  */
  local_rg_cell_id = NASRG_OWN_CELLID;

  // Allocate device structure
  sprintf(devicename,"oai%d",inst);
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
  gdev = alloc_netdev(sizeof(struct nas_priv), devicename, nasrg_init);
#else
  gdev = alloc_netdev(sizeof(struct nas_priv), devicename, NET_NAME_PREDICTABLE, nasrg_init);
#endif
  printk("nasrg_init_module: after alloc_netdev \n");
  priv = netdev_priv(gdev);
  ////
  //
#ifndef PDCP_USE_NETLINK
  priv->irq=rt_request_srq(0, nasrg_interrupt, NULL);

  if (priv->irq == -EBUSY || priv->irq == -EINVAL) {
    printk("nasrg_init_module: No interrupt resource available\n");

    if (gdev) {
      free_netdev(gdev);
      printk("nasrg_init_module: free_netdev ..\n");
    }

    return -EBUSY;
  } else
    printk("nasrg_init_module: Interrupt %d, ret = %d \n", priv->irq , ret);

  if (pt_nas_rg_irq==NULL) {
    printk("nasmt_init_module: shared irq parameter has been reset\n");
  } else {
    *pt_nas_rg_irq=priv->irq;
  }

#endif
  //
  //////
#ifdef PDCP_USE_NETLINK

  if ((err=nasrg_netlink_init()) < 0)
    printk("nasrg_init_module: NETLINK failed\n");

  printk("nasrg_init_module: NETLINK INIT successful\n");
#endif //NETLINK

  err= register_netdev(gdev);

  if (err) {
    printk("nasrg_init_module: error %i registering device %s\n", err, gdev->name);
  } else {
    printk("nasrg_init_module: registering device %s, ifindex = %d\n\n",gdev->name, gdev->ifindex);
  }

  return err;
}