#ifndef __dpme__
#define __dpme__
#include "bitfield.h"
#define BLOCK0_SIGNATURE 0x4552
#define DPISTRLEN 32
#define DPME_SIGNATURE 0x504D
#define dpme_bzb dpme_boot_args
#define BZBMAGIC 0xABADBABE
#define FST ((u8) 0x1)
#define FSTEFS ((u8) 0x2)
#define FSTSFS ((u8) 0x3)
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
struct Block0 {
u16 sbSig;
u16 sbBlkSize;
u32 sbBlkCount;
u16 sbDevType;
u16 sbDevId;
u32 sbData;
u16 sbDrvrCount;
u16 sbMap[247];
};
typedef struct Block0 Block0;
struct DDMap {
u32 ddBlock;
u16 ddSize;
u16 ddType;
};
typedef struct DDMap DDMap;
struct dpme {
u16 dpme_signature ;
u16 dpme_reserved_1 ;
u32 dpme_map_entries ;
u32 dpme_pblock_start ;
u32 dpme_pblocks ;
char dpme_name[DPISTRLEN] ;
char dpme_type[DPISTRLEN] ;
u32 dpme_lblock_start ;
u32 dpme_lblocks ;
u32 dpme_flags;
#if 0
u32 dpme_reserved_2 : 23 ;
u32 dpme_os_specific_1 : 1 ;
u32 dpme_os_specific_2 : 1 ;
u32 dpme_os_pic_code : 1 ;
u32 dpme_writable : 1 ;
u32 dpme_readable : 1 ;
u32 dpme_bootable : 1 ;
u32 dpme_in_use : 1 ;
u32 dpme_allocated : 1 ;
u32 dpme_valid : 1 ;
#endif
u32 dpme_boot_block ;
u32 dpme_boot_bytes ;
u8 *dpme_load_addr ;
u8 *dpme_load_addr_2 ;
u8 *dpme_goto_addr ;
u8 *dpme_goto_addr_2 ;
u32 dpme_checksum ;
char dpme_process_id[16] ;
u32 dpme_boot_args[32] ;
u32 dpme_reserved_3[62] ;
};
typedef struct dpme DPME;
#define dpme_diskdriver_set(p, v) bitfield_set(&p->dpme_flags, 9, 1, v)
#define dpme_chainable_set(p, v) bitfield_set(&p->dpme_flags, 8, 1, v)
#define dpme_os_specific_1_set(p, v) bitfield_set(&p->dpme_flags, 8, 1, v)
#define dpme_os_specific_2_set(p, v) bitfield_set(&p->dpme_flags, 7, 1, v)
#define dpme_os_pic_code_set(p, v) bitfield_set(&p->dpme_flags, 6, 1, v)
#define dpme_writable_set(p, v) bitfield_set(&p->dpme_flags, 5, 1, v)
#define dpme_readable_set(p, v) bitfield_set(&p->dpme_flags, 4, 1, v)
#define dpme_bootable_set(p, v) bitfield_set(&p->dpme_flags, 3, 1, v)
#define dpme_in_use_set(p, v) bitfield_set(&p->dpme_flags, 2, 1, v)
#define dpme_allocated_set(p, v) bitfield_set(&p->dpme_flags, 1, 1, v)
#define dpme_valid_set(p, v) bitfield_set(&p->dpme_flags, 0, 1, v)
#define dpme_diskdriver_get(p) bitfield_get(p->dpme_flags, 9, 1)
#define dpme_chainable_get(p) bitfield_get(p->dpme_flags, 8, 1)
#define dpme_os_specific_1_get(p) bitfield_get(p->dpme_flags, 8, 1)
#define dpme_os_specific_2_get(p) bitfield_get(p->dpme_flags, 7, 1)
#define dpme_os_pic_code_get(p) bitfield_get(p->dpme_flags, 6, 1)
#define dpme_writable_get(p) bitfield_get(p->dpme_flags, 5, 1)
#define dpme_readable_get(p) bitfield_get(p->dpme_flags, 4, 1)
#define dpme_bootable_get(p) bitfield_get(p->dpme_flags, 3, 1)
#define dpme_in_use_get(p) bitfield_get(p->dpme_flags, 2, 1)
#define dpme_allocated_get(p) bitfield_get(p->dpme_flags, 1, 1)
#define dpme_valid_get(p) bitfield_get(p->dpme_flags, 0, 1)
struct abm
{
u32 abm_size;
u32 abm_ents;
u32 abm_start;
};
typedef struct abm ABM;
struct bzb
{
u32 bzb_magic;
u8 bzb_cluster;
u8 bzb_type;
u16 bzb_inode;
u32 bzb_flags;
#if 0
u16 bzb_root:1,
bzb_usr:1,
bzb_crit:1,
bzb_rsrvd:8,
bzb_slice:5;
u16 bzb_filler;
#endif
u32 bzb_tmade;
u32 bzb_tmount;
u32 bzb_tumount;
ABM bzb_abm;
u32 bzb_fill2[7];
char bzb_mount_point[64];
};
typedef struct bzb BZB;
#define bzb_root_set(p, v) bitfield_set(&p->bzb_flags, 31, 1, v)
#define bzb_usr_set(p, v) bitfield_set(&p->bzb_flags, 30, 1, v)
#define bzb_crit_set(p, v) bitfield_set(&p->bzb_flags, 29, 1, v)
#define bzb_slice_set(p, v) bitfield_set(&p->bzb_flags, 20, 5, v)
#define bzb_root_get(p) bitfield_get(p->bzb_flags, 31, 1)
#define bzb_usr_get(p) bitfield_get(p->bzb_flags, 30, 1)
#define bzb_crit_get(p) bitfield_get(p->bzb_flags, 29, 1)
#define bzb_slice_get(p) bitfield_get(p->bzb_flags, 20, 5)
#endif