blob: 76b28c415f20ebf738c0c84c558f899a9ea59caa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#ifndef _JOVE_PORTIO_H
#define _JOVE_PORTIO_H 1
#include <stdint.h>
typedef uint16_t ioport_t;
static inline uint8_t port_inb(ioport_t port)
{ uint8_t r; __asm__ volatile("inb %w1, %b0": "=a"(r): "Nd"(port): "memory"); return r; }
static inline uint16_t port_inw(ioport_t port)
{ uint16_t r; __asm__ volatile("inw %w1, %w0": "=a"(r): "Nd"(port): "memory"); return r; }
static inline uint32_t port_inl(ioport_t port)
{ uint32_t r; __asm__ volatile("inl %d1, %l0": "=a"(r): "Nd"(port): "memory"); return r; }
static inline void port_outb(ioport_t port, uint8_t v)
{ __asm__ volatile("outb %b0, %w1":: "a"(v), "Nd"(port): "memory"); }
static inline void port_outw(ioport_t port, uint16_t v)
{ __asm__ volatile("outb %w0, %w1":: "a"(v), "Nd"(port): "memory"); }
static inline void port_outl(ioport_t port, uint32_t v)
{ __asm__ volatile("outb %d0, %w1":: "a"(v), "Nd"(port): "memory"); }
#endif
|