home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / lan / driver6s / generic.asm < prev    next >
Assembly Source File  |  1990-03-15  |  4KB  |  152 lines

  1. version    equ    0
  2.  
  3.     include    defs.asm
  4.  
  5. code    segment    byte public
  6.     assume    cs:code, ds:code
  7.  
  8.     public    int_no
  9. int_no    db    0,0,0,0            ;must be four bytes long for get_number.
  10.  
  11.     public    driver_class, driver_type, driver_name, driver_function, parameter_list
  12. driver_class    db    0        ;from the packet spec
  13. driver_type    db    0        ;from the packet spec
  14. driver_name    db    'generic',0    ;name of the driver.
  15. driver_function    db    2
  16. parameter_list    label    byte
  17.     db    1    ;major rev of packet driver
  18.     db    9    ;minor rev of packet driver
  19.     db    14    ;length of parameter list
  20.     db    EADDR_LEN    ;length of MAC-layer address
  21.     dw    GIANT    ;MTU, including MAC headers
  22.     dw    MAX_MULTICAST * EADDR_LEN    ;buffer size of multicast addrs
  23.     dw    0    ;(# of back-to-back MTU rcvs) - 1
  24.     dw    0    ;(# of successive xmits) - 1
  25.     dw    0    ;Interrupt # to hook for post-EOI
  26.             ;processing, 0 == none,
  27.  
  28.     public    rcv_modes
  29. rcv_modes    dw    4        ;number of receive modes in our table.
  30.         dw    0,0,0,rcv_mode_3
  31.  
  32.     public    send_pkt
  33. send_pkt:
  34. ;enter with es:di->upcall routine, (0:0) if no upcall is desired.
  35. ;  (only if the high-performance bit is set in driver_function)
  36. ;enter with ds:si -> packet, cx = packet length.
  37. ;if we're a high-performance driver, es:di -> upcall.
  38. ;exit with nc if ok, or else cy if error, dh set to error number.
  39.     assume    ds:nothing
  40.     ret
  41.  
  42.  
  43.     public    get_address
  44. get_address:
  45. ;get the address of the interface.
  46. ;enter with es:di -> place to get the address, cx = size of address buffer.
  47. ;exit with nc, cx = actual size of address, or cy if buffer not big enough.
  48.     assume    ds:code
  49.     ret
  50.  
  51.  
  52.     public    set_address
  53. set_address:
  54. ;enter with ds:si -> Ethernet address, CX = length of address.
  55. ;exit with nc if okay, or cy, dh=error if any errors.
  56.     assume    ds:nothing
  57.     ret
  58.  
  59.  
  60. rcv_mode_3:
  61. ;receive mode 3 is the only one we support, so we don't have to do anything.
  62.     ret
  63.  
  64.  
  65.     public    set_multicast_list
  66. set_multicast_list:
  67. ;enter with ds:si ->list of multicast addresses, cx = number of addresses.
  68. ;return nc if we set all of them, or cy,dh=error if we didn't.
  69.     mov    dh,NO_MULTICAST
  70.     stc
  71.     ret
  72.  
  73.  
  74.     public    terminate
  75. terminate:
  76.     ret
  77.  
  78.     public    reset_interface
  79. reset_interface:
  80. ;reset the interface.
  81.     assume    ds:code
  82.     ret
  83.  
  84.  
  85. ;called when we want to determine what to do with a received packet.
  86. ;enter with cx = packet length, es:di -> packet type.
  87.     extrn    recv_find: near
  88.  
  89. ;called after we have copied the packet into the buffer.
  90. ;enter with ds:si ->the packet, cx = length of the packet.
  91.     extrn    recv_copy: near
  92.  
  93.     extrn    count_in_err: near
  94.     extrn    count_out_err: near
  95.  
  96.     public    recv
  97. recv:
  98. ;called from the recv isr.  All registers have been saved, and ds=cs.
  99. ;Upon exit, the interrupt will be acknowledged.
  100.     assume    ds:code
  101.     ret
  102.  
  103.  
  104.     public    recv_exiting
  105. recv_exiting:
  106. ;called from the recv isr after interrupts have been acknowledged.
  107. ;Only ds and ax have been saved.
  108.     assume    ds:nothing
  109.     ret
  110.  
  111.  
  112. ;any code after this will not be kept after initialization.
  113. end_resident    label    byte
  114.  
  115.  
  116.     public    usage_msg
  117. usage_msg    db    "usage: generic <packet_int_no>",CR,LF,'$'
  118.  
  119.     public    copyright_msg
  120. copyright_msg    db    "Packet driver for a generic device, version ",'0'+majver,".",'0'+version,CR,LF
  121.         db    "Portions Copyright 19xx, J. Random Hacker",CR,LF,'$'
  122.  
  123.     extrn    set_recv_isr: near
  124.  
  125. ;enter with si -> argument string, di -> wword to store.
  126. ;if there is no number, don't change the number.
  127.     extrn    get_number: near
  128.  
  129. ;enter with si -> argument string, di -> wword to print.
  130.     extrn    print_number: near
  131.  
  132.     public    parse_args
  133. parse_args:
  134. ;exit with nc if all went well, cy otherwise.
  135.     clc
  136.     ret
  137.  
  138.  
  139.     public    etopen
  140. etopen:
  141. ;if all is okay,
  142.     mov    dx,offset end_resident
  143.     clc
  144.     ret
  145. ;if we got an error,
  146.     stc
  147.     ret
  148.  
  149. code    ends
  150.  
  151.     end
  152.