[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]

As when opening any other Exec device, on the call to OpenDevice() a
SANA-II device receives an IORequest structure which the device
initializes for the opener's use. The opener must copy this structure if
it desires to use multiple asynchronous requests. The SANA-II IORequest is
defined as follows:

    struct IOSana2Req
    {
        struct IORequest ios2_Req;
        ULONG ios2_WireError;
        ULONG ios2_PacketType;
        UBYTE ios2_SrcAddr[SANA2_MAX_ADDR_BYTES];
        UBYTE ios2_DstAddr[SANA2_MAX_ADDR_BYTES];
        ULONG ios2_DataLength;
        APTR *ios2_Data;
        APTR *ios2_StatData;
        APTR *ios2_BufferManagement;
    };

  ios2_Req              - A standard Exec device IORequest.

  ios2_WireError        - A more specific device code which may be
                          set when there is an io_Error. See
                          <devices/sana2.h> for the defined
                          WireErrors.

  ios2_PacketType       - The type of packet requested. See the
                          section on "Packet Type".

  ios2_SrcAddr          - The device fills in this field with the
                          interface (network hardware) address of
                          the source of the packet that satisfied
                          a read command. The bytes used to hold
                          the address will be left justified but
                          the bit layout is dependent on the
                          particular type of network.

  ios2_DstAddr          - Before the device user sends a packet, it
                          fills this with the interface destination
                          address of the packet. On receives, the
                          device fills this with the interface
                          destination address. Other commands may
                          use this field differently (see the SANA-II
                          Network Device Driver Autodocs). The
                          bytes used to hold the address will be
                          left justified but the bit layout is
                          dependent on the particular type of network.

  ios2_DataLength       - The device user initializes this field with
                          the amount of data available in the Data
                          buffer before passing the IOSana2Req to
                          the device. The device fills in this field
                          with the size of the packet data as it was
                          sent on the wire. This does not include
                          the header and trailer information.
                          Depending on the network type and protocol
                          type, the driver may have to calculate
                          this value. This is generally used only
                          for reads and writes (including broadcast
                          and multicast).

  ios2_Data             - A pointer to some abstract data structure
                          containing packet data. Drivers may not
                          directly manipulate or examine anything
                          pointed to by Data! This is generally
                          used only for reads and writes (including
                          broadcast and multicast).

  ios2_StatData         - Pointer to a structure in which to place
                          a snapshot of device statistics. The data
                          area must be long word aligned. This is
                          only used on calls to the statistics
                          commands.

  ios2_BufferManagement - The opener places a pointer to a tag list
                          in this field before calling OpenDevice().
                          Functions pointed to in the tag list are
                          called by the device when processing
                          IORequests from the opener. When returned
                          from OpenDevice(), this field contains a
                          pointer to driver-private information
                          used to access these functions.
                          See "Buffer Management" below for more
                          details.


The flags used with the device on OpenDevice() are (SANA2OPB_xxx):

  SANA2OPB_MINE  - Exclusive access to the unit requested.
  SANA2OPB_PROM  - Promiscuous mode requested. Hardware which
                   supports promiscuous mode allows all packets
                   sent over the wire to be captured whether or not
                   they are addressed to this node.


The flags used during I/O requests are (SANA2IOB_xxx):

  SANA2IOB_RAW   - Raw packet read/write requested. Raw packets
                   should include the entire data-link layer packet.
                   Devices with the same hardware device number
                   should have the same raw packet format.
  SANA2IOB_BCAST - Broadcast packet (received).
  SANA2IOB_MCAST - Multicast packet (received).
  SANA2IOB_QUICK - Quick IO requested.