Initial import of Microsemi Driver

Change-Id: I431d5f2c18e0b66a84c36273c3d9f0b84f223841

Added in BUCK files for building driver

Change-Id: I70681327f5b89f67e904c45d5974ab393652d51f

Corrected some syntax errors

Change-Id: I11150cc499c212005f80619e3900e747f1c23d96

Updated pom file to clean build

Change-Id: I6613ddc9e6802aa882e716cf04df210249870835

Added in utility functions for EA1000 Init

Change-Id: I51ffe0cf0daf9ffcea0e2479ee9982fcd1755440

Added YMS code to Microsemi Driver

Change-Id: I6f2a14e454c6909bf9e9f6025321c74c98c13c72

Updated driver to work with YMS and YCH

Change-Id: If7dbe3cd5bd1b6f902d09d6b2dc3895605d70f70

Implemented IetfSystemManager as a service and call on YMS as a service

Change-Id: If1c5e8482b1f53f578a3b0b770accd50024111cf

Moved YMS calls over in to Yang Service implementation

Change-Id: I044aad06f1ef7452bc48e88987787a683666cd72

improved unit test for IetfSystemManager

Change-Id: I48fbf831e7e5ca0e1ef3de8288e56da1b5ebb7a4

Major changes to IetfSystemManager to work in live system

Change-Id: I6e3aa118ba422151f314b9a666860d90905c9929

Added in retry mechanism for DeviceDescription to wait for YCH

Change-Id: If8e0f2c2f315ffd6db15627a11382a00217dd262

Added in implementation of MseaSaFiltering and unit tests

Change-Id: I34bf888e0e732bd4664d1fb8ef5abb679b1506fe

Updated driver with unit tests for MseaSaFiltering

Change-Id: I7ea2407a546622ff55d1ab21610c45697546d632

Modified removeFlowRules of Ea1000FlowRuleProgrammable

Change-Id: Ibb4a555f61887a8e6e42af588bb42f7b70f58efb

Added in manager for MseaUniEvc service with unit tests

Change-Id: Idc5853f46051548973f52a0659f7f88982ff960c

Implemented getFlowEntries() for EVCs from EA1000

Change-Id: Ie85dadfa7760f0b30a9bdf6ccd09cca9f097fff9

Added in translation of FlowRules in to EVC on EA1000

Change-Id: Icfb65171c3300c96b3ca4e18cbd327f0ed2190be

Added in handling of FlowRule deletion including complex ceVlanMaps

Change-Id: I7fd0bb0ef04d1b40e4b7d6a6db7f7ee662329780

Updated Service entries for new onos-yang-tools

Change-Id: I44e655202f3a45073e1e16f83737caed6e01afa8

Revert "Updated Service entries for new onos-yang-tools"

This reverts commit 642b550ef1de12ed59bad2eaa3a2da414d2e5e59.

Improved timeout mechanism for YANG model loading

Change-Id: If744ecd206372e822edf2b736c83226321a12256

Minor edits of EVC creation

Change-Id: Ib0a4763deaf6dce37625ba77f5095b39cd98272d

Added in CustomEvc and supporting classes

Change-Id: Iad60eb1bcd48d2aec55b894b2d419b51852c3b2f

Created CeVlanUtils to resolve loading problem

Change-Id: I0d63931ad2c5ad2725861ebc7dccc4d5fe7b9298

Modified startup check

Change-Id: I6e6bcfa7e615044cb08fe7ee2f8a6c8b89aabb21

Modified handlin of flow rules

Change-Id: I965a79c23298866122aeb94c6d9d584aafee3bd5

Fixed problem with ceVlanMap

Change-Id: If1458c35d0b95b5b25b6636f098292f9e91c06c6

Minor Pom edits

Change-Id: I5cefb18674aa04b1f50bd7e2306260c1c3ad3814

Commented out extension references in YANG files to avoid onos-yang-tools problems

Change-Id: I32fdb34c4f476f495fe28e75d0f410aaf14e2ec1

Corrected error in removing 0 in CeVlanMapUtils

Change-Id: I8cd1fd02788b81c2613364d5639ef6e090057f80

Changes in YMS to accomodate EA1000 driver

Change-Id: I6ae2b9bd2be49eae8d4ad2f929dfe3214c514550
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/fpga-internal.yang b/drivers/microsemi/ea1000yang/src/main/yang/fpga-internal.yang
new file mode 100644
index 0000000..87fabb1
--- /dev/null
+++ b/drivers/microsemi/ea1000yang/src/main/yang/fpga-internal.yang
@@ -0,0 +1,266 @@
+module fpga-internal {
+
+	/*** NAMESPACE / PREFIX DEFINITION ***/
+
+	namespace "http://www.microsemi.com/fpga-int";
+	prefix "fpga-int";
+
+	/*** META INFORMATION ***/
+
+	organization
+	"Microsemi Inc., FTD Division";
+
+	contact
+	"Web URL: http://www.microsemi.com/
+	E-mail: info@microsemi.com
+	Postal: Microsemi Corporation Corporate Headquarters
+	One Enterprise Aliso Viejo,
+	CA 92656
+	U.S.A.
+	Phone: +1 949 380 6100
+	Fax: +1 949 215-4996";
+
+	description
+	"This YANG module add internal procedures to access FPAA hardware
+
+	Copyright 2015 Microsemi Inc.
+	All rights reserved.";
+
+	revision "2015-11-30" {
+		description
+		"Initial version - Sean Condon, Microsemi";
+	}
+
+	typedef sixteen-bit-hex {
+		type string {
+			pattern '0x[0-9a-fA-F]{4}';
+		}
+
+		description
+		"A 16-bit address represented as a hexadecimal number";
+	}
+
+	typedef thirtytwo-bit-hex {
+		type string {
+			pattern '0x[0-9a-fA-F]{8}';
+		}
+
+		description
+		"A 32-bit address represented as a hexadecimal number";
+	}
+	
+	typedef thirtytwobit-data {
+		type string {
+			pattern '([0-9a-fA-F]{8}(:[0-9a-fA-F]{8})*)?';
+		}
+
+		description
+		"A set of 32 bit data values represented as colon separated 
+		hex strings e.g. 'A1B2C3D4:B2C3D4F5:C3D4E5F6'";
+	}
+
+	typedef select-ram-enum {
+		type enumeration {
+			enum pkt-store-sel {value 0;}
+			enum probe-store-sel {value 1;}
+			enum xconn-store-sel {value 2;}
+			enum rmep-err-store-sel {value 3;}
+			enum rx-lmep-map-sel {value 4;}
+			enum cpu-sys-capt-fifo-sel {value 5;}
+			enum rmep-ram-sel {value 6;}
+			enum xconn-ram-sel {value 7;}
+			enum rmep-err-ram-sel {value 8;}
+			enum tx-lmep-map-sel {value 9;}
+			enum ext-sram-sel {value 10;}
+			enum car-rmac-sel {value 11;}
+			enum sys-mac-sel {value 12;}
+			enum rx-carr-data-fifo-sel {value 13;}
+			enum line-stats-ram-sel {value 14;}
+			enum cpu-sys-capt-info-fifo-sel {value 15;}
+			enum vlan-info-ram-sel {value 16;}
+			enum lbm-store-sel {value 17;}
+			enum lbr-ram-sel {value 18;}
+			enum mc-lbr-store-sel {value 19;}
+			enum port-mac-ram-sel {value 20;}
+			enum pm-db-ram-sel {value 22;}
+			enum tx-lb-ram-sel {value 24;}
+			enum tlv-ram-sel {value 25;}
+			enum cpu-capt-fifo-sel {value 26;}
+			enum cpu-capt-info-fifo-sel {value 27;}
+			enum policer-cfg-ram-sel {value 28;}
+			enum policer-ctxt-ram-sel {value 29;}
+			enum cpu-sys-tx-ram-sel {value 30;}
+			enum policer-stats-ram-sel {value 31;}
+		}
+	}
+	
+	
+	container fpga-internal {
+		presence "Supports FPGA direct access";
+	}
+	
+	rpc read-registers {
+
+		description "Method to read directly from hardware registers";
+		input {
+			choice hex-or-dec {
+				
+				description "Enter the starting address in either decimal (0-65535) 
+						or hexadecimal (preceeded with 0x)";
+				mandatory true;
+
+				case hex {
+					leaf start-address-hex {
+						type sixteen-bit-hex;
+					}
+				}
+
+				case decimal {
+					leaf start-address-dec {
+						type uint16;
+					}
+				}
+			}
+
+			leaf num-locations {
+				type uint8 {
+					range 1..max;
+				}
+				description "The number of following locations (addresses) to read from";
+				default 1;
+			}
+		}
+
+		output {
+            anyxml data {
+				description "A set of 32 bit data values represented 
+						as colon separated 8 character hexadecimal values";
+			}
+		}
+	}
+	
+
+	rpc write-registers {
+
+		description "Method to write directly to hardware registers.
+				If a number of data values are given then subsequent
+				locations are written to";
+		input {
+			choice hex-or-dec {
+				
+				description "Enter the starting address in either decimal (0-65535) 
+						or hexadecimal (preceeded with 0x)";
+				
+				case hex {
+					leaf start-address-hex {
+						type sixteen-bit-hex;
+					}
+				}
+
+				case decimal {
+					leaf start-address-dec {
+						type uint16;
+					}
+				}
+			}
+
+			leaf value-hex-32 {
+				type thirtytwobit-data;
+				description "A set of 32 bit data values represented 
+						as colon separated 8 character hexadecimal values
+						e.g. ffffffff:ffffffff:ffffffff
+						The number of locations written to will be 
+						determinted by the number of such values given";
+			}
+		}
+	}
+
+	rpc read-ram {
+
+		description "Method to read directly from hardware RAM";
+		input {
+			leaf ram {
+				type select-ram-enum;
+				mandatory true;
+				description "The type of RAM to read from";
+			}
+			
+			choice hex-or-dec {
+				
+				description "Enter the starting address in either decimal (0-65535) 
+						or hexadecimal (preceeded with 0x)";
+				mandatory true;
+
+				case hex {
+					leaf start-address-hex {
+						type thirtytwo-bit-hex;
+					}
+				}
+
+				case decimal {
+					leaf start-address-dec {
+						type uint32;
+					}
+				}
+			}
+			
+			leaf num-locations {
+				type uint8 {
+					range 1..max;
+				}
+				description "The number of following locations (addresses) to read from";
+				default 1;
+			}
+		}
+
+		output {
+            anyxml data {
+				description "A set of 32 bit data values represented 
+						as colon separated 8 character hexadecimal values";
+			}
+		}
+	}
+
+	rpc write-ram {
+
+		description "Method to write directly to RAM registers.
+				If a number of data values are given then subsequent
+				locations are written to";
+		input {
+			leaf ram {
+				type select-ram-enum;
+				mandatory true;
+				description "The type of RAM to read from";
+			}
+
+			choice hex-or-dec {
+				
+				description "Enter the starting address in either decimal (0-65535) 
+						or hexadecimal (preceeded with 0x)";
+				mandatory true;
+				
+				case hex {
+					leaf start-address-hex {
+						type thirtytwo-bit-hex;
+					}
+				}
+
+				case decimal {
+					leaf start-address-dec {
+						type uint32;
+					}
+				}
+			}
+
+			leaf value-hex-32 {
+				type thirtytwobit-data;
+				description "A set of 32 bit data values represented 
+						as colon separated 8 character hexadecimal values
+						e.g. ffffffff:ffffffff:ffffffff
+						The number of locations written to will be 
+						determinted by the number of such values given";
+			}
+		}
+	}
+
+}
\ No newline at end of file