diff options
| author | Javier <dev.git@javispedro.com> | 2026-10-26 00:50:06 +0100 |
|---|---|---|
| committer | Javier <dev.git@javispedro.com> | 2026-10-26 00:50:06 +0100 |
| commit | 6b8a368c51082fdd010ef5e1b0be4eb9b5059d1a (patch) | |
| tree | e274d41a8dd5e912e20617a937a1fda5af91f8de /w9x/dumpdcb.h | |
| parent | 9b1cf601360fb194047e6dcc2af75c2f38c611ec (diff) | |
| download | chu-6b8a368c51082fdd010ef5e1b0be4eb9b5059d1a.tar.gz chu-6b8a368c51082fdd010ef5e1b0be4eb9b5059d1a.zip | |
refactor common parts into inc/ch375.h and add win9x, linux drivers
Diffstat (limited to 'w9x/dumpdcb.h')
| -rw-r--r-- | w9x/dumpdcb.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/w9x/dumpdcb.h b/w9x/dumpdcb.h new file mode 100644 index 0000000..74679c0 --- /dev/null +++ b/w9x/dumpdcb.h @@ -0,0 +1,110 @@ +/* Debugging routines to dump the DCB structure and flags to dlog. */ + +#ifndef DUMPDCB_H +#define DUMPDCB_H + +static void print_dev_flags(uint32_t bitset) { + if (bitset & DCB_DEV_SPINDOWN_SUPPORTED) dprintf(" DCB_DEV_SPINDOWN_SUPPORTED"); + if (bitset & DCB_DEV_SPUN_DOWN) dprintf(" DCB_DEV_SPUN_DOWN"); + if (bitset & DCB_DEV_IO_ACTIVE) dprintf(" DCB_DEV_IO_ACTIVE"); + if (bitset & DCB_DEV_INT13_CONFIGURED) dprintf(" DCB_DEV_INT13_CONFIGURED"); + if (bitset & DCB_DEV_NO_ASPICAM) dprintf(" DCB_DEV_NO_ASPICAM"); + if (bitset & DCB_DEV_REMOVAL_PENDING) dprintf(" DCB_DEV_REMOVAL_PENDING"); + if (bitset & DCB_DEV_RMM_INT13) dprintf(" DCB_DEV_RMM_INT13"); + if (bitset & DCB_DEV_TSD_PROCESSED) dprintf(" DCB_DEV_TSD_PROCESSED"); + if (bitset & DCB_DEV_SINGLE_FLOPPY) dprintf(" DCB_DEV_SINGLE_FLOPPY"); + if (bitset & DCB_DEV_REAL_MODE) dprintf(" DCB_DEV_REAL_MODE"); + if (bitset & DCB_DEV_QUE_DESCEND) dprintf(" DCB_DEV_QUE_DESCEND"); + if (bitset & DCB_DEV_MEDIA_CHANGED) dprintf(" DCB_DEV_MEDIA_CHANGED"); + if (bitset & DCB_DEV_INVALID_GEOM) dprintf(" DCB_DEV_INVALID_GEOM"); + if (bitset & DCB_DEV_INHIBIT_SW_TIMED_SUPPORT) dprintf(" DCB_DEV_INHIBIT_SW_TIMED_SUPPORT"); + if (bitset & DCB_DEV_ASYNC_MED_CHG_SUPPORT) dprintf(" DCB_DEV_ASYNC_MED_CHG_SUPPORT"); + if (bitset & DCB_DEV_SYNC_MED_CHG_SUPPORT) dprintf(" DCB_DEV_SYNC_MED_CHG_SUPPORT"); + if (bitset & DCB_DEV_PHYSICAL) dprintf(" DCB_DEV_PHYSICAL"); + if (bitset & DCB_DEV_LOGICAL) dprintf(" DCB_DEV_LOGICAL"); + if (bitset & DCB_DEV_RMM) dprintf(" DCB_DEV_RMM"); + if (bitset & DCB_DEV_UNCERTAIN_MEDIA) dprintf(" DCB_DEV_UNCERTAIN_MEDIA"); + if (bitset & DCB_DEV_ROM_CFG_REQ) dprintf(" DCB_DEV_ROM_CFG_REQ"); + if (bitset & DCB_DEV_MUST_CONFIGURE) dprintf(" DCB_DEV_MUST_CONFIGURE"); + if (bitset & DCB_DEV_SSTOR_VOL) dprintf(" DCB_DEV_SSTOR_VOL"); + if (bitset & DCB_DEV_PAGING_DEVICE) dprintf(" DCB_DEV_PAGING_DEVICE"); + if (bitset & DCB_CHAR_DEVICE) dprintf(" DCB_CHAR_DEVICE"); + if (bitset & DCB_DEV_I13_IN_PROGRESS) dprintf(" DCB_DEV_I13_IN_PROGRESS"); + if (bitset & DCB_DEV_CACHE) dprintf(" DCB_DEV_CACHE"); + if (bitset & DCB_DEV_SERIAL_CMD) dprintf(" DCB_DEV_SERIAL_CMD"); + if (bitset & DCB_DEV_REMOTE) dprintf(" DCB_DEV_REMOTE"); + if (bitset & DCB_DEV_REMOVABLE) dprintf(" DCB_DEV_REMOVABLE"); + if (bitset & DCB_DEV_WRITEABLE) dprintf(" DCB_DEV_WRITEABLE"); + if (bitset & DCB_DEV_INT13_DRIVE) dprintf(" DCB_DEV_INT13_DRIVE"); +} + +void print_tsd_flags(uint32_t flags) { + if (flags & DCB_TSD_INVALID_PARTITION) dprintf(" DCB_TSD_INVALID_PARTITION"); + if (flags & DCB_TSD_BAD_MBR) dprintf(" DCB_TSD_BAD_MBR"); + if (flags & DCB_TSD_USER_LETTERS_CHECKED) dprintf(" DCB_TSD_USER_LETTERS_CHECKED"); + if (flags & DCB_TSD_FIRST_USER_CHECK) dprintf(" DCB_TSD_FIRST_USER_CHECK"); + if (flags & DCB_TSD_USER_SET) dprintf(" DCB_TSD_USER_SET"); + if (flags & DCB_TSD_NO_USER_INT13) dprintf(" DCB_TSD_NO_USER_INT13"); + if (flags & DCB_TSD_PROTMODE_INT_13) dprintf(" DCB_TSD_PROTMODE_INT_13"); + if (flags & DCB_TSD_NONEXIST_PARTITION) dprintf(" DCB_TSD_NONEXIST_PARTITION"); + if (flags & DCB_TSD_MBPB_PBR) dprintf(" DCB_TSD_MBPB_PBR"); + if (flags & DCB_TSD_RBPB_INIT) dprintf(" DCB_TSD_RBPB_INIT"); + if (flags & DCB_TSD_MBPB_INIT) dprintf(" DCB_TSD_MBPB_INIT"); + if (flags & DCB_TSD_APPARENT_PBR) dprintf(" DCB_TSD_APPARENT_PBR"); + if (flags & DCB_TSD_APPARENT_ROM) dprintf(" DCB_TSD_APPARENT_ROM"); + if (flags & DCB_TSD_ACTUAL_SET) dprintf(" DCB_TSD_ACTUAL_SET"); + if (flags & DCB_TSD_ACTUAL_PRE_SET) dprintf(" DCB_TSD_ACTUAL_PRE_SET"); + if (flags & DCB_TSD_APPARENT_PRE_SET) dprintf(" DCB_TSD_APPARENT_PRE_SET"); +} + +void print_dmd_flags(uint32_t bitset) { + if (bitset & DCB_dmd_srb_cdb) dprintf(" %s", "DCB_dmd_srb_cdb"); + if (bitset & DCB_dmd_logical) dprintf(" %s", "DCB_dmd_logical"); + if (bitset & DCB_dmd_physical) dprintf(" %s", "DCB_dmd_physical"); + if (bitset & DCB_dmd_small_memory) dprintf(" %s", "DCB_dmd_small_memory"); + if (bitset & DCB_dmd_not_512) dprintf(" %s", "DCB_dmd_not_512"); + if (bitset & DCB_dmd_word_align) dprintf(" %s", "DCB_dmd_word_align"); + if (bitset & DCB_dmd_dword_align) dprintf(" %s", "DCB_dmd_dword_align"); + if (bitset & DCB_dmd_phys_sgd) dprintf(" %s", "DCB_dmd_phys_sgd"); + if (bitset & DCB_dmd_phys_sgd_ptr) dprintf(" %s", "DCB_dmd_phys_sgd_ptr"); + if (bitset & DCB_dmd_do_a_b_toggling) dprintf(" %s", "DCB_dmd_do_a_b_toggling"); + if (bitset & DCB_dmd_query_remov) dprintf(" %s", "DCB_dmd_query_remov"); + if (bitset & DCB_dmd_request_sns) dprintf(" %s", "DCB_dmd_request_sns"); + if (bitset & DCB_dmd_lock_unlock_media) dprintf(" %s", "DCB_dmd_lock_unlock_media"); + if (bitset & DCB_dmd_load_eject_media) dprintf(" %s", "DCB_dmd_load_eject_media"); + if (bitset & DCB_dmd_clear_media_chg) dprintf(" %s", "DCB_dmd_clear_media_chg"); + if (bitset & DCB_dmd_prot_mode) dprintf(" %s", "DCB_dmd_prot_mode"); + if (bitset & DCB_dmd_no_xclusive) dprintf(" %s", "DCB_dmd_no_xclusive"); + if (bitset & DCB_dmd_pageability) dprintf(" %s", "DCB_dmd_pageability"); +} + + +static void dcb_dump(const DCB *dcb) +{ +#if ENABLE_DLOG + if (dcb->DCB_cmn.DCB_device_flags & DCB_DEV_PHYSICAL) { + dprintf("DCB %p physical prod %.8s %.16s %.4s port %.8s\n", dcb, dcb->DCB_vendor_id, dcb->DCB_product_id, dcb->DCB_rev_level, dcb->DCB_port_name); + dprintf(" geom apparent blksize=%u(%u) sectors=%u c=%u h=%u s=%u\n", + dcb->DCB_bdd.DCB_apparent_blk_size, dcb->DCB_cmn.DCB_apparent_blk_shift, (uint32_t) dcb->DCB_bdd.DCB_apparent_sector_cnt, + dcb->DCB_bdd.DCB_apparent_cyl_cnt, dcb->DCB_bdd.DCB_apparent_head_cnt, dcb->DCB_bdd.DCB_apparent_spt); + dprintf(" geom actual blksize=%u sectors=%u c=%u h=%u s=%u\n", + dcb->DCB_actual_blk_size, (uint32_t) dcb->DCB_actual_sector_cnt, + dcb->DCB_actual_cyl_cnt, dcb->DCB_actual_head_cnt, dcb->DCB_actual_spt); + dprintf(" max xfer=%u sg elems=%u\n", dcb->DCB_max_xfer_len, dcb->DCB_max_sg_elements); + } else { + dprintf("DCB %p logical\n", dcb); + } + // only dump DCB_cmn fields here, since they are common to both logical/physical + dprintf(" dev flags %x :", dcb->DCB_cmn.DCB_device_flags); + print_dev_flags(dcb->DCB_cmn.DCB_device_flags); + dputc('\n'); + dprintf(" TSD flags %x :", dcb->DCB_cmn.DCB_TSD_Flags); + print_tsd_flags(dcb->DCB_cmn.DCB_TSD_Flags); + dputc('\n'); + dprintf(" DMD flags %x :", dcb->DCB_cmn.DCB_dmd_flags); + print_dmd_flags(dcb->DCB_cmn.DCB_dmd_flags); + dputc('\n'); +#endif +} + +#endif // DUMPDCB_H |
