
#include <rtl_conf.h>

#if DEVICE_XTRATUM_TERMINAL

#include <rtl_posixio.h>
#include <rtl_devices.h>
#include <arch/XtratuM_API.h>
#include <errno.h>

//////////////////////////////////
//// POSIX TERMINAL FUNCTIONS ////
//////////////////////////////////


// This function can be implemented using a proccess running on user mode
// which read from keyboard

static ssize_t tty_read (struct rtl_file *file, char *buffer, size_t size, 
		         loff_t *s){
  return (ssize_t) 0;
}

static ssize_t tty_write (struct rtl_file *file, const char *buffer, 
		          size_t size, loff_t *s){
  xm_write_domain((char *) buffer,size);
  return size;  
}

static int tty_open (struct rtl_file *file){
  return 0;
}

static int tty_release (struct rtl_file *file){
  return 0;
}

static struct rtl_file_operations rtl_tty_fops = {
  NULL,
  tty_read,
  tty_write,
  NULL,
  NULL,
  tty_open,
  tty_release
};

/////////////////////////////////////////////////////

int init_XtratuM_terminal(void){

  if (rtl_register_chrdev (XTRATUM_TERMINAL_MAJOR, "XtratuM_terminal", &rtl_tty_fops)) {
    return -EIO;
  }
  return 0;
}

void cleanup_XtratuM_terminal(void){
  rtl_unregister_chrdev(XTRATUM_TERMINAL_MAJOR, "XtratuM_terminal");
}
#endif //DEVICE_XTRATUM_TERMINAL
