123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #ifndef _INTELVF_H
- #define _INTELVF_H
-
- /** @file
- *
- * Intel 10/100/1000 virtual function network card driver
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include "intel.h"
-
- /** Intel VF BAR size */
- #define INTELVF_BAR_SIZE ( 16 * 1024 )
-
- /** Mailbox Control Register */
- #define INTELVF_MBCTRL 0x0c40UL
- #define INTELVF_MBCTRL_REQ 0x00000001UL /**< Request for PF ready */
- #define INTELVF_MBCTRL_ACK 0x00000002UL /**< PF message received */
- #define INTELVF_MBCTRL_VFU 0x00000004UL /**< Buffer taken by VF */
- #define INTELVF_MBCTRL_PFU 0x00000008UL /**< Buffer taken to PF */
- #define INTELVF_MBCTRL_PFSTS 0x00000010UL /**< PF wrote a message */
- #define INTELVF_MBCTRL_PFACK 0x00000020UL /**< PF acknowledged message */
- #define INTELVF_MBCTRL_RSTI 0x00000040UL /**< PF reset in progress */
- #define INTELVF_MBCTRL_RSTD 0x00000080UL /**< PF reset complete */
-
- /** Mailbox Memory Register Base */
- #define INTELVF_MBMEM 0x0800UL
-
- /** Reset mailbox message */
- #define INTELVF_MSG_TYPE_RESET 0x00000001UL
-
- /** Set MAC address mailbox message */
- #define INTELVF_MSG_TYPE_SET_MAC 0x00000002UL
-
- /** Set MTU mailbox message */
- #define INTELVF_MSG_TYPE_SET_MTU 0x00000005UL
-
- /** Get queue configuration message */
- #define INTELVF_MSG_TYPE_GET_QUEUES 0x00000009UL
-
- /** Control ("ping") mailbox message */
- #define INTELVF_MSG_TYPE_CONTROL 0x00000100UL
-
- /** Message type mask */
- #define INTELVF_MSG_TYPE_MASK 0x0000ffffUL
-
- /** Message NACK flag */
- #define INTELVF_MSG_NACK 0x40000000UL
-
- /** Message ACK flag */
- #define INTELVF_MSG_ACK 0x80000000UL
-
- /** Message is a response */
- #define INTELVF_MSG_RESPONSE ( INTELVF_MSG_ACK | INTELVF_MSG_NACK )
-
- /** MAC address mailbox message */
- struct intelvf_msg_mac {
- /** Message header */
- uint32_t hdr;
- /** MAC address */
- uint8_t mac[ETH_ALEN];
- /** Alignment padding */
- uint8_t reserved[ (-ETH_ALEN) & 0x3 ];
- } __attribute__ (( packed ));
-
- /** Version number mailbox message */
- struct intelvf_msg_version {
- /** Message header */
- uint32_t hdr;
- /** API version */
- uint32_t version;
- } __attribute__ (( packed ));
-
- /** MTU mailbox message */
- struct intelvf_msg_mtu {
- /** Message header */
- uint32_t hdr;
- /** Maximum packet size */
- uint32_t mtu;
- } __attribute__ (( packed ));
-
- /** Queue configuration mailbox message (API v1.1+ only) */
- struct intelvf_msg_queues {
- /** Message header */
- uint32_t hdr;
- /** Maximum number of transmit queues */
- uint32_t tx;
- /** Maximum number of receive queues */
- uint32_t rx;
- /** VLAN hand-waving thing
- *
- * This is labelled IXGBE_VF_TRANS_VLAN in the Linux driver.
- *
- * A comment in the Linux PF driver describes it as "notify VF
- * of need for VLAN tag stripping, and correct queue". It
- * will be filled with a non-zero value if the PF is enforcing
- * the use of a single VLAN tag. It will also be filled with
- * a non-zero value if the PF is using multiple traffic
- * classes.
- *
- * The Linux VF driver seems to treat this field as being
- * simply the number of traffic classes, and gives it no
- * VLAN-related interpretation.
- *
- * If the PF is enforcing the use of a single VLAN tag for the
- * VF, then the VLAN tag will be transparently inserted in
- * transmitted packets (via the PFVMVIR register) but will
- * still be visible in received packets. The Linux VF driver
- * handles this unexpected VLAN tag by simply ignoring any
- * unrecognised VLAN tags.
- *
- * We choose to strip and ignore the VLAN tag if this field
- * has a non-zero value.
- */
- uint32_t vlan_thing;
- /** Default queue */
- uint32_t dflt;
- } __attribute__ (( packed ));
-
- /** Mailbox message */
- union intelvf_msg {
- /** Message header */
- uint32_t hdr;
- /** MAC address message */
- struct intelvf_msg_mac mac;
- /** Version number message */
- struct intelvf_msg_version version;
- /** MTU message */
- struct intelvf_msg_mtu mtu;
- /** Queue configuration message */
- struct intelvf_msg_queues queues;
- /** Raw dwords */
- uint32_t dword[0];
- };
-
- /** Maximum time to wait for mailbox message
- *
- * This is a policy decision.
- */
- #define INTELVF_MBOX_MAX_WAIT_MS 500
-
- extern int intelvf_mbox_msg ( struct intel_nic *intel, union intelvf_msg *msg );
- extern int intelvf_mbox_poll ( struct intel_nic *intel );
- extern int intelvf_mbox_wait ( struct intel_nic *intel );
- extern int intelvf_mbox_reset ( struct intel_nic *intel, uint8_t *hw_addr );
- extern int intelvf_mbox_set_mac ( struct intel_nic *intel,
- const uint8_t *ll_addr );
- extern int intelvf_mbox_set_mtu ( struct intel_nic *intel, size_t mtu );
-
- #endif /* _INTELVF_H */
|