13d36ee2eSJeremy Kerr /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2672c8852SJeremy Kerr 3672c8852SJeremy Kerr #ifndef _LIBMCTP_ASTLPCL_H 4672c8852SJeremy Kerr #define _LIBMCTP_ASTLPCL_H 5672c8852SJeremy Kerr 6672c8852SJeremy Kerr #ifdef __cplusplus 7672c8852SJeremy Kerr extern "C" { 8672c8852SJeremy Kerr #endif 9672c8852SJeremy Kerr 108682ef24SJeremy Kerr #include <libmctp.h> 11672c8852SJeremy Kerr 127cd72f14SAndrew Jeffery #include <stdint.h> 137cd72f14SAndrew Jeffery 14672c8852SJeremy Kerr struct mctp_binding_astlpc; 15672c8852SJeremy Kerr 167cd72f14SAndrew Jeffery /* todo: Remove enum from public interfaces */ 17bc53d35aSJeremy Kerr enum mctp_binding_astlpc_kcs_reg { 18bc53d35aSJeremy Kerr MCTP_ASTLPC_KCS_REG_DATA = 0, 19bc53d35aSJeremy Kerr MCTP_ASTLPC_KCS_REG_STATUS = 1, 20bc53d35aSJeremy Kerr }; 21bc53d35aSJeremy Kerr 22bc53d35aSJeremy Kerr struct mctp_binding_astlpc_ops { 23bc53d35aSJeremy Kerr int (*kcs_read)(void *data, enum mctp_binding_astlpc_kcs_reg reg, 24bc53d35aSJeremy Kerr uint8_t *val); 25bc53d35aSJeremy Kerr int (*kcs_write)(void *data, enum mctp_binding_astlpc_kcs_reg reg, 26bc53d35aSJeremy Kerr uint8_t val); 2706b2cd86SAndrew Jeffery int (*lpc_read)(void *data, void *buf, long offset, size_t len); 2855fb90beSAndrew Jeffery int (*lpc_write)(void *data, const void *buf, long offset, size_t len); 29bc53d35aSJeremy Kerr }; 30bc53d35aSJeremy Kerr 317cd72f14SAndrew Jeffery #define MCTP_BINDING_ASTLPC_MODE_BMC 0 327cd72f14SAndrew Jeffery #define MCTP_BINDING_ASTLPC_MODE_HOST 1 337cd72f14SAndrew Jeffery struct mctp_binding_astlpc * 347cd72f14SAndrew Jeffery mctp_astlpc_init(uint8_t mode, uint32_t mtu, void *lpc_map, 357cd72f14SAndrew Jeffery const struct mctp_binding_astlpc_ops *ops, void *ops_data); 367cd72f14SAndrew Jeffery 377cd72f14SAndrew Jeffery struct mctp_binding_astlpc * 387cd72f14SAndrew Jeffery mctp_astlpc_init_ops(const struct mctp_binding_astlpc_ops *ops, void *ops_data, 397cd72f14SAndrew Jeffery void *lpc_map); 404663f67cSAndrew Jeffery void mctp_astlpc_destroy(struct mctp_binding_astlpc *astlpc); 413b36d17cSJeremy Kerr 423b36d17cSJeremy Kerr struct mctp_binding *mctp_binding_astlpc_core(struct mctp_binding_astlpc *b); 433b36d17cSJeremy Kerr 444df106dbSFrederic Barrat bool mctp_astlpc_tx_done(struct mctp_binding_astlpc *astlpc); 45672c8852SJeremy Kerr int mctp_astlpc_poll(struct mctp_binding_astlpc *astlpc); 46672c8852SJeremy Kerr 47bc53d35aSJeremy Kerr /* fileio-based interface */ 48*400766f9SKonstantin Aladyshev struct mctp_binding_astlpc *mctp_astlpc_init_fileio(const char *kcs_path); 49bc53d35aSJeremy Kerr 501111c6a5SAndrew Jeffery struct pollfd; 511111c6a5SAndrew Jeffery int mctp_astlpc_init_pollfd(struct mctp_binding_astlpc *astlpc, 521111c6a5SAndrew Jeffery struct pollfd *pollfd); 531111c6a5SAndrew Jeffery 54672c8852SJeremy Kerr #ifdef __cplusplus 55672c8852SJeremy Kerr } 56672c8852SJeremy Kerr #endif 57672c8852SJeremy Kerr 580ddd07e7SAndrew Jeffery #endif /* _LIBMCTP_ASTLPC_H */ 59