Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable the i.LINK (Firewire) device #24

Open
frno7 opened this issue Mar 17, 2019 · 3 comments
Open

Enable the i.LINK (Firewire) device #24

frno7 opened this issue Mar 17, 2019 · 3 comments
Labels
enhancement New feature or request

Comments

@frno7
Copy link
Owner

frno7 commented Mar 17, 2019

Implement a device driver for the i.LINK, also known as FireWire, hardware found in the PlayStation 2 models SCPH-10000 to 3900x.

See also #11.

@frno7 frno7 added the enhancement New feature or request label Mar 17, 2019
@frno7 frno7 changed the title Enable the i.Link (Firewire) device Enable the i.LINK (Firewire) device Mar 17, 2019
@sp193
Copy link

sp193 commented Apr 13, 2019

The i.Link controller's registers are not IEEE1394-compliant. The official PS2Linux had no support for it either. There will be a need to reverse-engineer code and to write a custom driver.

@frno7
Copy link
Owner Author

frno7 commented Apr 14, 2019

I have been informed that there are similarities with a LSI 1394 Lead Vehicle design, and that it defaults to BE byte order rather than LE as is appropriate for the PlayStation 2. The DMAC registers are possibly different.

@sp193
Copy link

sp193 commented Apr 14, 2019

It's nearly exactly the same as the controller from the LSI Lead Vehicle. That's where we got the documentation for controlling it from, but it doesn't describe how to write a driver that is compliant with IEEE1394. As such, the homebrew i.Link driver is very unreliable and incomplete. A new copy of the Sony ILINK.IRX module may be a better choice. I've been doing that since 2012, but haven't completed it.

Our controller has slightly different registers (e.g. watermark, DBUF FIFO size registers do not work, while there is an extra control register at 0xBF80847C). i.Link has its own DMAC, which is the undocumented 3rd DMAC. Only Konami seems to have used it.
Thankfully, Sony implemented logic for automatic responses, but somehow there seems to be byte-swapping always enabled. I think it may still work well if a PS2 communicates with another PS2, but this can be a problem if the PS2 communicates with another non-PS2 IEEE1394 host.

DMAC3 has its own DPCR3 and DICR3 registers. Of the three DMA channels, 13, 14 and 15, only 14 and 15 seem capable of Automatic Responses. 13 seemed to be a unidirectional channel for PHT0. 15 is for PHT1, while I think 14 is for PHT0. Unlike the LSI Lead Vehicle's DMAC, all 3 channels share the same DMA range registers. The Reference Tag Address Registers (RTAR) use the same format as the LSI Lead Vehicle, according to Silverbull.

As the LSI Lead Vehicle documentation suggests, the exact capabilities of the DMA channel, depends on the controller.

The USB OHCI controller documentation there seems to be an exact match with the one we have, from what I know.

@frno7 frno7 mentioned this issue Dec 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants