2 * Copyright (c) 2007 Kevin Wolf
4 * This program is free software. It comes without any warranty, to
5 * the extent permitted by applicable law. You can redistribute it
6 * and/or modify it under the terms of the Do What The Fuck You Want
7 * To Public License, Version 2, as published by Sam Hocevar. See
8 * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
11 #ifndef CDI_MISC_H_INCLUDED
12 #define CDI_MISC_H_INCLUDED
14 // TODO: Translate comments
20 * Registiert einen neuen IRQ-Handler.
22 * @param irq Nummer des zu reservierenden IRQ
23 * @param handler Handlerfunktion
24 * @param device Geraet, das dem Handler als Parameter uebergeben werden soll
26 void cdi_register_irq(uint8_t irq
, void (*handler
)(struct cdi_device
*),
27 struct cdi_device
* device
);
30 * Reserviert physisch zusammenhaengenden Speicher.
32 * @param size Groesse des benoetigten Speichers in Bytes
33 * @param vaddr Pointer, in den die virtuelle Adresse des reservierten
34 * Speichers geschrieben wird.
35 * @param paddr Pointer, in den die physische Adresse des reservierten
36 * Speichers geschrieben wird.
38 * @return 0 wenn der Speicher erfolgreich reserviert wurde, -1 sonst
40 int cdi_alloc_phys_mem(size_t size
, void** vaddr
, void** paddr
);
43 * Reserviert physisch zusammenhaengenden Speicher an einer definierten Adresse.
45 * @param size Groesse des benoetigten Speichers in Bytes
46 * @param paddr Physikalische Adresse des angeforderten Speicherbereichs
48 * @return Virtuelle Adresse, wenn Speicher reserviert wurde, sonst 0
50 void* cdi_alloc_phys_addr(size_t size
, uintptr_t paddr
);
55 * @return 0 wenn die Ports erfolgreich reserviert wurden, -1 sonst.
57 int cdi_ioports_alloc(uint16_t start
, uint16_t count
);
60 * Gibt reservierte IO-Ports frei
62 * @return 0 wenn die Ports erfolgreich freigegeben wurden, -1 sonst.
64 int cdi_ioports_free(uint16_t start
, uint16_t count
);
67 * Unterbricht die Ausfuehrung fuer mehrere Millisekunden
69 void cdi_sleep_ms(uint32_t ms
);
71 static inline uint64_t cdi_time_offset(unsigned int hour
, unsigned int minute
,
74 return hour
* 3600 + minute
* 60 + second
;
76 uint64_t cdi_time_by_date(unsigned int year
, unsigned int month
,