Alessandro Rubini | 022c674 | 2013-06-18 23:47:24 +0200 | [diff] [blame] | 1 | Functions Exported by fmc.ko |
| 2 | **************************** |
| 3 | |
| 4 | The FMC core exports the usual 4 functions that are needed for a bus to |
| 5 | work, and a few more: |
| 6 | |
| 7 | int fmc_driver_register(struct fmc_driver *drv); |
| 8 | void fmc_driver_unregister(struct fmc_driver *drv); |
| 9 | int fmc_device_register(struct fmc_device *fmc); |
| 10 | void fmc_device_unregister(struct fmc_device *fmc); |
| 11 | |
| 12 | int fmc_device_register_n(struct fmc_device **fmc, int n); |
| 13 | void fmc_device_unregister_n(struct fmc_device **fmc, int n); |
| 14 | |
| 15 | uint32_t fmc_readl(struct fmc_device *fmc, int offset); |
| 16 | void fmc_writel(struct fmc_device *fmc, uint32_t val, int off); |
| 17 | void *fmc_get_drvdata(struct fmc_device *fmc); |
| 18 | void fmc_set_drvdata(struct fmc_device *fmc, void *data); |
| 19 | |
| 20 | int fmc_reprogram(struct fmc_device *f, struct fmc_driver *d, char *gw, |
| 21 | int sdb_entry); |
| 22 | |
| 23 | The data structure that describe a device is detailed in *note FMC |
| 24 | Device::, the one that describes a driver is detailed in *note FMC |
| 25 | Driver::. Please note that structures of type fmc_device must be |
| 26 | allocated by the caller, but must not be released after unregistering. |
| 27 | The fmc-bus itself takes care of releasing the structure when their use |
| 28 | count reaches zero - actually, the device model does that in lieu of us. |
| 29 | |
| 30 | The functions to register and unregister n devices are meant to be used |
| 31 | by carriers that host more than one mezzanine. The devices must all be |
| 32 | registered at the same time because if the FPGA is reprogrammed, all |
| 33 | devices in the array are affected. Usually, the driver matching the |
| 34 | first device will reprogram the FPGA, so other devices must know they |
| 35 | are already driven by a reprogrammed FPGA. |
| 36 | |
| 37 | If a carrier hosts slots that are driven by different FPGA devices, it |
| 38 | should register as a group only mezzanines that are driven by the same |
| 39 | FPGA, for the reason outlined above. |
| 40 | |
| 41 | Finally, the fmc_reprogram function calls the reprogram method (see |
| 42 | *note The API Offered by Carriers:: and also scans the memory area for |
| 43 | an SDB tree. You can pass -1 as sdb_entry to disable such scan. |
| 44 | Otherwise, the function fails if no tree is found at the specified |
| 45 | entry point. The function is meant to factorize common code, and by |
| 46 | the time you read this it is already used by the spec-sw and fine-delay |
| 47 | modules. |