1 /*        $NetBSD: pud_msgif.h,v 1.4 2007/11/28 16:59:02 pooka Exp $  */
2 
3 /*
4  * Copyright (c) 2007  Antti Kantee.  All Rights Reserved.
5  *
6  * Development of this software was supported by the
7  * Research Foundation of Helsinki University of Technology
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
19  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */
30 
31 #ifndef _DEV_PUD_PUDMSGIF_H_
32 #define _DEV_PUD_PUDMSGIF_H_
33 
34 #include <dev/putter/putter.h>
35 
36 struct pud_req {
37           struct putter_hdr   pdr_pth;
38 
39           dev_t                         pdr_dev;
40 
41           pid_t                         pdr_pid;
42           lwpid_t                       pdr_lid;
43 
44           int                           pdr_reqclass;
45           int                           pdr_reqtype;
46 
47           uint64_t            pdr_reqid;
48           int                           pdr_rv;
49 
50           size_t                        pdr_len;
51           uint8_t                       pdr_data[0];
52 };
53 
54 #define PUD_REQ_CDEV          1
55 #define PUD_REQ_BDEV          2
56 #define PUD_REQ_CONF          3
57 
58 struct pud_register {
59           dev_t     pm_dev;
60 };
61 
62 #define pud_creq_open pud_req_openclose
63 #define pud_creq_close pud_req_openclose
64 struct pud_req_openclose {
65           struct pud_req      pm_pdr;
66 
67           int                 pm_flags;
68           int                 pm_fmt;
69 };
70 
71 #define pud_creq_read pud_req_readwrite
72 #define pud_creq_write pud_req_readwrite
73 struct pud_req_readwrite {
74           struct pud_req      pm_pdr;
75 
76           off_t               pm_offset;
77           size_t              pm_resid;
78 
79           uint8_t             pm_data[0];
80 };
81 
82 struct pud_req_ioctl {
83           struct pud_req      pm_pdr;
84 
85           u_long              pm_iocmd;
86           int                 pm_flag;  /* XXX: I feel like a cargo cult */
87 
88           uint8_t             pm_data[0];
89 };
90 
91 #define PUD_DEVNAME_MAX 31
92 struct pud_conf_reg {
93           struct pud_req      pm_pdr;
94 
95           int                 pm_version;
96           dev_t               pm_regdev;
97           int                 pm_flags;
98           char                pm_devname[PUD_DEVNAME_MAX+1];
99 };
100 #define PUD_CONFFLAG_BDEV     1
101 
102 #define PUD_DEVELVERSION      0x80000000
103 #define PUD_VERSION           1
104 
105 enum {
106           PUD_CDEV_OPEN,      PUD_CDEV_CLOSE,     PUD_CDEV_READ,      PUD_CDEV_WRITE,
107           PUD_CDEV_IOCTL,     PUD_CDEV_POLL,      PUD_CDEV_MMAP,      PUD_CDEV_KQFILTER,
108           PUD_CDEV_STOP,      PUD_CDEV_TTY,
109 };
110 
111 enum {
112           PUD_BDEV_OPEN,      PUD_BDEV_CLOSE, PUD_BDEV_STRATREAD, PUD_BDEV_STRATWRITE,
113           PUD_BDEV_IOCTL,     PUD_BDEV_DUMP,      PUD_BDEV_PSIZE,
114 };
115 
116 enum {
117           PUD_CONF_REG,       PUD_CONF_DEREG,     PUD_CONF_MMAP,
118 };
119 
120 #endif /* _DEV_PUD_PUDMSGIF_H_ */
121