Garrett D'Amore wrote: > +1.
Thanks. > > Is it the project teams intention to backport the LSO support to S10 as > well? LSO support is already in Solaris 10. Nicolas. > > - Garrett > > James Walker wrote: >> I'm sponsoring this case for Nicolas Droux. The man pages and header >> files >> are located in the materials directory. This case is requesting a patch >> binding. >> >> Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI >> This information is Copyright 2009 Sun Microsystems >> 1. Introduction >> 1.1. Project/Component Working Name: >> Public GLDv3 Interfaces >> 1.2. Name of Document Author/Supplier: >> Author: Nicolas Droux >> 1.3 Date of This Document: >> 19 November, 2009 >> 4. Technical Description >> >> Introduction >> ============ >> >> The GLDv3 (Generic Lan Driver version 3) provider API was first >> introduced as part of the Nemo project (PSARC/2004/571). The API was >> initially a project-private API and was later promoted to a >> consolidation private API within the ON consolidation >> (PSARC/2005/396.) >> >> These APIs were kept consolidation private to gain experience with the >> APIs, and in anticipation of other projects which were planning to >> extend the APIs, for example Crossbow (PSARC 2006/357). >> >> This effort commits a core subset of the GLDv3 provider APIs for use >> by Ethernet drivers outside of the ON consolidation. This subset does >> not include advanced features such as hardware classification or >> polling, which are exposed through capabilities. In the future these >> capabilities may be promoted to committed interfaces as they mature >> and stabilize. >> >> Note that this case defines a stable driver API only for Ethernet >> drivers, i.e. drivers registering with a plugin type of >> MAC_PLUGIN_IDENT_ETHER. >> >> GLDv3 Provider Interface Overview >> ================================= >> >> The GLDv3 driver API is a function calls-based interface (in contrast >> to a STREAMs-based interface), which is designed for extensibility, >> and for high performance. >> >> The interface consist of a set of driver entry points which are >> advertised during registration with the MAC layer, a set of MAC entry >> points which are invoked by drivers, and a set of capabilities which >> are used for advanced features. >> >> Driver related structures are defined in the header file >> <sys/mac_provider.h> header file. The driver should not include any >> other MAC-related header file. >> >> Registration >> ============ >> >> A GLDv3 device driver calls mac_register(9F) to register a new >> instance with the framework. mac_register(9F) is typically called from >> the attach(9E) entry point implemented by the device driver. >> mac_register(9F) must be passed as input a pointer to a >> mac_register(9S) structure. >> >> The registration information structure mac_register(9S) must be >> allocated through a call to mac_alloc(9F). mac_alloc(9F) takes as >> argument a version number, that version must be set to MAC_VERSION_V1 >> which is the version described by this document. >> >> Note: the version MAC_VERSION_V1 must be specified by drivers which >> implement the API described by this document. If new versions of the >> API are defined in the future, the version number will be incremented, >> and the GLDv3 framework may support one or more versions of the >> APIs. Having a specific MAC_VERSION_V1, instead of always using, for >> example, MAC_VERSION which contains the latest version number, will >> allow unbundled drivers to be compiled on an ON build which support >> more than one versions of the API. >> >> The entry points and data structures used during MAC registration are >> summarized below. When applicable, a reference to the file which >> contains a detailed description of the function or data structure is >> provided. >> >> extern mac_register_t *mac_alloc(uint_t version); >> >> Allocates a new structure of type mac_register_t, which >> can be subsequently be passed to mac_register(9F). >> The version argument must be set to MAC_VERSION_V1. [mac-9f.txt] >> >> extern int mac_register(mac_register_t *, mac_handle_t *); >> >> Registers a new GLDv3 MAC instance with the MAC layer. >> This entry point is typically invoked from the >> attach(9E) entry point of a physical NIC device driver, >> or when a pseudo MAC instance is created. >> >> Note: the public GLDv3 interface only supports physical >> GLDv3 devices. Creating pseudo devices require the use of other >> dls kernel entry points and exchange of link ids which for now >> are staying consolidation-private. [mac-9f.txt] >> >> extern int mac_unregister(mac_handle_t); >> >> Unregisters a MAC instance which was previously registered >> with mac_register(9F). [mac-9f.txt] >> >> typedef struct mac_register_s mac_register_t; >> >> MAC registration structure. Allocated by mac_alloc(9F) >> and passed to mac_register(9F). [mac_register-9s.txt] >> >> typedef struct mac_callbacks_s mac_callbacks_t; >> >> A pointer to a structure of type mac_callback_t is passed >> using the m_callbacks field of the mac_register_t structure. >> The mac_callbacks_t data-structure allows the driver to expose >> its entry points to the MAC layer. These entry points are used >> to start/stop the adapters, manage multicast addresses, set >> promiscuous mode, query the capabilities of the adapter, get >> and set properties, and so forth. >> >> The mac_callback_t data-structure contains a mc_callbacks >> bit-mask which allows data-structure to support new >> entry points in the future, while maintaining >> backward-compatibility. >> >> mc_callback can be a combination of the flags MC_IOCTL, >> MC_GETCAPAB, MC_SETPROP, MC_GETPROP, and >> MC_PROPINFO [mac_callbacks-9s.txt] >> >> Capabilities >> ============ >> >> GLDv3 implements a capability mechanism which allows the framework to >> query and enable capabilities which may not be supported by all GLDv3 >> drivers. Some capabilities are project private, some capabilities are >> consolidation private, and some capabilities are part of the stable >> interface proposed by this case. In particular, the capabilities being >> committed here are defined through the mac_capab_t enum, and are >> listed below. >> >> MAC_CAPAB_HCKSUM Hardware checksum offload >> >> Detailed information about this capability is >> passed from the driver to the stack as part of >> the capability query by setting a combination >> of the following flags. >> >> - HCKSUM_INET_PARTIAL >> - HCKSUM_INET_FULL_V4 >> - HCKSUM_INET_FULL_V6 >> - HCKSUM_IPHDRCKSUM >> >> Checksum offload meta-data is queried and set >> through the mac_hcksum_get(9F) and >> mac_hcksum_set(9F), respectively. >> >> MAC_CAPAB_LSO Large Segment (or Send) Offload >> >> Detailed information about the capability is >> passed during capability through the >> mac_capab_lso_t structure which consists of a >> structure of type lso_basic_tcp_ipv4_t, and a >> scalar value. >> >> Per-packet LSO meta-data can be obtained by >> driver using the mac_lso_get(9F) entry point. >> >> Capabilities are queried through the mc_getcapab entry point which is >> specified through the mac_callback(9S) structure. If a capability is >> supported by the driver, it passes information about that capability, >> such as capability-specific entry points, flags, etc, through the >> mc_getcapab entry point. >> >> These capabilities and associated data structures and definitions are >> described in details in [mac-9e.txt] >> >> Control Operations >> ================== >> >> The driver is controlled by the MAC layer using the driver entry >> points exposed through the mac_callback structure, see above, as well >> as mac_callbacks-9s.txt. >> >> The control entry points are exposed by drivers, these entry points >> are described in details in mac-9e.txt. >> >> mc_start Start a driver instance. This entry point >> is invoked by the framework before >> any operation is attempted. >> >> mc_stop Stop a driver instance. >> >> mc_setpromisc Set the promiscuous mode of a driver >> instance. >> >> mc_multicst Add or remove a multicast address >> >> mc_unicst Set by the driver to change the primary >> MAC address of the driver instance. >> >> mc_ioctl Optional ioctl entry point. >> >> mc_setprop Set a property value. >> >> mc_getprop Get a property value. >> >> mc_propinfo Get information about a property >> >> >> Data Path >> ========= >> >> Data-path entry points consist of callbacks exported by the driver and >> invoked by the framework for sending packets, and framework entry >> points called by the driver for transmit flow control and receiving >> packets. >> >> Transmit Data Path >> ------------------ >> >> The drivers expose a transmit entry point mc_tx through the callback >> data-structure, see the Registration section above, and [mac-9e.txt] for >> details. The transmit entry point is passed a chain of one or more >> packets linked in a list of mblk_t's. >> >> - Flow control: >> >> If the driver cannot send the packets due to a lack of hardware >> resources, it returns the sub-chain of packets that could not be >> sent. When more descriptors become available at a later time, the >> driver must notify the framework by invoking mac_tx_update() >> [mac-9f.txt] >> >> - Hardware checksumming: >> >> If the driver advertised hardware checksum capabilities, it is >> responsible to check every packet for hardware checksum meta-data by >> invoking mac_hcksum_get(9F), and program the hardware to perform the >> required checksum calculation [hcksum_retrieve-9f.txt] >> >> - LSO: >> >> If the driver advertised LSO capabilities, it is responsible to check >> every packet for LSO meta-data using the mac_lso_get(9F) entry point, >> and programming the hardware to segment the large segment into smaller >> packets [mac_lso_get-9f.txt] >> >> - VLANs: >> >> When VLANs are configured by the administrator using VLAN or VNIC data >> links, the MAC layer inserts the needed VLAN headers on the outbound >> packets before they are passed to the driver via the m_tx entry point. >> >> Receive Data Path >> ----------------- >> >> The device driver passes up received packets to the stack by passing >> the received packets as chains through mac_rx() [mac-9f.txt] >> >> - Hardware checksumming >> >> If the driver supports, hardware checksumming, it must invoke the >> mac_hcksum_set(9F) entry point to associate hardware checksumming >> meta-data to the packet. [hcksum_retrieve-9f.txt] >> >> - VLANs: >> >> VLAN packets must be passed with their tags to the MAC layer. The >> driver should not strip the VLAN headers from the packets. >> >> Notifications >> ============= >> >> The following functions can be invoke by a driver to notify the >> network stack that its state has changed: >> >> - mac_tx_update(9F) Invoked to notify the framework that >> more TX descriptors are available. >> [mac-9f.txt] >> >> - mac_link_update(9F) Invoked to notify the framework that >> the state of the link has changed. >> [mac-9f.txt] >> >> Statistics >> ========== >> >> Device drivers are expected to maintain a set of statistics for the >> device instances they manage. These statistics are queried by the MAC >> layer by invoking the mc_getstat entry point of the mc_getstat entry >> point of the driver [mac-9e.txt] >> >> The GLD statistics supported are the union of generic MAC statistics, >> and Ethernet-specific statistics that are common across Nevada and >> S10. >> >> Properties >> ========== >> >> Brussels properties, first introduced by PSARC/2007/429, are part of >> the committed GLDv3 interface. In order to simplify the driver >> interface, and to address issues with Brussels extension >> PSARC/2009/235 (dladm Possible Values List), which cannot be promoted >> to committed interface due to architectural issues, the driver >> properties interface are revisited as part of this case. >> >> More specifically, a new driver entry point, mc_propinfo, is >> introduced, and used by the driver to return immutable information >> about a property. This information includes permissions, default >> values, and allowed value ranges. The mc_getprop interface can be >> simplified because it can focus on returning the current value of a >> property. The new mc_propinfo interface is easily extensible while >> preserving backward compatibility. These updated properties interfaces >> are described in details in [mac-9e.txt] and >> [mac_prop_info_set_perm-9f.txt] >> >> The driver is also able to expose private properties. As defined by >> Brussels NDD compatiblity support (SPARC/2008/171), private properties >> were passed by the driver to the framework during registration using >> the m_priv_props and m_priv_prop_count fields of the mac_register_t >> structure. m_priv_prop was defined as an array of mac_priv_prop_t >> elements, which included the name and permission for each private >> property. >> >> Because property permissions can be provided by the mc_propinfo() >> entry point, m_priv_props can be simplified to be an array of strings >> containing property names. The list can be NULL-terminated, allowing >> the removal of the m_priv_prop_count field. m_priv_propos field is >> defined in [mac_register-9s.txt] >> >> Interface Table >> =============== >> >> Exported Interfaces >> >> Interface Name Classification Comments >> --------------------------------------------------------------------------- >> >> mac_alloc(9F) Committed Allocate a mac_register_t >> mac_free(9F) Committed Free a mac_register_t >> mac_register(9F) Committed Register with MAC layer >> mac_unregister(9F) Committed Unregister from MAC layer >> mac_rx(9F) Committed Pass up received packet(s) >> mac_tx_update(9F) Committed TX resources are available >> mac_link_update(9F) Committed Link state has changed >> mac_hcksum_get(9F) Committed Retrieve HW checksum info >> mac_hcksum_set(9F) Committed Attach HW checksum info >> mac_lso_get(9F) Committed Retrieve LSO info >> >> mc_getstat(9E) Committed Retrieve stats from driver >> mc_start(9E) Committed Start driver instance >> mc_stop(9E) Committed Stop driver instance >> mc_setpromisc(9E) Committed Set promiscuous mode >> mc_multicst(9E) Committed Add or remove mcast address >> mc_unicst(9E) Committed Set primary unicast address >> mc_tx(9E) Committed Send one or more packets >> mc_ioctl(9E) Committed ioctl driver interface >> mc_getcapab(9E) Committed Retrieve capabilities >> >> mac_register_t(9S) Committed Registration information >> mac_callback_t(9S) Committed Driver callbacks >> mac_capab_lso_t(9S) Committed LSO meta-data >> lso_basic_tcp_ipv4_t(9S) Committed LSO meta-data for TCP/IPv4 >> >> mac_prop_info_set_perm(9F) Committed Set permission of a property >> mac_prop_info_set_default_*(9F) Committed Set property value >> mac_prop_info_set_range_*(9F) Committed Set property values range >> >> MAC_VERSION_V1 Committed Committed interface version >> MC_IOCTL Committed mc_ioctl present >> MC_GETCAPAB Committed mc_getcapab present >> MAC_CAPAB_HCKSUM Committed HW checksumming capability >> MAC_CAPAB_LSO Committed LSO capability >> MAC_HCKSUM_INET_PARTIAL Committed HW cksum partial offload >> MAC_HCKSUM_INET_FULL_V4 Committed HW cksum IPv4 full offload >> MAC_HCKSUM_INET_FULL_V6 Committed HW cksum IPv6 full offload >> MAC_HCKSUM_IPHDRCKSUM Committed HW IP hdr cksum offload >> >> These interfaces are defined in more details in the man pages found >> in the man/ materials sub-directory. The man/README.txt file contains >> an index of the man page drafts and the interfaces they describe. >> >> Release Binding >> =============== >> >> Patch >> >> Files and Packages >> ================== >> >> The following files will be delivered as part of the package SUNWhea: >> >> /usr/include/sys/mac.h >> /usr/include/sys/mac_provider.h >> /usr/include/sys/mac_ether.h >> >> References >> ========== >> >> PSARC/2004/571 - Nemo - x86 Network Driver Enhancements >> PSARC/2005/207 - Clearview for Nemo >> PSARC/2005/365 - Nemo drivers interface simplification >> PSARC/2006/248 - Nemo MAC-Type Plugin Architecture >> PSARC/2006/249 - Nemo Changes for Binary Compatibility >> PSARC/2006/357 - Crossbow - Network Virtualization and Resource >> Management >> PSARC/2007/429 - Brussels - enhanced network driver configuration >> PSARC/2008/171 - Brussels: NDD compatiblity support >> PSARC/2008/222 - Brussels persistence >> >> 6. Resources and Schedule >> 6.4. Steering Committee requested information >> 6.4.1. Consolidation C-team Name: >> ON >> 6.5. ARC review type: FastTrack >> 6.6. ARC Exposure: open >> >> >