Usually a provider has only one header (gda-DBMS.h ) which contains all the structure definitions, and the main function declarations. This header needs to include the gda-server.h header file.
The provider also needs the common elements of the gda-common library (for XML stuff, etc when completed).
Usually there is one .c file for the implementation of the different DBMS structures mentioned above, except for the GdaServerField object, which is entirely managed by the gda-server library, and one for the program itself.
You can have a look at the providers distributed with libgda, which make use of this library. It is especially interesting to look at the PostgreSQL provider, since it is a good example of provider customization. It includes some extra features not present in other providers, such as the built-in recordsets, which are used to get data out of the box, not being a value directly returned by PostgreSQL.