This series rebases on David's linux-net git repo ("master" branch). It's to support NCSI stack on net/farady/ftgmac100.c
The following figure gives an example about how NCSI is deployed: The NCSI is specified by DSP0222, which can be downloaded from the following link here (http://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.0.0.pdf). * The NC-SI (aka NCSI) is defined as the interface between a (Base) Management Controller (BMC) and one or multiple Network Controlers (NC) on host side. The interface is responsible for providing external network connectivity for BMC. * Each BMC can connect to multiple packages, up to 8. Each package can have multiple channels, up to 32. Every package and channel are identified by 3-bits and 5-bits in NCSI packet. At one moment, one channel is active to provide service. * NCSI packet, encapsulated in ethernet frame, has 0x88F8 in the protocol field. The destination MAC address should be 0xFF's while the source MAC address can be arbitrary one. * NCSI packets are classified to command, response, AEN (Asynchronous Event Notification). Commands are sent from BMC to host for configuration and information retrival. Responses, corresponding to commands, are sent from host to BMC for confirmation and requested information. One command should have one and only one response. AEN is sent from host to BMC for notification (e.g. link down on active channel) so that BMC can take appropriate action. +------------------+ +----------------------------------------------+ | | | Host | | BMC | | | | | | +-------------------+ +-------------------+ | | +---------+ | | | Package-A | | Package-B | | | | | | | +---------+---------+ +-------------------+ | | | NIC | | | | Channel | Channel | | Channel | Channel | | +----+----+----+---+ +-+---------+---------+--+---------+---------+-+ | | | | | | +-----------------------------+----------------------+ The design for the patchset is highlighted as below: * The NCSI interface is abstracted with "struct ncsi_dev". It's registered when net_device is created, started to work by calling ncsi_start_dev() when net_device is opened (ndo_open()). For the first time, NCSI packets are sent and received to/from the far end (host in above figure) to probe available NCSI packages and channels. After that, one channel is chosen as active one to provide service. * The NCSI stack is driven by workqueue and state machine internally. * AEN (Asychronous Event Notification) might be received from the far end (host). The currently active NCSI channel fails over to another available one if possible. Otherwise, the NCSI channel is out of service. * NCSI stack should be configurable through netlink or another mechanism, but it's not implemented in this patchset. It's something TBD. * The first NIC driver that is aware of NCSI: drivers/net/ethernet/faraday/ftgmac100.c Gavin Shan (10): net/ncsi: Resource management net/ncsi: NCSI command packet handler net/ncsi: NCSI response packet handler net/ncsi: Package and channel management net/ncsi: NCSI AEN packet handler net/farady: Helper functions to create or destroy MDIO interface net/farady: Read MAC address from chip net/farady: Support NCSI mode net/farady: Match driver according to compatible property net/farady: Mask PHY interrupt with NCSI mode drivers/net/ethernet/faraday/ftgmac100.c | 280 +++++++-- include/net/ncsi.h | 52 ++ include/uapi/linux/if_ether.h | 1 + net/Kconfig | 1 + net/Makefile | 1 + net/ncsi/Kconfig | 12 + net/ncsi/Makefile | 4 + net/ncsi/internal.h | 310 ++++++++++ net/ncsi/ncsi-aen.c | 169 ++++++ net/ncsi/ncsi-cmd.c | 396 ++++++++++++ net/ncsi/ncsi-manage.c | 893 +++++++++++++++++++++++++++ net/ncsi/ncsi-pkt.h | 395 ++++++++++++ net/ncsi/ncsi-rsp.c | 997 +++++++++++++++++++++++++++++++ 13 files changed, 3448 insertions(+), 63 deletions(-) create mode 100644 include/net/ncsi.h create mode 100644 net/ncsi/Kconfig create mode 100644 net/ncsi/Makefile create mode 100644 net/ncsi/internal.h create mode 100644 net/ncsi/ncsi-aen.c create mode 100644 net/ncsi/ncsi-cmd.c create mode 100644 net/ncsi/ncsi-manage.c create mode 100644 net/ncsi/ncsi-pkt.h create mode 100644 net/ncsi/ncsi-rsp.c -- 2.1.0