Rocker Network Switch Register Programming Guide
Copyright (c) Scott Feldman <sfeldma@gmail.com>
Copyright (c) Neil Horman <nhorman@tuxdriver.com>
Version 0.11, 12/29/2014

LICENSE
=======

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

SECTION 1: Introduction
=======================

Overview
--------

This document describes the hardware/software interface for the Rocker switch
device.  The intended audience is authors of OS drivers and device emulation
software.

Notations and Conventions
-------------------------

o In register descriptions, [n:m] indicates a range from bit n to bit m,
inclusive.
o Use of leading 0x indicates a hexadecimal number.
o Use of leading 0b indicates a binary number.
o The use of RSVD or Reserved indicates that a bit or field is reserved for
future use.
o Field width is in bytes, unless otherwise noted.
o Register are (R) read-only, (R/W) read/write, (W) write-only, or (COR) clear
on read
o TLV values in network-byte-order are designated with (N).


SECTION 2: PCI Configuration Registers
======================================

PCI Configuration Space
-----------------------

Each switch instance registers as a PCI device with PCI configuration space:

	offset	width	description		value
	---------------------------------------------
	0x0	2	Vendor ID		0x1b36
	0x2	2	Device ID		0x0006
	0x4	4	Command/Status
	0x8	1	Revision ID		0x01
	0x9	3	Class code		0x2800
	0xC	1	Cache line size
	0xD	1	Latency timer
	0xE	1	Header type
	0xF	1	Built-in self test
	0x10	4	Base address low
	0x14	4	Base address high
	0x18-28		Reserved
	0x2C	2	Subsystem vendor ID	*
	0x2E	2	Subsystem ID		*
	0x30-38		Reserved
	0x3C	1	Interrupt line
	0x3D	1	Interrupt pin		0x00
	0x3E	1	Min grant		0x00
	0x3D	1	Max latency		0x00
	0x40	1	TRDY timeout
	0x41	1	Retry count
	0x42	2	Reserved


* Assigned by sub-system implementation

SECTION 3: Memory-Mapped Register Space
=======================================

There are two memory-mapped BARs.  BAR0 maps device register space and is
0x2000 in size.  BAR1 maps MSI-X vector and PBA tables and is also 0x2000 in
size, allowing for 256 MSI-X vectors.

All registers are 4 or 8 bytes long.  It is assumed host software will access 4
byte registers with one 4-byte access, and 8 byte registers with either two
4-byte accesses or a single 8-byte access.  In the case of two 4-byte accesses,
access must be lower and then upper 4-bytes, in that order.

BAR0 device register space is organized as follows:

	offset		description
	------------------------------------------------------
	0x0000-0x000f	Bogus registers to catch misbehaving
			drivers.  Writes do nothing.  Reads
			back as 0xDEADBABE.
	0x0010-0x00ff	Test registers
	0x0300-0x03ff	General purpose registers
	0x1000-0x1fff	Descriptor control

Holes in register space are reserved.  Writes to reserved registers do nothing.
Reads to reserved registers read back as 0.

No fancy stuff like write-combining is enabled on any of the registers.

BAR1 MSI-X register space is organized as follows:

	offset		description
	------------------------------------------------------
	0x0000-0x0fff	MSI-X vector table (256 vectors total)
	0x1000-0x1fff	MSI-X PBA table


SECTION 4: Interrupts, DMA, and Endianness
==========================================

PCI Interrupts
--------------

The device supports only MSI-X interrupts.  BAR1 memory-mapped region contains
the MSI-X vector and PBA tables, with support for up to 256 MSI-X vectors.

The vector assignment is:

	vector		description
	-----------------------------------------------------
	0		Command descriptor ring completion
	1		Event descriptor ring completion
	2		Test operation completion
	3		RSVD
	4-255		Tx and Rx descriptor ring completion
			  Tx vector is even
			  Rx vector is odd

A MSI-X vector table entry is 16 bytes:

	field		offset	width	description
	-------------------------------------------------------------
	lower_addr	0x0	4	[31:2] message address[31:2]
					[1:0] Rsvd (4 byte alignment
						    required)
	upper_addr	0x4	4	[31:19] Rsvd
					[14:0] message address[46:32]
	data		0x8	4	message data[31:0]
	control		0xc	4	[31:1] Rsvd
					[0] mask (0 = enable,
						  1 = masked)

Software should install the Interrupt Service Routine (ISR) before any ports
are enabled or any commands are issued on the command ring.

DMA Operations
--------------

DMA operations are used for packet DMA to/from the CPU, command and event
processing.  Command processing includes statistical counters and table dumps,
table insertion/deletion, and more.  Event processing provides an async
notification method for device-originating events.  Each DMA operation has a
set of control registers to manage a descriptor ring.  The descriptor rings are
allocated from contiguous host DMA-able memory and registers specify the rings
base address, size and current head and tail indices.  Software always writes
the head, and hardware always writes the tail.

The higher-order bit of DMA_DESC_COMP_ERR is used to mark hardware completion
of a descriptor.  Software will clear this bit when posting a descriptor to the
ring, and hardware will set this bit when the descriptor is complete.

Descriptor ring sizes must be a power of 2 and range from 2 to 64K entries.
Descriptor rings' base address must be 8-byte aligned.  Descriptors must be
packed within ring.  Each descriptor in each ring must also be aligned on an 8
byte boundary.  Each descriptor ring will have these registers:

	DMA_DESC_xxx_BASE_ADDR, offset 0x1000 + (x * 32), 64-bit, (R/W)
	DMA_DESC_xxx_SIZE, offset 0x1008 + (x * 32), 32-bit, (R/W)
	DMA_DESC_xxx_HEAD, offset 0x100c + (x * 32), 32-bit, (R/W)
	DMA_DESC_xxx_TAIL, offset 0x1010 + (x * 32), 32-bit, (R)
	DMA_DESC_xxx_CTRL, offset 0x1014 + (x * 32), 32-bit, (W)
	DMA_DESC_xxx_CREDITS, offset 0x1018 + (x * 32), 32-bit, (R/W)
	DMA_DESC_xxx_RSVD1, offset 0x101c + (x * 32), 32-bit, (R/W)

Where x is descriptor ring index:

	index		ring
	--------------------
	0		CMD
	1		EVENT
	2		TX (port 0)
	3		RX (port 0)
	4		TX (port 1)
	5		RX (port 1)
	.
	.
	.
	124		TX (port 61)
	125		RX (port 61)
	126		Resv
	127		Resv

Writing BASE_ADDR or SIZE will reset HEAD and TAIL to zero.  HEAD cannot be
written past TAIL.  To do so would wrap the ring.  An empty ring is when HEAD
== TAIL.  A full ring is when HEAD is one position behind TAIL.  Both HEAD and
TAIL increment and modulo wrap at the ring size.

CTRL register bits:

	bit	name		description
	------------------------------------------------------------------------
	[0]	CTRL_RESET	Reset the descriptor ring
	[1:31]	Reserved

All descriptor types share some common fields:

	field			width	description
	-------------------------------------------------------------------
	DMA_DESC_BUF_ADDR	8	Phys addr of desc payload, 8-byte
					aligned
	DMA_DESC_COOKIE		8	Desc cookie for completion matching,
					upper-most bit is reserved
	DMA_DESC_BUF_SIZE	2	Desc payload size in bytes
	DMA_DESC_TLV_SIZE	2	Desc payload total size in bytes
					used for TLVs.  Must be <=
					DMA_DESC_BUF_SIZE.
	DMA_DESC_COMP_ERR	2	Completion status of associated
					desc payload.  High order bit is
					clear on new descs, toggled by
					hw for completed items.

To support forward- and backward-compatibility, descriptor and completion
payloads are specified in TLV format.  Fields are packed with Type=field name,
Length=field length, and Value=field value.  Software will ignore unknown fields
filled in by the switch.  Likewise, the switch will ignore unknown fields
filled in by software.

Descriptor payload buffer is 8-byte aligned and TLVs are 8-byte aligned.  The
value within a TLV is also 8-byte aligned.  The (packed, 8 byte) TLV header is:

	field	width	description
	-----------------------------
	type	4	TLV type
	len	2	TLV value length
	pad	2	Reserved

The alignment requirements for descriptors and TLVs are to avoid unaligned
access exceptions in software.  Note that the payload for each TLV is also
8 byte aligned.

Figure 1 shows an example descriptor buffer with two TLVs.

                  <------- 8 bytes ------->

  8-byte  +––––+  +–––––––––––+–––––+–––––+                     +–+
  align           |   type    | len | pad |    TLV#1 hdr          |
                  +–––––––––––+–––––+–––––+    (len=22)           |
                  |                       |                       |
                  |  value                |    TVL#1 value        |
                  |                       |    (padded to 8-byte  |
                  |                 +–––––+     alignment)        |
                  |                 |/////|                       |
   8-byte +––––+  +–––––––––––+–––––––––––+                       |
   align          |   type    | len | pad |    TLV#2 hdr    DESC_BUF_SIZE
                  +–––––+–––––+–––––+–––––+    (len=2)            |
                  |value|/////////////////|    TLV#2 value        |
                  +–––––+/////////////////|                       |
                  |///////////////////////|                       |
                  |///////////////////////|                       |
                  |///////////////////////|                       |
                  |////////unused/////////|                       |
                  |////////space//////////|                       |
                  |///////////////////////|                       |
                  |///////////////////////|                       |
                  |///////////////////////|                       |
                  +–––––––––––––––––––––––+                     +–+

				fig. 1

TLVs can be nested within the NEST TLV type.

Interrupt credits
^^^^^^^^^^^^^^^^^

MSI-X vectors used for descriptor ring completions use a credit mechanism for
efficient device, PCIe bus, OS and driver operations.  Each descriptor ring has
a credit count which represents the number of outstanding descriptors to be
processed by the driver.  As the device marks descriptors complete, the credit
count is incremented.  As the driver processes those outstanding descriptors,
it returns credits back to the device.  This way, the device knows the driver's
progress and can make decisions about when to fire the next interrupt or not.
When the credit count is zero, and the first descriptors are posted for the
driver, a single interrupt is fired.  Once the interrupt is fired, the
interrupt is disabled (auto-masked*).  In response to the interrupt, the driver
will process descriptors and PIO write a returned credit value for that
descriptor ring.  If the driver returns all credits (the driver caught up with
the device and there is no outstanding work), then the interrupt is unmasked,
but not fired.  If only partial credits are returned, the interrupt remains
masked but the device generates an interrupt, signaling the driver that more
outstanding work is available.

(* this masking is unrelated to to the MSI-X interrupt mask register)

Endianness
----------

Device registers are hard-coded to little-endian (LE).  The driver should
convert to/from host endianess to LE for device register accesses.

Descriptors are LE.  Descriptor buffer TLVs will have LE type and length
fields, but the value field can either be LE or network-byte-order, depending
on context.  TLV values containing network packet data will be in network-byte
order.  A TLV value containing a field or mask used to compare against network
packet data is network-byte order.  For example, flow match fields (and masks)
are network-byte-order since they're matched directly, byte-by-byte, against
network packet data.  All non-network-packet TLV multi-byte values will be LE.

TLV values in network-byte-order are designated with (N).


SECTION 5: Test Registers
=========================

Rocker has several test registers to support troubleshooting register access,
interrupt generation, and DMA operations:

	TEST_REG, offset 0x0010, 32-bit (R/W)
	TEST_REG64, offset 0x0018, 64-bit (R/W)
	TEST_IRQ, offset 0x0020, 32-bit (R/W)
	TEST_DMA_ADDR, offset 0x0028, 64-bit (R/W)
	TEST_DMA_SIZE, offset 0x0030, 32-bit (R/W)
	TEST_DMA_CTRL, offset 0x0034, 32-bit (R/W)

Reads to TEST_REG and TEST_REG64 will read a value equal to twice the last
value written to the register.  The 32-bit and 64-bit versions are for testing
32-bit and 64-bit host accesses.

A vector can be written to TEST_IRQ and the device will generate an interrupt
for that vector.

To test basic DMA operations, allocate a DMA-able host buffer and put the
buffer address into TEST_DMA_ADDR and size into TEST_DMA_SIZE.  Then, write to
TEST_DMA_CTRL to manipulate the buffer contents.  TEST_DMA_CTRL operations are:

	operation		value	description
	-----------------------------------------------------------
	TEST_DMA_CTRL_CLEAR	1	clear buffer
	TEST_DMA_CTRL_FILL	2	fill buffer bytes with 0x96
	TEST_DMA_CTRL_INVERT	4	invert bytes in buffer

Various buffer address and sizes should be tested to verify no address boundary
issue exists.  In particular, buffers that start on odd-8-byte boundary and/or
span multiple PAGE sizes should be tested.


SECTION 6: Ports
================

Physical and Logical Ports
------------------------------------

The switch supports up to 62 physical (front-panel) ports.  Register
PORT_PHYS_COUNT returns the actual number of physical ports available:

	PORT_PHYS_COUNT, offset 0x0304, 32-bit, (R)

In addition to front-panel ports, the switch supports logical ports for
tunnels.

Front-panel ports and logical tunnel ports are mapped into a single 32-bit port
space.  A special CPU port is assigned port 0.  The front-panel ports are
mapped to ports 1-62.  A special loopback port is assigned port 63.  Logical
tunnel ports are assigned ports 0x0001000-0x0001ffff.
To summarize the port assignments:

	port			mapping
	-------------------------------------------------------
	0			CPU port (for packets to/from host CPU)
	1-62			front-panel physical ports
	63			loopback port
	64-0x0000ffff		RSVD
	0x00010000-0x0001ffff	logical tunnel ports
	0x00020000-0xffffffff	RSVD

Physical Port Mode
------------------

Switch front-panel ports operate in a mode.  Currently, the only mode is
OF-DPA.  OF-DPA[1] mode is based on OpenFlow Data Plane Abstraction (OF-DPA)
Abstract Switch Specification, Version 1.0, from Broadcom Corporation.  To
set/get the mode for front-panel ports, see port settings, below.

Port Settings
-------------

Link status for all front-panel ports is available via PORT_PHYS_LINK_STATUS:

	PORT_PHYS_LINK_STATUS, offset 0x0310, 64-bit, (R)

	Value is port bitmap.  Bits 0 and 63 always read 0.  Bits 1-62
	read 1 for link UP and 0 for link DOWN for respective front-panel ports.

Other properties for front-panel ports are available via DMA CMD descriptors:

	Get PORT_SETTINGS descriptor:

		field		width	description
		----------------------------------------------
		PORT_SETTINGS	2	CMD_GET
		PPORT		4	Physical port #

	Get PORT_SETTINGS completion:

		field		width	description
		----------------------------------------------
		PPORT		4	Physical port #
		SPEED		4	Current port interface speed, in Mbps
		DUPLEX		1	1 = Full, 0 = Half
		AUTONEG		1	1 = enabled, 0 = disabled
		MACADDR		6	Port MAC address
		MODE		1	0 = OF-DPA
		LEARNING	1	MAC address learning on port
						1 = enabled
						0 = disabled

	Set PORT_SETTINGS descriptor:

		field		width	description
		----------------------------------------------
		PORT_SETTINGS	2	CMD_SET
		PPORT		4	Physical port #
		SPEED		4	Port interface speed, in Mbps
		DUPLEX		1	1 = Full, 0 = Half
		AUTONEG		1	1 = enabled, 0 = disabled
		MACADDR		6	Port MAC address
		MODE		1	0 = OF-DPA

Port Enable
-----------

Front-panel ports are initially disabled, which means port ingress and egress
packets will be dropped.  To enable or disable a port, use PORT_PHYS_ENABLE:

	PORT_PHYS_ENABLE: offset 0x0318, 64-bit, (R/W)

	Value is bitmap of first 64 ports.  Bits 0 and 63 are ignored
	and always read as 0.  Write 1 to enable port; write 0 to disable it.
	Default is 0.


SECTION 7: Switch Control
=========================

This section covers switch-wide register settings.

Control
-------

This register is used for low level control of the switch.

	CONTROL: offset 0x0300, 32-bit, (W)

	bit	name		description
	------------------------------------------------------------------------
	[0]	CONTROL_RESET	If set, device will perform reset
	[1:31]	Reserved

Switch ID
---------

The switch has a SWITCH_ID to be used by software to uniquely identify the
switch:

	SWITCH_ID: offset 0x0320, 64-bit, (R)

	Value is opaque to switch software and no special encoding is implied.


SECTION 8: Events
=================

Non-I/O asynchronous events from the device are notified to the host using the
event ring.  The TLV structure for events is:

	field		width	description
	---------------------------------------------------
	TYPE		4	Event type, one of:
					1: LINK_CHANGED
					2: MAC_VLAN_SEEN
	INFO		<nest>	Event info (details below)

Link Changed Event
------------------

When link status changes on a physical port, this event is generated.

	field		width	description
	---------------------------------------------------
	INFO		<nest>
	  PPORT		4	Physical port
	  LINKUP	1	Link status:
					0: down
					1: up

MAC VLAN Seen Event
-------------------

When a packet ingresses on a port and the source MAC/VLAN isn't known to the
device, the device will generate this event.  In response to the event, the
driver should install to the device the MAC/VLAN on the port into the bridge
table.  Once installed, the MAC/VLAN is known on the port and this event will
no longer be generated.

	field		width	description
	---------------------------------------------------
	INFO		<nest>
	  PPORT		4	Physical port
	  MAC		6	MAC address
	  VLAN		2	VLAN ID


SECTION 9: CPU Packet Processing
================================

Ingress packets directed to the host CPU for further processing are delivered
in the DMA RX ring.  Likewise, host CPU originating packets destined to egress
on switch ports are scheduled by software using the DMA TX ring.

Tx Packet Processing
--------------------

Software schedules packets for egress on switch ports using the DMA TX ring.  A
TX descriptor buffer describes the packet location and size in host DMA-able
memory, the destination port, and any hardware-offload functions (such as L3
payload checksum offload).  Software then bumps the descriptor head to signal
hardware of new Tx work.  In response, hardware will DMA read Tx descriptors up
to head, DMA read descriptor buffer and packet data, perform offloading
functions, and finally frame packet on wire (network).  Once packet processing
is complete, hardware will writeback status to descriptor(s) to signal to
software that Tx is complete and software resources (e.g. skb) backing packet
can be released.

Figure 2 shows an example 3-fragment packet queued with one Tx descriptor.  A
TLV is used for each packet fragment.

	                                           pkt frag 1
	                                           +–––––––+  +–+
	                                       +–––+       |    |
	                         desc buf      |   |       |    |
	                        +––––––––+     |   |       |    |
	        Tx ring     +–––+        +–––––+   |       |    |
	      +–––––––––+   |   |  TLVs  |         +–––––––+    |
	      |         +–––+   +––––––––+         pkt frag 2   |
	      | desc 0  |       |        +–––––+   +–––––––+    |
	      +–––––––––+       |  TLVs  |     +–––+       |    |
	head+–+         |       +––––––––+         |       |    |
	      | desc 1  |       |        +–––––+   +–––––––+    |pkt
	      +–––––––––+       |  TLVs  |     |                |
	      |         |       +––––––––+     |   pkt frag 3   |
	      |         |                      |   +–––––––+    |
	      +–––––––––+                      +–––+       |    |
	      |         |                          |       |    |
	      |         |                          |       |    |
	      +–––––––––+                          |       |    |
	      |         |                          |       |    |
	      |         |                          |       |    |
	      +–––––––––+                          |       |    |
	      |         |                          +–––––––+  +–+
	      |         |
	      +–––––––––+

				fig 2.

The TLVs for Tx descriptor buffer are:

	field			width	description
	---------------------------------------------------------------------
	PPORT			4	Destination physical port #
	TX_OFFLOAD		1	Hardware offload modes:
					  0: no offload
					  1: insert IP csum (ipv4 only)
					  2: insert TCP/UDP csum
					  3: L3 csum calc and insert
                        	             into csum offset (TX_L3_CSUM_OFF)
                 	                    16-bit 1's complement csum value.
                                	     IPv4 pseudo-header and IP
                        	             already calculated by OS
                  	                   and inserted.
					  4: TSO (TCP Segmentation Offload)
	TX_L3_CSUM_OFF		2	For L3 csum offload mode, the offset,
					from the beginning of the packet,
					of the csum field in the L3 header
	TX_TSO_MSS		2	For TSO offload mode, the
					Maximum Segment Size in bytes
        TX_TSO_HDR_LEN		2	For TSO offload mode, the
					length of ethernet, IP, and
					TCP/UDP headers, including IP
					and TCP options.
	TX_FRAGS		<array>	Packet fragments
	  TX_FRAG		<nest>	Packet fragment
	    TX_FRAG_ADDR	8	DMA address of packet fragment
	    TX_FRAG_LEN		2	Packet fragment length

Possible status return codes in descriptor on completion are:

	DESC_COMP_ERR	reason
	--------------------------------------------------------------------
	0		OK
	-ROCKER_ENXIO	address or data read err on desc buf or packet
			fragment
	-ROCKER_EINVAL	bad pport or TSO or csum offloading error
	-ROCKER_ENOMEM	no memory for internal staging tx fragment

Rx Packet Processing
--------------------

For packets ingressing on switch ports that are not forwarded by the switch but
rather directed to the host CPU for further processing are delivered in the DMA
RX ring.  Rx descriptor buffers are allocated by software and placed on the
ring.  Hardware will fill Rx descriptor buffers with packet data, write the
completion, and signal to software that a new packet is ready.  Since Rx packet
size is not known a-priori, the Rx descriptor buffer must be allocated for
worst-case packet size.  A single Rx descriptor will contain the entire Rx
packet data in one RX_FRAG.  Other Rx TLVs describe and hardware offloads
performed on the packet, such as checksum validation.

The TLVs for Rx descriptor buffer are:

	field		width	description
	---------------------------------------------------
	PPORT		4	Source physical port #
	RX_FLAGS	2	Packet parsing flags:
				  (1 << 0): IPv4 packet
				  (1 << 1): IPv6 packet
				  (1 << 2): csum calculated
				  (1 << 3): IPv4 csum good
				  (1 << 4): IP fragment
				  (1 << 5): TCP packet
				  (1 << 6): UDP packet
				  (1 << 7): TCP/UDP csum good
	RX_CSUM		2	IP calculated checksum:
				  IPv4: IP payload csum
				  IPv6: header and payload csum
				(Only valid is RX_FLAGS:csum calc is set)
	RX_FRAG_ADDR	8	DMA address of packet fragment
	RX_FRAG_MAX_LEN	2	Packet maximum fragment length
	RX_FRAG_LEN	2	Actual packet fragment length after receive

Possible status return codes in descriptor on completion are:

	DESC_COMP_ERR	reason
	--------------------------------------------------------------------
	0		OK
	-ROCKER_ENXIO	address or data read err on desc buf
	-ROCKER_ENOMEM	no memory for internal staging desc buf
	-ROCKER_EMSGSIZE Rx descriptor buffer wasn't big enough to contain
			packet data TLV and other TLVs.


SECTION 10: OF-DPA Mode
======================

OF-DPA mode allows the switch to offload flow packet processing functions to
hardware.  An OpenFlow controller would communicate with an OpenFlow agent
installed on the switch.  The OpenFlow agent would (directly or indirectly)
communicate with the Rocker switch driver, which in turn would program switch
hardware with flow functionality, as defined in OF-DPA.  The block diagram is:

		+–––––––––––––––----–––+
		|        OF            |
		|  Remote Controller   |
		+––––––––+––----–––––––+
		         |
		         |
		+––––––––+–––––––––+
		|       OF         |
		|   Local Agent    |
		+––––––––––––––––––+
		|                  |
		|   Rocker Driver  |
		+––––––––––––––––––+
		    <this spec>
		+––––––––––––––––––+
		|                  |
		|   Rocker Switch  |
		+––––––––––––––––––+

To participate in flow functions, ports must be configure for OF-DPA mode
during switch initialization.

OF-DPA Flow Table Interface
---------------------------

There are commands to add, modify, delete, and get stats of flow table entries.
The commands are issued using the DMA CMD descriptor ring.  The following
commands are defined:

	CMD_ADD:		add an entry to flow table
	CMD_MOD:		modify an entry in flow table
	CMD_DEL:		delete an entry from flow table
	CMD_GET_STATS:		get stats for flow entry

TLVs for add and modify commands are:

	field			width	description
	----------------------------------------------------
	OF_DPA_CMD		2	CMD_[ADD|MOD]
	OF_DPA_TBL		2	Flow table ID
					  0: ingress port
					  10: vlan
					  20: termination mac
					  30: unicast routing
					  40: multicast routing
					  50: bridging
					  60: ACL policy
	OF_DPA_PRIORITY		4	Flow priority
	OF_DPA_HARDTIME		4	Hard timeout for flow
	OF_DPA_IDLETIME		4	Idle timeout for flow
	OF_DPA_COOKIE		8	Cookie

Additional TLVs based on flow table ID:

Table ID 0: ingress port

	field			width	description
	----------------------------------------------------
	OF_DPA_IN_PPORT		4	ingress physical port number
	OF_DPA_GOTO_TBL		2	goto table ID; zero to drop

Table ID 10: vlan

	field			width	description
	----------------------------------------------------
	OF_DPA_IN_PPORT		4	ingress physical port number
	OF_DPA_VLAN_ID		2 (N)	vlan ID
	OF_DPA_VLAN_ID_MASK	2 (N)	vlan ID mask
	OF_DPA_GOTO_TBL		2	goto table ID; zero to drop
	OF_DPA_NEW_VLAN_ID	2 (N)	new vlan ID

Table ID 20: termination mac

	field			width	description
	----------------------------------------------------
	OF_DPA_IN_PPORT		4	ingress physical port number
	OF_DPA_IN_PPORT_MASK	4	ingress physical port number mask
	OF_DPA_ETHERTYPE	2 (N)	must be either 0x0800 or 0x86dd
	OF_DPA_DST_MAC		6 (N)	destination MAC
	OF_DPA_DST_MAC_MASK	6 (N)	destination MAC mask
	OF_DPA_VLAN_ID		2 (N)	vlan ID
	OF_DPA_VLAN_ID_MASK	2 (N)	vlan ID mask
	OF_DPA_GOTO_TBL		2	only acceptable values are
					unicast or multicast routing
					table IDs
	OF_DPA_OUT_PPORT	2	if specified, must be
					controller, set zero otherwise

Table ID 30: unicast routing

	field			width	description
	----------------------------------------------------
	OF_DPA_ETHERTYPE	2 (N)	must be either 0x0800 or 0x86dd
	OF_DPA_DST_IP		4 (N)	destination IPv4 address.
					Must be unicast address
	OF_DPA_DST_IP_MASK	4 (N)	IP mask.  Must be prefix mask
	OF_DPA_DST_IPV6		16 (N)	destination IPv6 address.
					Must be unicast address
	OF_DPA_DST_IPV6_MASK	16 (N)	IPv6 mask. Must be prefix mask
	OF_DPA_GOTO_TBL		2	goto table ID; zero to drop
	OF_DPA_GROUP_ID		4	data for GROUP action must
					be an L3 Unicast group entry

Table ID 40: multicast routing

	field			width	description
	----------------------------------------------------
	OF_DPA_ETHERTYPE	2 (N)	must be either 0x0800 or 0x86dd
	OF_DPA_VLAN_ID		2 (N)	vlan ID
	OF_DPA_SRC_IP		4 (N)	source IPv4. Optional,
					can contain IPv4 address,
					must be completely masked
					if not used
	OF_DPA_SRC_IP_MASK	4 (N)	IP Mask
	OF_DPA_DST_IP		4 (N)	destination IPv4 address.
					Must be multicast address
	OF_DPA_SRC_IPV6		16 (N)	source IPv6 Address. Optional.
					Can contain IPv6 address,
					must be completely masked
					if not used
	OF_DPA_SRC_IPV6_MASK	16 (N)	IPv6 mask.
	OF_DPA_DST_IPV6		16 (N)	destination IPv6 Address. Must
					be multicast address
					Must be multicast address
	OF_DPA_GOTO_TBL		2	goto table ID; zero to drop
	OF_DPA_GROUP_ID		4	data for GROUP action must
					be an L3 multicast group entry

Table ID 50: bridging

	field			width	description
	----------------------------------------------------
	OF_DPA_VLAN_ID		2 (N)	vlan ID
	OF_DPA_TUNNEL_ID	4	tunnel ID
	OF_DPA_DST_MAC		6 (N)	destination MAC
	OF_DPA_DST_MAC_MASK	6 (N)	destination MAC mask
	OF_DPA_GOTO_TBL		2	goto table ID; zero to drop
	OF_DPA_GROUP_ID		4	data for GROUP action must
					be a L2 Interface, L2
					Multicast, L2 Flood,
					or L2 Overlay group entry
					as appropriate
	OF_DPA_TUNNEL_LPORT	4	unicast Tenant Bridging
					flows specify a tunnel
					logical port ID
	OF_DPA_OUT_PPORT	2	data for OUTPUT action,
					restricted to CONTROLLER,
					set to 0 otherwise

Table ID 60: acl policy

	field			width	description
	----------------------------------------------------
	OF_DPA_IN_PPORT		4	ingress physical port number
	OF_DPA_IN_PPORT_MASK	4	ingress physical port number mask
	OF_DPA_ETHERTYPE	2 (N)	ethertype
	OF_DPA_VLAN_ID		2 (N)	vlan ID
	OF_DPA_VLAN_ID_MASK	2 (N)	vlan ID mask
	OF_DPA_VLAN_PCP		2 (N)	vlan Priority Code Point
	OF_DPA_VLAN_PCP_MASK	2 (N)	vlan Priority Code Point mask
	OF_DPA_SRC_MAC		6 (N)	source MAC
	OF_DPA_SRC_MAC_MASK	6 (N)	source MAC mask
	OF_DPA_DST_MAC		6 (N)	destination MAC
	OF_DPA_DST_MAC_MASK	6 (N)	destination MAC mask
	OF_DPA_TUNNEL_ID	4	tunnel ID
	OF_DPA_SRC_IP		4 (N)	source IPv4. Optional,
					can contain IPv4 address,
					must be completely masked
					if not used
	OF_DPA_SRC_IP_MASK	4 (N)	IP Mask
	OF_DPA_DST_IP		4 (N)	destination IPv4 address.
					Must be multicast address
	OF_DPA_DST_IP_MASK	4 (N)	IP Mask
	OF_DPA_SRC_IPV6		16 (N)	source IPv6 Address. Optional.
					Can contain IPv6 address,
					must be completely masked
					if not used
	OF_DPA_SRC_IPV6_MASK	16 (N)	IPv6 mask
	OF_DPA_DST_IPV6		16 (N)	destination IPv6 Address. Must
					be multicast address.
	OF_DPA_DST_IPV6_MASK	16 (N)	IPv6 mask
	OF_DPA_SRC_ARP_IP	4 (N)	source IPv4 address in the ARP
					payload.  Only used if ethertype
					== 0x0806.
	OF_DPA_SRC_ARP_IP_MASK	4 (N)	IP Mask
	OF_DPA_IP_PROTO		1	IP protocol
	OF_DPA_IP_PROTO_MASK	1	IP protocol mask
	OF_DPA_IP_DSCP		1	DSCP
	OF_DPA_IP_DSCP_MASK	1	DSCP mask
	OF_DPA_IP_ECN		1	ECN
	OF_DPA_IP_ECN_MASK		1	ECN mask
	OF_DPA_L4_SRC_PORT	2 (N)	L4 source port, only for
					TCP, UDP, or SCTP
	OF_DPA_L4_SRC_PORT_MASK	2 (N)	L4 source port mask
	OF_DPA_L4_DST_PORT	2 (N)	L4 source port, only for
					TCP, UDP, or SCTP
	OF_DPA_L4_DST_PORT_MASK	2 (N)	L4 source port mask
	OF_DPA_ICMP_TYPE	1	ICMP type, only if IP
					protocol is 1
	OF_DPA_ICMP_TYPE_MASK	1	ICMP type mask
	OF_DPA_ICMP_CODE	1	ICMP code
	OF_DPA_ICMP_CODE_MASK	1	ICMP code mask
	OF_DPA_IPV6_LABEL	4 (N)	IPv6 flow label
	OF_DPA_IPV6_LABEL_MASK	4 (N)	IPv6 flow label mask
	OF_DPA_GROUP_ID		4	data for GROUP action
	OF_DPA_QUEUE_ID_ACTION	1	write the queue ID
	OF_DPA_NEW_QUEUE_ID	1	queue ID
	OF_DPA_VLAN_PCP_ACTION	1	write the VLAN priority
	OF_DPA_NEW_VLAN_PCP	1	VLAN priority
	OF_DPA_IP_DSCP_ACTION	1	write the DSCP
	OF_DPA_NEW_IP_DSCP	1	new DSCP
	OF_DPA_TUNNEL_LPORT	4	restrct to valid tunnel
					logical port, set to 0
					otherwise.
	OF_DPA_OUT_PPORT	2	data for OUTPUT action,
					restricted to CONTROLLER,
					set to 0 otherwise
	OF_DPA_CLEAR_ACTIONS	4	if 1 packets matching flow are
					dropped (all other instructions
					ignored)

TLVs for flow delete and get stats command are:

	field			width	description
	---------------------------------------------------
	OF_DPA_CMD		2	CMD_[DEL|GET_STATS]
	OF_DPA_COOKIE		8	Cookie

On completion of get stats command, the descriptor buffer is written back with
the following TLVs:

	field			width	description
	---------------------------------------------------
	OF_DPA_STAT_DURATION	4	Flow duration
	OF_DPA_STAT_RX_PKTS	8	Received packets
	OF_DPA_STAT_TX_PKTS	8	Transmit packets

Possible status return codes in descriptor on completion are:

	DESC_COMP_ERR	command			reason
	--------------------------------------------------------------------
	0		all			OK
	-ROCKER_EFAULT	all			head or tail index outside
						of ring
	-ROCKER_ENXIO	all			address or data read err on
						desc buf
	-ROCKER_EMSGSIZE GET_STATS		cmd descriptor buffer wasn't
						big enough to contain write-back
						TLVs
	-ROCKER_EINVAL	all			invalid parameters passed in
	-ROCKER_EEXIST	ADD			entry already exists
	-ROCKER_ENOSPC	ADD			no space left in flow table
	-ROCKER_ENOENT	MOD|DEL|GET_STATS	cookie invalid

Group Table Interface
---------------------

There are commands to add, modify, delete, and get stats of group table
entries.  The commands are issued using the DMA CMD descriptor ring.  The
following commands are defined:

	CMD_ADD:		add an entry to group table
	CMD_MOD:		modify an entry in group table
	CMD_DEL:		delete an entry from group table
	CMD_GET_STATS:		get stats for group entry

TLVs for add and modify commands are:

	field			width	description
	-----------------------------------------------------------
	FLOW_GROUP_CMD		2	CMD_[ADD|MOD]
	FLOW_GROUP_ID		2	Flow group ID
	FLOW_GROUP_TYPE		1	Group type:
					  0: L2 interface
					  1: L2 rewrite
					  2: L3 unicast
					  3: L2 multicast
					  4: L2 flood
					  5: L3 interface
					  6: L3 multicast
					  7: L3 ECMP
					  8: L2 overlay
	FLOW_VLAN_ID		2	Vlan ID (types 0, 3, 4, 6)
	FLOW_L2_PORT		2	Port (types 0)
	FLOW_INDEX		4	Index (all types but 0)
	FLOW_OVERLAY_TYPE	1	Overlay sub-type (type 8):
					  0: Flood unicast tunnel
					  1: Flood multicast tunnel
					  2: Multicast unicast tunnel
					  3: Multicast multicast tunnel
	FLOW_GROUP_ACTION		nest
	  FLOW_GROUP_ID		2	next group ID in chain (all
					types except 0)
	  FLOW_OUT_PORT		4	egress port (types 0, 8)
	  FLOW_POP_VLAN_TAG	1	strip outer VLAN tag (type 1
					only)
	  FLOW_VLAN_ID		2	(types 1, 5)
	  FLOW_SRC_MAC		6	(types 1, 2, 5)
	  FLOW_DST_MAC		6	(types 1, 2)

TLVs for flow delete and get stats command are:

	field			width	description
	-----------------------------------------------------------
	FLOW_GROUP_CMD		2	CMD_[DEL|GET_STATS]
	FLOW_GROUP_ID		2	Flow group ID

On completion of get stats command, the descriptor buffer is written back with
the following TLVs:

	field			width	description
	---------------------------------------------------
	FLOW_GROUP_ID		2	Flow group ID
	FLOW_STAT_DURATION	4	Flow duration
	FLOW_STAT_REF_COUNT	4	Flow reference count
	FLOW_STAT_BUCKET_COUNT	4	Flow bucket count

Possible status return codes in descriptor on completion are:

	DESC_COMP_ERR	command			reason
	--------------------------------------------------------------------
	0		all			OK
	-ROCKER_EFAULT	all			head or tail index outside
						of ring
	-ROCKER_ENXIO	all			address or data read err on
						desc buf
	-ROCKER_ENOSPC	GET_STATS		cmd descriptor buffer wasn't
						big enough to contain write-back
						TLVs
	-ROCKER_EINVAL	ADD|MOD			invalid parameters passed in
	-ROCKER_EEXIST	ADD			entry already exists
	-ROCKER_ENOSPC	ADD			no space left in flow table
	-ROCKER_ENOENT	MOD|DEL|GET_STATS	group ID invalid
	-ROCKER_EBUSY	DEL			group reference count non-zero
	-ROCKER_ENODEV	ADD			next group ID doesn't exist



References
==========

[1] OpenFlow Data Plane Abstraction (OF-DPA) Abstract Switch Specification,
Version 1.0, from Broadcom Corporation, February 21, 2014.
