1 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2 3 #ifndef _LIBMCTP_ASTLPCL_H 4 #define _LIBMCTP_ASTLPCL_H 5 6 #ifdef __cplusplus 7 extern "C" { 8 #endif 9 10 #include <libmctp.h> 11 12 #include <stdint.h> 13 14 struct mctp_binding_astlpc; 15 16 /* todo: Remove enum from public interfaces */ 17 enum mctp_binding_astlpc_kcs_reg { 18 MCTP_ASTLPC_KCS_REG_DATA = 0, 19 MCTP_ASTLPC_KCS_REG_STATUS = 1, 20 }; 21 22 struct mctp_binding_astlpc_ops { 23 int (*kcs_read)(void *data, enum mctp_binding_astlpc_kcs_reg reg, 24 uint8_t *val); 25 int (*kcs_write)(void *data, enum mctp_binding_astlpc_kcs_reg reg, 26 uint8_t val); 27 int (*lpc_read)(void *data, void *buf, long offset, size_t len); 28 int (*lpc_write)(void *data, const void *buf, long offset, size_t len); 29 }; 30 31 #define MCTP_BINDING_ASTLPC_MODE_BMC 0 32 #define MCTP_BINDING_ASTLPC_MODE_HOST 1 33 struct mctp_binding_astlpc * 34 mctp_astlpc_init(uint8_t mode, uint32_t mtu, void *lpc_map, 35 const struct mctp_binding_astlpc_ops *ops, void *ops_data); 36 37 struct mctp_binding_astlpc * 38 mctp_astlpc_init_ops(const struct mctp_binding_astlpc_ops *ops, void *ops_data, 39 void *lpc_map); 40 void mctp_astlpc_destroy(struct mctp_binding_astlpc *astlpc); 41 42 struct mctp_binding *mctp_binding_astlpc_core(struct mctp_binding_astlpc *b); 43 44 bool mctp_astlpc_tx_done(struct mctp_binding_astlpc *astlpc); 45 int mctp_astlpc_poll(struct mctp_binding_astlpc *astlpc); 46 47 /* fileio-based interface */ 48 struct mctp_binding_astlpc *mctp_astlpc_init_fileio(const char *kcs_path); 49 50 struct pollfd; 51 int mctp_astlpc_init_pollfd(struct mctp_binding_astlpc *astlpc, 52 struct pollfd *pollfd); 53 54 #ifdef __cplusplus 55 } 56 #endif 57 58 #endif /* _LIBMCTP_ASTLPC_H */ 59