26#ifndef _ULTIBO_PLATFORM_H
27#define _ULTIBO_PLATFORM_H
39#define HANDLE_FLAG_NONE 0x00000000
40#define HANDLE_FLAG_NAMED 0x00000001
41#define HANDLE_FLAG_DUPLICATE 0x00000002
43#define HANDLE_FLAG_INTERNAL HANDLE_FLAG_NONE + 0x80000000
46#define HANDLE_SIGNATURE 0xCD15E20A
48#define HANDLE_TABLE_MIN 0x100
49#define HANDLE_TABLE_MAX 0x7FFFFFFF
51#define HANDLE_TABLE_MASK 0x7FF
53#define HANDLE_NAME_LENGTH 256
56#define DMA_DATA_FLAG_NONE 0x00000000
57#define DMA_DATA_FLAG_STRIDE 0x00000001
58#define DMA_DATA_FLAG_SOURCE_NOINCREMENT 0x00000002
59#define DMA_DATA_FLAG_DEST_NOINCREMENT 0x00000004
60#define DMA_DATA_FLAG_SOURCE_DREQ 0x00000008
61#define DMA_DATA_FLAG_DEST_DREQ 0x00000010
62#define DMA_DATA_FLAG_SOURCE_WIDE 0x00000020
63#define DMA_DATA_FLAG_DEST_WIDE 0x00000040
64#define DMA_DATA_FLAG_NOREAD 0x00000080
65#define DMA_DATA_FLAG_NOWRITE 0x00000100
66#define DMA_DATA_FLAG_NOCLEAN 0x00000200
67#define DMA_DATA_FLAG_NOINVALIDATE 0x00000400
68#define DMA_DATA_FLAG_BULK 0x00000800
69#define DMA_DATA_FLAG_LITE 0x00001000
70#define DMA_DATA_FLAG_40BIT 0x00002000
73#define PAGE_TABLE_FLAG_NONE 0x00000000
75#define PAGE_TABLE_FLAG_NORMAL 0x00000002
76#define PAGE_TABLE_FLAG_DEVICE 0x00000004
77#define PAGE_TABLE_FLAG_ORDERED 0x00000008
78#define PAGE_TABLE_FLAG_SHARED 0x00000010
79#define PAGE_TABLE_FLAG_CACHEABLE 0x00000020
80#define PAGE_TABLE_FLAG_READONLY 0x00000040
81#define PAGE_TABLE_FLAG_READWRITE 0x00000080
82#define PAGE_TABLE_FLAG_EXECUTABLE 0x00000100
83#define PAGE_TABLE_FLAG_WRITEBACK 0x00000200
84#define PAGE_TABLE_FLAG_WRITETHROUGH 0x00000400
85#define PAGE_TABLE_FLAG_WRITEALLOCATE 0x00000800
86#if defined (__i386__) || defined (__arm__)
87#define PAGE_TABLE_FLAG_LARGEADDRESS 0x00001000
91#define INTERRUPT_FLAG_NONE 0x00000000
92#define INTERRUPT_FLAG_SHARED 0x00000001
93#define INTERRUPT_FLAG_LOCAL 0x00000002
94#define INTERRUPT_FLAG_IPI 0x00000004
95#define INTERRUPT_FLAG_FIQ 0x00000008
96#define INTERRUPT_FLAG_CHAINED 0x00000010
99#define INTERRUPT_PRIORITY_MAXIMUM 0x00
100#define INTERRUPT_PRIORITY_FIQ 0x40
101#define INTERRUPT_PRIORITY_DEFAULT 0xA0
102#define INTERRUPT_PRIORITY_MINIMUM 0xF0
105#define INTERRUPT_RETURN_NONE 0
106#define INTERRUPT_RETURN_HANDLED 1
110#define VECTOR_TABLE_ENTRY_ARM_RESET 0
111#define VECTOR_TABLE_ENTRY_ARM_UNDEFINED 1
112#define VECTOR_TABLE_ENTRY_ARM_SWI 2
113#define VECTOR_TABLE_ENTRY_ARM_PREFETCH 3
114#define VECTOR_TABLE_ENTRY_ARM_ABORT 4
115#define VECTOR_TABLE_ENTRY_ARM_RESERVED 5
116#define VECTOR_TABLE_ENTRY_ARM_IRQ 6
117#define VECTOR_TABLE_ENTRY_ARM_FIQ 7
121#define SHUTDOWN_FLAG_NONE 0x00000000
122#define SHUTDOWN_FLAG_RESTART 0x00000001
123#define SHUTDOWN_FLAG_FORCE 0x00000002
126#define SHUTDOWN_SIGNATURE 0xA73D8B0C
128#define SHUTDOWN_DEFAULT_DELAY 1000
129#define SHUTDOWN_MINIMUM_DELAY 10
131#define SHUTDOWN_DEFAULT_TIMEOUT 5000
134#define EXCEPTION_TYPE_DATA_ABORT 1
135#define EXCEPTION_TYPE_PREFETCH_ABORT 2
136#define EXCEPTION_TYPE_UNDEFINED_INSTRUCTION 3
139#define FIRMWARE_THROTTLE_NONE (0 << 0)
140#define FIRMWARE_THROTTLE_UNDER_VOLTAGE (1 << 0)
141#define FIRMWARE_THROTTLE_FREQUENCY_LIMIT (1 << 1)
142#define FIRMWARE_THROTTLE_THROTTLED (1 << 2)
143#define FIRMWARE_THROTTLE_SOFT_TEMP_LIMIT (1 << 3)
144#define FIRMWARE_THROTTLE_WAS_UNDER_VOLTAGE (1 << 16)
145#define FIRMWARE_THROTTLE_WAS_FREQUENCY_LIMIT (1 << 17)
146#define FIRMWARE_THROTTLE_WAS_THROTTLED (1 << 18)
147#define FIRMWARE_THROTTLE_WAS_SOFT_TEMP_LIMIT (1 << 19)
165 #if defined (__i386__) || defined (__arm__)
166 uint32_t sourcerange;
169 #if defined (__i386__) || defined (__arm__)
264#if defined (__i386__) || defined (__arm__)
265 uint32_t physicalrange;
517uint32_t
STDCALL mailbox_call_ex(uint32_t mailbox, uint32_t channel, uint32_t data, uint32_t *response, uint32_t timeout);
1651uint32_t
STDCALL cursor_set_info(uint32_t width, uint32_t height, uint32_t hotspotx, uint32_t hotspoty,
void *pixels, uint32_t length);
1981uint32_t
STDCALL spi_start(uint32_t mode, uint32_t clockrate, uint32_t clockphase, uint32_t clockpolarity);
1998uint32_t
STDCALL spi_read(uint16_t chipselect,
void *dest, uint32_t size, uint32_t *count);
2151uint32_t
STDCALL i2c_write_read(uint16_t address,
void *initial, uint32_t len,
void *data, uint32_t size, uint32_t *count);
2328uint32_t
STDCALL serial_open(uint32_t baudrate, uint32_t databits, uint32_t stopbits, uint32_t parity, uint32_t flowcontrol, uint32_t receivedepth, uint32_t transmitdepth);
2742#if defined (__i386__) || defined (__arm__)
2746uint32_t
STDCALL page_table_get_page_range(
size_t address);
2899int setenv(const
char *name, const
char *value,
int overwrite);
2998char *
realpath(const
char *__restrict path,
char *__restrict resolved_path);
3002int dup3(
int oldfd,
int newfd,
int flags);
3013#if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
3019void *
mmap(
void *addr,
size_t length,
int prot,
int flags,
int fd, off_t offset);
3027#ifdef _SYS_CPUSET_H_
3028int sched_setaffinity(pid_t pid,
size_t cpusetsize, cpu_set_t *mask);
3029int sched_getaffinity(pid_t pid,
size_t cpusetsize, cpu_set_t *mask);
struct _DISPLAY_SETTINGS DISPLAY_SETTINGS
Definition globaltypes.h:88
size_t HANDLE
Definition globaltypes.h:51
#define STDCALL
Definition globaltypes.h:45
HANDLE SPIN_HANDLE
Definition globaltypes.h:104
_Bool BOOL
Built in Boolean type (1 byte) (Redeclared here for flexibility).
Definition globaltypes.h:55
HANDLE THREAD_HANDLE
Definition globaltypes.h:113
wchar_t WCHAR
Standard WideChar type (2 bytes) (Redeclared here for flexibility).
Definition globaltypes.h:58
HANDLE LIST_HANDLE
Definition globaltypes.h:111
Definition platform.h:162
uint32_t flags
Flags for DMA transfer (See DMA_DATA_FLAG_* above).
Definition platform.h:173
DMA_DATA * next
Link to next DMA data block (or nil for the last block).
Definition platform.h:179
uint32_t stridelength
Length of each row during 2D stride (If supported).
Definition platform.h:175
int32_t deststride
Increment between rows for destination address during 2D stride (If supported).
Definition platform.h:177
void * dest
Dest address for DMA (May need to be allocated in accordance with DMA host configuration).
Definition platform.h:168
void * source
Source address for DMA (May need to be allocated in accordance with DMA host configuration).
Definition platform.h:164
uint32_t size
Size for DMA transfer (For 2D stride the length of a row multiplied by the count of rows).
Definition platform.h:172
int32_t sourcestride
Increment between rows for source address during 2D stride (If supported).
Definition platform.h:176
Definition platform.h:204
HANDLE handle
Handle (Number) of this Handle.
Definition platform.h:207
uint32_t hash
Hash of the Handle name (Only if named).
Definition platform.h:212
HANDLE data
Purpose specific data for the Handle (eg a file handle or a socket handle).
Definition platform.h:213
char * name
The name of the Handle (Optional).
Definition platform.h:211
handle_close_proc close
Procedure to call on final close (Optional).
Definition platform.h:214
uint32_t flags
Flags for the Handle (eg HANDLE_FLAG_NAMED).
Definition platform.h:210
uint32_t count
Reference Count of the Handle.
Definition platform.h:209
HANDLE_ENTRY * prev
Previous entry in Handle table.
Definition platform.h:218
uint32_t signature
Signature for entry validation.
Definition platform.h:206
handle_duplicate_proc duplicate
Function to call when duplicating handle (Optional).
Definition platform.h:216
handle_close_ex_proc closeex
Function to call on final close (Optional).
Definition platform.h:215
HANDLE_ENTRY * next
Next entry in Handle table.
Definition platform.h:219
uint32_t handletype
Type of this Handle (eg HANDLE_TYPE_FILE).
Definition platform.h:208
Definition platform.h:234
uint32_t cpumask
Definition platform.h:238
INTERRUPT_ENTRY * prev
Definition platform.h:245
interrupt_handler handler
Definition platform.h:240
void * parameter
Definition platform.h:243
interrupt_ex_handler handlerex
Definition platform.h:241
uint32_t flags
Definition platform.h:237
uint32_t priority
Definition platform.h:239
INTERRUPT_ENTRY * next
Definition platform.h:246
shared_interrupt_handler sharedhandler
Definition platform.h:242
uint32_t number
Definition platform.h:236
Definition platform.h:262
size_t physicaladdress
Definition platform.h:267
uint32_t flags
Definition platform.h:269
uint32_t size
Definition platform.h:268
size_t virtualaddress
Definition platform.h:263
Definition platform.h:252
void STDCALL(* handler)(SYSTEM_CALL_REQUEST *request)
Definition platform.h:255
THREAD_HANDLE STDCALL(* handlerex)(uint32_t cpuid, THREAD_HANDLE thread, SYSTEM_CALL_REQUEST *request)
Definition platform.h:256
uint32_t number
Definition platform.h:253
uint32_t cpuid
Definition platform.h:254
Definition platform.h:185
size_t param1
Definition platform.h:187
size_t param3
Definition platform.h:189
uint32_t number
Definition platform.h:186
size_t param2
Definition platform.h:188