ecp22 add basic module support for ECP protocol

Add ECP module support for IEEE802.1 Qbg ratified standard.
This patch introduces a new module ecp22 and its basic support
functions for module register and unregister.

Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
ecp22 add ECP send and receive buffers

Support for ECP protocol IEEE 802.1 Qbg ratified standard.
Add send and receive buffer queues, allocation and
removal at module start up and shutdown down events.

Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
ecp22 add ECP receive state machine

Support for ECP protocol IEEE 802.1 Qbg ratified standard.
Add the ECP protocol receive state machine for the
ratified standard version.

Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
ecp22 add ECP send state machine

Support for ECP protocol IEEE 802.1 Qbg ratified standard.
Add support for the ECP protocol send state machine.

Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
ecp22 introduce header file for qbg ratified standard

Support for ECP protocol IEEE 802.1 Qbg ratified standard.
Introduce a header file which contains qbg specific
module identifiers and data structure declarations for
module data transfer.

Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
ecp22 add notify module call back function

Add a module call back function named notify. The prototype is

        int (*notify)(int, char *, void *);

It has 3 parameters:
1. The senders module identifier.
2. The interface name the modications apply to.
3. The changed data itself as an opaque data structure.
The data structure is sender and receipient specific.

The function returns true if the changes have been applied successfully
by the receiving module and false otherwise. The module might not be
loaded, or the interface not active or the data simple not understood.

The data is an overlay of structures, the first member identifies
the type of the data structure:
struct qbg22_imm {              /* Intermodule message data structure */
	int data_type;          /* Identifies union data */
	union {                 /* Overlay possible data */
		struct evb22_to_ecp22 a;
		struct evb22_to_vdp22 b;
	} u;
};

For example the EVB Module wants to notify the ECP module about
some parameter changes, then ECP module offers a notify call back
function. EVB module calls it like:
	EVB-modops->notify(EVB_MOD_ID, "ethx", &qbg22_data);
with qbg22_data.data_type indicating which union member to use to
extract the data.

Signed-off-by: Thomas Richter <tmricht@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>