11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Licensed under the GPL
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __MCONSOLE_KERN_H__
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __MCONSOLE_KERN_H__
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
937185b33240870719b6b5913a46e6a441f1ae96fAl Viro#include <linux/list.h>
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "mconsole.h"
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mconsole_entry {
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head list;
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct mc_request request;
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
17d8d7c28ec0b50ac57ddc909ae6eca1519473f300Paolo 'Blaisorblade' Giarrusso/* All these methods are called in process context. */
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mc_device {
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head list;
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *name;
21f28169d2000177e8b72ccc6d72887be779dceca8Jeff Dike	int (*config)(char *, char **);
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int (*get_config)(char *, char *, int, char **);
23894be2a485b75bce9a4d45d3e431aafd4c89f1eaJeff Dike	int (*id)(char **, int *, int *);
24f28169d2000177e8b72ccc6d72887be779dceca8Jeff Dike	int (*remove)(int, char **);
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CONFIG_CHUNK(str, size, current, chunk, end) \
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsdo { \
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	current += strlen(chunk); \
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(current >= size) \
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		str = NULL; \
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(str != NULL){ \
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		strcpy(str, chunk); \
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		str += strlen(chunk); \
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} \
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if(end) \
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		current++; \
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} while(0)
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_MCONSOLE
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void mconsole_register_dev(struct mc_device *new);
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void mconsole_register_dev(struct mc_device *new)
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
53