Pretty much this.... firmware only tested against certain OSes and workloads... Basically Win32 and BSDs (including Mac since it's ATA subsystem is BSD derived) do this with queued commands:
Data, Data, Flush, Wait for flush to complete, TRIM, Data, Data, Data.
Linux on the other hand just...