X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fdisk.h;h=dd7c46aec3c19913d6cf257d62b5a2f706580cd3;hb=efb4523d4b65999970fd3d07ac5db36b46a27daa;hp=96bc509dd52c97b4dc8b287484f5afebe7bf98cc;hpb=51cfbe76701c382a33070c490eedd00d3db8c0ee;p=seabios.git diff --git a/src/disk.h b/src/disk.h index 96bc509..dd7c46a 100644 --- a/src/disk.h +++ b/src/disk.h @@ -8,6 +8,7 @@ #include "types.h" // u8 #include "config.h" // CONFIG_* +#include "farptr.h" // struct segoff_s #define DISK_RET_SUCCESS 0x00 #define DISK_RET_EPARAM 0x01 @@ -35,8 +36,7 @@ struct int13ext_s { u8 size; u8 reserved; u16 count; - u16 offset; - u16 segment; + struct segoff_s data; u64 lba; } PACKED; @@ -63,9 +63,18 @@ struct int13dpt_s { u8 host_bus[4]; u8 iface_type[8]; u64 iface_path; - u64 device_path; - u8 reserved3; - u8 checksum; + union { + struct { + u64 device_path; + u8 reserved3; + u8 checksum; + } phoenix; + struct { + u64 device_path[2]; + u8 reserved3; + u8 checksum; + } t13; + }; } PACKED; #define GET_INT13DPT(regs,var) \ @@ -101,6 +110,10 @@ struct bregs; void __disk_ret(struct bregs *regs, u32 linecode, const char *fname); #define disk_ret(regs, code) \ __disk_ret((regs), (code) | (__LINE__ << 8), __func__) +void __disk_ret_unimplemented(struct bregs *regs, u32 linecode + , const char *fname); +#define disk_ret_unimplemented(regs, code) \ + __disk_ret_unimplemented((regs), (code) | (__LINE__ << 8), __func__) /**************************************************************** @@ -144,8 +157,8 @@ struct mbr_s { struct disk_op_s { u64 lba; void *buf_fl; + struct drive_s *drive_g; u16 count; - u8 driveid; u8 command; }; @@ -169,43 +182,39 @@ struct chs_s { }; struct drive_s { - u8 type; // Detected type of drive (ata/atapi/none) - u8 removable; // Removable device flag - u16 blksize; // block size - int cntl_id; - u8 floppy_type; // Type of floppy (only for floppy drives). - - char model[41]; + 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 +}; - u8 translation; // type of translation - struct chs_s lchs; // Logical CHS - struct chs_s pchs; // Physical CHS +#define DISK_SECTOR_SIZE 512 +#define CDROM_SECTOR_SIZE 2048 - u64 sectors; // Total sectors count -}; +#define DTYPE_NONE 0x00 +#define DTYPE_FLOPPY 0x01 +#define DTYPE_ATA 0x02 +#define DTYPE_ATAPI 0x03 +#define DTYPE_RAMDISK 0x04 +#define DTYPE_CDEMU 0x05 +#define DTYPE_USB 0x06 +#define DTYPE_VIRTIO_BLK 0x07 +#define DTYPE_AHCI 0x08 -#define DTYPE_NONE 0x00 -#define DTYPE_FLOPPY 0x01 -#define DTYPE_ATA 0x02 -#define DTYPE_ATAPI 0x03 -#define DTYPE_RAMDISK 0x04 +#define MAXDESCSIZE 80 #define TRANSLATION_NONE 0 #define TRANSLATION_LBA 1 #define TRANSLATION_LARGE 2 #define TRANSLATION_RECHS 3 -struct drives_s { - // info on each internally handled drive - struct drive_s drives[CONFIG_MAX_DRIVES]; - u8 drivecount; - // - // map between bios floppy/hd/cd id and driveid index into drives[] - u8 floppycount; - u8 cdcount; - u8 idmap[3][CONFIG_MAX_EXTDRIVE]; -}; - #define EXTTYPE_FLOPPY 0 #define EXTTYPE_HD 1 #define EXTTYPE_CD 2 @@ -219,35 +228,34 @@ struct drives_s { ****************************************************************/ // block.c -extern struct drives_s Drives; -void setup_translation(int driveid); -void map_floppy_drive(int driveid); -void map_hd_drive(int driveid); -void map_cd_drive(int driveid); +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_g); +void map_floppy_drive(struct drive_s *drive_g); +void map_hd_drive(struct drive_s *drive_g); +void map_cd_drive(struct drive_s *drive_g); +int process_op(struct disk_op_s *op); int send_disk_op(struct disk_op_s *op); -void drive_setup(); +int bounce_buf_init(void); // floppy.c extern struct floppy_ext_dbt_s diskette_param_table2; -void floppy_setup(); -void addFloppy(int floppyid, int ftype, int driver); +void floppy_setup(void); +struct drive_s *init_floppy(int floppyid, int ftype); int find_floppy_type(u32 size); int process_floppy_op(struct disk_op_s *op); -void floppy_tick(); - -// disk.c -void disk_13(struct bregs *regs, u8 driveid); -void disk_13XX(struct bregs *regs, u8 driveid); -void cdemu_access(struct bregs *regs, u8 driveid, u16 command); +void floppy_tick(void); // cdrom.c -void cdrom_13(struct bregs *regs, u8 driveid); -void cdemu_13(struct bregs *regs); +extern struct drive_s *cdemu_drive_gf; +int process_cdemu_op(struct disk_op_s *op); +void cdemu_setup(void); void cdemu_134b(struct bregs *regs); -int cdrom_boot(int cdid); +int cdrom_boot(struct drive_s *drive_g); // ramdisk.c -void ramdisk_setup(); +void ramdisk_setup(void); int process_ramdisk_op(struct disk_op_s *op); #endif // disk.h