a1b8d38935
esp.c: move non-DMA TI logic to separate esp_nodma_ti_dataout() function
...
This is to allow the logic to be moved during the next commit.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-66-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
9655f72c20
esp.c: don't raise INTR_BS interrupt in DATA IN phase until TI command issued
...
In the case where a SCSI command with a DATA IN phase has been issued, the host
may preload the FIFO with unaligned bytes before issuing the main DMA transfer.
When accumulating data in the FIFO don't raise the INTR_BS interrupt until the
TI command is issued, otherwise the unexpected interrupt can confuse the host.
In particular this is needed to prevent the MacOS Disk Utility from failing
when switching non-DMA transfers to use esp_do_nodma().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-65-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
8200345066
esp.c: remove unneeded ti_cmd field
...
According to the datasheet the previous ESP command remains in the ESP_CMD
register, which caused a problem when consecutive TI commands were issued as
it becomes impossible for the state machine to know when the first TI
command finishes.
This was the original reason for introducing the ti_cmd field which kept
track of the last written command for this purpose. However closer reading
of the datasheet shows that a TI command that terminates due to a change of
SCSI target phase resets the ESP_CMD register to zero which solves this
problem.
Now that this has been fixed in the previous commit, remove the unneeded
ti_cmd field and access the ESP_CMD register directly instead. Bump the
vmstate_esp version to indicate that the ti_cmd field is no longer included.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-64-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
cb22ce5038
esp.c: zero command register when TI command terminates due to phase change
...
This is the behaviour documented in the datasheet and allows the state machine
to correctly process multiple consecutive TI commands.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-63-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
036120f3af
esp.c: remove DATA IN phase logic when reading from FIFO
...
Whilst the FIFO is used a storage buffer for both DMA and non-DMA requests, the
loading and unloading is managed directly issuing commands to the ESP. As a
result there is no need to manually invoke the non-DMA command handler.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-62-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
c90b279229
esp.c: use deferred interrupts for both DATA IN and DATA OUT phases
...
This brings DATA OUT transfers in line with DATA IN transfers by ensuring that
the guest visible function complete interrupt is only set once the SCSI layer
has returned.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-61-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
a4608fa0a5
esp.c: separate logic based upon ESP command in esp_transfer_data()
...
The handling of the INTR_FC and INTR_BS bits is different depending upon the
last command executed by the ESP. Note that currently INTR_FC is managed
elsewhere, but that will change soon.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-60-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
8bb2249585
esp.c: separate logic based upon ESP command in esp_command_complete()
...
The handling of the INTR_FC and INTR_BS bits is different depending upon the
last command executed by the ESP. Note that currently INTR_FC is managed
elsewhere, but that will change soon.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-59-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
8dded6de15
esp.c: rename data_in_ready to to data_ready
...
This field is currently used to handle deferred interrupts for the DATA IN phase
but the code will soon be updated to do the same for the DATA OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-58-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
b46a43a224
esp.c: remove unused PDMA callback implementation
...
Note that this is a migration break for the q800 machine because the extra PDMA
information is no longer included.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-57-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
34e9bb92b5
esp.c: always use esp_do_dma() in pdma_cb()
...
There is now only a single implementation contained within esp_do_dma() so
call it directly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-56-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
8baa14728b
esp.c: move CMD_ICCS command logic to esp_do_dma()
...
The special logic in write_response_pdma_cb() is now no longer required since
esp_do_dma() can be used as a direct replacement.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-55-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
bb272e245b
esp.c: replace do_dma_pdma_cb() with esp_do_dma()
...
Now that the DMA logic is identical between do_dma_pdma_cb() and esp_do_dma()
we can replace do_dma_pdma_cb() with esp_do_dma().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-54-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
db4d4150ba
esp.c: move CMD_SELATNS end of command logic to esp_do_dma() and do_dma_pdma_cb()
...
The special logic in satn_stop_pdma_cb() is now no longer required since
esp_do_dma() can be used as a direct replacement.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-53-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
9ff0fd12a2
esp.c: don't use get_cmd() for CMD_SEL DMA commands
...
This can now be done using the existing logic in esp_do_dma() and do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-52-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
3fd325a2de
esp.c: move CMD_TI end of message phase detection to esp_do_dma() and do_dma_pdma_cb()
...
The existing check for TC == 0 is only valid during a TI command.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-51-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
3ee9a475a5
esp.c: move CMD_SELATN end of message phase detection to esp_do_dma() and do_dma_pdma_cb()
...
The special logic in satn_pdma_cb() is now no longer required since esp_do_dma()
can be used as a direct replacement.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-50-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
79a6c7c610
esp.c: untangle MESSAGE OUT and COMMAND phase logic in esp_do_nodma()
...
This makes it clearer that ATN is asserted until the end of the next TI command
in the MESSAGE OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-49-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
9e60cf788c
esp.c: untangle MESSAGE OUT and COMMAND phase logic in do_dma_pdma_cb()
...
This makes it clearer that ATN is asserted until the end of the next TI command
in the MESSAGE OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-48-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
46b0c36125
esp.c: untangle MESSAGE OUT and COMMAND phase logic in esp_do_dma()
...
This makes it clearer that ATN is asserted until the end of the next TI command
in the MESSAGE OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-47-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
6d97f5acbf
esp.c: remove do_cmd from ESPState
...
Now that the accumulation of the CDB is handled by SCSI phase, there is no need
for a separate variable to control it.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-46-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
df91fd4ecd
esp.c: convert esp_reg_write() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-45-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
83e803decd
esp.c: convert esp_do_nodma() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-44-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
e8c84b1973
esp.c: convert do_dma_pdma_cb() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-43-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
ad2725af57
esp.c: convert esp_do_dma() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-42-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
9d1aa52b76
esp.c: convert esp_do_nodma() to switch statement based upon SCSI phase
...
Currently only the DATA IN and DATA OUT phases are supported.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-41-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
844b3a84ea
esp.c: convert do_dma_pdma_db() to switch statement based upon SCSI phase
...
Currently only the DATA IN and DATA OUT phases are supported.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-40-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
1454dc765b
esp.c: convert esp_do_dma() to switch statement based upon SCSI phase
...
Currently only the DATA IN and DATA OUT phases are supported.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-39-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
5a83e83e1c
esp.c: introduce esp_get_phase() function
...
Make use of this new function in all places where the SCSI phase bits are
manually masked from the ESP_RSTAT register.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-Id: <20240112125420.514425-38-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
66fd565733
esp.c: remove s_without_satn_pdma_cb() PDMA callback
...
This can now be handled by the existing do_dma_pdma_cb() function.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-37-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
1b2e34ca2e
esp.c: move end of SCSI transfer check after TC adjustment in do_dma_pdma_cb()
...
Now it is possible to move the end of SCSI transfer check to after the TC
adjustment in do_dma_pdma_cb() when transferring data from the device
without triggering an assert() in the SCSI code. This brings this check in
line with all the others in esp_do_dma() and do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-36-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
4460b86a04
esp.c: update esp_do_dma() bypass if async_len is zero to include non-zero transfer check
...
In the PDMA case the last transfer from the device to the FIFO has occurred
(async_len is zero) but esp_do_dma() is still being called to drain the
remaining FIFO contents.
The additional non-zero transfer check ensures that we still defer the SCSI
layer in the case where we are waiting for data for a TI command or a DMA
enable signal.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-35-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
3c7f3c8b57
esp.c: copy logic for do_cmd transfers from do_dma_pdma_cb() to esp_do_dma()
...
This is so that PDMA transfers can be performend by esp_do_dma() as well as
do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-34-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
19e9afb1a3
esp.c: copy PDMA logic for transfers to device from do_dma_pdma_cb() to esp_do_dma()
...
This is so that PDMA transfers can be performend by esp_do_dma() as well as
do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-33-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
004826d03e
esp.c: rename esp_dma_done() to esp_dma_ti_check()
...
This is because a single DMA request can be transferred using multiple TI
commands, and so a TC equal to zero may not represent the completion of
the SCSI DMA command.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-32-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
af74b3c15d
esp.c: move TC and FIFO check logic into esp_dma_done()
...
This helps simplify the existing implementation.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-31-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
cb9881999d
esp.c: fix premature end of phase logic esp_command_complete
...
There are two cases here: the first is when the TI command underflows, in which
case we raise INTR_BS to indicate an early change of phase, and the second is
when the TI command overflows because the host requested a transfer for more
data than is available. In the latter case force TC to zero so that the TI
completion logic executes correctly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-30-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
e4e166c8ef
esp.c: consolidate async_len and TC == 0 checks in do_dma_pdma_cb() and esp_do_dma()
...
Ensure that the async_len checks for requesting data from the SCSI layer and
the TC == 0 checks to detect the end of the DMA transfer are consistent in both
do_dma_pdma_cb() and esp_do_dma(). In particular this involves adding the check
to see if the FIFO is at its low threshold since PDMA and mixed DMA and non-DMA
requests can leave data remaining in the FIFO.
At the same time update all the comments so that they are also consistent between
all similar code paths.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-29-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
a79e767ab1
esp.c: update end of transfer logic at the end of esp_transfer_data()
...
Since esp_dma_done() is called in both cases, and ti_size cannot be zero
(otherwise esp_command_complete() would have been called instead), replace
the conditional logic with a single call to esp_dma_done().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-28-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
fe082b5475
esp.c: remove unneeded if() check in esp_transfer_data()
...
The following ti_cmd checks ensure that only DMA and non-DMA TI commmands will
can call into the esp_do_dma() and esp_do_nodma() callbacks.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-27-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
81ed2ed3e8
esp.c: remove unaligned adjustment in do_dma_pdma_cb() to device path
...
With the latest changes this condition cannot occur anymore and so the logic
can be completely removed.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-26-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
12486e4f6d
esp.c: remove TC adjustment in esp_do_dma() from device path
...
Now that the TC is updated for each PDMA access (rather than once the FIFO is
full) there is no need to adjust the TC at start of each DMA transfer if the
FIFO is not empty.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-25-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
fabcba4966
esp.c: don't immediately raise INTR_BS if SCSI data needed in esp_do_dma()
...
In the case when more data is requested from the SCSI layer during a DMA data
transfer from a device, don't immediately fall through to the TC check logic.
Otherwise when TC is zero INTR_BS will be raised immediately rather than when
the next set of SCSI data is ready.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-24-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
68ef41fb13
esp.c: ensure that the PDMA callback is called for every device read
...
Rather than wait for the FIFO to fill up before calling the PDMA callback, push
that logic directly into the from_device logic in do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-23-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
c5bd505524
esp.c: update condition for esp_dma_done() in esp_do_dma() to device path
...
Ensure that esp_dma_done() is only called when TC is zero, which is currently
always the case for DMA transfers.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-22-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
6b7b0030fb
esp.c: update condition for esp_dma_done() in esp_do_dma() from device path
...
No change to the condition itself, other than to clarify that esp_dma_done()
must be called when TC is zero.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-21-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
27bd0cc044
esp.c: remove zero transfer size check from esp_do_dma()
...
The TI end of transfer interrupt only occurs when the TC reaches zero and is
not related to the SCSI layer transfer.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-20-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
942ee6c83f
esp.c: don't clear RFLAGS register when DMA is complete
...
The internal state of the ESP sequencer is not affected when raising an interrupt
to indicate the end of a DMA transfer.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-19-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
e7a661d117
esp.c: don't reset the TC and ESP_RSEQ state when executing a SCSI command
...
There is no need to manually reset these values as the ESP emulation now
correctly handles them within its existing logic.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-18-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
a1ccceb9c4
esp.c: remove MacOS TI workaround that pads FIFO transfers to ESP_FIFO_SZ
...
This workaround is no longer required with the current code and so can be
removed.
[Note: whilst MacOS itself can boot correctly, removing this hack prevents
a bootable EMILE CDROM from working. This is caused by a separate bug which
will be fixed by a subsequent patch]
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-17-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00