| 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. |