#ifndef __OS_DEVREQ_H
#define __OS_DEVREQ_H

//! Creates a device code made up of subsystem (sys) and major (maj) and 
//!		minor (min) codes
#define REQUEST_CODE(buff, sys, maj, min)	\
	((buff) << 31 | \
	((sys) << 16) | \
	((maj) << 8) | (min))

//! Issued when a device is being opened by the Device Manager
#define	DEV_OPEN	REQUEST_CODE(0, 0, 'd', 'o')
//! Issued when a device is being closed by the Device Manager
#define	DEV_CLOSE	REQUEST_CODE(0, 0, 'd', 'c')
//! Issued when a device is being removed from the Device Manager
#define DEV_REMOVE	REQUEST_CODE(0, 0, 'd', 'R')
//! Reads from a device
#define	DEV_READ	REQUEST_CODE(1, 0, 'd', 'r')
//! Writes to a device
#define	DEV_WRITE	REQUEST_CODE(1, 0, 'd', 'w')
//! Performs general device state manipulation functions
#define	DEV_IOCTL	REQUEST_CODE(1, 0, 'd', 'i')
//! Issued when a device's IRQ is triggered
#define	DEV_ISR		REQUEST_CODE(0, 0, 'd', 'q')

//! Opens a file on a file system device
#define FS_OPEN		REQUEST_CODE(1, 0, 'f', 'o')
//! Creates a file on a file system device
#define FS_CREATE	REQUEST_CODE(1, 0, 'f', 'C')
//! Closes a file
#define FS_CLOSE	REQUEST_CODE(0, 0, 'f', 'c')
//! Mount a file or device in a directory
#define FS_MOUNT	REQUEST_CODE(1, 0, 'f', 'm')
//! Reads from a file
#define FS_READ		REQUEST_CODE(1, 0, 'f', 'r')
//! Writes to a file
#define FS_WRITE	REQUEST_CODE(1, 0, 'f', 'w')
//! Performs general file state manipulation functions
#define FS_IOCTL	REQUEST_CODE(1, 0, 'f', 'i')
//! Calculate the length of a file
#define FS_GETLENGTH	REQUEST_CODE(0, 0, 'f', 'l')

//! Retrieves size statistics for a block device
#define BLK_GETSIZE	REQUEST_CODE(1, 0, 'b', 's')

#define CHR_GETSIZE	REQUEST_CODE(1, 0, 'c', 's')

#endif