125 lines
3.2 KiB
C
125 lines
3.2 KiB
C
#ifndef __BLOCK_H
|
|
#define __BLOCK_H
|
|
|
|
#include "types.h" // u32
|
|
|
|
|
|
/****************************************************************
|
|
* Disk command request
|
|
****************************************************************/
|
|
|
|
struct disk_op_s {
|
|
void *buf_fl;
|
|
struct drive_s *drive_fl;
|
|
u8 command;
|
|
u16 count;
|
|
union {
|
|
// Commands: READ, WRITE, VERIFY, SEEK, FORMAT
|
|
u64 lba;
|
|
// Commands: SCSI
|
|
struct {
|
|
u16 blocksize;
|
|
void *cdbcmd;
|
|
};
|
|
};
|
|
};
|
|
|
|
#define CMD_RESET 0x00
|
|
#define CMD_READ 0x02
|
|
#define CMD_WRITE 0x03
|
|
#define CMD_VERIFY 0x04
|
|
#define CMD_FORMAT 0x05
|
|
#define CMD_SEEK 0x07
|
|
#define CMD_ISREADY 0x10
|
|
#define CMD_SCSI 0x20
|
|
|
|
|
|
/****************************************************************
|
|
* Global storage
|
|
****************************************************************/
|
|
|
|
struct chs_s {
|
|
u16 head;
|
|
u16 cylinder;
|
|
u16 sector;
|
|
u16 pad;
|
|
};
|
|
|
|
struct drive_s {
|
|
u8 type; // Driver type (DTYPE_*)
|
|
u8 floppy_type; // Type of floppy (only for floppy drives).
|
|
struct chs_s lchs; // Logical CHS
|
|
u64 sectors; // Total sectors count
|
|
u32 cntl_id; // Unique id for a given driver type.
|
|
u8 removable; // Is media removable (currently unused)
|
|
|
|
// Info for EDD calls
|
|
u8 translation; // type of translation
|
|
u16 blksize; // block size
|
|
struct chs_s pchs; // Physical CHS
|
|
u32 max_segment_size; //max_segment_size
|
|
u32 max_segments; //max_segments
|
|
};
|
|
|
|
#define DISK_SECTOR_SIZE 512
|
|
#define CDROM_SECTOR_SIZE 2048
|
|
|
|
#define DTYPE_NONE 0x00
|
|
#define DTYPE_FLOPPY 0x10
|
|
#define DTYPE_ATA 0x20
|
|
#define DTYPE_ATA_ATAPI 0x21
|
|
#define DTYPE_RAMDISK 0x30
|
|
#define DTYPE_CDEMU 0x40
|
|
#define DTYPE_AHCI 0x50
|
|
#define DTYPE_AHCI_ATAPI 0x51
|
|
#define DTYPE_VIRTIO_SCSI 0x60
|
|
#define DTYPE_VIRTIO_BLK 0x61
|
|
#define DTYPE_USB 0x70
|
|
#define DTYPE_USB_32 0x71
|
|
#define DTYPE_UAS 0x72
|
|
#define DTYPE_UAS_32 0x73
|
|
#define DTYPE_LSI_SCSI 0x80
|
|
#define DTYPE_ESP_SCSI 0x81
|
|
#define DTYPE_MEGASAS 0x82
|
|
#define DTYPE_PVSCSI 0x83
|
|
#define DTYPE_MPT_SCSI 0x84
|
|
#define DTYPE_SDCARD 0x90
|
|
#define DTYPE_NVME 0x91
|
|
|
|
#define MAXDESCSIZE 80
|
|
|
|
#define TRANSLATION_NONE 0
|
|
#define TRANSLATION_LBA 1
|
|
#define TRANSLATION_LARGE 2
|
|
#define TRANSLATION_RECHS 3
|
|
#define TRANSLATION_HOST 4
|
|
|
|
#define EXTTYPE_FLOPPY 0
|
|
#define EXTTYPE_HD 1
|
|
#define EXTTYPE_CD 2
|
|
|
|
#define EXTSTART_HD 0x80
|
|
#define EXTSTART_CD 0xE0
|
|
|
|
|
|
/****************************************************************
|
|
* Function defs
|
|
****************************************************************/
|
|
|
|
// block.c
|
|
extern u8 FloppyCount, CDCount;
|
|
extern u8 *bounce_buf_fl;
|
|
struct drive_s *getDrive(u8 exttype, u8 extdriveoffset);
|
|
int getDriveId(u8 exttype, struct drive_s *drive);
|
|
void map_floppy_drive(struct drive_s *drive);
|
|
void map_hd_drive(struct drive_s *drive);
|
|
void map_cd_drive(struct drive_s *drive);
|
|
struct int13dpt_s;
|
|
int fill_edd(struct segoff_s edd, struct drive_s *drive_fl);
|
|
void block_setup(void);
|
|
int default_process_op(struct disk_op_s *op);
|
|
int process_op(struct disk_op_s *op);
|
|
int create_bounce_buf(void);
|
|
|
|
#endif // block.h
|