Пример #1
0
static void av_exit(H264Decoder *d)
{
  ErlDrvTermData reply[] = {
    ERL_DRV_ATOM, driver_mk_atom("av_decoder_closed"),
    ERL_DRV_PORT, driver_mk_port(d->port),
    ERL_DRV_TUPLE, 2
  };
  driver_output_term(d->port, reply, sizeof(reply) / sizeof(reply[0]));
  driver_exit(d->port, 0);
}
Пример #2
0
static int __init driver_init (void) {
  
  printk("<1> driver_init\n");
  /* allokere device-nummer */
  major = 252;

  /* Allocating memory for the buffer */
  memory_buffer = kmalloc(1, GFP_KERNEL); 
  if (!memory_buffer) { 
    driver_exit(); 
    return -ENOMEM;
  } 
  memset(memory_buffer, 0, 1);

  /*
  button_buffer = kmalloc(1, GFP_KERNEL); 
  if (!button_buffer) { 
    result = -ENOMEM;
    driver_exit(); 
    return result;
  } 
  memset(button_buffer, 0, 1);
  
  led_buffer = kmalloc(1, GFP_KERNEL); 
  if (!led_buffer) { 
    result = -ENOMEM;
    driver_exit(); 
    return result;
  } 
  memset(led_buffer, 0, 1);
  */


  /* be om tilgang til I/O-porter */

  /* buttons */
  int per_res = check_region(piob->per, 1);
  int puer_res = check_region(piob->puer, 1);
  int ier_res = check_region(piob->ier, 1);

  if(per_res){
    printk("<1>buttons: cannot reserve piob->per\n"); 
    driver_exit();
    return per_res;
  }
  if(puer_res){
    printk("<1>buttons: cannot reserve piob->puer\n"); 
    driver_exit();
    return puer_res;
  }
  if(ier_res){
    printk("<1>buttons: cannot reserve piob->ier\n"); 
    driver_exit();
    return ier_res;
  }

  request_region(piob->per, 1, "STK1000_LEDBUTTON_DRIVER");
  request_region(piob->puer, 1, "STK1000_LEDBUTTON_DRIVER");
  request_region(piob->ier, 1, "STK1000_LEDBUTTON_DRIVER");

  /* leds */
  int perLED_res = check_region(pioc->per, 1);
  int oer_res = check_region(pioc->oer, 1);

  if(perLED_res){
    printk("<1>leds: cannot reserve pioc->per\n"); 
    driver_exit();
    return perLED_res;
  }
  if(oer_res){
    printk("<1>leds: cannot reserve pioc->oer\n"); 
    driver_exit();
    return oer_res;
  }

  request_region(pioc->per, 1, "STK1000_LEDBUTTON_DRIVER");
  request_region(pioc->oer, 1, "STK1000_LEDBUTTON_DRIVER");

  /*
 dev_t dev;

  int r =alloc_chrdev_region(&dev, 0,16,"STK1000_LEDBUTTON_DRIVER");
  printk(KERN_INFO "device id: %d",r);
  int piob_check = check_region((int)&AVR32_PIOB,1);
  int pioc_check = check_region((int)&AVR32_PIOC,1);
  if (piob_check && pioc_check){
  	printk(KERN_INFO "Diddnt get the regions we wanted.");
  }

else{

 request_region((int)&AVR32_PIOB,1,"STK1000_LEDBUTTON_DRIVER");
 request_region((int)&AVR32_PIOC,1,"STK1000_LEDBUTTON_DRIVER");
}
*/
  
	

  /* initialisere PIO-maskinvaren (som i øving 2) */
	 //Setup buttons
	//register_interrupt( button_isr, AVR32_PIOB_IRQ/32, AVR32_PIOB_IRQ % 32, BUTTONS_INT_LEVEL);
	piob->per = 0xff;
	piob->puer= 0xff;
	piob->ier = 0xff;
	//Setup leds
	pioc->per = 0xff;
	pioc->oer = 0xff;

  /* registrere device i systemet (må gjøres når alt annet er initialisert) */
  int result = register_chrdev(major, "STK1000_LEDBUTTON_DRIVER", &driver_fops);
  if (result < 0) {
    printk("<1>memory: cannot obtain major number %d\n", major);
    return result;
  }

  return 0;
}