Hello Ravi Kumar,

For: Now the issue is, The same GUID cannot be installed more than once onto 
the same handle (Controller handle).
So to support 2nd instance we need to create new device path (virtual device 
path) for that.
Yes. A new handled is needed for the ExtScsiPassThru protocol logical instance.

For: Once more issue is, how do we associate this newly created device path and 
SCSI PassThru instance with actual controller . ?
I think we can either:
Use OpenProtocol() on behalf of the new handle with an attribute of 
BY_CHILD_CONTROLLER to create a parent-child relationship.
Or use device path (append nodes after the actual controller’s device path when 
constructing the device path of the new handle)
to associate them.

For: I dont think, because if any driver supports only Instance with 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL bit set, can't they create child 
handles ??
As far as i know, Logical or Physical Instances are no where related to media 
access protocols.
Per my understanding, the media device drivers in edk2 are written in a manner 
to only produce media access protocols upon logical instance of the PassThru 
protocols.
Some examples are:
MdeModulePkg\Bus\Ata\AtaBusDxe\AtaBus.c - Function 
AtaBusDriverBindingSupported()
MdeModulePkg\Bus\Scsi\ScsiDiskDxe\ScsiDisk.c - Function 
DetermineInstallBlockIo()

For: Yes user can get the list of EFI_EXT_SCSI_PASS_THRU_PROTOCOL instances by 
querying, but how the user can relate a particular instance with a controller. 
? Because the 2nd of SCSI PassThru is created on new device path.(which will 
not have any other protocols, other than device path and ext scsi pass thru).
In my opinion, the device path together with the attribute of the PassThru 
protocol instance will be sufficient for consumers.
The physical one will be used for device management, while the logical one will 
be used to further produce upper-layer protocols.


Best Regards,
Hao Wu

From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Ravi 
Kumar Siadri
Sent: Monday, July 08, 2019 4:36 PM
To: Wu, Hao A
Cc: devel@edk2.groups.io
Subject: Re: [edk2-devel] ExtScsiPassThru support for Logical SCSI devices

Hi Hao Wu,

If a Controller supports both Logical and Physical Devices, as per spec we need 
to create 2 instances.
1. Instance with EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL bit set.
2.  Instance with EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL bit set.

And Each EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance must have an associated 
device path.

Now the issue is, The same GUID cannot be installed more than once onto the 
same handle (Controller handle).
So to support 2nd instance we need to create new device path (virtual device 
path) for that.

Once more issue is, how do we associate this newly created device path and SCSI 
PassThru instance with actual controller . ?


The logical protocol instance is used to produce media access protocols (like 
BlockIO protocol). Some physical HW may not be visible/accessible (e.g. HW used
for data backup, depending on the RAID configuration) by this logical protocol 
instance. The physical one is used to directly send commands to all the 
managing devices.

I dont think, because if any driver supports only Instance with 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL bit set, can't they create child 
handles ??

As far as i know, Logical or Physical Instances are no where related to media 
access protocols. Even without SCSI passthru protocol on controller handle 
also, Block Io protocol can be installed on Controller Child devices. (Its the 
uefi driver wish, how it passes commands to the Child's of controller). Logical 
Instance is to interact with Logical Device and Physical Instance is to 
interact with Physical devices as per spec.

Users can always use the EFI Boot Service 'LocateHandleBuffer' to get all the 
EFI_EXT_SCSI_PASS_THRU_PROTOCOL instances. Then, users can evaluate each 
instance to see if it is the one they needed.

Yes user can get the list of EFI_EXT_SCSI_PASS_THRU_PROTOCOL instances by 
querying, but how the user can relate a particular instance with a controller. 
? Because the 2nd of SCSI PassThru is created on new device path.(which will 
not have any other protocols, other than device path and ext scsi pass thru).

Thanks,
Ravi Kumar


On Mon, Jul 8, 2019 at 8:39 AM Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>> wrote:
Hello Ravi Kumar,

May I know the specific issue you met when 2 ExtScsiPassThru instances are
provided for the device?

For some of your previous questions:

•         “Any background why EFI_EXT_SCSI_PASS_THRU_PROTOCOL needed 2 
instances ?”
The logical protocol instance is used to produce media access protocols (like
BlockIO protocol). Some physical HW may not be visible/accessible (e.g. HW used
for data backup, depending on the RAID configuration) by this logical protocol
instance.

The physical one is used to directly send commands to all the managing devices.


•         “How User locates the Instance with 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL bit set and Instance with 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL bit set. ??”
Users can always use the EFI Boot Service 'LocateHandleBuffer' to get all the
EFI_EXT_SCSI_PASS_THRU_PROTOCOL instances. Then, users can evaluate each
instance to see if it is the one they needed.

Best Regards,
Hao Wu

From: Ravi Kumar Siadri 
[mailto:siadriravikumaru...@gmail.com<mailto:siadriravikumaru...@gmail.com>]
Sent: Sunday, July 07, 2019 2:58 PM
To: Wu, Hao A; stephano
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Subject: Re: [edk2-devel] ExtScsiPassThru support for Logical SCSI devices

Hi All,

Can somebody, comment on this.?

Have anyone tried supporting ExtScsiPassThru for both Logical and Physical 
devices ??

To avoid 2 instances and creation of 2 device paths here, my proposal is
1. To filter the Logical and Physical devices, we can add a parameter in 
GetNextTartget() function to inform RAID Driver which type of targets the user 
is looking for. (Physical or Logical).
2. To know what type of device connected at that particular Target and LUN 
combination, we can add one more service like.. GetDeviceType() to inform the 
top level user (like UEFI applications/other drivers), to which device he is 
sending a command.

I feel this proposal works well and clear, Please let me know if i am missing 
anything here.

Thanks,
Ravi Kumar


On Fri, Jun 14, 2019 at 11:21 AM Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>> wrote:
Hello Ravi Kumar,
From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> 
[mailto:devel@edk2.groups.io<mailto:devel@edk2.groups.io>] On Behalf Of Ravi 
Kumar Siadri
Sent: Thursday, June 13, 2019 4:18 PM
To: Wu, Hao A
Cc: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Subject: Re: [edk2-devel] ExtScsiPassThru support for Logical SCSI devices

Hi Wu Hao A,

Thanks for the response.
I have added my comments in line.

Thanks,
Ravi Kumar




On Wed, Jun 12, 2019 at 1:26 PM Wu, Hao A 
<hao.a...@intel.com<mailto:hao.a...@intel.com>> wrote:
Hello Ravi Kumar,

Inline comments below:

From: devel@edk2.groups.io<mailto:devel@edk2.groups.io> 
[mailto:devel@edk2.groups.io<mailto:devel@edk2.groups.io>] On Behalf Of Ravi 
Kumar Siadri
Sent: Wednesday, June 12, 2019 12:01 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Subject: Re: [edk2-devel] ExtScsiPassThru support for Logical SCSI devices

Hi,

Can someone help me in clarifying my queries ??

Thanks,
Ravi Kumar

On Mon, Jun 10, 2019 at 3:55 PM Ravi Kumar Siadri 
<siadriravikumaru...@gmail.com<mailto:siadriravikumaru...@gmail.com>> wrote:
Hi all,

I have couple of queries regarding the 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL attribute support in 
EFI_EXT_SCSI_PASS_THRU_PROTOCOL.

1.
The Attributes field of the EFI_EXT_SCSI_PASS_THRU_PROTOCOL interface tells if 
the interface is for physical SCSI devices or logical SCSI devices. Drivers for 
non-RAID SCSI controllers will set both the 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL, and the 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL bits.

If the Drivers is for non-RAID SCSI controllers why to set the 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL bit. Will there be any case that 
non-RAID SCSI controllers have Logical devices connected to it ??

Per my understanding, every partition on a physical HW device will be treated
as a logical device by the firmware.

So for non-RAID case, both bits will be set for the PassThru protocol produced
for the physical device.

Ravi:
As far as i know RAID controller will treat a partition/drive as logical device 
only if has RIS (raid information sector) information in it.  So i don't think 
partition is treated as logical device.

Agree.
Then for the non-RAID case, the hardware is considered as a physical device and 
a logical one at the same time.
Since media access protocols like the BlockIO protocol will be produced upon 
the logical instance of the PassThru protocol, it is the reason that both bits 
are set for this case.
(Refer to function DetermineInstallBlockIo() at 
MdeModulePkg\Bus\Scsi\ScsiDiskDxe\ScsiDisk.c)

2.
Drivers for RAID controllers that allow access to the physical devices and 
logical devices will produce two EFI_EXT_SCSI_PASS_THRU_PROTOCOL interfaces:
One with the just the EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL bit set and 
another with just the EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL bit set. One 
interface can be used to access the physical devices attached to the RAID 
controller, and the other can be used to access the logical devices attached to 
the RAID controller for its current configuration.

Any background why EFI_EXT_SCSI_PASS_THRU_PROTOCOL needed 2 instances ? why 
can't we install attributes EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL and 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL on same Instance ??
How User locates the Instance with EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL 
bit set and Instance with EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL bit set. ??

UEFI spec allows RAID drivers to only produce one PassThru protocol interface
with just the XXX_PASS_THRU_LOGICAL bit set when the RAID controller select to
not allow direct access to the underlying physical devices.

          Ravi:
If the RAID Driver supports only Logical or Physical Devices then it is fine 
creating only 1 instance and not allowing other devices which Bit is not set. 
(either  EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL or 
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL).
But if the RAID driver supports both the Logical and Physical Devices, then we 
have to need 2 instances as per spec. This is going to be an over head, while 
locating instances by the user who want to send commands to Target devices 
connected to RAID controller.
Since each EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance must have an associated 
device path. Only 1 instance can be installed on that particular RAID 
controller handle since the GUID is same for both the instances.
If our intention is to filter the Logical and Physical devices then, we can add 
a parameter in GetNextTartget() function to inform RAID Driver which type of 
targets the user is looking for. (Physical or Logical).
 Right ??

My take is that the producer of the physical and logical PassThru protocol may 
not be the same vender (or driver).
The logical instance (which determines the configuration of the RAID) might 
have a common logic that applies to common using cases.
The logical one will be used to produce media access protocols, some actual HW 
may not be accessible (e.g. used for data backup) by this PassThru protocol 
instance.
While the physical one can be used to send commands to the underlying device 
for purpose like health/status check or getting device information.
However, I am not an expect for RAID, hope someone else can help to provide 
comments.

Thanks,
Ravi Kumar



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43605): https://edk2.groups.io/g/devel/message/43605
Mute This Topic: https://groups.io/mt/32007447/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to