xref: /linux-6.15/include/linux/mmc/sdio_func.h (revision a1e58bbd)
1 /*
2  *  include/linux/mmc/sdio_func.h
3  *
4  *  Copyright 2007 Pierre Ossman
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or (at
9  * your option) any later version.
10  */
11 
12 #ifndef MMC_SDIO_FUNC_H
13 #define MMC_SDIO_FUNC_H
14 
15 #include <linux/device.h>
16 #include <linux/mod_devicetable.h>
17 
18 struct mmc_card;
19 struct sdio_func;
20 
21 typedef void (sdio_irq_handler_t)(struct sdio_func *);
22 
23 /*
24  * SDIO function CIS tuple (unknown to the core)
25  */
26 struct sdio_func_tuple {
27 	struct sdio_func_tuple *next;
28 	unsigned char code;
29 	unsigned char size;
30 	unsigned char data[0];
31 };
32 
33 /*
34  * SDIO function devices
35  */
36 struct sdio_func {
37 	struct mmc_card		*card;		/* the card this device belongs to */
38 	struct device		dev;		/* the device */
39 	sdio_irq_handler_t	*irq_handler;	/* IRQ callback */
40 	unsigned int		num;		/* function number */
41 
42 	unsigned char		class;		/* standard interface class */
43 	unsigned short		vendor;		/* vendor id */
44 	unsigned short		device;		/* device id */
45 
46 	unsigned		max_blksize;	/* maximum block size */
47 	unsigned		cur_blksize;	/* current block size */
48 
49 	unsigned int		state;		/* function state */
50 #define SDIO_STATE_PRESENT	(1<<0)		/* present in sysfs */
51 
52 	u8			tmpbuf[4];	/* DMA:able scratch buffer */
53 
54 	unsigned		num_info;	/* number of info strings */
55 	const char		**info;		/* info strings */
56 
57 	struct sdio_func_tuple *tuples;
58 };
59 
60 #define sdio_func_present(f)	((f)->state & SDIO_STATE_PRESENT)
61 
62 #define sdio_func_set_present(f) ((f)->state |= SDIO_STATE_PRESENT)
63 
64 #define sdio_func_id(f)		((f)->dev.bus_id)
65 
66 #define sdio_get_drvdata(f)	dev_get_drvdata(&(f)->dev)
67 #define sdio_set_drvdata(f,d)	dev_set_drvdata(&(f)->dev, d)
68 
69 /*
70  * SDIO function device driver
71  */
72 struct sdio_driver {
73 	char *name;
74 	const struct sdio_device_id *id_table;
75 
76 	int (*probe)(struct sdio_func *, const struct sdio_device_id *);
77 	void (*remove)(struct sdio_func *);
78 
79 	struct device_driver drv;
80 };
81 
82 /**
83  * SDIO_DEVICE - macro used to describe a specific SDIO device
84  * @vend: the 16 bit manufacturer code
85  * @dev: the 16 bit function id
86  *
87  * This macro is used to create a struct sdio_device_id that matches a
88  * specific device. The class field will be set to SDIO_ANY_ID.
89  */
90 #define SDIO_DEVICE(vend,dev) \
91 	.class = SDIO_ANY_ID, \
92 	.vendor = (vend), .device = (dev)
93 
94 /**
95  * SDIO_DEVICE_CLASS - macro used to describe a specific SDIO device class
96  * @dev_class: the 8 bit standard interface code
97  *
98  * This macro is used to create a struct sdio_device_id that matches a
99  * specific standard SDIO function type.  The vendor and device fields will
100  * be set to SDIO_ANY_ID.
101  */
102 #define SDIO_DEVICE_CLASS(dev_class) \
103 	.class = (dev_class), \
104 	.vendor = SDIO_ANY_ID, .device = SDIO_ANY_ID
105 
106 extern int sdio_register_driver(struct sdio_driver *);
107 extern void sdio_unregister_driver(struct sdio_driver *);
108 
109 /*
110  * SDIO I/O operations
111  */
112 extern void sdio_claim_host(struct sdio_func *func);
113 extern void sdio_release_host(struct sdio_func *func);
114 
115 extern int sdio_enable_func(struct sdio_func *func);
116 extern int sdio_disable_func(struct sdio_func *func);
117 
118 extern int sdio_set_block_size(struct sdio_func *func, unsigned blksz);
119 
120 extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler);
121 extern int sdio_release_irq(struct sdio_func *func);
122 
123 extern unsigned char sdio_readb(struct sdio_func *func,
124 	unsigned int addr, int *err_ret);
125 extern unsigned short sdio_readw(struct sdio_func *func,
126 	unsigned int addr, int *err_ret);
127 extern unsigned long sdio_readl(struct sdio_func *func,
128 	unsigned int addr, int *err_ret);
129 
130 extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
131 	unsigned int addr, int count);
132 extern int sdio_readsb(struct sdio_func *func, void *dst,
133 	unsigned int addr, int count);
134 
135 extern void sdio_writeb(struct sdio_func *func, unsigned char b,
136 	unsigned int addr, int *err_ret);
137 extern void sdio_writew(struct sdio_func *func, unsigned short b,
138 	unsigned int addr, int *err_ret);
139 extern void sdio_writel(struct sdio_func *func, unsigned long b,
140 	unsigned int addr, int *err_ret);
141 
142 extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
143 	void *src, int count);
144 extern int sdio_writesb(struct sdio_func *func, unsigned int addr,
145 	void *src, int count);
146 
147 extern unsigned char sdio_f0_readb(struct sdio_func *func,
148 	unsigned int addr, int *err_ret);
149 extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
150 	unsigned int addr, int *err_ret);
151 
152 #endif
153 
154