sdm: Implement getDisplayIdentificationData

* Implement call flow from client to display interface.

* Use display interface to query EDID blob from Connector information
  and return to client alongside pre-established port information from
  sde-drm during display creation.

* Create EDID blob for Null Display (QMAA) to represent a 1920x1080
  60fps display with panel name "Null Display" and port corresponding to
  either builtin or external, depending on DisplayNull class instantiated.

* Introduce kErrorDriverData as a display interface error to represent
  situations in which expected data from the driver is missing.
  Currently this applied to EDID blob for all physical panels.

* Update UnregisterDisplay API to allow cleanup of token via sde-drm.

Change-Id: I5661f7bc0a5a68cdffa0cad3fe2351baa647012c
CRs-Fixed: 2380873
diff --git a/libdrmutils/drm_interface.h b/libdrmutils/drm_interface.h
index 4a47469..d0f1b81 100644
--- a/libdrmutils/drm_interface.h
+++ b/libdrmutils/drm_interface.h
@@ -612,6 +612,7 @@
   bool is_wb_ubwc_supported;
   uint32_t topology_control;
   bool dyn_bitclk_support;
+  std::vector<uint8_t> edid;
 };
 
 // All DRM Connectors as map<Connector_id , connector_info>
@@ -631,6 +632,7 @@
   uint32_t crtc_id;
   uint32_t crtc_index;
   uint32_t encoder_id;
+  uint8_t hw_port;
 };
 
 enum DRMPPFeatureID {
@@ -922,12 +924,12 @@
    * [output]: DRMDisplayToken - CRTC and Connector id's for the display.
    * [return]: 0 on success, a negative error value otherwise.
    */
-  virtual int RegisterDisplay(int32_t display_id, DRMDisplayToken *tok) = 0;
+  virtual int RegisterDisplay(int32_t display_id, DRMDisplayToken *token) = 0;
 
   /* Client should invoke this interface on display disconnect.
    * [input]: DRMDisplayToken - identifier for the display.
    */
-  virtual void UnregisterDisplay(const DRMDisplayToken &token) = 0;
+  virtual void UnregisterDisplay(DRMDisplayToken *token) = 0;
 
   /*
    * Creates and returns an instance of DRMAtomicReqInterface corresponding to a display token