1 /* 2 * Copyright (c) 2021 Bestechnic (Shanghai) Co., Ltd. All rights reserved. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef __HAL_TRANSQ_H__ 16 #define __HAL_TRANSQ_H__ 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 22 #ifdef CHIP_HAS_TRANSQ 23 24 #include "plat_types.h" 25 26 enum HAL_TRANSQ_ID_T { 27 HAL_TRANSQ_ID_0 = 0, 28 #if (CHIP_HAS_TRANSQ > 1) 29 HAL_TRANSQ_ID_1, 30 #endif 31 32 HAL_TRANSQ_ID_QTY 33 }; 34 35 enum HAL_TRANSQ_PRI_T { 36 HAL_TRANSQ_PRI_NORMAL = 0, 37 HAL_TRANSQ_PRI_HIGH, 38 39 HAL_TRANSQ_PRI_QTY 40 }; 41 42 enum HAL_TRANSQ_RET_T { 43 HAL_TRANSQ_RET_OK = 0, 44 HAL_TRANSQ_RET_BAD_ID, 45 HAL_TRANSQ_RET_BAD_PRI, 46 HAL_TRANSQ_RET_BAD_CFG, 47 HAL_TRANSQ_RET_BAD_SLOT, 48 HAL_TRANSQ_RET_BAD_TX_NUM, 49 HAL_TRANSQ_RET_BAD_RX_NUM, 50 HAL_TRANSQ_RET_BAD_MODE, 51 HAL_TRANSQ_RET_RX_EMPTY, 52 HAL_TRANSQ_RET_TX_FULL, 53 }; 54 55 typedef void (*HAL_TRANSQ_RX_IRQ_HANDLER)(enum HAL_TRANSQ_PRI_T pri); 56 typedef void (*HAL_TRANSQ_TX_IRQ_HANDLER)(enum HAL_TRANSQ_PRI_T pri, const uint8_t *data, uint32_t len); 57 58 struct HAL_TRANSQ_SLOT_NUM_T { 59 uint8_t tx_num[HAL_TRANSQ_PRI_QTY]; 60 uint8_t rx_num[HAL_TRANSQ_PRI_QTY]; 61 }; 62 63 struct HAL_TRANSQ_CFG_T { 64 struct HAL_TRANSQ_SLOT_NUM_T slot; 65 uint8_t rx_irq_count; 66 HAL_TRANSQ_RX_IRQ_HANDLER rx_handler; 67 HAL_TRANSQ_TX_IRQ_HANDLER tx_handler; 68 }; 69 70 enum HAL_TRANSQ_RET_T hal_transq_get_rx_status(enum HAL_TRANSQ_ID_T id, enum HAL_TRANSQ_PRI_T pri, bool *ready); 71 72 enum HAL_TRANSQ_RET_T hal_transq_get_tx_status(enum HAL_TRANSQ_ID_T id, enum HAL_TRANSQ_PRI_T pri, bool *done); 73 74 bool hal_transq_tx_busy(enum HAL_TRANSQ_ID_T id); 75 76 enum HAL_TRANSQ_RET_T hal_transq_rx_first(enum HAL_TRANSQ_ID_T id, enum HAL_TRANSQ_PRI_T pri, const uint8_t **data, uint32_t *len); 77 78 enum HAL_TRANSQ_RET_T hal_transq_rx_next(enum HAL_TRANSQ_ID_T id, enum HAL_TRANSQ_PRI_T pri, const uint8_t **data, uint32_t *len); 79 80 enum HAL_TRANSQ_RET_T hal_transq_tx(enum HAL_TRANSQ_ID_T id, enum HAL_TRANSQ_PRI_T pri, const uint8_t *data, uint32_t len); 81 82 enum HAL_TRANSQ_RET_T hal_transq_update_num(enum HAL_TRANSQ_ID_T id, const struct HAL_TRANSQ_SLOT_NUM_T *slot); 83 84 enum HAL_TRANSQ_RET_T hal_transq_open(enum HAL_TRANSQ_ID_T id, const struct HAL_TRANSQ_CFG_T *cfg); 85 86 enum HAL_TRANSQ_RET_T hal_transq_close(enum HAL_TRANSQ_ID_T id); 87 88 enum HAL_TRANSQ_RET_T hal_transq_flush(enum HAL_TRANSQ_ID_T id); 89 90 uint8_t get_rx_irq_count(enum HAL_TRANSQ_ID_T id); 91 92 #ifdef __ARM_ARCH_ISA_ARM 93 #ifdef RTOS 94 void hal_transq_local_irq_handler(int irq_num, void *irq_data); 95 #endif 96 #endif 97 #endif // CHIP_HAS_TRANSQ 98 99 void hal_transq_local_irq_handler_body(enum HAL_TRANSQ_ID_T id); 100 101 #ifdef __cplusplus 102 } 103 #endif 104 105 #endif 106