initial commit

This commit is contained in:
2025-03-11 05:17:34 +08:00
parent d1f60e7c82
commit 9238177ad6
27 changed files with 924 additions and 0 deletions

46
include/gpio.h Normal file
View File

@@ -0,0 +1,46 @@
#pragma once
/*
* Copyright (C) 2018 bzt (bztsrc@github)
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
#define MMIO_BASE 0x3F000000
#define GPFSEL0 ((volatile unsigned int*)(MMIO_BASE+0x00200000))
#define GPFSEL1 ((volatile unsigned int*)(MMIO_BASE+0x00200004))
#define GPFSEL2 ((volatile unsigned int*)(MMIO_BASE+0x00200008))
#define GPFSEL3 ((volatile unsigned int*)(MMIO_BASE+0x0020000C))
#define GPFSEL4 ((volatile unsigned int*)(MMIO_BASE+0x00200010))
#define GPFSEL5 ((volatile unsigned int*)(MMIO_BASE+0x00200014))
#define GPSET0 ((volatile unsigned int*)(MMIO_BASE+0x0020001C))
#define GPSET1 ((volatile unsigned int*)(MMIO_BASE+0x00200020))
#define GPCLR0 ((volatile unsigned int*)(MMIO_BASE+0x00200028))
#define GPLEV0 ((volatile unsigned int*)(MMIO_BASE+0x00200034))
#define GPLEV1 ((volatile unsigned int*)(MMIO_BASE+0x00200038))
#define GPEDS0 ((volatile unsigned int*)(MMIO_BASE+0x00200040))
#define GPEDS1 ((volatile unsigned int*)(MMIO_BASE+0x00200044))
#define GPHEN0 ((volatile unsigned int*)(MMIO_BASE+0x00200064))
#define GPHEN1 ((volatile unsigned int*)(MMIO_BASE+0x00200068))
#define GPPUD ((volatile unsigned int*)(MMIO_BASE+0x00200094))
#define GPPUDCLK0 ((volatile unsigned int*)(MMIO_BASE+0x00200098))
#define GPPUDCLK1 ((volatile unsigned int*)(MMIO_BASE+0x0020009C))

46
include/initrd.h Normal file
View File

@@ -0,0 +1,46 @@
#pragma once
#include <stddef.h>
typedef struct {
char c_magic[6];
char c_ino[8];
char c_mode[8];
char c_uid[8];
char c_gid[8];
char c_nlink[8];
char c_mtime[8];
char c_filesize[8];
char c_devmajor[8];
char c_devminor[8];
char c_rdevmajor[8];
char c_rdevminor[8];
char c_namesize[8];
char c_check[8];
}__attribute__((packed)) cpio_newc_header_t;
typedef struct file_node {
struct file_node *l, *r;
int rand;
int node_size;
int ino;
int mode;
int uid;
int gid;
int nlink;
int mtime;
int filesize;
int devmajor;
int devminor;
int rdevmajor;
int rdevminor;
int namesize;
char *filename;
byte_t *filecontent;
} file_node_t;
file_node_t *initrd_init(void);
int initrd_ls(void);
file_node_t *initrd_get(file_node_t *root, const char *filename);

7
include/kmalloc.h Normal file
View File

@@ -0,0 +1,7 @@
#pragma once
#include <stddef.h>
void *simple_alloc(size_t size);
void *kmalloc(size_t size);
void kfree(void *ptr);

48
include/mbox.h Normal file
View File

@@ -0,0 +1,48 @@
/*
* Copyright (C) 2018 bzt (bztsrc@github)
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
/* a properly aligned buffer */
extern volatile unsigned int mbox[36];
#define MBOX_REQUEST 0
/* channels */
#define MBOX_CH_POWER 0
#define MBOX_CH_FB 1
#define MBOX_CH_VUART 2
#define MBOX_CH_VCHIQ 3
#define MBOX_CH_LEDS 4
#define MBOX_CH_BTNS 5
#define MBOX_CH_TOUCH 6
#define MBOX_CH_COUNT 7
#define MBOX_CH_PROP 8
/* tags */
#define MBOX_TAG_GETSERIAL 0x10004
#define MBOX_TAG_LAST 0
#define MBOX_TAG_BOARD_REVISION 0x00010002
int mbox_call(unsigned char ch);
unsigned int get_board_revision(void);

8
include/random.h Normal file
View File

@@ -0,0 +1,8 @@
#pragma once
extern const int _random_a;
extern const int _random_c;
extern const int _random_m;
extern int seed;
int random(void);

9
include/shell.h Normal file
View File

@@ -0,0 +1,9 @@
#pragma once
void help(void);
void hello(void);
void hwinfo(void);
void reboot(void);
int // is continue
shell(void);

9
include/stddef.h Normal file
View File

@@ -0,0 +1,9 @@
#pragma once
#define true 1
#define false 0
#define ENDL "\r\n"
typedef long unsigned int size_t;
typedef unsigned char byte_t;
typedef unsigned long long int uint64_t;

7
include/string.h Normal file
View File

@@ -0,0 +1,7 @@
#pragma once
#include <stddef.h>
int strcmp(const char *lhs, const char *rhs);
void *memcpy(void *dest, const void *src, size_t count);
void *memzero(void *start, void *end);

10
include/uart.h Normal file
View File

@@ -0,0 +1,10 @@
#pragma once
#include <stddef.h>
void uart_init();
void uart_send(unsigned int c);
byte_t uart_getb();
char uart_getc();
void uart_puts(char *s);
void uart_hex(unsigned int d);