/* * Copyright (C) 2017 Robin Krahl * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. */ #ifndef GARMOS_ARCH_H #define GARMOS_ARCH_H #include /* * The functions in this header depend on the architecture. They should be * provided by objects from the architecture. */ /* write data to a port */ void prtset8(const uint16_t port, const uint8_t val); void prtset16(const uint16_t port, const uint16_t val);; void prtset32(const uint16_t port, const uint32_t val); /* read data from a port */ uint8_t prtget8(const uint16_t port); uint16_t prtget16(const uint16_t port); uint32_t prtget32(const uint16_t port); /* set a memory register */ void regset8(const uint32_t reg, const uint8_t val); void regset16(const uint32_t reg, const uint16_t val); void regset32(const uint32_t reg, const uint32_t val); /* global description table initialization */ struct gdtp { uint16_t limit; void *pointer; } __attribute__((packed)); void gdtset(struct gdtp gdtp); /* interrupt description table initialization and activation */ struct idtp { uint16_t limit; void *pointer; } __attribute((packed)); void idtset(struct idtp idtp); void idtact(void); /* interrupt handler for ignores and a list of handlers to register */ extern uint8_t irqnos[]; extern uint32_t irqhdls[]; void irqign(void); void irqhdl0x00(void); void irqhdl0x01(void); #endif