-
Notifications
You must be signed in to change notification settings - Fork 365
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ufs: export UFS headers to userspace
create UFS headers that can be exported to userspace. Signed-off-by: Alin Jerpelea <[email protected]>
- Loading branch information
Showing
4 changed files
with
144 additions
and
130 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ | ||
#ifndef UAPI_UFS_IOCTL_H_ | ||
#define UAPI_UFS_IOCTL_H_ | ||
|
||
#include <linux/types.h> | ||
|
||
/* | ||
* IOCTL opcode for ufs queries has the following opcode after | ||
* SCSI_IOCTL_GET_PCI | ||
*/ | ||
#define UFS_IOCTL_QUERY 0x5388 | ||
|
||
/** | ||
* struct ufs_ioctl_query_data - used to transfer data to and from user via | ||
* ioctl | ||
* @opcode: type of data to query (descriptor/attribute/flag) | ||
* @idn: id of the data structure | ||
* @buf_size: number of allocated bytes/data size on return | ||
* @buffer: data location | ||
* | ||
* Received: buffer and buf_size (available space for transferred data) | ||
* Submitted: opcode, idn, length, buf_size | ||
*/ | ||
struct ufs_ioctl_query_data { | ||
/* | ||
* User should select one of the opcode defined in "enum query_opcode". | ||
* Please check include/uapi/scsi/ufs/ufs.h for the definition of it. | ||
* Note that only UPIU_QUERY_OPCODE_READ_DESC, | ||
* UPIU_QUERY_OPCODE_READ_ATTR & UPIU_QUERY_OPCODE_READ_FLAG are | ||
* supported as of now. All other query_opcode would be considered | ||
* invalid. | ||
* As of now only read query operations are supported. | ||
*/ | ||
__u32 opcode; | ||
/* | ||
* User should select one of the idn from "enum flag_idn" or "enum | ||
* attr_idn" or "enum desc_idn" based on whether opcode above is | ||
* attribute, flag or descriptor. | ||
* Please check include/uapi/scsi/ufs/ufs.h for the definition of it. | ||
*/ | ||
__u8 idn; | ||
/* | ||
* User should specify the size of the buffer (buffer[0] below) where | ||
* it wants to read the query data (attribute/flag/descriptor). | ||
* As we might end up reading less data then what is specified in | ||
* buf_size. So we are updating buf_size to what exactly we have read. | ||
*/ | ||
__u16 buf_size; | ||
/* | ||
* placeholder for the start of the data buffer where kernel will copy | ||
* the query data (attribute/flag/descriptor) read from the UFS device | ||
* Note: | ||
* For Read/Write Attribute you will have to allocate 4 bytes | ||
* For Read/Write Flag you will have to allocate 1 byte | ||
*/ | ||
__u8 buffer[0]; | ||
}; | ||
|
||
#endif /* UAPI_UFS_IOCTL_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ | ||
#ifndef UAPI_UFS_H_ | ||
#define UAPI_UFS_H_ | ||
|
||
/* Flag idn for Query Requests*/ | ||
enum flag_idn { | ||
QUERY_FLAG_IDN_FDEVICEINIT = 0x01, | ||
QUERY_FLAG_IDN_PERMANENT_WPE = 0x02, | ||
QUERY_FLAG_IDN_PWR_ON_WPE = 0x03, | ||
QUERY_FLAG_IDN_BKOPS_EN = 0x04, | ||
QUERY_FLAG_IDN_LIFE_SPAN_MODE_ENABLE = 0x05, | ||
QUERY_FLAG_IDN_PURGE_ENABLE = 0x06, | ||
QUERY_FLAG_IDN_RESERVED2 = 0x07, | ||
QUERY_FLAG_IDN_FPHYRESOURCEREMOVAL = 0x08, | ||
QUERY_FLAG_IDN_BUSY_RTC = 0x09, | ||
QUERY_FLAG_IDN_RESERVED3 = 0x0A, | ||
QUERY_FLAG_IDN_PERMANENTLY_DISABLE_FW_UPDATE = 0x0B, | ||
QUERY_FLAG_IDN_WB_EN = 0x0E, | ||
QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN = 0x0F, | ||
QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8 = 0x10, | ||
}; | ||
|
||
/* Attribute idn for Query requests */ | ||
enum attr_idn { | ||
QUERY_ATTR_IDN_BOOT_LU_EN = 0x00, | ||
QUERY_ATTR_IDN_RESERVED = 0x01, | ||
QUERY_ATTR_IDN_POWER_MODE = 0x02, | ||
QUERY_ATTR_IDN_ACTIVE_ICC_LVL = 0x03, | ||
QUERY_ATTR_IDN_OOO_DATA_EN = 0x04, | ||
QUERY_ATTR_IDN_BKOPS_STATUS = 0x05, | ||
QUERY_ATTR_IDN_PURGE_STATUS = 0x06, | ||
QUERY_ATTR_IDN_MAX_DATA_IN = 0x07, | ||
QUERY_ATTR_IDN_MAX_DATA_OUT = 0x08, | ||
QUERY_ATTR_IDN_DYN_CAP_NEEDED = 0x09, | ||
QUERY_ATTR_IDN_REF_CLK_FREQ = 0x0A, | ||
QUERY_ATTR_IDN_CONF_DESC_LOCK = 0x0B, | ||
QUERY_ATTR_IDN_MAX_NUM_OF_RTT = 0x0C, | ||
QUERY_ATTR_IDN_EE_CONTROL = 0x0D, | ||
QUERY_ATTR_IDN_EE_STATUS = 0x0E, | ||
QUERY_ATTR_IDN_SECONDS_PASSED = 0x0F, | ||
QUERY_ATTR_IDN_CNTX_CONF = 0x10, | ||
QUERY_ATTR_IDN_CORR_PRG_BLK_NUM = 0x11, | ||
QUERY_ATTR_IDN_RESERVED2 = 0x12, | ||
QUERY_ATTR_IDN_RESERVED3 = 0x13, | ||
QUERY_ATTR_IDN_FFU_STATUS = 0x14, | ||
QUERY_ATTR_IDN_PSA_STATE = 0x15, | ||
QUERY_ATTR_IDN_PSA_DATA_SIZE = 0x16, | ||
QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME = 0x17, | ||
QUERY_ATTR_IDN_WB_FLUSH_STATUS = 0x1C, | ||
QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE = 0x1D, | ||
QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST = 0x1E, | ||
QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE = 0x1F, | ||
}; | ||
|
||
/* Descriptor idn for Query requests */ | ||
enum desc_idn { | ||
QUERY_DESC_IDN_DEVICE = 0x0, | ||
QUERY_DESC_IDN_CONFIGURATION = 0x1, | ||
QUERY_DESC_IDN_UNIT = 0x2, | ||
QUERY_DESC_IDN_RFU_0 = 0x3, | ||
QUERY_DESC_IDN_INTERCONNECT = 0x4, | ||
QUERY_DESC_IDN_STRING = 0x5, | ||
QUERY_DESC_IDN_RFU_1 = 0x6, | ||
QUERY_DESC_IDN_GEOMETRY = 0x7, | ||
QUERY_DESC_IDN_POWER = 0x8, | ||
QUERY_DESC_IDN_HEALTH = 0x9, | ||
QUERY_DESC_IDN_MAX, | ||
}; | ||
|
||
/* UTP QUERY Transaction Specific Fields OpCode */ | ||
enum query_opcode { | ||
UPIU_QUERY_OPCODE_NOP = 0x0, | ||
UPIU_QUERY_OPCODE_READ_DESC = 0x1, | ||
UPIU_QUERY_OPCODE_WRITE_DESC = 0x2, | ||
UPIU_QUERY_OPCODE_READ_ATTR = 0x3, | ||
UPIU_QUERY_OPCODE_WRITE_ATTR = 0x4, | ||
UPIU_QUERY_OPCODE_READ_FLAG = 0x5, | ||
UPIU_QUERY_OPCODE_SET_FLAG = 0x6, | ||
UPIU_QUERY_OPCODE_CLEAR_FLAG = 0x7, | ||
UPIU_QUERY_OPCODE_TOGGLE_FLAG = 0x8, | ||
UPIU_QUERY_OPCODE_MAX, | ||
}; | ||
#endif /* UAPI_UFS_H_ */ |