First try in keyboard driver
[incOS.git] / programs / include / cdi / scsi.h
blob351232a4f148efb2143cbe1d686ecc0b3a6e6436
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_SCSI_H_INCLUDED
20 #define CDI_SCSI_H_INCLUDED
22 #include <stdint.h>
23 #include <stddef.h>
25 #include <cdi.h>
27 // SCSI-Paket
28 struct cdi_scsi_packet {
29 // Buffer zum Senden oder Empfangen von Daten
30 void *buffer;
32 // Groesse des Buffers
33 size_t bufsize;
35 // Ob gelesen oder geschrieben werden soll
36 enum {
37 CDI_SCSI_NODATA,
38 CDI_SCSI_READ,
39 CDI_SCSI_WRITE,
40 } direction;
42 // SCSI Command
43 uint8_t command[16];
45 // Groesse des SCSI Commands
46 size_t cmdsize;
49 // SCSI-Geraet
50 struct cdi_scsi_device {
51 struct cdi_device dev;
54 // SCSI-Driver
55 struct cdi_scsi_driver {
56 struct cdi_driver drv;
58 int (*request)(struct cdi_scsi_device *device,struct cdi_scsi_packet *packet);
61 /**
62 * Ein SCSI-Paket allozieren
64 * @param size Benoetigte Groesse
66 * @return Pointer auf das Paket oder NULL im Fehlerfall
68 struct cdi_scsi_packet* cdi_scsi_packet_alloc(size_t size);
70 /**
71 * Ein SCSI-Paket freigeben
73 * @param packet Pointer auf das Paket
75 void cdi_scsi_packet_free(struct cdi_scsi_packet* packet);
77 /**
78 * Initialisiert die Datenstrukturen fuer einen SCSI-Treiber
80 void cdi_scsi_driver_init(struct cdi_scsi_driver* driver);
82 /**
83 * Deinitialisiert die Datenstrukturen fuer einen SCSI-Treiber
85 void cdi_scsi_driver_destroy(struct cdi_scsi_driver* driver);
87 /**
88 * Registiert einen SCSI-Treiber
90 void cdi_scsi_driver_register(struct cdi_scsi_driver* driver);
92 #endif