~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/mmc/sdio_func.h

Version: ~ [ linux-5.12-rc7 ] ~ [ linux-5.11.13 ] ~ [ linux-5.10.29 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.111 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.186 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.230 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.266 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.266 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /*
  3  *  include/linux/mmc/sdio_func.h
  4  *
  5  *  Copyright 2007-2008 Pierre Ossman
  6  */
  7 
  8 #ifndef LINUX_MMC_SDIO_FUNC_H
  9 #define LINUX_MMC_SDIO_FUNC_H
 10 
 11 #include <linux/device.h>
 12 #include <linux/mod_devicetable.h>
 13 
 14 #include <linux/mmc/pm.h>
 15 
 16 struct mmc_card;
 17 struct sdio_func;
 18 
 19 typedef void (sdio_irq_handler_t)(struct sdio_func *);
 20 
 21 /*
 22  * SDIO function CIS tuple (unknown to the core)
 23  */
 24 struct sdio_func_tuple {
 25         struct sdio_func_tuple *next;
 26         unsigned char code;
 27         unsigned char size;
 28         unsigned char data[0];
 29 };
 30 
 31 /*
 32  * SDIO function devices
 33  */
 34 struct sdio_func {
 35         struct mmc_card         *card;          /* the card this device belongs to */
 36         struct device           dev;            /* the device */
 37         sdio_irq_handler_t      *irq_handler;   /* IRQ callback */
 38         unsigned int            num;            /* function number */
 39 
 40         unsigned char           class;          /* standard interface class */
 41         unsigned short          vendor;         /* vendor id */
 42         unsigned short          device;         /* device id */
 43 
 44         unsigned                max_blksize;    /* maximum block size */
 45         unsigned                cur_blksize;    /* current block size */
 46 
 47         unsigned                enable_timeout; /* max enable timeout in msec */
 48 
 49         unsigned int            state;          /* function state */
 50 #define SDIO_STATE_PRESENT      (1<<0)          /* present in sysfs */
 51 
 52         u8                      *tmpbuf;        /* 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)         (dev_name(&(f)->dev))
 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 #define dev_to_sdio_func(d)     container_of(d, struct sdio_func, dev)
 69 
 70 /*
 71  * SDIO function device driver
 72  */
 73 struct sdio_driver {
 74         char *name;
 75         const struct sdio_device_id *id_table;
 76 
 77         int (*probe)(struct sdio_func *, const struct sdio_device_id *);
 78         void (*remove)(struct sdio_func *);
 79 
 80         struct device_driver drv;
 81 };
 82 
 83 /**
 84  * SDIO_DEVICE - macro used to describe a specific SDIO device
 85  * @vend: the 16 bit manufacturer code
 86  * @dev: the 16 bit function id
 87  *
 88  * This macro is used to create a struct sdio_device_id that matches a
 89  * specific device. The class field will be set to SDIO_ANY_ID.
 90  */
 91 #define SDIO_DEVICE(vend,dev) \
 92         .class = SDIO_ANY_ID, \
 93         .vendor = (vend), .device = (dev)
 94 
 95 /**
 96  * SDIO_DEVICE_CLASS - macro used to describe a specific SDIO device class
 97  * @dev_class: the 8 bit standard interface code
 98  *
 99  * This macro is used to create a struct sdio_device_id that matches a
100  * specific standard SDIO function type.  The vendor and device fields will
101  * be set to SDIO_ANY_ID.
102  */
103 #define SDIO_DEVICE_CLASS(dev_class) \
104         .class = (dev_class), \
105         .vendor = SDIO_ANY_ID, .device = SDIO_ANY_ID
106 
107 extern int sdio_register_driver(struct sdio_driver *);
108 extern void sdio_unregister_driver(struct sdio_driver *);
109 
110 /**
111  * module_sdio_driver() - Helper macro for registering a SDIO driver
112  * @__sdio_driver: sdio_driver struct
113  *
114  * Helper macro for SDIO drivers which do not do anything special in module
115  * init/exit. This eliminates a lot of boilerplate. Each module may only
116  * use this macro once, and calling it replaces module_init() and module_exit()
117  */
118 #define module_sdio_driver(__sdio_driver) \
119         module_driver(__sdio_driver, sdio_register_driver, \
120                       sdio_unregister_driver)
121 
122 /*
123  * SDIO I/O operations
124  */
125 extern void sdio_claim_host(struct sdio_func *func);
126 extern void sdio_release_host(struct sdio_func *func);
127 
128 extern int sdio_enable_func(struct sdio_func *func);
129 extern int sdio_disable_func(struct sdio_func *func);
130 
131 extern int sdio_set_block_size(struct sdio_func *func, unsigned blksz);
132 
133 extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler);
134 extern int sdio_release_irq(struct sdio_func *func);
135 
136 extern unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz);
137 
138 extern u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret);
139 extern u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret);
140 extern u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret);
141 
142 extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
143         unsigned int addr, int count);
144 extern int sdio_readsb(struct sdio_func *func, void *dst,
145         unsigned int addr, int count);
146 
147 extern void sdio_writeb(struct sdio_func *func, u8 b,
148         unsigned int addr, int *err_ret);
149 extern void sdio_writew(struct sdio_func *func, u16 b,
150         unsigned int addr, int *err_ret);
151 extern void sdio_writel(struct sdio_func *func, u32 b,
152         unsigned int addr, int *err_ret);
153 
154 extern u8 sdio_writeb_readb(struct sdio_func *func, u8 write_byte,
155         unsigned int addr, int *err_ret);
156 
157 extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
158         void *src, int count);
159 extern int sdio_writesb(struct sdio_func *func, unsigned int addr,
160         void *src, int count);
161 
162 extern unsigned char sdio_f0_readb(struct sdio_func *func,
163         unsigned int addr, int *err_ret);
164 extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
165         unsigned int addr, int *err_ret);
166 
167 extern mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func);
168 extern int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags);
169 
170 extern void sdio_retune_crc_disable(struct sdio_func *func);
171 extern void sdio_retune_crc_enable(struct sdio_func *func);
172 
173 extern void sdio_retune_hold_now(struct sdio_func *func);
174 extern void sdio_retune_release(struct sdio_func *func);
175 
176 #endif /* LINUX_MMC_SDIO_FUNC_H */
177 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp