master
  1/* $NetBSD: drvctlio.h,v 1.7 2008/05/31 13:24:57 freza Exp $ */
  2
  3/*-
  4 * Copyright (c) 2006 The NetBSD Foundation, Inc.
  5 * All rights reserved.
  6 *
  7 * This code is derived from software contributed to The NetBSD Foundation
  8 * by Jason R. Thorpe.
  9 *
 10 * Redistribution and use in source and binary forms, with or without
 11 * modification, are permitted provided that the following conditions
 12 * are met:
 13 * 1. Redistributions of source code must retain the above copyright
 14 *    notice, this list of conditions and the following disclaimer.
 15 * 2. Redistributions in binary form must reproduce the above copyright
 16 *    notice, this list of conditions and the following disclaimer in the
 17 *    documentation and/or other materials provided with the distribution.
 18 *
 19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 29 * POSSIBILITY OF SUCH DAMAGE.
 30 */
 31
 32/* This interface is experimental and may change. */
 33
 34#ifndef _SYS_DRVCTLIO_H_ 
 35#define _SYS_DRVCTLIO_H_ 
 36
 37#include <prop/proplib.h>
 38#include <sys/ioccom.h>
 39
 40#define DRVCTLDEV "/dev/drvctl"
 41
 42struct devdetachargs {
 43	char devname[16];
 44};
 45
 46struct devlistargs {
 47	char l_devname[16];
 48	char (*l_childname)[16];
 49	size_t l_children;
 50};
 51
 52enum devpmflags {
 53	DEVPM_F_SUBTREE = 0x1
 54};
 55
 56struct devpmargs {
 57	char devname[16];
 58	uint32_t flags;
 59};
 60
 61struct devrescanargs {
 62	char busname[16];
 63	char ifattr[16];
 64	unsigned int numlocators;
 65	int *locators;
 66};
 67
 68#define DRVDETACHDEV _IOW('D', 123, struct devdetachargs)
 69#define DRVRESCANBUS _IOW('D', 124, struct devrescanargs)
 70#define	DRVCTLCOMMAND _IOWR('D', 125, struct plistref)
 71#define DRVRESUMEDEV _IOW('D', 126, struct devpmargs)
 72#define DRVLISTDEV _IOWR('D', 127, struct devlistargs)
 73#define DRVGETEVENT _IOR('D', 128, struct plistref)
 74#define DRVSUSPENDDEV _IOW('D', 129, struct devpmargs)
 75
 76/*
 77 * DRVCTLCOMMAND documentation
 78 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 79 *
 80 * Generic ioctl that takes a dictionary as an argument (specifies the
 81 * command and arguments) and returns a dictionary with the results.
 82 *
 83 * Command arguments are structured like so:
 84 *
 85 * <dict>
 86 *	<key>drvctl-command</key>
 87 *	<string>...</string>
 88 *	<!-- optional arguments -->
 89 *	<key>drvctl-arguments</key>
 90 *	<dict>
 91 *		<!-- arguments vary with command -->
 92 *	</dict>
 93 * </dict>
 94 *
 95 * Results are returned like so:
 96 *
 97 * <dict>
 98 *	<key>drvctl-error</key>
 99 *	<!-- 0 == success, otherwise an errno value -->
100 *	<integer>...</integer>
101 *	<!-- optional additional error message -->
102 *	<key>drvctl-error-message</key>
103 *	<string>...</string>
104 *	<!-- optional results dictionary -->
105 *	<key>drvctl-result-data</key>
106 *	<dict>
107 *		<!-- results vary with command -->
108 *	</dict>
109 * </dict>
110 *
111 *
112 * Commands recognized by DRVCTLCOMMAND
113 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
114 *
115 * get-properties
116 *
117 * Arguments:
118 *
119 *	<dict>
120 *		<key>device-name</key>
121 *		<string>...</string>
122 *	</dict>
123 *
124 * Results:
125 *	<dict>
126 *		<!-- contents of device's properties dictionary -->
127 *	</dict>
128 */
129
130#endif /* _SYS_DRVCTLIO_H_ */