Blame view

include/linux/fsi.h 2.37 KB
0508ad1ff   Jeremy Kerr   drivers/fsi: Add ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  /* FSI device & driver interfaces
   *
   * Copyright (C) IBM Corporation 2016
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   */
  
  #ifndef LINUX_FSI_H
  #define LINUX_FSI_H
  
  #include <linux/device.h>
fda07a6c9   Jeremy Kerr   drivers/fsi: Add ...
19
  struct fsi_device {
dd37eed7d   Jeremy Kerr   drivers/fsi: add ...
20
21
22
  	struct device		dev;
  	u8			engine_type;
  	u8			version;
f7ade2a60   Jeremy Kerr   drivers/fsi: scan...
23
24
25
26
  	u8			unit;
  	struct fsi_slave	*slave;
  	uint32_t		addr;
  	uint32_t		size;
fda07a6c9   Jeremy Kerr   drivers/fsi: Add ...
27
  };
4efe37f4c   Jeremy Kerr   drivers/fsi: Add ...
28
29
30
31
32
  extern int fsi_device_read(struct fsi_device *dev, uint32_t addr,
  		void *val, size_t size);
  extern int fsi_device_write(struct fsi_device *dev, uint32_t addr,
  		const void *val, size_t size);
  extern int fsi_device_peek(struct fsi_device *dev, void *val);
dd37eed7d   Jeremy Kerr   drivers/fsi: add ...
33
34
35
36
37
38
39
40
41
42
43
44
  struct fsi_device_id {
  	u8	engine_type;
  	u8	version;
  };
  
  #define FSI_VERSION_ANY		0
  
  #define FSI_DEVICE(t) \
  	.engine_type = (t), .version = FSI_VERSION_ANY,
  
  #define FSI_DEVICE_VERSIONED(t, v) \
  	.engine_type = (t), .version = (v),
fda07a6c9   Jeremy Kerr   drivers/fsi: Add ...
45
  struct fsi_driver {
dd37eed7d   Jeremy Kerr   drivers/fsi: add ...
46
47
  	struct device_driver		drv;
  	const struct fsi_device_id	*id_table;
fda07a6c9   Jeremy Kerr   drivers/fsi: Add ...
48
49
50
51
  };
  
  #define to_fsi_dev(devp) container_of(devp, struct fsi_device, dev)
  #define to_fsi_drv(drvp) container_of(drvp, struct fsi_driver, drv)
356d8009a   Christopher Bostic   drivers/fsi: Add ...
52
53
54
55
56
57
58
59
60
61
62
  extern int fsi_driver_register(struct fsi_driver *fsi_drv);
  extern void fsi_driver_unregister(struct fsi_driver *fsi_drv);
  
  /* module_fsi_driver() - Helper macro for drivers that don't do
   * anything special in module init/exit.  This eliminates a lot of
   * boilerplate.  Each module may only use this macro once, and
   * calling it replaces module_init() and module_exit()
   */
  #define module_fsi_driver(__fsi_driver) \
  		module_driver(__fsi_driver, fsi_driver_register, \
  				fsi_driver_unregister)
da36cadf8   Jeremy Kerr   drivers/fsi: expo...
63
64
65
66
67
68
69
70
71
  /* direct slave API */
  extern int fsi_slave_claim_range(struct fsi_slave *slave,
  		uint32_t addr, uint32_t size);
  extern void fsi_slave_release_range(struct fsi_slave *slave,
  		uint32_t addr, uint32_t size);
  extern int fsi_slave_read(struct fsi_slave *slave, uint32_t addr,
  		void *val, size_t size);
  extern int fsi_slave_write(struct fsi_slave *slave, uint32_t addr,
  		const void *val, size_t size);
0508ad1ff   Jeremy Kerr   drivers/fsi: Add ...
72
73
74
  extern struct bus_type fsi_bus_type;
  
  #endif /* LINUX_FSI_H */