home *** CD-ROM | disk | FTP | other *** search
/ Chip 1994 February / CHIP0294.ISO / digital / magazin / trumpet / pktdrvs / 82595.inc < prev    next >
Encoding:
Text File  |  1993-12-11  |  4.8 KB  |  194 lines

  1. ; Equates for the code to serach the I/O space
  2. FIRST_IO        EQU    22h        ; First I/O port to check
  3. LAST_IO            EQU    402h    ; Last I/O port to check (+10h)
  4. ID_REG_MASK        EQU    02Ch    ; Bits invloved in the mask register
  5. ID_REG_SIG        EQU 024h     ; Expected 82595 Signature
  6. R_ROBIN_BITS    EQU    0C0h    ; Bits containing the round robin counter
  7.  
  8. IRQ_MAP_LEN     EQU    2    ; No of butes in the IRQ map
  9. RAM_SIZE    EQU    8000h    ; RAM on the card only has 32k bytes
  10.  
  11. GIANT        equ    1514        ; largest legal size packet, no fcs
  12. TX_BUF_CNT    EQU    2            ; Number of simultaeous TX packets
  13. TX_HEADER    EQU    8            ; Header overhead for each TX packet
  14. TX_FRAME_SIZE    EQU    GIANT+TX_HEADER    ; Max size of each frame
  15. TX_AREA_SIZE    EQU    (((TX_FRAME_SIZE*TX_BUF_CNT)/256)+1)*256
  16. RX_AREA_SIZE    EQU     RAM_SIZE - TX_AREA_SIZE
  17. RX_AREA_BEG        EQU    0
  18. RX_AREA_END        EQU    RX_AREA_BEG + RX_AREA_SIZE - 1
  19. TX_AREA_BEG        EQU    RX_AREA_END + 1
  20. TX_AREA_END        EQU    RAM_SIZE - 1
  21.  
  22. ; Receive Header
  23. ; Description of header of each packet in receive area of memory
  24. RBUF_CMD        EQU    0    ; Receive done command or NOP if no more frames
  25. RBUF_DUMMY        EQU    1    ; Empty byte in the header
  26. RBUF_STAT_LOW    EQU    2    ; Received frame status
  27. RBUF_STAT_HI    EQU    3    ; Received frame status
  28. RBUF_NEXT_LOW    EQU    4    ; Low 8 bit address of start of next frame
  29. RBUF_NEXT_HI    EQU    5    ; High 8 bit address of start of next frame
  30. RBUF_SIZE_LOW    EQU    6    ; Length of this frame
  31. RBUF_SIZE_HI    EQU    7    ; Length of this frame
  32. RBUF_HEAD_LEN    EQU    8    ; Length of this header
  33.  
  34. ; Receive frame status
  35. RCV_DONE    EQU     0008h
  36. RX_OK        EQU     2000h
  37. RX_ERROR    EQU     0D81h    ; Various error conditions
  38. RCV_OUR_OWN    EQU        0002h
  39.  
  40. TX_DONE_BIT    EQU        80h        ; TX status byte will have this bit when done
  41. TX_HDR_SIZE    EQU        08h        ; TX header overhead
  42. CHAIN_BIT    EQU        80h        ; Used in the TX bute count to chain packets
  43.  
  44. BANK0 EQU 00h
  45. BANK0_SELECT EQU 00h
  46. BANK1 EQU 01h
  47. BANK1_SELECT EQU 40h
  48. BANK2 EQU 02h
  49. BANK2_SELECT EQU 80h
  50.  
  51. ; Bank 0 registers
  52. COMMAND_REG    EQU    00h        ; Available for all banks
  53.     XMT_CMD        EQU    04h
  54.     RCV_ENABLE    EQU    08h
  55.     RESET_CMD    EQU 0Eh
  56.     RESUME_XMT_CMD    EQU    1Ch
  57.     SEL_RESET    EQU    1Eh
  58. STATUS_REG    EQU    01h
  59.     RX_INT    EQU    02h
  60.     EXEC_STATUS    EQU    030h
  61. ID_REG            EQU    02h
  62. INT_MASK_REG    EQU    03h
  63.     RX_STOP_MASK    EQU 01h
  64.     RX_MASK            EQU 02h
  65.     TX_MASK            EQU 04h
  66.     EXEC_MASK        EQU 08h
  67.     ALL_MASK        EQU 0fh
  68. BAR_LOW            EQU    04h
  69. BAR_HIGH        EQU    05h
  70. RCV_STOP_LOW    EQU    06h
  71. RCV_STOP_HIGH    EQU    07h
  72. XMT_ADDR_REG    EQU    0Ah
  73. HOST_ADDRESS    EQU    0Ch
  74. LOCAL_MEM_PORT    EQU    0Eh
  75.  
  76. ; Bank 1 registers
  77. REG1    EQU        01h
  78.     WORD_WIDTH    EQU    02h
  79.     INT_ENABLE    EQU    80h
  80. INT_NO_REG    EQU    02h
  81. REC_LOW_LIMIT_REG    EQU    08h
  82. REC_UPPER_LIMIT_REG    EQU    09h
  83. XMT_LOW_LIMIT_REG    EQU    0Ah
  84. XMT_UPPER_LIMIT_REG    EQU    0Bh
  85.  
  86. ; Bank 2 registers
  87. RECV_MODES_REG    EQU    02h
  88.     NO_RX_CRC        EQU    04h
  89.     NO_ADD_INS        EQU    10h
  90.     MATCH_ID        EQU    NO_ADD_INS OR NO_RX_CRC OR 02h
  91.     MATCH_ALL        EQU    NO_ADD_INS OR NO_RX_CRC OR 01h OR 20h
  92.     MATCH_BRDCAST    EQU    NO_ADD_INS OR NO_RX_CRC
  93.     MATCH_MULTICAST    EQU    NO_ADD_INS OR NO_RX_CRC OR 20h
  94. REG3    EQU        03h
  95.     TPE_BIT    EQU    04h
  96.     TEST_MODE_MASK    EQU 3fh
  97. I_ADD_REG0    EQU 04h
  98. I_ADD_REG1    EQU 05h
  99. I_ADD_REG2    EQU 06h
  100. I_ADD_REG3    EQU 07h
  101. I_ADD_REG4    EQU 08h
  102. I_ADD_REG5    EQU 09h
  103. EEPROM_REG    EQU 0AH
  104. ; Bit positions in the EEPROM_REG
  105.     EEDO    EQU    08h
  106.     EEDI    EQU    04h
  107.     EECS    EQU    02h
  108.     EESK    EQU    01h
  109.  
  110. LOAD_PORT    MACRO port_param
  111.     mov        dx, base_addr
  112.     add        dx, port_param
  113.     port_no    = port_param
  114.     ENDM
  115.  
  116. LOAD_BANK_PORT    MACRO new_bank_no, new_port_no
  117.     push    ax
  118.     if new_bank_no EQ BANK0
  119.         mov        al, BANK0_SELECT
  120.     else
  121.         if new_bank_no EQ BANK1
  122.             mov        al, BANK1_SELECT
  123.         else
  124.             mov        al, BANK2_SELECT
  125.         endif
  126.     endif
  127.     mov        dx, base_addr
  128.     out        dx, al
  129.     if new_port_no NE 0
  130.         if new_port_no EQ 1 
  131.             inc    dx
  132.         else
  133.             add    dx, new_port_no
  134.         endif
  135.     endif
  136.     pop        ax
  137.     bank_no    = new_bank_no
  138.     port_no    = new_port_no
  139.     ENDM
  140.  
  141. SET_PORT    MACRO port_param
  142.     if port_param - port_no EQ 1
  143.         inc    dx
  144.     else
  145.         if port_param - port_no EQ -1
  146.             dec    dx
  147.         else
  148.             if port_param - port_no NE 0
  149.                 add    dx,port_param - port_no
  150.             endif
  151.         endif
  152.     endif
  153.     port_no    = port_param
  154.     ENDM
  155.  
  156.  
  157. SET_BANK_PORT    MACRO new_bank_no,new_port_no
  158.     if new_bank_no NE bank_no
  159.         push    ax
  160.         SET_PORT    COMMAND_REG
  161.         if new_bank_no EQ BANK0
  162.             mov        al, BANK0_SELECT
  163.         else
  164.             if new_bank_no EQ BANK1
  165.                 mov        al, BANK1_SELECT
  166.             else
  167.                 mov        al, BANK2_SELECT
  168.             endif
  169.         endif
  170.         out        dx, al
  171.         pop        ax
  172.     endif
  173.     SET_PORT    new_port_no
  174.     bank_no    = new_bank_no
  175.     port_no    = new_port_no
  176.     ENDM
  177.  
  178. write_eeprom_bit    MACRO
  179.         out        dx, al
  180.         or        al, EESK                ; Set the eeprom strobe
  181.         out        dx,    al                    ; Write rising edge of strobe to eeprom
  182.         and        al, NOT EESK            ; Clear the eeprom strobe
  183.         out        dx,    al                    ; Write falling edge of strobe to eeprom
  184.         ENDM
  185.  
  186. read_eeprom_bit    MACRO
  187.         mov        al, EECS OR EESK
  188.         out        dx,    al                    ; Write rising edge of strobe to eeprom
  189.         in        al, dx                    ; Get the data bit
  190.         mov        bl,    al                    ; Place the result in bl
  191.         mov        al, EECS                ; Clear the eeprom strobe
  192.         out        dx,    al                    ; Write falling edge of strobe to eeprom
  193.         ENDM
  194.