0001
0002
0003
0004
0005
0006
0007 #ifndef LINUX_FSI_H
0008 #define LINUX_FSI_H
0009
0010 #include <linux/device.h>
0011
0012 struct fsi_device {
0013 struct device dev;
0014 u8 engine_type;
0015 u8 version;
0016 u8 unit;
0017 struct fsi_slave *slave;
0018 uint32_t addr;
0019 uint32_t size;
0020 };
0021
0022 extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
0023 void *val, size_t size);
0024 extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
0025 const void *val, size_t size);
0026 extern int fsi_device_peek(struct fsi_device *dev, void *val);
0027
0028 struct fsi_device_id {
0029 u8 engine_type;
0030 u8 version;
0031 };
0032
0033 #define FSI_VERSION_ANY 0
0034
0035 #define FSI_DEVICE(t) \
0036 .engine_type = (t), .version = FSI_VERSION_ANY,
0037
0038 #define FSI_DEVICE_VERSIONED(t, v) \
0039 .engine_type = (t), .version = (v),
0040
0041 struct fsi_driver {
0042 struct device_driver drv;
0043 const struct fsi_device_id *id_table;
0044 };
0045
0046 #define to_fsi_dev(devp) container_of(devp, struct fsi_device, dev)
0047 #define to_fsi_drv(drvp) container_of(drvp, struct fsi_driver, drv)
0048
0049 extern int fsi_driver_register(struct fsi_driver *fsi_drv);
0050 extern void fsi_driver_unregister(struct fsi_driver *fsi_drv);
0051
0052
0053
0054
0055
0056
0057 #define module_fsi_driver(__fsi_driver) \
0058 module_driver(__fsi_driver, fsi_driver_register, \
0059 fsi_driver_unregister)
0060
0061
0062 extern int fsi_slave_claim_range(struct fsi_slave *slave,
0063 uint32_t addr, uint32_t size);
0064 extern void fsi_slave_release_range(struct fsi_slave *slave,
0065 uint32_t addr, uint32_t size);
0066 extern int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
0067 void *val, size_t size);
0068 extern int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
0069 const void *val, size_t size);
0070
0071 extern struct bus_type fsi_bus_type;
0072 extern const struct device_type fsi_cdev_type;
0073
0074 enum fsi_dev_type {
0075 fsi_dev_cfam,
0076 fsi_dev_sbefifo,
0077 fsi_dev_scom,
0078 fsi_dev_occ
0079 };
0080
0081 extern int fsi_get_new_minor(struct fsi_device *fdev, enum fsi_dev_type type,
0082 dev_t *out_dev, int *out_index);
0083 extern void fsi_free_minor(dev_t dev);
0084
0085 #endif