05 Jun, 2014

1 commit

  • Pull sound updates from Takashi Iwai:
    "At this time, majority of changes come from ASoC world while we got a
    few new drivers in other places for FireWire and USB. There have been
    lots of ASoC core cleanups / refactoring, but very little visible to
    external users.

    ASoC:
    - Support for specifying aux CODECs in DT
    - Removal of the deprecated mux and enum macros
    - More moves towards full componentisation
    - Removal of some unused I/O code
    - Lots of cleanups, fixes and enhancements to the davinci, Freescale,
    Haswell and Realtek drivers
    - Several drivers exposed directly in Kconfig for use with
    simple-card
    - GPIO descriptor support for jacks
    - More updates and fixes to the Freescale SSI, Intel and rsnd drivers
    - New drivers for Cirrus CS42L56, Realtek RT5639, RT5642 and RT5651
    and ST STA350, Analog Devices ADAU1361, ADAU1381, ADAU1761 and
    ADAU1781, and Realtek RT5677

    HD-audio:
    - Clean up Dell headset quirks
    - Noise fixes for Dell and Sony laptops
    - Thinkpad T440 dock fix
    - Realtek codec updates (ALC293,ALC233,ALC3235)
    - Tegra HD-audio HDMI support

    FireWire-audio:
    - FireWire audio stack enhancement (AMDTP, MIDI), support for
    incoming isochronous stream and duplex streams with timestamp
    synchronization
    - BeBoB-based devices support
    - Fireworks-based device support

    USB-audio:
    - Behringer BCD2000 USB device support

    Misc:
    - Clean up of a few old drivers, atmel, fm801, etc"

    * tag 'sound-3.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (480 commits)
    ASoC: Fix wrong argument for card remove callbacks
    ASoC: free jack GPIOs before the sound card is freed
    ALSA: firewire-lib: Remove a comment about restriction of asynchronous operation
    ASoC: cache: Fix error code when not using ASoC level cache
    ALSA: hda/realtek - Fix COEF widget NID for ALC260 replacer fixup
    ALSA: hda/realtek - Correction of fixup codes for PB V7900 laptop
    ALSA: firewire-lib: Use IEC 61883-6 compliant labels for Raw Audio data
    ASoC: add RT5677 CODEC driver
    ASoC: intel: The Baytrail/MAX98090 driver depends on I2C
    ASoC: rt5640: Add the function "get_clk_info" to RL6231 shared support
    ASoC: rt5640: Add the function of the PLL clock calculation to RL6231 shared support
    ASoC: rt5640: Add RL6231 class device shared support for RT5640, RT5645 and RT5651
    ASoC: cache: Fix possible ZERO_SIZE_PTR pointer dereferencing error.
    ASoC: Add helper functions to cast from DAPM context to CODEC/platform
    ALSA: bebob: sizeof() vs ARRAY_SIZE() typo
    ASoC: wm9713: correct mono out PGA sources
    ALSA: synth: emux: soundfont.c: Cleaning up memory leak
    ASoC: fsl: Remove dependencies of boards for SND_SOC_EUKREA_TLV320
    ASoC: fsl-ssi: Use regmap
    ASoC: fsl-ssi: reorder and document fsl_ssi_private
    ...

    Linus Torvalds
     

29 May, 2014

1 commit

  • Undo a feature introduced in v3.14 by commit fcd46b34425d
    "firewire: Enable remote DMA above 4 GB". That change raised the
    minimum address at which protocol drivers and user programs can register
    for request reception from 0x0001'0000'0000 to 0x8000'0000'0000.
    It turned out that at least one vendor-specific protocol exists which
    uses lower addresses: https://bugzilla.kernel.org/show_bug.cgi?id=76921

    For the time being, revert most of commit fcd46b34425d so that affected
    protocols work like with kernel v3.13 and before. Just keep the valid
    documentation parts from the regressing commit, and the ability to
    identify controllers which could be programmed to accept >32 bit
    physical DMA addresses. The rest of fcd46b34425d should probably be
    brought back as an optional instead of default feature.

    Reported-by: Fabien Spindler
    Cc: # 3.14+
    Signed-off-by: Stefan Richter

    Stefan Richter
     

26 May, 2014

1 commit

  • In post commit, a quirk of this firmware about transactions is reported.
    This commit apply a workaround for this quirk.

    They often fail transactions due to gap_count mismatch. This state is changed
    by generating bus reset.

    The fw_schedule_bus_reset() is an exported symbol in firewire-core. But there
    are no header for public. This commit moves its prototype from
    drivers/firewire/core.h to include/linux/firewire.h.

    This mismatch still affects bus management before generating this bus reset.
    It still takes a time to call driver's probe() because transactions are still
    often failed.

    Signed-off-by: Takashi Sakamoto
    Signed-off-by: Takashi Iwai

    Takashi Sakamoto
     

20 Jan, 2014

1 commit

  • This makes all of a machine's memory accessible to remote debugging via
    FireWire, using the physical response unit (i.e. RDMA) of OHCI-1394 link
    layer controllers.

    This requires actual support by the controller. The only ones currently
    known to support it are Agere/LSI FW643. Most if not all other OHCI-1394
    controllers do not implement the optional Physical Upper Bound register.
    With them, RDMA will continue to be limited to the lowermost 4 GB.

    firewire-ohci's startup message in the kernel log is augmented to tell
    whether the controller does expose more than 4 GB to RDMA.

    While OHCI-1394 allows for a maximum Physical Upper Bound of
    0xffff'0000'0000 (near 256 TB), this implementation sets it to
    0x8000'0000'0000 (128 TB) in order to avoid interference with applications
    that require interrupt-served asynchronous request reception at
    respectively low addresses.

    Note, this change does not switch remote DMA on. It only increases the
    range of remote access to all memory (instead of just 4 GB) whenever
    remote DMA was switched on by other means. The latter is achieved by
    setting firewire-ohci's remote_dma parameter, or if the physical DMA
    filter is opened through firewire-sbp2.

    Derived from patch "firewire: Enable physical DMA above 4GB" by
    Peter Hurley from March 27, 2013.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

25 May, 2012

1 commit

  • Pull IEEE 1394 (FireWire) subsystem updates from Stefan Richter:

    - Fix mismatch between DMA mapping direction (was wrong) and DMA
    synchronization direction (was correct) of isochronous reception
    buffers of userspace drivers if vma-mapped for R/W access. For
    example, libdc1394 was affected.

    - more consistent retry stategy in device discovery/ rediscovery, and
    improved failure diagnostics

    - various small cleanups, e.g. use SCSI layer's DMA mapping API in
    firewire-sbp2

    * tag 'firewire-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394:
    firewire: sbp2: document the absence of alignment requirements
    firewire: sbp2: remove superfluous blk_queue_max_segment_size() call
    firewire: sbp2: use scsi_dma_(un)map
    firewire: sbp2: give correct DMA device to scsi framework
    firewire: core: fw_device_refresh(): clean up error handling
    firewire: core: log config rom reading errors
    firewire: core: log error in case of failed bus manager lock
    firewire: move rcode_string() to core
    firewire: core: improve reread_config_rom() interface
    firewire: core: wait for inaccessible devices after bus reset
    firewire: ohci: omit spinlock IRQ flags where possible
    firewire: ohci: correct signedness of a local variable
    firewire: core: fix DMA mapping direction
    firewire: use module_pci_driver

    Linus Torvalds
     

10 May, 2012

1 commit

  • When writing a firewire driver that doesn't deal with struct fw_device
    objects (e.g. it only publishes FireWire units and doesn't subscribe to
    them), you likely need to keep referenced to struct fw_card objects so
    that you can send messages to other nodes. This patch moves
    fw_card_put(), fw_card_get() and fw_card_release() into the public
    include/linux/firewire.h header instead of drivers/firewire/core.h, and
    adds EXPORT_SYMBOL_GPL(fw_card_release).

    The firewire-sbp-target module requires these so it can keep a reference
    to the fw_card object in order that it can fetch ORBs to execute and
    read/write related data and status information.

    Signed-off-by: Chris Boot
    Acked-by: Stefan Richter
    Cc: Clemens Ladisch
    Signed-off-by: Nicholas Bellinger

    Chris Boot
     

18 Apr, 2012

1 commit

  • Seen with recent libdc1394: If a client mmap()s the buffer of an
    isochronous reception buffer with PROT_READ|PROT_WRITE instead of just
    PROT_READ, firewire-core sets the wrong DMA mapping direction during
    buffer initialization.

    The fix is to split fw_iso_buffer_init() into allocation and DMA mapping
    and to perform the latter after both buffer and DMA context were
    allocated. Buffer allocation and context allocation may happen in any
    order, but we need the context type (reception or transmission) in order
    to set the DMA direction of the buffer.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

19 Mar, 2012

1 commit

  • Extend the kernel and userspace APIs to allow reporting all currently
    completed isochronous packets, even if the next interrupt packet has not
    yet been reached. This is required to determine the status of the
    packets at the end of a paused or stopped stream, and useful for more
    precise synchronization of audio streams.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     

23 Feb, 2012

1 commit

  • Associate all log messages from firewire-core with the respective card
    because some people have more than one card. E.g.
    firewire_ohci 0000:04:00.0: added OHCI v1.10 device as card 0, 8 IR + 8 IT contexts, quirks 0x0
    firewire_ohci 0000:05:00.0: added OHCI v1.10 device as card 1, 8 IR + 8 IT contexts, quirks 0x0
    firewire_core: created device fw0: GUID 0814438400000389, S800
    firewire_core: phy config: new root=ffc1, gap_count=5
    firewire_core: created device fw1: GUID 0814438400000388, S800
    firewire_core: created device fw2: GUID 0001d202e06800d1, S800
    turns into
    firewire_ohci 0000:04:00.0: added OHCI v1.10 device as card 0, 8 IR + 8 IT contexts, quirks 0x0
    firewire_ohci 0000:05:00.0: added OHCI v1.10 device as card 1, 8 IR + 8 IT contexts, quirks 0x0
    firewire_core 0000:04:00.0: created device fw0: GUID 0814438400000389, S800
    firewire_core 0000:04:00.0: phy config: new root=ffc1, gap_count=5
    firewire_core 0000:05:00.0: created device fw1: GUID 0814438400000388, S800
    firewire_core 0000:04:00.0: created device fw2: GUID 0001d202e06800d1, S800

    This increases the module size slightly; to keep this in check, turn the
    former printk wrapper macros into functions. Their implementation is
    largely copied from driver core's dev_printk counterparts.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

16 Jan, 2012

1 commit

  • fw_unit device drivers invariably need to talk to the fw_unit's parent
    (an fw_device) and grandparent (an fw_card). firewire-core already
    maintains an fw_card reference for the entire lifetime of an fw_device.
    Likewise, let firewire-core maintain an fw_device reference for the
    entire lifetime of an fw_unit so that fw_unit drivers don't have to.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

27 Jul, 2011

1 commit

  • This allows us to move duplicated code in
    (atomic_inc_not_zero() for now) to

    Signed-off-by: Arun Sharma
    Reviewed-by: Eric Dumazet
    Cc: Ingo Molnar
    Cc: David Miller
    Cc: Eric Dumazet
    Acked-by: Mike Frysinger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Arun Sharma
     

11 May, 2011

3 commits

  • The struct sbp2_logical_unit.work items can all be executed in parallel
    but are not reentrant. Furthermore, reconnect or re-login work must be
    executed in a WQ_MEM_RECLAIM workqueue.

    Hence replace the old single-threaded firewire-sbp2 workqueue by a
    concurrency-managed but non-reentrant workqueue with rescuer.
    firewire-core already maintains one, hence use this one.

    In earlier versions of this change, I observed occasional failures of
    parallel INQUIRY to an Initio INIC-2430 FireWire 800 to dual IDE bridge.
    More testing indicates that parallel INQUIRY is not actually a problem,
    but too quick successions of logout and login + INQUIRY, e.g. a quick
    sequence of cable plugout and plugin, can result in failed INQUIRY.
    This does not seem to be something that should or could be addressed by
    serialization.

    Another dual-LU device to which I currently have access to, an
    OXUF924DSB FireWire 800 to dual SATA bridge with firmware from MacPower,
    has been successfully tested with this too.

    This change is beneficial to environments with two or more FireWire
    storage devices, especially if they are located on the same bus.
    Management tasks that should be performed as soon and as quickly as
    possible, especially reconnect, are no longer held up by tasks on other
    devices that may take a long time, especially login with INQUIRY and sd
    or sr driver probe.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • firewire-core manages the following types of work items:

    fw_card.br_work:
    - resets the bus on a card and possibly sends a PHY packet before that
    - does not sleep for long or not at all
    - is scheduled via fw_schedule_bus_reset() by
    - firewire-ohci's pci_probe method
    - firewire-ohci's set_config_rom method, called by kernelspace
    protocol drivers and userspace drivers which add/remove
    Configuration ROM descriptors
    - userspace drivers which use the bus reset ioctl
    - itself if the last reset happened less than 2 seconds ago

    fw_card.bm_work:
    - performs bus management duties
    - usually does not (but may in corner cases) sleep for long
    - is scheduled via fw_schedule_bm_work() by
    - firewire-ohci's self-ID-complete IRQ handler tasklet
    - firewire-core's fw_device.work instances whenever the root node
    device was (successfully or unsuccessfully) discovered,
    refreshed, or rediscovered
    - itself in case of resource allocation failures or in order to
    obey the 125ms bus manager arbitration interval

    fw_device.work:
    - performs node probe, update, shutdown, revival, removal; including
    kernel driver probe, update, shutdown and bus reset notification to
    userspace drivers
    - usually sleeps moderately long, in corner cases very long
    - is scheduled by
    - firewire-ohci's self-ID-complete IRQ handler tasklet via the
    core's fw_node_event
    - firewire-ohci's pci_remove method via core's fw_destroy_nodes/
    fw_node_event
    - itself during retries, e.g. while a node is powering up

    iso_resource.work:
    - accesses registers at the Isochronous Resource Manager node
    - usually does not (but may in corner cases) sleep for long
    - is scheduled via schedule_iso_resource() by
    - the owning userspace driver at addition and removal of the
    resource
    - firewire-core's fw_device.work instances after bus reset
    - itself in case of resource allocation if necessary to obey the
    1000ms reallocation period after bus reset

    fw_card.br_work instances should not, and instances of the others must
    not, be executed in parallel by multiple CPUs -- but were not protected
    against that. Hence allocate a non-reentrant workqueue for them.

    fw_device.work may be used in the memory reclaim path in case of SBP-2
    device updates. Hence we need a workqueue with rescuer and cannot use
    system_nrt_wq.

    Signed-off-by: Stefan Richter
    Reviewed-by: Tejun Heo

    Stefan Richter
     
  • When queueing iso packets, the run time is dominated by the two
    MMIO accesses that set the DMA context's wake bit. Because most
    drivers submit packets in batches, we can save much time by
    removing all but the last wakeup.

    The internal kernel API is changed to require a call to
    fw_iso_context_queue_flush() after a batch of queued packets.
    The user space API does not change, so one call to
    FW_CDEV_IOC_QUEUE_ISO must specify multiple packets to take
    advantage of this optimization.

    In my measurements, this patch reduces the time needed to queue
    fifty skip packets from userspace to one sixth on a 2.5 GHz CPU,
    or to one third at 800 MHz.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     

15 Mar, 2011

1 commit

  • Add a driver for two playback-only FireWire devices based on the OXFW970
    chip.

    v2: better AMDTP API abstraction; fix fw_unit leak; small fixes
    v3: cache the iPCR value
    v4: FireWave constraints; fix fw_device reference counting;
    fix PCR caching; small changes and fixes
    v5: volume/mute support; fix crashing due to pcm stop races
    v6: fix build; one-channel volume for LaCie
    v7: use signed values to make volume (range checks) work; fix function
    block IDs for volume/mute; always use channel 0 for LaCie volume

    Signed-off-by: Clemens Ladisch
    Acked-by: Stefan Richter
    Tested-by: Jay Fenlason
    Signed-off-by: Takashi Iwai

    Clemens Ladisch
     

14 Dec, 2010

1 commit

  • Change the header of PHY packets to be sent to include a pseudo
    transaction code. This makes the header consistent with that of
    received PHY packets, and allows at_context_queue_packet() and
    log_ar_at_event() to see the packet type directly instead of having
    to deduce it from the header length or even from the header contents.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     

30 Jul, 2010

1 commit

  • This adds the DMA context programming and userspace ABI for multichannel
    reception, i.e. for listening on multiple channel numbers by means of a
    single DMA context.

    The use case is reception of more streams than there are IR DMA units
    offered by the link layer. This is already implemented by the older
    ohci1394 + ieee1394 + raw1394 stack. And as discussed recently on
    linux1394-devel, this feature is occasionally used in practice.

    The big drawbacks of this mode are that buffer layout and interrupt
    generation necessarily differ from single-channel reception: Headers
    and trailers are not stripped from packets, packets are not aligned with
    buffer chunks, interrupts are per buffer chunk, not per packet.

    These drawbacks also cause a rather hefty code footprint to support this
    rarely used OHCI-1394 feature. (367 lines added, among them 94 lines of
    added userspace ABI documentation.)

    This implementation enforces that a multichannel reception context may
    only listen to channels to which no single-channel context on the same
    link layer is presently listening to. OHCI-1394 would allow to overlay
    single-channel contexts by the multi-channel context, but this would be
    a departure from the present first-come-first-served policy of IR
    context creation.

    The implementation is heavily based on an earlier one by Jay Fenlason.
    Thanks Jay.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

23 Jul, 2010

2 commits

  • This extends the FW_CDEV_IOC_SEND_PHY_PACKET ioctl() for /dev/fw* to be
    useful for ping time measurements. One application for it would be gap
    count optimization in userspace that is based on ping times rather than
    hop count. (The latter is implemented in firewire-core itself but is
    not applicable to beta PHYs that act as repeater.)

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • Add an FW_CDEV_IOC_RECEIVE_PHY_PACKETS ioctl() and
    FW_CDEV_EVENT_PHY_PACKET_RECEIVED poll()/read() event for /dev/fw*.
    This can be used to get information from remote PHYs by remote access
    PHY packets.

    This is also the 2nd half of the functionality (the receive part) to
    support a userspace implementation of a VersaPHY transaction layer.

    Safety considerations:

    - PHY packets are generally broadcasts, hence some kind of elevated
    privileges should be required of a process to be able to listen in
    on PHY packets. This implementation assumes that a process that is
    allowed to open the /dev/fw* of a local node does have this
    privilege.

    There was an inconclusive discussion about introducing POSIX
    capabilities as a means to check for user privileges for these
    kinds of operations.

    Other limitations:

    - PHY packet reception may be switched on by ioctl() but cannot be
    switched off again. It would be trivial to provide an off switch,
    but this is not worth the code. The client should simply close()
    the fd then, or just ignore further events.

    - For sake of simplicity of API and kernel-side implementation, no
    filter per packet content is provided.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

13 Jul, 2010

1 commit

  • Bus resets which are triggered
    - by the kernel drivers after updates of the local nodes' config ROM,
    - by userspace software via ioctl
    shall be deferred until after >=2 seconds after the last bus reset.

    If multiple modifications of the local nodes' config ROM happen in a row,
    only a single bus reset should happen after them.

    When the local node's link goes from inactive to active or vice versa,
    and at the two occasions of bus resets mentioned above --- and if the
    current gap count differs from 63 --- the bus reset should be preceded
    by a PHY configuration packet that reaffirms the gap count. Otherwise a
    bus manager would have to reset the bus again right after that.

    This is necessary to promote bus stability, e.g. leave grace periods for
    allocations and reallocations of isochronous channels and bandwidth,
    SBP-2 reconnections etc.; see IEEE 1394 clause 8.2.1.

    This change implements all of the above by moving bus reset initiation
    into a delayed work (except for bus resets which are triggered by the
    bus manager workqueue job and are performed there immediately). It
    comes with a necessary addition to the card driver methods that allows
    to get the current gap count from PHY registers.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

19 Jun, 2010

3 commits


10 Jun, 2010

7 commits

  • On OHCI 1.1 controllers, let the hardware allocate the broadcast channel
    automatically. This removes a theoretical race condition directly after
    a bus reset where it could be possible to read the channel allocation
    register with channel 31 still being unallocated.

    Signed-off-by: Clemens Ladisch

    Clemens Ladisch
     
  • Implement the abdicate bit, which is required for bus manager
    capable nodes and tested by the Base 1394 Test Suite.

    Finally, something to do at a command reset! :-)

    Signed-off-by: Clemens Ladisch

    Clemens Ladisch
     
  • Implement the cmstr bit, which is required for cycle master capable
    nodes and tested for by the Base 1394 Test Suite.

    This bit allows the bus master to disable cycle start packets; there are
    bus master implementations that actually do this.

    Signed-off-by: Clemens Ladisch

    Clemens Ladisch
     
  • If supported by the OHCI controller, implement the PRIORITY_BUDGET
    register, which is required for nodes that can use asynchronous
    priority arbitration.

    To allow the core to determine what features the lowlevel device
    supports, add a new card driver callback.

    Signed-off-by: Clemens Ladisch

    Clemens Ladisch
     
  • The NODE_IDS register, and especially its bus_id field, is quite
    useless because 1394.1 requires that the bus_id field always stays
    0x3ff. However, the 1394 specification requires this register on all
    transaction capable nodes, and the Base 1394 Test Suite tests for it,
    so we better implement it.

    Signed-off-by: Clemens Ladisch

    Clemens Ladisch
     
  • To prepare for the following additions of more OHCI-implemented CSR
    registers, replace the get_cycle_time driver callback with a generic
    CSR register callback.

    Signed-off-by: Clemens Ladisch

    Clemens Ladisch
     
  • Add a check that the data length in the SEND_RESPONSE ioctl is correct.
    Incidentally, this also fixes the previously wrong response length of
    software-handled lock requests.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     

19 May, 2010

1 commit

  • Using a single timeout for all transaction that need to be flushed does
    not work if the submission of new transactions can defer the timeout
    indefinitely into the future. We need to have timeouts that do not
    change due to other transactions; the simplest way to do this is with a
    separate timer for each transaction.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter (+ one lockdep annotation)

    Clemens Ladisch
     

10 Apr, 2010

2 commits

  • The OHCI spec says that, if the programPhyEnable bit is set, the driver
    is responsible for configuring the IEEE1394a enhancements within the PHY
    and the link consistently. So do this.

    Also add a quirk to allow disabling these enhancements; this is needed
    for the TSB12LV22 where ack accelerations are buggy (erratum b).

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     
  • The interrupt status bits in PHY register 5 are cleared by writing a one
    bit. To avoid clearing them unadvertently, do not write them back when
    they were read as set, but only when they have been explicitly requested
    to be set.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     

21 Feb, 2010

1 commit

  • The current implementation of Bus_Time read access was buggy since it
    did not ensure that Bus_Time.second_count_hi and second_count_lo came
    from the same 128 seconds period.

    Reported-by: Håkan Johansson

    Instead of a fix, remove Bus_Time register support altogether. The spec
    requires all cycle master capable nodes to implement this (all Linux
    nodes are cycle master capable) while it also says that it "may" be
    initialized by the bus manager or by the IRM standing in for a bus
    manager. (Neither Linux' firewire-core nor ieee1394 nodemgr implement
    this.)

    Since we cannot rely on Bus_Time having been initialized by a bus
    manager, it is better to return an error instead of a nonsensical value
    on a read request to Bus_Time.

    Alternatively, we could fix the Bus_Time read integrity bug _and_
    implement (a) cycle master's write support of the register as well as
    (b) bus manager's Bus_Time initialization service, i.e. preservation of
    the Bus_Time when the cycle master node of a bus changes. However, that
    would be quite some code for a feature that is unreliable to begin with
    and very likely unused in practice.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

15 Oct, 2009

2 commits

  • The Topology Map of the local node was created in CPU byte order,
    then a temporary big endian copy was created to compute the CRC,
    and when a read request to the Topology Map arrived it had to be
    converted to big endian byte order again.

    We now generate it in big endian byte order in the first place.
    This also rids us of 1000 bytes stack usage in tasklet context.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • The config ROM image of the local node was created in CPU byte order,
    then a temporary big endian copy was created to compute the CRC, and
    finally the card driver created its own big endian copy.

    We now generate it in big endian byte order in the first place to avoid
    one byte order conversion and the temporary on-stack copy of the ROM
    image (1000 bytes stack usage in process context). Furthermore, two
    1000 bytes memset()s are replaced by one 1000 bytes - ROM length sized
    memset.

    The trivial fw_memcpy_{from,to}_be32() helpers are now superfluous and
    removed. The newly added __compute_block_crc() function will be folded
    into fw_compute_block_crc() in a subsequent change.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

12 Sep, 2009

1 commit


26 Jun, 2009

1 commit

  • The DMA mapping API cannot map on-stack addresses, as explained in
    Documentation/DMA-mapping.txt. Convert the two cases of on-stack packet
    payload buffers in firewire-core (payload of lock requests in the bus
    manager work and in iso resource management) to slab-allocated memory.

    There are a number on-stack buffers for quadlet write or quadlet read
    requests in firewire-core and firewire-sbp2. These are harmless; they
    are copied to/ from card driver internal DMA buffers since quadlet
    payloads are inlined with packet headers.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

14 Jun, 2009

1 commit

  • Implement IPv4 over IEEE 1394 as per RFC 2734 for the newer firewire
    stack. This feature has only been present in the older ieee1394 stack
    via the eth1394 driver.

    Still to do:
    - fix ipv4_priv and ipv4_node lifetime logic
    - fix determination of speeds and max payloads
    - fix bus reset handling
    - fix unaligned memory accesses
    - fix coding style
    - further testing/ improvement of fragment reassembly
    - perhaps multicast support

    Signed-off-by: Jay Fenlason
    Signed-off-by: Stefan Richter (rebased, copyright note, changelog)

    Jay Fenlason
     

07 Jun, 2009

1 commit