What:		/dev/memrar
Date:		March 2010
KernelVersion:	Kernel version this feature first showed up in.
Contact:	Ossama Othman <ossama.othman@intel.com>
Description:	The Intel Moorestown Restricted Access Region (RAR)
		Handler driver exposes an ioctl() based interface that
		allows a user to reserve and release blocks of RAR
		memory.

		Note:  A sysfs based one was not appropriate for the
		RAR handler's usage model.

		=========================================================
				ioctl() Requests
		=========================================================
		RAR_HANDLER_RESERVE
		-------------------
		Description:	Reserve RAR block.
		Type:		struct RAR_block_info
		Direction:	in/out
		Errors:		EINVAL (invalid RAR type or size)
				ENOMEM (not enough RAR memory)

		RAR_HANDLER_STAT
		----------------
		Description:	Get RAR statistics.
		Type:		struct RAR_stat
		Direction:	in/out
		Errors:		EINVAL (invalid RAR type)

		RAR_HANDLER_RELEASE
		-------------------
		Description:	Release previously reserved RAR block.
		Type:		32 bit unsigned integer
				(e.g. uint32_t), i.e the RAR "handle".
		Direction:	in
		Errors:		EINVAL (invalid RAR handle)


		=========================================================
			ioctl() Request Parameter Types
		=========================================================
		The structures referred to above are defined as
		follows:

		/**
		 * struct RAR_block_info - user space struct that
		 *			   describes RAR buffer
		 * @type:	Type of RAR memory (e.g.,
		 *		RAR_TYPE_VIDEO or RAR_TYPE_AUDIO) [in]
		 * @size:	Requested size of a block in bytes to
		 *		be reserved in RAR. [in]
		 * @handle:	Handle that can be used to refer to
		 *		reserved block. [out]
		 *
		 * This is the basic structure exposed to the user
		 * space that describes a given RAR buffer.  It used
		 * as the parameter for the RAR_HANDLER_RESERVE ioctl.
		 * The buffer's underlying bus address is not exposed
		 * to the user.  User space code refers to the buffer
		 * entirely by "handle".
		 */
		struct RAR_block_info {
			__u32 type;
			__u32 size;
			__u32 handle;
		};

		/**
		 * struct RAR_stat - RAR statistics structure
		 * @type:		Type of RAR memory (e.g.,
		 *			RAR_TYPE_VIDEO or
		 *			RAR_TYPE_AUDIO) [in]
		 * @capacity:		Total size of RAR memory
		 *			region. [out]
		 * @largest_block_size:	Size of the largest reservable
		 *			block. [out]
		 *
		 * This structure is used for RAR_HANDLER_STAT ioctl.
		 */
		struct RAR_stat {
			__u32 type;
			__u32 capacity;
			__u32 largest_block_size;
		};

		Lastly, the RAR_HANDLER_RELEASE ioctl expects a
		"handle" to the RAR block of memory.  It is a 32 bit
		unsigned integer.
