162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __MCONSOLE_KERN_H__
762306a36Sopenharmony_ci#define __MCONSOLE_KERN_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/list.h>
1062306a36Sopenharmony_ci#include "mconsole.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct mconsole_entry {
1362306a36Sopenharmony_ci	struct list_head list;
1462306a36Sopenharmony_ci	struct mc_request request;
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci/* All these methods are called in process context. */
1862306a36Sopenharmony_cistruct mc_device {
1962306a36Sopenharmony_ci	struct list_head list;
2062306a36Sopenharmony_ci	char *name;
2162306a36Sopenharmony_ci	int (*config)(char *, char **);
2262306a36Sopenharmony_ci	int (*get_config)(char *, char *, int, char **);
2362306a36Sopenharmony_ci	int (*id)(char **, int *, int *);
2462306a36Sopenharmony_ci	int (*remove)(int, char **);
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define CONFIG_CHUNK(str, size, current, chunk, end) \
2862306a36Sopenharmony_cido { \
2962306a36Sopenharmony_ci	current += strlen(chunk); \
3062306a36Sopenharmony_ci	if(current >= size) \
3162306a36Sopenharmony_ci		str = NULL; \
3262306a36Sopenharmony_ci	if(str != NULL){ \
3362306a36Sopenharmony_ci		strcpy(str, chunk); \
3462306a36Sopenharmony_ci		str += strlen(chunk); \
3562306a36Sopenharmony_ci	} \
3662306a36Sopenharmony_ci	if(end) \
3762306a36Sopenharmony_ci		current++; \
3862306a36Sopenharmony_ci} while(0)
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#ifdef CONFIG_MCONSOLE
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciextern void mconsole_register_dev(struct mc_device *new);
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#else
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cistatic inline void mconsole_register_dev(struct mc_device *new)
4762306a36Sopenharmony_ci{
4862306a36Sopenharmony_ci}
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#endif
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci#endif
53