28651e6c42
Add a mechanism for controlling whether the client associated with a KCS device will receive Input Buffer Full (IBF) and Output Buffer Empty (OBE) events. This enables an abstract implementation of poll() for KCS devices. A wart in the implementation is that the ASPEED KCS devices don't support an OBE interrupt for the BMC. Instead we pretend it has one by polling the status register waiting for the Output Buffer Full (OBF) bit to clear, and generating an event when OBE is observed. Cc: CS20 KWLiu <KWLIU@nuvoton.com> Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Reviewed-by: Zev Weiss <zweiss@equinix.com> Message-Id: <20210608104757.582199-10-andrew@aj.id.au> Signed-off-by: Corey Minyard <cminyard@mvista.com>
23 lines
691 B
C
23 lines
691 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (c) 2021, IBM Corp. */
|
|
|
|
#ifndef __KCS_BMC_DEVICE_H__
|
|
#define __KCS_BMC_DEVICE_H__
|
|
|
|
#include <linux/irqreturn.h>
|
|
|
|
#include "kcs_bmc.h"
|
|
|
|
struct kcs_bmc_device_ops {
|
|
void (*irq_mask_update)(struct kcs_bmc_device *kcs_bmc, u8 mask, u8 enable);
|
|
u8 (*io_inputb)(struct kcs_bmc_device *kcs_bmc, u32 reg);
|
|
void (*io_outputb)(struct kcs_bmc_device *kcs_bmc, u32 reg, u8 b);
|
|
void (*io_updateb)(struct kcs_bmc_device *kcs_bmc, u32 reg, u8 mask, u8 b);
|
|
};
|
|
|
|
irqreturn_t kcs_bmc_handle_event(struct kcs_bmc_device *kcs_bmc);
|
|
int kcs_bmc_add_device(struct kcs_bmc_device *kcs_bmc);
|
|
void kcs_bmc_remove_device(struct kcs_bmc_device *kcs_bmc);
|
|
|
|
#endif
|