1. 28 10月, 2016 2 次提交
    • M
      spapr_hcall: use spapr_ovec_* interfaces for CAS options · facdb8b6
      Michael Roth 提交于
      Currently we access individual bytes of an option vector via
      ldub_phys() to test for the presence of a particular capability
      within that byte. Currently this is only done for the "dynamic
      reconfiguration memory" capability bit. If that bit is present,
      we pass a boolean value to spapr_h_cas_compose_response()
      to generate a modified device tree segment with the additional
      properties required to enable this functionality.
      
      As more capability bits are added, will would need to modify the
      code to add additional option vector accesses and extend the
      param list for spapr_h_cas_compose_response() to include similar
      boolean values for these parameters.
      
      Avoid this by switching to spapr_ovec_* helpers so we can do all
      the parsing in one shot and then test for these additional bits
      within spapr_h_cas_compose_response() directly.
      
      Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
      Signed-off-by: NMichael Roth <mdroth@linux.vnet.ibm.com>
      Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Reviewed-by: NBharata B Rao <bharata@linux.vnet.ibm.com>
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      facdb8b6
    • M
      spapr_ovec: initial implementation of option vector helpers · b20b7b7a
      Michael Roth 提交于
      PAPR guests advertise their capabilities to the platform by passing
      an ibm,architecture-vec structure via an
      ibm,client-architecture-support hcall as described by LoPAPR v11,
      B.6.2.3. during early boot.
      
      Using this information, the platform enables the capabilities it
      supports, then encodes a subset of those enabled capabilities (the
      5th option vector of the ibm,architecture-vec structure passed to
      ibm,client-architecture-support) into the guest device tree via
      "/chosen/ibm,architecture-vec-5".
      
      The logical format of these these option vectors is a bit-vector,
      where individual bits are addressed/documented based on the byte-wise
      offset from the beginning of the bit-vector, followed by the bit-wise
      index starting from the byte-wise offset. Thus the bits of each of
      these bytes are stored in reverse order. Additionally, the first
      byte of each option vector is encodes the length of the option vector,
      so byte offsets begin at 1, and bit offset at 0.
      
      This is not very intuitive for the purposes of mapping these bits to
      a particular documented capability, so this patch introduces a set
      of abstractions that encapsulate the work of parsing/encoding these
      options vectors and testing for individual capabilities.
      
      Cc: Bharata B Rao <bharata@linux.vnet.ibm.com>
      Signed-off-by: NMichael Roth <mdroth@linux.vnet.ibm.com>
      [dwg: Tweaked double-include protection to not trigger a checkpatch
       false positive]
      Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
      b20b7b7a