;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 123.202
;;; Reason:
;;;  The :enable method for a network-interface now only sets the interface enabled
;;;  if the enable-function returns non-nil.  The setup-xxx functions for the various
;;;  interfaces now return what the :enable method returns.
;;; Written 11-Feb-88 14:25:07 by pld at site Gigamos Cambridge
;;; while running on Jack Flanders from band 2
;;; with Experimental System 123.199, Experimental Local-File 73.3, Experimental FILE-Server 22.1, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 21.1, microcode 1754, SDU Boot Tape 3.12, SDU ROM 8.



; From modified file DJ: L.NETWORK.KERNEL; NETWORK-INTERFACE.LISP#124 at 11-Feb-88 14:25:08
#10R NETWORK#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "NETWORK")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERNEL; NETWORK-INTERFACE  "

(defop (network-interface :enable) (&rest arguments)
  (when (ni-opened self)
    (cond ((ni-enabled self))
	  ((ni-enable-function self)
	   (and (apply (ni-enable-function self) self arguments)
		(setf (ni-enabled self) t)))
	  (t
	   (setf (ni-enabled self) t)))))

))

; From modified file DJ: L.NETWORK.DRIVERS; 3COM.LISP#94 at 11-Feb-88 14:25:55
#10R ETHERNET#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "ETHERNET")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; DRIVERS; 3COM  "

(net:create-included-methods 'ethernet:3com-interface)

(defun setup-3com (tag &aux alist)
  (when (and (eq si:processor-type-code si:lambda-type-code)
	     (i-own-3com))
    
    (when *3com-ethernet-interface*
      (setq alist (3com-protocol-alist *3com-ethernet-interface*))
      (funcall *3com-ethernet-interface* :close))
    
    (setq *3com-ethernet-interface*
	  (make-3com-interface :tag tag
			       :interface :3com
			       :keyword :ethernet
			       :hardware-type net:arp-ethernet-hardware
			       :address-length 6
			       :address 0
			       :broadcast-address *ethernet-broadcast-address*
			       :minimum-data-length 46.
			       :maximum-data-length 1500.
			       :sent-header-length 0
			       :rcvd-header-length 0
			       :sent-trailer-length 0
			       :rcvd-trailer-length 0
			       :loopback t
			       :protocol-alist alist
			       :reset-function '3com-reset
			       :enable-function '3com-enable
			       :disable-function '3com-disable
			       :packet-ready-function '3com-packet-ready
			       :get-next-packet-function '3com-get-next-packet
			       :send-function  '3com-send-int-pkt
			       :gauge-name "3Com"
			       ))
    
    (funcall *3com-ethernet-interface* :open)
    (funcall *3com-ethernet-interface* :enable)))

))

; From modified file DJ: L.NETWORK.DRIVERS; EXCELAN.LISP#138 at 11-Feb-88 14:28:40
#10R ETHERNET#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "ETHERNET")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; DRIVERS; EXCELAN  "

(net:create-included-methods 'ethernet:excelan-interface)

(defun setup-excelan (tag &optional (enable-p t) &aux alist)
  (when (and (eq si:processor-type-code si:lambda-type-code)
	     (i-own-excelan))
    
    (when *excelan-ethernet-interface*
      (setq alist (net:ni-protocol-alist *excelan-ethernet-interface*))
      (funcall *excelan-ethernet-interface* :close))
    
    (setq *excelan-ethernet-interface*
	  (make-excelan-interface :tag tag
				  :interface :excelan
				  :keyword :ethernet
				  :hardware-type net:arp-ethernet-hardware
				  :address-length 6
				  :address 0
				  :broadcast-address *ethernet-broadcast-address*
				  :minimum-data-length 46.
				  :maximum-data-length 1500.
				  :sent-header-length 0
				  :rcvd-header-length 0
				  :sent-trailer-length 0
				  :rcvd-trailer-length 0
				  :loopback t	;will operate properly either way
				  :protocol-alist alist
				  :reset-function 'excelan-reset
				  :enable-function 'excelan-enable
				  :disable-function 'excelan-disable
				  :packet-ready-function 'excelan-packet-ready
				  :get-next-packet-function 'excelan-get-next-packet
				  :send-function 'excelan-send-int-pkt
				  :gauge-name "Excelan"
				  ))
    
    (funcall *excelan-ethernet-interface* :open)
    (when enable-p
      (funcall *excelan-ethernet-interface* :enable))))

))

; From modified file DJ: L.NETWORK.DRIVERS; LOOPBACK.LISP#19 at 11-Feb-88 14:29:26
#10R NETWORK#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "NETWORK")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; DRIVERS; LOOPBACK  "

(net:create-included-methods 'net:loopback-interface)

(defun setup-loopback (tag &aux alist)
  (when *loopback-interface*
    (setq alist (ni-protocol-alist *loopback-interface*))
    (funcall *loopback-interface* :close))
  
  (setq *loopback-receive-list* (make-fifo))
  
  (setq *loopback-interface*
	(make-loopback-interface :tag tag
				 :interface :loopback
				 :keyword :loopback
				 :minimum-data-length 0
				 :maximum-data-length 1500.
				 :sent-header-length 0
				 :rcvd-header-length 0
				 :sent-trailer-length 0
				 :rcvd-trailer-length 0
				 :protocol-alist alist
				 :disable-function 'loopback-reset
				 :reset-function 'loopback-reset
				 :packet-ready-function 'loopback-packet-ready
				 :get-next-packet-function 'loopback-get-next-packet
				 :send-function  'loopback-send-int-pkt
				 :gauge-name "LOOP"
				 ))
  
  (funcall *loopback-interface* :open)
  (funcall *loopback-interface* :enable))

))

; From modified file DJ: L.NETWORK.DRIVERS; SHARE.LISP#74 at 11-Feb-88 14:30:38
#10R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; DRIVERS; SHARE  "

(net:create-included-methods 'si:share-interface)

(defun setup-share-interface (tag &aux alist)
  (when (and (eq processor-type-code lambda-type-code)
	     *share-code-ready*)
    
    (when share-interface
      (setq alist (net:ni-protocol-alist share-interface))
      (send share-interface :close))
    
    (setq share-interface
	  (make-share-interface :tag tag
				:interface :share
				:keyword :backplane
				:address *my-op*
				:point-to-point t
				:minimum-data-length 0
				:maximum-data-length
				    (* 4 (- page-size (length chaos-share-dev-qs)))
				:sent-header-length 0
				:rcvd-header-length 0
				:sent-trailer-length 0
				:rcvd-trailer-length 0
				:protocol-alist alist
				:reset-function 'share-reset
				:packet-ready-function 'share-packet-ready
				:get-next-packet-function 'share-get-next-packet
				:send-function  'share-send-int-pkt
				:gauge-name "Share"
				))
    
    (send share-interface :open)
    (send share-interface :enable)))

))

; From modified file DJ: L.NETWORK.DRIVERS; CADR.LISP#27 at 11-Feb-88 14:31:38
#10R CHAOS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "CHAOS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; DRIVERS; CADR  "

(defun setup-cadr-network (tag &aux alist)
  (when (eq si:processor-type-code si:cadr-type-code)
    
    (when cadr-network-interface
      (setq alist (net:ni-protocol-alist cadr-network-interface))
      (funcall cadr-network-interface :close))
    
    (setq cadr-network-interface
	  (net:make-network-interface :tag tag
				      :interface :cadr
				      :keyword :chaos
				      :hardware-type net:arp-chaos-hardware
				      :address-length 2
				      :address 0
				      :broadcast-address 0
				      :minimum-data-length 0
				      :maximum-data-length 488.
				      :sent-header-length 0
				      :rcvd-header-length 0
				      :sent-trailer-length 0
				      :rcvd-trailer-length 0
				      :loopback t
				      :protocol-alist alist
				      :reset-function 'cadr-reset
				      :disable-function 'cadr-reset
				      :enable-function 'cadr-enable
				      :packet-ready-function 'cadr-packet-ready
				      :get-next-packet-function 'cadr-get-next-packet
				      :send-function  'cadr-send-int-pkt
				      :gauge-name "CADR"
				      ))
    
    (funcall cadr-network-interface :open)
    (funcall cadr-network-interface :enable)))

))

; From modified file DJ: L.NETWORK.DRIVERS; EXPLORER.LISP#24 at 11-Feb-88 14:32:15
#10R ETHERNET#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "ETHERNET")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; DRIVERS; EXPLORER  "

(defun setup-explorer-ethernet (tag &aux alist)
  (when (eq si:processor-type-code si:explorer-type-code)
    
    (when explorer-ethernet-interface
      (setq alist (net:ni-protocol-alist explorer-ethernet-interface))
      (funcall explorer-ethernet-interface :close))
    
    (setq explorer-ethernet-interface
	  (net:make-network-interface :tag tag
				      :interface :explorer
				      :keyword :ethernet
				      :hardware-type net:arp-ethernet-hardware
				      :address-length 6
				      :address si:my-ethernet-address
				      :broadcast-address *ethernet-broadcast-address*
				      :minimum-data-length 46.
				      :maximum-data-length 1500.
				      :sent-header-length 0
				      :rcvd-header-length 0
				      :sent-trailer-length 0
				      :rcvd-trailer-length 0
				      :loopback t
				      :protocol-alist alist
				      :reset-function 'explorer-reset
				      :packet-ready-function 'si:NEC-Pkt-Available
				      :get-next-packet-function 'explorer-get-next-packet
				      :send-function  'explorer-send-int-pkt
				      :gauge-name "Explorer"
				      ))
    
    (funcall explorer-ethernet-interface :open)
    (funcall explorer-ethernet-interface :enable)))

))
