Squash commits for public release

This commit is contained in:
2025-02-12 09:54:05 -05:00
commit 7118adc514
1108 changed files with 80873 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
#ifndef _KERNEL_DRIVERS_STORAGE_ARM_PL181_H
#define _KERNEL_DRIVERS_STORAGE_ARM_PL181_H
#include <drivers/driver_manager.h>
#include <libkern/mask.h>
#include <libkern/types.h>
#define PL181_SECTOR_SIZE 512
enum PL181CommandMasks {
MASKDEFINE(MMC_CMD_IDX, 0, 6),
MASKDEFINE(MMC_CMD_RESP, 6, 1),
MASKDEFINE(MMC_CMD_LONG_RESP, 7, 1),
MASKDEFINE(MMC_CMD_INTERRUPT, 8, 1),
MASKDEFINE(MMC_CMD_PENDING, 9, 1),
MASKDEFINE(MMC_CMD_ENABLE, 10, 1),
};
enum PL181StatusMasks {
MASKDEFINE(MMC_STAT_CRC_FAIL, 0, 1),
MASKDEFINE(MMC_STAT_CMD_TIMEOUT, 2, 1),
MASKDEFINE(MMC_STAT_CMD_RESP_END, 6, 1),
MASKDEFINE(MMC_STAT_CMD_SENT, 7, 1),
MASKDEFINE(MMC_STAT_CMD_ACTIVE, 11, 1),
MASKDEFINE(MMC_STAT_TRANSMIT_FIFO_EMPTY, 18, 1),
MASKDEFINE(MMC_STAT_FIFO_DATA_AVAIL_TO_READ, 21, 1),
};
enum PL181Commands {
CMD_GO_IDLE_STATE = 0,
CMD_ALL_SEND_CID = 2,
CMD_SET_RELATIVE_ADDR = 3,
CMD_SELECT = 7,
CMD_SEND_CSD = 9,
CMD_SEND_CID = 10,
CMD_SET_SECTOR_SIZE = 16,
CMD_READ_SINGLE_BLOCK = 17,
CMD_WRITE_SINGLE_BLOCK = 24,
CMD_SD_SEND_OP_COND = 41,
CMD_APP_CMD = 55,
};
struct pl181_registers {
uint32_t power;
uint32_t clock;
uint32_t arg;
uint32_t cmd;
uint32_t resp_cmd;
uint32_t response[4];
uint32_t data_timer;
uint32_t data_length;
uint32_t data_control;
uint32_t data_count;
uint32_t status;
uint32_t clear;
uint32_t interrupt_mask[2];
uint32_t interrupt_select;
uint32_t fifo_count;
char res[0x34];
uint32_t fifo_data[16];
// TO BE CONTINUED
};
typedef struct pl181_registers pl181_registers_t;
struct sd_card {
uint32_t rca;
uint32_t ishc;
uint32_t capacity;
};
typedef struct sd_card sd_card_t;
void pl181_install();
#endif //_KERNEL_DRIVERS_STORAGE_ARM_PL181_H

View File

@@ -0,0 +1,9 @@
#ifndef _KERNEL_DRIVERS_STORAGE_RAMDISK_H
#define _KERNEL_DRIVERS_STORAGE_RAMDISK_H
#include <drivers/driver_manager.h>
#include <libkern/types.h>
void ramdisk_install();
#endif //_KERNEL_DRIVERS_STORAGE_RAMDISK_H

View File

@@ -0,0 +1,58 @@
#ifndef _KERNEL_DRIVERS_STORAGE_VIRTIO_BLOCK_H
#define _KERNEL_DRIVERS_STORAGE_VIRTIO_BLOCK_H
#include <drivers/driver_manager.h>
#include <drivers/virtio/virtio.h>
#include <libkern/types.h>
#include <mem/kmalloc.h>
#define VIRTIO_BLK_T_IN (0)
#define VIRTIO_BLK_T_OUT (1)
#define VIRTIO_BLK_T_FLUSH (4)
#define VIRTIO_BLK_T_DISCARD (11)
#define VIRTIO_BLK_T_WRITE_ZEROES (13)
// Status values
#define VIRTIO_BLK_S_OK (0)
#define VIRTIO_BLK_S_IOERR (1)
#define VIRTIO_BLK_S_UNSUPP (2)
// Feature bits
#define VIRTIO_BLK_F_SIZE_MAX (1)
#define VIRTIO_BLK_F_SEG_MAX (2)
#define VIRTIO_BLK_F_GEOMETRY (4)
#define VIRTIO_BLK_F_RO (5)
#define VIRTIO_BLK_F_BLK_SIZE (6)
#define VIRTIO_BLK_F_FLUSH (9)
#define VIRTIO_BLK_F_TOPOLOGY (10)
#define VIRTIO_BLK_F_CONFIG_WCE (11)
#define VIRTIO_BLK_F_DISCARD (13)
#define VIRTIO_BLK_F_WRITE_ZEROES (14)
struct block_dev {
virtio_queue_desc_t queue_desc;
void* ptr;
uint32_t idx;
uint32_t ack_used_idx;
virtio_buffer_desc_t buffer_desc;
};
typedef struct block_dev block_dev_t;
typedef struct {
uint32_t blktype;
uint32_t reserved;
uint64_t sector;
} block_header_t;
typedef struct {
uint8_t status;
} block_status_t;
typedef struct {
block_header_t header;
block_status_t status;
uint16_t head;
uint16_t watcher;
} block_request_t;
#endif //_KERNEL_DRIVERS_STORAGE_VIRTIO_BLOCK_H

View File

@@ -0,0 +1,40 @@
#ifndef _KERNEL_DRIVERS_STORAGE_X86_ATA_H
#define _KERNEL_DRIVERS_STORAGE_X86_ATA_H
#include <drivers/driver_manager.h>
#include <libkern/types.h>
#include <mem/kmalloc.h>
#include <platform/x86/port.h>
typedef struct { // LBA28 | LBA48
uint32_t data; // 16bit | 16 bits
uint32_t error; // 8 bit | 16 bits
uint32_t sector_count; // 8 bit | 16 bits
uint32_t lba_lo; // 8 bit | 16 bits
uint32_t lba_mid; // 8 bit | 16 bits
uint32_t lba_hi; // 8 bit | 16 bits
uint32_t device; // 8 bit
uint32_t command; // 8 bit
uint32_t control;
} ata_ports_t;
typedef struct {
ata_ports_t port;
bool is_master;
uint16_t cylindres;
uint16_t heads;
uint16_t sectors;
bool dma;
bool lba;
uint32_t capacity; // in sectors
} ata_t;
extern ata_t _ata_drives[MAX_DEVICES_COUNT];
int ata_init_with_dev(device_t* dev);
void ata_install();
void ata_init(ata_t* ata, uint32_t port, bool is_master);
bool ata_indentify(ata_t* ata);
#endif //_KERNEL_DRIVERS_STORAGE_X86_ATA_H