root/include/linux/mmc/sdio_func.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 */

/* [<][>][^][v][top][bottom][index][help] */