   IFND    MAGPLIP_I
MAGPLIP_I     SET     1

;
;  $VER: magplip.i 1.2 (20 Aug 1995)
;
;  magplip.device - Parallel Line Internet Protocol
;
;  Original code written by Oliver Wagner and Michael Balzer.
;
;  This version has been completely reworked by Marius Gröger, introducing
;  slight protocol changes. The new source is a lot better organized and
;  maintainable.
;
;  Additional changes and code cleanup by Jan Kratochvil and Martin Mares.
;  The new source is significantly faster and yet better maintainable.
;
;  (C) Copyright 1993-1994 Oliver Wagner & Michael Balzer
;  (C) Copyright 1995 Marius Gröger
;  (C) Copyright 1995 Jan Kratochvil & Martin Mares
;      All Rights Reserved
;
;  $HISTORY:
;
;  20 Aug 1995 : 001.002 :  + ASM parts really don't need to know about the
;                             configuration defaults.
;                           + using BITDEF macro from exec/types.i
;  13 Aug 1995 : 001.001 :  code cleanup
;  12 Feb 1995 : 001.000 :  created
;


    IFND EXEC_TYPES_I
    INCLUDE "exec/types.i"
    ENDC

    IFND EXEC_LISTS_I
    INCLUDE "exec/lists.i"
    ENDC

    IFND EXEC_INTERRUPTS_I
    INCLUDE "exec/interrupts.i"
    ENDC

    IFND EXEC_LIBRARIES_I
    INCLUDE "exec/libraries.i"
    ENDC

    IFND EXEC_SEMAPHORES_I
    INCLUDE "exec/semaphores.i"
    ENDC

    IFND DEVICES_TIMER_I
    INCLUDE "devices/timer.i"
    ENDC

    IFND DEVICES_SANA2_I
    INCLUDE "devices/sana2.i"
    ENDC

    IFND DOS_DOS_I
    INCLUDE "dos/dos.i"
    ENDC


;****************************************************************************

PLIP_MAXMTU      equ     8192
   ;
   ; Each data packet is put into this kind of frame before sent over the
   ; line. See below for definitions.
   ;
   STRUCTURE PLIPFrame,0
     USHORT   pf_Sync
     SHORT    pf_Size
     USHORT   pf_CRC
     ULONG    pf_Type
     STRUCT   pf_data,PLIP_MAXMTU
     LABEL PLIPFrame_SIZE

PKTFRAMESIZE_1   equ     4
PKTFRAMESIZE_2   equ     6

SYNCBYTE_HEAD    equ     $42
SYNCBYTE_CRC     equ     $01
SYNCBYTE_NOCRC   equ     $02
SYNCWORD_CRC     equ     ((SYNCBYTE_HEAD<<8)|SYNCBYTE_CRC)
SYNCWORD_NOCRC   equ     ((SYNCBYTE_HEAD<<8)|SYNCBYTE_NOCRC)


;****************************************************************************


   ;
   ; Central driver static storage. See Flags bits below.
   ;
   STRUCTURE PLIPBase,LIB_SIZE
     UWORD  pb_pad1
     BPTR   pb_SegList
     APTR   pb_MiscBase
     APTR   pb_CIAABase
     APTR   pb_UtilityBase
     APTR   pb_TimerBase
     APTR   pb_DOSBase
     APTR   pb_SysBase
     APTR   pb_Server
     APTR   pb_Task
     STRUCT pb_Interrupt,IS_SIZE
     ULONG  pb_IntSig
     ULONG  pb_IntSigMask
     ULONG  pb_ServerStoppedSigMask
     APTR   pb_ServerPort
     APTR   pb_TimerPort
     STRUCT pb_TimeReq,IOTV_SIZE
     STRUCT pb_DevStats,S2DS_SIZE
     STRUCT pb_ReadList,LH_SIZE
     STRUCT pb_WriteList,LH_SIZE
     STRUCT pb_EventList,LH_SIZE
     STRUCT pb_ReadOrphanList,LH_SIZE
     STRUCT pb_TrackList,LH_SIZE
     STRUCT pb_BufferManagement,LH_SIZE
     STRUCT pb_EventListSem,SS_SIZE
     STRUCT pb_ReadListSem,SS_SIZE
     STRUCT pb_WriteListSem,SS_SIZE
     STRUCT pb_TrackListSem,SS_SIZE
     STRUCT pb_ReadOrphanListSem,SS_SIZE
     STRUCT pb_Lock,SS_SIZE
     ULONG  pb_Retries
     ULONG  pb_ReportBPS
     ULONG  pb_MTU
     ULONG  pb_AllocFlags
     ULONG  pb_Timeout;
     LONG   pb_CollisionDelay
     LONG   pb_ArbitrationDelay
     UBYTE  pb_pad2
     UBYTE  pb_Flags
     STRUCT pb_HandshakeMask,2              ; must be changed when
     STRUCT pb_HandshakeBit,2               ; changing the datatype in .h
     STRUCT pb_SendFrame,PLIPFrame_SIZE
     STRUCT pb_ReceiveFrame,PLIPFrame_SIZE
   LABEL PLIPBase_SIZE

;
; Bits for PLIPBase->pb_Flags
;
   BITDEF PLIP,SIDEA,0
   BITDEF PLIP,EXCLUSIVE,1
   BITDEF PLIP,NOTCONFIGURED,2
   BITDEF PLIP,OFFLINE,3
   BITDEF PLIP,SENDCRC,4
   BITDEF PLIP,RECEIVING,5
   BITDEF PLIP,COLLISION,6
   BITDEF PLIP,SERVERSTOPPED,7

   ;
   ; Index for PLIPBase->pb_HandshakeBit[]
   ; Note: in contrast to the C-Version, this is actually not the index
   ; but the offset in the array _in_bytes_. Therefore, if you change the
   ; array's datatype, you need to adjust this.
   ;
HS_LINE    equ 0
HS_REQUEST equ 1  ; better: 1*sizeof(UBYTE)


;****************************************************************************

   ;
   ; Why isn't this in exec/types.i ?
   ;

   IFND TRUE
TRUE  equ 1
   ENDC
   IFND FALSE
FALSE equ 0
   ENDC


;****************************************************************************


   ENDC MAGPLIP_I
