Line data Source code
1 : /*
2 : * include/linux/mmc/sdio_func.h
3 : *
4 : * Copyright 2007-2008 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 1 : typedef void (sdio_irq_handler_t)(struct sdio_func *);
22 1 :
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 1 :
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 enable_timeout; /* max enable timeout in msec */
50 :
51 : unsigned int state; /* function state */
52 : #define SDIO_STATE_PRESENT (1<<0) /* present in sysfs */
53 :
54 : u8 tmpbuf[4]; /* DMA:able scratch buffer */
55 :
56 : unsigned num_info; /* number of info strings */
57 : const char **info; /* info strings */
58 :
59 : struct sdio_func_tuple *tuples;
60 : };
61 1 :
62 : #define sdio_func_present(f) ((f)->state & SDIO_STATE_PRESENT)
63 :
64 : #define sdio_func_set_present(f) ((f)->state |= SDIO_STATE_PRESENT)
65 :
66 : #define sdio_func_id(f) (dev_name(&(f)->dev))
67 :
68 : #define sdio_get_drvdata(f) dev_get_drvdata(&(f)->dev)
69 : #define sdio_set_drvdata(f,d) dev_set_drvdata(&(f)->dev, d)
70 : #define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev)
71 :
72 : /*
73 : * SDIO function device driver
74 : */
75 : struct sdio_driver {
76 : char *name;
77 : const struct sdio_device_id *id_table;
78 :
79 : int (*probe)(struct sdio_func *, const struct sdio_device_id *);
80 : void (*remove)(struct sdio_func *);
81 :
82 : struct device_driver drv;
83 : };
84 :
85 : #define to_sdio_driver(d) container_of(d, struct sdio_driver, drv)
86 :
87 : /**
88 : * SDIO_DEVICE - macro used to describe a specific SDIO device
89 : * @vend: the 16 bit manufacturer code
90 : * @dev: the 16 bit function id
91 : *
92 : * This macro is used to create a struct sdio_device_id that matches a
93 : * specific device. The class field will be set to SDIO_ANY_ID.
94 : */
95 : #define SDIO_DEVICE(vend,dev) \
96 : .class = SDIO_ANY_ID, \
97 : .vendor = (vend), .device = (dev)
98 :
99 : /**
100 : * SDIO_DEVICE_CLASS - macro used to describe a specific SDIO device class
101 : * @dev_class: the 8 bit standard interface code
102 : *
103 : * This macro is used to create a struct sdio_device_id that matches a
104 : * specific standard SDIO function type. The vendor and device fields will
105 : * be set to SDIO_ANY_ID.
106 : */
107 : #define SDIO_DEVICE_CLASS(dev_class) \
108 : .class = (dev_class), \
109 : .vendor = SDIO_ANY_ID, .device = SDIO_ANY_ID
110 :
111 : extern int sdio_register_driver(struct sdio_driver *);
112 : extern void sdio_unregister_driver(struct sdio_driver *);
113 :
114 : /*
115 : * SDIO I/O operations
116 : */
117 : extern void sdio_claim_host(struct sdio_func *func);
118 : extern void sdio_release_host(struct sdio_func *func);
119 :
120 : extern int sdio_enable_func(struct sdio_func *func);
121 : extern int sdio_disable_func(struct sdio_func *func);
122 :
123 : extern int sdio_set_block_size(struct sdio_func *func, unsigned blksz);
124 :
125 : extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler);
126 : extern int sdio_release_irq(struct sdio_func *func);
127 :
128 : extern unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz);
129 :
130 : extern u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret);
131 : extern u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret);
132 : extern u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret);
133 :
134 : extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
135 : unsigned int addr, int count);
136 : extern int sdio_readsb(struct sdio_func *func, void *dst,
137 : unsigned int addr, int count);
138 :
139 : extern void sdio_writeb(struct sdio_func *func, u8 b,
140 : unsigned int addr, int *err_ret);
141 : extern void sdio_writew(struct sdio_func *func, u16 b,
142 : unsigned int addr, int *err_ret);
143 : extern void sdio_writel(struct sdio_func *func, u32 b,
144 : unsigned int addr, int *err_ret);
145 :
146 : extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
147 : void *src, int count);
148 : extern int sdio_writesb(struct sdio_func *func, unsigned int addr,
149 : void *src, int count);
150 :
151 : extern unsigned char sdio_f0_readb(struct sdio_func *func,
152 : unsigned int addr, int *err_ret);
153 : extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
154 : unsigned int addr, int *err_ret);
155 :
156 : #endif
157 :
|