/* SPDX-License-Identifier: GPL-2.0-only
 *
 * Copyright (C) 2020-2021 Intel Corporation.
 */

#ifndef _IOSM_IPC_COREDUMP_H_
#define _IOSM_IPC_COREDUMP_H_

#include "iosm_ipc_devlink.h"

/* Max number of bytes to receive for Coredump list structure */
#define MAX_CD_LIST_SIZE  0x1000

/* Max buffer allocated to receive coredump data */
#define MAX_DATA_SIZE 0x00010000

/* Max length */
#define MAX_SIZE_LEN 32

/**
 * struct iosm_cd_list_entry - Structure to hold coredump file info.
 * @size:       Number of bytes for the entry
 * @filename:   Coredump filename to be generated on host
 */
struct iosm_cd_list_entry {
	__le32 size;
	char filename[IOSM_MAX_FILENAME_LEN];
} __packed;

/**
 * struct iosm_cd_list - Structure to hold list of coredump files
 *                      to be collected.
 * @num_entries:        Number of entries to be received
 * @entry:              Contains File info
 */
struct iosm_cd_list {
	__le32 num_entries;
	struct iosm_cd_list_entry entry[];
} __packed;

/**
 * struct iosm_cd_table - Common Coredump table
 * @version:            Version of coredump structure
 * @list:               Coredump list structure
 */
struct iosm_cd_table {
	__le32 version;
	struct iosm_cd_list list;
} __packed;

int ipc_coredump_collect(struct iosm_devlink *devlink, u8 **data, int entry,
			 u32 region_size);

int ipc_coredump_get_list(struct iosm_devlink *devlink, u16 cmd);

#endif /* _IOSM_IPC_COREDUMP_H_ */
