The Pedigree Project 0.1
IoPort.cc
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include "pedigree/kernel/processor/IoPort.h"
21#include "pedigree/kernel/processor/IoPortManager.h"
22
23IoPort::IoPort(const char* name) : m_IoPort(0), m_Size(0), m_Name(name) {}
24
26 free();
27}
28
29bool IoPort::allocate(io_port_t ioPort, size_t size) {
30 // Free any allocated I/O ports
31 if (m_Size != 0)
32 free();
33
34 if (IoPortManager::instance().allocate(this, ioPort, size) == true) {
35 m_IoPort = ioPort;
36 m_Size = size;
37 return true;
38 }
39 return false;
40}
41
43 if (m_Size != 0) {
45
46 m_IoPort = 0;
47 m_Size = 0;
48 }
49}
50
51size_t IoPort::size() const {
52 return m_Size;
53}
54
55io_port_t IoPort::base() const {
56 return m_IoPort;
57}
58
59IoPort::operator bool() const {
60 return (m_Size != 0);
61}
62
63const char* IoPort::name() const {
64 return m_Name;
65}
66
67#if KERNEL_PROCESSOR_NO_PORT_IO
69
70uint8_t IoPort::read8(size_t offset) {
71 return 0;
72}
73uint16_t IoPort::read16(size_t offset) {
74 return 0;
75}
76uint32_t IoPort::read32(size_t offset) {
77 return 0;
78}
79#if BITS_64
80uint64_t IoPort::read64(size_t offset) {
81 return 0;
82}
83#endif
84void IoPort::write8(uint8_t value, size_t offset) {}
85void IoPort::write16(uint16_t value, size_t offset) {}
86void IoPort::write32(uint32_t value, size_t offset) {}
87#if BITS_64
88void IoPort::write64(uint64_t value, size_t offset) {}
89#endif
90#endif
static IoPortManager & instance()
void free(IoPort *Port)
virtual uint64_t read64(size_t offset=0)
virtual size_t size() const
Definition IoPort.cc:51
virtual uint16_t read16(size_t offset=0)
IoPort(const char *name)
Definition IoPort.cc:23
const char * m_Name
Definition IoPort.h:84
const char * name() const
Definition IoPort.cc:63
void free()
Definition IoPort.cc:42
virtual uint32_t read32(size_t offset=0)
io_port_t base() const
Definition IoPort.cc:55
bool allocate(io_port_t ioPort, size_t size)
Definition IoPort.cc:29
virtual void write8(uint8_t value, size_t offset=0)
size_t m_Size
Definition IoPort.h:82
virtual void write32(uint32_t value, size_t offset=0)
virtual uint8_t read8(size_t offset=0)
io_port_t m_IoPort
Definition IoPort.h:80
virtual void write64(uint64_t value, size_t offset=0)
virtual void write16(uint16_t value, size_t offset=0)
virtual ~IoPort()
Definition IoPort.cc:25