SLOF: vio-vscsi: fixed bug with reported luns

The vscsi-report-luns scans up to 8 devices and returns
a number of found devices and an array of pointers, one per device.
Each pointer points to a null-terminated list of LUNs reported by
a device in a response to REPORT_LUNS SCSI command.

The vscsi-find-disks function uses the result returned vscsi-report-luns
to walk through the lists and probe all the devices. However the loop
through a null terminated list was interrupted on the first iteration.
The patch fixes this bug.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
vio-vscsi: added a proper lun parser

SCSI specification allows LUN to be specified in different formats,
the first 2 bits in 8 bytes LUN define the exact format. At the moment
QEMU uses only 2 formats: 00b for LUN<255 and 01b for bigger LUNs, both
are 2 bytes long and big endian.

However the existing SLOF code treats LUN as a 8 bytes big endian value
what is incorrect. The patch fixes this by adding a function which
parses LUN and returns an error if the format is not supported.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
vio-vscsi: vscsi-report-luns can return 0

In case when vscsi-report-luns returns 0, the loop would go on
for 64K times before realising. Fixing this bug.

Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>