134506Skarels /* 2*35078Sbostic * Copyright (c) 1988 Regents of the University of California. 3*35078Sbostic * All rights reserved. 4*35078Sbostic * 5*35078Sbostic * This code is derived from software contributed to Berkeley by 6*35078Sbostic * Computer Consoles Inc. 7*35078Sbostic * 8*35078Sbostic * Redistribution and use in source and binary forms are permitted 9*35078Sbostic * provided that the above copyright notice and this paragraph are 10*35078Sbostic * duplicated in all such forms and that any documentation, 11*35078Sbostic * advertising materials, and other materials related to such 12*35078Sbostic * distribution and use acknowledge that the software was developed 13*35078Sbostic * by the University of California, Berkeley. The name of the 14*35078Sbostic * University may not be used to endorse or promote products derived 15*35078Sbostic * from this software without specific prior written permission. 16*35078Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17*35078Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18*35078Sbostic * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19*35078Sbostic * 20*35078Sbostic * @(#)mpreg.h 7.2 (Berkeley) 07/15/88 2134506Skarels */ 2232632Ssam 2332632Ssam /* 2432632Ssam * MPCC Asynchronous Communications Interface. 2532632Ssam */ 2632632Ssam #define MPINTRBASE 0xa0 /* base vector for interupts */ 2732632Ssam #define MPMAGIC 1969 /* magic number for mblok */ 2832632Ssam #define MPMAXPORT 32 /* maximum number of ports on an MPCC */ 2932632Ssam 3032632Ssam /* 3132632Ssam * MPCC's are capable of supporting one of a 3232632Ssam * the protocols listed below. This driver 3332632Ssam * supports only the async terminal protocol. 3432632Ssam */ 3532632Ssam #define MPPROTO_UNUSED 0 /* port not in use */ 3632632Ssam #define MPPROTO_ASYNC 1 /* async protocol */ 3732632Ssam #define MPPROTO_X25 2 /* x25 protocol (unsupported) */ 3832632Ssam #define MPPROTO_BISYNC 3 /* bisync protocol (unsupported) */ 3932632Ssam #define MPPROTO_SNA 4 /* sna protocol (unsupported) */ 4032632Ssam 4132632Ssam #define NMPPROTO 5 /* max protocols supported by MPCC */ 4232632Ssam 4332632Ssam #define MPINSET 8 4432632Ssam #define MPOUTSET 8 4532632Ssam 4632632Ssam /* 4732632Ssam * Host Interface Structure 4832632Ssam */ 4932632Ssam struct his { 5032632Ssam u_char semaphore; 5132632Ssam #define MPSEMA_AVAILABLE 1 5232632Ssam #define MPSEMA_WORK 4 5332632Ssam u_char imok; 5432632Ssam #define MPIMOK_ALIVE 0x01 5532632Ssam #define MPIMOK_DEAD 0x80 5632632Ssam u_char brdnum; /* Virtual brd number for protocol */ 5732632Ssam u_char unused; 5832632Ssam struct { 5934506Skarels u_char inbdone[MPMAXPORT]; /* Ports w/ inbound completed */ 6034506Skarels u_char outbdone[MPMAXPORT]; /* Ports w/outbound available */ 6132632Ssam u_int fill[2]; 6232632Ssam } proto[NMPPROTO]; 6332632Ssam }; 6432632Ssam 6534506Skarels #define MPPORT_EOL 0xff /* end of port list */ 6632632Ssam 6732632Ssam /* 6832632Ssam * Async host transmit list structure. 6932632Ssam */ 7032632Ssam #define MPXMIT 4 /* # of transmit ptrs/MP_WRITE event */ 7132632Ssam 7232632Ssam struct hxmtl { 7332632Ssam caddr_t dblock[MPXMIT]; /* ptrs to data blocks */ 7432632Ssam u_short size[MPXMIT]; /* size of each block */ 7532632Ssam }; 7632632Ssam 7732632Ssam /* 7832632Ssam * MPCC asynchronous protocol events. 7932632Ssam */ 8032632Ssam struct mpevent { 8132632Ssam u_char ev_status; /* Go Status */ 8232632Ssam u_char ev_cmd; /* Optional Op-code */ 8332632Ssam u_short ev_opts; /* Optional flags */ 8432632Ssam u_short ev_error; /* error status returned */ 8532632Ssam u_short ev_flags; /* optional event flags field */ 8632632Ssam caddr_t ev_params; /* pointer to event parameters */ 8732632Ssam union { 8832632Ssam struct hxmtl *hxl; /* pointer to host xmit list */ 8932632Ssam u_char *rcvblk; /* pointer to receive block */ 9032632Ssam } ev_un; 9132632Ssam u_short ev_count; /* # ptrs in xmit list/# receive chars */ 9232632Ssam u_short ev_unused; /* round to longword */ 9332632Ssam u_int ev_unused2; /* round to size of BSC struct. GROT!! */ 9432632Ssam }; 9532632Ssam 9632632Ssam /* defines for ev_status */ 9732632Ssam #define EVSTATUS_FREE 0 9832632Ssam #define EVSTATUS_GO 1 9932632Ssam #define EVSTATUS_BUSY 2 10032632Ssam #define EVSTATUS_DONE 4 10132632Ssam 10232632Ssam /* defines for ev_cmd */ 10332632Ssam #define EVCMD_OPEN 1 10432632Ssam #define EVCMD_CLOSE 2 10532632Ssam #define EVCMD_RESET 3 10632632Ssam #define EVCMD_IOCTL 4 10732632Ssam #define EVCMD_WRITE 5 10832632Ssam #define EVCMD_READ 6 10932632Ssam #define EVCMD_STATUS 7 11032632Ssam #define EVCMD_EVENT 8 11132632Ssam 11232632Ssam /* 11332632Ssam * Host-MPCC interface block. 11432632Ssam */ 11532632Ssam struct mblok { 11632632Ssam u_char mb_status; /* mpcc status */ 11732632Ssam u_char mb_ivec; /* host interrupt vector */ 11832632Ssam u_short mb_magic; 11932632Ssam u_char mb_diagswitch[2]; /* run diagnostics/application */ 12032632Ssam u_char mb_softerr; /* soft error code */ 12132632Ssam u_char mb_harderr; /* hard error code */ 12232632Ssam struct mpdl { /* download/config area */ 12332632Ssam u_char mpdl_status; /* control/status */ 12432632Ssam u_char mpdl_cmd; /* request type */ 12532632Ssam u_short mpdl_count; /* size of parameter block */ 12632632Ssam caddr_t mpdl_data; /* command parameters */ 12732632Ssam } mb_dl; 12832632Ssam u_char mb_hiport, mb_loport; /* high-low mpcc port numbers */ 12932632Ssam u_char mb_unit; /* mpcc unit number */ 13032632Ssam u_char mb_hndshk; /* handshaking timer */ 13132632Ssam caddr_t mb_imokclk; /* handshaking clock */ 13232632Ssam u_char mb_nointcnt; /* no interrupt from handshake */ 13332632Ssam u_char mb_mpintcnt; /* # outstanding interupts to MPCC */ 13432632Ssam short mb_unused; 13532632Ssam caddr_t mb_mpintclk; /* MPCC interrupt clock */ 13632632Ssam struct his mb_hostint; /* To Talk with Host */ 13732632Ssam u_char mb_proto[MPMAXPORT]; /* per-port protocols */ 13832632Ssam u_char mb_intr[MPMAXPORT]; /* per-port host->mpcc int flags */ 13932632Ssam struct mpport { /* per-port structure */ 14032632Ssam u_short mp_proto; /* protocol of port */ 14132632Ssam u_char mp_on; /* Next available entry on Host */ 14232632Ssam u_char mp_off; /* Next expected 'DONE' entry on Host */ 14332632Ssam struct mpevent mp_recvq[MPINSET]; /* queue of events to host */ 14432632Ssam struct mpevent mp_sendq[MPOUTSET];/* queue of events to mpcc */ 14532632Ssam u_char mp_nextrcv; /* next expected 'DONE' entry on Host */ 14632632Ssam u_char mp_flags; /* host flags */ 14732632Ssam short mp_unused; 14832632Ssam caddr_t mp_data; /* pointer to data for port */ 14932632Ssam } mb_port[MPMAXPORT]; 15032632Ssam }; 15132632Ssam 15232632Ssam /* status defines for mblok.status */ 15332632Ssam #define MP_DLPEND 1 15432632Ssam #define MP_DLOPEN 2 15532632Ssam #define MP_DLDONE 3 15632632Ssam #define MP_OPCLOSE 4 15732632Ssam #define MP_OPOPEN 5 15832632Ssam #define MP_DLTIME 6 15932632Ssam #define MP_DLERROR (-1) 16032632Ssam 16132632Ssam /* hard error status values loaded into mblock.herr */ 16232632Ssam #define NOHERR 0 /* no error */ 16332632Ssam #define MPBUSERR 1 /* bus error */ 16432632Ssam #define ADDRERR 2 /* address error */ 16532632Ssam #define UNDECC 3 /* undefined ecc interrupt */ 16632632Ssam #define UNDINT 4 /* undefined interrupt */ 16732632Ssam #define PWRFL 5 /* power fail occurred */ 16832632Ssam #define NOXENTRY 6 /* xdone was enterred w/o xmit entry on queue */ 16932632Ssam #define TWOFTMRS 7 /* tried to start two fast timers on one port */ 17032632Ssam #define INTQFULL 8 /* interupt queue full */ 17132632Ssam #define INTQERR 9 /* interupt queue ack error */ 17232632Ssam #define CBPERR 10 /* uncorrectable DMA parity error */ 17332632Ssam #define ACPDEAD 11 /* acap has died */ 17432632Ssam /* additional panic codes not listed */ 17532632Ssam 17632632Ssam /* soft error status values loaded into mblock.serr */ 17732632Ssam #define NOSERR 0 /* no error */ 17832632Ssam #define DMAPERR 1 /* dma parity error */ 17932632Ssam #define ECCERR 2 /* local memory ecc error */ 18032632Ssam 18132632Ssam /* Defines for flags */ 18232632Ssam #define MP_PROGRESS 1 /* Open or Close is in progress */ 18332632Ssam #define MP_PORTUP 2 /* link is up for port */ 18432632Ssam #define MP_REMBSY 4 /* remote station busy */ 18532632Ssam 18632632Ssam /* 18732632Ssam * Asynchronous Terminal Protocol Definitions. 18832632Ssam */ 18932632Ssam #define A_RCVTIM 2 /* default max tix for receive event (~20ms) */ 19032632Ssam #define ACPTMR 300 /* approx. 5 secs to wait for acap */ 19132632Ssam #define A_MAXEVTP 3 /* maximum # of L1 or Host Events to */ 19232632Ssam /* process per port at one time */ 19332632Ssam #define A_MAXRCV 128 /* max # of chars in rcv event - enough */ 19432632Ssam /* to hold 20ms of chars at 19.2KB */ 19532632Ssam #define A_NUMRCV 32 /* number of rcv buffers per port */ 19632632Ssam #define A_NUMXMT 2 /* max number of concurrent xmits/port */ 19732632Ssam #define A_NUMEVT 32 /* number of evt bufs for status evts */ 19832632Ssam /* and L2 to L1 transmit evts */ 19932632Ssam #define WR5 5 /* SCC Write Reg 5 */ 20032632Ssam #define TXENBL 0x08 /* mask to enable transmitter in WR 5 */ 20132632Ssam #define RTSON 0x02 /* mask to turn on RTS in wreg 5 */ 20232632Ssam #define CHR5MSK 0x1F /* mask for 5-bit transmit data */ 20332632Ssam 20432632Ssam /* 20532632Ssam * macro to adjust a circular buffer ptr 20632632Ssam * x = pointer or index 20732632Ssam * sz = size of circular buffer 20832632Ssam */ 20932632Ssam #define adjptr(x,sz) ((x) = ((++(x) == (sz)) ? 0 : (x))) 21032632Ssam #define adjptrbk(x,sz) ((x) = ((x) == 0) ? (sz) : --(x)) 21132632Ssam 21232632Ssam /* 21332632Ssam * Events from ASYNC Level 1 to Level 2 21432632Ssam */ 21532632Ssam #define RCVDTA 10 /* normal receive data available */ 21632632Ssam #define PARERR 11 /* receive data with parity error */ 21732632Ssam #define OVRNERR 12 /* receive data with overrun error */ 21832632Ssam #define OVFERR 13 /* receive data with overflow error */ 21932632Ssam #define FRAMERR 14 /* receive data with framing error */ 22032632Ssam #define ACKXMT 15 /* successful completion of transmit */ 22132632Ssam #define NORBUF 16 /* No Receive Buffers available */ 22232632Ssam #define NOEBUF 17 /* No Event Buffers available */ 22332632Ssam #define BRKASRT 18 /* Break condition detected */ 22432632Ssam 22532632Ssam /* defines for error conditions */ 22632632Ssam #define A_OK 0 /* No Errors */ 22732632Ssam #define A_INVEVT 1 /* Invalid Event Error */ 22832632Ssam #define A_IOCERR 2 /* Error while configuring port */ 22932632Ssam #define A_SIZERR 3 /* Error in count of data chars to xmt */ 23032632Ssam #define A_NXBERR 4 /* Transmit Incomplete due to lack of bufs */ 23132632Ssam 23232632Ssam /* 23332632Ssam * Modem control signal control structure. 23432632Ssam */ 23532632Ssam struct mdmctl { 23632632Ssam u_char mc_rngdsr; /* ring or dsr */ 23732632Ssam u_char mc_rts; /* request to send */ 23832632Ssam u_char mc_rate; 23932632Ssam u_char mc_dcd; /* data carrier detect */ 24032632Ssam u_char mc_sectx; /* secondary transmit */ 24132632Ssam u_char mc_cts; /* clear to send */ 24232632Ssam u_char mc_secrx; /* secondary receive */ 24332632Ssam u_char mc_dtr; /* data terminal ready */ 24432632Ssam }; 24532632Ssam 24632632Ssam /* defines for modem control lines */ 24732632Ssam #define ASSERT 1 /* line asserted */ 24832632Ssam #define DROP 2 /* line dropped */ 24932632Ssam #define AUTO 3 /* auto mode enabled, rts only */ 25032632Ssam 25132632Ssam /* 25232632Ssam * Async parameter structure. 25332632Ssam */ 25432632Ssam struct asyncparam { 25532632Ssam u_char ap_xon, ap_xoff; /* xon-xoff characters */ 25632632Ssam u_char ap_xena; /* xon/xoff enabled */ 25732632Ssam u_char ap_xany; /* any received char enables xmitter */ 25832632Ssam struct mdmctl ap_modem; /* port modem control lines */ 25932632Ssam struct mdmctl ap_intena; /* modem signals which generate */ 26032632Ssam /* status change events */ 26132632Ssam u_char ap_data; /* number of data bits */ 26232632Ssam u_char ap_stop; /* number of stop bits */ 26332632Ssam u_char ap_baud; /* baud rate */ 26432632Ssam u_char ap_parity; /* even/odd/no parity */ 26532632Ssam u_char ap_loop; /* enable for local loopback */ 26632632Ssam u_char ap_rtimer; /* receive timer value (msec) */ 26732632Ssam short ap_fill; /* round to longword */ 26832632Ssam }; 26932632Ssam 27032632Ssam /* enable/disable signal codes */ 27132632Ssam #define MPA_ENA 1 /* condition enabled */ 27232632Ssam #define MPA_DIS 2 /* condition disabled */ 27332632Ssam 27432632Ssam /* defines for ap_data */ 27532632Ssam #define MPCHAR_5 0 /* 5 bits per character */ 27632632Ssam #define MPCHAR_6 2 /* 6 bits per character */ 27732632Ssam #define MPCHAR_7 1 /* 7 bits per character */ 27832632Ssam #define MPCHAR_8 3 /* 8 bits per character */ 27932632Ssam 28032632Ssam /* defines for ap_stop */ 28132632Ssam #define MPSTOP_1 1 /* 1 stop bit per character */ 28232632Ssam #define MPSTOP_1_5 2 /* 1 1/2 stop bits per character */ 28332632Ssam #define MPSTOP_2 3 /* 2 stop bits per character */ 28432632Ssam 28532632Ssam /* defines for ap_baud */ 28632632Ssam #define MODEM 0 28732632Ssam #define M0 0 /* baud rate = 0 */ 28832632Ssam #define M50 1 /* baud rate = 50 */ 28932632Ssam #define M75 2 /* baud rate = 75 */ 29032632Ssam #define M110 3 /* baud rate = 110 */ 29132632Ssam #define M134_5 4 /* baud rate = 134.5 */ 29232632Ssam #define M150 5 /* baud rate = 150 */ 29332632Ssam #define M200 6 /* baud rate = 200 */ 29432632Ssam #define M300 7 /* baud rate = 300 */ 29532632Ssam #define M600 8 /* baud rate = 600 */ 29632632Ssam #define M1200 9 /* baud rate = 1200 */ 29732632Ssam #define M1800 10 /* baud rate = 1800 */ 29832632Ssam #define M2400 11 /* baud rate = 2400 */ 29932632Ssam #define M4800 12 /* baud rate = 4800 */ 30032632Ssam #define M9600 13 /* baud rate = 9600 */ 30132632Ssam #define MEXTA 14 /* baud rate = Ext A */ 30232632Ssam #define MEXTB 15 /* baud rate = Ext B */ 30332632Ssam #define M2000 16 /* baud rate = 2000 */ 30432632Ssam #define M3600 17 /* baud rate = 3600 */ 30532632Ssam #define M7200 18 /* baud rate = 7200 */ 30632632Ssam #define M19200 19 /* baud rate = 19,200 */ 30732632Ssam #define M24000 20 /* baud rate = 24,000 */ 30832632Ssam #define M28400 21 /* baud rate = 28,400 */ 30932632Ssam #define M37800 22 /* baud rate = 37,800 */ 31032632Ssam #define M40300 23 /* baud rate = 40,300 */ 31132632Ssam #define M48000 24 /* baud rate = 48,000 */ 31232632Ssam #define M52000 25 /* baud rate = 52,000 */ 31332632Ssam #define M56800 26 /* baud rate = 56,800 */ 31432632Ssam 31532632Ssam /* defines for ap_parity */ 31632632Ssam #define MPPAR_NONE 0 /* no parity */ 31732632Ssam #define MPPAR_ODD 1 /* odd parity */ 31832632Ssam #define MPPAR_EVEN 3 /* even parity */ 31932632Ssam 32032632Ssam /* possible flags for Host MP_IOCTL Events */ 32132632Ssam #define A_CHGX 1 /* IOCTL is only chging xonxoff params */ 32232632Ssam #define A_MDMCHG 2 /* change modem control lines */ 32332632Ssam #define A_MDMGET 3 /* get current state of modem ctl lines */ 32432632Ssam #define A_CHGL1P 4 /* IOCTL is changing changing L1 params */ 32532632Ssam #define A_BRKON 5 /* set port break bit */ 32632632Ssam #define A_BRKOFF 6 /* clear port break bit */ 32732632Ssam #define A_CHGALL 7 /* IOCTL is changing xonxoff params, */ 32832632Ssam /* pcnfg struct, & modem ctl structs */ 32932632Ssam #define A_DISABX 8 /* disable port transmitter (ctl-s) */ 33032632Ssam #define A_ENABLX 9 /* enable port transmitter (ctl-q) */ 33132632Ssam 33232632Ssam /* possible flags for Host MP_WRITE Events */ 33332632Ssam #define A_FLUSH 1 /* flush any queued transmit events */ 33432632Ssam #define A_SSTOP 2 /* transmit a port stop (xoff) char */ 33532632Ssam /* before sending rest of event xmts */ 33632632Ssam #define A_SSTART 3 /* transmit a port start (xon) char */ 33732632Ssam /* before sending rest of event xmts */ 33832632Ssam 33932632Ssam /* possible flags for Outbound MP_READ Events */ 34032632Ssam #define A_XOFF 1 /* transmitter stopped from by xoff char */ 34132632Ssam 34232632Ssam /* Perpos flags for modem control fields */ 34332632Ssam #define A_RNGDSR 00001 34432632Ssam #define A_RTS 00002 34532632Ssam #define A_RATE 00004 34632632Ssam #define A_DCD 00010 34732632Ssam #define A_SECTX 00020 34832632Ssam #define A_CTS 00040 34932632Ssam #define A_SECRX 00100 35032632Ssam #define A_DTR 00200 35132632Ssam 35232632Ssam /* error messages printed at console , board & port # filled in later */ 35332632Ssam #define A_INVSTS "\n#### Invalid Status Event " 35432632Ssam #define A_INVCMD "\n#### Invalid Event From the MPCC " 35532632Ssam #define A_NORBUF "\n#### No More Available Receive Buffers " 35632632Ssam #define A_NOEBUF "\n#### No More Available Event Buffers " 35732632Ssam #define A_OVRN "\n#### Overrun Error Detected " 35832632Ssam #define A_OVRF "\n#### Overflow Error Detected " 35932632Ssam #define A_NOXBUF "\n#### No More Available Transmit Event Buffers " 36032632Ssam #define A_XSIZE "\n#### Transmit Data Block Size Exceeds Event Data Buffer Size " 36132632Ssam #define A_NOFREIN "\n#### No Available Inbound Entries to Send Close Event " 36232632Ssam 36332632Ssam #define DCDASRT 100 /* data carrier detect asserted */ 36432632Ssam #define DTRASRT 101 /* data terminal ready asserted */ 36532632Ssam #define RNGASRT 102 /* ring indicator asserted */ 36632632Ssam #define DSRASRT 102 /* data set ready asserted */ 36732632Ssam #define CTSASRT 103 /* clear to send asserted */ 36832632Ssam #define RTSASRT 104 /* ready to send asserted */ 36932632Ssam #define STXASRT 105 /* secondary transmit asserted */ 37032632Ssam #define SRXASRT 106 /* secondary recieve asserted */ 37132632Ssam #define RATEASRT 107 /* rate signal asserted */ 37232632Ssam #define DCDDROP 108 /* data carrier detect dropped */ 37332632Ssam #define DTRDROP 109 /* data terminal ready dropped */ 37432632Ssam #define RNGDROP 110 /* ring indicator dropped */ 37532632Ssam #define MPDSRDROP 110 /* data set ready dropped */ 37632632Ssam #define CTSDROP 111 /* clear to send dropped */ 37732632Ssam #define RTSDROP 112 /* ready to send dropped */ 37832632Ssam #define STXDROP 113 /* secondary transmit dropped */ 37932632Ssam #define SRXDROP 114 /* secondary recieve dropped */ 38032632Ssam #define RATEDROP 115 /* rate signal dropped */ 38132632Ssam 38232632Ssam /* Defines for filters and intena in portstat */ 38332632Ssam #define MDM_OFF 0 38432632Ssam #define MDM_ON 1 38532632Ssam 38632632Ssam /* Modem on/off flags */ 38732632Ssam #define MMOD_OFF 0 38832632Ssam #define MMOD_ON 1 38932632Ssam 39032632Ssam /* defintions for DL interface */ 39132632Ssam 39232632Ssam #define MPDLBUFSIZE 1024 39332632Ssam 39432632Ssam 39532632Ssam /* mpdlioctl command defines */ 39632632Ssam 39732632Ssam struct protports { 39832632Ssam char protoport[MPMAXPORT]; 39932632Ssam } ; 40032632Ssam 40132632Ssam struct abdcf { 40232632Ssam short xmtbsz; /* transmit buffer size - should */ 40332632Ssam /* equal # of chars in a cblock */ 40432632Ssam }; 40532632Ssam 40632632Ssam struct bdcf { 40732632Ssam char loadname[NMPPROTO+1]; 40832632Ssam char protoports[MPMAXPORT]; 40932632Ssam char fccstimer; /* powerfail timer */ 41032632Ssam char fccsports; /* ports to affect */ 41132632Ssam char fccssoc; /* ports which will 'switch on close' */ 41232632Ssam }; 41332632Ssam 41432632Ssam 41532632Ssam /* These ioctls are for the dlmpcc command */ 41633092Sbostic #define MPIOPORTMAP _IOW('m',1, struct protports) 41733092Sbostic #define MPIOHILO _IOW('m',3, short) 41833092Sbostic #define MPIOENDCODE _IO('m',4) 41933092Sbostic #define MPIOASYNCNF _IOW('m',7, struct abdcf) 42033092Sbostic #define MPIOENDDL _IO('m',10) 42133092Sbostic #define MPIOSTARTDL _IO('m',11) 42233092Sbostic #define MPIORESETBOARD _IO('m',12) 42332632Ssam 42432632Ssam /* mpdlwrite opcode defines */ 42532632Ssam 42632632Ssam #define MPDLCMD_NORMAL 1 42732632Ssam 428