/*
 * fichier d'en-tête mon_peripherique
 */
#ifndef _MON_PERIPHERIQUE_H
#define _MON_PERIPHERIQUE_H

#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/errno.h>
#include <asm/current.h>
#include <asm/segment.h>
#include <asm/uaccess.h>

char mon_data[80]="bonjour du noyau"; /* notre périphérique */

int mon_open(struct inode *inode,struct file *filep);
int mon_release(struct inode *inode,struct file *filep);
ssize_t mon_read(struct file *filep,char *buff,size_t count,loff_t *offp );
ssize_t mon_write(struct file *filep,const char *buff,size_t count,loff_t *offp );
	
struct file_operations mon_fops={
	open: mon_open,
	read: mon_read,
	write: mon_write,
	release:mon_release,
};

int mon_open(struct inode *inode,struct file *filep)
{
	/*MOD_INC_USE_COUNT;*/ /* incrémente le compteur d'utilisation du module */
	return 0;
}

int mon_release(struct inode *inode,struct file *filep)
{
	/*MOD_DEC_USE_COUNT;*/ /* décrémente le compteur d'utilisation du module */
	return 0;
}
ssize_t mon_read(struct file *filep,char *buff,size_t count,loff_t *offp )
{
	/* fonction pour copier le tampon depuis l'espace du noyau vers l'espace utilisateur*/
	if ( copy_to_user(buff,mon_data,strlen(mon_data)) != 0 )
		printk( "Kernel -> userspace copy failed!\n" );
	return strlen(mon_data);

}
ssize_t mon_write(struct file *filep,const char *buff,size_t count,loff_t *offp )
{
	/* fonction pour copier le tampon depuis l'espace utilisateur vers l'espace du noyau*/
	if ( copy_from_user(mon_data,buff,count) != 0 )
		printk( "Userspace -> kernel copy failed!\n" );
	return 0;
}
#endif
