1*dbddf429SAlex Dewar /* SPDX-License-Identifier: GPL-2.0 */
2ece67c86SAl Viro /*
3ece67c86SAl Viro * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
4ece67c86SAl Viro */
5ece67c86SAl Viro
6ece67c86SAl Viro #ifndef __MCONSOLE_KERN_H__
7ece67c86SAl Viro #define __MCONSOLE_KERN_H__
8ece67c86SAl Viro
937185b33SAl Viro #include <linux/list.h>
10ece67c86SAl Viro #include "mconsole.h"
11ece67c86SAl Viro
12ece67c86SAl Viro struct mconsole_entry {
13ece67c86SAl Viro struct list_head list;
14ece67c86SAl Viro struct mc_request request;
15ece67c86SAl Viro };
16ece67c86SAl Viro
17ece67c86SAl Viro /* All these methods are called in process context. */
18ece67c86SAl Viro struct mc_device {
19ece67c86SAl Viro struct list_head list;
20ece67c86SAl Viro char *name;
21ece67c86SAl Viro int (*config)(char *, char **);
22ece67c86SAl Viro int (*get_config)(char *, char *, int, char **);
23ece67c86SAl Viro int (*id)(char **, int *, int *);
24ece67c86SAl Viro int (*remove)(int, char **);
25ece67c86SAl Viro };
26ece67c86SAl Viro
27ece67c86SAl Viro #define CONFIG_CHUNK(str, size, current, chunk, end) \
28ece67c86SAl Viro do { \
29ece67c86SAl Viro current += strlen(chunk); \
30ece67c86SAl Viro if(current >= size) \
31ece67c86SAl Viro str = NULL; \
32ece67c86SAl Viro if(str != NULL){ \
33ece67c86SAl Viro strcpy(str, chunk); \
34ece67c86SAl Viro str += strlen(chunk); \
35ece67c86SAl Viro } \
36ece67c86SAl Viro if(end) \
37ece67c86SAl Viro current++; \
38ece67c86SAl Viro } while(0)
39ece67c86SAl Viro
40ece67c86SAl Viro #ifdef CONFIG_MCONSOLE
41ece67c86SAl Viro
42ece67c86SAl Viro extern void mconsole_register_dev(struct mc_device *new);
43ece67c86SAl Viro
44ece67c86SAl Viro #else
45ece67c86SAl Viro
mconsole_register_dev(struct mc_device * new)46ece67c86SAl Viro static inline void mconsole_register_dev(struct mc_device *new)
47ece67c86SAl Viro {
48ece67c86SAl Viro }
49ece67c86SAl Viro
50ece67c86SAl Viro #endif
51ece67c86SAl Viro
52ece67c86SAl Viro #endif
53