kernel/elf: structures must be packed
[meinos.git] / apps / include / cdi / generic.h
blobb3d1031a3e7b9218869a62e2359f18ca3573590d
1 /*
2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef _CDI_GENERIC_H_
20 #define _CDI_GENERIC_H_
22 #include <sys/types.h>
24 #include "cdi.h"
25 #include "cdi/lists.h"
27 /// Struktur fuer Stream-Objekt fuer Joystick
28 struct cdi_generic_stream_joystick {
29 int axis_raw[2];
30 int axis_cal[2];
31 int buttons[2];
34 /**
35 * Struktur fuer CDI Generic Driver
37 struct cdi_generic_driver {
38 /// Allgemeine CDI-Treiber-Struktur
39 struct cdi_driver drv;
42 struct cdi_generic_stream;
44 /**
45 * Struktur fuer CDI Generic Devices
47 struct cdi_generic_device {
48 /// Allgemeine CDI-Geraete-Struktur
49 struct cdi_device dev;
51 /// Datenstream des Geraets
52 struct cdi_generic_stream *stream;
54 /// Steuerfunktionen des Geraets
55 cdi_list_t functions;
58 /**
59 * Struktur eines Streams
60 * Wie die Daten des Streams verarbeitet werden haengt vom Treiber ab.
61 * Gebraeuchlich ist die Arbeitsweise FIFO
62 * - read() wird von der Implementation aufgerufen, wenn ein Programm Daten
63 * vom Stream lesen will.
64 * - write() wird von der Implementation aufgerufen, wenn ein Programm Daten
65 * in den Stream schreiben will.
67 struct cdi_generic_stream {
68 /// Groesse eines Objekts
69 size_t objsz;
70 /// Liest ein Objekt vom Stream
71 int (*read)(struct cdi_generic_device *dev,void *obj,size_t count);
72 /// Schreibt ein Objekt in den Stream
73 int (*write)(struct cdi_generic_device *dev,void *obj,size_t count);
76 /**
77 * Struktur einer Steuerfunktion
78 * Steuerfunktionen werden vom Treiber zur Verfuegung gestellt um erweiterten
79 * Zugriff auf das Geraet zu haben. Jede Funktion hat ein Objekt, dass der
80 * Funktion vom Aufrufer uebergeben wird und ein Objekt, dass die Funktion
81 * an den Aufrufer zurueck gibt.
83 struct cdi_generic_function {
84 /**
85 * Referenz zur Steuerfunktion
86 * @param dev CDI-Geraet
87 * @param data Datenobjekt
88 * @param datasz Groesse von data
89 * @param ret Rueckgabeobjekt
90 * @param retsz Groesse von ret
91 * @return Rueckgabewert
93 int (*func)(struct cdi_generic_device *dev,void *data,size_t datasz,void *ret,size_t retsz);
95 // meinOS specific
96 /// Nummer der Funktion
97 int cmd;
101 * Initialisiert einen CDI-Generic-Treiber
102 * @param driver CDI-Generic-Treiber
104 void cdi_generic_driver_init(struct cdi_generic_driver* driver);
107 * Zerstoert einen CDI-Generic-Treiber
108 * @param driver CDI-Generic-Treiber
110 void cdi_generic_driver_destroy(struct cdi_generic_driver* driver);
113 * Registriert einen CDI-Generic-Treiber
114 * @param driver CDI-Generic-Treiber
116 void cdi_generic_driver_register(struct cdi_generic_driver* driver);
118 #endif