From: Jeff Garzik <jgarzik@pobox.com>
To: Mark Lord <liml@rtr.ca>
Cc: Tejun Heo <htejun@gmail.com>, Alan Cox <alan@lxorguk.ukuu.org.uk>,
IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: SATA "target mode" (or "Channel-to-Channel" comm mode)
Date: Tue, 03 Mar 2009 10:59:43 -0500 [thread overview]
Message-ID: <49AD53EF.5060600@pobox.com> (raw)
In-Reply-To: <49AD409F.6040102@rtr.ca>
Mark Lord wrote:
> Jeff Garzik wrote:
>> Mark Lord wrote:
>>> Guys,
>>>
>>> Within the next couple of weeks, I would like to submit patches
>>> for 2.6.30 for a simple form of what Marvell likes to call "target
>>> mode",
>>> or C2C (channel-to-channel communications).
>>>
>>> This is for sata_mv.
>>>
>>> The question is, how to expose an interface to actually access it?
>>>
>>> Quick background on Marvell C2C:
>>>
>>> 1. C2C is only for Gen2 and Gen2e chipsets.
>>>
>>> 2. Requires a special SATA cross-over (simple twist) cable
>>> between two SATA ports. Ports can be on the same host
>>> adaptor or on separate adaptors and/or machines.
>>>
>>> 3. Each sata_mv port can be either a (0) normal SATA host,
>>> or (1) special SATA C2C initiator, or (2) a SATA target device.
>>>
>>> 4. A Gen2e mode (2) target can connect/communicate with either
>>> a mode (0) host or a mode (1) initiator. I'm not yet sure
>>> whether an older Gen2 target can connect with a mode (0) host.
>>>
>>> 5. Mode (1) initiator appears to relax requirements such as waiting
>>> for a device BUSY bit to clear etc., and is intended for simple
>>> channel-to-channel communications.
>>>
>>> 6. A boot/module parameter seems to be the best way to enable
>>> this feature, as otherwise libata wastes a lot of time and
>>> effort probing for non-existant drives and slowing down
>>> the boot process.
>>>
>>> 7. Initially, all that we want is a way to use two SATA ports
>>> (on the same or different machines) as a simple byte-stream
>>> communications channel, between a mode (1) inititiator
>>> and a mode (2) target. This is used in real-life as a high-speed
>>> local comm channel between halves of split server machines.
>>>
>>> 8. Transparently emulating a SATA drive is possible on Gen2e chips
>>> at least, and perhaps also on Gen2 chips. This is not being
>>> worked on at this time.
>>>
>>> 9. Using two ports in tandem, one mode (0) host and one mode (2) target,
>>> one can construct a quite capable SATA capture/analyzer device
>>> which could be inserted in between any other SATA host and device.
>>> Quite useful, and something I intend to work on later this year.
>>>
>>> So, starting with simple stuff, I want to expose an interface for
>>> point 7 above. The thought is to use netlink for this, on both ends.
>>>
>>> An alternative might be to tie it into the SCSI Target Framework (tgt).
>>> But that is more for full target device emulation than for simple comms.
>>> And SATA is not SCSI, so it could really restrict/prevent us from doing
>>> a full SATA emulation (eg. point 9) in the end.
>>>
>>> Time is short, so I'd like to spend it on something that Jeff would
>>> actually accept. Thus this email.
>>
>> It depends on the task.
>>
>> The miscdev (i.e. chrdev) interface found in
>> drivers/scsi/scsi_tgt_if.c of repo [1] seems pretty generic, simple,
>> small and applicable to portions of the problem presented here... The
>> basic task in scsi_tgt_if's case is just shoveling packets to/from
>> userspace.
> ..
>
> Except it's rather SCSI specific, and the userspace frontend even more so.
> The code expects a SCSI command block, LUN, TAG, and other fields that
> a SATA FIS won't have. Seems clumsy, particularly when we (in theory)
> are trying to decouple libata from SCSI. But if that's the way,
> then I can clumsily wrap each FIS in a fake ATA_16 header or something.
The kernel bits are not terribly SCSI-specific. I'd ignore the userland
bits.
We just have to get the interface right. Even if we "cp scsi_tgt_if.c
ata_tgt_if.c" and then go from there, we should make an effort to create
similar packet push/pull interfaces.
Creating something wildly different would be counterproductive.
>> SATA packet capture: highly useful, but implies _copying_ the packets
>> before passing them on to regular channels. So, does this imply
>> packets will be copied kernel->userspace->kernel ? kernel->kernel?
>> The interface will be vastly different in each case.
> ..
>
> Absolutely, which is why I'm leaving that for (much) later,
> and looking for a simple (userspace) comms method to begin with,
> using the special (non-SATA compliant) "initiator" on one end,
> and a "target" on the other end. This is different from the SATA
> interceptor/emulator configurations.
I would just bang out an interface. Userspace interfaces always wind up
needing some tweaking.
Jeff
next prev parent reply other threads:[~2009-03-03 15:59 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-03 13:47 SATA "target mode" (or "Channel-to-Channel" comm mode) Mark Lord
2009-03-03 14:16 ` Jeff Garzik
2009-03-03 14:37 ` Mark Lord
2009-03-03 15:59 ` Jeff Garzik [this message]
2009-03-03 16:12 ` Mark Lord
2009-03-03 16:16 ` James Bottomley
2009-03-03 16:38 ` Jeff Garzik
2009-03-05 12:15 ` FUJITA Tomonori
2009-03-06 11:34 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49AD53EF.5060600@pobox.com \
--to=jgarzik@pobox.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=htejun@gmail.com \
--cc=liml@rtr.ca \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.