platform: msm_shared: Add ufs support.

Change-Id: Ibadbfa7b50ace214217336e741d8972e4a6c392e
diff --git a/platform/msm_shared/include/upiu.h b/platform/msm_shared/include/upiu.h
new file mode 100644
index 0000000..1c9968d
--- /dev/null
+++ b/platform/msm_shared/include/upiu.h
@@ -0,0 +1,164 @@
+/* Copyright (c) 2013, The Linux Foundation. All rights reserved.

+ *

+ * Redistribution and use in source and binary forms, with or without

+ * modification, are permitted provided that the following conditions are

+ * met:

+ *     * Redistributions of source code must retain the above copyright

+ *       notice, this list of conditions and the following disclaimer.

+ *     * Redistributions in binary form must reproduce the above

+ *       copyright notice, this list of conditions and the following

+ *       disclaimer in the documentation and/or other materials provided

+ *       with the distribution.

+ *     * Neither the name of The Linux Foundation nor the names of its

+ *       contributors may be used to endorse or promote products derived

+ *       from this software without specific prior written permission.

+ *

+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED

+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT

+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS

+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR

+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,

+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE

+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN

+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+ */

+

+#ifndef _UPIU_H

+#define _UPIU_H

+

+struct upiu_basic_hdr

+{

+	uint8_t  trans_type;

+	uint8_t  flags;

+	uint8_t  lun;

+	uint8_t  task_tag;

+	uint8_t  cmd_set_type;

+	uint8_t  query_task_mgmt_func;

+	uint8_t  response;

+	uint8_t  status;

+	uint8_t  total_ehs_len;

+	uint8_t  device_info;

+	uint16_t data_seg_len;

+} __PACKED;

+

+struct upiu_trans_mgmt_query_hdr

+{

+	struct upiu_basic_hdr basic_hdr;

+	uint8_t                   opcode;

+	uint8_t                   idn;

+	uint8_t                   index;

+	uint8_t                   selector;

+	uint8_t                   resv_0[2];

+	uint16_t                  resp_len;

+	uint8_t                   resv_1[3];

+	uint8_t                   flag_value;

+	uint8_t                   resv_2[4];

+}__PACKED;

+

+struct upiu_cmd_hdr

+{

+	struct upiu_basic_hdr basic_hdr;

+	uint32_t			      data_expected_len;	// Requested length

+	uint8_t				      param[16];			// Payload, operation specefic field

+}__PACKED;

+

+struct upiu_cmd_resp_hdr

+{

+	struct upiu_basic_hdr basic_hdr;

+	uint32_t			      residual_trans_count;

+	uint8_t				      resv_0[16];

+}__PACKED;

+

+struct upiu_gen_hdr

+{

+	struct upiu_basic_hdr basic_hdr;

+	uint8_t			          trans_specific_fields[20];

+}__PACKED;

+

+/* UPIU transaction codes. */

+enum upiu_trans_type

+{

+	UPIU_TYPE_NOP_OUT              = 0x00,

+	UPIU_TYPE_COMMAND              = 0x01,

+	UPIU_TYPE_TASK_MGMT            = 0x04,

+	UPIU_TYPE_QUERY_REQ            = 0x16,

+	UPIU_TYPE_NOP_IN               = 0x20,

+	UPIU_TYPE_RESPONSE             = 0x21,

+	UPIU_TYPE_TASK_MAN_RESP        = 0x24,

+	UPIU_TYPE_QUERY_RESP           = 0x36,

+	UPIU_TYPE_REJECT               = 0x3f,

+};

+

+/* UPIU respones */

+enum upiu_response

+{

+	UPIU_RESPONSE_TARGET_SUCCESS   = 0x00,

+	UPIU_RESPONSE_TARGET_FAILURE   = 0x01,

+};

+

+enum upiu_cmd_set_type

+{

+	UPIU_SCSI_CMD_SET           = 0,

+	UPIU_UFS_SPECIFIC_CMD_SET   = 1,

+};

+

+enum upiu_query_opcode_type

+{

+	UPIU_QUERY_OP_NOP              = 0x0,

+	UPIU_QUERY_OP_READ_DESCRIPTOR  = 0x1,

+	UPIU_QUERY_OP_WRITE_DESCRIPTOR = 0x2,

+	UPIU_QUERY_OP_READ_ATTRIBUTE   = 0x3,

+	UPIU_QUERY_OP_WRITE_ATTRIBUTE  = 0x4,

+	UPIU_QUERY_OP_READ_FLAG        = 0x5,

+	UPIU_QUERY_OP_SET_FLAG         = 0x6,

+	UPIU_QUERY_OP_CLEAR_FLAG       = 0x7,

+	UPIU_QUERY_OP_TOGGLE_FLAG      = 0x8,

+};

+

+enum upiu_cmd_type

+{

+	UTRD_SCSCI_CMD        = 0,

+	UTRD_NATIVE_UFS_CMD   = 1,

+	UTRD_DEV_MGMT_FUNC    = 2,

+};

+

+enum upiu_dd_type

+{

+	UTRD_NO_DATA_TRANSFER  = 0,

+	UTRD_SYSTEM_TO_TARGET  = 1,

+	UTRD_TARGET_TO_SYSTEM  = 2,

+};

+

+struct upiu_req_build_type

+{

+	enum upiu_trans_type        trans_type;

+	uint8_t                         flags;

+	uint8_t                         lun;

+	enum upiu_cmd_set_type      cmd_set_type;

+	uint8_t                         query_mgmt_func;

+	uint8_t                         ehs_len;

+	uint16_t                        data_seg_len;

+	addr_t                          data_buffer_addr;

+	uint32_t                        data_buffer_len;

+	addr_t                          cdb;

+	uint64_t                        expected_data_len;

+	enum upiu_query_opcode_type opcode;

+	uint8_t                         idn;

+	uint8_t                         index;

+	uint8_t                         selector;

+	struct upiu_basic_hdr       *resp_ptr;

+	uint64_t                        resp_len;

+	uint16_t                        resp_data_len;

+	addr_t                        resp_data_ptr;

+

+	/* UTRD properties. */

+	enum upiu_cmd_type          cmd_type;

+	enum upiu_dd_type           dd;

+	uint64_t                        timeout_msecs;

+};

+

+

+#endif