blob: 19ba0b2c2347b6e5dc9e63b8cb1bdf6108300317 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2012
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*******************************************************************************
37 * Filename:
38 * ---------
39 * hifsdio_qmu_except.h
40 *
41 * Project:
42 * --------
43 * MOLY
44 *
45 * Description:
46 * ------------
47 * This is interface of the HIF data path exception handler driver for SDIO
48 *
49 * Author:
50 * -------
51 * -------
52 *
53 * ==========================================================================
54 * $Log$
55 *
56 * 04 03 2013 vend_mick.lin
57 * [MOLY00011933] Develop SDIO driver
58 * MT6290 exception handle of SDIO driver
59 *
60 *
61 ****************************************************************************/
62#ifndef __HIFSDIO_QMU_EXCEPT_H__
63#define __HIFSDIO_QMU_EXCEPT_H__
64
65#include "hif_common.h"
66
67
68/*!
69 * @brief initial the exception HIF driver, only support empty enqueue flow in exception
70 * @param nonstopq set n'th bit as 1 if n'th queue not stop while init, [0:15] for DL [16:31] for UP
71 * @param exceptq set queues would be used in exception mode, [0:15] for DL [16:31] for UP
72 * @return excute pass or fail
73 */
74kal_bool hifsdioq_except_initial(kal_uint32 nonstopq, kal_uint32 exceptq);
75
76/*!
77 * @brief clear the queue and flush SDIO SW fifo for following using
78 * HIF layer don't care remain GPD and upper layer could parsing their resource
79 * to handle remain data re-send flow (DHL would re-send remain data after using this API)
80 *
81 */
82void hifsdioq_except_clear_q(void);
83
84
85/*!
86 * @brief ask hif driver to set GPD buffer into QMU
87 * don't handle critical section protection becuase in the single thread exception handler
88 * @param q_type the queue type
89 * @param queue_no QMU queue no
90 * @param first_gpd first GPD of a single GPD or GPD list
91 * @param last_gpd last GPD of a single GPD or GPD list
92 * @return KAL_TRUE : set gpd success,
93 * KAL_FALSE : set gpd fail and upper module should re-submit or free the queue list
94 */
95kal_bool hifsdioq_except_set_gpd(hif_queue_type_e q_type, kal_uint8 queue_no, qbm_gpd* first_gpd, qbm_gpd* last_gpd);
96/*!
97 * @brief poll specified QMU queue to see if any GPD complete
98 * deq_type == HIFQ_FREEQ, (use qbmt_free_q_hwo())
99 * would free the used queue after this function and return the deq number
100 * deq_type == HIF_DEQ,
101 * would just deq and return the deq list and the deq number
102 * use use qbmt_de_q() if generic buffer type
103 *
104 * @param deq_info the que number , que type and deq type
105 * @param first_gpd first GPD of a single GPD or GPD list
106 * @param last_gpd last GPD of a single GPD or GPD list
107 * @return return the deq number
108 */
109
110kal_uint32 hifsdioq_except_poll_queue(hif_deq_info_t deq_info, void **pp_first_gpd, void **pp_last_gpd);
111
112/*!
113 * @brief hif driver would count the timeout for TX queue not progressing
114 * upper driver should check this the status when they found channel abnormal
115 * @param q_num, the tx queue number to check status
116 * @return Return the hif driver counter of txq stall time in millisecond (ms)
117*/
118kal_uint32 hifsdioq_except_get_txq_timeout(kal_uint8 q_num);
119
120
121/*!
122 * @brief SDIO upper layer would call this function to drive HIF to do something
123 *
124*/
125void hifsdioq_except_poll_isr(void);
126
127/*!
128 * @brief get currently que list for debug
129 * @param is_tx, KAL_TRUE for txq , KAL_FALSE for rxq
130 * @param q_no , the queue number form 0~n
131 * @param pp_head , return the currently queue head
132 * @param pp_tail , return the currently queue tail
133 */
134void hifsdioq_except_get_que_list(kal_bool is_tx , kal_uint8 q_no, void **pp_head, void **pp_tail);
135
136#endif