Low Voltage H-Bridge
One approach is to drive the p-channel MOSFETs with a dual photovoltaic optoisolator/gate driver. They are a mite slow, but that may not be a problem for you (make sure you don't get shoot-through current by delaying the n-channel turn-on, but not turn-off appropriately). 

They take the energy from the internal LED and actually generate an isolated output voltage. The turn on is slow because they have to supply the gate charge. A special internal circuit speeds the turn-off by shorting the output when the LED turns off. 

This avoids both the necessity of generating a negative supply and the necessary level-shifting. It also will avoid the possible problem of exceeding the maximum Vgs if the supply is at +12 and you drive the gates with -12. 

As well, since the output gate drive voltages are isolated you are free to use n-channel MOSFETs for all four.