blob: bbf67e633bc7c81dfdf3cc47c5a5c41bb59e9807 [file] [edit]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* MCTP SPI Error Injection Infrastructure
*
* Copyright (c) 2024 NVIDIA CORPORATION. All rights reserved.
*
* Provides debugfs-based error injection for testing MCTP error queue
* functionality over SPI binding.
* Interface unified with I2C/USB error injection.
*/
#ifndef __MCTP_SPI_ERROR_INJECT_H
#define __MCTP_SPI_ERROR_INJECT_H
#include <linux/types.h>
#include <linux/skbuff.h>
#include <linux/random.h>
#include <linux/spinlock.h>
#include <linux/netdevice.h>
#include <linux/completion.h>
#include <linux/kthread.h>
#include <linux/debugfs.h>
/* Forward declarations */
struct dentry;
/* Error injection modes - unified with I2C/USB */
enum mctp_error_inject_mode {
MCTP_ERR_MODE_ALWAYS,
MCTP_ERR_MODE_RANDOM,
MCTP_ERR_MODE_COUNT
};
/* Error injection control structure - unified interface */
struct mctp_spi_error_inject {
bool enable_tx; /* TX error injection enable */
enum mctp_error_inject_mode mode;
/* TX injection - SPI uses SPB_AP return codes */
int spi_tx_error_code; /* SPB_AP error code (SPB_AP_ERROR_TIMEOUT, etc.) */
u32 spi_tx_error_rate; /* Percentage (0-100) or count */
u32 spi_tx_inject_count; /* Counter for count mode */
u32 spi_tx_errors_injected;
/* Delay injection */
u32 delay_ms;
/* EID filtering - unified with I2C/USB */
struct {
bool enabled;
u8 src_eid; /* 0 = any */
u8 dest_eid; /* 0 = any */
u8 msg_type; /* 0 = any */
} eid_filter;
/* Statistics */
u64 total_packets_processed;
u64 total_errors_injected;
/* RNG state */
struct rnd_state rng;
spinlock_t lock;
};
/* Forward declaration - full definition in mctp-spi.c */
struct mctp_spi;
/* Module init/exit functions */
int mctp_spi_error_inject_module_init(void);
void mctp_spi_error_inject_module_exit(void);
/* Public API for main driver */
void mctp_spi_error_inject_init(struct mctp_spi *midev);
void mctp_spi_error_inject_cleanup(struct mctp_spi *midev);
int mctp_spi_error_inject_tx(struct mctp_spi *midev, struct sk_buff *skb, int *injected_status);
#endif /* __MCTP_SPI_ERROR_INJECT_H */