/* * Copyright (c) 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)mscp.h 1.2 (2.11BSD) 1998/1/28 */ /* * Definitions for the Mass Storage Control Protocol * * Unused mscp definitions are commented out because of the * limited symbol table size in the V7 C compiler, * `too many defines'. * Lots of strangeness in mscp packet definitions, i.e., * dealing with longs as hi & lo words. This is due to the * way the PDP-11 stores a long, i.e., high order word * in low memory word and low order word in high memory word. * The UDA does not like that at all ! * * Fred Canter 10/22/83 */ #include "pdp/mscp_common.h" /* * An MSCP packet */ struct mscp { struct mscp_header m_header; /* device specific header */ u_short m_cmdref; /* command reference number */ u_short m_elref; /* plus error log reference number */ u_short m_unit; /* unit number */ u_short m_xxx1; /* unused */ u_char m_opcode; /* opcode */ u_char m_flags; /* end message flags */ u_short m_modifier; /* modifiers */ union { struct { u_short Ms_bytecnt; /* byte count */ u_short Ms_zzz2; /* 64kb max on V7 */ u_short Ms_buf_l; /* buffer descriptor low word */ u_short Ms_buf_h; /* buffer descriptor hi word */ long Ms_xx2[2]; /* unused */ u_short Ms_lbn_l; /* logical block number low word */ u_short Ms_lbn_h; /* logical bhock number hi word */ long Ms_xx4; /* unused */ long *Ms_dscptr; /* pointer to descriptor (software) */ long Ms_sftwds[4]; /* software words, padding */ } m_generic; struct { u_short Ms_version; /* MSCP version */ u_short Ms_cntflgs; /* controller flags */ u_short Ms_hsttmo; /* host timeout */ u_short Ms_usefrac; /* use fraction */ long Ms_time; /* time and date */ } m_setcntchar; struct { u_short Ms_multunt; /* multi-unit code */ u_short Ms_unitflgs; /* unit flags */ long Ms_hostid; /* host identifier */ quad Ms_unitid; /* unit identifier */ long Ms_mediaid; /* media type identifier */ u_short Ms_shdwunt; /* shadow unit */ u_short Ms_shdwsts; /* shadow status */ u_short Ms_track; /* track size */ u_short Ms_group; /* group size */ u_short Ms_cylinder; /* cylinder size */ u_short Ms_xx3; /* reserved */ u_short Ms_rctsize; /* RCT table size */ char Ms_rbns; /* RBNs / track */ char Ms_rctcpys; /* RCT copies */ } m_getunitsts; } m_un; int m_msgpad[3]; /* pad msg length to 64 bytes */ /* required by UQ bus port spec */ }; /* * generic packet */ #define m_zzz2 m_un.m_generic.Ms_zzz2 #define m_bytecnt m_un.m_generic.Ms_bytecnt #define m_buf_l m_un.m_generic.Ms_buf_l #define m_buf_h m_un.m_generic.Ms_buf_h #define m_lbn_l m_un.m_generic.Ms_lbn_l #define m_lbn_h m_un.m_generic.Ms_lbn_h #define m_dscptr m_un.m_generic.Ms_dscptr #define m_sftwds m_un.m_generic.Ms_sftwds #define m_status m_modifier /* * Abort / Get Command Status packet */ #define m_outref m_bytecnt /* * Online / Set Unit Characteristics packet */ #define m_elgfll m_lbn_l #define m_elgflh m_lbn_h #define m_copyspd m_shdwsts /* * Replace packet */ #define m_rbn m_bytecnt /* * Set Controller Characteristics packet */ #define m_version m_un.m_setcntchar.Ms_version #define m_cntflgs m_un.m_setcntchar.Ms_cntflgs #define m_hsttmo m_un.m_setcntchar.Ms_hsttmo #define m_usefrac m_un.m_setcntchar.Ms_usefrac #define m_time m_un.m_setcntchar.Ms_time /* * Get Unit Status end packet */ #define m_multunt m_un.m_getunitsts.Ms_multunt #define m_unitflgs m_un.m_getunitsts.Ms_unitflgs #define m_hostid m_un.m_getunitsts.Ms_hostid #define m_unitid m_un.m_getunitsts.Ms_unitid #define m_mediaid m_un.m_getunitsts.Ms_mediaid #define m_shdwunt m_un.m_getunitsts.Ms_shdwunt #define m_shdwsts m_un.m_getunitsts.Ms_shdwsts #define m_track m_un.m_getunitsts.Ms_track #define m_group m_un.m_getunitsts.Ms_group #define m_cylinder m_un.m_getunitsts.Ms_cylinder #define m_rctsize m_un.m_getunitsts.Ms_rctsize #define m_rbns m_un.m_getunitsts.Ms_rbns #define m_rctcpys m_un.m_getunitsts.Ms_rctcpys /* * Online / Set Unit Characteristics end packet */ #define m_uslow m_un.m_getunitsts.Ms_track #define m_ushigh m_un.m_getunitsts.Ms_group #define m_volser m_sftwds[0] /* * Set Controller Characteristics end packet */ #define m_cnttmo m_hsttmo #define m_cntcmdl m_usefrac #define m_cntid m_unitid /* * MSCP Error Log packet * * NOTE: MSCP packet must be padded to this size. */ struct mslg { struct mscp_header me_header; /* device specific header */ int me_cmdref; /* command reference number */ int me_elref; /* error log reference number */ short me_unit; /* unit number */ short me_seqnum; /* sequence number */ u_char me_format; /* format */ u_char me_flags; /* error log message flags */ short me_event; /* event code */ quad me_cntid; /* controller id */ u_char me_cntsvr; /* controller software version */ u_char me_cnthvr; /* controller hardware version */ short me_multunt; /* multi-unit code */ quad me_unitid; /* unit id */ u_char me_unitsvr; /* unit software version */ u_char me_unithvr; /* unit hardware version */ short me_group; /* group; retry + level */ int me_volser[2]; /* volume serial number */ int me_hdr[2]; /* header */ char me_sdistat[12]; /* SDI status information */ }; #define me_busaddr me_unitid #define me_sdecyl me_group