Xenomai  3.1
spi-master.h
1 
18 #ifndef _RTDM_SPI_MASTER_H
19 #define _RTDM_SPI_MASTER_H
20 
21 #include <rtdm/driver.h>
22 #include <rtdm/uapi/spi.h>
23 #include "spi-device.h"
24 
25 struct class;
26 struct device_node;
27 struct rtdm_spi_master;
28 struct spi_master;
29 
30 struct rtdm_spi_master_ops {
31  int (*open)(struct rtdm_spi_remote_slave *slave);
32  void (*close)(struct rtdm_spi_remote_slave *slave);
33  int (*configure)(struct rtdm_spi_remote_slave *slave);
34  void (*chip_select)(struct rtdm_spi_remote_slave *slave,
35  bool active);
36  int (*set_iobufs)(struct rtdm_spi_remote_slave *slave,
37  struct rtdm_spi_iobufs *p);
38  int (*mmap_iobufs)(struct rtdm_spi_remote_slave *slave,
39  struct vm_area_struct *vma);
40  void (*mmap_release)(struct rtdm_spi_remote_slave *slave);
41  int (*transfer_iobufs)(struct rtdm_spi_remote_slave *slave);
42  int (*transfer_iobufs_n)(struct rtdm_spi_remote_slave *slave, int len);
43  ssize_t (*write)(struct rtdm_spi_remote_slave *slave,
44  const void *tx, size_t len);
45  ssize_t (*read)(struct rtdm_spi_remote_slave *slave,
46  void *rx, size_t len);
47  struct rtdm_spi_remote_slave *(*attach_slave)
48  (struct rtdm_spi_master *master,
49  struct spi_device *spi);
50  void (*detach_slave)(struct rtdm_spi_remote_slave *slave);
51 };
52 
53 struct rtdm_spi_master {
54  int subclass;
55  const struct rtdm_spi_master_ops *ops;
56  struct spi_master *kmaster;
57  struct { /* Internal */
58  struct rtdm_driver driver;
59  struct class *devclass;
60  char *classname;
61  struct list_head slaves;
62  struct list_head next;
63  rtdm_lock_t lock;
64  rtdm_mutex_t bus_lock;
65  struct rtdm_spi_remote_slave *cs;
66  };
67 };
68 
69 #define rtdm_spi_alloc_master(__dev, __type, __mptr) \
70  __rtdm_spi_alloc_master(__dev, sizeof(__type), \
71  offsetof(__type, __mptr)) \
72 
73 struct rtdm_spi_master *
74 __rtdm_spi_alloc_master(struct device *dev, size_t size, int off);
75 
76 int __rtdm_spi_setup_driver(struct rtdm_spi_master *master);
77 
78 int rtdm_spi_add_master(struct rtdm_spi_master *master);
79 
80 void rtdm_spi_remove_master(struct rtdm_spi_master *master);
81 
82 #endif /* !_RTDM_SPI_MASTER_H */
ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:551
Real-Time Driver Model for Xenomai, driver API header.
RTDM driver.
Definition: driver.h:249