home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Serving the Web
/
ServingTheWeb1995.disc1of1.iso
/
connect
/
tcpip
/
crynwr
/
pktd11a
/
exp16con.asm
< prev
next >
Wrap
Assembly Source File
|
1993-07-28
|
3KB
|
105 lines
;-----------------------------------------------------------------------------
; It is safe to assume that the command unit is up and running ready
; for the first send. And that there are at least two send buffers
; available.
;
; This procedure works by sending a 64 byte packet to itself. We do not turn
; on loopback, so we do not expect to see a receive. Instead, we
; expect to see that the send completed OK. If the send does not complete OK,
; then this routine switches to other connectors and the test is repeated.
;-----------------------------------------------------------------------------
auto_connector:
; Let's start doing the test send with AUI option first. If we tried BNC
; first, and they were using AUI, it would seem like the BNC worked. So
; we switch to AUI, which turns off the BNC power supply.
MOV connection_type, CONN_AUI
CALL write_connector_setting_to_hardware
; Test connection to see if it works. Jump if it does.
call test_send
clc
je auto_connector_exit
; Toggle AUI/Other setting and try to send a packet. Jump if send
; works. Now try sending on BNC.
MOV connection_type, CONN_BNC
CALL write_connector_setting_to_hardware
call test_send
clc
je auto_connector_exit
; Here if we just tried a send the BNC. If this is
; a three connector card, then we toggle the BNC/TPE setting.
; Jump if connection is found.
MOV connection_type, CONN_TPE
CALL write_connector_setting_to_hardware
call test_send
clc
je auto_connector_exit
stc
auto_connector_exit:
ret
test_packet label byte
db EADDR_LEN dup(?)
db EADDR_LEN dup(?)
db 00h,2eh ;A 46 in network order
db 0,0 ;DSAP=0 & SSAP=0 fields
db 0f3h,0 ;Control (Test Req + P bit set)
;-----------------------------------------------------------------------------
; This procedure sends a packet on the wire and wait for the send to
; complete. It the checks to see if the send completed OK and returns
; the results.
;-----------------------------------------------------------------------------
test_send:
mov si,offset rom_address ;set the destination address.
movseg es,cs
mov di,offset test_packet
repmov EADDR_LEN
mov si,offset rom_address ;set the source address.
repmov EADDR_LEN
mov cx,60
mov si,offset test_packet
call send_pkt
CALL ReadTickCounter
MOV CX, AX
mov bp,io_addr
lea dx, [bp].@TxCB_Status
send_test_wait:
in ax,dx
test ax,8000h ;did it finish?
jne send_test_done
; See if we have been here for a millisecond. Jump if not.
call ReadTickCounter
neg ax
add ax, cx
cmp ax, one_mil
jb send_test_wait
in ax,dx ;get the transmit status back again.
send_test_done:
mov cx, ax ; Save status in CX.
; The send block at the head of the list completed OK. Clear the
; transmit command block status.
xor ax, ax
out dx, ax
; Send is complete. Get the status and compare to OK send and return.
; Save flags for return.
and cx, 0f000h
cmp cx, 0a000h
ret