A memory controller for use with a computer system, the computer system including a processor, an input/output bus, a bus master coupled to the input/output bus, and a main memory, the processor and bus master performing read and write operations to the main memory and the processor performing read and write operations to the input/output bus, the memory controller comprising:
- an input/output bus write posting queue coupled to the processor and the input/output bus for the processor to perform input/output bus write operations, said input/output bus write posting queue being capable of posting at least two write operations;
- a main memory write posting queue coupled to the processor and the main memory for the processor to perform main memory write operations, said main memory write posting queue being capable of posting at least two write operations;
- a bus master write posting queue coupled to the input/output bus and the main memory for input/output bus to main memory write operations, said bus master write posting queue being capable of posting at least two write operations;
- processor read control logic coupled between the processor and the input/output bus and configured to provide processor read operations to the input/output bus, said processor read control logic further coupled between the processor and the main memory and further configured to provide processor read operations to the main memory;
- an arbiter coupled to said bus master write posting queue and to said processor read control logic, said arbiter being adapted to determine if the address of a processor read operation to the main memory is present in said bus master write posting queue and to delay provision of the processor read operation to the main memory until said address is not present in said bus master write posting queue;
- bus read control logic coupled between the input/output bus and the main memory and configured to provide bus master read operations to the main memory;
- and
- a data contents counter coupled to said processor to main memory write posting queue and to said bus read control logic, said data contents counter adapted to determine if said main memory write posting queue is empty and to delay provision of a bus master read operation to the main memory until said main memory write posting queue is empty.