zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/cp/ps/driver/src/public/inc/io_request.h b/cp/ps/driver/src/public/inc/io_request.h
new file mode 100644
index 0000000..1d143ce
--- /dev/null
+++ b/cp/ps/driver/src/public/inc/io_request.h
@@ -0,0 +1,335 @@
+/*******************************************************************************

+ * Copyright (C) 2007, ZTE Corporation.

+ *

+ * File Name:io_request.h

+ * File Mark:

+ * Description:

+ * Others:

+ * Version:       1.0

+ * Author:        geanfeng

+ * Date:          2013-09-25

+ * History 1:

+ *     Date:

+ *     Version:

+ *     Author:

+ *     Modification:

+ * History 2:

+  ********************************************************************************/

+

+#ifndef _IO_REQUEST_H

+#define _IO_REQUEST_H

+

+/****************************************************************************

+* 	                                        Include files

+****************************************************************************/

+#include "drvs_list.h"

+#include "ring_queue.h"

+#include "request_queue.h"

+/****************************************************************************

+* 	                                        Macros

+****************************************************************************/

+/****************************************************************************

+* 	                                        Types

+****************************************************************************/

+typedef enum _T_DONE_STATE {

+    REQUEST_SUCCESS = 0,

+    REQUEST_NODEV,

+    REQUEST_ERROR,

+}T_DONE_STATE;

+

+typedef enum _T_IO_HND_STATE

+{

+    IO_REQUEST_UNCREATED = 0,

+    IO_REQUEST_CREATED,

+    IO_REQUEST_FORCE_EXIT,

+}

+T_IO_HND_STATE;

+

+typedef enum _T_IO_REQUEST_STATE

+{

+    IO_REQUEST_STOP = 0,

+    IO_REQUEST_START,

+    IO_REQUEST_START_TO_SUSPEND,

+    IO_REQUEST_STOP_TO_SUSPEND,

+}

+T_IO_REQUEST_STATE;

+

+

+typedef enum _T_IO_REQUEST_DIRECTION

+{

+    IO_REQUEST_READ = 0,

+    IO_REQUEST_WRITE,

+    IO_REQUEST_READ_WRITE,

+}

+T_IO_REQUEST_DIRECTION;

+

+

+typedef enum _T_IO_REQUEST_BLOCK_TYPE

+{

+    IO_REQUEST_NO_WAIT = 0,

+    IO_REQUEST_WAIT_FOREVER,

+}

+T_IO_REQUEST_BLOCK_TYPE;

+

+typedef struct _T_IO_RequestOps

+{

+    SINT32 (*hal_enable)(VOID *reqHndData);

+    SINT32 (*hal_disable)(VOID *reqHndData);

+    SINT32 (*start_request)(VOID *reqHndData, T_IO_REQUEST_DIRECTION reqDirection);

+    VOID  (*free_request) (VOID *reqHndData, T_IO_REQUEST_DIRECTION reqDirection, T_Request *req);

+    SINT32 (*request_done)(VOID *reqHndData, T_Request *req, T_DONE_STATE doneState);

+}

+T_IO_RequestOps;

+

+typedef struct _T_Request_SgList

+{

+    UINT8 *reqBuffer;

+    UINT32 reqCount;

+}

+T_Request_SgList;

+

+

+typedef struct _T_IO_RequestHnd T_IO_RequestHnd;

+

+typedef SINT32 (*RequestDoneHnd)(T_IO_RequestHnd *, T_Request_SgList *, T_DONE_STATE);

+

+

+typedef struct _T_IO_RequestHnd

+{

+    struct list_head node;	/* node*/

+    UINT8 *name;

+    T_IO_REQUEST_DIRECTION reqDirection;

+    UINT32 reqSize;

+    volatile T_IO_HND_STATE hndState;

+    UINT32 isSuspend;

+    UINT32 halEnabled;

+    T_IO_RequestOps *ops;

+    VOID *reqHndData;

+

+    /*read*/

+    UINT32 readReqCount;

+    T_Request_Queue *readQ;

+    T_Ring_Queue *readDoneBuffer;

+    T_IO_REQUEST_STATE readReqState;

+    ZOSS_SEMAPHORE_ID readReqSem;

+    RequestDoneHnd readDoneFn;

+    T_Request_SgList readSgList;

+    UINT32 readSgListMaxCount;

+    UINT32 readFreeCnt;

+

+    /*write*/

+    UINT32 writeReqCount;

+    T_Request_Queue *writeQ;

+    T_IO_REQUEST_STATE writeReqState;

+    ZOSS_SEMAPHORE_ID writeReqSem;

+    RequestDoneHnd writeDoneFn;

+    T_Request_SgList writeSgList;

+    UINT32 writeSgListMaxCount;

+    UINT32 writeFreeCnt;

+

+}

+T_IO_RequestHnd;

+

+

+/****************************************************************************

+* 	                                        Constants

+****************************************************************************/

+

+/****************************************************************************

+* 	                                        Global  Variables

+****************************************************************************/

+

+/****************************************************************************

+* 	                                        Function Prototypes

+****************************************************************************/

+

+/*******************************************************************************

+ * Function: IORequest_Create

+ * Description:create the IO request handle, configure the params.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+    DRV_SUCCESS: success.

+    DRV_ERROR: error.

+ * Others:.

+ ********************************************************************************/

+T_IO_RequestHnd * IORequest_Create(UINT8* name,

+                                   T_IO_REQUEST_DIRECTION reqDirection, UINT32 reqSize,

+                                   VOID *reqHndData, T_IO_RequestOps *ops,

+                                   UINT32 readReqCount, UINT32 readSgListMaxCount,

+                                   UINT32 writeReqCount, UINT32 writeSgListMaxCount);

+

+/*******************************************************************************

+ * Function: IORequest_SubmitReadRequest

+ * Description:submit the read request.

+ * Input:

+ *        reqHnd: the handle of request.

+ *        req: the submit request.

+ * Output:None

+ *

+ * Returns:

+ *         DRV_SUCCESS: success

+ ********************************************************************************/

+SINT32 IORequest_SubmitReadRequest(T_IO_RequestHnd *reqHnd, T_Request *req);

+

+/*******************************************************************************

+ * Function: IORequest_FetchDoneRequest

+ * Description:fetch the completed read request.

+ * Input:

+ *        reqHnd: the handle of request.

+ *        blockType: the block type of this operation. no wait or wait forever.

+ * Output:None

+ *        req: the complete read request.

+ * Returns:

+ *         DRV_SUCCESS: success

+ *         DRV_ERROR_AGAIN: no wait, need fetch again.

+ *         DRV_ERROR_ABORT: force exit.

+ * Others:

+ ********************************************************************************/

+SINT32 IORequest_FetchDoneRequest(T_IO_RequestHnd *reqHnd, T_Request *req, T_IO_REQUEST_BLOCK_TYPE blockType);

+

+/*******************************************************************************

+ * Function: IORequest_SubmitWriteRequest

+ * Description:submit the write request.

+ * Input:

+ *        reqHnd: the handle of request.

+ *        req: the submit request.

+ *        blockType: the block type of this operation. no wait or wait forever.

+ * Output:None

+ *

+ * Returns:

+ *         DRV_SUCCESS: success

+ *         DRV_ERROR_AGAIN: no wait, submit again.

+ *         DRV_ERROR_ABORT: force exit.

+ * Others:

+ ********************************************************************************/

+SINT32 IORequest_SubmitWriteRequest(T_IO_RequestHnd *reqHnd, T_Request *req, T_IO_REQUEST_BLOCK_TYPE blockType);

+

+/*******************************************************************************

+ * Function: IORequest_WaitRequestDone

+ * Description:wait the write request done.

+ * Input:

+ *        reqHnd: the handle of request.

+ * Output:None

+ *

+ * Returns:

+ *         DRV_SUCCESS: success

+ *         DRV_ERROR_ABORT: force exit.

+ * Others:

+ ********************************************************************************/

+SINT32 IORequest_WaitRequestDone(T_IO_RequestHnd *reqHnd);

+

+/*******************************************************************************

+ * Function: IORequest_GetSgList

+ * Description:get the current requests scatter list.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+	T_Request_SgList* : success.

+	NULL: error

+ * Others:

+ ********************************************************************************/

+T_Request_SgList* IORequest_GetSgList(T_IO_RequestHnd *reqHnd, T_IO_REQUEST_DIRECTION reqDirection);

+

+/*******************************************************************************

+ * Function: IORequest_Done

+ * Description:has complete the request, take next proccess .

+ * Input:

+ * Output:None

+ *

+ * Returns:

+    DRV_SUCCESS: success.

+    DRV_ERROR: error.

+ * Others:×¢Òâ:µ÷Óô˽ӿڵÄÓÅÏȼ¶Ò»¶¨¸ßÓÚÄ£¿éÄ򵀮äËû½Ó¿Ú£¬²»¿É±»´ò¶Ï¡£

+ ********************************************************************************/

+SINT32 IORequest_Done(T_IO_RequestHnd *reqHnd, T_IO_REQUEST_DIRECTION reqDirection);

+

+/*******************************************************************************

+ * Function: IORequest_Suspend

+ * Description:suspend the request process, stop the hal operation.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+    DRV_SUCCESS: success.

+    DRV_ERROR: error.

+ * Others:

+ ********************************************************************************/

+SINT32 IORequest_Suspend(T_IO_RequestHnd *reqHnd);

+

+/*******************************************************************************

+ * Function: IORequest_Resume

+ * Description:resume the request process, and restart the stopped hal operation.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+    DRV_SUCCESS: success.

+    DRV_ERROR: error.

+ * Others:

+ ********************************************************************************/

+VOID IORequest_Resume(T_IO_RequestHnd *reqHnd);

+

+/*******************************************************************************

+ * Function: IORequest_ForceExit

+ * Description: force the higher process exit.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+    DRV_SUCCESS: success.

+    DRV_ERROR: error.

+ * Others:

+ ********************************************************************************/

+VOID IORequest_ForceExit(T_IO_RequestHnd *reqHnd);

+/*******************************************************************************

+ * Function: IORequest_CancelExit

+ * Description: cancel exit mode, alloc higher process enter iorequest module.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+ * Others:

+ ********************************************************************************/

+VOID IORequest_CancelExit(T_IO_RequestHnd *reqHnd);

+/*******************************************************************************

+ * Function: IORequest_Destroy

+ * Description:release the IO Request Handle, and inform the higher layer.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+

+ * Others:×¢Òâ:º¯Êý²»¸ºÔðÊÍ·ÅreqHnd¿Õ¼ä£¬½öÉèÖúÏÊÊ״̬.

+ 		ÔÚÉϲãÈ·±£Ê±»ú°²È«ºó£¬²Å¿ÉÊͷŸÿռ䡣

+ ********************************************************************************/

+VOID IORequest_Destroy(T_IO_RequestHnd *reqHnd);

+

+/*******************************************************************************

+ * Function: IORequest_Print

+ * Description:print the debug info.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+

+ * Others:

+ ********************************************************************************/

+VOID IORequest_Print(T_IO_RequestHnd *reqHnd);

+

+/*******************************************************************************

+ * Function: IORequest_PrintAll

+ * Description:print the debug info.

+ * Input:

+ * Output:None

+ *

+ * Returns:

+

+ * Others:

+ ********************************************************************************/

+VOID IORequest_PrintAll(VOID);

+

+#endif/*_IO_REQUEST_H*/

+