Click on this: »C Code For Device Driver
The code fragment illustrates the complete set of four software routines needed to manage a pair of circular buffers for input and output to the UART.
If the UART has a single interrupt output for both send and receive events, then two of the four routines are combined with a software dispatch between their bodies.