Skip to main content
Home▸ Forums▸ 68kMLA▸ I Just Ruined My SATA Card!!! — #38
Post #38 by dougg3
Source Forum68kMLA
CategoryTroubleshooting
Post DateSat, 20 Jul 2013 - 19:50
Original URLhttps://68kmla.org/bb/threads/i-just-ruined-my-sata-card.28374/
Post
There's a function called LookupIDECards() that gets called as soon as you click the Accept button in the license agreement window. I think that's the function, we just need to figure out what it's doing to detect the cards installed in the system.

I did some tracing with gdb, and here's what it does:

  • It calls IOMasterPort(MACH_PORT_NULL, &masterPort) to get a port to communicate with IOKit
  • It calls IORegistryCreateIterator(masterPort, kIOServicePlane, kIORegistryIterateRecursively, &iterator) to get an iterator to iterate over everything.
  • Then it goes into a loop calling object = IOIteratorNext(iterator)...
  • On every iteration it calls IOObjectConformsTo(object, "FT_ATA_Sil3112") (which is returning false because I don't have any of those cards)
  • For some reason if IOObjectConformsTo() returns false, it keeps trying a few more times with the exact same call before finally doing IOIteratorNext() to move onto the next item. No idea why.


It looks like maybe without the correct firmware, your card is not getting added to the FT_ATA_Sil3112 class in the IO Registry so the flasher can't find it. I'm not sure how to force it to find the correct device...maybe we could find what class name the device is currently being given (using the developer tool called IORegistryExplorer) and patch the binary to use that string instead? I'm not totally sure because I don't know a ton about IOKit and how its classes work.