Searched refs:info (Results 1 - 200 of 6337) sorted by relevance

1234567891011>>

/linux-4.1.27/arch/x86/um/asm/
H A Dmm_context.h37 #define LDT_entry_a(info) \
38 ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff))
40 #define LDT_entry_b(info) \
41 (((info)->base_addr & 0xff000000) | \
42 (((info)->base_addr & 0x00ff0000) >> 16) | \
43 ((info)->limit & 0xf0000) | \
44 (((info)->read_exec_only ^ 1) << 9) | \
45 ((info)->contents << 10) | \
46 (((info)->seg_not_present ^ 1) << 15) | \
47 ((info)->seg_32bit << 22) | \
48 ((info)->limit_in_pages << 23) | \
49 ((info)->useable << 20) | \
52 #define _LDT_empty(info) (\
53 (info)->base_addr == 0 && \
54 (info)->limit == 0 && \
55 (info)->contents == 0 && \
56 (info)->read_exec_only == 1 && \
57 (info)->seg_32bit == 0 && \
58 (info)->limit_in_pages == 0 && \
59 (info)->seg_not_present == 1 && \
60 (info)->useable == 0 )
63 #define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0))
65 #define LDT_empty(info) (_LDT_empty(info))
H A Ddesc.h6 #define LDT_empty(info) (\
7 (info)->base_addr == 0 && \
8 (info)->limit == 0 && \
9 (info)->contents == 0 && \
10 (info)->read_exec_only == 1 && \
11 (info)->seg_32bit == 0 && \
12 (info)->limit_in_pages == 0 && \
13 (info)->seg_not_present == 1 && \
14 (info)->useable == 0 )
/linux-4.1.27/include/drm/
H A Di915_pciids.h38 #define INTEL_VGA_DEVICE(id, info) { \
42 (unsigned long) info }
44 #define INTEL_QUANTA_VGA_DEVICE(info) { \
48 (unsigned long) info }
50 #define INTEL_I830_IDS(info) \
51 INTEL_VGA_DEVICE(0x3577, info)
53 #define INTEL_I845G_IDS(info) \
54 INTEL_VGA_DEVICE(0x2562, info)
56 #define INTEL_I85X_IDS(info) \
57 INTEL_VGA_DEVICE(0x3582, info), /* I855_GM */ \
58 INTEL_VGA_DEVICE(0x358e, info)
60 #define INTEL_I865G_IDS(info) \
61 INTEL_VGA_DEVICE(0x2572, info) /* I865_G */
63 #define INTEL_I915G_IDS(info) \
64 INTEL_VGA_DEVICE(0x2582, info), /* I915_G */ \
65 INTEL_VGA_DEVICE(0x258a, info) /* E7221_G */
67 #define INTEL_I915GM_IDS(info) \
68 INTEL_VGA_DEVICE(0x2592, info) /* I915_GM */
70 #define INTEL_I945G_IDS(info) \
71 INTEL_VGA_DEVICE(0x2772, info) /* I945_G */
73 #define INTEL_I945GM_IDS(info) \
74 INTEL_VGA_DEVICE(0x27a2, info), /* I945_GM */ \
75 INTEL_VGA_DEVICE(0x27ae, info) /* I945_GME */
77 #define INTEL_I965G_IDS(info) \
78 INTEL_VGA_DEVICE(0x2972, info), /* I946_GZ */ \
79 INTEL_VGA_DEVICE(0x2982, info), /* G35_G */ \
80 INTEL_VGA_DEVICE(0x2992, info), /* I965_Q */ \
81 INTEL_VGA_DEVICE(0x29a2, info) /* I965_G */
83 #define INTEL_G33_IDS(info) \
84 INTEL_VGA_DEVICE(0x29b2, info), /* Q35_G */ \
85 INTEL_VGA_DEVICE(0x29c2, info), /* G33_G */ \
86 INTEL_VGA_DEVICE(0x29d2, info) /* Q33_G */
88 #define INTEL_I965GM_IDS(info) \
89 INTEL_VGA_DEVICE(0x2a02, info), /* I965_GM */ \
90 INTEL_VGA_DEVICE(0x2a12, info) /* I965_GME */
92 #define INTEL_GM45_IDS(info) \
93 INTEL_VGA_DEVICE(0x2a42, info) /* GM45_G */
95 #define INTEL_G45_IDS(info) \
96 INTEL_VGA_DEVICE(0x2e02, info), /* IGD_E_G */ \
97 INTEL_VGA_DEVICE(0x2e12, info), /* Q45_G */ \
98 INTEL_VGA_DEVICE(0x2e22, info), /* G45_G */ \
99 INTEL_VGA_DEVICE(0x2e32, info), /* G41_G */ \
100 INTEL_VGA_DEVICE(0x2e42, info), /* B43_G */ \
101 INTEL_VGA_DEVICE(0x2e92, info) /* B43_G.1 */
103 #define INTEL_PINEVIEW_IDS(info) \
104 INTEL_VGA_DEVICE(0xa001, info), \
105 INTEL_VGA_DEVICE(0xa011, info)
107 #define INTEL_IRONLAKE_D_IDS(info) \
108 INTEL_VGA_DEVICE(0x0042, info)
110 #define INTEL_IRONLAKE_M_IDS(info) \
111 INTEL_VGA_DEVICE(0x0046, info)
113 #define INTEL_SNB_D_IDS(info) \
114 INTEL_VGA_DEVICE(0x0102, info), \
115 INTEL_VGA_DEVICE(0x0112, info), \
116 INTEL_VGA_DEVICE(0x0122, info), \
117 INTEL_VGA_DEVICE(0x010A, info)
119 #define INTEL_SNB_M_IDS(info) \
120 INTEL_VGA_DEVICE(0x0106, info), \
121 INTEL_VGA_DEVICE(0x0116, info), \
122 INTEL_VGA_DEVICE(0x0126, info)
124 #define INTEL_IVB_M_IDS(info) \
125 INTEL_VGA_DEVICE(0x0156, info), /* GT1 mobile */ \
126 INTEL_VGA_DEVICE(0x0166, info) /* GT2 mobile */
128 #define INTEL_IVB_D_IDS(info) \
129 INTEL_VGA_DEVICE(0x0152, info), /* GT1 desktop */ \
130 INTEL_VGA_DEVICE(0x0162, info), /* GT2 desktop */ \
131 INTEL_VGA_DEVICE(0x015a, info), /* GT1 server */ \
132 INTEL_VGA_DEVICE(0x016a, info) /* GT2 server */
134 #define INTEL_IVB_Q_IDS(info) \
135 INTEL_QUANTA_VGA_DEVICE(info) /* Quanta transcode */
137 #define INTEL_HSW_D_IDS(info) \
138 INTEL_VGA_DEVICE(0x0402, info), /* GT1 desktop */ \
139 INTEL_VGA_DEVICE(0x0412, info), /* GT2 desktop */ \
140 INTEL_VGA_DEVICE(0x0422, info), /* GT3 desktop */ \
141 INTEL_VGA_DEVICE(0x040a, info), /* GT1 server */ \
142 INTEL_VGA_DEVICE(0x041a, info), /* GT2 server */ \
143 INTEL_VGA_DEVICE(0x042a, info), /* GT3 server */ \
144 INTEL_VGA_DEVICE(0x040B, info), /* GT1 reserved */ \
145 INTEL_VGA_DEVICE(0x041B, info), /* GT2 reserved */ \
146 INTEL_VGA_DEVICE(0x042B, info), /* GT3 reserved */ \
147 INTEL_VGA_DEVICE(0x040E, info), /* GT1 reserved */ \
148 INTEL_VGA_DEVICE(0x041E, info), /* GT2 reserved */ \
149 INTEL_VGA_DEVICE(0x042E, info), /* GT3 reserved */ \
150 INTEL_VGA_DEVICE(0x0C02, info), /* SDV GT1 desktop */ \
151 INTEL_VGA_DEVICE(0x0C12, info), /* SDV GT2 desktop */ \
152 INTEL_VGA_DEVICE(0x0C22, info), /* SDV GT3 desktop */ \
153 INTEL_VGA_DEVICE(0x0C0A, info), /* SDV GT1 server */ \
154 INTEL_VGA_DEVICE(0x0C1A, info), /* SDV GT2 server */ \
155 INTEL_VGA_DEVICE(0x0C2A, info), /* SDV GT3 server */ \
156 INTEL_VGA_DEVICE(0x0C0B, info), /* SDV GT1 reserved */ \
157 INTEL_VGA_DEVICE(0x0C1B, info), /* SDV GT2 reserved */ \
158 INTEL_VGA_DEVICE(0x0C2B, info), /* SDV GT3 reserved */ \
159 INTEL_VGA_DEVICE(0x0C0E, info), /* SDV GT1 reserved */ \
160 INTEL_VGA_DEVICE(0x0C1E, info), /* SDV GT2 reserved */ \
161 INTEL_VGA_DEVICE(0x0C2E, info), /* SDV GT3 reserved */ \
162 INTEL_VGA_DEVICE(0x0A02, info), /* ULT GT1 desktop */ \
163 INTEL_VGA_DEVICE(0x0A12, info), /* ULT GT2 desktop */ \
164 INTEL_VGA_DEVICE(0x0A22, info), /* ULT GT3 desktop */ \
165 INTEL_VGA_DEVICE(0x0A0A, info), /* ULT GT1 server */ \
166 INTEL_VGA_DEVICE(0x0A1A, info), /* ULT GT2 server */ \
167 INTEL_VGA_DEVICE(0x0A2A, info), /* ULT GT3 server */ \
168 INTEL_VGA_DEVICE(0x0A0B, info), /* ULT GT1 reserved */ \
169 INTEL_VGA_DEVICE(0x0A1B, info), /* ULT GT2 reserved */ \
170 INTEL_VGA_DEVICE(0x0A2B, info), /* ULT GT3 reserved */ \
171 INTEL_VGA_DEVICE(0x0D02, info), /* CRW GT1 desktop */ \
172 INTEL_VGA_DEVICE(0x0D12, info), /* CRW GT2 desktop */ \
173 INTEL_VGA_DEVICE(0x0D22, info), /* CRW GT3 desktop */ \
174 INTEL_VGA_DEVICE(0x0D0A, info), /* CRW GT1 server */ \
175 INTEL_VGA_DEVICE(0x0D1A, info), /* CRW GT2 server */ \
176 INTEL_VGA_DEVICE(0x0D2A, info), /* CRW GT3 server */ \
177 INTEL_VGA_DEVICE(0x0D0B, info), /* CRW GT1 reserved */ \
178 INTEL_VGA_DEVICE(0x0D1B, info), /* CRW GT2 reserved */ \
179 INTEL_VGA_DEVICE(0x0D2B, info), /* CRW GT3 reserved */ \
180 INTEL_VGA_DEVICE(0x0D0E, info), /* CRW GT1 reserved */ \
181 INTEL_VGA_DEVICE(0x0D1E, info), /* CRW GT2 reserved */ \
182 INTEL_VGA_DEVICE(0x0D2E, info) /* CRW GT3 reserved */ \
184 #define INTEL_HSW_M_IDS(info) \
185 INTEL_VGA_DEVICE(0x0406, info), /* GT1 mobile */ \
186 INTEL_VGA_DEVICE(0x0416, info), /* GT2 mobile */ \
187 INTEL_VGA_DEVICE(0x0426, info), /* GT2 mobile */ \
188 INTEL_VGA_DEVICE(0x0C06, info), /* SDV GT1 mobile */ \
189 INTEL_VGA_DEVICE(0x0C16, info), /* SDV GT2 mobile */ \
190 INTEL_VGA_DEVICE(0x0C26, info), /* SDV GT3 mobile */ \
191 INTEL_VGA_DEVICE(0x0A06, info), /* ULT GT1 mobile */ \
192 INTEL_VGA_DEVICE(0x0A16, info), /* ULT GT2 mobile */ \
193 INTEL_VGA_DEVICE(0x0A26, info), /* ULT GT3 mobile */ \
194 INTEL_VGA_DEVICE(0x0A0E, info), /* ULX GT1 mobile */ \
195 INTEL_VGA_DEVICE(0x0A1E, info), /* ULX GT2 mobile */ \
196 INTEL_VGA_DEVICE(0x0A2E, info), /* ULT GT3 reserved */ \
197 INTEL_VGA_DEVICE(0x0D06, info), /* CRW GT1 mobile */ \
198 INTEL_VGA_DEVICE(0x0D16, info), /* CRW GT2 mobile */ \
199 INTEL_VGA_DEVICE(0x0D26, info) /* CRW GT3 mobile */
201 #define INTEL_VLV_M_IDS(info) \
202 INTEL_VGA_DEVICE(0x0f30, info), \
203 INTEL_VGA_DEVICE(0x0f31, info), \
204 INTEL_VGA_DEVICE(0x0f32, info), \
205 INTEL_VGA_DEVICE(0x0f33, info), \
206 INTEL_VGA_DEVICE(0x0157, info)
208 #define INTEL_VLV_D_IDS(info) \
209 INTEL_VGA_DEVICE(0x0155, info)
211 #define INTEL_BDW_GT12M_IDS(info) \
212 INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \
213 INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \
214 INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \
215 INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \
216 INTEL_VGA_DEVICE(0x1612, info), /* GT2 Halo */ \
217 INTEL_VGA_DEVICE(0x1616, info), /* GT2 ULT */ \
218 INTEL_VGA_DEVICE(0x161B, info), /* GT2 ULT */ \
219 INTEL_VGA_DEVICE(0x161E, info) /* GT2 ULX */
221 #define INTEL_BDW_GT12D_IDS(info) \
222 INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \
223 INTEL_VGA_DEVICE(0x160D, info), /* GT1 Workstation */ \
224 INTEL_VGA_DEVICE(0x161A, info), /* GT2 Server */ \
225 INTEL_VGA_DEVICE(0x161D, info) /* GT2 Workstation */
227 #define INTEL_BDW_GT3M_IDS(info) \
228 INTEL_VGA_DEVICE(0x1622, info), /* ULT */ \
229 INTEL_VGA_DEVICE(0x1626, info), /* ULT */ \
230 INTEL_VGA_DEVICE(0x162B, info), /* Iris */ \
231 INTEL_VGA_DEVICE(0x162E, info) /* ULX */
233 #define INTEL_BDW_GT3D_IDS(info) \
234 INTEL_VGA_DEVICE(0x162A, info), /* Server */ \
235 INTEL_VGA_DEVICE(0x162D, info) /* Workstation */
237 #define INTEL_BDW_RSVDM_IDS(info) \
238 INTEL_VGA_DEVICE(0x1632, info), /* ULT */ \
239 INTEL_VGA_DEVICE(0x1636, info), /* ULT */ \
240 INTEL_VGA_DEVICE(0x163B, info), /* Iris */ \
241 INTEL_VGA_DEVICE(0x163E, info) /* ULX */
243 #define INTEL_BDW_RSVDD_IDS(info) \
244 INTEL_VGA_DEVICE(0x163A, info), /* Server */ \
245 INTEL_VGA_DEVICE(0x163D, info) /* Workstation */
247 #define INTEL_BDW_M_IDS(info) \
248 INTEL_BDW_GT12M_IDS(info), \
249 INTEL_BDW_GT3M_IDS(info), \
250 INTEL_BDW_RSVDM_IDS(info)
252 #define INTEL_BDW_D_IDS(info) \
253 INTEL_BDW_GT12D_IDS(info), \
254 INTEL_BDW_GT3D_IDS(info), \
255 INTEL_BDW_RSVDD_IDS(info)
257 #define INTEL_CHV_IDS(info) \
258 INTEL_VGA_DEVICE(0x22b0, info), \
259 INTEL_VGA_DEVICE(0x22b1, info), \
260 INTEL_VGA_DEVICE(0x22b2, info), \
261 INTEL_VGA_DEVICE(0x22b3, info)
263 #define INTEL_SKL_GT1_IDS(info) \
264 INTEL_VGA_DEVICE(0x1906, info), /* ULT GT1 */ \
265 INTEL_VGA_DEVICE(0x190E, info), /* ULX GT1 */ \
266 INTEL_VGA_DEVICE(0x1902, info), /* DT GT1 */ \
267 INTEL_VGA_DEVICE(0x190B, info), /* Halo GT1 */ \
268 INTEL_VGA_DEVICE(0x190A, info) /* SRV GT1 */
270 #define INTEL_SKL_GT2_IDS(info) \
271 INTEL_VGA_DEVICE(0x1916, info), /* ULT GT2 */ \
272 INTEL_VGA_DEVICE(0x1921, info), /* ULT GT2F */ \
273 INTEL_VGA_DEVICE(0x191E, info), /* ULX GT2 */ \
274 INTEL_VGA_DEVICE(0x1912, info), /* DT GT2 */ \
275 INTEL_VGA_DEVICE(0x191B, info), /* Halo GT2 */ \
276 INTEL_VGA_DEVICE(0x191A, info), /* SRV GT2 */ \
277 INTEL_VGA_DEVICE(0x191D, info) /* WKS GT2 */
279 #define INTEL_SKL_GT3_IDS(info) \
280 INTEL_VGA_DEVICE(0x1926, info), /* ULT GT3 */ \
281 INTEL_VGA_DEVICE(0x192B, info), /* Halo GT3 */ \
282 INTEL_VGA_DEVICE(0x192A, info) /* SRV GT3 */ \
284 #define INTEL_SKL_IDS(info) \
285 INTEL_SKL_GT1_IDS(info), \
286 INTEL_SKL_GT2_IDS(info), \
287 INTEL_SKL_GT3_IDS(info)
/linux-4.1.27/net/wireless/
H A Dethtool.c6 void cfg80211_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) cfg80211_get_drvinfo() argument
10 strlcpy(info->driver, wiphy_dev(wdev->wiphy)->driver->name, cfg80211_get_drvinfo()
11 sizeof(info->driver)); cfg80211_get_drvinfo()
13 strlcpy(info->version, init_utsname()->release, sizeof(info->version)); cfg80211_get_drvinfo()
16 strlcpy(info->fw_version, wdev->wiphy->fw_version, cfg80211_get_drvinfo()
17 sizeof(info->fw_version)); cfg80211_get_drvinfo()
19 strlcpy(info->fw_version, "N/A", sizeof(info->fw_version)); cfg80211_get_drvinfo()
21 strlcpy(info->bus_info, dev_name(wiphy_dev(wdev->wiphy)), cfg80211_get_drvinfo()
22 sizeof(info->bus_info)); cfg80211_get_drvinfo()
H A Dlib80211.c44 static void lib80211_crypt_deinit_entries(struct lib80211_crypt_info *info,
46 static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info);
49 int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name, lib80211_crypt_info_init() argument
52 memset(info, 0, sizeof(*info)); lib80211_crypt_info_init()
54 info->name = name; lib80211_crypt_info_init()
55 info->lock = lock; lib80211_crypt_info_init()
57 INIT_LIST_HEAD(&info->crypt_deinit_list); lib80211_crypt_info_init()
58 setup_timer(&info->crypt_deinit_timer, lib80211_crypt_deinit_handler, lib80211_crypt_info_init()
59 (unsigned long)info); lib80211_crypt_info_init()
65 void lib80211_crypt_info_free(struct lib80211_crypt_info *info) lib80211_crypt_info_free() argument
69 lib80211_crypt_quiescing(info); lib80211_crypt_info_free()
70 del_timer_sync(&info->crypt_deinit_timer); lib80211_crypt_info_free()
71 lib80211_crypt_deinit_entries(info, 1); lib80211_crypt_info_free()
74 struct lib80211_crypt_data *crypt = info->crypt[i]; lib80211_crypt_info_free()
81 info->crypt[i] = NULL; lib80211_crypt_info_free()
87 static void lib80211_crypt_deinit_entries(struct lib80211_crypt_info *info, lib80211_crypt_deinit_entries() argument
93 spin_lock_irqsave(info->lock, flags); lib80211_crypt_deinit_entries()
94 list_for_each_entry_safe(entry, next, &info->crypt_deinit_list, list) { lib80211_crypt_deinit_entries()
106 spin_unlock_irqrestore(info->lock, flags); lib80211_crypt_deinit_entries()
110 static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info) lib80211_crypt_quiescing() argument
114 spin_lock_irqsave(info->lock, flags); lib80211_crypt_quiescing()
115 info->crypt_quiesced = 1; lib80211_crypt_quiescing()
116 spin_unlock_irqrestore(info->lock, flags); lib80211_crypt_quiescing()
121 struct lib80211_crypt_info *info = (struct lib80211_crypt_info *)data; lib80211_crypt_deinit_handler() local
124 lib80211_crypt_deinit_entries(info, 0); lib80211_crypt_deinit_handler()
126 spin_lock_irqsave(info->lock, flags); lib80211_crypt_deinit_handler()
127 if (!list_empty(&info->crypt_deinit_list) && !info->crypt_quiesced) { lib80211_crypt_deinit_handler()
129 "deletion list\n", info->name); lib80211_crypt_deinit_handler()
130 info->crypt_deinit_timer.expires = jiffies + HZ; lib80211_crypt_deinit_handler()
131 add_timer(&info->crypt_deinit_timer); lib80211_crypt_deinit_handler()
133 spin_unlock_irqrestore(info->lock, flags); lib80211_crypt_deinit_handler()
136 void lib80211_crypt_delayed_deinit(struct lib80211_crypt_info *info, lib80211_crypt_delayed_deinit() argument
152 spin_lock_irqsave(info->lock, flags); lib80211_crypt_delayed_deinit()
153 if (!info->crypt_quiesced) { lib80211_crypt_delayed_deinit()
154 list_add(&tmp->list, &info->crypt_deinit_list); lib80211_crypt_delayed_deinit()
155 if (!timer_pending(&info->crypt_deinit_timer)) { lib80211_crypt_delayed_deinit()
156 info->crypt_deinit_timer.expires = jiffies + HZ; lib80211_crypt_delayed_deinit()
157 add_timer(&info->crypt_deinit_timer); lib80211_crypt_delayed_deinit()
160 spin_unlock_irqrestore(info->lock, flags); lib80211_crypt_delayed_deinit()
H A Dwext-compat.h14 struct iw_request_info *info,
17 struct iw_request_info *info,
20 struct iw_request_info *info,
23 struct iw_request_info *info,
26 struct iw_request_info *info,
29 struct iw_request_info *info,
33 struct iw_request_info *info,
36 struct iw_request_info *info,
39 struct iw_request_info *info,
42 struct iw_request_info *info,
45 struct iw_request_info *info,
48 struct iw_request_info *info,
52 struct iw_request_info *info,
55 struct iw_request_info *info,
/linux-4.1.27/drivers/nfc/nxp-nci/
H A Dcore.c45 struct nxp_nci_info *info = nci_get_drvdata(ndev); nxp_nci_open() local
48 mutex_lock(&info->info_lock); nxp_nci_open()
50 if (info->mode != NXP_NCI_MODE_COLD) { nxp_nci_open()
55 if (info->phy_ops->set_mode) nxp_nci_open()
56 r = info->phy_ops->set_mode(info->phy_id, NXP_NCI_MODE_NCI); nxp_nci_open()
58 info->mode = NXP_NCI_MODE_NCI; nxp_nci_open()
61 mutex_unlock(&info->info_lock); nxp_nci_open()
67 struct nxp_nci_info *info = nci_get_drvdata(ndev); nxp_nci_close() local
70 mutex_lock(&info->info_lock); nxp_nci_close()
72 if (info->phy_ops->set_mode) nxp_nci_close()
73 r = info->phy_ops->set_mode(info->phy_id, NXP_NCI_MODE_COLD); nxp_nci_close()
75 info->mode = NXP_NCI_MODE_COLD; nxp_nci_close()
77 mutex_unlock(&info->info_lock); nxp_nci_close()
83 struct nxp_nci_info *info = nci_get_drvdata(ndev); nxp_nci_send() local
86 if (!info->phy_ops->write) { nxp_nci_send()
91 if (info->mode != NXP_NCI_MODE_NCI) { nxp_nci_send()
96 r = info->phy_ops->write(info->phy_id, skb); nxp_nci_send()
115 struct nxp_nci_info *info; nxp_nci_probe() local
118 info = devm_kzalloc(pdev, sizeof(struct nxp_nci_info), GFP_KERNEL); nxp_nci_probe()
119 if (!info) { nxp_nci_probe()
124 info->phy_id = phy_id; nxp_nci_probe()
125 info->pdev = pdev; nxp_nci_probe()
126 info->phy_ops = phy_ops; nxp_nci_probe()
127 info->max_payload = max_payload; nxp_nci_probe()
128 INIT_WORK(&info->fw_info.work, nxp_nci_fw_work); nxp_nci_probe()
129 init_completion(&info->fw_info.cmd_completion); nxp_nci_probe()
130 mutex_init(&info->info_lock); nxp_nci_probe()
132 if (info->phy_ops->set_mode) { nxp_nci_probe()
133 r = info->phy_ops->set_mode(info->phy_id, NXP_NCI_MODE_COLD); nxp_nci_probe()
138 info->mode = NXP_NCI_MODE_COLD; nxp_nci_probe()
140 info->ndev = nci_allocate_device(&nxp_nci_ops, NXP_NCI_NFC_PROTOCOLS, nxp_nci_probe()
142 if (!info->ndev) { nxp_nci_probe()
147 nci_set_parent_dev(info->ndev, pdev); nxp_nci_probe()
148 nci_set_drvdata(info->ndev, info); nxp_nci_probe()
149 r = nci_register_device(info->ndev); nxp_nci_probe()
153 *ndev = info->ndev; nxp_nci_probe()
158 nci_free_device(info->ndev); nxp_nci_probe()
166 struct nxp_nci_info *info = nci_get_drvdata(ndev); nxp_nci_remove() local
168 if (info->mode == NXP_NCI_MODE_FW) nxp_nci_remove()
169 nxp_nci_fw_work_complete(info, -ESHUTDOWN); nxp_nci_remove()
170 cancel_work_sync(&info->fw_info.work); nxp_nci_remove()
172 mutex_lock(&info->info_lock); nxp_nci_remove()
174 if (info->phy_ops->set_mode) nxp_nci_remove()
175 info->phy_ops->set_mode(info->phy_id, NXP_NCI_MODE_COLD); nxp_nci_remove()
180 mutex_unlock(&info->info_lock); nxp_nci_remove()
/linux-4.1.27/arch/x86/xen/
H A Dvga.c11 void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size) xen_init_vga() argument
25 switch (info->video_type) { xen_init_vga()
28 + sizeof(info->u.text_mode_3)) xen_init_vga()
30 screen_info->orig_video_lines = info->u.text_mode_3.rows; xen_init_vga()
31 screen_info->orig_video_cols = info->u.text_mode_3.columns; xen_init_vga()
32 screen_info->orig_x = info->u.text_mode_3.cursor_x; xen_init_vga()
33 screen_info->orig_y = info->u.text_mode_3.cursor_y; xen_init_vga()
35 info->u.text_mode_3.font_height; xen_init_vga()
44 screen_info->lfb_width = info->u.vesa_lfb.width; xen_init_vga()
45 screen_info->lfb_height = info->u.vesa_lfb.height; xen_init_vga()
46 screen_info->lfb_depth = info->u.vesa_lfb.bits_per_pixel; xen_init_vga()
47 screen_info->lfb_base = info->u.vesa_lfb.lfb_base; xen_init_vga()
48 screen_info->lfb_size = info->u.vesa_lfb.lfb_size; xen_init_vga()
49 screen_info->lfb_linelength = info->u.vesa_lfb.bytes_per_line; xen_init_vga()
50 screen_info->red_size = info->u.vesa_lfb.red_size; xen_init_vga()
51 screen_info->red_pos = info->u.vesa_lfb.red_pos; xen_init_vga()
52 screen_info->green_size = info->u.vesa_lfb.green_size; xen_init_vga()
53 screen_info->green_pos = info->u.vesa_lfb.green_pos; xen_init_vga()
54 screen_info->blue_size = info->u.vesa_lfb.blue_size; xen_init_vga()
55 screen_info->blue_pos = info->u.vesa_lfb.blue_pos; xen_init_vga()
56 screen_info->rsvd_size = info->u.vesa_lfb.rsvd_size; xen_init_vga()
57 screen_info->rsvd_pos = info->u.vesa_lfb.rsvd_pos; xen_init_vga()
59 if (info->video_type == XEN_VGATYPE_EFI_LFB) { xen_init_vga()
66 + sizeof(info->u.vesa_lfb.gbl_caps)) xen_init_vga()
67 screen_info->capabilities = info->u.vesa_lfb.gbl_caps; xen_init_vga()
70 + sizeof(info->u.vesa_lfb.mode_attrs)) xen_init_vga()
71 screen_info->vesa_attributes = info->u.vesa_lfb.mode_attrs; xen_init_vga()
/linux-4.1.27/drivers/tty/
H A Dsynclinkmp.c529 static void hdlcdev_tx_done(SLMP_INFO *info);
530 static void hdlcdev_rx(SLMP_INFO *info, char *buf, int size);
531 static int hdlcdev_init(SLMP_INFO *info);
532 static void hdlcdev_exit(SLMP_INFO *info);
537 static int get_stats(SLMP_INFO *info, struct mgsl_icount __user *user_icount);
538 static int get_params(SLMP_INFO *info, MGSL_PARAMS __user *params);
539 static int set_params(SLMP_INFO *info, MGSL_PARAMS __user *params);
540 static int get_txidle(SLMP_INFO *info, int __user *idle_mode);
541 static int set_txidle(SLMP_INFO *info, int idle_mode);
542 static int tx_enable(SLMP_INFO *info, int enable);
543 static int tx_abort(SLMP_INFO *info);
544 static int rx_enable(SLMP_INFO *info, int enable);
545 static int modem_input_wait(SLMP_INFO *info,int arg);
546 static int wait_mgsl_event(SLMP_INFO *info, int __user *mask_ptr);
552 static void add_device(SLMP_INFO *info);
554 static int claim_resources(SLMP_INFO *info);
555 static void release_resources(SLMP_INFO *info);
557 static int startup(SLMP_INFO *info);
558 static int block_til_ready(struct tty_struct *tty, struct file * filp,SLMP_INFO *info);
560 static void shutdown(SLMP_INFO *info);
561 static void program_hw(SLMP_INFO *info);
562 static void change_params(SLMP_INFO *info);
564 static bool init_adapter(SLMP_INFO *info);
565 static bool register_test(SLMP_INFO *info);
566 static bool irq_test(SLMP_INFO *info);
567 static bool loopback_test(SLMP_INFO *info);
568 static int adapter_test(SLMP_INFO *info);
569 static bool memory_test(SLMP_INFO *info);
571 static void reset_adapter(SLMP_INFO *info);
572 static void reset_port(SLMP_INFO *info);
573 static void async_mode(SLMP_INFO *info);
574 static void hdlc_mode(SLMP_INFO *info);
576 static void rx_stop(SLMP_INFO *info);
577 static void rx_start(SLMP_INFO *info);
578 static void rx_reset_buffers(SLMP_INFO *info);
579 static void rx_free_frame_buffers(SLMP_INFO *info, unsigned int first, unsigned int last);
580 static bool rx_get_frame(SLMP_INFO *info);
582 static void tx_start(SLMP_INFO *info);
583 static void tx_stop(SLMP_INFO *info);
584 static void tx_load_fifo(SLMP_INFO *info);
585 static void tx_set_idle(SLMP_INFO *info);
586 static void tx_load_dma_buffer(SLMP_INFO *info, const char *buf, unsigned int count);
588 static void get_signals(SLMP_INFO *info);
589 static void set_signals(SLMP_INFO *info);
590 static void enable_loopback(SLMP_INFO *info, int enable);
591 static void set_rate(SLMP_INFO *info, u32 data_rate);
593 static int bh_action(SLMP_INFO *info);
595 static void bh_receive(SLMP_INFO *info);
596 static void bh_transmit(SLMP_INFO *info);
597 static void bh_status(SLMP_INFO *info);
598 static void isr_timer(SLMP_INFO *info);
599 static void isr_rxint(SLMP_INFO *info);
600 static void isr_rxrdy(SLMP_INFO *info);
601 static void isr_txint(SLMP_INFO *info);
602 static void isr_txrdy(SLMP_INFO *info);
603 static void isr_rxdmaok(SLMP_INFO *info);
604 static void isr_rxdmaerror(SLMP_INFO *info);
605 static void isr_txdmaok(SLMP_INFO *info);
606 static void isr_txdmaerror(SLMP_INFO *info);
607 static void isr_io_pin(SLMP_INFO *info, u16 status);
609 static int alloc_dma_bufs(SLMP_INFO *info);
610 static void free_dma_bufs(SLMP_INFO *info);
611 static int alloc_buf_list(SLMP_INFO *info);
612 static int alloc_frame_bufs(SLMP_INFO *info, SCADESC *list, SCADESC_EX *list_ex,int count);
613 static int alloc_tmp_rx_buf(SLMP_INFO *info);
614 static void free_tmp_rx_buf(SLMP_INFO *info);
616 static void load_pci_memory(SLMP_INFO *info, char* dest, const char* src, unsigned short count);
617 static void trace_block(SLMP_INFO *info, const char* data, int count, int xmit);
621 static unsigned char read_reg(SLMP_INFO *info, unsigned char addr);
622 static void write_reg(SLMP_INFO *info, unsigned char addr, unsigned char val);
623 static u16 read_reg16(SLMP_INFO *info, unsigned char addr);
624 static void write_reg16(SLMP_INFO *info, unsigned char addr, u16 val);
625 static unsigned char read_status_reg(SLMP_INFO * info);
626 static void write_control_reg(SLMP_INFO * info);
664 static inline int sanity_check(SLMP_INFO *info, sanity_check() argument
673 if (!info) { sanity_check()
677 if (info->magic != MGSL_MAGIC) { sanity_check()
682 if (!info) sanity_check()
715 SLMP_INFO *info; install() local
724 info = synclinkmp_device_list; install()
725 while (info && info->line != line) install()
726 info = info->next_device; install()
727 if (sanity_check(info, tty->name, "open")) install()
729 if (info->init_error) { install()
731 __FILE__, __LINE__, info->device_name, install()
732 info->init_error); install()
736 tty->driver_data = info; install()
738 return tty_port_install(&info->port, driver, tty); install()
745 SLMP_INFO *info = tty->driver_data; open() local
749 info->port.tty = tty; open()
753 __FILE__,__LINE__,tty->driver->name, info->port.count); open()
756 if (info->port.flags & ASYNC_CLOSING){ open()
757 wait_event_interruptible_tty(tty, info->port.close_wait, open()
758 !(info->port.flags & ASYNC_CLOSING)); open()
759 retval = ((info->port.flags & ASYNC_HUP_NOTIFY) ? open()
764 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; open()
766 spin_lock_irqsave(&info->netlock, flags); open()
767 if (info->netcount) { open()
769 spin_unlock_irqrestore(&info->netlock, flags); open()
772 info->port.count++; open()
773 spin_unlock_irqrestore(&info->netlock, flags); open()
775 if (info->port.count == 1) { open()
777 retval = startup(info); open()
782 retval = block_til_ready(tty, filp, info); open()
786 __FILE__,__LINE__, info->device_name, retval); open()
792 __FILE__,__LINE__, info->device_name); open()
798 info->port.tty = NULL; /* tty layer will release tty struct */ open()
799 if(info->port.count) open()
800 info->port.count--; open()
811 SLMP_INFO * info = tty->driver_data; close() local
813 if (sanity_check(info, tty->name, "close")) close()
818 __FILE__,__LINE__, info->device_name, info->port.count); close()
820 if (tty_port_close_start(&info->port, tty, filp) == 0) close()
823 mutex_lock(&info->port.mutex); close()
824 if (info->port.flags & ASYNC_INITIALIZED) close()
825 wait_until_sent(tty, info->timeout); close()
829 shutdown(info); close()
830 mutex_unlock(&info->port.mutex); close()
832 tty_port_close_end(&info->port, tty); close()
833 info->port.tty = NULL; close()
837 tty->driver->name, info->port.count); close()
845 SLMP_INFO *info = tty->driver_data; hangup() local
850 __FILE__,__LINE__, info->device_name ); hangup()
852 if (sanity_check(info, tty->name, "hangup")) hangup()
855 mutex_lock(&info->port.mutex); hangup()
857 shutdown(info); hangup()
859 spin_lock_irqsave(&info->port.lock, flags); hangup()
860 info->port.count = 0; hangup()
861 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; hangup()
862 info->port.tty = NULL; hangup()
863 spin_unlock_irqrestore(&info->port.lock, flags); hangup()
864 mutex_unlock(&info->port.mutex); hangup()
866 wake_up_interruptible(&info->port.open_wait); hangup()
873 SLMP_INFO *info = tty->driver_data; set_termios() local
880 change_params(info); set_termios()
885 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); set_termios()
886 spin_lock_irqsave(&info->lock,flags); set_termios()
887 set_signals(info); set_termios()
888 spin_unlock_irqrestore(&info->lock,flags); set_termios()
894 info->serial_signals |= SerialSignal_DTR; set_termios()
897 info->serial_signals |= SerialSignal_RTS; set_termios()
899 spin_lock_irqsave(&info->lock,flags); set_termios()
900 set_signals(info); set_termios()
901 spin_unlock_irqrestore(&info->lock,flags); set_termios()
926 SLMP_INFO *info = tty->driver_data; write() local
931 __FILE__,__LINE__,info->device_name,count); write()
933 if (sanity_check(info, tty->name, "write")) write()
936 if (!info->tx_buf) write()
939 if (info->params.mode == MGSL_MODE_HDLC) { write()
940 if (count > info->max_frame_size) { write()
944 if (info->tx_active) write()
946 if (info->tx_count) { write()
949 tx_load_dma_buffer(info, info->tx_buf, info->tx_count); write()
952 ret = info->tx_count = count; write()
953 tx_load_dma_buffer(info, buf, count); write()
959 min(info->max_frame_size - info->tx_count - 1, write()
960 info->max_frame_size - info->tx_put)); write()
964 memcpy(info->tx_buf + info->tx_put, buf, c); write()
966 spin_lock_irqsave(&info->lock,flags); write()
967 info->tx_put += c; write()
968 if (info->tx_put >= info->max_frame_size) write()
969 info->tx_put -= info->max_frame_size; write()
970 info->tx_count += c; write()
971 spin_unlock_irqrestore(&info->lock,flags); write()
978 if (info->params.mode == MGSL_MODE_HDLC) { write()
980 ret = info->tx_count = 0; write()
983 tx_load_dma_buffer(info, info->tx_buf, info->tx_count); write()
986 if (info->tx_count && !tty->stopped && !tty->hw_stopped) { write()
987 spin_lock_irqsave(&info->lock,flags); write()
988 if (!info->tx_active) write()
989 tx_start(info); write()
990 spin_unlock_irqrestore(&info->lock,flags); write()
996 __FILE__,__LINE__,info->device_name,ret); write()
1004 SLMP_INFO *info = tty->driver_data; put_char() local
1010 __FILE__,__LINE__,info->device_name,ch); put_char()
1013 if (sanity_check(info, tty->name, "put_char")) put_char()
1016 if (!info->tx_buf) put_char()
1019 spin_lock_irqsave(&info->lock,flags); put_char()
1021 if ( (info->params.mode != MGSL_MODE_HDLC) || put_char()
1022 !info->tx_active ) { put_char()
1024 if (info->tx_count < info->max_frame_size - 1) { put_char()
1025 info->tx_buf[info->tx_put++] = ch; put_char()
1026 if (info->tx_put >= info->max_frame_size) put_char()
1027 info->tx_put -= info->max_frame_size; put_char()
1028 info->tx_count++; put_char()
1033 spin_unlock_irqrestore(&info->lock,flags); put_char()
1041 SLMP_INFO *info = tty->driver_data; send_xchar() local
1046 __FILE__,__LINE__, info->device_name, ch ); send_xchar()
1048 if (sanity_check(info, tty->name, "send_xchar")) send_xchar()
1051 info->x_char = ch; send_xchar()
1054 spin_lock_irqsave(&info->lock,flags); send_xchar()
1055 if (!info->tx_enabled) send_xchar()
1056 tx_start(info); send_xchar()
1057 spin_unlock_irqrestore(&info->lock,flags); send_xchar()
1065 SLMP_INFO * info = tty->driver_data; wait_until_sent() local
1068 if (!info ) wait_until_sent()
1073 __FILE__,__LINE__, info->device_name ); wait_until_sent()
1075 if (sanity_check(info, tty->name, "wait_until_sent")) wait_until_sent()
1078 if (!test_bit(ASYNCB_INITIALIZED, &info->port.flags)) wait_until_sent()
1089 if ( info->params.data_rate ) { wait_until_sent()
1090 char_time = info->timeout/(32 * 5); wait_until_sent()
1099 if ( info->params.mode == MGSL_MODE_HDLC ) { wait_until_sent()
1100 while (info->tx_active) { wait_until_sent()
1112 while ( info->tx_active && info->tx_enabled) { wait_until_sent()
1124 __FILE__,__LINE__, info->device_name ); wait_until_sent()
1131 SLMP_INFO *info = tty->driver_data; write_room() local
1134 if (sanity_check(info, tty->name, "write_room")) write_room()
1137 if (info->params.mode == MGSL_MODE_HDLC) { write_room()
1138 ret = (info->tx_active) ? 0 : HDLC_MAX_FRAME_SIZE; write_room()
1140 ret = info->max_frame_size - info->tx_count - 1; write_room()
1147 __FILE__, __LINE__, info->device_name, ret); write_room()
1156 SLMP_INFO *info = tty->driver_data; flush_chars() local
1161 __FILE__,__LINE__,info->device_name,info->tx_count); flush_chars()
1163 if (sanity_check(info, tty->name, "flush_chars")) flush_chars()
1166 if (info->tx_count <= 0 || tty->stopped || tty->hw_stopped || flush_chars()
1167 !info->tx_buf) flush_chars()
1172 __FILE__,__LINE__,info->device_name ); flush_chars()
1174 spin_lock_irqsave(&info->lock,flags); flush_chars()
1176 if (!info->tx_active) { flush_chars()
1177 if ( (info->params.mode == MGSL_MODE_HDLC) && flush_chars()
1178 info->tx_count ) { flush_chars()
1182 tx_load_dma_buffer(info, flush_chars()
1183 info->tx_buf,info->tx_count); flush_chars()
1185 tx_start(info); flush_chars()
1188 spin_unlock_irqrestore(&info->lock,flags); flush_chars()
1195 SLMP_INFO *info = tty->driver_data; flush_buffer() local
1200 __FILE__,__LINE__, info->device_name ); flush_buffer()
1202 if (sanity_check(info, tty->name, "flush_buffer")) flush_buffer()
1205 spin_lock_irqsave(&info->lock,flags); flush_buffer()
1206 info->tx_count = info->tx_put = info->tx_get = 0; flush_buffer()
1207 del_timer(&info->tx_timer); flush_buffer()
1208 spin_unlock_irqrestore(&info->lock,flags); flush_buffer()
1217 SLMP_INFO *info = tty->driver_data; tx_hold() local
1220 if (sanity_check(info, tty->name, "tx_hold")) tx_hold()
1225 __FILE__,__LINE__,info->device_name); tx_hold()
1227 spin_lock_irqsave(&info->lock,flags); tx_hold()
1228 if (info->tx_enabled) tx_hold()
1229 tx_stop(info); tx_hold()
1230 spin_unlock_irqrestore(&info->lock,flags); tx_hold()
1237 SLMP_INFO *info = tty->driver_data; tx_release() local
1240 if (sanity_check(info, tty->name, "tx_release")) tx_release()
1245 __FILE__,__LINE__,info->device_name); tx_release()
1247 spin_lock_irqsave(&info->lock,flags); tx_release()
1248 if (!info->tx_enabled) tx_release()
1249 tx_start(info); tx_release()
1250 spin_unlock_irqrestore(&info->lock,flags); tx_release()
1266 SLMP_INFO *info = tty->driver_data; ioctl() local
1271 info->device_name, cmd ); ioctl()
1273 if (sanity_check(info, tty->name, "ioctl")) ioctl()
1284 return get_params(info, argp); ioctl()
1286 return set_params(info, argp); ioctl()
1288 return get_txidle(info, argp); ioctl()
1290 return set_txidle(info, (int)arg); ioctl()
1292 return tx_enable(info, (int)arg); ioctl()
1294 return rx_enable(info, (int)arg); ioctl()
1296 return tx_abort(info); ioctl()
1298 return get_stats(info, argp); ioctl()
1300 return wait_mgsl_event(info, argp); ioctl()
1307 return modem_input_wait(info,(int)arg); ioctl()
1324 SLMP_INFO *info = tty->driver_data; get_icount() local
1328 spin_lock_irqsave(&info->lock,flags); get_icount()
1329 cnow = info->icount; get_icount()
1330 spin_unlock_irqrestore(&info->lock,flags); get_icount()
1351 static inline void line_info(struct seq_file *m, SLMP_INFO *info) line_info() argument
1358 info->device_name, line_info()
1359 info->phys_sca_base, line_info()
1360 info->phys_memory_base, line_info()
1361 info->phys_statctrl_base, line_info()
1362 info->phys_lcr_base, line_info()
1363 info->irq_level, line_info()
1364 info->max_frame_size ); line_info()
1367 spin_lock_irqsave(&info->lock,flags); line_info()
1368 get_signals(info); line_info()
1369 spin_unlock_irqrestore(&info->lock,flags); line_info()
1373 if (info->serial_signals & SerialSignal_RTS) line_info()
1375 if (info->serial_signals & SerialSignal_CTS) line_info()
1377 if (info->serial_signals & SerialSignal_DTR) line_info()
1379 if (info->serial_signals & SerialSignal_DSR) line_info()
1381 if (info->serial_signals & SerialSignal_DCD) line_info()
1383 if (info->serial_signals & SerialSignal_RI) line_info()
1386 if (info->params.mode == MGSL_MODE_HDLC) { line_info()
1388 info->icount.txok, info->icount.rxok); line_info()
1389 if (info->icount.txunder) line_info()
1390 seq_printf(m, " txunder:%d", info->icount.txunder); line_info()
1391 if (info->icount.txabort) line_info()
1392 seq_printf(m, " txabort:%d", info->icount.txabort); line_info()
1393 if (info->icount.rxshort) line_info()
1394 seq_printf(m, " rxshort:%d", info->icount.rxshort); line_info()
1395 if (info->icount.rxlong) line_info()
1396 seq_printf(m, " rxlong:%d", info->icount.rxlong); line_info()
1397 if (info->icount.rxover) line_info()
1398 seq_printf(m, " rxover:%d", info->icount.rxover); line_info()
1399 if (info->icount.rxcrc) line_info()
1400 seq_printf(m, " rxlong:%d", info->icount.rxcrc); line_info()
1403 info->icount.tx, info->icount.rx); line_info()
1404 if (info->icount.frame) line_info()
1405 seq_printf(m, " fe:%d", info->icount.frame); line_info()
1406 if (info->icount.parity) line_info()
1407 seq_printf(m, " pe:%d", info->icount.parity); line_info()
1408 if (info->icount.brk) line_info()
1409 seq_printf(m, " brk:%d", info->icount.brk); line_info()
1410 if (info->icount.overrun) line_info()
1411 seq_printf(m, " oe:%d", info->icount.overrun); line_info()
1418 info->tx_active,info->bh_requested,info->bh_running, line_info()
1419 info->pending_bh); line_info()
1426 SLMP_INFO *info; synclinkmp_proc_show() local
1430 info = synclinkmp_device_list; synclinkmp_proc_show()
1431 while( info ) { synclinkmp_proc_show()
1432 line_info(m, info); synclinkmp_proc_show()
1433 info = info->next_device; synclinkmp_proc_show()
1455 SLMP_INFO *info = tty->driver_data; chars_in_buffer() local
1457 if (sanity_check(info, tty->name, "chars_in_buffer")) chars_in_buffer()
1462 __FILE__, __LINE__, info->device_name, info->tx_count); chars_in_buffer()
1464 return info->tx_count; chars_in_buffer()
1471 SLMP_INFO *info = tty->driver_data; throttle() local
1476 __FILE__,__LINE__, info->device_name ); throttle()
1478 if (sanity_check(info, tty->name, "throttle")) throttle()
1485 spin_lock_irqsave(&info->lock,flags); throttle()
1486 info->serial_signals &= ~SerialSignal_RTS; throttle()
1487 set_signals(info); throttle()
1488 spin_unlock_irqrestore(&info->lock,flags); throttle()
1496 SLMP_INFO *info = tty->driver_data; unthrottle() local
1501 __FILE__,__LINE__, info->device_name ); unthrottle()
1503 if (sanity_check(info, tty->name, "unthrottle")) unthrottle()
1507 if (info->x_char) unthrottle()
1508 info->x_char = 0; unthrottle()
1514 spin_lock_irqsave(&info->lock,flags); unthrottle()
1515 info->serial_signals |= SerialSignal_RTS; unthrottle()
1516 set_signals(info); unthrottle()
1517 spin_unlock_irqrestore(&info->lock,flags); unthrottle()
1527 SLMP_INFO * info = tty->driver_data; set_break() local
1532 __FILE__,__LINE__, info->device_name, break_state); set_break()
1534 if (sanity_check(info, tty->name, "set_break")) set_break()
1537 spin_lock_irqsave(&info->lock,flags); set_break()
1538 RegValue = read_reg(info, CTL); set_break()
1543 write_reg(info, CTL, RegValue); set_break()
1544 spin_unlock_irqrestore(&info->lock,flags); set_break()
1563 SLMP_INFO *info = dev_to_port(dev); hdlcdev_attach() local
1568 if (info->port.count) hdlcdev_attach()
1589 info->params.encoding = new_encoding; hdlcdev_attach()
1590 info->params.crc_type = new_crctype; hdlcdev_attach()
1593 if (info->netcount) hdlcdev_attach()
1594 program_hw(info); hdlcdev_attach()
1608 SLMP_INFO *info = dev_to_port(dev); hdlcdev_xmit() local
1618 info->tx_count = skb->len; hdlcdev_xmit()
1619 tx_load_dma_buffer(info, skb->data, skb->len); hdlcdev_xmit()
1632 spin_lock_irqsave(&info->lock,flags); hdlcdev_xmit()
1633 if (!info->tx_active) hdlcdev_xmit()
1634 tx_start(info); hdlcdev_xmit()
1635 spin_unlock_irqrestore(&info->lock,flags); hdlcdev_xmit()
1650 SLMP_INFO *info = dev_to_port(dev); hdlcdev_open() local
1662 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
1663 if (info->port.count != 0 || info->netcount != 0) { hdlcdev_open()
1665 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
1668 info->netcount=1; hdlcdev_open()
1669 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
1672 if ((rc = startup(info)) != 0) { hdlcdev_open()
1673 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
1674 info->netcount=0; hdlcdev_open()
1675 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
1680 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; hdlcdev_open()
1681 program_hw(info); hdlcdev_open()
1688 spin_lock_irqsave(&info->lock, flags); hdlcdev_open()
1689 get_signals(info); hdlcdev_open()
1690 spin_unlock_irqrestore(&info->lock, flags); hdlcdev_open()
1691 if (info->serial_signals & SerialSignal_DCD) hdlcdev_open()
1708 SLMP_INFO *info = dev_to_port(dev); hdlcdev_close() local
1717 shutdown(info); hdlcdev_close()
1721 spin_lock_irqsave(&info->netlock, flags); hdlcdev_close()
1722 info->netcount=0; hdlcdev_close()
1723 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_close()
1742 SLMP_INFO *info = dev_to_port(dev); hdlcdev_ioctl() local
1749 if (info->port.count) hdlcdev_ioctl()
1764 flags = info->params.flags & (HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
1778 new_line.clock_rate = info->params.clock_speed; hdlcdev_ioctl()
1779 new_line.loopback = info->params.loopback ? 1:0; hdlcdev_ioctl()
1798 case CLOCK_DEFAULT: flags = info->params.flags & hdlcdev_ioctl()
1809 info->params.flags &= ~(HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
1813 info->params.flags |= flags; hdlcdev_ioctl()
1815 info->params.loopback = new_line.loopback; hdlcdev_ioctl()
1818 info->params.clock_speed = new_line.clock_rate; hdlcdev_ioctl()
1820 info->params.clock_speed = 0; hdlcdev_ioctl()
1823 if (info->netcount) hdlcdev_ioctl()
1824 program_hw(info); hdlcdev_ioctl()
1839 SLMP_INFO *info = dev_to_port(dev); hdlcdev_tx_timeout() local
1848 spin_lock_irqsave(&info->lock,flags); hdlcdev_tx_timeout()
1849 tx_stop(info); hdlcdev_tx_timeout()
1850 spin_unlock_irqrestore(&info->lock,flags); hdlcdev_tx_timeout()
1859 * info pointer to device instance information
1861 static void hdlcdev_tx_done(SLMP_INFO *info) hdlcdev_tx_done() argument
1863 if (netif_queue_stopped(info->netdev)) hdlcdev_tx_done()
1864 netif_wake_queue(info->netdev); hdlcdev_tx_done()
1871 * info pointer to device instance information
1875 static void hdlcdev_rx(SLMP_INFO *info, char *buf, int size) hdlcdev_rx() argument
1878 struct net_device *dev = info->netdev; hdlcdev_rx()
1913 * info pointer to device instance information
1917 static int hdlcdev_init(SLMP_INFO *info) hdlcdev_init() argument
1925 if (!(dev = alloc_hdlcdev(info))) { hdlcdev_init()
1931 dev->mem_start = info->phys_sca_base; hdlcdev_init()
1932 dev->mem_end = info->phys_sca_base + SCA_BASE_SIZE - 1; hdlcdev_init()
1933 dev->irq = info->irq_level; hdlcdev_init()
1952 info->netdev = dev; hdlcdev_init()
1960 * info pointer to device instance information
1962 static void hdlcdev_exit(SLMP_INFO *info) hdlcdev_exit() argument
1964 unregister_hdlc_device(info->netdev); hdlcdev_exit()
1965 free_netdev(info->netdev); hdlcdev_exit()
1966 info->netdev = NULL; hdlcdev_exit()
1975 static int bh_action(SLMP_INFO *info) bh_action() argument
1980 spin_lock_irqsave(&info->lock,flags); bh_action()
1982 if (info->pending_bh & BH_RECEIVE) { bh_action()
1983 info->pending_bh &= ~BH_RECEIVE; bh_action()
1985 } else if (info->pending_bh & BH_TRANSMIT) { bh_action()
1986 info->pending_bh &= ~BH_TRANSMIT; bh_action()
1988 } else if (info->pending_bh & BH_STATUS) { bh_action()
1989 info->pending_bh &= ~BH_STATUS; bh_action()
1995 info->bh_running = false; bh_action()
1996 info->bh_requested = false; bh_action()
1999 spin_unlock_irqrestore(&info->lock,flags); bh_action()
2008 SLMP_INFO *info = container_of(work, SLMP_INFO, task); bh_handler() local
2013 __FILE__,__LINE__,info->device_name); bh_handler()
2015 info->bh_running = true; bh_handler()
2017 while((action = bh_action(info)) != 0) { bh_handler()
2022 __FILE__,__LINE__,info->device_name, action); bh_handler()
2027 bh_receive(info); bh_handler()
2030 bh_transmit(info); bh_handler()
2033 bh_status(info); bh_handler()
2038 __FILE__,__LINE__,info->device_name,action); bh_handler()
2045 __FILE__,__LINE__,info->device_name); bh_handler()
2048 static void bh_receive(SLMP_INFO *info) bh_receive() argument
2052 __FILE__,__LINE__,info->device_name); bh_receive()
2054 while( rx_get_frame(info) ); bh_receive()
2057 static void bh_transmit(SLMP_INFO *info) bh_transmit() argument
2059 struct tty_struct *tty = info->port.tty; bh_transmit()
2063 __FILE__,__LINE__,info->device_name); bh_transmit()
2069 static void bh_status(SLMP_INFO *info) bh_status() argument
2073 __FILE__,__LINE__,info->device_name); bh_status()
2075 info->ri_chkcount = 0; bh_status()
2076 info->dsr_chkcount = 0; bh_status()
2077 info->dcd_chkcount = 0; bh_status()
2078 info->cts_chkcount = 0; bh_status()
2081 static void isr_timer(SLMP_INFO * info) isr_timer() argument
2083 unsigned char timer = (info->port_num & 1) ? TIMER2 : TIMER0; isr_timer()
2086 write_reg(info, IER2, 0); isr_timer()
2098 write_reg(info, (unsigned char)(timer + TMCS), 0); isr_timer()
2100 info->irq_occurred = true; isr_timer()
2104 __FILE__,__LINE__,info->device_name); isr_timer()
2107 static void isr_rxint(SLMP_INFO * info) isr_rxint() argument
2109 struct tty_struct *tty = info->port.tty; isr_rxint()
2110 struct mgsl_icount *icount = &info->icount; isr_rxint()
2111 unsigned char status = read_reg(info, SR1) & info->ie1_value & (FLGD + IDLD + CDCD + BRKD); isr_rxint()
2112 unsigned char status2 = read_reg(info, SR2) & info->ie2_value & OVRN; isr_rxint()
2116 write_reg(info, SR1, status); isr_rxint()
2119 write_reg(info, SR2, status2); isr_rxint()
2123 __FILE__,__LINE__,info->device_name,status,status2); isr_rxint()
2125 if (info->params.mode == MGSL_MODE_ASYNC) { isr_rxint()
2132 if (!(status & info->ignore_status_mask1)) { isr_rxint()
2133 if (info->read_status_mask1 & BRKD) { isr_rxint()
2134 tty_insert_flip_char(&info->port, 0, TTY_BREAK); isr_rxint()
2135 if (tty && (info->port.flags & ASYNC_SAK)) isr_rxint()
2144 info->icount.exithunt++; isr_rxint()
2146 info->icount.rxidle++; isr_rxint()
2147 wake_up_interruptible(&info->event_wait_q); isr_rxint()
2155 get_signals( info ); isr_rxint()
2156 isr_io_pin(info, isr_rxint()
2157 MISCSTATUS_DCD_LATCHED|(info->serial_signals&SerialSignal_DCD)); isr_rxint()
2164 static void isr_rxrdy(SLMP_INFO * info) isr_rxrdy() argument
2168 struct mgsl_icount *icount = &info->icount; isr_rxrdy()
2172 __FILE__,__LINE__,info->device_name); isr_rxrdy()
2174 while((status = read_reg(info,CST0)) & BIT0) isr_rxrdy()
2178 DataByte = read_reg(info,TRB); isr_rxrdy()
2184 __FILE__,__LINE__,info->device_name,status); isr_rxrdy()
2195 if (status & info->ignore_status_mask2) isr_rxrdy()
2198 status &= info->read_status_mask2; isr_rxrdy()
2213 tty_insert_flip_char(&info->port, DataByte, flag); isr_rxrdy()
2215 tty_insert_flip_char(&info->port, 0, TTY_OVERRUN); isr_rxrdy()
2220 __FILE__,__LINE__,info->device_name, isr_rxrdy()
2225 tty_flip_buffer_push(&info->port); isr_rxrdy()
2228 static void isr_txeom(SLMP_INFO * info, unsigned char status) isr_txeom() argument
2232 __FILE__,__LINE__,info->device_name,status); isr_txeom()
2234 write_reg(info, TXDMA + DIR, 0x00); /* disable Tx DMA IRQs */ isr_txeom()
2235 write_reg(info, TXDMA + DSR, 0xc0); /* clear IRQs and disable DMA */ isr_txeom()
2236 write_reg(info, TXDMA + DCMD, SWABORT); /* reset/init DMA channel */ isr_txeom()
2239 write_reg(info, CMD, TXRESET); isr_txeom()
2240 write_reg(info, CMD, TXENABLE); isr_txeom()
2242 write_reg(info, CMD, TXBUFCLR); isr_txeom()
2245 info->ie0_value &= ~TXRDYE; isr_txeom()
2246 info->ie1_value &= ~(IDLE + UDRN); isr_txeom()
2247 write_reg16(info, IE0, (unsigned short)((info->ie1_value << 8) + info->ie0_value)); isr_txeom()
2248 write_reg(info, SR1, (unsigned char)(UDRN + IDLE)); isr_txeom()
2250 if ( info->tx_active ) { isr_txeom()
2251 if (info->params.mode != MGSL_MODE_ASYNC) { isr_txeom()
2253 info->icount.txunder++; isr_txeom()
2255 info->icount.txok++; isr_txeom()
2258 info->tx_active = false; isr_txeom()
2259 info->tx_count = info->tx_put = info->tx_get = 0; isr_txeom()
2261 del_timer(&info->tx_timer); isr_txeom()
2263 if (info->params.mode != MGSL_MODE_ASYNC && info->drop_rts_on_tx_done ) { isr_txeom()
2264 info->serial_signals &= ~SerialSignal_RTS; isr_txeom()
2265 info->drop_rts_on_tx_done = false; isr_txeom()
2266 set_signals(info); isr_txeom()
2270 if (info->netcount) isr_txeom()
2271 hdlcdev_tx_done(info); isr_txeom()
2275 if (info->port.tty && (info->port.tty->stopped || info->port.tty->hw_stopped)) { isr_txeom()
2276 tx_stop(info); isr_txeom()
2279 info->pending_bh |= BH_TRANSMIT; isr_txeom()
2288 static void isr_txint(SLMP_INFO * info) isr_txint() argument
2290 unsigned char status = read_reg(info, SR1) & info->ie1_value & (UDRN + IDLE + CCTS); isr_txint()
2293 write_reg(info, SR1, status); isr_txint()
2297 __FILE__,__LINE__,info->device_name,status); isr_txint()
2300 isr_txeom(info, status); isr_txint()
2306 get_signals( info ); isr_txint()
2307 isr_io_pin(info, isr_txint()
2308 MISCSTATUS_CTS_LATCHED|(info->serial_signals&SerialSignal_CTS)); isr_txint()
2316 static void isr_txrdy(SLMP_INFO * info) isr_txrdy() argument
2320 __FILE__,__LINE__,info->device_name,info->tx_count); isr_txrdy()
2322 if (info->params.mode != MGSL_MODE_ASYNC) { isr_txrdy()
2324 info->ie0_value &= ~TXRDYE; isr_txrdy()
2325 info->ie1_value |= IDLE; isr_txrdy()
2326 write_reg16(info, IE0, (unsigned short)((info->ie1_value << 8) + info->ie0_value)); isr_txrdy()
2330 if (info->port.tty && (info->port.tty->stopped || info->port.tty->hw_stopped)) { isr_txrdy()
2331 tx_stop(info); isr_txrdy()
2335 if ( info->tx_count ) isr_txrdy()
2336 tx_load_fifo( info ); isr_txrdy()
2338 info->tx_active = false; isr_txrdy()
2339 info->ie0_value &= ~TXRDYE; isr_txrdy()
2340 write_reg(info, IE0, info->ie0_value); isr_txrdy()
2343 if (info->tx_count < WAKEUP_CHARS) isr_txrdy()
2344 info->pending_bh |= BH_TRANSMIT; isr_txrdy()
2347 static void isr_rxdmaok(SLMP_INFO * info) isr_rxdmaok() argument
2352 unsigned char status = read_reg(info,RXDMA + DSR) & 0xc0; isr_rxdmaok()
2355 write_reg(info, RXDMA + DSR, (unsigned char)(status | 1)); isr_rxdmaok()
2359 __FILE__,__LINE__,info->device_name,status); isr_rxdmaok()
2361 info->pending_bh |= BH_RECEIVE; isr_rxdmaok()
2364 static void isr_rxdmaerror(SLMP_INFO * info) isr_rxdmaerror() argument
2369 unsigned char status = read_reg(info,RXDMA + DSR) & 0x30; isr_rxdmaerror()
2372 write_reg(info, RXDMA + DSR, (unsigned char)(status | 1)); isr_rxdmaerror()
2376 __FILE__,__LINE__,info->device_name,status); isr_rxdmaerror()
2378 info->rx_overflow = true; isr_rxdmaerror()
2379 info->pending_bh |= BH_RECEIVE; isr_rxdmaerror()
2382 static void isr_txdmaok(SLMP_INFO * info) isr_txdmaok() argument
2384 unsigned char status_reg1 = read_reg(info, SR1); isr_txdmaok()
2386 write_reg(info, TXDMA + DIR, 0x00); /* disable Tx DMA IRQs */ isr_txdmaok()
2387 write_reg(info, TXDMA + DSR, 0xc0); /* clear IRQs and disable DMA */ isr_txdmaok()
2388 write_reg(info, TXDMA + DCMD, SWABORT); /* reset/init DMA channel */ isr_txdmaok()
2392 __FILE__,__LINE__,info->device_name,status_reg1); isr_txdmaok()
2395 write_reg16(info, TRC0, 0); isr_txdmaok()
2396 info->ie0_value |= TXRDYE; isr_txdmaok()
2397 write_reg(info, IE0, info->ie0_value); isr_txdmaok()
2400 static void isr_txdmaerror(SLMP_INFO * info) isr_txdmaerror() argument
2405 unsigned char status = read_reg(info,TXDMA + DSR) & 0x30; isr_txdmaerror()
2408 write_reg(info, TXDMA + DSR, (unsigned char)(status | 1)); isr_txdmaerror()
2412 __FILE__,__LINE__,info->device_name,status); isr_txdmaerror()
2417 static void isr_io_pin( SLMP_INFO *info, u16 status ) isr_io_pin() argument
2427 icount = &info->icount; isr_io_pin()
2432 info->input_signal_events.ri_up++; isr_io_pin()
2434 info->input_signal_events.ri_down++; isr_io_pin()
2439 info->input_signal_events.dsr_up++; isr_io_pin()
2441 info->input_signal_events.dsr_down++; isr_io_pin()
2444 if ((info->dcd_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) { isr_io_pin()
2445 info->ie1_value &= ~CDCD; isr_io_pin()
2446 write_reg(info, IE1, info->ie1_value); isr_io_pin()
2450 info->input_signal_events.dcd_up++; isr_io_pin()
2452 info->input_signal_events.dcd_down++; isr_io_pin()
2454 if (info->netcount) { isr_io_pin()
2456 netif_carrier_on(info->netdev); isr_io_pin()
2458 netif_carrier_off(info->netdev); isr_io_pin()
2464 if ((info->cts_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) { isr_io_pin()
2465 info->ie1_value &= ~CCTS; isr_io_pin()
2466 write_reg(info, IE1, info->ie1_value); isr_io_pin()
2470 info->input_signal_events.cts_up++; isr_io_pin()
2472 info->input_signal_events.cts_down++; isr_io_pin()
2474 wake_up_interruptible(&info->status_event_wait_q); isr_io_pin()
2475 wake_up_interruptible(&info->event_wait_q); isr_io_pin()
2477 if ( (info->port.flags & ASYNC_CHECK_CD) && isr_io_pin()
2480 printk("%s CD now %s...", info->device_name, isr_io_pin()
2483 wake_up_interruptible(&info->port.open_wait); isr_io_pin()
2487 if (info->port.tty) isr_io_pin()
2488 tty_hangup(info->port.tty); isr_io_pin()
2492 if (tty_port_cts_enabled(&info->port) && isr_io_pin()
2494 if ( info->port.tty ) { isr_io_pin()
2495 if (info->port.tty->hw_stopped) { isr_io_pin()
2499 info->port.tty->hw_stopped = 0; isr_io_pin()
2500 tx_start(info); isr_io_pin()
2501 info->pending_bh |= BH_TRANSMIT; isr_io_pin()
2508 info->port.tty->hw_stopped = 1; isr_io_pin()
2509 tx_stop(info); isr_io_pin()
2516 info->pending_bh |= BH_STATUS; isr_io_pin()
2528 SLMP_INFO *info = dev_id; synclinkmp_interrupt() local
2538 __FILE__, __LINE__, info->irq_level); synclinkmp_interrupt()
2540 spin_lock(&info->lock); synclinkmp_interrupt()
2545 tmp = read_reg16(info, ISR0); /* get ISR0 and ISR1 in one read */ synclinkmp_interrupt()
2548 timerstatus0 = read_reg(info, ISR2); synclinkmp_interrupt()
2552 __FILE__, __LINE__, info->device_name, synclinkmp_interrupt()
2555 if (info->port_count == 4) { synclinkmp_interrupt()
2557 tmp = read_reg16(info->port_array[2], ISR0); synclinkmp_interrupt()
2560 timerstatus1 = read_reg(info->port_array[2], ISR2); synclinkmp_interrupt()
2564 __FILE__,__LINE__,info->device_name, synclinkmp_interrupt()
2572 for(i=0; i < info->port_count ; i++) { synclinkmp_interrupt()
2573 if (info->port_array[i] == NULL) synclinkmp_interrupt()
2586 isr_rxrdy(info->port_array[i]); synclinkmp_interrupt()
2588 isr_txrdy(info->port_array[i]); synclinkmp_interrupt()
2590 isr_rxint(info->port_array[i]); synclinkmp_interrupt()
2592 isr_txint(info->port_array[i]); synclinkmp_interrupt()
2595 isr_rxdmaerror(info->port_array[i]); synclinkmp_interrupt()
2597 isr_rxdmaok(info->port_array[i]); synclinkmp_interrupt()
2599 isr_txdmaerror(info->port_array[i]); synclinkmp_interrupt()
2601 isr_txdmaok(info->port_array[i]); synclinkmp_interrupt()
2605 isr_timer(info->port_array[0]); synclinkmp_interrupt()
2607 isr_timer(info->port_array[1]); synclinkmp_interrupt()
2609 isr_timer(info->port_array[2]); synclinkmp_interrupt()
2611 isr_timer(info->port_array[3]); synclinkmp_interrupt()
2614 for(i=0; i < info->port_count ; i++) { synclinkmp_interrupt()
2615 SLMP_INFO * port = info->port_array[i]; synclinkmp_interrupt()
2635 spin_unlock(&info->lock); synclinkmp_interrupt()
2639 __FILE__, __LINE__, info->irq_level); synclinkmp_interrupt()
2645 static int startup(SLMP_INFO * info) startup() argument
2648 printk("%s(%d):%s tx_releaseup()\n",__FILE__,__LINE__,info->device_name); startup()
2650 if (info->port.flags & ASYNC_INITIALIZED) startup()
2653 if (!info->tx_buf) { startup()
2654 info->tx_buf = kmalloc(info->max_frame_size, GFP_KERNEL); startup()
2655 if (!info->tx_buf) { startup()
2657 __FILE__,__LINE__,info->device_name); startup()
2662 info->pending_bh = 0; startup()
2664 memset(&info->icount, 0, sizeof(info->icount)); startup()
2667 reset_port(info); startup()
2669 change_params(info); startup()
2671 mod_timer(&info->status_timer, jiffies + msecs_to_jiffies(10)); startup()
2673 if (info->port.tty) startup()
2674 clear_bit(TTY_IO_ERROR, &info->port.tty->flags); startup()
2676 info->port.flags |= ASYNC_INITIALIZED; startup()
2683 static void shutdown(SLMP_INFO * info) shutdown() argument
2687 if (!(info->port.flags & ASYNC_INITIALIZED)) shutdown()
2692 __FILE__,__LINE__, info->device_name ); shutdown()
2696 wake_up_interruptible(&info->status_event_wait_q); shutdown()
2697 wake_up_interruptible(&info->event_wait_q); shutdown()
2699 del_timer(&info->tx_timer); shutdown()
2700 del_timer(&info->status_timer); shutdown()
2702 kfree(info->tx_buf); shutdown()
2703 info->tx_buf = NULL; shutdown()
2705 spin_lock_irqsave(&info->lock,flags); shutdown()
2707 reset_port(info); shutdown()
2709 if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) { shutdown()
2710 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); shutdown()
2711 set_signals(info); shutdown()
2714 spin_unlock_irqrestore(&info->lock,flags); shutdown()
2716 if (info->port.tty) shutdown()
2717 set_bit(TTY_IO_ERROR, &info->port.tty->flags); shutdown()
2719 info->port.flags &= ~ASYNC_INITIALIZED; shutdown()
2722 static void program_hw(SLMP_INFO *info) program_hw() argument
2726 spin_lock_irqsave(&info->lock,flags); program_hw()
2728 rx_stop(info); program_hw()
2729 tx_stop(info); program_hw()
2731 info->tx_count = info->tx_put = info->tx_get = 0; program_hw()
2733 if (info->params.mode == MGSL_MODE_HDLC || info->netcount) program_hw()
2734 hdlc_mode(info); program_hw()
2736 async_mode(info); program_hw()
2738 set_signals(info); program_hw()
2740 info->dcd_chkcount = 0; program_hw()
2741 info->cts_chkcount = 0; program_hw()
2742 info->ri_chkcount = 0; program_hw()
2743 info->dsr_chkcount = 0; program_hw()
2745 info->ie1_value |= (CDCD|CCTS); program_hw()
2746 write_reg(info, IE1, info->ie1_value); program_hw()
2748 get_signals(info); program_hw()
2750 if (info->netcount || (info->port.tty && info->port.tty->termios.c_cflag & CREAD) ) program_hw()
2751 rx_start(info); program_hw()
2753 spin_unlock_irqrestore(&info->lock,flags); program_hw()
2758 static void change_params(SLMP_INFO *info) change_params() argument
2763 if (!info->port.tty) change_params()
2768 __FILE__,__LINE__, info->device_name ); change_params()
2770 cflag = info->port.tty->termios.c_cflag; change_params()
2775 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; change_params()
2777 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); change_params()
2782 case CS5: info->params.data_bits = 5; break; change_params()
2783 case CS6: info->params.data_bits = 6; break; change_params()
2784 case CS7: info->params.data_bits = 7; break; change_params()
2785 case CS8: info->params.data_bits = 8; break; change_params()
2787 default: info->params.data_bits = 7; break; change_params()
2791 info->params.stop_bits = 2; change_params()
2793 info->params.stop_bits = 1; change_params()
2795 info->params.parity = ASYNC_PARITY_NONE; change_params()
2798 info->params.parity = ASYNC_PARITY_ODD; change_params()
2800 info->params.parity = ASYNC_PARITY_EVEN; change_params()
2803 info->params.parity = ASYNC_PARITY_SPACE; change_params()
2810 bits_per_char = info->params.data_bits + change_params()
2811 info->params.stop_bits + 1; change_params()
2817 if (info->params.data_rate <= 460800) { change_params()
2818 info->params.data_rate = tty_get_baud_rate(info->port.tty); change_params()
2821 if ( info->params.data_rate ) { change_params()
2822 info->timeout = (32*HZ*bits_per_char) / change_params()
2823 info->params.data_rate; change_params()
2825 info->timeout += HZ/50; /* Add .02 seconds of slop */ change_params()
2828 info->port.flags |= ASYNC_CTS_FLOW; change_params()
2830 info->port.flags &= ~ASYNC_CTS_FLOW; change_params()
2833 info->port.flags &= ~ASYNC_CHECK_CD; change_params()
2835 info->port.flags |= ASYNC_CHECK_CD; change_params()
2839 info->read_status_mask2 = OVRN; change_params()
2840 if (I_INPCK(info->port.tty)) change_params()
2841 info->read_status_mask2 |= PE | FRME; change_params()
2842 if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty)) change_params()
2843 info->read_status_mask1 |= BRKD; change_params()
2844 if (I_IGNPAR(info->port.tty)) change_params()
2845 info->ignore_status_mask2 |= PE | FRME; change_params()
2846 if (I_IGNBRK(info->port.tty)) { change_params()
2847 info->ignore_status_mask1 |= BRKD; change_params()
2851 if (I_IGNPAR(info->port.tty)) change_params()
2852 info->ignore_status_mask2 |= OVRN; change_params()
2855 program_hw(info); change_params()
2858 static int get_stats(SLMP_INFO * info, struct mgsl_icount __user *user_icount) get_stats() argument
2864 __FILE__,__LINE__, info->device_name); get_stats()
2867 memset(&info->icount, 0, sizeof(info->icount)); get_stats()
2869 mutex_lock(&info->port.mutex); get_stats()
2870 COPY_TO_USER(err, user_icount, &info->icount, sizeof(struct mgsl_icount)); get_stats()
2871 mutex_unlock(&info->port.mutex); get_stats()
2879 static int get_params(SLMP_INFO * info, MGSL_PARAMS __user *user_params) get_params() argument
2884 __FILE__,__LINE__, info->device_name); get_params()
2886 mutex_lock(&info->port.mutex); get_params()
2887 COPY_TO_USER(err,user_params, &info->params, sizeof(MGSL_PARAMS)); get_params()
2888 mutex_unlock(&info->port.mutex); get_params()
2892 __FILE__,__LINE__,info->device_name); get_params()
2899 static int set_params(SLMP_INFO * info, MGSL_PARAMS __user *new_params) set_params() argument
2907 __FILE__,__LINE__,info->device_name ); set_params()
2912 __FILE__,__LINE__,info->device_name); set_params()
2916 mutex_lock(&info->port.mutex); set_params()
2917 spin_lock_irqsave(&info->lock,flags); set_params()
2918 memcpy(&info->params,&tmp_params,sizeof(MGSL_PARAMS)); set_params()
2919 spin_unlock_irqrestore(&info->lock,flags); set_params()
2921 change_params(info); set_params()
2922 mutex_unlock(&info->port.mutex); set_params()
2927 static int get_txidle(SLMP_INFO * info, int __user *idle_mode) get_txidle() argument
2933 __FILE__,__LINE__, info->device_name, info->idle_mode); get_txidle()
2935 COPY_TO_USER(err,idle_mode, &info->idle_mode, sizeof(int)); get_txidle()
2939 __FILE__,__LINE__,info->device_name); get_txidle()
2946 static int set_txidle(SLMP_INFO * info, int idle_mode) set_txidle() argument
2952 __FILE__,__LINE__,info->device_name, idle_mode ); set_txidle()
2954 spin_lock_irqsave(&info->lock,flags); set_txidle()
2955 info->idle_mode = idle_mode; set_txidle()
2956 tx_set_idle( info ); set_txidle()
2957 spin_unlock_irqrestore(&info->lock,flags); set_txidle()
2961 static int tx_enable(SLMP_INFO * info, int enable) tx_enable() argument
2967 __FILE__,__LINE__,info->device_name, enable); tx_enable()
2969 spin_lock_irqsave(&info->lock,flags); tx_enable()
2971 if ( !info->tx_enabled ) { tx_enable()
2972 tx_start(info); tx_enable()
2975 if ( info->tx_enabled ) tx_enable()
2976 tx_stop(info); tx_enable()
2978 spin_unlock_irqrestore(&info->lock,flags); tx_enable()
2984 static int tx_abort(SLMP_INFO * info) tx_abort() argument
2990 __FILE__,__LINE__,info->device_name); tx_abort()
2992 spin_lock_irqsave(&info->lock,flags); tx_abort()
2993 if ( info->tx_active && info->params.mode == MGSL_MODE_HDLC ) { tx_abort()
2994 info->ie1_value &= ~UDRN; tx_abort()
2995 info->ie1_value |= IDLE; tx_abort()
2996 write_reg(info, IE1, info->ie1_value); /* disable tx status interrupts */ tx_abort()
2997 write_reg(info, SR1, (unsigned char)(IDLE + UDRN)); /* clear pending */ tx_abort()
2999 write_reg(info, TXDMA + DSR, 0); /* disable DMA channel */ tx_abort()
3000 write_reg(info, TXDMA + DCMD, SWABORT); /* reset/init DMA channel */ tx_abort()
3002 write_reg(info, CMD, TXABORT); tx_abort()
3004 spin_unlock_irqrestore(&info->lock,flags); tx_abort()
3008 static int rx_enable(SLMP_INFO * info, int enable) rx_enable() argument
3014 __FILE__,__LINE__,info->device_name,enable); rx_enable()
3016 spin_lock_irqsave(&info->lock,flags); rx_enable()
3018 if ( !info->rx_enabled ) rx_enable()
3019 rx_start(info); rx_enable()
3021 if ( info->rx_enabled ) rx_enable()
3022 rx_stop(info); rx_enable()
3024 spin_unlock_irqrestore(&info->lock,flags); rx_enable()
3030 static int wait_mgsl_event(SLMP_INFO * info, int __user *mask_ptr) wait_mgsl_event() argument
3048 __FILE__,__LINE__,info->device_name,mask); wait_mgsl_event()
3050 spin_lock_irqsave(&info->lock,flags); wait_mgsl_event()
3053 get_signals(info); wait_mgsl_event()
3054 s = info->serial_signals; wait_mgsl_event()
3062 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
3067 cprev = info->icount; wait_mgsl_event()
3068 oldsigs = info->input_signal_events; wait_mgsl_event()
3072 unsigned char oldval = info->ie1_value; wait_mgsl_event()
3077 info->ie1_value = newval; wait_mgsl_event()
3078 write_reg(info, IE1, info->ie1_value); wait_mgsl_event()
3083 add_wait_queue(&info->event_wait_q, &wait); wait_mgsl_event()
3085 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
3095 spin_lock_irqsave(&info->lock,flags); wait_mgsl_event()
3096 cnow = info->icount; wait_mgsl_event()
3097 newsigs = info->input_signal_events; wait_mgsl_event()
3099 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
3134 remove_wait_queue(&info->event_wait_q, &wait); wait_mgsl_event()
3139 spin_lock_irqsave(&info->lock,flags); wait_mgsl_event()
3140 if (!waitqueue_active(&info->event_wait_q)) { wait_mgsl_event()
3142 info->ie1_value &= ~(FLGD|IDLD); wait_mgsl_event()
3143 write_reg(info, IE1, info->ie1_value); wait_mgsl_event()
3145 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
3154 static int modem_input_wait(SLMP_INFO *info,int arg) modem_input_wait() argument
3162 spin_lock_irqsave(&info->lock,flags); modem_input_wait()
3163 cprev = info->icount; modem_input_wait()
3164 add_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
3166 spin_unlock_irqrestore(&info->lock,flags); modem_input_wait()
3176 spin_lock_irqsave(&info->lock,flags); modem_input_wait()
3177 cnow = info->icount; modem_input_wait()
3179 spin_unlock_irqrestore(&info->lock,flags); modem_input_wait()
3199 remove_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
3208 SLMP_INFO *info = tty->driver_data; tiocmget() local
3212 spin_lock_irqsave(&info->lock,flags); tiocmget()
3213 get_signals(info); tiocmget()
3214 spin_unlock_irqrestore(&info->lock,flags); tiocmget()
3216 result = ((info->serial_signals & SerialSignal_RTS) ? TIOCM_RTS : 0) | tiocmget()
3217 ((info->serial_signals & SerialSignal_DTR) ? TIOCM_DTR : 0) | tiocmget()
3218 ((info->serial_signals & SerialSignal_DCD) ? TIOCM_CAR : 0) | tiocmget()
3219 ((info->serial_signals & SerialSignal_RI) ? TIOCM_RNG : 0) | tiocmget()
3220 ((info->serial_signals & SerialSignal_DSR) ? TIOCM_DSR : 0) | tiocmget()
3221 ((info->serial_signals & SerialSignal_CTS) ? TIOCM_CTS : 0); tiocmget()
3225 __FILE__,__LINE__, info->device_name, result ); tiocmget()
3234 SLMP_INFO *info = tty->driver_data; tiocmset() local
3239 __FILE__,__LINE__,info->device_name, set, clear); tiocmset()
3242 info->serial_signals |= SerialSignal_RTS; tiocmset()
3244 info->serial_signals |= SerialSignal_DTR; tiocmset()
3246 info->serial_signals &= ~SerialSignal_RTS; tiocmset()
3248 info->serial_signals &= ~SerialSignal_DTR; tiocmset()
3250 spin_lock_irqsave(&info->lock,flags); tiocmset()
3251 set_signals(info); tiocmset()
3252 spin_unlock_irqrestore(&info->lock,flags); tiocmset()
3259 SLMP_INFO *info = container_of(port, SLMP_INFO, port); carrier_raised() local
3262 spin_lock_irqsave(&info->lock,flags); carrier_raised()
3263 get_signals(info); carrier_raised()
3264 spin_unlock_irqrestore(&info->lock,flags); carrier_raised()
3266 return (info->serial_signals & SerialSignal_DCD) ? 1 : 0; carrier_raised()
3271 SLMP_INFO *info = container_of(port, SLMP_INFO, port); dtr_rts() local
3274 spin_lock_irqsave(&info->lock,flags); dtr_rts()
3276 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; dtr_rts()
3278 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); dtr_rts()
3279 set_signals(info); dtr_rts()
3280 spin_unlock_irqrestore(&info->lock,flags); dtr_rts()
3286 SLMP_INFO *info) block_til_ready()
3293 struct tty_port *port = &info->port; block_til_ready()
3323 spin_lock_irqsave(&info->lock, flags); block_til_ready()
3325 spin_unlock_irqrestore(&info->lock, flags); block_til_ready()
3375 static int alloc_dma_bufs(SLMP_INFO *info) alloc_dma_bufs() argument
3385 info->port_array[0]->last_mem_alloc = (SCA_MEM_SIZE/4) * info->port_num; alloc_dma_bufs()
3392 BuffersPerFrame = (unsigned short)(info->max_frame_size/SCABUFSIZE); alloc_dma_bufs()
3393 if ( info->max_frame_size % SCABUFSIZE ) alloc_dma_bufs()
3407 info->tx_buf_count = BuffersPerFrame + 1; alloc_dma_bufs()
3410 if (info->tx_buf_count > (BufferCount/2)) alloc_dma_bufs()
3411 info->tx_buf_count = BufferCount/2; alloc_dma_bufs()
3413 if (info->tx_buf_count > SCAMAXDESC) alloc_dma_bufs()
3414 info->tx_buf_count = SCAMAXDESC; alloc_dma_bufs()
3417 info->rx_buf_count = BufferCount - info->tx_buf_count; alloc_dma_bufs()
3419 if (info->rx_buf_count > SCAMAXDESC) alloc_dma_bufs()
3420 info->rx_buf_count = SCAMAXDESC; alloc_dma_bufs()
3424 __FILE__,__LINE__, info->device_name, alloc_dma_bufs()
3425 info->tx_buf_count,info->rx_buf_count); alloc_dma_bufs()
3427 if ( alloc_buf_list( info ) < 0 || alloc_dma_bufs()
3428 alloc_frame_bufs(info, alloc_dma_bufs()
3429 info->rx_buf_list, alloc_dma_bufs()
3430 info->rx_buf_list_ex, alloc_dma_bufs()
3431 info->rx_buf_count) < 0 || alloc_dma_bufs()
3432 alloc_frame_bufs(info, alloc_dma_bufs()
3433 info->tx_buf_list, alloc_dma_bufs()
3434 info->tx_buf_list_ex, alloc_dma_bufs()
3435 info->tx_buf_count) < 0 || alloc_dma_bufs()
3436 alloc_tmp_rx_buf(info) < 0 ) { alloc_dma_bufs()
3438 __FILE__,__LINE__, info->device_name); alloc_dma_bufs()
3442 rx_reset_buffers( info ); alloc_dma_bufs()
3449 static int alloc_buf_list(SLMP_INFO *info) alloc_buf_list() argument
3454 info->buffer_list = info->memory_base + info->port_array[0]->last_mem_alloc; alloc_buf_list()
3455 info->buffer_list_phys = info->port_array[0]->last_mem_alloc; alloc_buf_list()
3456 info->port_array[0]->last_mem_alloc += BUFFERLISTSIZE; alloc_buf_list()
3458 memset(info->buffer_list, 0, BUFFERLISTSIZE); alloc_buf_list()
3463 info->rx_buf_list = (SCADESC *)info->buffer_list; alloc_buf_list()
3465 info->tx_buf_list = (SCADESC *)info->buffer_list; alloc_buf_list()
3466 info->tx_buf_list += info->rx_buf_count; alloc_buf_list()
3474 for ( i = 0; i < info->rx_buf_count; i++ ) { alloc_buf_list()
3476 info->rx_buf_list_ex[i].phys_entry = alloc_buf_list()
3477 info->buffer_list_phys + (i * SCABUFSIZE); alloc_buf_list()
3481 info->rx_buf_list[i].next = info->buffer_list_phys; alloc_buf_list()
3482 if ( i < info->rx_buf_count - 1 ) alloc_buf_list()
3483 info->rx_buf_list[i].next += (i + 1) * sizeof(SCADESC); alloc_buf_list()
3485 info->rx_buf_list[i].length = SCABUFSIZE; alloc_buf_list()
3488 for ( i = 0; i < info->tx_buf_count; i++ ) { alloc_buf_list()
3490 info->tx_buf_list_ex[i].phys_entry = info->buffer_list_phys + alloc_buf_list()
3491 ((info->rx_buf_count + i) * sizeof(SCADESC)); alloc_buf_list()
3496 info->tx_buf_list[i].next = info->buffer_list_phys + alloc_buf_list()
3497 info->rx_buf_count * sizeof(SCADESC); alloc_buf_list()
3499 if ( i < info->tx_buf_count - 1 ) alloc_buf_list()
3500 info->tx_buf_list[i].next += (i + 1) * sizeof(SCADESC); alloc_buf_list()
3508 static int alloc_frame_bufs(SLMP_INFO *info, SCADESC *buf_list,SCADESC_EX *buf_list_ex,int count) alloc_frame_bufs() argument
3514 buf_list_ex[i].virt_addr = info->memory_base + info->port_array[0]->last_mem_alloc; alloc_frame_bufs()
3515 phys_addr = info->port_array[0]->last_mem_alloc; alloc_frame_bufs()
3516 info->port_array[0]->last_mem_alloc += SCABUFSIZE; alloc_frame_bufs()
3525 static void free_dma_bufs(SLMP_INFO *info) free_dma_bufs() argument
3527 info->buffer_list = NULL; free_dma_bufs()
3528 info->rx_buf_list = NULL; free_dma_bufs()
3529 info->tx_buf_list = NULL; free_dma_bufs()
3535 static int alloc_tmp_rx_buf(SLMP_INFO *info) alloc_tmp_rx_buf() argument
3537 info->tmp_rx_buf = kmalloc(info->max_frame_size, GFP_KERNEL); alloc_tmp_rx_buf()
3538 if (info->tmp_rx_buf == NULL) alloc_tmp_rx_buf()
3541 info->flag_buf = kzalloc(info->max_frame_size, GFP_KERNEL); alloc_tmp_rx_buf()
3542 if (!info->flag_buf) { alloc_tmp_rx_buf()
3543 kfree(info->tmp_rx_buf); alloc_tmp_rx_buf()
3544 info->tmp_rx_buf = NULL; alloc_tmp_rx_buf()
3550 static void free_tmp_rx_buf(SLMP_INFO *info) free_tmp_rx_buf() argument
3552 kfree(info->tmp_rx_buf); free_tmp_rx_buf()
3553 info->tmp_rx_buf = NULL; free_tmp_rx_buf()
3554 kfree(info->flag_buf); free_tmp_rx_buf()
3555 info->flag_buf = NULL; free_tmp_rx_buf()
3558 static int claim_resources(SLMP_INFO *info) claim_resources() argument
3560 if (request_mem_region(info->phys_memory_base,SCA_MEM_SIZE,"synclinkmp") == NULL) { claim_resources()
3562 __FILE__,__LINE__,info->device_name, info->phys_memory_base); claim_resources()
3563 info->init_error = DiagStatus_AddressConflict; claim_resources()
3567 info->shared_mem_requested = true; claim_resources()
3569 if (request_mem_region(info->phys_lcr_base + info->lcr_offset,128,"synclinkmp") == NULL) { claim_resources()
3571 __FILE__,__LINE__,info->device_name, info->phys_lcr_base); claim_resources()
3572 info->init_error = DiagStatus_AddressConflict; claim_resources()
3576 info->lcr_mem_requested = true; claim_resources()
3578 if (request_mem_region(info->phys_sca_base + info->sca_offset,SCA_BASE_SIZE,"synclinkmp") == NULL) { claim_resources()
3580 __FILE__,__LINE__,info->device_name, info->phys_sca_base); claim_resources()
3581 info->init_error = DiagStatus_AddressConflict; claim_resources()
3585 info->sca_base_requested = true; claim_resources()
3587 if (request_mem_region(info->phys_statctrl_base + info->statctrl_offset,SCA_REG_SIZE,"synclinkmp") == NULL) { claim_resources()
3589 __FILE__,__LINE__,info->device_name, info->phys_statctrl_base); claim_resources()
3590 info->init_error = DiagStatus_AddressConflict; claim_resources()
3594 info->sca_statctrl_requested = true; claim_resources()
3596 info->memory_base = ioremap_nocache(info->phys_memory_base, claim_resources()
3598 if (!info->memory_base) { claim_resources()
3600 __FILE__,__LINE__,info->device_name, info->phys_memory_base ); claim_resources()
3601 info->init_error = DiagStatus_CantAssignPciResources; claim_resources()
3605 info->lcr_base = ioremap_nocache(info->phys_lcr_base, PAGE_SIZE); claim_resources()
3606 if (!info->lcr_base) { claim_resources()
3608 __FILE__,__LINE__,info->device_name, info->phys_lcr_base ); claim_resources()
3609 info->init_error = DiagStatus_CantAssignPciResources; claim_resources()
3612 info->lcr_base += info->lcr_offset; claim_resources()
3614 info->sca_base = ioremap_nocache(info->phys_sca_base, PAGE_SIZE); claim_resources()
3615 if (!info->sca_base) { claim_resources()
3617 __FILE__,__LINE__,info->device_name, info->phys_sca_base ); claim_resources()
3618 info->init_error = DiagStatus_CantAssignPciResources; claim_resources()
3621 info->sca_base += info->sca_offset; claim_resources()
3623 info->statctrl_base = ioremap_nocache(info->phys_statctrl_base, claim_resources()
3625 if (!info->statctrl_base) { claim_resources()
3627 __FILE__,__LINE__,info->device_name, info->phys_statctrl_base ); claim_resources()
3628 info->init_error = DiagStatus_CantAssignPciResources; claim_resources()
3631 info->statctrl_base += info->statctrl_offset; claim_resources()
3633 if ( !memory_test(info) ) { claim_resources()
3635 __FILE__,__LINE__,info->device_name, info->phys_memory_base ); claim_resources()
3636 info->init_error = DiagStatus_MemoryError; claim_resources()
3643 release_resources( info ); claim_resources()
3647 static void release_resources(SLMP_INFO *info) release_resources() argument
3651 __FILE__,__LINE__,info->device_name ); release_resources()
3653 if ( info->irq_requested ) { release_resources()
3654 free_irq(info->irq_level, info); release_resources()
3655 info->irq_requested = false; release_resources()
3658 if ( info->shared_mem_requested ) { release_resources()
3659 release_mem_region(info->phys_memory_base,SCA_MEM_SIZE); release_resources()
3660 info->shared_mem_requested = false; release_resources()
3662 if ( info->lcr_mem_requested ) { release_resources()
3663 release_mem_region(info->phys_lcr_base + info->lcr_offset,128); release_resources()
3664 info->lcr_mem_requested = false; release_resources()
3666 if ( info->sca_base_requested ) { release_resources()
3667 release_mem_region(info->phys_sca_base + info->sca_offset,SCA_BASE_SIZE); release_resources()
3668 info->sca_base_requested = false; release_resources()
3670 if ( info->sca_statctrl_requested ) { release_resources()
3671 release_mem_region(info->phys_statctrl_base + info->statctrl_offset,SCA_REG_SIZE); release_resources()
3672 info->sca_statctrl_requested = false; release_resources()
3675 if (info->memory_base){ release_resources()
3676 iounmap(info->memory_base); release_resources()
3677 info->memory_base = NULL; release_resources()
3680 if (info->sca_base) { release_resources()
3681 iounmap(info->sca_base - info->sca_offset); release_resources()
3682 info->sca_base=NULL; release_resources()
3685 if (info->statctrl_base) { release_resources()
3686 iounmap(info->statctrl_base - info->statctrl_offset); release_resources()
3687 info->statctrl_base=NULL; release_resources()
3690 if (info->lcr_base){ release_resources()
3691 iounmap(info->lcr_base - info->lcr_offset); release_resources()
3692 info->lcr_base = NULL; release_resources()
3697 __FILE__,__LINE__,info->device_name ); release_resources()
3703 static void add_device(SLMP_INFO *info) add_device() argument
3705 info->next_device = NULL; add_device()
3706 info->line = synclinkmp_device_count; add_device()
3707 sprintf(info->device_name,"ttySLM%dp%d",info->adapter_num,info->port_num); add_device()
3709 if (info->line < MAX_DEVICES) { add_device()
3710 if (maxframe[info->line]) add_device()
3711 info->max_frame_size = maxframe[info->line]; add_device()
3717 synclinkmp_device_list = info; add_device()
3722 current_dev->next_device = info; add_device()
3725 if ( info->max_frame_size < 4096 ) add_device()
3726 info->max_frame_size = 4096; add_device()
3727 else if ( info->max_frame_size > 65535 ) add_device()
3728 info->max_frame_size = 65535; add_device()
3732 info->device_name, add_device()
3733 info->phys_sca_base, add_device()
3734 info->phys_memory_base, add_device()
3735 info->phys_statctrl_base, add_device()
3736 info->phys_lcr_base, add_device()
3737 info->irq_level, add_device()
3738 info->max_frame_size ); add_device()
3741 hdlcdev_init(info); add_device()
3756 SLMP_INFO *info; alloc_dev() local
3758 info = kzalloc(sizeof(SLMP_INFO), alloc_dev()
3761 if (!info) { alloc_dev()
3765 tty_port_init(&info->port); alloc_dev()
3766 info->port.ops = &port_ops; alloc_dev()
3767 info->magic = MGSL_MAGIC; alloc_dev()
3768 INIT_WORK(&info->task, bh_handler); alloc_dev()
3769 info->max_frame_size = 4096; alloc_dev()
3770 info->port.close_delay = 5*HZ/10; alloc_dev()
3771 info->port.closing_wait = 30*HZ; alloc_dev()
3772 init_waitqueue_head(&info->status_event_wait_q); alloc_dev()
3773 init_waitqueue_head(&info->event_wait_q); alloc_dev()
3774 spin_lock_init(&info->netlock); alloc_dev()
3775 memcpy(&info->params,&default_params,sizeof(MGSL_PARAMS)); alloc_dev()
3776 info->idle_mode = HDLC_TXIDLE_FLAGS; alloc_dev()
3777 info->adapter_num = adapter_num; alloc_dev()
3778 info->port_num = port_num; alloc_dev()
3780 /* Copy configuration info to device instance data */ alloc_dev()
3781 info->irq_level = pdev->irq; alloc_dev()
3782 info->phys_lcr_base = pci_resource_start(pdev,0); alloc_dev()
3783 info->phys_sca_base = pci_resource_start(pdev,2); alloc_dev()
3784 info->phys_memory_base = pci_resource_start(pdev,3); alloc_dev()
3785 info->phys_statctrl_base = pci_resource_start(pdev,4); alloc_dev()
3791 info->lcr_offset = info->phys_lcr_base & (PAGE_SIZE-1); alloc_dev()
3792 info->phys_lcr_base &= ~(PAGE_SIZE-1); alloc_dev()
3794 info->sca_offset = info->phys_sca_base & (PAGE_SIZE-1); alloc_dev()
3795 info->phys_sca_base &= ~(PAGE_SIZE-1); alloc_dev()
3797 info->statctrl_offset = info->phys_statctrl_base & (PAGE_SIZE-1); alloc_dev()
3798 info->phys_statctrl_base &= ~(PAGE_SIZE-1); alloc_dev()
3800 info->bus_type = MGSL_BUS_TYPE_PCI; alloc_dev()
3801 info->irq_flags = IRQF_SHARED; alloc_dev()
3803 setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info); alloc_dev()
3804 setup_timer(&info->status_timer, status_timeout, alloc_dev()
3805 (unsigned long)info); alloc_dev()
3816 info->misc_ctrl_value = 0x087e4546; alloc_dev()
3824 info->init_error = -1; alloc_dev()
3827 return info; alloc_dev()
3917 SLMP_INFO *info; synclinkmp_cleanup() local
3930 info = synclinkmp_device_list; synclinkmp_cleanup()
3931 while(info) { synclinkmp_cleanup()
3932 reset_port(info); synclinkmp_cleanup()
3933 info = info->next_device; synclinkmp_cleanup()
3937 info = synclinkmp_device_list; synclinkmp_cleanup()
3938 while(info) { synclinkmp_cleanup()
3940 hdlcdev_exit(info); synclinkmp_cleanup()
3942 free_dma_bufs(info); synclinkmp_cleanup()
3943 free_tmp_rx_buf(info); synclinkmp_cleanup()
3944 if ( info->port_num == 0 ) { synclinkmp_cleanup()
3945 if (info->sca_base) synclinkmp_cleanup()
3946 write_reg(info, LPR, 1); /* set low power mode */ synclinkmp_cleanup()
3947 release_resources(info); synclinkmp_cleanup()
3949 tmp = info; synclinkmp_cleanup()
3950 info = info->next_device; synclinkmp_cleanup()
4029 static void enable_loopback(SLMP_INFO *info, int enable) enable_loopback() argument
4035 write_reg(info, MD2, (unsigned char)(read_reg(info, MD2) | (BIT1 + BIT0))); enable_loopback()
4038 info->port_array[0]->ctrlreg_value |= (BIT0 << (info->port_num * 2)); enable_loopback()
4039 write_control_reg(info); enable_loopback()
4046 write_reg(info, RXS, 0x40); enable_loopback()
4047 write_reg(info, TXS, 0x40); enable_loopback()
4053 write_reg(info, MD2, (unsigned char)(read_reg(info, MD2) & ~(BIT1 + BIT0))); enable_loopback()
4060 write_reg(info, RXS, 0x00); enable_loopback()
4061 write_reg(info, TXS, 0x00); enable_loopback()
4065 if (info->params.clock_speed) enable_loopback()
4066 set_rate(info, info->params.clock_speed); enable_loopback()
4068 set_rate(info, 3686400); enable_loopback()
4076 static void set_rate( SLMP_INFO *info, u32 data_rate ) set_rate() argument
4107 write_reg(info, TXS, set_rate()
4108 (unsigned char)((read_reg(info, TXS) & 0xf0) | BRValue)); set_rate()
4109 write_reg(info, RXS, set_rate()
4110 (unsigned char)((read_reg(info, RXS) & 0xf0) | BRValue)); set_rate()
4111 write_reg(info, TMC, (unsigned char)TMCValue); set_rate()
4114 write_reg(info, TXS,0); set_rate()
4115 write_reg(info, RXS,0); set_rate()
4116 write_reg(info, TMC, 0); set_rate()
4122 static void rx_stop(SLMP_INFO *info) rx_stop() argument
4126 __FILE__,__LINE__, info->device_name ); rx_stop()
4128 write_reg(info, CMD, RXRESET); rx_stop()
4130 info->ie0_value &= ~RXRDYE; rx_stop()
4131 write_reg(info, IE0, info->ie0_value); /* disable Rx data interrupts */ rx_stop()
4133 write_reg(info, RXDMA + DSR, 0); /* disable Rx DMA */ rx_stop()
4134 write_reg(info, RXDMA + DCMD, SWABORT); /* reset/init Rx DMA */ rx_stop()
4135 write_reg(info, RXDMA + DIR, 0); /* disable Rx DMA interrupts */ rx_stop()
4137 info->rx_enabled = false; rx_stop()
4138 info->rx_overflow = false; rx_stop()
4143 static void rx_start(SLMP_INFO *info) rx_start() argument
4149 __FILE__,__LINE__, info->device_name ); rx_start()
4151 write_reg(info, CMD, RXRESET); rx_start()
4153 if ( info->params.mode == MGSL_MODE_HDLC ) { rx_start()
4155 info->ie0_value &= ~RXRDYE; rx_start()
4156 write_reg(info, IE0, info->ie0_value); rx_start()
4159 write_reg(info, RXDMA + DSR, 0); /* disable Rx DMA */ rx_start()
4160 write_reg(info, RXDMA + DCMD, SWABORT); /* reset/init Rx DMA */ rx_start()
4162 for (i = 0; i < info->rx_buf_count; i++) { rx_start()
4163 info->rx_buf_list[i].status = 0xff; rx_start()
4168 read_status_reg(info); rx_start()
4170 info->current_rx_buf = 0; rx_start()
4173 write_reg16(info, RXDMA + CDA, rx_start()
4174 info->rx_buf_list_ex[0].phys_entry); rx_start()
4177 write_reg16(info, RXDMA + EDA, rx_start()
4178 info->rx_buf_list_ex[info->rx_buf_count - 1].phys_entry); rx_start()
4181 write_reg16(info, RXDMA + BFL, SCABUFSIZE); rx_start()
4183 write_reg(info, RXDMA + DIR, 0x60); /* enable Rx DMA interrupts (EOM/BOF) */ rx_start()
4184 write_reg(info, RXDMA + DSR, 0xf2); /* clear Rx DMA IRQs, enable Rx DMA */ rx_start()
4187 info->ie0_value |= RXRDYE; rx_start()
4188 write_reg(info, IE0, info->ie0_value); rx_start()
4191 write_reg(info, CMD, RXENABLE); rx_start()
4193 info->rx_overflow = false; rx_start()
4194 info->rx_enabled = true; rx_start()
4200 static void tx_start(SLMP_INFO *info) tx_start() argument
4204 __FILE__,__LINE__, info->device_name,info->tx_count ); tx_start()
4206 if (!info->tx_enabled ) { tx_start()
4207 write_reg(info, CMD, TXRESET); tx_start()
4208 write_reg(info, CMD, TXENABLE); tx_start()
4209 info->tx_enabled = true; tx_start()
4212 if ( info->tx_count ) { tx_start()
4218 info->drop_rts_on_tx_done = false; tx_start()
4220 if (info->params.mode != MGSL_MODE_ASYNC) { tx_start()
4222 if ( info->params.flags & HDLC_FLAG_AUTO_RTS ) { tx_start()
4223 get_signals( info ); tx_start()
4224 if ( !(info->serial_signals & SerialSignal_RTS) ) { tx_start()
4225 info->serial_signals |= SerialSignal_RTS; tx_start()
4226 set_signals( info ); tx_start()
4227 info->drop_rts_on_tx_done = true; tx_start()
4231 write_reg16(info, TRC0, tx_start()
4234 write_reg(info, TXDMA + DSR, 0); /* disable DMA channel */ tx_start()
4235 write_reg(info, TXDMA + DCMD, SWABORT); /* reset/init DMA channel */ tx_start()
4238 write_reg16(info, TXDMA + CDA, tx_start()
4239 info->tx_buf_list_ex[0].phys_entry); tx_start()
4242 write_reg16(info, TXDMA + EDA, tx_start()
4243 info->tx_buf_list_ex[info->last_tx_buf].phys_entry); tx_start()
4246 info->ie1_value &= ~IDLE; tx_start()
4247 info->ie1_value |= UDRN; tx_start()
4248 write_reg(info, IE1, info->ie1_value); tx_start()
4249 write_reg(info, SR1, (unsigned char)(IDLE + UDRN)); tx_start()
4251 write_reg(info, TXDMA + DIR, 0x40); /* enable Tx DMA interrupts (EOM) */ tx_start()
4252 write_reg(info, TXDMA + DSR, 0xf2); /* clear Tx DMA IRQs, enable Tx DMA */ tx_start()
4254 mod_timer(&info->tx_timer, jiffies + tx_start()
4258 tx_load_fifo(info); tx_start()
4260 info->ie0_value |= TXRDYE; tx_start()
4261 write_reg(info, IE0, info->ie0_value); tx_start()
4264 info->tx_active = true; tx_start()
4270 static void tx_stop( SLMP_INFO *info ) tx_stop()
4274 __FILE__,__LINE__, info->device_name ); tx_stop()
4276 del_timer(&info->tx_timer); tx_stop()
4278 write_reg(info, TXDMA + DSR, 0); /* disable DMA channel */ tx_stop()
4279 write_reg(info, TXDMA + DCMD, SWABORT); /* reset/init DMA channel */ tx_stop()
4281 write_reg(info, CMD, TXRESET); tx_stop()
4283 info->ie1_value &= ~(UDRN + IDLE); tx_stop()
4284 write_reg(info, IE1, info->ie1_value); /* disable tx status interrupts */ tx_stop()
4285 write_reg(info, SR1, (unsigned char)(IDLE + UDRN)); /* clear pending */ tx_stop()
4287 info->ie0_value &= ~TXRDYE; tx_stop()
4288 write_reg(info, IE0, info->ie0_value); /* disable tx data interrupts */ tx_stop()
4290 info->tx_enabled = false; tx_stop()
4291 info->tx_active = false; tx_stop()
4297 static void tx_load_fifo(SLMP_INFO *info) tx_load_fifo() argument
4303 if ( !info->tx_count && !info->x_char ) tx_load_fifo()
4308 while( info->tx_count && (read_reg(info,SR0) & BIT1) ) { tx_load_fifo()
4313 if ( (info->tx_count > 1) && !info->x_char ) { tx_load_fifo()
4315 TwoBytes[0] = info->tx_buf[info->tx_get++]; tx_load_fifo()
4316 if (info->tx_get >= info->max_frame_size) tx_load_fifo()
4317 info->tx_get -= info->max_frame_size; tx_load_fifo()
4318 TwoBytes[1] = info->tx_buf[info->tx_get++]; tx_load_fifo()
4319 if (info->tx_get >= info->max_frame_size) tx_load_fifo()
4320 info->tx_get -= info->max_frame_size; tx_load_fifo()
4322 write_reg16(info, TRB, *((u16 *)TwoBytes)); tx_load_fifo()
4324 info->tx_count -= 2; tx_load_fifo()
4325 info->icount.tx += 2; tx_load_fifo()
4329 if (info->x_char) { tx_load_fifo()
4331 write_reg(info, TRB, info->x_char); tx_load_fifo()
4332 info->x_char = 0; tx_load_fifo()
4334 write_reg(info, TRB, info->tx_buf[info->tx_get++]); tx_load_fifo()
4335 if (info->tx_get >= info->max_frame_size) tx_load_fifo()
4336 info->tx_get -= info->max_frame_size; tx_load_fifo()
4337 info->tx_count--; tx_load_fifo()
4339 info->icount.tx++; tx_load_fifo()
4346 static void reset_port(SLMP_INFO *info) reset_port() argument
4348 if (info->sca_base) { reset_port()
4350 tx_stop(info); reset_port()
4351 rx_stop(info); reset_port()
4353 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); reset_port()
4354 set_signals(info); reset_port()
4357 info->ie0_value = 0; reset_port()
4358 info->ie1_value = 0; reset_port()
4359 info->ie2_value = 0; reset_port()
4360 write_reg(info, IE0, info->ie0_value); reset_port()
4361 write_reg(info, IE1, info->ie1_value); reset_port()
4362 write_reg(info, IE2, info->ie2_value); reset_port()
4364 write_reg(info, CMD, CHRESET); reset_port()
4370 static void reset_adapter(SLMP_INFO *info) reset_adapter() argument
4375 if (info->port_array[i]) reset_adapter()
4376 reset_port(info->port_array[i]); reset_adapter()
4382 static void async_mode(SLMP_INFO *info) async_mode() argument
4387 tx_stop(info); async_mode()
4388 rx_stop(info); async_mode()
4401 if (info->params.stop_bits != 1) async_mode()
4403 write_reg(info, MD0, RegValue); async_mode()
4415 switch (info->params.data_bits) { async_mode()
4420 if (info->params.parity != ASYNC_PARITY_NONE) { async_mode()
4422 if (info->params.parity == ASYNC_PARITY_ODD) async_mode()
4425 write_reg(info, MD1, RegValue); async_mode()
4435 if (info->params.loopback) async_mode()
4437 write_reg(info, MD2, RegValue); async_mode()
4446 write_reg(info, RXS, RegValue); async_mode()
4455 write_reg(info, TXS, RegValue); async_mode()
4461 info->port_array[0]->ctrlreg_value |= (BIT0 << (info->port_num * 2)); async_mode()
4462 write_control_reg(info); async_mode()
4464 tx_set_idle(info); async_mode()
4471 write_reg(info, RRC, 0x00); async_mode()
4478 write_reg(info, TRC0, 0x10); async_mode()
4485 write_reg(info, TRC1, 0x1e); async_mode()
4500 if (!(info->serial_signals & SerialSignal_RTS)) async_mode()
4502 write_reg(info, CTL, RegValue); async_mode()
4505 info->ie0_value |= TXINTE + RXINTE; async_mode()
4506 write_reg(info, IE0, info->ie0_value); async_mode()
4509 info->ie1_value = BRKD; async_mode()
4510 write_reg(info, IE1, info->ie1_value); async_mode()
4513 info->ie2_value = OVRN; async_mode()
4514 write_reg(info, IE2, info->ie2_value); async_mode()
4516 set_rate( info, info->params.data_rate * 16 ); async_mode()
4521 static void hdlc_mode(SLMP_INFO *info) hdlc_mode() argument
4530 info->params.flags &= ~(HDLC_FLAG_TXC_DPLL + HDLC_FLAG_RXC_DPLL); hdlc_mode()
4533 write_reg(info, TXDMA + DIR, 0); hdlc_mode()
4534 write_reg(info, RXDMA + DIR, 0); hdlc_mode()
4548 if (info->params.flags & HDLC_FLAG_AUTO_CTS) hdlc_mode()
4550 if (info->params.flags & HDLC_FLAG_AUTO_DCD) hdlc_mode()
4552 if (info->params.crc_type == HDLC_CRC_16_CCITT) hdlc_mode()
4554 write_reg(info, MD0, RegValue); hdlc_mode()
4566 write_reg(info, MD1, RegValue); hdlc_mode()
4579 switch(info->params.encoding) { hdlc_mode()
4590 if ( info->params.flags & HDLC_FLAG_DPLL_DIV16 ) { hdlc_mode()
4593 } else if ( info->params.flags & HDLC_FLAG_DPLL_DIV8 ) { hdlc_mode()
4599 write_reg(info, MD2, RegValue); hdlc_mode()
4609 if (info->params.flags & HDLC_FLAG_RXC_BRG) hdlc_mode()
4611 if (info->params.flags & HDLC_FLAG_RXC_DPLL) hdlc_mode()
4613 write_reg(info, RXS, RegValue); hdlc_mode()
4622 if (info->params.flags & HDLC_FLAG_TXC_BRG) hdlc_mode()
4624 if (info->params.flags & HDLC_FLAG_TXC_DPLL) hdlc_mode()
4626 write_reg(info, TXS, RegValue); hdlc_mode()
4628 if (info->params.flags & HDLC_FLAG_RXC_DPLL) hdlc_mode()
4629 set_rate(info, info->params.clock_speed * DpllDivisor); hdlc_mode()
4631 set_rate(info, info->params.clock_speed); hdlc_mode()
4637 if (info->params.flags & HDLC_FLAG_TXC_BRG) hdlc_mode()
4638 info->port_array[0]->ctrlreg_value |= (BIT0 << (info->port_num * 2)); hdlc_mode()
4640 info->port_array[0]->ctrlreg_value &= ~(BIT0 << (info->port_num * 2)); hdlc_mode()
4641 write_control_reg(info); hdlc_mode()
4648 write_reg(info, RRC, rx_active_fifo_level); hdlc_mode()
4655 write_reg(info, TRC0, tx_active_fifo_level); hdlc_mode()
4662 write_reg(info, TRC1, (unsigned char)(tx_negate_fifo_level - 1)); hdlc_mode()
4675 write_reg(info, TXDMA + DMR, 0x14); hdlc_mode()
4676 write_reg(info, RXDMA + DMR, 0x14); hdlc_mode()
4679 write_reg(info, RXDMA + CPB, hdlc_mode()
4680 (unsigned char)(info->buffer_list_phys >> 16)); hdlc_mode()
4683 write_reg(info, TXDMA + CPB, hdlc_mode()
4684 (unsigned char)(info->buffer_list_phys >> 16)); hdlc_mode()
4689 info->ie0_value |= TXINTE + RXINTE; hdlc_mode()
4690 write_reg(info, IE0, info->ie0_value); hdlc_mode()
4705 if (!(info->serial_signals & SerialSignal_RTS)) hdlc_mode()
4707 write_reg(info, CTL, RegValue); hdlc_mode()
4711 tx_set_idle(info); hdlc_mode()
4712 tx_stop(info); hdlc_mode()
4713 rx_stop(info); hdlc_mode()
4715 set_rate(info, info->params.clock_speed); hdlc_mode()
4717 if (info->params.loopback) hdlc_mode()
4718 enable_loopback(info,1); hdlc_mode()
4723 static void tx_set_idle(SLMP_INFO *info) tx_set_idle() argument
4728 switch(info->idle_mode) { tx_set_idle()
4738 write_reg(info, IDL, RegValue); tx_set_idle()
4743 static void get_signals(SLMP_INFO *info) get_signals() argument
4745 u16 status = read_reg(info, SR3); get_signals()
4746 u16 gpstatus = read_status_reg(info); get_signals()
4750 info->serial_signals &= SerialSignal_RTS | SerialSignal_DTR; get_signals()
4755 info->serial_signals |= SerialSignal_CTS; get_signals()
4758 info->serial_signals |= SerialSignal_DCD; get_signals()
4760 testbit = BIT1 << (info->port_num * 2); // Port 0..3 RI is GPDATA<1,3,5,7> get_signals()
4762 info->serial_signals |= SerialSignal_RI; get_signals()
4764 testbit = BIT0 << (info->port_num * 2); // Port 0..3 DSR is GPDATA<0,2,4,6> get_signals()
4766 info->serial_signals |= SerialSignal_DSR; get_signals()
4772 static void set_signals(SLMP_INFO *info) set_signals() argument
4777 RegValue = read_reg(info, CTL); set_signals()
4778 if (info->serial_signals & SerialSignal_RTS) set_signals()
4782 write_reg(info, CTL, RegValue); set_signals()
4785 EnableBit = BIT1 << (info->port_num*2); set_signals()
4786 if (info->serial_signals & SerialSignal_DTR) set_signals()
4787 info->port_array[0]->ctrlreg_value &= ~EnableBit; set_signals()
4789 info->port_array[0]->ctrlreg_value |= EnableBit; set_signals()
4790 write_control_reg(info); set_signals()
4801 static void rx_reset_buffers(SLMP_INFO *info) rx_reset_buffers() argument
4803 rx_free_frame_buffers(info, 0, info->rx_buf_count - 1); rx_reset_buffers()
4808 * info pointer to device instance data
4812 static void rx_free_frame_buffers(SLMP_INFO *info, unsigned int first, unsigned int last) rx_free_frame_buffers() argument
4818 info->rx_buf_list[first].status = 0xff; rx_free_frame_buffers()
4823 write_reg16(info, RXDMA + EDA, info->rx_buf_list_ex[first].phys_entry); rx_free_frame_buffers()
4827 if (first == info->rx_buf_count) rx_free_frame_buffers()
4832 info->current_rx_buf = first; rx_free_frame_buffers()
4840 static bool rx_get_frame(SLMP_INFO *info) rx_get_frame() argument
4847 struct tty_struct *tty = info->port.tty; rx_get_frame()
4863 StartIndex = EndIndex = info->current_rx_buf; rx_get_frame()
4866 desc = &info->rx_buf_list[EndIndex]; rx_get_frame()
4867 desc_ex = &info->rx_buf_list_ex[EndIndex]; rx_get_frame()
4872 if (framesize == 0 && info->params.addr_filter != 0xff) rx_get_frame()
4882 if (EndIndex == info->rx_buf_count) rx_get_frame()
4885 if (EndIndex == info->current_rx_buf) { rx_get_frame()
4888 if ( info->rx_enabled ){ rx_get_frame()
4889 spin_lock_irqsave(&info->lock,flags); rx_get_frame()
4890 rx_start(info); rx_get_frame()
4891 spin_unlock_irqrestore(&info->lock,flags); rx_get_frame()
4914 if (info->params.crc_type == HDLC_CRC_NONE) rx_get_frame()
4918 (addr_field != 0xff && addr_field != info->params.addr_filter)) { rx_get_frame()
4922 rx_free_frame_buffers(info, StartIndex, EndIndex); rx_get_frame()
4934 info->icount.rxshort++; rx_get_frame()
4936 info->icount.rxabort++; rx_get_frame()
4938 info->icount.rxover++; rx_get_frame()
4940 info->icount.rxcrc++; rx_get_frame()
4945 info->netdev->stats.rx_errors++; rx_get_frame()
4946 info->netdev->stats.rx_frame_errors++; rx_get_frame()
4953 __FILE__,__LINE__,info->device_name,status,framesize); rx_get_frame()
4956 trace_block(info,info->rx_buf_list_ex[StartIndex].virt_addr, rx_get_frame()
4960 if (framesize > info->max_frame_size) rx_get_frame()
4961 info->icount.rxlong++; rx_get_frame()
4966 unsigned char *ptmp = info->tmp_rx_buf; rx_get_frame()
4967 info->tmp_rx_buf_count = framesize; rx_get_frame()
4969 info->icount.rxok++; rx_get_frame()
4974 info->rx_buf_list_ex[index].virt_addr, rx_get_frame()
4979 if ( ++index == info->rx_buf_count ) rx_get_frame()
4984 if (info->netcount) rx_get_frame()
4985 hdlcdev_rx(info,info->tmp_rx_buf,framesize); rx_get_frame()
4988 ldisc_receive_buf(tty,info->tmp_rx_buf, rx_get_frame()
4989 info->flag_buf, framesize); rx_get_frame()
4993 rx_free_frame_buffers( info, StartIndex, EndIndex ); rx_get_frame()
4998 if ( info->rx_enabled && info->rx_overflow ) { rx_get_frame()
5002 if (info->rx_buf_list[EndIndex].status == 0xff) { rx_get_frame()
5003 spin_lock_irqsave(&info->lock,flags); rx_get_frame()
5004 rx_start(info); rx_get_frame()
5005 spin_unlock_irqrestore(&info->lock,flags); rx_get_frame()
5014 static void tx_load_dma_buffer(SLMP_INFO *info, const char *buf, unsigned int count) tx_load_dma_buffer() argument
5022 trace_block(info, buf, min_t(unsigned int, count, SCABUFSIZE), 1); tx_load_dma_buffer()
5031 desc = &info->tx_buf_list[i]; tx_load_dma_buffer()
5032 desc_ex = &info->tx_buf_list_ex[i]; tx_load_dma_buffer()
5034 load_pci_memory(info, desc_ex->virt_addr,buf,copy_count); tx_load_dma_buffer()
5046 if (i >= info->tx_buf_count) tx_load_dma_buffer()
5050 info->tx_buf_list[i].status = 0x81; /* set EOM and EOT status */ tx_load_dma_buffer()
5051 info->last_tx_buf = ++i; tx_load_dma_buffer()
5054 static bool register_test(SLMP_INFO *info) register_test() argument
5062 spin_lock_irqsave(&info->lock,flags); register_test()
5063 reset_port(info); register_test()
5066 info->init_error = DiagStatus_AddressFailure; register_test()
5072 write_reg(info, TMC, testval[i]); register_test()
5073 write_reg(info, IDL, testval[(i+1)%count]); register_test()
5074 write_reg(info, SA0, testval[(i+2)%count]); register_test()
5075 write_reg(info, SA1, testval[(i+3)%count]); register_test()
5077 if ( (read_reg(info, TMC) != testval[i]) || register_test()
5078 (read_reg(info, IDL) != testval[(i+1)%count]) || register_test()
5079 (read_reg(info, SA0) != testval[(i+2)%count]) || register_test()
5080 (read_reg(info, SA1) != testval[(i+3)%count]) ) register_test()
5087 reset_port(info); register_test()
5088 spin_unlock_irqrestore(&info->lock,flags); register_test()
5093 static bool irq_test(SLMP_INFO *info) irq_test() argument
5098 unsigned char timer = (info->port_num & 1) ? TIMER2 : TIMER0; irq_test()
5100 spin_lock_irqsave(&info->lock,flags); irq_test()
5101 reset_port(info); irq_test()
5104 info->init_error = DiagStatus_IrqFailure; irq_test()
5105 info->irq_occurred = false; irq_test()
5110 write_reg(info, IER2, (unsigned char)((info->port_num & 1) ? BIT6 : BIT4)); irq_test()
5112 write_reg(info, (unsigned char)(timer + TEPR), 0); /* timer expand prescale */ irq_test()
5113 write_reg16(info, (unsigned char)(timer + TCONR), 1); /* timer constant */ irq_test()
5126 write_reg(info, (unsigned char)(timer + TMCS), 0x50); irq_test()
5128 spin_unlock_irqrestore(&info->lock,flags); irq_test()
5131 while( timeout-- && !info->irq_occurred ) { irq_test()
5135 spin_lock_irqsave(&info->lock,flags); irq_test()
5136 reset_port(info); irq_test()
5137 spin_unlock_irqrestore(&info->lock,flags); irq_test()
5139 return info->irq_occurred; irq_test()
5144 static bool sca_init(SLMP_INFO *info) sca_init() argument
5147 write_reg(info, PABR0, 0); /* wait controller addr boundary 0 */ sca_init()
5148 write_reg(info, PABR1, 0); /* wait controller addr boundary 1 */ sca_init()
5149 write_reg(info, WCRL, 0); /* wait controller low range */ sca_init()
5150 write_reg(info, WCRM, 0); /* wait controller mid range */ sca_init()
5151 write_reg(info, WCRH, 0); /* wait controller high range */ sca_init()
5162 write_reg(info, DPCR, dma_priority); sca_init()
5165 write_reg(info, DMER, 0x80); sca_init()
5168 write_reg(info, IER0, 0xff); /* TxRDY,RxRDY,TxINT,RxINT (ports 0-1) */ sca_init()
5169 write_reg(info, IER1, 0xff); /* DMIB,DMIA (channels 0-3) */ sca_init()
5170 write_reg(info, IER2, 0xf0); /* TIRQ (timers 0-3) */ sca_init()
5178 write_reg(info, ITCR, 0); sca_init()
5185 static bool init_adapter(SLMP_INFO *info) init_adapter() argument
5190 volatile u32 *MiscCtrl = (u32 *)(info->lcr_base + 0x50); init_adapter()
5193 info->misc_ctrl_value |= BIT30; init_adapter()
5194 *MiscCtrl = info->misc_ctrl_value; init_adapter()
5204 info->misc_ctrl_value &= ~BIT30; init_adapter()
5205 *MiscCtrl = info->misc_ctrl_value; init_adapter()
5208 info->ctrlreg_value = 0xaa; init_adapter()
5209 write_control_reg(info); init_adapter()
5212 volatile u32 *LCR1BRDR = (u32 *)(info->lcr_base + 0x2c); init_adapter()
5235 sca_init(info->port_array[0]); init_adapter()
5236 sca_init(info->port_array[2]); init_adapter()
5244 static bool loopback_test(SLMP_INFO *info) loopback_test() argument
5254 struct tty_struct *oldtty = info->port.tty; loopback_test()
5255 u32 speed = info->params.clock_speed; loopback_test()
5257 info->params.clock_speed = 3686400; loopback_test()
5258 info->port.tty = NULL; loopback_test()
5261 info->init_error = DiagStatus_DmaFailure; loopback_test()
5267 memset(info->tmp_rx_buf,0,TESTFRAMESIZE); loopback_test()
5270 spin_lock_irqsave(&info->lock,flags); loopback_test()
5271 hdlc_mode(info); loopback_test()
5272 enable_loopback(info,1); loopback_test()
5273 rx_start(info); loopback_test()
5274 info->tx_count = count; loopback_test()
5275 tx_load_dma_buffer(info,buf,count); loopback_test()
5276 tx_start(info); loopback_test()
5277 spin_unlock_irqrestore(&info->lock,flags); loopback_test()
5284 if (rx_get_frame(info)) { loopback_test()
5292 ( info->tmp_rx_buf_count != count || loopback_test()
5293 memcmp(buf, info->tmp_rx_buf,count))) { loopback_test()
5297 spin_lock_irqsave(&info->lock,flags); loopback_test()
5298 reset_adapter(info); loopback_test()
5299 spin_unlock_irqrestore(&info->lock,flags); loopback_test()
5301 info->params.clock_speed = speed; loopback_test()
5302 info->port.tty = oldtty; loopback_test()
5309 static int adapter_test( SLMP_INFO *info ) adapter_test()
5314 __FILE__,__LINE__,info->device_name ); adapter_test()
5316 spin_lock_irqsave(&info->lock,flags); adapter_test()
5317 init_adapter(info); adapter_test()
5318 spin_unlock_irqrestore(&info->lock,flags); adapter_test()
5320 info->port_array[0]->port_count = 0; adapter_test()
5322 if ( register_test(info->port_array[0]) && adapter_test()
5323 register_test(info->port_array[1])) { adapter_test()
5325 info->port_array[0]->port_count = 2; adapter_test()
5327 if ( register_test(info->port_array[2]) && adapter_test()
5328 register_test(info->port_array[3]) ) adapter_test()
5329 info->port_array[0]->port_count += 2; adapter_test()
5333 __FILE__,__LINE__,info->device_name, (unsigned long)(info->phys_sca_base)); adapter_test()
5337 if ( !irq_test(info->port_array[0]) || adapter_test()
5338 !irq_test(info->port_array[1]) || adapter_test()
5339 (info->port_count == 4 && !irq_test(info->port_array[2])) || adapter_test()
5340 (info->port_count == 4 && !irq_test(info->port_array[3]))) { adapter_test()
5342 __FILE__,__LINE__,info->device_name, (unsigned short)(info->irq_level) ); adapter_test()
5346 if (!loopback_test(info->port_array[0]) || adapter_test()
5347 !loopback_test(info->port_array[1]) || adapter_test()
5348 (info->port_count == 4 && !loopback_test(info->port_array[2])) || adapter_test()
5349 (info->port_count == 4 && !loopback_test(info->port_array[3]))) { adapter_test()
5351 __FILE__,__LINE__,info->device_name); adapter_test()
5357 __FILE__,__LINE__,info->device_name ); adapter_test()
5359 info->port_array[0]->init_error = 0; adapter_test()
5360 info->port_array[1]->init_error = 0; adapter_test()
5361 if ( info->port_count > 2 ) { adapter_test()
5362 info->port_array[2]->init_error = 0; adapter_test()
5363 info->port_array[3]->init_error = 0; adapter_test()
5371 static bool memory_test(SLMP_INFO *info) memory_test() argument
5378 unsigned long * addr = (unsigned long *)info->memory_base; memory_test()
5396 addr = (unsigned long *)info->memory_base; memory_test()
5404 memset( info->memory_base, 0, SCA_MEM_SIZE ); memory_test()
5423 static void load_pci_memory(SLMP_INFO *info, char* dest, const char* src, unsigned short count) load_pci_memory() argument
5434 read_status_reg(info); load_pci_memory()
5442 static void trace_block(SLMP_INFO *info,const char* data, int count, int xmit) trace_block() argument
5447 printk("%s tx data:\n",info->device_name); trace_block()
5449 printk("%s rx data:\n",info->device_name); trace_block()
5479 SLMP_INFO *info = (SLMP_INFO*)context; tx_timeout() local
5484 __FILE__,__LINE__,info->device_name); tx_timeout()
5485 if(info->tx_active && info->params.mode == MGSL_MODE_HDLC) { tx_timeout()
5486 info->icount.txtimeout++; tx_timeout()
5488 spin_lock_irqsave(&info->lock,flags); tx_timeout()
5489 info->tx_active = false; tx_timeout()
5490 info->tx_count = info->tx_put = info->tx_get = 0; tx_timeout()
5492 spin_unlock_irqrestore(&info->lock,flags); tx_timeout()
5495 if (info->netcount) tx_timeout()
5496 hdlcdev_tx_done(info); tx_timeout()
5499 bh_transmit(info); tx_timeout()
5507 SLMP_INFO *info = (SLMP_INFO*)context; status_timeout() local
5512 spin_lock_irqsave(&info->lock,flags); status_timeout()
5513 get_signals(info); status_timeout()
5514 spin_unlock_irqrestore(&info->lock,flags); status_timeout()
5518 delta = info->old_signals ^ info->serial_signals; status_timeout()
5519 info->old_signals = info->serial_signals; status_timeout()
5522 status |= MISCSTATUS_DSR_LATCHED|(info->serial_signals&SerialSignal_DSR); status_timeout()
5525 status |= MISCSTATUS_RI_LATCHED|(info->serial_signals&SerialSignal_RI); status_timeout()
5528 status |= MISCSTATUS_DCD_LATCHED|(info->serial_signals&SerialSignal_DCD); status_timeout()
5531 status |= MISCSTATUS_CTS_LATCHED|(info->serial_signals&SerialSignal_CTS); status_timeout()
5534 isr_io_pin(info,status); status_timeout()
5536 mod_timer(&info->status_timer, jiffies + msecs_to_jiffies(10)); status_timeout()
5544 unsigned char * RegAddr = (unsigned char*)(info->sca_base + Addr); \
5545 if (info->port_num > 1) \
5547 if ( info->port_num & 1) { \
5555 static unsigned char read_reg(SLMP_INFO * info, unsigned char Addr) read_reg() argument
5560 static void write_reg(SLMP_INFO * info, unsigned char Addr, unsigned char Value) write_reg() argument
5566 static u16 read_reg16(SLMP_INFO * info, unsigned char Addr) read_reg16() argument
5572 static void write_reg16(SLMP_INFO * info, unsigned char Addr, u16 Value) write_reg16() argument
5578 static unsigned char read_status_reg(SLMP_INFO * info) read_status_reg() argument
5580 unsigned char *RegAddr = (unsigned char *)info->statctrl_base; read_status_reg()
5584 static void write_control_reg(SLMP_INFO * info) write_control_reg() argument
5586 unsigned char *RegAddr = (unsigned char *)info->statctrl_base; write_control_reg()
5587 *RegAddr = info->port_array[0]->ctrlreg_value; write_control_reg()
3285 block_til_ready(struct tty_struct *tty, struct file *filp, SLMP_INFO *info) block_til_ready() argument
H A Dsynclink_gt.c42 #define DBGDATA(info, buf, size, label) if (debug_level >= DEBUG_LEVEL_DATA) trace_block((info), (buf), (size), (label))
43 /*#define DBGTBUF(info) dump_tbufs(info)*/
44 /*#define DBGRBUF(info) dump_rbufs(info)*/
167 static void hdlcdev_tx_done(struct slgt_info *info);
168 static void hdlcdev_rx(struct slgt_info *info, char *buf, int size);
169 static int hdlcdev_init(struct slgt_info *info);
170 static void hdlcdev_exit(struct slgt_info *info);
427 #define slgt_irq_on(info, mask) \
428 wr_reg16((info), SCR, (unsigned short)(rd_reg16((info), SCR) | (mask)))
429 #define slgt_irq_off(info, mask) \
430 wr_reg16((info), SCR, (unsigned short)(rd_reg16((info), SCR) & ~(mask)))
432 static __u8 rd_reg8(struct slgt_info *info, unsigned int addr);
433 static void wr_reg8(struct slgt_info *info, unsigned int addr, __u8 value);
434 static __u16 rd_reg16(struct slgt_info *info, unsigned int addr);
435 static void wr_reg16(struct slgt_info *info, unsigned int addr, __u16 value);
436 static __u32 rd_reg32(struct slgt_info *info, unsigned int addr);
437 static void wr_reg32(struct slgt_info *info, unsigned int addr, __u32 value);
439 static void msc_set_vcr(struct slgt_info *info);
441 static int startup(struct slgt_info *info);
442 static int block_til_ready(struct tty_struct *tty, struct file * filp,struct slgt_info *info);
443 static void shutdown(struct slgt_info *info);
444 static void program_hw(struct slgt_info *info);
445 static void change_params(struct slgt_info *info);
447 static int register_test(struct slgt_info *info);
448 static int irq_test(struct slgt_info *info);
449 static int loopback_test(struct slgt_info *info);
450 static int adapter_test(struct slgt_info *info);
452 static void reset_adapter(struct slgt_info *info);
453 static void reset_port(struct slgt_info *info);
454 static void async_mode(struct slgt_info *info);
455 static void sync_mode(struct slgt_info *info);
457 static void rx_stop(struct slgt_info *info);
458 static void rx_start(struct slgt_info *info);
459 static void reset_rbufs(struct slgt_info *info);
460 static void free_rbufs(struct slgt_info *info, unsigned int first, unsigned int last);
461 static void rdma_reset(struct slgt_info *info);
462 static bool rx_get_frame(struct slgt_info *info);
463 static bool rx_get_buf(struct slgt_info *info);
465 static void tx_start(struct slgt_info *info);
466 static void tx_stop(struct slgt_info *info);
467 static void tx_set_idle(struct slgt_info *info);
468 static unsigned int free_tbuf_count(struct slgt_info *info);
469 static unsigned int tbuf_bytes(struct slgt_info *info);
470 static void reset_tbufs(struct slgt_info *info);
471 static void tdma_reset(struct slgt_info *info);
472 static bool tx_load(struct slgt_info *info, const char *buf, unsigned int count);
474 static void get_signals(struct slgt_info *info);
475 static void set_signals(struct slgt_info *info);
476 static void enable_loopback(struct slgt_info *info);
477 static void set_rate(struct slgt_info *info, u32 data_rate);
479 static int bh_action(struct slgt_info *info);
481 static void bh_transmit(struct slgt_info *info);
482 static void isr_serial(struct slgt_info *info);
483 static void isr_rdma(struct slgt_info *info);
484 static void isr_txeom(struct slgt_info *info, unsigned short status);
485 static void isr_tdma(struct slgt_info *info);
487 static int alloc_dma_bufs(struct slgt_info *info);
488 static void free_dma_bufs(struct slgt_info *info);
489 static int alloc_desc(struct slgt_info *info);
490 static void free_desc(struct slgt_info *info);
491 static int alloc_bufs(struct slgt_info *info, struct slgt_desc *bufs, int count);
492 static void free_bufs(struct slgt_info *info, struct slgt_desc *bufs, int count);
494 static int alloc_tmp_rbuf(struct slgt_info *info);
495 static void free_tmp_rbuf(struct slgt_info *info);
503 static int get_stats(struct slgt_info *info, struct mgsl_icount __user *user_icount);
504 static int get_params(struct slgt_info *info, MGSL_PARAMS __user *params);
505 static int set_params(struct slgt_info *info, MGSL_PARAMS __user *params);
506 static int get_txidle(struct slgt_info *info, int __user *idle_mode);
507 static int set_txidle(struct slgt_info *info, int idle_mode);
508 static int tx_enable(struct slgt_info *info, int enable);
509 static int tx_abort(struct slgt_info *info);
510 static int rx_enable(struct slgt_info *info, int enable);
511 static int modem_input_wait(struct slgt_info *info,int arg);
512 static int wait_mgsl_event(struct slgt_info *info, int __user *mask_ptr);
517 static int get_interface(struct slgt_info *info, int __user *if_mode);
518 static int set_interface(struct slgt_info *info, int if_mode);
519 static int set_gpio(struct slgt_info *info, struct gpio_desc __user *gpio);
520 static int get_gpio(struct slgt_info *info, struct gpio_desc __user *gpio);
521 static int wait_gpio(struct slgt_info *info, struct gpio_desc __user *gpio);
522 static int get_xsync(struct slgt_info *info, int __user *if_mode);
523 static int set_xsync(struct slgt_info *info, int if_mode);
524 static int get_xctrl(struct slgt_info *info, int __user *if_mode);
525 static int set_xctrl(struct slgt_info *info, int if_mode);
530 static void add_device(struct slgt_info *info);
532 static int claim_resources(struct slgt_info *info);
533 static void release_resources(struct slgt_info *info);
552 static void trace_block(struct slgt_info *info, const char *data, int count, const char *label) trace_block() argument
556 printk("%s %s data:\n",info->device_name, label); trace_block()
575 #define DBGDATA(info, buf, size, label)
579 static void dump_tbufs(struct slgt_info *info) dump_tbufs() argument
582 printk("tbuf_current=%d\n", info->tbuf_current); dump_tbufs()
583 for (i=0 ; i < info->tbuf_count ; i++) { dump_tbufs()
585 i, le16_to_cpu(info->tbufs[i].count), le16_to_cpu(info->tbufs[i].status)); dump_tbufs()
589 #define DBGTBUF(info)
593 static void dump_rbufs(struct slgt_info *info) dump_rbufs() argument
596 printk("rbuf_current=%d\n", info->rbuf_current); dump_rbufs()
597 for (i=0 ; i < info->rbuf_count ; i++) { dump_rbufs()
599 i, le16_to_cpu(info->rbufs[i].count), le16_to_cpu(info->rbufs[i].status)); dump_rbufs()
603 #define DBGRBUF(info)
606 static inline int sanity_check(struct slgt_info *info, char *devname, const char *name) sanity_check() argument
609 if (!info) { sanity_check()
613 if (info->magic != MGSL_MAGIC) { sanity_check()
618 if (!info) sanity_check()
650 struct slgt_info *info; open() local
660 info = slgt_device_list; open()
661 while(info && info->line != line) open()
662 info = info->next_device; open()
663 if (sanity_check(info, tty->name, "open")) open()
665 if (info->init_error) { open()
666 DBGERR(("%s init error=%d\n", info->device_name, info->init_error)); open()
670 tty->driver_data = info; open()
671 info->port.tty = tty; open()
673 DBGINFO(("%s open, old ref count = %d\n", info->device_name, info->port.count)); open()
676 if (info->port.flags & ASYNC_CLOSING){ open()
677 wait_event_interruptible_tty(tty, info->port.close_wait, open()
678 !(info->port.flags & ASYNC_CLOSING)); open()
679 retval = ((info->port.flags & ASYNC_HUP_NOTIFY) ? open()
684 mutex_lock(&info->port.mutex); open()
685 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; open()
687 spin_lock_irqsave(&info->netlock, flags); open()
688 if (info->netcount) { open()
690 spin_unlock_irqrestore(&info->netlock, flags); open()
691 mutex_unlock(&info->port.mutex); open()
694 info->port.count++; open()
695 spin_unlock_irqrestore(&info->netlock, flags); open()
697 if (info->port.count == 1) { open()
699 retval = startup(info); open()
701 mutex_unlock(&info->port.mutex); open()
705 mutex_unlock(&info->port.mutex); open()
706 retval = block_til_ready(tty, filp, info); open()
708 DBGINFO(("%s block_til_ready rc=%d\n", info->device_name, retval)); open()
717 info->port.tty = NULL; /* tty layer will release tty struct */ open()
718 if(info->port.count) open()
719 info->port.count--; open()
722 DBGINFO(("%s open rc=%d\n", info->device_name, retval)); open()
728 struct slgt_info *info = tty->driver_data; close() local
730 if (sanity_check(info, tty->name, "close")) close()
732 DBGINFO(("%s close entry, count=%d\n", info->device_name, info->port.count)); close()
734 if (tty_port_close_start(&info->port, tty, filp) == 0) close()
737 mutex_lock(&info->port.mutex); close()
738 if (info->port.flags & ASYNC_INITIALIZED) close()
739 wait_until_sent(tty, info->timeout); close()
743 shutdown(info); close()
744 mutex_unlock(&info->port.mutex); close()
746 tty_port_close_end(&info->port, tty); close()
747 info->port.tty = NULL; close()
749 DBGINFO(("%s close exit, count=%d\n", tty->driver->name, info->port.count)); close()
754 struct slgt_info *info = tty->driver_data; hangup() local
757 if (sanity_check(info, tty->name, "hangup")) hangup()
759 DBGINFO(("%s hangup\n", info->device_name)); hangup()
763 mutex_lock(&info->port.mutex); hangup()
764 shutdown(info); hangup()
766 spin_lock_irqsave(&info->port.lock, flags); hangup()
767 info->port.count = 0; hangup()
768 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; hangup()
769 info->port.tty = NULL; hangup()
770 spin_unlock_irqrestore(&info->port.lock, flags); hangup()
771 mutex_unlock(&info->port.mutex); hangup()
773 wake_up_interruptible(&info->port.open_wait); hangup()
778 struct slgt_info *info = tty->driver_data; set_termios() local
783 change_params(info); set_termios()
788 info->signals &= ~(SerialSignal_RTS | SerialSignal_DTR); set_termios()
789 spin_lock_irqsave(&info->lock,flags); set_termios()
790 set_signals(info); set_termios()
791 spin_unlock_irqrestore(&info->lock,flags); set_termios()
797 info->signals |= SerialSignal_DTR; set_termios()
800 info->signals |= SerialSignal_RTS; set_termios()
802 spin_lock_irqsave(&info->lock,flags); set_termios()
803 set_signals(info); set_termios()
804 spin_unlock_irqrestore(&info->lock,flags); set_termios()
815 static void update_tx_timer(struct slgt_info *info) update_tx_timer() argument
821 if (info->params.mode == MGSL_MODE_HDLC) { update_tx_timer()
822 int timeout = (tbuf_bytes(info) * 7) + 1000; update_tx_timer()
823 mod_timer(&info->tx_timer, jiffies + msecs_to_jiffies(timeout)); update_tx_timer()
831 struct slgt_info *info = tty->driver_data; write() local
834 if (sanity_check(info, tty->name, "write")) write()
837 DBGINFO(("%s write count=%d\n", info->device_name, count)); write()
839 if (!info->tx_buf || (count > info->max_frame_size)) write()
845 spin_lock_irqsave(&info->lock, flags); write()
847 if (info->tx_count) { write()
849 if (!tx_load(info, info->tx_buf, info->tx_count)) write()
851 info->tx_count = 0; write()
854 if (tx_load(info, buf, count)) write()
858 spin_unlock_irqrestore(&info->lock, flags); write()
859 DBGINFO(("%s write rc=%d\n", info->device_name, ret)); write()
865 struct slgt_info *info = tty->driver_data; put_char() local
869 if (sanity_check(info, tty->name, "put_char")) put_char()
871 DBGINFO(("%s put_char(%d)\n", info->device_name, ch)); put_char()
872 if (!info->tx_buf) put_char()
874 spin_lock_irqsave(&info->lock,flags); put_char()
875 if (info->tx_count < info->max_frame_size) { put_char()
876 info->tx_buf[info->tx_count++] = ch; put_char()
879 spin_unlock_irqrestore(&info->lock,flags); put_char()
885 struct slgt_info *info = tty->driver_data; send_xchar() local
888 if (sanity_check(info, tty->name, "send_xchar")) send_xchar()
890 DBGINFO(("%s send_xchar(%d)\n", info->device_name, ch)); send_xchar()
891 info->x_char = ch; send_xchar()
893 spin_lock_irqsave(&info->lock,flags); send_xchar()
894 if (!info->tx_enabled) send_xchar()
895 tx_start(info); send_xchar()
896 spin_unlock_irqrestore(&info->lock,flags); send_xchar()
902 struct slgt_info *info = tty->driver_data; wait_until_sent() local
905 if (!info ) wait_until_sent()
907 if (sanity_check(info, tty->name, "wait_until_sent")) wait_until_sent()
909 DBGINFO(("%s wait_until_sent entry\n", info->device_name)); wait_until_sent()
910 if (!(info->port.flags & ASYNC_INITIALIZED)) wait_until_sent()
921 if (info->params.data_rate) { wait_until_sent()
922 char_time = info->timeout/(32 * 5); wait_until_sent()
931 while (info->tx_active) { wait_until_sent()
939 DBGINFO(("%s wait_until_sent exit\n", info->device_name)); wait_until_sent()
944 struct slgt_info *info = tty->driver_data; write_room() local
947 if (sanity_check(info, tty->name, "write_room")) write_room()
949 ret = (info->tx_active) ? 0 : HDLC_MAX_FRAME_SIZE; write_room()
950 DBGINFO(("%s write_room=%d\n", info->device_name, ret)); write_room()
956 struct slgt_info *info = tty->driver_data; flush_chars() local
959 if (sanity_check(info, tty->name, "flush_chars")) flush_chars()
961 DBGINFO(("%s flush_chars entry tx_count=%d\n", info->device_name, info->tx_count)); flush_chars()
963 if (info->tx_count <= 0 || tty->stopped || flush_chars()
964 tty->hw_stopped || !info->tx_buf) flush_chars()
967 DBGINFO(("%s flush_chars start transmit\n", info->device_name)); flush_chars()
969 spin_lock_irqsave(&info->lock,flags); flush_chars()
970 if (info->tx_count && tx_load(info, info->tx_buf, info->tx_count)) flush_chars()
971 info->tx_count = 0; flush_chars()
972 spin_unlock_irqrestore(&info->lock,flags); flush_chars()
977 struct slgt_info *info = tty->driver_data; flush_buffer() local
980 if (sanity_check(info, tty->name, "flush_buffer")) flush_buffer()
982 DBGINFO(("%s flush_buffer\n", info->device_name)); flush_buffer()
984 spin_lock_irqsave(&info->lock, flags); flush_buffer()
985 info->tx_count = 0; flush_buffer()
986 spin_unlock_irqrestore(&info->lock, flags); flush_buffer()
996 struct slgt_info *info = tty->driver_data; tx_hold() local
999 if (sanity_check(info, tty->name, "tx_hold")) tx_hold()
1001 DBGINFO(("%s tx_hold\n", info->device_name)); tx_hold()
1002 spin_lock_irqsave(&info->lock,flags); tx_hold()
1003 if (info->tx_enabled && info->params.mode == MGSL_MODE_ASYNC) tx_hold()
1004 tx_stop(info); tx_hold()
1005 spin_unlock_irqrestore(&info->lock,flags); tx_hold()
1013 struct slgt_info *info = tty->driver_data; tx_release() local
1016 if (sanity_check(info, tty->name, "tx_release")) tx_release()
1018 DBGINFO(("%s tx_release\n", info->device_name)); tx_release()
1019 spin_lock_irqsave(&info->lock, flags); tx_release()
1020 if (info->tx_count && tx_load(info, info->tx_buf, info->tx_count)) tx_release()
1021 info->tx_count = 0; tx_release()
1022 spin_unlock_irqrestore(&info->lock, flags); tx_release()
1039 struct slgt_info *info = tty->driver_data; ioctl() local
1043 if (sanity_check(info, tty->name, "ioctl")) ioctl()
1045 DBGINFO(("%s ioctl() cmd=%08X\n", info->device_name, cmd)); ioctl()
1055 return wait_mgsl_event(info, argp); ioctl()
1057 return modem_input_wait(info,(int)arg); ioctl()
1059 return set_gpio(info, argp); ioctl()
1061 return get_gpio(info, argp); ioctl()
1063 return wait_gpio(info, argp); ioctl()
1065 return get_xsync(info, argp); ioctl()
1067 return set_xsync(info, (int)arg); ioctl()
1069 return get_xctrl(info, argp); ioctl()
1071 return set_xctrl(info, (int)arg); ioctl()
1073 mutex_lock(&info->port.mutex); ioctl()
1076 ret = get_params(info, argp); ioctl()
1079 ret = set_params(info, argp); ioctl()
1082 ret = get_txidle(info, argp); ioctl()
1085 ret = set_txidle(info, (int)arg); ioctl()
1088 ret = tx_enable(info, (int)arg); ioctl()
1091 ret = rx_enable(info, (int)arg); ioctl()
1094 ret = tx_abort(info); ioctl()
1097 ret = get_stats(info, argp); ioctl()
1100 ret = get_interface(info, argp); ioctl()
1103 ret = set_interface(info,(int)arg); ioctl()
1108 mutex_unlock(&info->port.mutex); ioctl()
1116 struct slgt_info *info = tty->driver_data; get_icount() local
1120 spin_lock_irqsave(&info->lock,flags); get_icount()
1121 cnow = info->icount; get_icount()
1122 spin_unlock_irqrestore(&info->lock,flags); get_icount()
1143 static long get_params32(struct slgt_info *info, struct MGSL_PARAMS32 __user *user_params) get_params32() argument
1147 DBGINFO(("%s get_params32\n", info->device_name)); get_params32()
1149 tmp_params.mode = (compat_ulong_t)info->params.mode; get_params32()
1150 tmp_params.loopback = info->params.loopback; get_params32()
1151 tmp_params.flags = info->params.flags; get_params32()
1152 tmp_params.encoding = info->params.encoding; get_params32()
1153 tmp_params.clock_speed = (compat_ulong_t)info->params.clock_speed; get_params32()
1154 tmp_params.addr_filter = info->params.addr_filter; get_params32()
1155 tmp_params.crc_type = info->params.crc_type; get_params32()
1156 tmp_params.preamble_length = info->params.preamble_length; get_params32()
1157 tmp_params.preamble = info->params.preamble; get_params32()
1158 tmp_params.data_rate = (compat_ulong_t)info->params.data_rate; get_params32()
1159 tmp_params.data_bits = info->params.data_bits; get_params32()
1160 tmp_params.stop_bits = info->params.stop_bits; get_params32()
1161 tmp_params.parity = info->params.parity; get_params32()
1167 static long set_params32(struct slgt_info *info, struct MGSL_PARAMS32 __user *new_params) set_params32() argument
1171 DBGINFO(("%s set_params32\n", info->device_name)); set_params32()
1175 spin_lock(&info->lock); set_params32()
1177 info->base_clock = tmp_params.clock_speed; set_params32()
1179 info->params.mode = tmp_params.mode; set_params32()
1180 info->params.loopback = tmp_params.loopback; set_params32()
1181 info->params.flags = tmp_params.flags; set_params32()
1182 info->params.encoding = tmp_params.encoding; set_params32()
1183 info->params.clock_speed = tmp_params.clock_speed; set_params32()
1184 info->params.addr_filter = tmp_params.addr_filter; set_params32()
1185 info->params.crc_type = tmp_params.crc_type; set_params32()
1186 info->params.preamble_length = tmp_params.preamble_length; set_params32()
1187 info->params.preamble = tmp_params.preamble; set_params32()
1188 info->params.data_rate = tmp_params.data_rate; set_params32()
1189 info->params.data_bits = tmp_params.data_bits; set_params32()
1190 info->params.stop_bits = tmp_params.stop_bits; set_params32()
1191 info->params.parity = tmp_params.parity; set_params32()
1193 spin_unlock(&info->lock); set_params32()
1195 program_hw(info); set_params32()
1203 struct slgt_info *info = tty->driver_data; slgt_compat_ioctl() local
1206 if (sanity_check(info, tty->name, "compat_ioctl")) slgt_compat_ioctl()
1208 DBGINFO(("%s compat_ioctl() cmd=%08X\n", info->device_name, cmd)); slgt_compat_ioctl()
1213 rc = set_params32(info, compat_ptr(arg)); slgt_compat_ioctl()
1217 rc = get_params32(info, compat_ptr(arg)); slgt_compat_ioctl()
1243 DBGINFO(("%s compat_ioctl() cmd=%08X rc=%d\n", info->device_name, cmd, rc)); slgt_compat_ioctl()
1253 static inline void line_info(struct seq_file *m, struct slgt_info *info) line_info() argument
1259 info->device_name, info->phys_reg_addr, line_info()
1260 info->irq_level, info->max_frame_size); line_info()
1263 spin_lock_irqsave(&info->lock,flags); line_info()
1264 get_signals(info); line_info()
1265 spin_unlock_irqrestore(&info->lock,flags); line_info()
1269 if (info->signals & SerialSignal_RTS) line_info()
1271 if (info->signals & SerialSignal_CTS) line_info()
1273 if (info->signals & SerialSignal_DTR) line_info()
1275 if (info->signals & SerialSignal_DSR) line_info()
1277 if (info->signals & SerialSignal_DCD) line_info()
1279 if (info->signals & SerialSignal_RI) line_info()
1282 if (info->params.mode != MGSL_MODE_ASYNC) { line_info()
1284 info->icount.txok, info->icount.rxok); line_info()
1285 if (info->icount.txunder) line_info()
1286 seq_printf(m, " txunder:%d", info->icount.txunder); line_info()
1287 if (info->icount.txabort) line_info()
1288 seq_printf(m, " txabort:%d", info->icount.txabort); line_info()
1289 if (info->icount.rxshort) line_info()
1290 seq_printf(m, " rxshort:%d", info->icount.rxshort); line_info()
1291 if (info->icount.rxlong) line_info()
1292 seq_printf(m, " rxlong:%d", info->icount.rxlong); line_info()
1293 if (info->icount.rxover) line_info()
1294 seq_printf(m, " rxover:%d", info->icount.rxover); line_info()
1295 if (info->icount.rxcrc) line_info()
1296 seq_printf(m, " rxcrc:%d", info->icount.rxcrc); line_info()
1299 info->icount.tx, info->icount.rx); line_info()
1300 if (info->icount.frame) line_info()
1301 seq_printf(m, " fe:%d", info->icount.frame); line_info()
1302 if (info->icount.parity) line_info()
1303 seq_printf(m, " pe:%d", info->icount.parity); line_info()
1304 if (info->icount.brk) line_info()
1305 seq_printf(m, " brk:%d", info->icount.brk); line_info()
1306 if (info->icount.overrun) line_info()
1307 seq_printf(m, " oe:%d", info->icount.overrun); line_info()
1314 info->tx_active,info->bh_requested,info->bh_running, line_info()
1315 info->pending_bh); line_info()
1322 struct slgt_info *info; synclink_gt_proc_show() local
1326 info = slgt_device_list; synclink_gt_proc_show()
1327 while( info ) { synclink_gt_proc_show()
1328 line_info(m, info); synclink_gt_proc_show()
1329 info = info->next_device; synclink_gt_proc_show()
1352 struct slgt_info *info = tty->driver_data; chars_in_buffer() local
1354 if (sanity_check(info, tty->name, "chars_in_buffer")) chars_in_buffer()
1356 count = tbuf_bytes(info); chars_in_buffer()
1357 DBGINFO(("%s chars_in_buffer()=%d\n", info->device_name, count)); chars_in_buffer()
1366 struct slgt_info *info = tty->driver_data; throttle() local
1369 if (sanity_check(info, tty->name, "throttle")) throttle()
1371 DBGINFO(("%s throttle\n", info->device_name)); throttle()
1375 spin_lock_irqsave(&info->lock,flags); throttle()
1376 info->signals &= ~SerialSignal_RTS; throttle()
1377 set_signals(info); throttle()
1378 spin_unlock_irqrestore(&info->lock,flags); throttle()
1387 struct slgt_info *info = tty->driver_data; unthrottle() local
1390 if (sanity_check(info, tty->name, "unthrottle")) unthrottle()
1392 DBGINFO(("%s unthrottle\n", info->device_name)); unthrottle()
1394 if (info->x_char) unthrottle()
1395 info->x_char = 0; unthrottle()
1400 spin_lock_irqsave(&info->lock,flags); unthrottle()
1401 info->signals |= SerialSignal_RTS; unthrottle()
1402 set_signals(info); unthrottle()
1403 spin_unlock_irqrestore(&info->lock,flags); unthrottle()
1413 struct slgt_info *info = tty->driver_data; set_break() local
1417 if (sanity_check(info, tty->name, "set_break")) set_break()
1419 DBGINFO(("%s set_break(%d)\n", info->device_name, break_state)); set_break()
1421 spin_lock_irqsave(&info->lock,flags); set_break()
1422 value = rd_reg16(info, TCR); set_break()
1427 wr_reg16(info, TCR, value); set_break()
1428 spin_unlock_irqrestore(&info->lock,flags); set_break()
1447 struct slgt_info *info = dev_to_port(dev); hdlcdev_attach() local
1452 if (info->port.count) hdlcdev_attach()
1455 DBGINFO(("%s hdlcdev_attach\n", info->device_name)); hdlcdev_attach()
1475 info->params.encoding = new_encoding; hdlcdev_attach()
1476 info->params.crc_type = new_crctype; hdlcdev_attach()
1479 if (info->netcount) hdlcdev_attach()
1480 program_hw(info); hdlcdev_attach()
1494 struct slgt_info *info = dev_to_port(dev); hdlcdev_xmit() local
1512 spin_lock_irqsave(&info->lock, flags); hdlcdev_xmit()
1513 tx_load(info, skb->data, skb->len); hdlcdev_xmit()
1514 spin_unlock_irqrestore(&info->lock, flags); hdlcdev_xmit()
1532 struct slgt_info *info = dev_to_port(dev); hdlcdev_open() local
1546 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
1547 if (info->port.count != 0 || info->netcount != 0) { hdlcdev_open()
1549 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
1552 info->netcount=1; hdlcdev_open()
1553 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
1556 if ((rc = startup(info)) != 0) { hdlcdev_open()
1557 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
1558 info->netcount=0; hdlcdev_open()
1559 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
1564 info->signals |= SerialSignal_RTS | SerialSignal_DTR; hdlcdev_open()
1565 program_hw(info); hdlcdev_open()
1572 spin_lock_irqsave(&info->lock, flags); hdlcdev_open()
1573 get_signals(info); hdlcdev_open()
1574 spin_unlock_irqrestore(&info->lock, flags); hdlcdev_open()
1575 if (info->signals & SerialSignal_DCD) hdlcdev_open()
1592 struct slgt_info *info = dev_to_port(dev); hdlcdev_close() local
1600 shutdown(info); hdlcdev_close()
1604 spin_lock_irqsave(&info->netlock, flags); hdlcdev_close()
1605 info->netcount=0; hdlcdev_close()
1606 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_close()
1626 struct slgt_info *info = dev_to_port(dev); hdlcdev_ioctl() local
1632 if (info->port.count) hdlcdev_ioctl()
1649 flags = info->params.flags & (HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
1662 new_line.clock_rate = info->params.clock_speed; hdlcdev_ioctl()
1663 new_line.loopback = info->params.loopback ? 1:0; hdlcdev_ioctl()
1682 case CLOCK_DEFAULT: flags = info->params.flags & hdlcdev_ioctl()
1693 info->params.flags &= ~(HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
1697 info->params.flags |= flags; hdlcdev_ioctl()
1699 info->params.loopback = new_line.loopback; hdlcdev_ioctl()
1702 info->params.clock_speed = new_line.clock_rate; hdlcdev_ioctl()
1704 info->params.clock_speed = 0; hdlcdev_ioctl()
1707 if (info->netcount) hdlcdev_ioctl()
1708 program_hw(info); hdlcdev_ioctl()
1723 struct slgt_info *info = dev_to_port(dev); hdlcdev_tx_timeout() local
1731 spin_lock_irqsave(&info->lock,flags); hdlcdev_tx_timeout()
1732 tx_stop(info); hdlcdev_tx_timeout()
1733 spin_unlock_irqrestore(&info->lock,flags); hdlcdev_tx_timeout()
1742 * info pointer to device instance information
1744 static void hdlcdev_tx_done(struct slgt_info *info) hdlcdev_tx_done() argument
1746 if (netif_queue_stopped(info->netdev)) hdlcdev_tx_done()
1747 netif_wake_queue(info->netdev); hdlcdev_tx_done()
1754 * info pointer to device instance information
1758 static void hdlcdev_rx(struct slgt_info *info, char *buf, int size) hdlcdev_rx() argument
1761 struct net_device *dev = info->netdev; hdlcdev_rx()
1794 * info pointer to device instance information
1798 static int hdlcdev_init(struct slgt_info *info) hdlcdev_init() argument
1806 if (!(dev = alloc_hdlcdev(info))) { hdlcdev_init()
1807 printk(KERN_ERR "%s hdlc device alloc failure\n", info->device_name); hdlcdev_init()
1812 dev->mem_start = info->phys_reg_addr; hdlcdev_init()
1813 dev->mem_end = info->phys_reg_addr + SLGT_REG_SIZE - 1; hdlcdev_init()
1814 dev->irq = info->irq_level; hdlcdev_init()
1833 info->netdev = dev; hdlcdev_init()
1841 * info pointer to device instance information
1843 static void hdlcdev_exit(struct slgt_info *info) hdlcdev_exit() argument
1845 unregister_hdlc_device(info->netdev); hdlcdev_exit()
1846 free_netdev(info->netdev); hdlcdev_exit()
1847 info->netdev = NULL; hdlcdev_exit()
1855 static void rx_async(struct slgt_info *info) rx_async() argument
1857 struct mgsl_icount *icount = &info->icount; rx_async()
1861 struct slgt_desc *bufs = info->rbufs; rx_async()
1867 start = end = info->rbuf_current; rx_async()
1870 count = desc_count(bufs[end]) - info->rbuf_index; rx_async()
1871 p = bufs[end].buf + info->rbuf_index; rx_async()
1873 DBGISR(("%s rx_async count=%d\n", info->device_name, count)); rx_async()
1874 DBGDATA(info, p, count, "rx"); rx_async()
1888 if (status & info->ignore_status_mask) rx_async()
1895 tty_insert_flip_char(&info->port, ch, stat); rx_async()
1901 info->rbuf_index += i; rx_async()
1902 mod_timer(&info->rx_timer, jiffies + 1); rx_async()
1906 info->rbuf_index = 0; rx_async()
1907 free_rbufs(info, end, end); rx_async()
1909 if (++end == info->rbuf_count) rx_async()
1918 tty_flip_buffer_push(&info->port); rx_async()
1924 static int bh_action(struct slgt_info *info) bh_action() argument
1929 spin_lock_irqsave(&info->lock,flags); bh_action()
1931 if (info->pending_bh & BH_RECEIVE) { bh_action()
1932 info->pending_bh &= ~BH_RECEIVE; bh_action()
1934 } else if (info->pending_bh & BH_TRANSMIT) { bh_action()
1935 info->pending_bh &= ~BH_TRANSMIT; bh_action()
1937 } else if (info->pending_bh & BH_STATUS) { bh_action()
1938 info->pending_bh &= ~BH_STATUS; bh_action()
1942 info->bh_running = false; bh_action()
1943 info->bh_requested = false; bh_action()
1947 spin_unlock_irqrestore(&info->lock,flags); bh_action()
1957 struct slgt_info *info = container_of(work, struct slgt_info, task); bh_handler() local
1960 info->bh_running = true; bh_handler()
1962 while((action = bh_action(info))) { bh_handler()
1965 DBGBH(("%s bh receive\n", info->device_name)); bh_handler()
1966 switch(info->params.mode) { bh_handler()
1968 rx_async(info); bh_handler()
1971 while(rx_get_frame(info)); bh_handler()
1977 while(rx_get_buf(info)); bh_handler()
1981 if (info->rx_restart) bh_handler()
1982 rx_start(info); bh_handler()
1985 bh_transmit(info); bh_handler()
1988 DBGBH(("%s bh status\n", info->device_name)); bh_handler()
1989 info->ri_chkcount = 0; bh_handler()
1990 info->dsr_chkcount = 0; bh_handler()
1991 info->dcd_chkcount = 0; bh_handler()
1992 info->cts_chkcount = 0; bh_handler()
1995 DBGBH(("%s unknown action\n", info->device_name)); bh_handler()
1999 DBGBH(("%s bh_handler exit\n", info->device_name)); bh_handler()
2002 static void bh_transmit(struct slgt_info *info) bh_transmit() argument
2004 struct tty_struct *tty = info->port.tty; bh_transmit()
2006 DBGBH(("%s bh_transmit\n", info->device_name)); bh_transmit()
2011 static void dsr_change(struct slgt_info *info, unsigned short status) dsr_change() argument
2014 info->signals |= SerialSignal_DSR; dsr_change()
2015 info->input_signal_events.dsr_up++; dsr_change()
2017 info->signals &= ~SerialSignal_DSR; dsr_change()
2018 info->input_signal_events.dsr_down++; dsr_change()
2020 DBGISR(("dsr_change %s signals=%04X\n", info->device_name, info->signals)); dsr_change()
2021 if ((info->dsr_chkcount)++ == IO_PIN_SHUTDOWN_LIMIT) { dsr_change()
2022 slgt_irq_off(info, IRQ_DSR); dsr_change()
2025 info->icount.dsr++; dsr_change()
2026 wake_up_interruptible(&info->status_event_wait_q); dsr_change()
2027 wake_up_interruptible(&info->event_wait_q); dsr_change()
2028 info->pending_bh |= BH_STATUS; dsr_change()
2031 static void cts_change(struct slgt_info *info, unsigned short status) cts_change() argument
2034 info->signals |= SerialSignal_CTS; cts_change()
2035 info->input_signal_events.cts_up++; cts_change()
2037 info->signals &= ~SerialSignal_CTS; cts_change()
2038 info->input_signal_events.cts_down++; cts_change()
2040 DBGISR(("cts_change %s signals=%04X\n", info->device_name, info->signals)); cts_change()
2041 if ((info->cts_chkcount)++ == IO_PIN_SHUTDOWN_LIMIT) { cts_change()
2042 slgt_irq_off(info, IRQ_CTS); cts_change()
2045 info->icount.cts++; cts_change()
2046 wake_up_interruptible(&info->status_event_wait_q); cts_change()
2047 wake_up_interruptible(&info->event_wait_q); cts_change()
2048 info->pending_bh |= BH_STATUS; cts_change()
2050 if (tty_port_cts_enabled(&info->port)) { cts_change()
2051 if (info->port.tty) { cts_change()
2052 if (info->port.tty->hw_stopped) { cts_change()
2053 if (info->signals & SerialSignal_CTS) { cts_change()
2054 info->port.tty->hw_stopped = 0; cts_change()
2055 info->pending_bh |= BH_TRANSMIT; cts_change()
2059 if (!(info->signals & SerialSignal_CTS)) cts_change()
2060 info->port.tty->hw_stopped = 1; cts_change()
2066 static void dcd_change(struct slgt_info *info, unsigned short status) dcd_change() argument
2069 info->signals |= SerialSignal_DCD; dcd_change()
2070 info->input_signal_events.dcd_up++; dcd_change()
2072 info->signals &= ~SerialSignal_DCD; dcd_change()
2073 info->input_signal_events.dcd_down++; dcd_change()
2075 DBGISR(("dcd_change %s signals=%04X\n", info->device_name, info->signals)); dcd_change()
2076 if ((info->dcd_chkcount)++ == IO_PIN_SHUTDOWN_LIMIT) { dcd_change()
2077 slgt_irq_off(info, IRQ_DCD); dcd_change()
2080 info->icount.dcd++; dcd_change()
2082 if (info->netcount) { dcd_change()
2083 if (info->signals & SerialSignal_DCD) dcd_change()
2084 netif_carrier_on(info->netdev); dcd_change()
2086 netif_carrier_off(info->netdev); dcd_change()
2089 wake_up_interruptible(&info->status_event_wait_q); dcd_change()
2090 wake_up_interruptible(&info->event_wait_q); dcd_change()
2091 info->pending_bh |= BH_STATUS; dcd_change()
2093 if (info->port.flags & ASYNC_CHECK_CD) { dcd_change()
2094 if (info->signals & SerialSignal_DCD) dcd_change()
2095 wake_up_interruptible(&info->port.open_wait); dcd_change()
2097 if (info->port.tty) dcd_change()
2098 tty_hangup(info->port.tty); dcd_change()
2103 static void ri_change(struct slgt_info *info, unsigned short status) ri_change() argument
2106 info->signals |= SerialSignal_RI; ri_change()
2107 info->input_signal_events.ri_up++; ri_change()
2109 info->signals &= ~SerialSignal_RI; ri_change()
2110 info->input_signal_events.ri_down++; ri_change()
2112 DBGISR(("ri_change %s signals=%04X\n", info->device_name, info->signals)); ri_change()
2113 if ((info->ri_chkcount)++ == IO_PIN_SHUTDOWN_LIMIT) { ri_change()
2114 slgt_irq_off(info, IRQ_RI); ri_change()
2117 info->icount.rng++; ri_change()
2118 wake_up_interruptible(&info->status_event_wait_q); ri_change()
2119 wake_up_interruptible(&info->event_wait_q); ri_change()
2120 info->pending_bh |= BH_STATUS; ri_change()
2123 static void isr_rxdata(struct slgt_info *info) isr_rxdata() argument
2125 unsigned int count = info->rbuf_fill_count; isr_rxdata()
2126 unsigned int i = info->rbuf_fill_index; isr_rxdata()
2129 while (rd_reg16(info, SSR) & IRQ_RXDATA) { isr_rxdata()
2130 reg = rd_reg16(info, RDR); isr_rxdata()
2131 DBGISR(("isr_rxdata %s RDR=%04X\n", info->device_name, reg)); isr_rxdata()
2132 if (desc_complete(info->rbufs[i])) { isr_rxdata()
2134 rx_stop(info); isr_rxdata()
2135 info->rx_restart = 1; isr_rxdata()
2138 info->rbufs[i].buf[count++] = (unsigned char)reg; isr_rxdata()
2140 if (info->params.mode == MGSL_MODE_ASYNC) isr_rxdata()
2141 info->rbufs[i].buf[count++] = (unsigned char)(reg >> 8); isr_rxdata()
2142 if (count == info->rbuf_fill_level || (reg & BIT10)) { isr_rxdata()
2144 set_desc_count(info->rbufs[i], count); isr_rxdata()
2145 set_desc_status(info->rbufs[i], BIT15 | (reg >> 8)); isr_rxdata()
2146 info->rbuf_fill_count = count = 0; isr_rxdata()
2147 if (++i == info->rbuf_count) isr_rxdata()
2149 info->pending_bh |= BH_RECEIVE; isr_rxdata()
2153 info->rbuf_fill_index = i; isr_rxdata()
2154 info->rbuf_fill_count = count; isr_rxdata()
2157 static void isr_serial(struct slgt_info *info) isr_serial() argument
2159 unsigned short status = rd_reg16(info, SSR); isr_serial()
2161 DBGISR(("%s isr_serial status=%04X\n", info->device_name, status)); isr_serial()
2163 wr_reg16(info, SSR, status); /* clear pending */ isr_serial()
2165 info->irq_occurred = true; isr_serial()
2167 if (info->params.mode == MGSL_MODE_ASYNC) { isr_serial()
2169 if (info->tx_active) isr_serial()
2170 isr_txeom(info, status); isr_serial()
2172 if (info->rx_pio && (status & IRQ_RXDATA)) isr_serial()
2173 isr_rxdata(info); isr_serial()
2175 info->icount.brk++; isr_serial()
2177 if (info->port.tty) { isr_serial()
2178 if (!(status & info->ignore_status_mask)) { isr_serial()
2179 if (info->read_status_mask & MASK_BREAK) { isr_serial()
2180 tty_insert_flip_char(&info->port, 0, TTY_BREAK); isr_serial()
2181 if (info->port.flags & ASYNC_SAK) isr_serial()
2182 do_SAK(info->port.tty); isr_serial()
2189 isr_txeom(info, status); isr_serial()
2190 if (info->rx_pio && (status & IRQ_RXDATA)) isr_serial()
2191 isr_rxdata(info); isr_serial()
2194 info->icount.rxidle++; isr_serial()
2196 info->icount.exithunt++; isr_serial()
2197 wake_up_interruptible(&info->event_wait_q); isr_serial()
2201 rx_start(info); isr_serial()
2205 dsr_change(info, status); isr_serial()
2207 cts_change(info, status); isr_serial()
2209 dcd_change(info, status); isr_serial()
2211 ri_change(info, status); isr_serial()
2214 static void isr_rdma(struct slgt_info *info) isr_rdma() argument
2216 unsigned int status = rd_reg32(info, RDCSR); isr_rdma()
2218 DBGISR(("%s isr_rdma status=%08x\n", info->device_name, status)); isr_rdma()
2231 wr_reg32(info, RDCSR, status); /* clear pending */ isr_rdma()
2234 DBGISR(("%s isr_rdma rx_restart=1\n", info->device_name)); isr_rdma()
2235 info->rx_restart = true; isr_rdma()
2237 info->pending_bh |= BH_RECEIVE; isr_rdma()
2240 static void isr_tdma(struct slgt_info *info) isr_tdma() argument
2242 unsigned int status = rd_reg32(info, TDCSR); isr_tdma()
2244 DBGISR(("%s isr_tdma status=%08x\n", info->device_name, status)); isr_tdma()
2256 wr_reg32(info, TDCSR, status); /* clear pending */ isr_tdma()
2261 info->pending_bh |= BH_TRANSMIT; isr_tdma()
2268 * if there are unsent buffers then info->tbuf_start
2271 static bool unsent_tbufs(struct slgt_info *info) unsent_tbufs() argument
2273 unsigned int i = info->tbuf_current; unsent_tbufs()
2285 i = info->tbuf_count - 1; unsent_tbufs()
2286 if (!desc_count(info->tbufs[i])) unsent_tbufs()
2288 info->tbuf_start = i; unsent_tbufs()
2290 } while (i != info->tbuf_current); unsent_tbufs()
2295 static void isr_txeom(struct slgt_info *info, unsigned short status) isr_txeom() argument
2297 DBGISR(("%s txeom status=%04x\n", info->device_name, status)); isr_txeom()
2299 slgt_irq_off(info, IRQ_TXDATA + IRQ_TXIDLE + IRQ_TXUNDER); isr_txeom()
2300 tdma_reset(info); isr_txeom()
2302 unsigned short val = rd_reg16(info, TCR); isr_txeom()
2303 wr_reg16(info, TCR, (unsigned short)(val | BIT2)); /* set reset bit */ isr_txeom()
2304 wr_reg16(info, TCR, val); /* clear reset bit */ isr_txeom()
2307 if (info->tx_active) { isr_txeom()
2308 if (info->params.mode != MGSL_MODE_ASYNC) { isr_txeom()
2310 info->icount.txunder++; isr_txeom()
2312 info->icount.txok++; isr_txeom()
2315 if (unsent_tbufs(info)) { isr_txeom()
2316 tx_start(info); isr_txeom()
2317 update_tx_timer(info); isr_txeom()
2320 info->tx_active = false; isr_txeom()
2322 del_timer(&info->tx_timer); isr_txeom()
2324 if (info->params.mode != MGSL_MODE_ASYNC && info->drop_rts_on_tx_done) { isr_txeom()
2325 info->signals &= ~SerialSignal_RTS; isr_txeom()
2326 info->drop_rts_on_tx_done = false; isr_txeom()
2327 set_signals(info); isr_txeom()
2331 if (info->netcount) isr_txeom()
2332 hdlcdev_tx_done(info); isr_txeom()
2336 if (info->port.tty && (info->port.tty->stopped || info->port.tty->hw_stopped)) { isr_txeom()
2337 tx_stop(info); isr_txeom()
2340 info->pending_bh |= BH_TRANSMIT; isr_txeom()
2345 static void isr_gpio(struct slgt_info *info, unsigned int changed, unsigned int state) isr_gpio() argument
2350 for (w = info->gpio_wait_q, prev = NULL ; w != NULL ; w = w->next) { isr_gpio()
2357 info->gpio_wait_q = w->next; isr_gpio()
2370 struct slgt_info *info = dev_id; slgt_interrupt() local
2374 DBGISR(("slgt_interrupt irq=%d entry\n", info->irq_level)); slgt_interrupt()
2376 while((gsr = rd_reg32(info, GSR) & 0xffffff00)) { slgt_interrupt()
2377 DBGISR(("%s gsr=%08x\n", info->device_name, gsr)); slgt_interrupt()
2378 info->irq_occurred = true; slgt_interrupt()
2379 for(i=0; i < info->port_count ; i++) { slgt_interrupt()
2380 if (info->port_array[i] == NULL) slgt_interrupt()
2382 spin_lock(&info->port_array[i]->lock); slgt_interrupt()
2384 isr_serial(info->port_array[i]); slgt_interrupt()
2386 isr_rdma(info->port_array[i]); slgt_interrupt()
2388 isr_tdma(info->port_array[i]); slgt_interrupt()
2389 spin_unlock(&info->port_array[i]->lock); slgt_interrupt()
2393 if (info->gpio_present) { slgt_interrupt()
2396 spin_lock(&info->lock); slgt_interrupt()
2397 while ((changed = rd_reg32(info, IOSR)) != 0) { slgt_interrupt()
2398 DBGISR(("%s iosr=%08x\n", info->device_name, changed)); slgt_interrupt()
2400 state = rd_reg32(info, IOVR); slgt_interrupt()
2402 wr_reg32(info, IOSR, changed); slgt_interrupt()
2403 for (i=0 ; i < info->port_count ; i++) { slgt_interrupt()
2404 if (info->port_array[i] != NULL) slgt_interrupt()
2405 isr_gpio(info->port_array[i], changed, state); slgt_interrupt()
2408 spin_unlock(&info->lock); slgt_interrupt()
2411 for(i=0; i < info->port_count ; i++) { slgt_interrupt()
2412 struct slgt_info *port = info->port_array[i]; slgt_interrupt()
2426 DBGISR(("slgt_interrupt irq=%d exit\n", info->irq_level)); slgt_interrupt()
2430 static int startup(struct slgt_info *info) startup() argument
2432 DBGINFO(("%s startup\n", info->device_name)); startup()
2434 if (info->port.flags & ASYNC_INITIALIZED) startup()
2437 if (!info->tx_buf) { startup()
2438 info->tx_buf = kmalloc(info->max_frame_size, GFP_KERNEL); startup()
2439 if (!info->tx_buf) { startup()
2440 DBGERR(("%s can't allocate tx buffer\n", info->device_name)); startup()
2445 info->pending_bh = 0; startup()
2447 memset(&info->icount, 0, sizeof(info->icount)); startup()
2450 change_params(info); startup()
2452 if (info->port.tty) startup()
2453 clear_bit(TTY_IO_ERROR, &info->port.tty->flags); startup()
2455 info->port.flags |= ASYNC_INITIALIZED; startup()
2463 static void shutdown(struct slgt_info *info) shutdown() argument
2467 if (!(info->port.flags & ASYNC_INITIALIZED)) shutdown()
2470 DBGINFO(("%s shutdown\n", info->device_name)); shutdown()
2474 wake_up_interruptible(&info->status_event_wait_q); shutdown()
2475 wake_up_interruptible(&info->event_wait_q); shutdown()
2477 del_timer_sync(&info->tx_timer); shutdown()
2478 del_timer_sync(&info->rx_timer); shutdown()
2480 kfree(info->tx_buf); shutdown()
2481 info->tx_buf = NULL; shutdown()
2483 spin_lock_irqsave(&info->lock,flags); shutdown()
2485 tx_stop(info); shutdown()
2486 rx_stop(info); shutdown()
2488 slgt_irq_off(info, IRQ_ALL | IRQ_MASTER); shutdown()
2490 if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) { shutdown()
2491 info->signals &= ~(SerialSignal_RTS | SerialSignal_DTR); shutdown()
2492 set_signals(info); shutdown()
2495 flush_cond_wait(&info->gpio_wait_q); shutdown()
2497 spin_unlock_irqrestore(&info->lock,flags); shutdown()
2499 if (info->port.tty) shutdown()
2500 set_bit(TTY_IO_ERROR, &info->port.tty->flags); shutdown()
2502 info->port.flags &= ~ASYNC_INITIALIZED; shutdown()
2505 static void program_hw(struct slgt_info *info) program_hw() argument
2509 spin_lock_irqsave(&info->lock,flags); program_hw()
2511 rx_stop(info); program_hw()
2512 tx_stop(info); program_hw()
2514 if (info->params.mode != MGSL_MODE_ASYNC || program_hw()
2515 info->netcount) program_hw()
2516 sync_mode(info); program_hw()
2518 async_mode(info); program_hw()
2520 set_signals(info); program_hw()
2522 info->dcd_chkcount = 0; program_hw()
2523 info->cts_chkcount = 0; program_hw()
2524 info->ri_chkcount = 0; program_hw()
2525 info->dsr_chkcount = 0; program_hw()
2527 slgt_irq_on(info, IRQ_DCD | IRQ_CTS | IRQ_DSR | IRQ_RI); program_hw()
2528 get_signals(info); program_hw()
2530 if (info->netcount || program_hw()
2531 (info->port.tty && info->port.tty->termios.c_cflag & CREAD)) program_hw()
2532 rx_start(info); program_hw()
2534 spin_unlock_irqrestore(&info->lock,flags); program_hw()
2540 static void change_params(struct slgt_info *info) change_params() argument
2545 if (!info->port.tty) change_params()
2547 DBGINFO(("%s change_params\n", info->device_name)); change_params()
2549 cflag = info->port.tty->termios.c_cflag; change_params()
2554 info->signals |= SerialSignal_RTS | SerialSignal_DTR; change_params()
2556 info->signals &= ~(SerialSignal_RTS | SerialSignal_DTR); change_params()
2561 case CS5: info->params.data_bits = 5; break; change_params()
2562 case CS6: info->params.data_bits = 6; break; change_params()
2563 case CS7: info->params.data_bits = 7; break; change_params()
2564 case CS8: info->params.data_bits = 8; break; change_params()
2565 default: info->params.data_bits = 7; break; change_params()
2568 info->params.stop_bits = (cflag & CSTOPB) ? 2 : 1; change_params()
2571 info->params.parity = (cflag & PARODD) ? ASYNC_PARITY_ODD : ASYNC_PARITY_EVEN; change_params()
2573 info->params.parity = ASYNC_PARITY_NONE; change_params()
2578 bits_per_char = info->params.data_bits + change_params()
2579 info->params.stop_bits + 1; change_params()
2581 info->params.data_rate = tty_get_baud_rate(info->port.tty); change_params()
2583 if (info->params.data_rate) { change_params()
2584 info->timeout = (32*HZ*bits_per_char) / change_params()
2585 info->params.data_rate; change_params()
2587 info->timeout += HZ/50; /* Add .02 seconds of slop */ change_params()
2590 info->port.flags |= ASYNC_CTS_FLOW; change_params()
2592 info->port.flags &= ~ASYNC_CTS_FLOW; change_params()
2595 info->port.flags &= ~ASYNC_CHECK_CD; change_params()
2597 info->port.flags |= ASYNC_CHECK_CD; change_params()
2601 info->read_status_mask = IRQ_RXOVER; change_params()
2602 if (I_INPCK(info->port.tty)) change_params()
2603 info->read_status_mask |= MASK_PARITY | MASK_FRAMING; change_params()
2604 if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty)) change_params()
2605 info->read_status_mask |= MASK_BREAK; change_params()
2606 if (I_IGNPAR(info->port.tty)) change_params()
2607 info->ignore_status_mask |= MASK_PARITY | MASK_FRAMING; change_params()
2608 if (I_IGNBRK(info->port.tty)) { change_params()
2609 info->ignore_status_mask |= MASK_BREAK; change_params()
2613 if (I_IGNPAR(info->port.tty)) change_params()
2614 info->ignore_status_mask |= MASK_OVERRUN; change_params()
2617 program_hw(info); change_params()
2620 static int get_stats(struct slgt_info *info, struct mgsl_icount __user *user_icount) get_stats() argument
2622 DBGINFO(("%s get_stats\n", info->device_name)); get_stats()
2624 memset(&info->icount, 0, sizeof(info->icount)); get_stats()
2626 if (copy_to_user(user_icount, &info->icount, sizeof(struct mgsl_icount))) get_stats()
2632 static int get_params(struct slgt_info *info, MGSL_PARAMS __user *user_params) get_params() argument
2634 DBGINFO(("%s get_params\n", info->device_name)); get_params()
2635 if (copy_to_user(user_params, &info->params, sizeof(MGSL_PARAMS))) get_params()
2640 static int set_params(struct slgt_info *info, MGSL_PARAMS __user *new_params) set_params() argument
2645 DBGINFO(("%s set_params\n", info->device_name)); set_params()
2649 spin_lock_irqsave(&info->lock, flags); set_params()
2651 info->base_clock = tmp_params.clock_speed; set_params()
2653 memcpy(&info->params, &tmp_params, sizeof(MGSL_PARAMS)); set_params()
2654 spin_unlock_irqrestore(&info->lock, flags); set_params()
2656 program_hw(info); set_params()
2661 static int get_txidle(struct slgt_info *info, int __user *idle_mode) get_txidle() argument
2663 DBGINFO(("%s get_txidle=%d\n", info->device_name, info->idle_mode)); get_txidle()
2664 if (put_user(info->idle_mode, idle_mode)) get_txidle()
2669 static int set_txidle(struct slgt_info *info, int idle_mode) set_txidle() argument
2672 DBGINFO(("%s set_txidle(%d)\n", info->device_name, idle_mode)); set_txidle()
2673 spin_lock_irqsave(&info->lock,flags); set_txidle()
2674 info->idle_mode = idle_mode; set_txidle()
2675 if (info->params.mode != MGSL_MODE_ASYNC) set_txidle()
2676 tx_set_idle(info); set_txidle()
2677 spin_unlock_irqrestore(&info->lock,flags); set_txidle()
2681 static int tx_enable(struct slgt_info *info, int enable) tx_enable() argument
2684 DBGINFO(("%s tx_enable(%d)\n", info->device_name, enable)); tx_enable()
2685 spin_lock_irqsave(&info->lock,flags); tx_enable()
2687 if (!info->tx_enabled) tx_enable()
2688 tx_start(info); tx_enable()
2690 if (info->tx_enabled) tx_enable()
2691 tx_stop(info); tx_enable()
2693 spin_unlock_irqrestore(&info->lock,flags); tx_enable()
2700 static int tx_abort(struct slgt_info *info) tx_abort() argument
2703 DBGINFO(("%s tx_abort\n", info->device_name)); tx_abort()
2704 spin_lock_irqsave(&info->lock,flags); tx_abort()
2705 tdma_reset(info); tx_abort()
2706 spin_unlock_irqrestore(&info->lock,flags); tx_abort()
2710 static int rx_enable(struct slgt_info *info, int enable) rx_enable() argument
2714 DBGINFO(("%s rx_enable(%08x)\n", info->device_name, enable)); rx_enable()
2715 spin_lock_irqsave(&info->lock,flags); rx_enable()
2724 spin_unlock_irqrestore(&info->lock, flags); rx_enable()
2727 info->rbuf_fill_level = rbuf_fill_level; rx_enable()
2729 info->rx_pio = 1; /* PIO mode */ rx_enable()
2731 info->rx_pio = 0; /* DMA mode */ rx_enable()
2732 rx_stop(info); /* restart receiver to use new fill level */ rx_enable()
2743 if (!info->rx_enabled) rx_enable()
2744 rx_start(info); rx_enable()
2747 wr_reg16(info, RCR, rd_reg16(info, RCR) | BIT3); rx_enable()
2750 if (info->rx_enabled) rx_enable()
2751 rx_stop(info); rx_enable()
2753 spin_unlock_irqrestore(&info->lock,flags); rx_enable()
2760 static int wait_mgsl_event(struct slgt_info *info, int __user *mask_ptr) wait_mgsl_event() argument
2774 DBGINFO(("%s wait_mgsl_event(%d)\n", info->device_name, mask)); wait_mgsl_event()
2776 spin_lock_irqsave(&info->lock,flags); wait_mgsl_event()
2779 get_signals(info); wait_mgsl_event()
2780 s = info->signals; wait_mgsl_event()
2788 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
2793 cprev = info->icount; wait_mgsl_event()
2794 oldsigs = info->input_signal_events; wait_mgsl_event()
2798 unsigned short val = rd_reg16(info, SCR); wait_mgsl_event()
2800 wr_reg16(info, SCR, (unsigned short)(val | IRQ_RXIDLE)); wait_mgsl_event()
2804 add_wait_queue(&info->event_wait_q, &wait); wait_mgsl_event()
2806 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
2816 spin_lock_irqsave(&info->lock,flags); wait_mgsl_event()
2817 cnow = info->icount; wait_mgsl_event()
2818 newsigs = info->input_signal_events; wait_mgsl_event()
2820 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
2855 remove_wait_queue(&info->event_wait_q, &wait); wait_mgsl_event()
2860 spin_lock_irqsave(&info->lock,flags); wait_mgsl_event()
2861 if (!waitqueue_active(&info->event_wait_q)) { wait_mgsl_event()
2863 wr_reg16(info, SCR, wait_mgsl_event()
2864 (unsigned short)(rd_reg16(info, SCR) & ~IRQ_RXIDLE)); wait_mgsl_event()
2866 spin_unlock_irqrestore(&info->lock,flags); wait_mgsl_event()
2874 static int get_interface(struct slgt_info *info, int __user *if_mode) get_interface() argument
2876 DBGINFO(("%s get_interface=%x\n", info->device_name, info->if_mode)); get_interface()
2877 if (put_user(info->if_mode, if_mode)) get_interface()
2882 static int set_interface(struct slgt_info *info, int if_mode) set_interface() argument
2887 DBGINFO(("%s set_interface=%x)\n", info->device_name, if_mode)); set_interface()
2888 spin_lock_irqsave(&info->lock,flags); set_interface()
2889 info->if_mode = if_mode; set_interface()
2891 msc_set_vcr(info); set_interface()
2894 val = rd_reg16(info, TCR); set_interface()
2895 if (info->if_mode & MGSL_INTERFACE_RTS_EN) set_interface()
2899 wr_reg16(info, TCR, val); set_interface()
2901 spin_unlock_irqrestore(&info->lock,flags); set_interface()
2905 static int get_xsync(struct slgt_info *info, int __user *xsync) get_xsync() argument
2907 DBGINFO(("%s get_xsync=%x\n", info->device_name, info->xsync)); get_xsync()
2908 if (put_user(info->xsync, xsync)) get_xsync()
2919 static int set_xsync(struct slgt_info *info, int xsync) set_xsync() argument
2923 DBGINFO(("%s set_xsync=%x)\n", info->device_name, xsync)); set_xsync()
2924 spin_lock_irqsave(&info->lock, flags); set_xsync()
2925 info->xsync = xsync; set_xsync()
2926 wr_reg32(info, XSR, xsync); set_xsync()
2927 spin_unlock_irqrestore(&info->lock, flags); set_xsync()
2931 static int get_xctrl(struct slgt_info *info, int __user *xctrl) get_xctrl() argument
2933 DBGINFO(("%s get_xctrl=%x\n", info->device_name, info->xctrl)); get_xctrl()
2934 if (put_user(info->xctrl, xctrl)) get_xctrl()
2956 static int set_xctrl(struct slgt_info *info, int xctrl) set_xctrl() argument
2960 DBGINFO(("%s set_xctrl=%x)\n", info->device_name, xctrl)); set_xctrl()
2961 spin_lock_irqsave(&info->lock, flags); set_xctrl()
2962 info->xctrl = xctrl; set_xctrl()
2963 wr_reg32(info, XCR, xctrl); set_xctrl()
2964 spin_unlock_irqrestore(&info->lock, flags); set_xctrl()
2977 static int set_gpio(struct slgt_info *info, struct gpio_desc __user *user_gpio) set_gpio() argument
2983 if (!info->gpio_present) set_gpio()
2988 info->device_name, gpio.state, gpio.smask, set_gpio()
2991 spin_lock_irqsave(&info->port_array[0]->lock, flags); set_gpio()
2993 data = rd_reg32(info, IODR); set_gpio()
2996 wr_reg32(info, IODR, data); set_gpio()
2999 data = rd_reg32(info, IOVR); set_gpio()
3002 wr_reg32(info, IOVR, data); set_gpio()
3004 spin_unlock_irqrestore(&info->port_array[0]->lock, flags); set_gpio()
3012 static int get_gpio(struct slgt_info *info, struct gpio_desc __user *user_gpio) get_gpio() argument
3015 if (!info->gpio_present) get_gpio()
3017 gpio.state = rd_reg32(info, IOVR); get_gpio()
3019 gpio.dir = rd_reg32(info, IODR); get_gpio()
3024 info->device_name, gpio.state, gpio.dir)); get_gpio()
3086 static int wait_gpio(struct slgt_info *info, struct gpio_desc __user *user_gpio) wait_gpio() argument
3094 if (!info->gpio_present) wait_gpio()
3099 info->device_name, gpio.state, gpio.smask)); wait_gpio()
3101 if ((gpio.smask &= ~rd_reg32(info, IODR)) == 0) wait_gpio()
3105 spin_lock_irqsave(&info->port_array[0]->lock, flags); wait_gpio()
3107 wr_reg32(info, IOER, rd_reg32(info, IOER) | gpio.smask); wait_gpio()
3109 state = rd_reg32(info, IOVR); wait_gpio()
3116 add_cond_wait(&info->gpio_wait_q, &wait); wait_gpio()
3117 spin_unlock_irqrestore(&info->port_array[0]->lock, flags); wait_gpio()
3123 spin_lock_irqsave(&info->port_array[0]->lock, flags); wait_gpio()
3124 remove_cond_wait(&info->gpio_wait_q, &wait); wait_gpio()
3128 if (info->gpio_wait_q == NULL) wait_gpio()
3129 wr_reg32(info, IOER, 0); wait_gpio()
3130 spin_unlock_irqrestore(&info->port_array[0]->lock, flags); wait_gpio()
3137 static int modem_input_wait(struct slgt_info *info,int arg) modem_input_wait() argument
3145 spin_lock_irqsave(&info->lock,flags); modem_input_wait()
3146 cprev = info->icount; modem_input_wait()
3147 add_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
3149 spin_unlock_irqrestore(&info->lock,flags); modem_input_wait()
3159 spin_lock_irqsave(&info->lock,flags); modem_input_wait()
3160 cnow = info->icount; modem_input_wait()
3162 spin_unlock_irqrestore(&info->lock,flags); modem_input_wait()
3182 remove_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
3192 struct slgt_info *info = tty->driver_data; tiocmget() local
3196 spin_lock_irqsave(&info->lock,flags); tiocmget()
3197 get_signals(info); tiocmget()
3198 spin_unlock_irqrestore(&info->lock,flags); tiocmget()
3200 result = ((info->signals & SerialSignal_RTS) ? TIOCM_RTS:0) + tiocmget()
3201 ((info->signals & SerialSignal_DTR) ? TIOCM_DTR:0) + tiocmget()
3202 ((info->signals & SerialSignal_DCD) ? TIOCM_CAR:0) + tiocmget()
3203 ((info->signals & SerialSignal_RI) ? TIOCM_RNG:0) + tiocmget()
3204 ((info->signals & SerialSignal_DSR) ? TIOCM_DSR:0) + tiocmget()
3205 ((info->signals & SerialSignal_CTS) ? TIOCM_CTS:0); tiocmget()
3207 DBGINFO(("%s tiocmget value=%08X\n", info->device_name, result)); tiocmget()
3221 struct slgt_info *info = tty->driver_data; tiocmset() local
3224 DBGINFO(("%s tiocmset(%x,%x)\n", info->device_name, set, clear)); tiocmset()
3227 info->signals |= SerialSignal_RTS; tiocmset()
3229 info->signals |= SerialSignal_DTR; tiocmset()
3231 info->signals &= ~SerialSignal_RTS; tiocmset()
3233 info->signals &= ~SerialSignal_DTR; tiocmset()
3235 spin_lock_irqsave(&info->lock,flags); tiocmset()
3236 set_signals(info); tiocmset()
3237 spin_unlock_irqrestore(&info->lock,flags); tiocmset()
3244 struct slgt_info *info = container_of(port, struct slgt_info, port); carrier_raised() local
3246 spin_lock_irqsave(&info->lock,flags); carrier_raised()
3247 get_signals(info); carrier_raised()
3248 spin_unlock_irqrestore(&info->lock,flags); carrier_raised()
3249 return (info->signals & SerialSignal_DCD) ? 1 : 0; carrier_raised()
3255 struct slgt_info *info = container_of(port, struct slgt_info, port); dtr_rts() local
3257 spin_lock_irqsave(&info->lock,flags); dtr_rts()
3259 info->signals |= SerialSignal_RTS | SerialSignal_DTR; dtr_rts()
3261 info->signals &= ~(SerialSignal_RTS | SerialSignal_DTR); dtr_rts()
3262 set_signals(info); dtr_rts()
3263 spin_unlock_irqrestore(&info->lock,flags); dtr_rts()
3271 struct slgt_info *info) block_til_ready()
3278 struct tty_port *port = &info->port; block_til_ready()
3301 spin_lock_irqsave(&info->lock, flags); block_til_ready()
3303 spin_unlock_irqrestore(&info->lock, flags); block_til_ready()
3354 static int alloc_tmp_rbuf(struct slgt_info *info) alloc_tmp_rbuf() argument
3356 info->tmp_rbuf = kmalloc(info->max_frame_size + 5, GFP_KERNEL); alloc_tmp_rbuf()
3357 if (info->tmp_rbuf == NULL) alloc_tmp_rbuf()
3360 info->flag_buf = kzalloc(info->max_frame_size + 5, GFP_KERNEL); alloc_tmp_rbuf()
3361 if (!info->flag_buf) { alloc_tmp_rbuf()
3362 kfree(info->tmp_rbuf); alloc_tmp_rbuf()
3363 info->tmp_rbuf = NULL; alloc_tmp_rbuf()
3369 static void free_tmp_rbuf(struct slgt_info *info) free_tmp_rbuf() argument
3371 kfree(info->tmp_rbuf); free_tmp_rbuf()
3372 info->tmp_rbuf = NULL; free_tmp_rbuf()
3373 kfree(info->flag_buf); free_tmp_rbuf()
3374 info->flag_buf = NULL; free_tmp_rbuf()
3380 static int alloc_desc(struct slgt_info *info) alloc_desc() argument
3386 info->bufs = pci_zalloc_consistent(info->pdev, DESC_LIST_SIZE, alloc_desc()
3387 &info->bufs_dma_addr); alloc_desc()
3388 if (info->bufs == NULL) alloc_desc()
3391 info->rbufs = (struct slgt_desc*)info->bufs; alloc_desc()
3392 info->tbufs = ((struct slgt_desc*)info->bufs) + info->rbuf_count; alloc_desc()
3394 pbufs = (unsigned int)info->bufs_dma_addr; alloc_desc()
3400 for (i=0; i < info->rbuf_count; i++) { alloc_desc()
3402 info->rbufs[i].pdesc = pbufs + (i * sizeof(struct slgt_desc)); alloc_desc()
3405 if (i == info->rbuf_count - 1) alloc_desc()
3406 info->rbufs[i].next = cpu_to_le32(pbufs); alloc_desc()
3408 info->rbufs[i].next = cpu_to_le32(pbufs + ((i+1) * sizeof(struct slgt_desc))); alloc_desc()
3409 set_desc_count(info->rbufs[i], DMABUFSIZE); alloc_desc()
3412 for (i=0; i < info->tbuf_count; i++) { alloc_desc()
3414 info->tbufs[i].pdesc = pbufs + ((info->rbuf_count + i) * sizeof(struct slgt_desc)); alloc_desc()
3417 if (i == info->tbuf_count - 1) alloc_desc()
3418 info->tbufs[i].next = cpu_to_le32(pbufs + info->rbuf_count * sizeof(struct slgt_desc)); alloc_desc()
3420 info->tbufs[i].next = cpu_to_le32(pbufs + ((info->rbuf_count + i + 1) * sizeof(struct slgt_desc))); alloc_desc()
3426 static void free_desc(struct slgt_info *info) free_desc() argument
3428 if (info->bufs != NULL) { free_desc()
3429 pci_free_consistent(info->pdev, DESC_LIST_SIZE, info->bufs, info->bufs_dma_addr); free_desc()
3430 info->bufs = NULL; free_desc()
3431 info->rbufs = NULL; free_desc()
3432 info->tbufs = NULL; free_desc()
3436 static int alloc_bufs(struct slgt_info *info, struct slgt_desc *bufs, int count) alloc_bufs() argument
3440 if ((bufs[i].buf = pci_alloc_consistent(info->pdev, DMABUFSIZE, &bufs[i].buf_dma_addr)) == NULL) alloc_bufs()
3447 static void free_bufs(struct slgt_info *info, struct slgt_desc *bufs, int count) free_bufs() argument
3453 pci_free_consistent(info->pdev, DMABUFSIZE, bufs[i].buf, bufs[i].buf_dma_addr); free_bufs()
3458 static int alloc_dma_bufs(struct slgt_info *info) alloc_dma_bufs() argument
3460 info->rbuf_count = 32; alloc_dma_bufs()
3461 info->tbuf_count = 32; alloc_dma_bufs()
3463 if (alloc_desc(info) < 0 || alloc_dma_bufs()
3464 alloc_bufs(info, info->rbufs, info->rbuf_count) < 0 || alloc_dma_bufs()
3465 alloc_bufs(info, info->tbufs, info->tbuf_count) < 0 || alloc_dma_bufs()
3466 alloc_tmp_rbuf(info) < 0) { alloc_dma_bufs()
3467 DBGERR(("%s DMA buffer alloc fail\n", info->device_name)); alloc_dma_bufs()
3470 reset_rbufs(info); alloc_dma_bufs()
3474 static void free_dma_bufs(struct slgt_info *info) free_dma_bufs() argument
3476 if (info->bufs) { free_dma_bufs()
3477 free_bufs(info, info->rbufs, info->rbuf_count); free_dma_bufs()
3478 free_bufs(info, info->tbufs, info->tbuf_count); free_dma_bufs()
3479 free_desc(info); free_dma_bufs()
3481 free_tmp_rbuf(info); free_dma_bufs()
3484 static int claim_resources(struct slgt_info *info) claim_resources() argument
3486 if (request_mem_region(info->phys_reg_addr, SLGT_REG_SIZE, "synclink_gt") == NULL) { claim_resources()
3488 info->device_name, info->phys_reg_addr)); claim_resources()
3489 info->init_error = DiagStatus_AddressConflict; claim_resources()
3493 info->reg_addr_requested = true; claim_resources()
3495 info->reg_addr = ioremap_nocache(info->phys_reg_addr, SLGT_REG_SIZE); claim_resources()
3496 if (!info->reg_addr) { claim_resources()
3498 info->device_name, info->phys_reg_addr)); claim_resources()
3499 info->init_error = DiagStatus_CantAssignPciResources; claim_resources()
3505 release_resources(info); claim_resources()
3509 static void release_resources(struct slgt_info *info) release_resources() argument
3511 if (info->irq_requested) { release_resources()
3512 free_irq(info->irq_level, info); release_resources()
3513 info->irq_requested = false; release_resources()
3516 if (info->reg_addr_requested) { release_resources()
3517 release_mem_region(info->phys_reg_addr, SLGT_REG_SIZE); release_resources()
3518 info->reg_addr_requested = false; release_resources()
3521 if (info->reg_addr) { release_resources()
3522 iounmap(info->reg_addr); release_resources()
3523 info->reg_addr = NULL; release_resources()
3530 static void add_device(struct slgt_info *info) add_device() argument
3534 info->next_device = NULL; add_device()
3535 info->line = slgt_device_count; add_device()
3536 sprintf(info->device_name, "%s%d", tty_dev_prefix, info->line); add_device()
3538 if (info->line < MAX_DEVICES) { add_device()
3539 if (maxframe[info->line]) add_device()
3540 info->max_frame_size = maxframe[info->line]; add_device()
3546 slgt_device_list = info; add_device()
3551 current_dev->next_device = info; add_device()
3554 if (info->max_frame_size < 4096) add_device()
3555 info->max_frame_size = 4096; add_device()
3556 else if (info->max_frame_size > 65535) add_device()
3557 info->max_frame_size = 65535; add_device()
3559 switch(info->pdev->device) { add_device()
3571 info->params.mode = MGSL_MODE_ASYNC; add_device()
3577 devstr, info->device_name, info->phys_reg_addr, add_device()
3578 info->irq_level, info->max_frame_size); add_device()
3581 hdlcdev_init(info); add_device()
3595 struct slgt_info *info; alloc_dev() local
3597 info = kzalloc(sizeof(struct slgt_info), GFP_KERNEL); alloc_dev()
3599 if (!info) { alloc_dev()
3603 tty_port_init(&info->port); alloc_dev()
3604 info->port.ops = &slgt_port_ops; alloc_dev()
3605 info->magic = MGSL_MAGIC; alloc_dev()
3606 INIT_WORK(&info->task, bh_handler); alloc_dev()
3607 info->max_frame_size = 4096; alloc_dev()
3608 info->base_clock = 14745600; alloc_dev()
3609 info->rbuf_fill_level = DMABUFSIZE; alloc_dev()
3610 info->port.close_delay = 5*HZ/10; alloc_dev()
3611 info->port.closing_wait = 30*HZ; alloc_dev()
3612 init_waitqueue_head(&info->status_event_wait_q); alloc_dev()
3613 init_waitqueue_head(&info->event_wait_q); alloc_dev()
3614 spin_lock_init(&info->netlock); alloc_dev()
3615 memcpy(&info->params,&default_params,sizeof(MGSL_PARAMS)); alloc_dev()
3616 info->idle_mode = HDLC_TXIDLE_FLAGS; alloc_dev()
3617 info->adapter_num = adapter_num; alloc_dev()
3618 info->port_num = port_num; alloc_dev()
3620 setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info); alloc_dev()
3621 setup_timer(&info->rx_timer, rx_timeout, (unsigned long)info); alloc_dev()
3623 /* Copy configuration info to device instance data */ alloc_dev()
3624 info->pdev = pdev; alloc_dev()
3625 info->irq_level = pdev->irq; alloc_dev()
3626 info->phys_reg_addr = pci_resource_start(pdev,0); alloc_dev()
3628 info->bus_type = MGSL_BUS_TYPE_PCI; alloc_dev()
3629 info->irq_flags = IRQF_SHARED; alloc_dev()
3631 info->init_error = -1; /* assume error, set to 0 on successful init */ alloc_dev()
3634 return info; alloc_dev()
3699 struct slgt_info *info = port_array[i]; device_init() local
3700 tty_port_register_device(&info->port, serial_driver, info->line, device_init()
3701 &info->pdev->dev); device_init()
3750 struct slgt_info *info; slgt_cleanup() local
3756 for (info=slgt_device_list ; info != NULL ; info=info->next_device) slgt_cleanup()
3757 tty_unregister_device(serial_driver, info->line); slgt_cleanup()
3764 info = slgt_device_list; slgt_cleanup()
3765 while(info) { slgt_cleanup()
3766 reset_port(info); slgt_cleanup()
3767 info = info->next_device; slgt_cleanup()
3771 info = slgt_device_list; slgt_cleanup()
3772 while(info) { slgt_cleanup()
3774 hdlcdev_exit(info); slgt_cleanup()
3776 free_dma_bufs(info); slgt_cleanup()
3777 free_tmp_rbuf(info); slgt_cleanup()
3778 if (info->port_num == 0) slgt_cleanup()
3779 release_resources(info); slgt_cleanup()
3780 tmp = info; slgt_cleanup()
3781 info = info->next_device; slgt_cleanup()
3860 unsigned long reg_addr = ((unsigned long)info->reg_addr) + addr; \
3862 reg_addr += (info->port_num) * 32; \
3864 reg_addr += (info->port_num) * 16;
3866 static __u8 rd_reg8(struct slgt_info *info, unsigned int addr) rd_reg8() argument
3872 static void wr_reg8(struct slgt_info *info, unsigned int addr, __u8 value) wr_reg8() argument
3878 static __u16 rd_reg16(struct slgt_info *info, unsigned int addr) rd_reg16() argument
3884 static void wr_reg16(struct slgt_info *info, unsigned int addr, __u16 value) wr_reg16() argument
3890 static __u32 rd_reg32(struct slgt_info *info, unsigned int addr) rd_reg32() argument
3896 static void wr_reg32(struct slgt_info *info, unsigned int addr, __u32 value) wr_reg32() argument
3902 static void rdma_reset(struct slgt_info *info) rdma_reset() argument
3907 wr_reg32(info, RDCSR, BIT1); rdma_reset()
3911 if (!(rd_reg32(info, RDCSR) & BIT0)) rdma_reset()
3915 static void tdma_reset(struct slgt_info *info) tdma_reset() argument
3920 wr_reg32(info, TDCSR, BIT1); tdma_reset()
3924 if (!(rd_reg32(info, TDCSR) & BIT0)) tdma_reset()
3933 static void enable_loopback(struct slgt_info *info) enable_loopback() argument
3936 wr_reg16(info, SCR, (unsigned short)(rd_reg16(info, SCR) | BIT2)); enable_loopback()
3938 if (info->params.mode != MGSL_MODE_ASYNC) { enable_loopback()
3947 wr_reg8(info, CCR, 0x49); enable_loopback()
3950 if (info->params.clock_speed) enable_loopback()
3951 set_rate(info, info->params.clock_speed); enable_loopback()
3953 set_rate(info, 3686400); enable_loopback()
3960 static void set_rate(struct slgt_info *info, u32 rate) set_rate() argument
3963 unsigned int osc = info->base_clock; set_rate()
3975 wr_reg16(info, BDR, (unsigned short)div); set_rate()
3979 static void rx_stop(struct slgt_info *info) rx_stop() argument
3984 val = rd_reg16(info, RCR) & ~BIT1; /* clear enable bit */ rx_stop()
3985 wr_reg16(info, RCR, (unsigned short)(val | BIT2)); /* set reset bit */ rx_stop()
3986 wr_reg16(info, RCR, val); /* clear reset bit */ rx_stop()
3988 slgt_irq_off(info, IRQ_RXOVER + IRQ_RXDATA + IRQ_RXIDLE); rx_stop()
3991 wr_reg16(info, SSR, IRQ_RXIDLE + IRQ_RXOVER); rx_stop()
3993 rdma_reset(info); rx_stop()
3995 info->rx_enabled = false; rx_stop()
3996 info->rx_restart = false; rx_stop()
3999 static void rx_start(struct slgt_info *info) rx_start() argument
4003 slgt_irq_off(info, IRQ_RXOVER + IRQ_RXDATA); rx_start()
4006 wr_reg16(info, SSR, IRQ_RXOVER); rx_start()
4009 val = rd_reg16(info, RCR) & ~BIT1; /* clear enable bit */ rx_start()
4010 wr_reg16(info, RCR, (unsigned short)(val | BIT2)); /* set reset bit */ rx_start()
4011 wr_reg16(info, RCR, val); /* clear reset bit */ rx_start()
4013 rdma_reset(info); rx_start()
4014 reset_rbufs(info); rx_start()
4016 if (info->rx_pio) { rx_start()
4018 wr_reg16(info, SCR, (unsigned short)(rd_reg16(info, SCR) & ~BIT14)); rx_start()
4019 slgt_irq_on(info, IRQ_RXDATA); rx_start()
4020 if (info->params.mode == MGSL_MODE_ASYNC) { rx_start()
4022 wr_reg32(info, RDCSR, BIT6); rx_start()
4026 wr_reg16(info, SCR, (unsigned short)(rd_reg16(info, SCR) | BIT14)); rx_start()
4028 wr_reg32(info, RDDAR, info->rbufs[0].pdesc); rx_start()
4030 if (info->params.mode != MGSL_MODE_ASYNC) { rx_start()
4032 wr_reg32(info, RDCSR, (BIT2 + BIT0)); rx_start()
4035 wr_reg32(info, RDCSR, (BIT6 + BIT2 + BIT0)); rx_start()
4039 slgt_irq_on(info, IRQ_RXOVER); rx_start()
4042 wr_reg16(info, RCR, (unsigned short)(rd_reg16(info, RCR) | BIT1)); rx_start()
4044 info->rx_restart = false; rx_start()
4045 info->rx_enabled = true; rx_start()
4048 static void tx_start(struct slgt_info *info) tx_start() argument
4050 if (!info->tx_enabled) { tx_start()
4051 wr_reg16(info, TCR, tx_start()
4052 (unsigned short)((rd_reg16(info, TCR) | BIT1) & ~BIT2)); tx_start()
4053 info->tx_enabled = true; tx_start()
4056 if (desc_count(info->tbufs[info->tbuf_start])) { tx_start()
4057 info->drop_rts_on_tx_done = false; tx_start()
4059 if (info->params.mode != MGSL_MODE_ASYNC) { tx_start()
4060 if (info->params.flags & HDLC_FLAG_AUTO_RTS) { tx_start()
4061 get_signals(info); tx_start()
4062 if (!(info->signals & SerialSignal_RTS)) { tx_start()
4063 info->signals |= SerialSignal_RTS; tx_start()
4064 set_signals(info); tx_start()
4065 info->drop_rts_on_tx_done = true; tx_start()
4069 slgt_irq_off(info, IRQ_TXDATA); tx_start()
4070 slgt_irq_on(info, IRQ_TXUNDER + IRQ_TXIDLE); tx_start()
4072 wr_reg16(info, SSR, (unsigned short)(IRQ_TXIDLE + IRQ_TXUNDER)); tx_start()
4074 slgt_irq_off(info, IRQ_TXDATA); tx_start()
4075 slgt_irq_on(info, IRQ_TXIDLE); tx_start()
4077 wr_reg16(info, SSR, IRQ_TXIDLE); tx_start()
4080 wr_reg32(info, TDDAR, info->tbufs[info->tbuf_start].pdesc); tx_start()
4081 wr_reg32(info, TDCSR, BIT2 + BIT0); tx_start()
4082 info->tx_active = true; tx_start()
4086 static void tx_stop(struct slgt_info *info) tx_stop() argument
4090 del_timer(&info->tx_timer); tx_stop()
4092 tdma_reset(info); tx_stop()
4095 val = rd_reg16(info, TCR) & ~BIT1; /* clear enable bit */ tx_stop()
4096 wr_reg16(info, TCR, (unsigned short)(val | BIT2)); /* set reset bit */ tx_stop()
4098 slgt_irq_off(info, IRQ_TXDATA + IRQ_TXIDLE + IRQ_TXUNDER); tx_stop()
4101 wr_reg16(info, SSR, (unsigned short)(IRQ_TXIDLE + IRQ_TXUNDER)); tx_stop()
4103 reset_tbufs(info); tx_stop()
4105 info->tx_enabled = false; tx_stop()
4106 info->tx_active = false; tx_stop()
4109 static void reset_port(struct slgt_info *info) reset_port() argument
4111 if (!info->reg_addr) reset_port()
4114 tx_stop(info); reset_port()
4115 rx_stop(info); reset_port()
4117 info->signals &= ~(SerialSignal_RTS | SerialSignal_DTR); reset_port()
4118 set_signals(info); reset_port()
4120 slgt_irq_off(info, IRQ_ALL | IRQ_MASTER); reset_port()
4123 static void reset_adapter(struct slgt_info *info) reset_adapter() argument
4126 for (i=0; i < info->port_count; ++i) { reset_adapter()
4127 if (info->port_array[i]) reset_adapter()
4128 reset_port(info->port_array[i]); reset_adapter()
4132 static void async_mode(struct slgt_info *info) async_mode() argument
4136 slgt_irq_off(info, IRQ_ALL | IRQ_MASTER); async_mode()
4137 tx_stop(info); async_mode()
4138 rx_stop(info); async_mode()
4160 if (info->if_mode & MGSL_INTERFACE_RTS_EN) async_mode()
4163 if (info->params.parity != ASYNC_PARITY_NONE) { async_mode()
4165 if (info->params.parity == ASYNC_PARITY_ODD) async_mode()
4169 switch (info->params.data_bits) async_mode()
4176 if (info->params.stop_bits != 1) async_mode()
4179 if (info->params.flags & HDLC_FLAG_AUTO_CTS) async_mode()
4182 wr_reg16(info, TCR, val); async_mode()
4203 if (info->params.parity != ASYNC_PARITY_NONE) { async_mode()
4205 if (info->params.parity == ASYNC_PARITY_ODD) async_mode()
4209 switch (info->params.data_bits) async_mode()
4216 if (info->params.flags & HDLC_FLAG_AUTO_DCD) async_mode()
4219 wr_reg16(info, RCR, val); async_mode()
4230 wr_reg8(info, CCR, 0x69); async_mode()
4232 msc_set_vcr(info); async_mode()
4255 if ((rd_reg32(info, JCR) & BIT8) && info->params.data_rate && async_mode()
4256 ((info->base_clock < (info->params.data_rate * 16)) || async_mode()
4257 (info->base_clock % (info->params.data_rate * 16)))) { async_mode()
4260 set_rate(info, info->params.data_rate * 8); async_mode()
4263 set_rate(info, info->params.data_rate * 16); async_mode()
4265 wr_reg16(info, SCR, val); async_mode()
4267 slgt_irq_on(info, IRQ_RXBREAK | IRQ_RXOVER); async_mode()
4269 if (info->params.loopback) async_mode()
4270 enable_loopback(info); async_mode()
4273 static void sync_mode(struct slgt_info *info) sync_mode() argument
4277 slgt_irq_off(info, IRQ_ALL | IRQ_MASTER); sync_mode()
4278 tx_stop(info); sync_mode()
4279 rx_stop(info); sync_mode()
4303 switch(info->params.mode) { sync_mode()
4311 if (info->if_mode & MGSL_INTERFACE_RTS_EN) sync_mode()
4314 switch(info->params.encoding) sync_mode()
4325 switch (info->params.crc_type & HDLC_CRC_MASK) sync_mode()
4331 if (info->params.preamble != HDLC_PREAMBLE_PATTERN_NONE) sync_mode()
4334 switch (info->params.preamble_length) sync_mode()
4341 if (info->params.flags & HDLC_FLAG_AUTO_CTS) sync_mode()
4344 wr_reg16(info, TCR, val); sync_mode()
4348 switch (info->params.preamble) sync_mode()
4357 wr_reg8(info, TPR, (unsigned char)val); sync_mode()
4378 switch(info->params.mode) { sync_mode()
4387 switch(info->params.encoding) sync_mode()
4398 switch (info->params.crc_type & HDLC_CRC_MASK) sync_mode()
4404 if (info->params.flags & HDLC_FLAG_AUTO_DCD) sync_mode()
4407 wr_reg16(info, RCR, val); sync_mode()
4418 if (info->params.flags & HDLC_FLAG_TXC_BRG) sync_mode()
4423 if (info->params.flags & HDLC_FLAG_RXC_DPLL) sync_mode()
4428 else if (info->params.flags & HDLC_FLAG_TXC_DPLL) sync_mode()
4430 else if (info->params.flags & HDLC_FLAG_TXC_RXCPIN) sync_mode()
4433 if (info->params.flags & HDLC_FLAG_RXC_BRG) sync_mode()
4435 else if (info->params.flags & HDLC_FLAG_RXC_DPLL) sync_mode()
4437 else if (info->params.flags & HDLC_FLAG_RXC_TXCPIN) sync_mode()
4440 if (info->params.clock_speed) sync_mode()
4443 wr_reg8(info, CCR, (unsigned char)val); sync_mode()
4445 if (info->params.flags & (HDLC_FLAG_TXC_DPLL + HDLC_FLAG_RXC_DPLL)) sync_mode()
4448 switch(info->params.encoding) sync_mode()
4458 wr_reg16(info, RCR, (unsigned short)(rd_reg16(info, RCR) | val)); sync_mode()
4461 set_rate(info, info->params.clock_speed * 16); sync_mode()
4464 set_rate(info, info->params.clock_speed); sync_mode()
4466 tx_set_idle(info); sync_mode()
4468 msc_set_vcr(info); sync_mode()
4489 wr_reg16(info, SCR, BIT15 + BIT14 + BIT0); sync_mode()
4491 if (info->params.loopback) sync_mode()
4492 enable_loopback(info); sync_mode()
4498 static void tx_set_idle(struct slgt_info *info) tx_set_idle() argument
4506 tcr = rd_reg16(info, TCR); tx_set_idle()
4507 if (info->idle_mode & HDLC_TXIDLE_CUSTOM_16) { tx_set_idle()
4511 wr_reg8(info, TPR, (unsigned char)((info->idle_mode >> 8) & 0xff)); tx_set_idle()
4516 wr_reg16(info, TCR, tcr); tx_set_idle()
4518 if (info->idle_mode & (HDLC_TXIDLE_CUSTOM_8 | HDLC_TXIDLE_CUSTOM_16)) { tx_set_idle()
4520 val = (unsigned char)(info->idle_mode & 0xff); tx_set_idle()
4523 switch(info->idle_mode) tx_set_idle()
4534 wr_reg8(info, TIR, val); tx_set_idle()
4540 static void get_signals(struct slgt_info *info) get_signals() argument
4542 unsigned short status = rd_reg16(info, SSR); get_signals()
4545 info->signals &= SerialSignal_RTS | SerialSignal_DTR; get_signals()
4548 info->signals |= SerialSignal_DSR; get_signals()
4550 info->signals |= SerialSignal_CTS; get_signals()
4552 info->signals |= SerialSignal_DCD; get_signals()
4554 info->signals |= SerialSignal_RI; get_signals()
4560 static void msc_set_vcr(struct slgt_info *info) msc_set_vcr() argument
4573 switch(info->if_mode & MGSL_INTERFACE_MASK) msc_set_vcr()
4586 if (info->if_mode & MGSL_INTERFACE_MSB_FIRST) msc_set_vcr()
4588 if (info->signals & SerialSignal_DTR) msc_set_vcr()
4590 if (info->signals & SerialSignal_RTS) msc_set_vcr()
4592 if (info->if_mode & MGSL_INTERFACE_LL) msc_set_vcr()
4594 if (info->if_mode & MGSL_INTERFACE_RL) msc_set_vcr()
4596 wr_reg8(info, VCR, val); msc_set_vcr()
4602 static void set_signals(struct slgt_info *info) set_signals() argument
4604 unsigned char val = rd_reg8(info, VCR); set_signals()
4605 if (info->signals & SerialSignal_DTR) set_signals()
4609 if (info->signals & SerialSignal_RTS) set_signals()
4613 wr_reg8(info, VCR, val); set_signals()
4619 static void free_rbufs(struct slgt_info *info, unsigned int i, unsigned int last) free_rbufs() argument
4625 info->rbufs[i].status = 0; free_rbufs()
4626 set_desc_count(info->rbufs[i], info->rbuf_fill_level); free_rbufs()
4629 if (++i == info->rbuf_count) free_rbufs()
4632 info->rbuf_current = i; free_rbufs()
4638 static void reset_rbufs(struct slgt_info *info) reset_rbufs() argument
4640 free_rbufs(info, 0, info->rbuf_count - 1); reset_rbufs()
4641 info->rbuf_fill_index = 0; reset_rbufs()
4642 info->rbuf_fill_count = 0; reset_rbufs()
4650 static bool rx_get_frame(struct slgt_info *info) rx_get_frame() argument
4656 struct tty_struct *tty = info->port.tty; rx_get_frame()
4660 switch (info->params.crc_type & HDLC_CRC_MASK) { rx_get_frame()
4669 start = end = info->rbuf_current; rx_get_frame()
4672 if (!desc_complete(info->rbufs[end])) rx_get_frame()
4675 if (framesize == 0 && info->params.addr_filter != 0xff) rx_get_frame()
4676 addr_field = info->rbufs[end].buf[0]; rx_get_frame()
4678 framesize += desc_count(info->rbufs[end]); rx_get_frame()
4680 if (desc_eof(info->rbufs[end])) rx_get_frame()
4683 if (++end == info->rbuf_count) rx_get_frame()
4686 if (end == info->rbuf_current) { rx_get_frame()
4687 if (info->rx_enabled){ rx_get_frame()
4688 spin_lock_irqsave(&info->lock,flags); rx_get_frame()
4689 rx_start(info); rx_get_frame()
4690 spin_unlock_irqrestore(&info->lock,flags); rx_get_frame()
4705 status = desc_status(info->rbufs[end]); rx_get_frame()
4708 if ((info->params.crc_type & HDLC_CRC_MASK) == HDLC_CRC_NONE) rx_get_frame()
4712 (addr_field != 0xff && addr_field != info->params.addr_filter)) { rx_get_frame()
4713 free_rbufs(info, start, end); rx_get_frame()
4718 info->icount.rxshort++; rx_get_frame()
4721 info->icount.rxcrc++; rx_get_frame()
4722 if (!(info->params.crc_type & HDLC_CRC_RETURN_EX)) rx_get_frame()
4728 info->netdev->stats.rx_errors++; rx_get_frame()
4729 info->netdev->stats.rx_frame_errors++; rx_get_frame()
4734 info->device_name, status, framesize)); rx_get_frame()
4735 DBGDATA(info, info->rbufs[start].buf, min_t(int, framesize, info->rbuf_fill_level), "rx"); rx_get_frame()
4738 if (!(info->params.crc_type & HDLC_CRC_RETURN_EX)) { rx_get_frame()
4743 if (framesize > info->max_frame_size + crc_size) rx_get_frame()
4744 info->icount.rxlong++; rx_get_frame()
4749 unsigned char *p = info->tmp_rbuf; rx_get_frame()
4750 info->tmp_rbuf_count = framesize; rx_get_frame()
4752 info->icount.rxok++; rx_get_frame()
4755 int partial_count = min_t(int, copy_count, info->rbuf_fill_level); rx_get_frame()
4756 memcpy(p, info->rbufs[i].buf, partial_count); rx_get_frame()
4759 if (++i == info->rbuf_count) rx_get_frame()
4763 if (info->params.crc_type & HDLC_CRC_RETURN_EX) { rx_get_frame()
4769 if (info->netcount) rx_get_frame()
4770 hdlcdev_rx(info,info->tmp_rbuf, framesize); rx_get_frame()
4773 ldisc_receive_buf(tty, info->tmp_rbuf, info->flag_buf, framesize); rx_get_frame()
4776 free_rbufs(info, start, end); rx_get_frame()
4787 static bool rx_get_buf(struct slgt_info *info) rx_get_buf() argument
4789 unsigned int i = info->rbuf_current; rx_get_buf()
4792 if (!desc_complete(info->rbufs[i])) rx_get_buf()
4794 count = desc_count(info->rbufs[i]); rx_get_buf()
4795 switch(info->params.mode) { rx_get_buf()
4800 if (desc_residue(info->rbufs[i])) rx_get_buf()
4804 DBGDATA(info, info->rbufs[i].buf, count, "rx"); rx_get_buf()
4807 ldisc_receive_buf(info->port.tty, info->rbufs[i].buf, rx_get_buf()
4808 info->flag_buf, count); rx_get_buf()
4809 free_rbufs(info, i, i); rx_get_buf()
4813 static void reset_tbufs(struct slgt_info *info) reset_tbufs() argument
4816 info->tbuf_current = 0; reset_tbufs()
4817 for (i=0 ; i < info->tbuf_count ; i++) { reset_tbufs()
4818 info->tbufs[i].status = 0; reset_tbufs()
4819 info->tbufs[i].count = 0; reset_tbufs()
4826 static unsigned int free_tbuf_count(struct slgt_info *info) free_tbuf_count() argument
4829 unsigned int i = info->tbuf_current; free_tbuf_count()
4833 if (desc_count(info->tbufs[i])) free_tbuf_count()
4836 if (++i == info->tbuf_count) free_tbuf_count()
4838 } while (i != info->tbuf_current); free_tbuf_count()
4841 if (count && (rd_reg32(info, TDCSR) & BIT0)) free_tbuf_count()
4851 static unsigned int tbuf_bytes(struct slgt_info *info) tbuf_bytes() argument
4854 unsigned int i = info->tbuf_current; tbuf_bytes()
4871 count = desc_count(info->tbufs[i]); tbuf_bytes()
4875 active_buf_count = info->tbufs[i].buf_count; tbuf_bytes()
4876 if (++i == info->tbuf_count) tbuf_bytes()
4878 } while (i != info->tbuf_current); tbuf_bytes()
4881 reg_value = rd_reg32(info, TDCSR); tbuf_bytes()
4891 if (info->tx_active) tbuf_bytes()
4901 static bool tx_load(struct slgt_info *info, const char *buf, unsigned int size) tx_load() argument
4908 if (DIV_ROUND_UP(size, DMABUFSIZE) > free_tbuf_count(info)) tx_load()
4911 DBGDATA(info, buf, size, "tx"); tx_load()
4924 info->tbuf_start = i = info->tbuf_current; tx_load()
4927 d = &info->tbufs[i]; tx_load()
4939 if ((!size && info->params.mode == MGSL_MODE_HDLC) || tx_load()
4940 info->params.mode == MGSL_MODE_RAW) tx_load()
4946 if (i != info->tbuf_start) tx_load()
4950 if (++i == info->tbuf_count) tx_load()
4954 info->tbuf_current = i; tx_load()
4957 d = &info->tbufs[info->tbuf_start]; tx_load()
4961 if (!info->tx_active) tx_load()
4962 tx_start(info); tx_load()
4963 update_tx_timer(info); tx_load()
4968 static int register_test(struct slgt_info *info) register_test() argument
4977 wr_reg16(info, TIR, patterns[i]); register_test()
4978 wr_reg16(info, BDR, patterns[(i+1)%count]); register_test()
4979 if ((rd_reg16(info, TIR) != patterns[i]) || register_test()
4980 (rd_reg16(info, BDR) != patterns[(i+1)%count])) { register_test()
4985 info->gpio_present = (rd_reg32(info, JCR) & BIT5) ? 1 : 0; register_test()
4986 info->init_error = rc ? 0 : DiagStatus_AddressFailure; register_test()
4990 static int irq_test(struct slgt_info *info) irq_test() argument
4994 struct tty_struct *oldtty = info->port.tty; irq_test()
4995 u32 speed = info->params.data_rate; irq_test()
4997 info->params.data_rate = 921600; irq_test()
4998 info->port.tty = NULL; irq_test()
5000 spin_lock_irqsave(&info->lock, flags); irq_test()
5001 async_mode(info); irq_test()
5002 slgt_irq_on(info, IRQ_TXIDLE); irq_test()
5005 wr_reg16(info, TCR, irq_test()
5006 (unsigned short)(rd_reg16(info, TCR) | BIT1)); irq_test()
5009 wr_reg16(info, TDR, 0); irq_test()
5012 info->init_error = DiagStatus_IrqFailure; irq_test()
5013 info->irq_occurred = false; irq_test()
5015 spin_unlock_irqrestore(&info->lock, flags); irq_test()
5018 while(timeout-- && !info->irq_occurred) irq_test()
5021 spin_lock_irqsave(&info->lock,flags); irq_test()
5022 reset_port(info); irq_test()
5023 spin_unlock_irqrestore(&info->lock,flags); irq_test()
5025 info->params.data_rate = speed; irq_test()
5026 info->port.tty = oldtty; irq_test()
5028 info->init_error = info->irq_occurred ? 0 : DiagStatus_IrqFailure; irq_test()
5029 return info->irq_occurred ? 0 : -ENODEV; irq_test()
5032 static int loopback_test_rx(struct slgt_info *info) loopback_test_rx() argument
5037 if (desc_complete(info->rbufs[0])) { loopback_test_rx()
5038 count = desc_count(info->rbufs[0]); loopback_test_rx()
5039 src = info->rbufs[0].buf; loopback_test_rx()
5040 dest = info->tmp_rbuf; loopback_test_rx()
5047 info->tmp_rbuf_count++; loopback_test_rx()
5050 DBGDATA(info, info->tmp_rbuf, info->tmp_rbuf_count, "rx"); loopback_test_rx()
5056 static int loopback_test(struct slgt_info *info) loopback_test() argument
5066 struct tty_struct *oldtty = info->port.tty; loopback_test()
5069 memcpy(&params, &info->params, sizeof(params)); loopback_test()
5071 info->params.mode = MGSL_MODE_ASYNC; loopback_test()
5072 info->params.data_rate = 921600; loopback_test()
5073 info->params.loopback = 1; loopback_test()
5074 info->port.tty = NULL; loopback_test()
5080 info->tmp_rbuf_count = 0; loopback_test()
5081 memset(info->tmp_rbuf, 0, TESTFRAMESIZE); loopback_test()
5084 spin_lock_irqsave(&info->lock,flags); loopback_test()
5085 async_mode(info); loopback_test()
5086 rx_start(info); loopback_test()
5087 tx_load(info, buf, count); loopback_test()
5088 spin_unlock_irqrestore(&info->lock, flags); loopback_test()
5093 if (loopback_test_rx(info)) { loopback_test()
5100 if (!rc && (info->tmp_rbuf_count != count || loopback_test()
5101 memcmp(buf, info->tmp_rbuf, count))) { loopback_test()
5105 spin_lock_irqsave(&info->lock,flags); loopback_test()
5106 reset_adapter(info); loopback_test()
5107 spin_unlock_irqrestore(&info->lock,flags); loopback_test()
5109 memcpy(&info->params, &params, sizeof(info->params)); loopback_test()
5110 info->port.tty = oldtty; loopback_test()
5112 info->init_error = rc ? DiagStatus_DmaFailure : 0; loopback_test()
5116 static int adapter_test(struct slgt_info *info) adapter_test() argument
5118 DBGINFO(("testing %s\n", info->device_name)); adapter_test()
5119 if (register_test(info) < 0) { adapter_test()
5121 info->device_name, info->phys_reg_addr); adapter_test()
5122 } else if (irq_test(info) < 0) { adapter_test()
5124 info->device_name, info->irq_level); adapter_test()
5125 } else if (loopback_test(info) < 0) { adapter_test()
5126 printk("loopback test failure %s\n", info->device_name); adapter_test()
5128 return info->init_error; adapter_test()
5136 struct slgt_info *info = (struct slgt_info*)context; tx_timeout() local
5139 DBGINFO(("%s tx_timeout\n", info->device_name)); tx_timeout()
5140 if(info->tx_active && info->params.mode == MGSL_MODE_HDLC) { tx_timeout()
5141 info->icount.txtimeout++; tx_timeout()
5143 spin_lock_irqsave(&info->lock,flags); tx_timeout()
5144 tx_stop(info); tx_timeout()
5145 spin_unlock_irqrestore(&info->lock,flags); tx_timeout()
5148 if (info->netcount) tx_timeout()
5149 hdlcdev_tx_done(info); tx_timeout()
5152 bh_transmit(info); tx_timeout()
5160 struct slgt_info *info = (struct slgt_info*)context; rx_timeout() local
5163 DBGINFO(("%s rx_timeout\n", info->device_name)); rx_timeout()
5164 spin_lock_irqsave(&info->lock, flags); rx_timeout()
5165 info->pending_bh |= BH_RECEIVE; rx_timeout()
5166 spin_unlock_irqrestore(&info->lock, flags); rx_timeout()
5167 bh_handler(&info->task); rx_timeout()
3270 block_til_ready(struct tty_struct *tty, struct file *filp, struct slgt_info *info) block_til_ready() argument
H A Dsynclink.c601 void usc_DisableMasterIrqBit( struct mgsl_struct *info );
602 void usc_EnableMasterIrqBit( struct mgsl_struct *info );
603 void usc_EnableInterrupts( struct mgsl_struct *info, u16 IrqMask );
604 void usc_DisableInterrupts( struct mgsl_struct *info, u16 IrqMask );
605 void usc_ClearIrqPendingBits( struct mgsl_struct *info, u16 IrqMask );
665 static u16 usc_InDmaReg( struct mgsl_struct *info, u16 Port );
666 static void usc_OutDmaReg( struct mgsl_struct *info, u16 Port, u16 Value );
667 static void usc_DmaCmd( struct mgsl_struct *info, u16 Cmd );
669 static u16 usc_InReg( struct mgsl_struct *info, u16 Port );
670 static void usc_OutReg( struct mgsl_struct *info, u16 Port, u16 Value );
671 static void usc_RTCmd( struct mgsl_struct *info, u16 Cmd );
672 void usc_RCmd( struct mgsl_struct *info, u16 Cmd );
673 void usc_TCmd( struct mgsl_struct *info, u16 Cmd );
680 static void usc_process_rxoverrun_sync( struct mgsl_struct *info );
681 static void usc_start_receiver( struct mgsl_struct *info );
682 static void usc_stop_receiver( struct mgsl_struct *info );
684 static void usc_start_transmitter( struct mgsl_struct *info );
685 static void usc_stop_transmitter( struct mgsl_struct *info );
686 static void usc_set_txidle( struct mgsl_struct *info );
687 static void usc_load_txfifo( struct mgsl_struct *info );
689 static void usc_enable_aux_clock( struct mgsl_struct *info, u32 DataRate );
690 static void usc_enable_loopback( struct mgsl_struct *info, int enable );
692 static void usc_get_serial_signals( struct mgsl_struct *info );
693 static void usc_set_serial_signals( struct mgsl_struct *info );
695 static void usc_reset( struct mgsl_struct *info );
697 static void usc_set_sync_mode( struct mgsl_struct *info );
698 static void usc_set_sdlc_mode( struct mgsl_struct *info );
699 static void usc_set_async_mode( struct mgsl_struct *info );
700 static void usc_enable_async_clock( struct mgsl_struct *info, u32 DataRate );
702 static void usc_loopback_frame( struct mgsl_struct *info );
707 static void usc_loopmode_cancel_transmit( struct mgsl_struct * info );
708 static void usc_loopmode_insert_request( struct mgsl_struct * info );
709 static int usc_loopmode_active( struct mgsl_struct * info);
710 static void usc_loopmode_send_done( struct mgsl_struct * info );
712 static int mgsl_ioctl_common(struct mgsl_struct *info, unsigned int cmd, unsigned long arg);
716 static void hdlcdev_tx_done(struct mgsl_struct *info);
717 static void hdlcdev_rx(struct mgsl_struct *info, char *buf, int size);
718 static int hdlcdev_init(struct mgsl_struct *info);
719 static void hdlcdev_exit(struct mgsl_struct *info);
738 static void mgsl_trace_block(struct mgsl_struct *info,const char* data, int count, int xmit);
743 static bool mgsl_register_test( struct mgsl_struct *info );
744 static bool mgsl_irq_test( struct mgsl_struct *info );
745 static bool mgsl_dma_test( struct mgsl_struct *info );
746 static bool mgsl_memory_test( struct mgsl_struct *info );
747 static int mgsl_adapter_test( struct mgsl_struct *info );
752 static int mgsl_claim_resources(struct mgsl_struct *info);
753 static void mgsl_release_resources(struct mgsl_struct *info);
754 static void mgsl_add_device(struct mgsl_struct *info);
760 static void mgsl_free_rx_frame_buffers( struct mgsl_struct *info, unsigned int StartIndex, unsigned int EndIndex );
761 static bool mgsl_get_rx_frame( struct mgsl_struct *info );
762 static bool mgsl_get_raw_rx_frame( struct mgsl_struct *info );
763 static void mgsl_reset_rx_dma_buffers( struct mgsl_struct *info );
764 static void mgsl_reset_tx_dma_buffers( struct mgsl_struct *info );
765 static int num_free_tx_dma_buffers(struct mgsl_struct *info);
766 static void mgsl_load_tx_dma_buffer( struct mgsl_struct *info, const char *Buffer, unsigned int BufferSize);
772 static int mgsl_allocate_dma_buffers(struct mgsl_struct *info);
773 static void mgsl_free_dma_buffers(struct mgsl_struct *info);
774 static int mgsl_alloc_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *BufferList,int Buffercount);
775 static void mgsl_free_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *BufferList,int Buffercount);
776 static int mgsl_alloc_buffer_list_memory(struct mgsl_struct *info);
777 static void mgsl_free_buffer_list_memory(struct mgsl_struct *info);
778 static int mgsl_alloc_intermediate_rxbuffer_memory(struct mgsl_struct *info);
779 static void mgsl_free_intermediate_rxbuffer_memory(struct mgsl_struct *info);
780 static int mgsl_alloc_intermediate_txbuffer_memory(struct mgsl_struct *info);
781 static void mgsl_free_intermediate_txbuffer_memory(struct mgsl_struct *info);
782 static bool load_next_tx_holding_buffer(struct mgsl_struct *info);
783 static int save_tx_buffer_request(struct mgsl_struct *info,const char *Buffer, unsigned int BufferSize);
789 static void mgsl_bh_receive(struct mgsl_struct *info);
790 static void mgsl_bh_transmit(struct mgsl_struct *info);
791 static void mgsl_bh_status(struct mgsl_struct *info);
796 static void mgsl_isr_null( struct mgsl_struct *info );
797 static void mgsl_isr_transmit_data( struct mgsl_struct *info );
798 static void mgsl_isr_receive_data( struct mgsl_struct *info );
799 static void mgsl_isr_receive_status( struct mgsl_struct *info );
800 static void mgsl_isr_transmit_status( struct mgsl_struct *info );
801 static void mgsl_isr_io_pin( struct mgsl_struct *info );
802 static void mgsl_isr_misc( struct mgsl_struct *info );
803 static void mgsl_isr_receive_dma( struct mgsl_struct *info );
804 static void mgsl_isr_transmit_dma( struct mgsl_struct *info );
825 static int mgsl_get_stats(struct mgsl_struct * info, struct mgsl_icount
827 static int mgsl_get_params(struct mgsl_struct * info, MGSL_PARAMS __user *user_params);
828 static int mgsl_set_params(struct mgsl_struct * info, MGSL_PARAMS __user *new_params);
829 static int mgsl_get_txidle(struct mgsl_struct * info, int __user *idle_mode);
830 static int mgsl_set_txidle(struct mgsl_struct * info, int idle_mode);
831 static int mgsl_txenable(struct mgsl_struct * info, int enable);
832 static int mgsl_txabort(struct mgsl_struct * info);
833 static int mgsl_rxenable(struct mgsl_struct * info, int enable);
834 static int mgsl_wait_event(struct mgsl_struct * info, int __user *mask);
835 static int mgsl_loopmode_send_done( struct mgsl_struct * info );
909 static void mgsl_change_params(struct mgsl_struct *info);
923 static inline int mgsl_paranoia_check(struct mgsl_struct *info, mgsl_paranoia_check() argument
932 if (!info) { mgsl_paranoia_check()
936 if (info->magic != MGSL_MAGIC) { mgsl_paranoia_check()
941 if (!info) mgsl_paranoia_check()
972 * Arguments: tty pointer to tty info structure
977 struct mgsl_struct *info = tty->driver_data; mgsl_stop() local
980 if (mgsl_paranoia_check(info, tty->name, "mgsl_stop")) mgsl_stop()
984 printk("mgsl_stop(%s)\n",info->device_name); mgsl_stop()
986 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_stop()
987 if (info->tx_enabled) mgsl_stop()
988 usc_stop_transmitter(info); mgsl_stop()
989 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_stop()
995 * Arguments: tty pointer to tty info structure
1000 struct mgsl_struct *info = tty->driver_data; mgsl_start() local
1003 if (mgsl_paranoia_check(info, tty->name, "mgsl_start")) mgsl_start()
1007 printk("mgsl_start(%s)\n",info->device_name); mgsl_start()
1009 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_start()
1010 if (!info->tx_enabled) mgsl_start()
1011 usc_start_transmitter(info); mgsl_start()
1012 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_start()
1023 static int mgsl_bh_action(struct mgsl_struct *info) mgsl_bh_action() argument
1028 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_bh_action()
1030 if (info->pending_bh & BH_RECEIVE) { mgsl_bh_action()
1031 info->pending_bh &= ~BH_RECEIVE; mgsl_bh_action()
1033 } else if (info->pending_bh & BH_TRANSMIT) { mgsl_bh_action()
1034 info->pending_bh &= ~BH_TRANSMIT; mgsl_bh_action()
1036 } else if (info->pending_bh & BH_STATUS) { mgsl_bh_action()
1037 info->pending_bh &= ~BH_STATUS; mgsl_bh_action()
1043 info->bh_running = false; mgsl_bh_action()
1044 info->bh_requested = false; mgsl_bh_action()
1047 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_bh_action()
1057 struct mgsl_struct *info = mgsl_bh_handler() local
1063 __FILE__,__LINE__,info->device_name); mgsl_bh_handler()
1065 info->bh_running = true; mgsl_bh_handler()
1067 while((action = mgsl_bh_action(info)) != 0) { mgsl_bh_handler()
1077 mgsl_bh_receive(info); mgsl_bh_handler()
1080 mgsl_bh_transmit(info); mgsl_bh_handler()
1083 mgsl_bh_status(info); mgsl_bh_handler()
1094 __FILE__,__LINE__,info->device_name); mgsl_bh_handler()
1097 static void mgsl_bh_receive(struct mgsl_struct *info) mgsl_bh_receive() argument
1099 bool (*get_rx_frame)(struct mgsl_struct *info) = mgsl_bh_receive()
1100 (info->params.mode == MGSL_MODE_HDLC ? mgsl_get_rx_frame : mgsl_get_raw_rx_frame); mgsl_bh_receive()
1104 __FILE__,__LINE__,info->device_name); mgsl_bh_receive()
1108 if (info->rx_rcc_underrun) { mgsl_bh_receive()
1110 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_bh_receive()
1111 usc_start_receiver(info); mgsl_bh_receive()
1112 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_bh_receive()
1115 } while(get_rx_frame(info)); mgsl_bh_receive()
1118 static void mgsl_bh_transmit(struct mgsl_struct *info) mgsl_bh_transmit() argument
1120 struct tty_struct *tty = info->port.tty; mgsl_bh_transmit()
1125 __FILE__,__LINE__,info->device_name); mgsl_bh_transmit()
1133 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_bh_transmit()
1134 if ( !info->tx_active && info->loopmode_send_done_requested ) mgsl_bh_transmit()
1135 usc_loopmode_send_done( info ); mgsl_bh_transmit()
1136 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_bh_transmit()
1139 static void mgsl_bh_status(struct mgsl_struct *info) mgsl_bh_status() argument
1143 __FILE__,__LINE__,info->device_name); mgsl_bh_status()
1145 info->ri_chkcount = 0; mgsl_bh_status()
1146 info->dsr_chkcount = 0; mgsl_bh_status()
1147 info->dcd_chkcount = 0; mgsl_bh_status()
1148 info->cts_chkcount = 0; mgsl_bh_status()
1157 * Arguments: info pointer to device instance data
1160 static void mgsl_isr_receive_status( struct mgsl_struct *info ) mgsl_isr_receive_status()
1162 u16 status = usc_InReg( info, RCSR ); mgsl_isr_receive_status()
1169 info->loopmode_insert_requested && mgsl_isr_receive_status()
1170 usc_loopmode_active(info) ) mgsl_isr_receive_status()
1172 ++info->icount.rxabort; mgsl_isr_receive_status()
1173 info->loopmode_insert_requested = false; mgsl_isr_receive_status()
1176 info->cmr_value &= ~BIT13; mgsl_isr_receive_status()
1177 usc_OutReg(info, CMR, info->cmr_value); mgsl_isr_receive_status()
1180 usc_OutReg(info, RICR, mgsl_isr_receive_status()
1181 (usc_InReg(info, RICR) & ~RXSTATUS_ABORT_RECEIVED)); mgsl_isr_receive_status()
1186 info->icount.exithunt++; mgsl_isr_receive_status()
1188 info->icount.rxidle++; mgsl_isr_receive_status()
1189 wake_up_interruptible(&info->event_wait_q); mgsl_isr_receive_status()
1193 info->icount.rxover++; mgsl_isr_receive_status()
1194 usc_process_rxoverrun_sync( info ); mgsl_isr_receive_status()
1197 usc_ClearIrqPendingBits( info, RECEIVE_STATUS ); mgsl_isr_receive_status()
1198 usc_UnlatchRxstatusBits( info, status ); mgsl_isr_receive_status()
1209 * Arguments: info pointer to device instance data
1212 static void mgsl_isr_transmit_status( struct mgsl_struct *info ) mgsl_isr_transmit_status()
1214 u16 status = usc_InReg( info, TCSR ); mgsl_isr_transmit_status()
1220 usc_ClearIrqPendingBits( info, TRANSMIT_STATUS ); mgsl_isr_transmit_status()
1221 usc_UnlatchTxstatusBits( info, status ); mgsl_isr_transmit_status()
1230 usc_DmaCmd( info, DmaCmd_ResetTxChannel ); mgsl_isr_transmit_status()
1231 usc_RTCmd( info, RTCmd_PurgeTxFifo ); mgsl_isr_transmit_status()
1235 info->icount.txok++; mgsl_isr_transmit_status()
1237 info->icount.txunder++; mgsl_isr_transmit_status()
1239 info->icount.txabort++; mgsl_isr_transmit_status()
1241 info->icount.txunder++; mgsl_isr_transmit_status()
1243 info->tx_active = false; mgsl_isr_transmit_status()
1244 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; mgsl_isr_transmit_status()
1245 del_timer(&info->tx_timer); mgsl_isr_transmit_status()
1247 if ( info->drop_rts_on_tx_done ) { mgsl_isr_transmit_status()
1248 usc_get_serial_signals( info ); mgsl_isr_transmit_status()
1249 if ( info->serial_signals & SerialSignal_RTS ) { mgsl_isr_transmit_status()
1250 info->serial_signals &= ~SerialSignal_RTS; mgsl_isr_transmit_status()
1251 usc_set_serial_signals( info ); mgsl_isr_transmit_status()
1253 info->drop_rts_on_tx_done = false; mgsl_isr_transmit_status()
1257 if (info->netcount) mgsl_isr_transmit_status()
1258 hdlcdev_tx_done(info); mgsl_isr_transmit_status()
1262 if (info->port.tty->stopped || info->port.tty->hw_stopped) { mgsl_isr_transmit_status()
1263 usc_stop_transmitter(info); mgsl_isr_transmit_status()
1266 info->pending_bh |= BH_TRANSMIT; mgsl_isr_transmit_status()
1276 * Arguments: info pointer to device instance data
1279 static void mgsl_isr_io_pin( struct mgsl_struct *info ) mgsl_isr_io_pin()
1282 u16 status = usc_InReg( info, MISR ); mgsl_isr_io_pin()
1288 usc_ClearIrqPendingBits( info, IO_PIN ); mgsl_isr_io_pin()
1289 usc_UnlatchIostatusBits( info, status ); mgsl_isr_io_pin()
1293 icount = &info->icount; mgsl_isr_io_pin()
1296 if ((info->ri_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) mgsl_isr_io_pin()
1297 usc_DisablestatusIrqs(info,SICR_RI); mgsl_isr_io_pin()
1300 info->input_signal_events.ri_up++; mgsl_isr_io_pin()
1302 info->input_signal_events.ri_down++; mgsl_isr_io_pin()
1305 if ((info->dsr_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) mgsl_isr_io_pin()
1306 usc_DisablestatusIrqs(info,SICR_DSR); mgsl_isr_io_pin()
1309 info->input_signal_events.dsr_up++; mgsl_isr_io_pin()
1311 info->input_signal_events.dsr_down++; mgsl_isr_io_pin()
1314 if ((info->dcd_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) mgsl_isr_io_pin()
1315 usc_DisablestatusIrqs(info,SICR_DCD); mgsl_isr_io_pin()
1318 info->input_signal_events.dcd_up++; mgsl_isr_io_pin()
1320 info->input_signal_events.dcd_down++; mgsl_isr_io_pin()
1322 if (info->netcount) { mgsl_isr_io_pin()
1324 netif_carrier_on(info->netdev); mgsl_isr_io_pin()
1326 netif_carrier_off(info->netdev); mgsl_isr_io_pin()
1332 if ((info->cts_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) mgsl_isr_io_pin()
1333 usc_DisablestatusIrqs(info,SICR_CTS); mgsl_isr_io_pin()
1336 info->input_signal_events.cts_up++; mgsl_isr_io_pin()
1338 info->input_signal_events.cts_down++; mgsl_isr_io_pin()
1340 wake_up_interruptible(&info->status_event_wait_q); mgsl_isr_io_pin()
1341 wake_up_interruptible(&info->event_wait_q); mgsl_isr_io_pin()
1343 if ( (info->port.flags & ASYNC_CHECK_CD) && mgsl_isr_io_pin()
1346 printk("%s CD now %s...", info->device_name, mgsl_isr_io_pin()
1349 wake_up_interruptible(&info->port.open_wait); mgsl_isr_io_pin()
1353 if (info->port.tty) mgsl_isr_io_pin()
1354 tty_hangup(info->port.tty); mgsl_isr_io_pin()
1358 if (tty_port_cts_enabled(&info->port) && mgsl_isr_io_pin()
1360 if (info->port.tty->hw_stopped) { mgsl_isr_io_pin()
1364 if (info->port.tty) mgsl_isr_io_pin()
1365 info->port.tty->hw_stopped = 0; mgsl_isr_io_pin()
1366 usc_start_transmitter(info); mgsl_isr_io_pin()
1367 info->pending_bh |= BH_TRANSMIT; mgsl_isr_io_pin()
1374 if (info->port.tty) mgsl_isr_io_pin()
1375 info->port.tty->hw_stopped = 1; mgsl_isr_io_pin()
1376 usc_stop_transmitter(info); mgsl_isr_io_pin()
1382 info->pending_bh |= BH_STATUS; mgsl_isr_io_pin()
1386 usc_OutReg( info, SICR, mgsl_isr_io_pin()
1387 (unsigned short)(usc_InReg(info,SICR) & ~(SICR_TXC_ACTIVE+SICR_TXC_INACTIVE)) ); mgsl_isr_io_pin()
1388 usc_UnlatchIostatusBits( info, MISCSTATUS_TXC_LATCHED ); mgsl_isr_io_pin()
1389 info->irq_occurred = true; mgsl_isr_io_pin()
1398 * Arguments: info pointer to device instance data
1401 static void mgsl_isr_transmit_data( struct mgsl_struct *info ) mgsl_isr_transmit_data()
1405 __FILE__,__LINE__,info->xmit_cnt); mgsl_isr_transmit_data()
1407 usc_ClearIrqPendingBits( info, TRANSMIT_DATA ); mgsl_isr_transmit_data()
1409 if (info->port.tty->stopped || info->port.tty->hw_stopped) { mgsl_isr_transmit_data()
1410 usc_stop_transmitter(info); mgsl_isr_transmit_data()
1414 if ( info->xmit_cnt ) mgsl_isr_transmit_data()
1415 usc_load_txfifo( info ); mgsl_isr_transmit_data()
1417 info->tx_active = false; mgsl_isr_transmit_data()
1419 if (info->xmit_cnt < WAKEUP_CHARS) mgsl_isr_transmit_data()
1420 info->pending_bh |= BH_TRANSMIT; mgsl_isr_transmit_data()
1430 * Arguments: info pointer to device instance data
1433 static void mgsl_isr_receive_data( struct mgsl_struct *info ) mgsl_isr_receive_data()
1439 struct mgsl_icount *icount = &info->icount; mgsl_isr_receive_data()
1445 usc_ClearIrqPendingBits( info, RECEIVE_DATA ); mgsl_isr_receive_data()
1448 usc_RCmd( info, RCmd_SelectRicrRxFifostatus ); mgsl_isr_receive_data()
1452 usc_OutReg( info, RICR+LSBONLY, (u16)(usc_InReg(info, RICR+LSBONLY) & ~BIT3 )); mgsl_isr_receive_data()
1456 while( (Fifocount = (usc_InReg(info,RICR) >> 8)) ) { mgsl_isr_receive_data()
1460 outw( (inw(info->io_base + CCAR) & 0x0780) | (RDR+LSBONLY), mgsl_isr_receive_data()
1461 info->io_base + CCAR ); mgsl_isr_receive_data()
1462 DataByte = inb( info->io_base + CCAR ); mgsl_isr_receive_data()
1465 status = usc_InReg(info, RCSR); mgsl_isr_receive_data()
1468 usc_UnlatchRxstatusBits(info,RXSTATUS_ALL); mgsl_isr_receive_data()
1487 usc_RTCmd(info,RTCmd_PurgeRxFifo); mgsl_isr_receive_data()
1492 if (status & info->ignore_status_mask) mgsl_isr_receive_data()
1495 status &= info->read_status_mask; mgsl_isr_receive_data()
1499 if (info->port.flags & ASYNC_SAK) mgsl_isr_receive_data()
1500 do_SAK(info->port.tty); mgsl_isr_receive_data()
1506 tty_insert_flip_char(&info->port, DataByte, flag); mgsl_isr_receive_data()
1512 work += tty_insert_flip_char(&info->port, 0, TTY_OVERRUN); mgsl_isr_receive_data()
1523 tty_flip_buffer_push(&info->port); mgsl_isr_receive_data()
1530 * Arguments: info pointer to device extension (instance data)
1533 static void mgsl_isr_misc( struct mgsl_struct *info ) mgsl_isr_misc()
1535 u16 status = usc_InReg( info, MISR ); mgsl_isr_misc()
1542 (info->params.mode == MGSL_MODE_HDLC)) { mgsl_isr_misc()
1545 usc_EnableReceiver(info,DISABLE_UNCONDITIONAL); mgsl_isr_misc()
1546 usc_DmaCmd(info, DmaCmd_ResetRxChannel); mgsl_isr_misc()
1547 usc_UnlatchRxstatusBits(info, RXSTATUS_ALL); mgsl_isr_misc()
1548 usc_ClearIrqPendingBits(info, RECEIVE_DATA | RECEIVE_STATUS); mgsl_isr_misc()
1549 usc_DisableInterrupts(info, RECEIVE_DATA | RECEIVE_STATUS); mgsl_isr_misc()
1552 info->pending_bh |= BH_RECEIVE; mgsl_isr_misc()
1553 info->rx_rcc_underrun = true; mgsl_isr_misc()
1556 usc_ClearIrqPendingBits( info, MISC ); mgsl_isr_misc()
1557 usc_UnlatchMiscstatusBits( info, status ); mgsl_isr_misc()
1566 * Arguments: info pointer to device extension (instance data)
1569 static void mgsl_isr_null( struct mgsl_struct *info ) mgsl_isr_null()
1590 * Arguments: info pointer to device instance data
1593 static void mgsl_isr_receive_dma( struct mgsl_struct *info ) mgsl_isr_receive_dma()
1598 usc_OutDmaReg( info, CDIR, BIT9 | BIT1 ); mgsl_isr_receive_dma()
1602 status = usc_InDmaReg( info, RDMR ); mgsl_isr_receive_dma()
1606 __FILE__,__LINE__,info->device_name,status); mgsl_isr_receive_dma()
1608 info->pending_bh |= BH_RECEIVE; mgsl_isr_receive_dma()
1611 info->rx_overflow = true; mgsl_isr_receive_dma()
1612 info->icount.buf_overrun++; mgsl_isr_receive_dma()
1634 * Arguments: info pointer to device instance data
1637 static void mgsl_isr_transmit_dma( struct mgsl_struct *info ) mgsl_isr_transmit_dma()
1642 usc_OutDmaReg(info, CDIR, BIT8 | BIT0 ); mgsl_isr_transmit_dma()
1647 status = usc_InDmaReg( info, TDMR ); mgsl_isr_transmit_dma()
1651 __FILE__,__LINE__,info->device_name,status); mgsl_isr_transmit_dma()
1654 --info->tx_dma_buffers_used; mgsl_isr_transmit_dma()
1659 if ( load_next_tx_holding_buffer(info) ) { mgsl_isr_transmit_dma()
1663 info->pending_bh |= BH_TRANSMIT; mgsl_isr_transmit_dma()
1682 struct mgsl_struct *info = dev_id; mgsl_interrupt() local
1688 __FILE__, __LINE__, info->irq_level); mgsl_interrupt()
1690 spin_lock(&info->irq_spinlock); mgsl_interrupt()
1694 UscVector = usc_InReg(info, IVR) >> 9; mgsl_interrupt()
1695 DmaVector = usc_InDmaReg(info, DIVR); mgsl_interrupt()
1699 __FILE__,__LINE__,info->device_name,UscVector,DmaVector); mgsl_interrupt()
1706 (*UscIsrTable[UscVector])(info); mgsl_interrupt()
1708 mgsl_isr_transmit_dma(info); mgsl_interrupt()
1710 mgsl_isr_receive_dma(info); mgsl_interrupt()
1712 if ( info->isr_overflow ) { mgsl_interrupt()
1714 __FILE__, __LINE__, info->device_name, info->irq_level); mgsl_interrupt()
1715 usc_DisableMasterIrqBit(info); mgsl_interrupt()
1716 usc_DisableDmaInterrupts(info,DICR_MASTER); mgsl_interrupt()
1725 if ( info->pending_bh && !info->bh_running && !info->bh_requested ) { mgsl_interrupt()
1728 __FILE__,__LINE__,info->device_name); mgsl_interrupt()
1729 schedule_work(&info->task); mgsl_interrupt()
1730 info->bh_requested = true; mgsl_interrupt()
1733 spin_unlock(&info->irq_spinlock); mgsl_interrupt()
1737 __FILE__, __LINE__, info->irq_level); mgsl_interrupt()
1746 * Arguments: info pointer to device instance data
1749 static int startup(struct mgsl_struct * info) startup() argument
1754 printk("%s(%d):mgsl_startup(%s)\n",__FILE__,__LINE__,info->device_name); startup()
1756 if (info->port.flags & ASYNC_INITIALIZED) startup()
1759 if (!info->xmit_buf) { startup()
1761 info->xmit_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL); startup()
1762 if (!info->xmit_buf) { startup()
1764 __FILE__,__LINE__,info->device_name); startup()
1769 info->pending_bh = 0; startup()
1771 memset(&info->icount, 0, sizeof(info->icount)); startup()
1773 setup_timer(&info->tx_timer, mgsl_tx_timeout, (unsigned long)info); startup()
1776 retval = mgsl_claim_resources(info); startup()
1780 retval = mgsl_adapter_test(info); startup()
1783 if (capable(CAP_SYS_ADMIN) && info->port.tty) startup()
1784 set_bit(TTY_IO_ERROR, &info->port.tty->flags); startup()
1785 mgsl_release_resources(info); startup()
1790 mgsl_change_params(info); startup()
1792 if (info->port.tty) startup()
1793 clear_bit(TTY_IO_ERROR, &info->port.tty->flags); startup()
1795 info->port.flags |= ASYNC_INITIALIZED; startup()
1805 * Arguments: info pointer to device instance data
1808 static void shutdown(struct mgsl_struct * info) shutdown() argument
1812 if (!(info->port.flags & ASYNC_INITIALIZED)) shutdown()
1817 __FILE__,__LINE__, info->device_name ); shutdown()
1821 wake_up_interruptible(&info->status_event_wait_q); shutdown()
1822 wake_up_interruptible(&info->event_wait_q); shutdown()
1824 del_timer_sync(&info->tx_timer); shutdown()
1826 if (info->xmit_buf) { shutdown()
1827 free_page((unsigned long) info->xmit_buf); shutdown()
1828 info->xmit_buf = NULL; shutdown()
1831 spin_lock_irqsave(&info->irq_spinlock,flags); shutdown()
1832 usc_DisableMasterIrqBit(info); shutdown()
1833 usc_stop_receiver(info); shutdown()
1834 usc_stop_transmitter(info); shutdown()
1835 usc_DisableInterrupts(info,RECEIVE_DATA | RECEIVE_STATUS | shutdown()
1837 usc_DisableDmaInterrupts(info,DICR_MASTER + DICR_TRANSMIT + DICR_RECEIVE); shutdown()
1842 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT15) | BIT14)); shutdown()
1847 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT13) | BIT12)); shutdown()
1849 if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) { shutdown()
1850 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); shutdown()
1851 usc_set_serial_signals(info); shutdown()
1854 spin_unlock_irqrestore(&info->irq_spinlock,flags); shutdown()
1856 mgsl_release_resources(info); shutdown()
1858 if (info->port.tty) shutdown()
1859 set_bit(TTY_IO_ERROR, &info->port.tty->flags); shutdown()
1861 info->port.flags &= ~ASYNC_INITIALIZED; shutdown()
1865 static void mgsl_program_hw(struct mgsl_struct *info) mgsl_program_hw() argument
1869 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_program_hw()
1871 usc_stop_receiver(info); mgsl_program_hw()
1872 usc_stop_transmitter(info); mgsl_program_hw()
1873 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; mgsl_program_hw()
1875 if (info->params.mode == MGSL_MODE_HDLC || mgsl_program_hw()
1876 info->params.mode == MGSL_MODE_RAW || mgsl_program_hw()
1877 info->netcount) mgsl_program_hw()
1878 usc_set_sync_mode(info); mgsl_program_hw()
1880 usc_set_async_mode(info); mgsl_program_hw()
1882 usc_set_serial_signals(info); mgsl_program_hw()
1884 info->dcd_chkcount = 0; mgsl_program_hw()
1885 info->cts_chkcount = 0; mgsl_program_hw()
1886 info->ri_chkcount = 0; mgsl_program_hw()
1887 info->dsr_chkcount = 0; mgsl_program_hw()
1889 usc_EnableStatusIrqs(info,SICR_CTS+SICR_DSR+SICR_DCD+SICR_RI); mgsl_program_hw()
1890 usc_EnableInterrupts(info, IO_PIN); mgsl_program_hw()
1891 usc_get_serial_signals(info); mgsl_program_hw()
1893 if (info->netcount || info->port.tty->termios.c_cflag & CREAD) mgsl_program_hw()
1894 usc_start_receiver(info); mgsl_program_hw()
1896 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_program_hw()
1901 static void mgsl_change_params(struct mgsl_struct *info) mgsl_change_params() argument
1906 if (!info->port.tty) mgsl_change_params()
1911 __FILE__,__LINE__, info->device_name ); mgsl_change_params()
1913 cflag = info->port.tty->termios.c_cflag; mgsl_change_params()
1918 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; mgsl_change_params()
1920 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); mgsl_change_params()
1925 case CS5: info->params.data_bits = 5; break; mgsl_change_params()
1926 case CS6: info->params.data_bits = 6; break; mgsl_change_params()
1927 case CS7: info->params.data_bits = 7; break; mgsl_change_params()
1928 case CS8: info->params.data_bits = 8; break; mgsl_change_params()
1930 default: info->params.data_bits = 7; break; mgsl_change_params()
1934 info->params.stop_bits = 2; mgsl_change_params()
1936 info->params.stop_bits = 1; mgsl_change_params()
1938 info->params.parity = ASYNC_PARITY_NONE; mgsl_change_params()
1941 info->params.parity = ASYNC_PARITY_ODD; mgsl_change_params()
1943 info->params.parity = ASYNC_PARITY_EVEN; mgsl_change_params()
1946 info->params.parity = ASYNC_PARITY_SPACE; mgsl_change_params()
1953 bits_per_char = info->params.data_bits + mgsl_change_params()
1954 info->params.stop_bits + 1; mgsl_change_params()
1960 if (info->params.data_rate <= 460800) mgsl_change_params()
1961 info->params.data_rate = tty_get_baud_rate(info->port.tty); mgsl_change_params()
1963 if ( info->params.data_rate ) { mgsl_change_params()
1964 info->timeout = (32*HZ*bits_per_char) / mgsl_change_params()
1965 info->params.data_rate; mgsl_change_params()
1967 info->timeout += HZ/50; /* Add .02 seconds of slop */ mgsl_change_params()
1970 info->port.flags |= ASYNC_CTS_FLOW; mgsl_change_params()
1972 info->port.flags &= ~ASYNC_CTS_FLOW; mgsl_change_params()
1975 info->port.flags &= ~ASYNC_CHECK_CD; mgsl_change_params()
1977 info->port.flags |= ASYNC_CHECK_CD; mgsl_change_params()
1981 info->read_status_mask = RXSTATUS_OVERRUN; mgsl_change_params()
1982 if (I_INPCK(info->port.tty)) mgsl_change_params()
1983 info->read_status_mask |= RXSTATUS_PARITY_ERROR | RXSTATUS_FRAMING_ERROR; mgsl_change_params()
1984 if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty)) mgsl_change_params()
1985 info->read_status_mask |= RXSTATUS_BREAK_RECEIVED; mgsl_change_params()
1987 if (I_IGNPAR(info->port.tty)) mgsl_change_params()
1988 info->ignore_status_mask |= RXSTATUS_PARITY_ERROR | RXSTATUS_FRAMING_ERROR; mgsl_change_params()
1989 if (I_IGNBRK(info->port.tty)) { mgsl_change_params()
1990 info->ignore_status_mask |= RXSTATUS_BREAK_RECEIVED; mgsl_change_params()
1994 if (I_IGNPAR(info->port.tty)) mgsl_change_params()
1995 info->ignore_status_mask |= RXSTATUS_OVERRUN; mgsl_change_params()
1998 mgsl_program_hw(info); mgsl_change_params()
2013 struct mgsl_struct *info = tty->driver_data; mgsl_put_char() local
2019 __FILE__, __LINE__, ch, info->device_name); mgsl_put_char()
2022 if (mgsl_paranoia_check(info, tty->name, "mgsl_put_char")) mgsl_put_char()
2025 if (!info->xmit_buf) mgsl_put_char()
2028 spin_lock_irqsave(&info->irq_spinlock, flags); mgsl_put_char()
2030 if ((info->params.mode == MGSL_MODE_ASYNC ) || !info->tx_active) { mgsl_put_char()
2031 if (info->xmit_cnt < SERIAL_XMIT_SIZE - 1) { mgsl_put_char()
2032 info->xmit_buf[info->xmit_head++] = ch; mgsl_put_char()
2033 info->xmit_head &= SERIAL_XMIT_SIZE-1; mgsl_put_char()
2034 info->xmit_cnt++; mgsl_put_char()
2038 spin_unlock_irqrestore(&info->irq_spinlock, flags); mgsl_put_char()
2053 struct mgsl_struct *info = tty->driver_data; mgsl_flush_chars() local
2058 __FILE__,__LINE__,info->device_name,info->xmit_cnt); mgsl_flush_chars()
2060 if (mgsl_paranoia_check(info, tty->name, "mgsl_flush_chars")) mgsl_flush_chars()
2063 if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped || mgsl_flush_chars()
2064 !info->xmit_buf) mgsl_flush_chars()
2069 __FILE__,__LINE__,info->device_name ); mgsl_flush_chars()
2071 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_flush_chars()
2073 if (!info->tx_active) { mgsl_flush_chars()
2074 if ( (info->params.mode == MGSL_MODE_HDLC || mgsl_flush_chars()
2075 info->params.mode == MGSL_MODE_RAW) && info->xmit_cnt ) { mgsl_flush_chars()
2079 mgsl_load_tx_dma_buffer(info, mgsl_flush_chars()
2080 info->xmit_buf,info->xmit_cnt); mgsl_flush_chars()
2082 usc_start_transmitter(info); mgsl_flush_chars()
2085 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_flush_chars()
2105 struct mgsl_struct *info = tty->driver_data; mgsl_write() local
2110 __FILE__,__LINE__,info->device_name,count); mgsl_write()
2112 if (mgsl_paranoia_check(info, tty->name, "mgsl_write")) mgsl_write()
2115 if (!info->xmit_buf) mgsl_write()
2118 if ( info->params.mode == MGSL_MODE_HDLC || mgsl_write()
2119 info->params.mode == MGSL_MODE_RAW ) { mgsl_write()
2121 if (info->tx_active) { mgsl_write()
2123 if ( info->params.mode == MGSL_MODE_HDLC ) { mgsl_write()
2132 if (info->tx_holding_count >= info->num_tx_holding_buffers ) { mgsl_write()
2140 save_tx_buffer_request(info,buf,count); mgsl_write()
2145 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_write()
2146 load_next_tx_holding_buffer(info); mgsl_write()
2147 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_write()
2155 if ( (info->params.flags & HDLC_FLAG_HDLC_LOOPMODE) && mgsl_write()
2156 !usc_loopmode_active(info) ) mgsl_write()
2162 if ( info->xmit_cnt ) { mgsl_write()
2169 mgsl_load_tx_dma_buffer(info, mgsl_write()
2170 info->xmit_buf,info->xmit_cnt); mgsl_write()
2173 __FILE__,__LINE__,info->device_name); mgsl_write()
2177 __FILE__,__LINE__,info->device_name); mgsl_write()
2179 info->xmit_cnt = count; mgsl_write()
2180 mgsl_load_tx_dma_buffer(info,buf,count); mgsl_write()
2184 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_write()
2186 min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, mgsl_write()
2187 SERIAL_XMIT_SIZE - info->xmit_head)); mgsl_write()
2189 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_write()
2192 memcpy(info->xmit_buf + info->xmit_head, buf, c); mgsl_write()
2193 info->xmit_head = ((info->xmit_head + c) & mgsl_write()
2195 info->xmit_cnt += c; mgsl_write()
2196 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_write()
2203 if (info->xmit_cnt && !tty->stopped && !tty->hw_stopped) { mgsl_write()
2204 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_write()
2205 if (!info->tx_active) mgsl_write()
2206 usc_start_transmitter(info); mgsl_write()
2207 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_write()
2212 __FILE__,__LINE__,info->device_name,ret); mgsl_write()
2222 * Arguments: tty pointer to tty info structure
2227 struct mgsl_struct *info = tty->driver_data; mgsl_write_room() local
2230 if (mgsl_paranoia_check(info, tty->name, "mgsl_write_room")) mgsl_write_room()
2232 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1; mgsl_write_room()
2238 __FILE__,__LINE__, info->device_name,ret ); mgsl_write_room()
2240 if ( info->params.mode == MGSL_MODE_HDLC || mgsl_write_room()
2241 info->params.mode == MGSL_MODE_RAW ) { mgsl_write_room()
2243 if ( info->tx_active ) mgsl_write_room()
2257 * Arguments: tty pointer to tty info structure
2262 struct mgsl_struct *info = tty->driver_data; mgsl_chars_in_buffer() local
2266 __FILE__,__LINE__, info->device_name ); mgsl_chars_in_buffer()
2268 if (mgsl_paranoia_check(info, tty->name, "mgsl_chars_in_buffer")) mgsl_chars_in_buffer()
2273 __FILE__,__LINE__, info->device_name,info->xmit_cnt ); mgsl_chars_in_buffer()
2275 if ( info->params.mode == MGSL_MODE_HDLC || mgsl_chars_in_buffer()
2276 info->params.mode == MGSL_MODE_RAW ) { mgsl_chars_in_buffer()
2278 if ( info->tx_active ) mgsl_chars_in_buffer()
2279 return info->max_frame_size; mgsl_chars_in_buffer()
2284 return info->xmit_cnt; mgsl_chars_in_buffer()
2291 * Arguments: tty pointer to tty info structure
2296 struct mgsl_struct *info = tty->driver_data; mgsl_flush_buffer() local
2301 __FILE__,__LINE__, info->device_name ); mgsl_flush_buffer()
2303 if (mgsl_paranoia_check(info, tty->name, "mgsl_flush_buffer")) mgsl_flush_buffer()
2306 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_flush_buffer()
2307 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; mgsl_flush_buffer()
2308 del_timer(&info->tx_timer); mgsl_flush_buffer()
2309 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_flush_buffer()
2318 * Arguments: tty pointer to tty info structure
2324 struct mgsl_struct *info = tty->driver_data; mgsl_send_xchar() local
2329 __FILE__,__LINE__, info->device_name, ch ); mgsl_send_xchar()
2331 if (mgsl_paranoia_check(info, tty->name, "mgsl_send_xchar")) mgsl_send_xchar()
2334 info->x_char = ch; mgsl_send_xchar()
2337 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_send_xchar()
2338 if (!info->tx_enabled) mgsl_send_xchar()
2339 usc_start_transmitter(info); mgsl_send_xchar()
2340 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_send_xchar()
2348 * Arguments: tty pointer to tty info structure
2353 struct mgsl_struct *info = tty->driver_data; mgsl_throttle() local
2358 __FILE__,__LINE__, info->device_name ); mgsl_throttle()
2360 if (mgsl_paranoia_check(info, tty->name, "mgsl_throttle")) mgsl_throttle()
2367 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_throttle()
2368 info->serial_signals &= ~SerialSignal_RTS; mgsl_throttle()
2369 usc_set_serial_signals(info); mgsl_throttle()
2370 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_throttle()
2378 * Arguments: tty pointer to tty info structure
2383 struct mgsl_struct *info = tty->driver_data; mgsl_unthrottle() local
2388 __FILE__,__LINE__, info->device_name ); mgsl_unthrottle()
2390 if (mgsl_paranoia_check(info, tty->name, "mgsl_unthrottle")) mgsl_unthrottle()
2394 if (info->x_char) mgsl_unthrottle()
2395 info->x_char = 0; mgsl_unthrottle()
2401 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_unthrottle()
2402 info->serial_signals |= SerialSignal_RTS; mgsl_unthrottle()
2403 usc_set_serial_signals(info); mgsl_unthrottle()
2404 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_unthrottle()
2413 * Arguments: info pointer to device instance data
2418 static int mgsl_get_stats(struct mgsl_struct * info, struct mgsl_icount __user *user_icount) mgsl_get_stats() argument
2424 __FILE__,__LINE__, info->device_name); mgsl_get_stats()
2427 memset(&info->icount, 0, sizeof(info->icount)); mgsl_get_stats()
2429 mutex_lock(&info->port.mutex); mgsl_get_stats()
2430 COPY_TO_USER(err, user_icount, &info->icount, sizeof(struct mgsl_icount)); mgsl_get_stats()
2431 mutex_unlock(&info->port.mutex); mgsl_get_stats()
2444 * Arguments: info pointer to device instance data
2449 static int mgsl_get_params(struct mgsl_struct * info, MGSL_PARAMS __user *user_params) mgsl_get_params() argument
2454 __FILE__,__LINE__, info->device_name); mgsl_get_params()
2456 mutex_lock(&info->port.mutex); mgsl_get_params()
2457 COPY_TO_USER(err,user_params, &info->params, sizeof(MGSL_PARAMS)); mgsl_get_params()
2458 mutex_unlock(&info->port.mutex); mgsl_get_params()
2462 __FILE__,__LINE__,info->device_name); mgsl_get_params()
2476 * info pointer to device instance data
2481 static int mgsl_set_params(struct mgsl_struct * info, MGSL_PARAMS __user *new_params) mgsl_set_params() argument
2489 info->device_name ); mgsl_set_params()
2494 __FILE__,__LINE__,info->device_name); mgsl_set_params()
2498 mutex_lock(&info->port.mutex); mgsl_set_params()
2499 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_set_params()
2500 memcpy(&info->params,&tmp_params,sizeof(MGSL_PARAMS)); mgsl_set_params()
2501 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_set_params()
2503 mgsl_change_params(info); mgsl_set_params()
2504 mutex_unlock(&info->port.mutex); mgsl_set_params()
2514 * Arguments: info pointer to device instance data
2519 static int mgsl_get_txidle(struct mgsl_struct * info, int __user *idle_mode) mgsl_get_txidle() argument
2525 __FILE__,__LINE__, info->device_name, info->idle_mode); mgsl_get_txidle()
2527 COPY_TO_USER(err,idle_mode, &info->idle_mode, sizeof(int)); mgsl_get_txidle()
2531 __FILE__,__LINE__,info->device_name); mgsl_get_txidle()
2541 * Arguments: info pointer to device instance data
2546 static int mgsl_set_txidle(struct mgsl_struct * info, int idle_mode) mgsl_set_txidle() argument
2552 info->device_name, idle_mode ); mgsl_set_txidle()
2554 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_set_txidle()
2555 info->idle_mode = idle_mode; mgsl_set_txidle()
2556 usc_set_txidle( info ); mgsl_set_txidle()
2557 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_set_txidle()
2568 * info pointer to device instance data
2573 static int mgsl_txenable(struct mgsl_struct * info, int enable) mgsl_txenable() argument
2579 info->device_name, enable); mgsl_txenable()
2581 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_txenable()
2583 if ( !info->tx_enabled ) { mgsl_txenable()
2585 usc_start_transmitter(info); mgsl_txenable()
2593 if ( info->params.flags & HDLC_FLAG_HDLC_LOOPMODE ) mgsl_txenable()
2594 usc_loopmode_insert_request( info ); mgsl_txenable()
2597 if ( info->tx_enabled ) mgsl_txenable()
2598 usc_stop_transmitter(info); mgsl_txenable()
2600 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_txenable()
2607 * Arguments: info pointer to device instance data
2610 static int mgsl_txabort(struct mgsl_struct * info) mgsl_txabort() argument
2616 info->device_name); mgsl_txabort()
2618 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_txabort()
2619 if ( info->tx_active && info->params.mode == MGSL_MODE_HDLC ) mgsl_txabort()
2621 if ( info->params.flags & HDLC_FLAG_HDLC_LOOPMODE ) mgsl_txabort()
2622 usc_loopmode_cancel_transmit( info ); mgsl_txabort()
2624 usc_TCmd(info,TCmd_SendAbort); mgsl_txabort()
2626 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_txabort()
2633 * Arguments: info pointer to device instance data
2637 static int mgsl_rxenable(struct mgsl_struct * info, int enable) mgsl_rxenable() argument
2643 info->device_name, enable); mgsl_rxenable()
2645 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_rxenable()
2647 if ( !info->rx_enabled ) mgsl_rxenable()
2648 usc_start_receiver(info); mgsl_rxenable()
2650 if ( info->rx_enabled ) mgsl_rxenable()
2651 usc_stop_receiver(info); mgsl_rxenable()
2653 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_rxenable()
2660 * Arguments: info pointer to device instance data
2666 static int mgsl_wait_event(struct mgsl_struct * info, int __user * mask_ptr) mgsl_wait_event() argument
2684 info->device_name, mask); mgsl_wait_event()
2686 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_wait_event()
2689 usc_get_serial_signals(info); mgsl_wait_event()
2690 s = info->serial_signals; mgsl_wait_event()
2697 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_wait_event()
2702 cprev = info->icount; mgsl_wait_event()
2703 oldsigs = info->input_signal_events; mgsl_wait_event()
2707 u16 oldreg = usc_InReg(info,RICR); mgsl_wait_event()
2712 usc_OutReg(info, RICR, newreg); mgsl_wait_event()
2716 add_wait_queue(&info->event_wait_q, &wait); mgsl_wait_event()
2718 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_wait_event()
2729 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_wait_event()
2730 cnow = info->icount; mgsl_wait_event()
2731 newsigs = info->input_signal_events; mgsl_wait_event()
2733 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_wait_event()
2768 remove_wait_queue(&info->event_wait_q, &wait); mgsl_wait_event()
2772 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_wait_event()
2773 if (!waitqueue_active(&info->event_wait_q)) { mgsl_wait_event()
2775 usc_OutReg(info, RICR, usc_InReg(info,RICR) & mgsl_wait_event()
2778 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_wait_event()
2788 static int modem_input_wait(struct mgsl_struct *info,int arg) modem_input_wait() argument
2796 spin_lock_irqsave(&info->irq_spinlock,flags); modem_input_wait()
2797 cprev = info->icount; modem_input_wait()
2798 add_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
2800 spin_unlock_irqrestore(&info->irq_spinlock,flags); modem_input_wait()
2810 spin_lock_irqsave(&info->irq_spinlock,flags); modem_input_wait()
2811 cnow = info->icount; modem_input_wait()
2813 spin_unlock_irqrestore(&info->irq_spinlock,flags); modem_input_wait()
2833 remove_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
2842 struct mgsl_struct *info = tty->driver_data; tiocmget() local
2846 spin_lock_irqsave(&info->irq_spinlock,flags); tiocmget()
2847 usc_get_serial_signals(info); tiocmget()
2848 spin_unlock_irqrestore(&info->irq_spinlock,flags); tiocmget()
2850 result = ((info->serial_signals & SerialSignal_RTS) ? TIOCM_RTS:0) + tiocmget()
2851 ((info->serial_signals & SerialSignal_DTR) ? TIOCM_DTR:0) + tiocmget()
2852 ((info->serial_signals & SerialSignal_DCD) ? TIOCM_CAR:0) + tiocmget()
2853 ((info->serial_signals & SerialSignal_RI) ? TIOCM_RNG:0) + tiocmget()
2854 ((info->serial_signals & SerialSignal_DSR) ? TIOCM_DSR:0) + tiocmget()
2855 ((info->serial_signals & SerialSignal_CTS) ? TIOCM_CTS:0); tiocmget()
2859 __FILE__,__LINE__, info->device_name, result ); tiocmget()
2868 struct mgsl_struct *info = tty->driver_data; tiocmset() local
2873 __FILE__,__LINE__,info->device_name, set, clear); tiocmset()
2876 info->serial_signals |= SerialSignal_RTS; tiocmset()
2878 info->serial_signals |= SerialSignal_DTR; tiocmset()
2880 info->serial_signals &= ~SerialSignal_RTS; tiocmset()
2882 info->serial_signals &= ~SerialSignal_DTR; tiocmset()
2884 spin_lock_irqsave(&info->irq_spinlock,flags); tiocmset()
2885 usc_set_serial_signals(info); tiocmset()
2886 spin_unlock_irqrestore(&info->irq_spinlock,flags); tiocmset()
2899 struct mgsl_struct * info = tty->driver_data; mgsl_break() local
2904 __FILE__,__LINE__, info->device_name, break_state); mgsl_break()
2906 if (mgsl_paranoia_check(info, tty->name, "mgsl_break")) mgsl_break()
2909 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_break()
2911 usc_OutReg(info,IOCR,(u16)(usc_InReg(info,IOCR) | BIT7)); mgsl_break()
2913 usc_OutReg(info,IOCR,(u16)(usc_InReg(info,IOCR) & ~BIT7)); mgsl_break()
2914 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_break()
2929 struct mgsl_struct * info = tty->driver_data; msgl_get_icount() local
2933 spin_lock_irqsave(&info->irq_spinlock,flags); msgl_get_icount()
2934 cnow = info->icount; msgl_get_icount()
2935 spin_unlock_irqrestore(&info->irq_spinlock,flags); msgl_get_icount()
2964 struct mgsl_struct * info = tty->driver_data; mgsl_ioctl() local
2968 info->device_name, cmd ); mgsl_ioctl()
2970 if (mgsl_paranoia_check(info, tty->name, "mgsl_ioctl")) mgsl_ioctl()
2979 return mgsl_ioctl_common(info, cmd, arg); mgsl_ioctl()
2982 static int mgsl_ioctl_common(struct mgsl_struct *info, unsigned int cmd, unsigned long arg) mgsl_ioctl_common() argument
2988 return mgsl_get_params(info, argp); mgsl_ioctl_common()
2990 return mgsl_set_params(info, argp); mgsl_ioctl_common()
2992 return mgsl_get_txidle(info, argp); mgsl_ioctl_common()
2994 return mgsl_set_txidle(info,(int)arg); mgsl_ioctl_common()
2996 return mgsl_txenable(info,(int)arg); mgsl_ioctl_common()
2998 return mgsl_rxenable(info,(int)arg); mgsl_ioctl_common()
3000 return mgsl_txabort(info); mgsl_ioctl_common()
3002 return mgsl_get_stats(info, argp); mgsl_ioctl_common()
3004 return mgsl_wait_event(info, argp); mgsl_ioctl_common()
3006 return mgsl_loopmode_send_done(info); mgsl_ioctl_common()
3011 return modem_input_wait(info,(int)arg); mgsl_ioctl_common()
3032 struct mgsl_struct *info = tty->driver_data; mgsl_set_termios() local
3039 mgsl_change_params(info); mgsl_set_termios()
3044 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); mgsl_set_termios()
3045 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_set_termios()
3046 usc_set_serial_signals(info); mgsl_set_termios()
3047 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_set_termios()
3053 info->serial_signals |= SerialSignal_DTR; mgsl_set_termios()
3056 info->serial_signals |= SerialSignal_RTS; mgsl_set_termios()
3058 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_set_termios()
3059 usc_set_serial_signals(info); mgsl_set_termios()
3060 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_set_termios()
3086 struct mgsl_struct * info = tty->driver_data; mgsl_close() local
3088 if (mgsl_paranoia_check(info, tty->name, "mgsl_close")) mgsl_close()
3093 __FILE__,__LINE__, info->device_name, info->port.count); mgsl_close()
3095 if (tty_port_close_start(&info->port, tty, filp) == 0) mgsl_close()
3098 mutex_lock(&info->port.mutex); mgsl_close()
3099 if (info->port.flags & ASYNC_INITIALIZED) mgsl_close()
3100 mgsl_wait_until_sent(tty, info->timeout); mgsl_close()
3103 shutdown(info); mgsl_close()
3104 mutex_unlock(&info->port.mutex); mgsl_close()
3106 tty_port_close_end(&info->port, tty); mgsl_close()
3107 info->port.tty = NULL; mgsl_close()
3111 tty->driver->name, info->port.count); mgsl_close()
3121 * tty pointer to tty info structure
3128 struct mgsl_struct * info = tty->driver_data; mgsl_wait_until_sent() local
3131 if (!info ) mgsl_wait_until_sent()
3136 __FILE__,__LINE__, info->device_name ); mgsl_wait_until_sent()
3138 if (mgsl_paranoia_check(info, tty->name, "mgsl_wait_until_sent")) mgsl_wait_until_sent()
3141 if (!(info->port.flags & ASYNC_INITIALIZED)) mgsl_wait_until_sent()
3152 if ( info->params.data_rate ) { mgsl_wait_until_sent()
3153 char_time = info->timeout/(32 * 5); mgsl_wait_until_sent()
3162 if ( info->params.mode == MGSL_MODE_HDLC || mgsl_wait_until_sent()
3163 info->params.mode == MGSL_MODE_RAW ) { mgsl_wait_until_sent()
3164 while (info->tx_active) { mgsl_wait_until_sent()
3172 while (!(usc_InReg(info,TCSR) & TXSTATUS_ALL_SENT) && mgsl_wait_until_sent()
3173 info->tx_enabled) { mgsl_wait_until_sent()
3185 __FILE__,__LINE__, info->device_name ); mgsl_wait_until_sent()
3199 struct mgsl_struct * info = tty->driver_data; mgsl_hangup() local
3203 __FILE__,__LINE__, info->device_name ); mgsl_hangup()
3205 if (mgsl_paranoia_check(info, tty->name, "mgsl_hangup")) mgsl_hangup()
3209 shutdown(info); mgsl_hangup()
3211 info->port.count = 0; mgsl_hangup()
3212 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; mgsl_hangup()
3213 info->port.tty = NULL; mgsl_hangup()
3215 wake_up_interruptible(&info->port.open_wait); mgsl_hangup()
3228 struct mgsl_struct *info = container_of(port, struct mgsl_struct, port); carrier_raised() local
3230 spin_lock_irqsave(&info->irq_spinlock, flags); carrier_raised()
3231 usc_get_serial_signals(info); carrier_raised()
3232 spin_unlock_irqrestore(&info->irq_spinlock, flags); carrier_raised()
3233 return (info->serial_signals & SerialSignal_DCD) ? 1 : 0; carrier_raised()
3238 struct mgsl_struct *info = container_of(port, struct mgsl_struct, port); dtr_rts() local
3241 spin_lock_irqsave(&info->irq_spinlock,flags); dtr_rts()
3243 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; dtr_rts()
3245 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); dtr_rts()
3246 usc_set_serial_signals(info); dtr_rts()
3247 spin_unlock_irqrestore(&info->irq_spinlock,flags); dtr_rts()
3258 * tty pointer to tty info structure
3260 * info pointer to device instance data
3265 struct mgsl_struct *info) block_til_ready()
3272 struct tty_port *port = &info->port; block_til_ready()
3301 spin_lock_irqsave(&info->irq_spinlock, flags); block_til_ready()
3303 spin_unlock_irqrestore(&info->irq_spinlock, flags); block_til_ready()
3318 dcd = tty_port_carrier_raised(&info->port); block_til_ready()
3358 struct mgsl_struct *info; mgsl_install() local
3368 /* find the info structure for the specified line */ mgsl_install()
3369 info = mgsl_device_list; mgsl_install()
3370 while (info && info->line != line) mgsl_install()
3371 info = info->next_device; mgsl_install()
3372 if (mgsl_paranoia_check(info, tty->name, "mgsl_open")) mgsl_install()
3374 tty->driver_data = info; mgsl_install()
3376 return tty_port_install(&info->port, driver, tty); mgsl_install()
3384 * Arguments: tty pointer to tty info structure
3391 struct mgsl_struct *info = tty->driver_data; mgsl_open() local
3395 info->port.tty = tty; mgsl_open()
3399 __FILE__,__LINE__,tty->driver->name, info->port.count); mgsl_open()
3402 if (info->port.flags & ASYNC_CLOSING){ mgsl_open()
3403 wait_event_interruptible_tty(tty, info->port.close_wait, mgsl_open()
3404 !(info->port.flags & ASYNC_CLOSING)); mgsl_open()
3405 retval = ((info->port.flags & ASYNC_HUP_NOTIFY) ? mgsl_open()
3410 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; mgsl_open()
3412 spin_lock_irqsave(&info->netlock, flags); mgsl_open()
3413 if (info->netcount) { mgsl_open()
3415 spin_unlock_irqrestore(&info->netlock, flags); mgsl_open()
3418 info->port.count++; mgsl_open()
3419 spin_unlock_irqrestore(&info->netlock, flags); mgsl_open()
3421 if (info->port.count == 1) { mgsl_open()
3423 retval = startup(info); mgsl_open()
3428 retval = block_til_ready(tty, filp, info); mgsl_open()
3432 __FILE__,__LINE__, info->device_name, retval); mgsl_open()
3438 __FILE__,__LINE__, info->device_name); mgsl_open()
3444 info->port.tty = NULL; /* tty layer will release tty struct */ mgsl_open()
3445 if(info->port.count) mgsl_open()
3446 info->port.count--; mgsl_open()
3457 static inline void line_info(struct seq_file *m, struct mgsl_struct *info) line_info() argument
3462 if (info->bus_type == MGSL_BUS_TYPE_PCI) { line_info()
3464 info->device_name, info->io_base, info->irq_level, line_info()
3465 info->phys_memory_base, info->phys_lcr_base); line_info()
3468 info->device_name, info->io_base, line_info()
3469 info->irq_level, info->dma_level); line_info()
3473 spin_lock_irqsave(&info->irq_spinlock,flags); line_info()
3474 usc_get_serial_signals(info); line_info()
3475 spin_unlock_irqrestore(&info->irq_spinlock,flags); line_info()
3479 if (info->serial_signals & SerialSignal_RTS) line_info()
3481 if (info->serial_signals & SerialSignal_CTS) line_info()
3483 if (info->serial_signals & SerialSignal_DTR) line_info()
3485 if (info->serial_signals & SerialSignal_DSR) line_info()
3487 if (info->serial_signals & SerialSignal_DCD) line_info()
3489 if (info->serial_signals & SerialSignal_RI) line_info()
3492 if (info->params.mode == MGSL_MODE_HDLC || line_info()
3493 info->params.mode == MGSL_MODE_RAW ) { line_info()
3495 info->icount.txok, info->icount.rxok); line_info()
3496 if (info->icount.txunder) line_info()
3497 seq_printf(m, " txunder:%d", info->icount.txunder); line_info()
3498 if (info->icount.txabort) line_info()
3499 seq_printf(m, " txabort:%d", info->icount.txabort); line_info()
3500 if (info->icount.rxshort) line_info()
3501 seq_printf(m, " rxshort:%d", info->icount.rxshort); line_info()
3502 if (info->icount.rxlong) line_info()
3503 seq_printf(m, " rxlong:%d", info->icount.rxlong); line_info()
3504 if (info->icount.rxover) line_info()
3505 seq_printf(m, " rxover:%d", info->icount.rxover); line_info()
3506 if (info->icount.rxcrc) line_info()
3507 seq_printf(m, " rxcrc:%d", info->icount.rxcrc); line_info()
3510 info->icount.tx, info->icount.rx); line_info()
3511 if (info->icount.frame) line_info()
3512 seq_printf(m, " fe:%d", info->icount.frame); line_info()
3513 if (info->icount.parity) line_info()
3514 seq_printf(m, " pe:%d", info->icount.parity); line_info()
3515 if (info->icount.brk) line_info()
3516 seq_printf(m, " brk:%d", info->icount.brk); line_info()
3517 if (info->icount.overrun) line_info()
3518 seq_printf(m, " oe:%d", info->icount.overrun); line_info()
3525 info->tx_active,info->bh_requested,info->bh_running, line_info()
3526 info->pending_bh); line_info()
3528 spin_lock_irqsave(&info->irq_spinlock,flags); line_info()
3530 u16 Tcsr = usc_InReg( info, TCSR ); line_info()
3531 u16 Tdmr = usc_InDmaReg( info, TDMR ); line_info()
3532 u16 Ticr = usc_InReg( info, TICR ); line_info()
3533 u16 Rscr = usc_InReg( info, RCSR ); line_info()
3534 u16 Rdmr = usc_InDmaReg( info, RDMR ); line_info()
3535 u16 Ricr = usc_InReg( info, RICR ); line_info()
3536 u16 Icr = usc_InReg( info, ICR ); line_info()
3537 u16 Dccr = usc_InReg( info, DCCR ); line_info()
3538 u16 Tmr = usc_InReg( info, TMR ); line_info()
3539 u16 Tccr = usc_InReg( info, TCCR ); line_info()
3540 u16 Ccar = inw( info->io_base + CCAR ); line_info()
3545 spin_unlock_irqrestore(&info->irq_spinlock,flags); line_info()
3551 struct mgsl_struct *info; mgsl_proc_show() local
3555 info = mgsl_device_list; mgsl_proc_show()
3556 while( info ) { mgsl_proc_show()
3557 line_info(m, info); mgsl_proc_show()
3558 info = info->next_device; mgsl_proc_show()
3581 * Arguments: info pointer to device instance data
3584 static int mgsl_allocate_dma_buffers(struct mgsl_struct *info) mgsl_allocate_dma_buffers() argument
3588 info->last_mem_alloc = 0; mgsl_allocate_dma_buffers()
3595 BuffersPerFrame = (unsigned short)(info->max_frame_size/DMABUFFERSIZE); mgsl_allocate_dma_buffers()
3596 if ( info->max_frame_size % DMABUFFERSIZE ) mgsl_allocate_dma_buffers()
3599 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { mgsl_allocate_dma_buffers()
3622 info->tx_buffer_count = info->num_tx_dma_buffers * BuffersPerFrame; mgsl_allocate_dma_buffers()
3623 info->rx_buffer_count = 62 - info->tx_buffer_count; mgsl_allocate_dma_buffers()
3635 info->tx_buffer_count = info->num_tx_dma_buffers * BuffersPerFrame; mgsl_allocate_dma_buffers()
3636 info->rx_buffer_count = (BuffersPerFrame * MAXRXFRAMES) + 6; mgsl_allocate_dma_buffers()
3643 if ( (info->tx_buffer_count + info->rx_buffer_count) > 62 ) mgsl_allocate_dma_buffers()
3644 info->rx_buffer_count = 62 - info->tx_buffer_count; mgsl_allocate_dma_buffers()
3650 __FILE__,__LINE__, info->tx_buffer_count,info->rx_buffer_count); mgsl_allocate_dma_buffers()
3652 if ( mgsl_alloc_buffer_list_memory( info ) < 0 || mgsl_allocate_dma_buffers()
3653 mgsl_alloc_frame_memory(info, info->rx_buffer_list, info->rx_buffer_count) < 0 || mgsl_allocate_dma_buffers()
3654 mgsl_alloc_frame_memory(info, info->tx_buffer_list, info->tx_buffer_count) < 0 || mgsl_allocate_dma_buffers()
3655 mgsl_alloc_intermediate_rxbuffer_memory(info) < 0 || mgsl_allocate_dma_buffers()
3656 mgsl_alloc_intermediate_txbuffer_memory(info) < 0 ) { mgsl_allocate_dma_buffers()
3661 mgsl_reset_rx_dma_buffers( info ); mgsl_allocate_dma_buffers()
3662 mgsl_reset_tx_dma_buffers( info ); mgsl_allocate_dma_buffers()
3676 * (plus some other info about the buffer).
3688 * Arguments: info pointer to device instance data
3691 static int mgsl_alloc_buffer_list_memory( struct mgsl_struct *info ) mgsl_alloc_buffer_list_memory()
3695 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { mgsl_alloc_buffer_list_memory()
3697 info->buffer_list = info->memory_base + info->last_mem_alloc; mgsl_alloc_buffer_list_memory()
3698 info->buffer_list_phys = info->last_mem_alloc; mgsl_alloc_buffer_list_memory()
3699 info->last_mem_alloc += BUFFERLISTSIZE; mgsl_alloc_buffer_list_memory()
3707 info->buffer_list = dma_alloc_coherent(NULL, BUFFERLISTSIZE, &info->buffer_list_dma_addr, GFP_KERNEL); mgsl_alloc_buffer_list_memory()
3708 if (info->buffer_list == NULL) mgsl_alloc_buffer_list_memory()
3710 info->buffer_list_phys = (u32)(info->buffer_list_dma_addr); mgsl_alloc_buffer_list_memory()
3715 memset( info->buffer_list, 0, BUFFERLISTSIZE ); mgsl_alloc_buffer_list_memory()
3720 info->rx_buffer_list = (DMABUFFERENTRY *)info->buffer_list; mgsl_alloc_buffer_list_memory()
3721 info->tx_buffer_list = (DMABUFFERENTRY *)info->buffer_list; mgsl_alloc_buffer_list_memory()
3722 info->tx_buffer_list += info->rx_buffer_count; mgsl_alloc_buffer_list_memory()
3733 for ( i = 0; i < info->rx_buffer_count; i++ ) { mgsl_alloc_buffer_list_memory()
3735 info->rx_buffer_list[i].phys_entry = mgsl_alloc_buffer_list_memory()
3736 info->buffer_list_phys + (i * sizeof(DMABUFFERENTRY)); mgsl_alloc_buffer_list_memory()
3741 info->rx_buffer_list[i].link = info->buffer_list_phys; mgsl_alloc_buffer_list_memory()
3743 if ( i < info->rx_buffer_count - 1 ) mgsl_alloc_buffer_list_memory()
3744 info->rx_buffer_list[i].link += (i + 1) * sizeof(DMABUFFERENTRY); mgsl_alloc_buffer_list_memory()
3747 for ( i = 0; i < info->tx_buffer_count; i++ ) { mgsl_alloc_buffer_list_memory()
3749 info->tx_buffer_list[i].phys_entry = info->buffer_list_phys + mgsl_alloc_buffer_list_memory()
3750 ((info->rx_buffer_count + i) * sizeof(DMABUFFERENTRY)); mgsl_alloc_buffer_list_memory()
3755 info->tx_buffer_list[i].link = info->buffer_list_phys + mgsl_alloc_buffer_list_memory()
3756 info->rx_buffer_count * sizeof(DMABUFFERENTRY); mgsl_alloc_buffer_list_memory()
3758 if ( i < info->tx_buffer_count - 1 ) mgsl_alloc_buffer_list_memory()
3759 info->tx_buffer_list[i].link += (i + 1) * sizeof(DMABUFFERENTRY); mgsl_alloc_buffer_list_memory()
3775 static void mgsl_free_buffer_list_memory( struct mgsl_struct *info ) mgsl_free_buffer_list_memory()
3777 if (info->buffer_list && info->bus_type != MGSL_BUS_TYPE_PCI) mgsl_free_buffer_list_memory()
3778 dma_free_coherent(NULL, BUFFERLISTSIZE, info->buffer_list, info->buffer_list_dma_addr); mgsl_free_buffer_list_memory()
3780 info->buffer_list = NULL; mgsl_free_buffer_list_memory()
3781 info->rx_buffer_list = NULL; mgsl_free_buffer_list_memory()
3782 info->tx_buffer_list = NULL; mgsl_free_buffer_list_memory()
3796 * info pointer to device instance data
3802 static int mgsl_alloc_frame_memory(struct mgsl_struct *info,DMABUFFERENTRY *BufferList,int Buffercount) mgsl_alloc_frame_memory() argument
3810 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { mgsl_alloc_frame_memory()
3812 BufferList[i].virt_addr = info->memory_base + info->last_mem_alloc; mgsl_alloc_frame_memory()
3813 phys_addr = info->last_mem_alloc; mgsl_alloc_frame_memory()
3814 info->last_mem_alloc += DMABUFFERSIZE; mgsl_alloc_frame_memory()
3837 * info pointer to device instance data
3843 static void mgsl_free_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *BufferList, int Buffercount) mgsl_free_frame_memory() argument
3850 if ( info->bus_type != MGSL_BUS_TYPE_PCI ) mgsl_free_frame_memory()
3863 * Arguments: info pointer to device instance data
3866 static void mgsl_free_dma_buffers( struct mgsl_struct *info ) mgsl_free_dma_buffers()
3868 mgsl_free_frame_memory( info, info->rx_buffer_list, info->rx_buffer_count ); mgsl_free_dma_buffers()
3869 mgsl_free_frame_memory( info, info->tx_buffer_list, info->tx_buffer_count ); mgsl_free_dma_buffers()
3870 mgsl_free_buffer_list_memory( info ); mgsl_free_dma_buffers()
3883 * info pointer to device instance data
3887 static int mgsl_alloc_intermediate_rxbuffer_memory(struct mgsl_struct *info) mgsl_alloc_intermediate_rxbuffer_memory() argument
3889 info->intermediate_rxbuffer = kmalloc(info->max_frame_size, GFP_KERNEL | GFP_DMA); mgsl_alloc_intermediate_rxbuffer_memory()
3890 if ( info->intermediate_rxbuffer == NULL ) mgsl_alloc_intermediate_rxbuffer_memory()
3893 info->flag_buf = kzalloc(info->max_frame_size, GFP_KERNEL); mgsl_alloc_intermediate_rxbuffer_memory()
3894 if (!info->flag_buf) { mgsl_alloc_intermediate_rxbuffer_memory()
3895 kfree(info->intermediate_rxbuffer); mgsl_alloc_intermediate_rxbuffer_memory()
3896 info->intermediate_rxbuffer = NULL; mgsl_alloc_intermediate_rxbuffer_memory()
3909 * info pointer to device instance data
3913 static void mgsl_free_intermediate_rxbuffer_memory(struct mgsl_struct *info) mgsl_free_intermediate_rxbuffer_memory() argument
3915 kfree(info->intermediate_rxbuffer); mgsl_free_intermediate_rxbuffer_memory()
3916 info->intermediate_rxbuffer = NULL; mgsl_free_intermediate_rxbuffer_memory()
3917 kfree(info->flag_buf); mgsl_free_intermediate_rxbuffer_memory()
3918 info->flag_buf = NULL; mgsl_free_intermediate_rxbuffer_memory()
3931 * info pointer to device instance data
3935 static int mgsl_alloc_intermediate_txbuffer_memory(struct mgsl_struct *info) mgsl_alloc_intermediate_txbuffer_memory() argument
3941 info->device_name, __FILE__,__LINE__,info->num_tx_holding_buffers); mgsl_alloc_intermediate_txbuffer_memory()
3943 memset(info->tx_holding_buffers,0,sizeof(info->tx_holding_buffers)); mgsl_alloc_intermediate_txbuffer_memory()
3945 for ( i=0; i<info->num_tx_holding_buffers; ++i) { mgsl_alloc_intermediate_txbuffer_memory()
3946 info->tx_holding_buffers[i].buffer = mgsl_alloc_intermediate_txbuffer_memory()
3947 kmalloc(info->max_frame_size, GFP_KERNEL); mgsl_alloc_intermediate_txbuffer_memory()
3948 if (info->tx_holding_buffers[i].buffer == NULL) { mgsl_alloc_intermediate_txbuffer_memory()
3950 kfree(info->tx_holding_buffers[i].buffer); mgsl_alloc_intermediate_txbuffer_memory()
3951 info->tx_holding_buffers[i].buffer = NULL; mgsl_alloc_intermediate_txbuffer_memory()
3967 * info pointer to device instance data
3971 static void mgsl_free_intermediate_txbuffer_memory(struct mgsl_struct *info) mgsl_free_intermediate_txbuffer_memory() argument
3975 for ( i=0; i<info->num_tx_holding_buffers; ++i ) { mgsl_free_intermediate_txbuffer_memory()
3976 kfree(info->tx_holding_buffers[i].buffer); mgsl_free_intermediate_txbuffer_memory()
3977 info->tx_holding_buffers[i].buffer = NULL; mgsl_free_intermediate_txbuffer_memory()
3980 info->get_tx_holding_index = 0; mgsl_free_intermediate_txbuffer_memory()
3981 info->put_tx_holding_index = 0; mgsl_free_intermediate_txbuffer_memory()
3982 info->tx_holding_count = 0; mgsl_free_intermediate_txbuffer_memory()
3995 * info pointer to device instance data
4001 static bool load_next_tx_holding_buffer(struct mgsl_struct *info) load_next_tx_holding_buffer() argument
4005 if ( info->tx_holding_count ) { load_next_tx_holding_buffer()
4010 &info->tx_holding_buffers[info->get_tx_holding_index]; load_next_tx_holding_buffer()
4011 int num_free = num_free_tx_dma_buffers(info); load_next_tx_holding_buffer()
4017 info->xmit_cnt = ptx->buffer_size; load_next_tx_holding_buffer()
4018 mgsl_load_tx_dma_buffer(info,ptx->buffer,ptx->buffer_size); load_next_tx_holding_buffer()
4020 --info->tx_holding_count; load_next_tx_holding_buffer()
4021 if ( ++info->get_tx_holding_index >= info->num_tx_holding_buffers) load_next_tx_holding_buffer()
4022 info->get_tx_holding_index=0; load_next_tx_holding_buffer()
4025 mod_timer(&info->tx_timer, jiffies + msecs_to_jiffies(5000)); load_next_tx_holding_buffer()
4041 * info pointer to device instance data
4047 static int save_tx_buffer_request(struct mgsl_struct *info,const char *Buffer, unsigned int BufferSize) save_tx_buffer_request() argument
4051 if ( info->tx_holding_count >= info->num_tx_holding_buffers ) { save_tx_buffer_request()
4055 ptx = &info->tx_holding_buffers[info->put_tx_holding_index]; save_tx_buffer_request()
4059 ++info->tx_holding_count; save_tx_buffer_request()
4060 if ( ++info->put_tx_holding_index >= info->num_tx_holding_buffers) save_tx_buffer_request()
4061 info->put_tx_holding_index=0; save_tx_buffer_request()
4066 static int mgsl_claim_resources(struct mgsl_struct *info) mgsl_claim_resources() argument
4068 if (request_region(info->io_base,info->io_addr_size,"synclink") == NULL) { mgsl_claim_resources()
4070 __FILE__,__LINE__,info->device_name, info->io_base); mgsl_claim_resources()
4073 info->io_addr_requested = true; mgsl_claim_resources()
4075 if ( request_irq(info->irq_level,mgsl_interrupt,info->irq_flags, mgsl_claim_resources()
4076 info->device_name, info ) < 0 ) { mgsl_claim_resources()
4078 __FILE__,__LINE__,info->device_name, info->irq_level ); mgsl_claim_resources()
4081 info->irq_requested = true; mgsl_claim_resources()
4083 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { mgsl_claim_resources()
4084 if (request_mem_region(info->phys_memory_base,0x40000,"synclink") == NULL) { mgsl_claim_resources()
4086 __FILE__,__LINE__,info->device_name, info->phys_memory_base); mgsl_claim_resources()
4089 info->shared_mem_requested = true; mgsl_claim_resources()
4090 if (request_mem_region(info->phys_lcr_base + info->lcr_offset,128,"synclink") == NULL) { mgsl_claim_resources()
4092 __FILE__,__LINE__,info->device_name, info->phys_lcr_base + info->lcr_offset); mgsl_claim_resources()
4095 info->lcr_mem_requested = true; mgsl_claim_resources()
4097 info->memory_base = ioremap_nocache(info->phys_memory_base, mgsl_claim_resources()
4099 if (!info->memory_base) { mgsl_claim_resources()
4101 __FILE__,__LINE__,info->device_name, info->phys_memory_base ); mgsl_claim_resources()
4105 if ( !mgsl_memory_test(info) ) { mgsl_claim_resources()
4107 __FILE__,__LINE__,info->device_name, info->phys_memory_base ); mgsl_claim_resources()
4111 info->lcr_base = ioremap_nocache(info->phys_lcr_base, mgsl_claim_resources()
4113 if (!info->lcr_base) { mgsl_claim_resources()
4115 __FILE__,__LINE__,info->device_name, info->phys_lcr_base ); mgsl_claim_resources()
4118 info->lcr_base += info->lcr_offset; mgsl_claim_resources()
4123 if (request_dma(info->dma_level,info->device_name) < 0){ mgsl_claim_resources()
4125 __FILE__,__LINE__,info->device_name, info->dma_level ); mgsl_claim_resources()
4126 mgsl_release_resources( info ); mgsl_claim_resources()
4129 info->dma_requested = true; mgsl_claim_resources()
4132 set_dma_mode(info->dma_level,DMA_MODE_CASCADE); mgsl_claim_resources()
4133 enable_dma(info->dma_level); mgsl_claim_resources()
4136 if ( mgsl_allocate_dma_buffers(info) < 0 ) { mgsl_claim_resources()
4138 __FILE__,__LINE__,info->device_name, info->dma_level ); mgsl_claim_resources()
4144 mgsl_release_resources(info); mgsl_claim_resources()
4149 static void mgsl_release_resources(struct mgsl_struct *info) mgsl_release_resources() argument
4153 __FILE__,__LINE__,info->device_name ); mgsl_release_resources()
4155 if ( info->irq_requested ) { mgsl_release_resources()
4156 free_irq(info->irq_level, info); mgsl_release_resources()
4157 info->irq_requested = false; mgsl_release_resources()
4159 if ( info->dma_requested ) { mgsl_release_resources()
4160 disable_dma(info->dma_level); mgsl_release_resources()
4161 free_dma(info->dma_level); mgsl_release_resources()
4162 info->dma_requested = false; mgsl_release_resources()
4164 mgsl_free_dma_buffers(info); mgsl_release_resources()
4165 mgsl_free_intermediate_rxbuffer_memory(info); mgsl_release_resources()
4166 mgsl_free_intermediate_txbuffer_memory(info); mgsl_release_resources()
4168 if ( info->io_addr_requested ) { mgsl_release_resources()
4169 release_region(info->io_base,info->io_addr_size); mgsl_release_resources()
4170 info->io_addr_requested = false; mgsl_release_resources()
4172 if ( info->shared_mem_requested ) { mgsl_release_resources()
4173 release_mem_region(info->phys_memory_base,0x40000); mgsl_release_resources()
4174 info->shared_mem_requested = false; mgsl_release_resources()
4176 if ( info->lcr_mem_requested ) { mgsl_release_resources()
4177 release_mem_region(info->phys_lcr_base + info->lcr_offset,128); mgsl_release_resources()
4178 info->lcr_mem_requested = false; mgsl_release_resources()
4180 if (info->memory_base){ mgsl_release_resources()
4181 iounmap(info->memory_base); mgsl_release_resources()
4182 info->memory_base = NULL; mgsl_release_resources()
4184 if (info->lcr_base){ mgsl_release_resources()
4185 iounmap(info->lcr_base - info->lcr_offset); mgsl_release_resources()
4186 info->lcr_base = NULL; mgsl_release_resources()
4191 __FILE__,__LINE__,info->device_name ); mgsl_release_resources()
4200 * Arguments: info pointer to device instance data
4203 static void mgsl_add_device( struct mgsl_struct *info ) mgsl_add_device()
4205 info->next_device = NULL; mgsl_add_device()
4206 info->line = mgsl_device_count; mgsl_add_device()
4207 sprintf(info->device_name,"ttySL%d",info->line); mgsl_add_device()
4209 if (info->line < MAX_TOTAL_DEVICES) { mgsl_add_device()
4210 if (maxframe[info->line]) mgsl_add_device()
4211 info->max_frame_size = maxframe[info->line]; mgsl_add_device()
4213 if (txdmabufs[info->line]) { mgsl_add_device()
4214 info->num_tx_dma_buffers = txdmabufs[info->line]; mgsl_add_device()
4215 if (info->num_tx_dma_buffers < 1) mgsl_add_device()
4216 info->num_tx_dma_buffers = 1; mgsl_add_device()
4219 if (txholdbufs[info->line]) { mgsl_add_device()
4220 info->num_tx_holding_buffers = txholdbufs[info->line]; mgsl_add_device()
4221 if (info->num_tx_holding_buffers < 1) mgsl_add_device()
4222 info->num_tx_holding_buffers = 1; mgsl_add_device()
4223 else if (info->num_tx_holding_buffers > MAX_TX_HOLDING_BUFFERS) mgsl_add_device()
4224 info->num_tx_holding_buffers = MAX_TX_HOLDING_BUFFERS; mgsl_add_device()
4231 mgsl_device_list = info; mgsl_add_device()
4236 current_dev->next_device = info; mgsl_add_device()
4239 if ( info->max_frame_size < 4096 ) mgsl_add_device()
4240 info->max_frame_size = 4096; mgsl_add_device()
4241 else if ( info->max_frame_size > 65535 ) mgsl_add_device()
4242 info->max_frame_size = 65535; mgsl_add_device()
4244 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { mgsl_add_device()
4246 info->hw_version + 1, info->device_name, info->io_base, info->irq_level, mgsl_add_device()
4247 info->phys_memory_base, info->phys_lcr_base, mgsl_add_device()
4248 info->max_frame_size ); mgsl_add_device()
4251 info->device_name, info->io_base, info->irq_level, info->dma_level, mgsl_add_device()
4252 info->max_frame_size ); mgsl_add_device()
4256 hdlcdev_init(info); mgsl_add_device()
4276 struct mgsl_struct *info; mgsl_allocate_device() local
4278 info = kzalloc(sizeof(struct mgsl_struct), mgsl_allocate_device()
4281 if (!info) { mgsl_allocate_device()
4284 tty_port_init(&info->port); mgsl_allocate_device()
4285 info->port.ops = &mgsl_port_ops; mgsl_allocate_device()
4286 info->magic = MGSL_MAGIC; mgsl_allocate_device()
4287 INIT_WORK(&info->task, mgsl_bh_handler); mgsl_allocate_device()
4288 info->max_frame_size = 4096; mgsl_allocate_device()
4289 info->port.close_delay = 5*HZ/10; mgsl_allocate_device()
4290 info->port.closing_wait = 30*HZ; mgsl_allocate_device()
4291 init_waitqueue_head(&info->status_event_wait_q); mgsl_allocate_device()
4292 init_waitqueue_head(&info->event_wait_q); mgsl_allocate_device()
4293 spin_lock_init(&info->irq_spinlock); mgsl_allocate_device()
4294 spin_lock_init(&info->netlock); mgsl_allocate_device()
4295 memcpy(&info->params,&default_params,sizeof(MGSL_PARAMS)); mgsl_allocate_device()
4296 info->idle_mode = HDLC_TXIDLE_FLAGS; mgsl_allocate_device()
4297 info->num_tx_dma_buffers = 1; mgsl_allocate_device()
4298 info->num_tx_holding_buffers = 0; mgsl_allocate_device()
4301 return info; mgsl_allocate_device()
4373 struct mgsl_struct *info; mgsl_enum_isa_devices() local
4383 info = mgsl_allocate_device(); mgsl_enum_isa_devices()
4384 if ( !info ) { mgsl_enum_isa_devices()
4391 /* Copy user configuration info to device instance data */ mgsl_enum_isa_devices()
4392 info->io_base = (unsigned int)io[i]; mgsl_enum_isa_devices()
4393 info->irq_level = (unsigned int)irq[i]; mgsl_enum_isa_devices()
4394 info->irq_level = irq_canonicalize(info->irq_level); mgsl_enum_isa_devices()
4395 info->dma_level = (unsigned int)dma[i]; mgsl_enum_isa_devices()
4396 info->bus_type = MGSL_BUS_TYPE_ISA; mgsl_enum_isa_devices()
4397 info->io_addr_size = 16; mgsl_enum_isa_devices()
4398 info->irq_flags = 0; mgsl_enum_isa_devices()
4400 mgsl_add_device( info ); mgsl_enum_isa_devices()
4407 struct mgsl_struct *info; synclink_cleanup() local
4419 info = mgsl_device_list; synclink_cleanup()
4420 while(info) { synclink_cleanup()
4422 hdlcdev_exit(info); synclink_cleanup()
4424 mgsl_release_resources(info); synclink_cleanup()
4425 tmp = info; synclink_cleanup()
4426 info = info->next_device; synclink_cleanup()
4484 * info pointer to device information structure
4491 static void usc_RTCmd( struct mgsl_struct *info, u16 Cmd ) usc_RTCmd() argument
4496 outw( Cmd + info->loopback_bits, info->io_base + CCAR ); usc_RTCmd()
4499 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_RTCmd()
4500 inw( info->io_base + CCAR ); usc_RTCmd()
4511 * info pointer to device information structure
4518 static void usc_DmaCmd( struct mgsl_struct *info, u16 Cmd ) usc_DmaCmd() argument
4521 outw( Cmd + info->mbre_bit, info->io_base ); usc_DmaCmd()
4524 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_DmaCmd()
4525 inw( info->io_base ); usc_DmaCmd()
4536 * info pointer to device info structure
4545 static void usc_OutDmaReg( struct mgsl_struct *info, u16 RegAddr, u16 RegValue ) usc_OutDmaReg() argument
4550 outw( RegAddr + info->mbre_bit, info->io_base ); usc_OutDmaReg()
4551 outw( RegValue, info->io_base ); usc_OutDmaReg()
4554 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_OutDmaReg()
4555 inw( info->io_base ); usc_OutDmaReg()
4566 * info pointer to device info structure
4574 static u16 usc_InDmaReg( struct mgsl_struct *info, u16 RegAddr ) usc_InDmaReg() argument
4579 outw( RegAddr + info->mbre_bit, info->io_base ); usc_InDmaReg()
4580 return inw( info->io_base ); usc_InDmaReg()
4592 * info pointer to device info structure
4601 static void usc_OutReg( struct mgsl_struct *info, u16 RegAddr, u16 RegValue ) usc_OutReg() argument
4603 outw( RegAddr + info->loopback_bits, info->io_base + CCAR ); usc_OutReg()
4604 outw( RegValue, info->io_base + CCAR ); usc_OutReg()
4607 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_OutReg()
4608 inw( info->io_base + CCAR ); usc_OutReg()
4619 * info pointer to device extension
4626 static u16 usc_InReg( struct mgsl_struct *info, u16 RegAddr ) usc_InReg() argument
4628 outw( RegAddr + info->loopback_bits, info->io_base + CCAR ); usc_InReg()
4629 return inw( info->io_base + CCAR ); usc_InReg()
4637 * Arguments: info pointer to device instance data
4640 static void usc_set_sdlc_mode( struct mgsl_struct *info ) usc_set_sdlc_mode()
4654 usc_OutReg(info,TMCR,0x1f); usc_set_sdlc_mode()
4655 RegValue=usc_InReg(info,TMDR); usc_set_sdlc_mode()
4658 if ( info->params.flags & HDLC_FLAG_HDLC_LOOPMODE ) usc_set_sdlc_mode()
4692 if (info->params.mode == MGSL_MODE_RAW) { usc_set_sdlc_mode()
4695 usc_OutReg( info, IOCR, /* Set IOCR DCD is RxSync Detect Input */ usc_set_sdlc_mode()
4696 (unsigned short)((usc_InReg(info, IOCR) & ~(BIT13|BIT12)) | BIT12)); usc_set_sdlc_mode()
4716 if ( info->params.flags & HDLC_FLAG_UNDERRUN_ABORT15 ) usc_set_sdlc_mode()
4718 else if ( info->params.flags & HDLC_FLAG_UNDERRUN_FLAG ) usc_set_sdlc_mode()
4720 else if ( info->params.flags & HDLC_FLAG_UNDERRUN_CRC ) usc_set_sdlc_mode()
4724 if ( info->params.preamble != HDLC_PREAMBLE_PATTERN_NONE ) usc_set_sdlc_mode()
4728 if ( info->params.mode == MGSL_MODE_HDLC && usc_set_sdlc_mode()
4729 (info->params.flags & HDLC_FLAG_SHARE_ZERO) ) usc_set_sdlc_mode()
4732 if ( info->params.addr_filter != 0xff ) usc_set_sdlc_mode()
4735 usc_OutReg( info, RSR, info->params.addr_filter ); usc_set_sdlc_mode()
4739 usc_OutReg( info, CMR, RegValue ); usc_set_sdlc_mode()
4740 info->cmr_value = RegValue; usc_set_sdlc_mode()
4759 switch ( info->params.encoding ) { usc_set_sdlc_mode()
4769 if ( (info->params.crc_type & HDLC_CRC_MASK) == HDLC_CRC_16_CCITT ) usc_set_sdlc_mode()
4771 else if ( (info->params.crc_type & HDLC_CRC_MASK) == HDLC_CRC_32_CCITT ) usc_set_sdlc_mode()
4774 usc_OutReg( info, RMR, RegValue ); usc_set_sdlc_mode()
4783 usc_OutReg( info, RCLR, RCLRVALUE ); usc_set_sdlc_mode()
4785 usc_RCmd( info, RCmd_SelectRicrdma_level ); usc_set_sdlc_mode()
4805 RegValue = usc_InReg( info, RICR ) & 0xc0; usc_set_sdlc_mode()
4807 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_set_sdlc_mode()
4808 usc_OutReg( info, RICR, (u16)(0x030a | RegValue) ); usc_set_sdlc_mode()
4810 usc_OutReg( info, RICR, (u16)(0x140a | RegValue) ); usc_set_sdlc_mode()
4814 usc_UnlatchRxstatusBits( info, RXSTATUS_ALL ); usc_set_sdlc_mode()
4815 usc_ClearIrqPendingBits( info, RECEIVE_STATUS ); usc_set_sdlc_mode()
4834 switch ( info->params.encoding ) { usc_set_sdlc_mode()
4844 if ( (info->params.crc_type & HDLC_CRC_MASK) == HDLC_CRC_16_CCITT ) usc_set_sdlc_mode()
4846 else if ( (info->params.crc_type & HDLC_CRC_MASK) == HDLC_CRC_32_CCITT ) usc_set_sdlc_mode()
4849 usc_OutReg( info, TMR, RegValue ); usc_set_sdlc_mode()
4851 usc_set_txidle( info ); usc_set_sdlc_mode()
4854 usc_TCmd( info, TCmd_SelectTicrdma_level ); usc_set_sdlc_mode()
4871 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_set_sdlc_mode()
4872 usc_OutReg( info, TICR, 0x0736 ); usc_set_sdlc_mode()
4874 usc_OutReg( info, TICR, 0x1436 ); usc_set_sdlc_mode()
4876 usc_UnlatchTxstatusBits( info, TXSTATUS_ALL ); usc_set_sdlc_mode()
4877 usc_ClearIrqPendingBits( info, TRANSMIT_STATUS ); usc_set_sdlc_mode()
4896 info->tcsr_value = 0; usc_set_sdlc_mode()
4899 info->tcsr_value |= TCSR_UNDERWAIT; usc_set_sdlc_mode()
4901 usc_OutReg( info, TCSR, info->tcsr_value ); usc_set_sdlc_mode()
4918 if ( info->params.flags & HDLC_FLAG_RXC_DPLL ) usc_set_sdlc_mode()
4920 else if ( info->params.flags & HDLC_FLAG_RXC_BRG ) usc_set_sdlc_mode()
4922 else if ( info->params.flags & HDLC_FLAG_RXC_TXCPIN) usc_set_sdlc_mode()
4927 if ( info->params.flags & HDLC_FLAG_TXC_DPLL ) usc_set_sdlc_mode()
4929 else if ( info->params.flags & HDLC_FLAG_TXC_BRG ) usc_set_sdlc_mode()
4931 else if ( info->params.flags & HDLC_FLAG_TXC_RXCPIN) usc_set_sdlc_mode()
4936 usc_OutReg( info, CMCR, RegValue ); usc_set_sdlc_mode()
4956 if ( info->params.flags & (HDLC_FLAG_RXC_DPLL | HDLC_FLAG_TXC_DPLL) ) { usc_set_sdlc_mode()
4964 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_set_sdlc_mode()
4969 if ( info->params.flags & HDLC_FLAG_DPLL_DIV16 ) { usc_set_sdlc_mode()
4973 else if ( info->params.flags & HDLC_FLAG_DPLL_DIV8 ) { usc_set_sdlc_mode()
4994 if ( info->params.clock_speed ) usc_set_sdlc_mode()
4996 Tc = (u16)((XtalSpeed/DpllDivisor)/info->params.clock_speed); usc_set_sdlc_mode()
4997 if ( !((((XtalSpeed/DpllDivisor) % info->params.clock_speed) * 2) usc_set_sdlc_mode()
4998 / info->params.clock_speed) ) usc_set_sdlc_mode()
5006 usc_OutReg( info, TC1R, Tc ); usc_set_sdlc_mode()
5010 switch ( info->params.encoding ) { usc_set_sdlc_mode()
5022 usc_OutReg( info, HCR, RegValue ); usc_set_sdlc_mode()
5043 usc_OutReg( info, CCSR, 0x1020 ); usc_set_sdlc_mode()
5046 if ( info->params.flags & HDLC_FLAG_AUTO_CTS ) { usc_set_sdlc_mode()
5047 usc_OutReg( info, SICR, usc_set_sdlc_mode()
5048 (u16)(usc_InReg(info,SICR) | SICR_CTS_INACTIVE) ); usc_set_sdlc_mode()
5053 usc_EnableMasterIrqBit( info ); usc_set_sdlc_mode()
5055 usc_ClearIrqPendingBits( info, RECEIVE_STATUS | RECEIVE_DATA | usc_set_sdlc_mode()
5059 usc_OutReg(info, SICR, (u16)(usc_InReg(info,SICR) | BIT3)); usc_set_sdlc_mode()
5060 usc_EnableInterrupts(info, MISC); usc_set_sdlc_mode()
5062 info->mbre_bit = 0; usc_set_sdlc_mode()
5063 outw( 0, info->io_base ); /* clear Master Bus Enable (DCAR) */ usc_set_sdlc_mode()
5064 usc_DmaCmd( info, DmaCmd_ResetAllChannels ); /* disable both DMA channels */ usc_set_sdlc_mode()
5065 info->mbre_bit = BIT8; usc_set_sdlc_mode()
5066 outw( BIT8, info->io_base ); /* set Master Bus Enable (DCAR) */ usc_set_sdlc_mode()
5068 if (info->bus_type == MGSL_BUS_TYPE_ISA) { usc_set_sdlc_mode()
5071 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT15) & ~BIT14)); usc_set_sdlc_mode()
5096 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { usc_set_sdlc_mode()
5098 usc_OutDmaReg( info, DCR, 0xa00b ); usc_set_sdlc_mode()
5101 usc_OutDmaReg( info, DCR, 0x800b ); usc_set_sdlc_mode()
5117 usc_OutDmaReg( info, RDMR, 0xf200 ); usc_set_sdlc_mode()
5133 usc_OutDmaReg( info, TDMR, 0xf200 ); usc_set_sdlc_mode()
5149 usc_OutDmaReg( info, DICR, 0x9000 ); usc_set_sdlc_mode()
5151 usc_InDmaReg( info, RDMR ); /* clear pending receive DMA IRQ bits */ usc_set_sdlc_mode()
5152 usc_InDmaReg( info, TDMR ); /* clear pending transmit DMA IRQ bits */ usc_set_sdlc_mode()
5153 usc_OutDmaReg( info, CDIR, 0x0303 ); /* clear IUS and Pending for Tx and Rx */ usc_set_sdlc_mode()
5171 switch ( info->params.preamble_length ) { usc_set_sdlc_mode()
5177 switch ( info->params.preamble ) { usc_set_sdlc_mode()
5184 usc_OutReg( info, CCR, RegValue ); usc_set_sdlc_mode()
5194 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { usc_set_sdlc_mode()
5196 usc_OutDmaReg( info, BDCR, 0x0000 ); usc_set_sdlc_mode()
5199 usc_OutDmaReg( info, BDCR, 0x2000 ); usc_set_sdlc_mode()
5201 usc_stop_transmitter(info); usc_set_sdlc_mode()
5202 usc_stop_receiver(info); usc_set_sdlc_mode()
5212 * Arguments: info pointer to device instance data
5216 static void usc_enable_loopback(struct mgsl_struct *info, int enable) usc_enable_loopback() argument
5220 usc_OutReg(info,IOCR,usc_InReg(info,IOCR) | (BIT7 | BIT6)); usc_enable_loopback()
5235 usc_OutReg( info, CMCR, 0x0f64 ); usc_enable_loopback()
5239 if (info->params.clock_speed) { usc_enable_loopback()
5240 if (info->bus_type == MGSL_BUS_TYPE_PCI) usc_enable_loopback()
5241 usc_OutReg(info, TC0R, (u16)((11059200/info->params.clock_speed)-1)); usc_enable_loopback()
5243 usc_OutReg(info, TC0R, (u16)((14745600/info->params.clock_speed)-1)); usc_enable_loopback()
5245 usc_OutReg(info, TC0R, (u16)8); usc_enable_loopback()
5249 usc_OutReg( info, HCR, (u16)((usc_InReg( info, HCR ) & ~BIT1) | BIT0) ); usc_enable_loopback()
5252 usc_OutReg(info, IOCR, (u16)((usc_InReg(info, IOCR) & 0xfff8) | 0x0004)); usc_enable_loopback()
5255 info->loopback_bits = 0x300; usc_enable_loopback()
5256 outw( 0x0300, info->io_base + CCAR ); usc_enable_loopback()
5259 usc_OutReg(info,IOCR,usc_InReg(info,IOCR) & ~(BIT7 | BIT6)); usc_enable_loopback()
5262 info->loopback_bits = 0; usc_enable_loopback()
5263 outw( 0,info->io_base + CCAR ); usc_enable_loopback()
5274 * info pointer to device extension
5280 static void usc_enable_aux_clock( struct mgsl_struct *info, u32 data_rate ) usc_enable_aux_clock() argument
5286 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_enable_aux_clock()
5304 usc_OutReg( info, TC0R, Tc ); usc_enable_aux_clock()
5312 usc_OutReg( info, HCR, (u16)((usc_InReg( info, HCR ) & ~BIT1) | BIT0) ); usc_enable_aux_clock()
5315 usc_OutReg( info, IOCR, (u16)((usc_InReg(info, IOCR) & 0xfff8) | 0x0004) ); usc_enable_aux_clock()
5318 usc_OutReg( info, HCR, (u16)(usc_InReg( info, HCR ) & ~BIT0) ); usc_enable_aux_clock()
5333 * info pointer to device extension
5337 static void usc_process_rxoverrun_sync( struct mgsl_struct *info ) usc_process_rxoverrun_sync()
5346 DMABUFFERENTRY *buffer_list = info->rx_buffer_list; usc_process_rxoverrun_sync()
5349 usc_DmaCmd( info, DmaCmd_PauseRxChannel ); usc_process_rxoverrun_sync()
5350 usc_RCmd( info, RCmd_EnterHuntmode ); usc_process_rxoverrun_sync()
5351 usc_RTCmd( info, RTCmd_PurgeRxFifo ); usc_process_rxoverrun_sync()
5356 frame_start_index = start_index = end_index = info->current_rx_buffer; usc_process_rxoverrun_sync()
5389 if ( end_index == info->rx_buffer_count ) usc_process_rxoverrun_sync()
5397 mgsl_reset_rx_dma_buffers( info ); usc_process_rxoverrun_sync()
5418 *((unsigned long *)&(info->rx_buffer_list[start_index++].count)) = DMABUFFERSIZE; usc_process_rxoverrun_sync()
5421 if ( start_index == info->rx_buffer_count ) usc_process_rxoverrun_sync()
5431 usc_UnlatchRxstatusBits(info,RXSTATUS_ALL); usc_process_rxoverrun_sync()
5432 usc_ClearIrqPendingBits(info, RECEIVE_DATA|RECEIVE_STATUS); usc_process_rxoverrun_sync()
5433 usc_UnlatchRxstatusBits(info, RECEIVE_DATA|RECEIVE_STATUS); usc_process_rxoverrun_sync()
5435 usc_EnableReceiver(info,DISABLE_UNCONDITIONAL); usc_process_rxoverrun_sync()
5438 usc_OutReg( info, CCSR, (u16)(usc_InReg(info,CCSR) | BIT13) ); usc_process_rxoverrun_sync()
5441 phys_addr = info->rx_buffer_list[frame_start_index].phys_entry; usc_process_rxoverrun_sync()
5442 usc_OutDmaReg( info, NRARL, (u16)phys_addr ); usc_process_rxoverrun_sync()
5443 usc_OutDmaReg( info, NRARU, (u16)(phys_addr >> 16) ); usc_process_rxoverrun_sync()
5445 usc_UnlatchRxstatusBits( info, RXSTATUS_ALL ); usc_process_rxoverrun_sync()
5446 usc_ClearIrqPendingBits( info, RECEIVE_DATA | RECEIVE_STATUS ); usc_process_rxoverrun_sync()
5447 usc_EnableInterrupts( info, RECEIVE_STATUS ); usc_process_rxoverrun_sync()
5452 usc_OutDmaReg( info, RDIAR, BIT3 | BIT2 ); usc_process_rxoverrun_sync()
5453 usc_OutDmaReg( info, DICR, (u16)(usc_InDmaReg(info,DICR) | BIT1) ); usc_process_rxoverrun_sync()
5454 usc_DmaCmd( info, DmaCmd_InitRxChannel ); usc_process_rxoverrun_sync()
5455 if ( info->params.flags & HDLC_FLAG_AUTO_DCD ) usc_process_rxoverrun_sync()
5456 usc_EnableReceiver(info,ENABLE_AUTO_DCD); usc_process_rxoverrun_sync()
5458 usc_EnableReceiver(info,ENABLE_UNCONDITIONAL); usc_process_rxoverrun_sync()
5463 usc_OutReg( info, CCSR, (u16)(usc_InReg(info,CCSR) | BIT13) ); usc_process_rxoverrun_sync()
5464 usc_RTCmd( info, RTCmd_PurgeRxFifo ); usc_process_rxoverrun_sync()
5473 * Arguments: info pointer to device instance data
5476 static void usc_stop_receiver( struct mgsl_struct *info ) usc_stop_receiver()
5480 __FILE__,__LINE__, info->device_name ); usc_stop_receiver()
5484 usc_DmaCmd( info, DmaCmd_ResetRxChannel ); usc_stop_receiver()
5486 usc_UnlatchRxstatusBits( info, RXSTATUS_ALL ); usc_stop_receiver()
5487 usc_ClearIrqPendingBits( info, RECEIVE_DATA | RECEIVE_STATUS ); usc_stop_receiver()
5488 usc_DisableInterrupts( info, RECEIVE_DATA | RECEIVE_STATUS ); usc_stop_receiver()
5490 usc_EnableReceiver(info,DISABLE_UNCONDITIONAL); usc_stop_receiver()
5493 usc_OutReg( info, CCSR, (u16)(usc_InReg(info,CCSR) | BIT13) ); usc_stop_receiver()
5494 usc_RTCmd( info, RTCmd_PurgeRxFifo ); usc_stop_receiver()
5496 info->rx_enabled = false; usc_stop_receiver()
5497 info->rx_overflow = false; usc_stop_receiver()
5498 info->rx_rcc_underrun = false; usc_stop_receiver()
5506 * Arguments: info pointer to device instance data
5509 static void usc_start_receiver( struct mgsl_struct *info ) usc_start_receiver()
5515 __FILE__,__LINE__, info->device_name ); usc_start_receiver()
5517 mgsl_reset_rx_dma_buffers( info ); usc_start_receiver()
5518 usc_stop_receiver( info ); usc_start_receiver()
5520 usc_OutReg( info, CCSR, (u16)(usc_InReg(info,CCSR) | BIT13) ); usc_start_receiver()
5521 usc_RTCmd( info, RTCmd_PurgeRxFifo ); usc_start_receiver()
5523 if ( info->params.mode == MGSL_MODE_HDLC || usc_start_receiver()
5524 info->params.mode == MGSL_MODE_RAW ) { usc_start_receiver()
5530 phys_addr = info->rx_buffer_list[0].phys_entry; usc_start_receiver()
5531 usc_OutDmaReg( info, NRARL, (u16)phys_addr ); usc_start_receiver()
5532 usc_OutDmaReg( info, NRARU, (u16)(phys_addr >> 16) ); usc_start_receiver()
5534 usc_UnlatchRxstatusBits( info, RXSTATUS_ALL ); usc_start_receiver()
5535 usc_ClearIrqPendingBits( info, RECEIVE_DATA | RECEIVE_STATUS ); usc_start_receiver()
5536 usc_EnableInterrupts( info, RECEIVE_STATUS ); usc_start_receiver()
5541 usc_OutDmaReg( info, RDIAR, BIT3 | BIT2 ); usc_start_receiver()
5542 usc_OutDmaReg( info, DICR, (u16)(usc_InDmaReg(info,DICR) | BIT1) ); usc_start_receiver()
5543 usc_DmaCmd( info, DmaCmd_InitRxChannel ); usc_start_receiver()
5544 if ( info->params.flags & HDLC_FLAG_AUTO_DCD ) usc_start_receiver()
5545 usc_EnableReceiver(info,ENABLE_AUTO_DCD); usc_start_receiver()
5547 usc_EnableReceiver(info,ENABLE_UNCONDITIONAL); usc_start_receiver()
5549 usc_UnlatchRxstatusBits(info, RXSTATUS_ALL); usc_start_receiver()
5550 usc_ClearIrqPendingBits(info, RECEIVE_DATA | RECEIVE_STATUS); usc_start_receiver()
5551 usc_EnableInterrupts(info, RECEIVE_DATA); usc_start_receiver()
5553 usc_RTCmd( info, RTCmd_PurgeRxFifo ); usc_start_receiver()
5554 usc_RCmd( info, RCmd_EnterHuntmode ); usc_start_receiver()
5556 usc_EnableReceiver(info,ENABLE_UNCONDITIONAL); usc_start_receiver()
5559 usc_OutReg( info, CCSR, 0x1020 ); usc_start_receiver()
5561 info->rx_enabled = true; usc_start_receiver()
5570 * Arguments: info pointer to device instance data
5573 static void usc_start_transmitter( struct mgsl_struct *info ) usc_start_transmitter()
5580 __FILE__,__LINE__, info->device_name ); usc_start_transmitter()
5582 if ( info->xmit_cnt ) { usc_start_transmitter()
5588 info->drop_rts_on_tx_done = false; usc_start_transmitter()
5590 if ( info->params.flags & HDLC_FLAG_AUTO_RTS ) { usc_start_transmitter()
5591 usc_get_serial_signals( info ); usc_start_transmitter()
5592 if ( !(info->serial_signals & SerialSignal_RTS) ) { usc_start_transmitter()
5593 info->serial_signals |= SerialSignal_RTS; usc_start_transmitter()
5594 usc_set_serial_signals( info ); usc_start_transmitter()
5595 info->drop_rts_on_tx_done = true; usc_start_transmitter()
5600 if ( info->params.mode == MGSL_MODE_ASYNC ) { usc_start_transmitter()
5601 if ( !info->tx_active ) { usc_start_transmitter()
5602 usc_UnlatchTxstatusBits(info, TXSTATUS_ALL); usc_start_transmitter()
5603 usc_ClearIrqPendingBits(info, TRANSMIT_STATUS + TRANSMIT_DATA); usc_start_transmitter()
5604 usc_EnableInterrupts(info, TRANSMIT_DATA); usc_start_transmitter()
5605 usc_load_txfifo(info); usc_start_transmitter()
5609 usc_DmaCmd( info, DmaCmd_ResetTxChannel ); usc_start_transmitter()
5614 FrameSize = info->tx_buffer_list[info->start_tx_dma_buffer].rcc; usc_start_transmitter()
5620 if ( info->params.mode == MGSL_MODE_RAW ) usc_start_transmitter()
5621 info->tx_buffer_list[info->start_tx_dma_buffer].rcc = 0; usc_start_transmitter()
5625 usc_OutReg( info, TCLR, (u16)FrameSize ); usc_start_transmitter()
5627 usc_RTCmd( info, RTCmd_PurgeTxFifo ); usc_start_transmitter()
5630 phys_addr = info->tx_buffer_list[info->start_tx_dma_buffer].phys_entry; usc_start_transmitter()
5631 usc_OutDmaReg( info, NTARL, (u16)phys_addr ); usc_start_transmitter()
5632 usc_OutDmaReg( info, NTARU, (u16)(phys_addr >> 16) ); usc_start_transmitter()
5634 usc_UnlatchTxstatusBits( info, TXSTATUS_ALL ); usc_start_transmitter()
5635 usc_ClearIrqPendingBits( info, TRANSMIT_STATUS ); usc_start_transmitter()
5636 usc_EnableInterrupts( info, TRANSMIT_STATUS ); usc_start_transmitter()
5638 if ( info->params.mode == MGSL_MODE_RAW && usc_start_transmitter()
5639 info->num_tx_dma_buffers > 1 ) { usc_start_transmitter()
5647 usc_OutDmaReg( info, TDIAR, BIT2|BIT3 ); usc_start_transmitter()
5648 usc_OutDmaReg( info, DICR, (u16)(usc_InDmaReg(info,DICR) | BIT0) ); usc_start_transmitter()
5652 usc_DmaCmd( info, DmaCmd_InitTxChannel ); usc_start_transmitter()
5654 usc_TCmd( info, TCmd_SendFrame ); usc_start_transmitter()
5656 mod_timer(&info->tx_timer, jiffies + usc_start_transmitter()
5659 info->tx_active = true; usc_start_transmitter()
5662 if ( !info->tx_enabled ) { usc_start_transmitter()
5663 info->tx_enabled = true; usc_start_transmitter()
5664 if ( info->params.flags & HDLC_FLAG_AUTO_CTS ) usc_start_transmitter()
5665 usc_EnableTransmitter(info,ENABLE_AUTO_CTS); usc_start_transmitter()
5667 usc_EnableTransmitter(info,ENABLE_UNCONDITIONAL); usc_start_transmitter()
5676 * Arguments: info pointer to device isntance data
5679 static void usc_stop_transmitter( struct mgsl_struct *info ) usc_stop_transmitter()
5683 __FILE__,__LINE__, info->device_name ); usc_stop_transmitter()
5685 del_timer(&info->tx_timer); usc_stop_transmitter()
5687 usc_UnlatchTxstatusBits( info, TXSTATUS_ALL ); usc_stop_transmitter()
5688 usc_ClearIrqPendingBits( info, TRANSMIT_STATUS + TRANSMIT_DATA ); usc_stop_transmitter()
5689 usc_DisableInterrupts( info, TRANSMIT_STATUS + TRANSMIT_DATA ); usc_stop_transmitter()
5691 usc_EnableTransmitter(info,DISABLE_UNCONDITIONAL); usc_stop_transmitter()
5692 usc_DmaCmd( info, DmaCmd_ResetTxChannel ); usc_stop_transmitter()
5693 usc_RTCmd( info, RTCmd_PurgeTxFifo ); usc_stop_transmitter()
5695 info->tx_enabled = false; usc_stop_transmitter()
5696 info->tx_active = false; usc_stop_transmitter()
5705 * Arguments: info pointer to device extension (instance data)
5708 static void usc_load_txfifo( struct mgsl_struct *info ) usc_load_txfifo()
5713 if ( !info->xmit_cnt && !info->x_char ) usc_load_txfifo()
5717 usc_TCmd( info, TCmd_SelectTicrTxFifostatus ); usc_load_txfifo()
5721 while( (Fifocount = usc_InReg(info, TICR) >> 8) && info->xmit_cnt ) { usc_load_txfifo()
5725 if ( (info->xmit_cnt > 1) && (Fifocount > 1) && !info->x_char ) { usc_load_txfifo()
5728 TwoBytes[0] = info->xmit_buf[info->xmit_tail++]; usc_load_txfifo()
5729 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1); usc_load_txfifo()
5730 TwoBytes[1] = info->xmit_buf[info->xmit_tail++]; usc_load_txfifo()
5731 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1); usc_load_txfifo()
5733 outw( *((u16 *)TwoBytes), info->io_base + DATAREG); usc_load_txfifo()
5735 info->xmit_cnt -= 2; usc_load_txfifo()
5736 info->icount.tx += 2; usc_load_txfifo()
5740 outw( (inw( info->io_base + CCAR) & 0x0780) | (TDR+LSBONLY), usc_load_txfifo()
5741 info->io_base + CCAR ); usc_load_txfifo()
5743 if (info->x_char) { usc_load_txfifo()
5745 outw( info->x_char,info->io_base + CCAR ); usc_load_txfifo()
5746 info->x_char = 0; usc_load_txfifo()
5748 outw( info->xmit_buf[info->xmit_tail++],info->io_base + CCAR ); usc_load_txfifo()
5749 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1); usc_load_txfifo()
5750 info->xmit_cnt--; usc_load_txfifo()
5752 info->icount.tx++; usc_load_txfifo()
5762 * Arguments: info pointer to device instance data
5765 static void usc_reset( struct mgsl_struct *info ) usc_reset()
5767 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) { usc_reset()
5774 volatile u32 *MiscCtrl = (u32 *)(info->lcr_base + 0x50); usc_reset()
5775 u32 *LCR0BRDR = (u32 *)(info->lcr_base + 0x28); usc_reset()
5777 info->misc_ctrl_value |= BIT30; usc_reset()
5778 *MiscCtrl = info->misc_ctrl_value; usc_reset()
5788 info->misc_ctrl_value &= ~BIT30; usc_reset()
5789 *MiscCtrl = info->misc_ctrl_value; usc_reset()
5803 outb( 0,info->io_base + 8 ); usc_reset()
5806 info->mbre_bit = 0; usc_reset()
5807 info->loopback_bits = 0; usc_reset()
5808 info->usc_idle_mode = 0; usc_reset()
5827 outw( 0x000c,info->io_base + SDPIN ); usc_reset()
5830 outw( 0,info->io_base ); usc_reset()
5831 outw( 0,info->io_base + CCAR ); usc_reset()
5834 usc_RTCmd( info, RTCmd_SelectLittleEndian ); usc_reset()
5851 usc_OutReg( info, PCR, 0xf0f5 ); usc_reset()
5868 usc_OutReg( info, IOCR, 0x0004 ); usc_reset()
5876 * Arguments: info pointer to device instance data
5879 static void usc_set_async_mode( struct mgsl_struct *info ) usc_set_async_mode()
5884 usc_DisableMasterIrqBit( info ); usc_set_async_mode()
5886 outw( 0, info->io_base ); /* clear Master Bus Enable (DCAR) */ usc_set_async_mode()
5887 usc_DmaCmd( info, DmaCmd_ResetAllChannels ); /* disable both DMA channels */ usc_set_async_mode()
5889 usc_loopback_frame( info ); usc_set_async_mode()
5904 if ( info->params.stop_bits != 1 ) usc_set_async_mode()
5906 usc_OutReg( info, CMR, RegValue ); usc_set_async_mode()
5923 if ( info->params.data_bits != 8 ) usc_set_async_mode()
5926 if ( info->params.parity != ASYNC_PARITY_NONE ) { usc_set_async_mode()
5928 if ( info->params.parity != ASYNC_PARITY_ODD ) usc_set_async_mode()
5932 usc_OutReg( info, RMR, RegValue ); usc_set_async_mode()
5937 usc_RCmd( info, RCmd_SelectRicrIntLevel ); usc_set_async_mode()
5960 usc_OutReg( info, RICR, 0x0000 ); usc_set_async_mode()
5962 usc_UnlatchRxstatusBits( info, RXSTATUS_ALL ); usc_set_async_mode()
5963 usc_ClearIrqPendingBits( info, RECEIVE_STATUS ); usc_set_async_mode()
5980 if ( info->params.data_bits != 8 ) usc_set_async_mode()
5983 if ( info->params.parity != ASYNC_PARITY_NONE ) { usc_set_async_mode()
5985 if ( info->params.parity != ASYNC_PARITY_ODD ) usc_set_async_mode()
5989 usc_OutReg( info, TMR, RegValue ); usc_set_async_mode()
5991 usc_set_txidle( info ); usc_set_async_mode()
5996 usc_TCmd( info, TCmd_SelectTicrIntLevel ); usc_set_async_mode()
6014 usc_OutReg( info, TICR, 0x1f40 ); usc_set_async_mode()
6016 usc_UnlatchTxstatusBits( info, TXSTATUS_ALL ); usc_set_async_mode()
6017 usc_ClearIrqPendingBits( info, TRANSMIT_STATUS ); usc_set_async_mode()
6019 usc_enable_async_clock( info, info->params.data_rate ); usc_set_async_mode()
6040 usc_OutReg( info, CCSR, 0x0020 ); usc_set_async_mode()
6042 usc_DisableInterrupts( info, TRANSMIT_STATUS + TRANSMIT_DATA + usc_set_async_mode()
6045 usc_ClearIrqPendingBits( info, TRANSMIT_STATUS + TRANSMIT_DATA + usc_set_async_mode()
6048 usc_EnableMasterIrqBit( info ); usc_set_async_mode()
6050 if (info->bus_type == MGSL_BUS_TYPE_ISA) { usc_set_async_mode()
6053 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT13) & ~BIT12)); usc_set_async_mode()
6056 if (info->params.loopback) { usc_set_async_mode()
6057 info->loopback_bits = 0x300; usc_set_async_mode()
6058 outw(0x0300, info->io_base + CCAR); usc_set_async_mode()
6067 * clear any 'stale' status info left over from running in async mode.
6074 * Arguments: info pointer to device instance data
6077 static void usc_loopback_frame( struct mgsl_struct *info ) usc_loopback_frame()
6080 unsigned long oldmode = info->params.mode; usc_loopback_frame()
6082 info->params.mode = MGSL_MODE_HDLC; usc_loopback_frame()
6084 usc_DisableMasterIrqBit( info ); usc_loopback_frame()
6086 usc_set_sdlc_mode( info ); usc_loopback_frame()
6087 usc_enable_loopback( info, 1 ); usc_loopback_frame()
6090 usc_OutReg( info, TC0R, 0 ); usc_loopback_frame()
6106 usc_OutReg( info, CCR, 0x0100 ); usc_loopback_frame()
6109 usc_RTCmd( info, RTCmd_PurgeRxFifo ); usc_loopback_frame()
6110 usc_EnableReceiver(info,ENABLE_UNCONDITIONAL); usc_loopback_frame()
6115 usc_OutReg( info, TCLR, 2 ); usc_loopback_frame()
6116 usc_RTCmd( info, RTCmd_PurgeTxFifo ); usc_loopback_frame()
6119 usc_UnlatchTxstatusBits(info,TXSTATUS_ALL); usc_loopback_frame()
6120 outw(0,info->io_base + DATAREG); usc_loopback_frame()
6123 usc_TCmd( info, TCmd_SendFrame ); usc_loopback_frame()
6124 usc_EnableTransmitter(info,ENABLE_UNCONDITIONAL); usc_loopback_frame()
6128 if (usc_InReg( info, RCSR ) & (BIT8 | BIT4 | BIT3 | BIT1)) usc_loopback_frame()
6132 usc_enable_loopback(info, 0); usc_loopback_frame()
6134 usc_EnableMasterIrqBit(info); usc_loopback_frame()
6136 info->params.mode = oldmode; usc_loopback_frame()
6142 * Arguments: info pointer to adapter info structure
6145 static void usc_set_sync_mode( struct mgsl_struct *info ) usc_set_sync_mode()
6147 usc_loopback_frame( info ); usc_set_sync_mode()
6148 usc_set_sdlc_mode( info ); usc_set_sync_mode()
6150 if (info->bus_type == MGSL_BUS_TYPE_ISA) { usc_set_sync_mode()
6153 usc_OutReg(info, PCR, (u16)((usc_InReg(info, PCR) | BIT13) & ~BIT12)); usc_set_sync_mode()
6156 usc_enable_aux_clock(info, info->params.clock_speed); usc_set_sync_mode()
6158 if (info->params.loopback) usc_set_sync_mode()
6159 usc_enable_loopback(info,1); usc_set_sync_mode()
6165 * Arguments: info pointer to device instance data
6168 static void usc_set_txidle( struct mgsl_struct *info ) usc_set_txidle()
6174 switch( info->idle_mode ){ usc_set_txidle()
6184 info->usc_idle_mode = usc_idle_mode; usc_set_txidle()
6185 //usc_OutReg(info, TCSR, usc_idle_mode); usc_set_txidle()
6186 info->tcsr_value &= ~IDLEMODE_MASK; /* clear idle mode bits */ usc_set_txidle()
6187 info->tcsr_value += usc_idle_mode; usc_set_txidle()
6188 usc_OutReg(info, TCSR, info->tcsr_value); usc_set_txidle()
6197 if ( info->params.mode == MGSL_MODE_RAW ) { usc_set_txidle()
6199 switch( info->idle_mode ) { usc_set_txidle()
6219 usc_SetTransmitSyncChars(info,syncpat,syncpat); usc_set_txidle()
6228 * Arguments: info pointer to device instance data
6231 static void usc_get_serial_signals( struct mgsl_struct *info ) usc_get_serial_signals()
6236 info->serial_signals &= SerialSignal_RTS | SerialSignal_DTR; usc_get_serial_signals()
6241 status = usc_InReg( info, MISR ); usc_get_serial_signals()
6246 info->serial_signals |= SerialSignal_CTS; usc_get_serial_signals()
6249 info->serial_signals |= SerialSignal_DCD; usc_get_serial_signals()
6252 info->serial_signals |= SerialSignal_RI; usc_get_serial_signals()
6255 info->serial_signals |= SerialSignal_DSR; usc_get_serial_signals()
6264 * Arguments: info pointer to device instance data
6267 static void usc_set_serial_signals( struct mgsl_struct *info ) usc_set_serial_signals()
6270 unsigned char V24Out = info->serial_signals; usc_set_serial_signals()
6274 Control = usc_InReg( info, PCR ); usc_set_serial_signals()
6286 usc_OutReg( info, PCR, Control ); usc_set_serial_signals()
6294 * Arguments: info pointer to device instance data
6299 static void usc_enable_async_clock( struct mgsl_struct *info, u32 data_rate ) usc_enable_async_clock() argument
6316 usc_OutReg( info, CMCR, 0x0f64 ); usc_enable_async_clock()
6325 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) usc_enable_async_clock()
6326 usc_OutReg( info, TC0R, (u16)((691200/data_rate) - 1) ); usc_enable_async_clock()
6328 usc_OutReg( info, TC0R, (u16)((921600/data_rate) - 1) ); usc_enable_async_clock()
6337 usc_OutReg( info, HCR, usc_enable_async_clock()
6338 (u16)((usc_InReg( info, HCR ) & ~BIT1) | BIT0) ); usc_enable_async_clock()
6343 usc_OutReg( info, IOCR, usc_enable_async_clock()
6344 (u16)((usc_InReg(info, IOCR) & 0xfff8) | 0x0004) ); usc_enable_async_clock()
6347 usc_OutReg( info, HCR, (u16)(usc_InReg( info, HCR ) & ~BIT0) ); usc_enable_async_clock()
6406 * Arguments: info pointer to device instance data
6409 static void mgsl_reset_tx_dma_buffers( struct mgsl_struct *info ) mgsl_reset_tx_dma_buffers()
6413 for ( i = 0; i < info->tx_buffer_count; i++ ) { mgsl_reset_tx_dma_buffers()
6414 *((unsigned long *)&(info->tx_buffer_list[i].count)) = 0; mgsl_reset_tx_dma_buffers()
6417 info->current_tx_buffer = 0; mgsl_reset_tx_dma_buffers()
6418 info->start_tx_dma_buffer = 0; mgsl_reset_tx_dma_buffers()
6419 info->tx_dma_buffers_used = 0; mgsl_reset_tx_dma_buffers()
6421 info->get_tx_holding_index = 0; mgsl_reset_tx_dma_buffers()
6422 info->put_tx_holding_index = 0; mgsl_reset_tx_dma_buffers()
6423 info->tx_holding_count = 0; mgsl_reset_tx_dma_buffers()
6432 * Arguments: info pointer to device instance data
6435 static int num_free_tx_dma_buffers(struct mgsl_struct *info) num_free_tx_dma_buffers() argument
6437 return info->tx_buffer_count - info->tx_dma_buffers_used; num_free_tx_dma_buffers()
6447 * Arguments: info pointer to device instance data
6450 static void mgsl_reset_rx_dma_buffers( struct mgsl_struct *info ) mgsl_reset_rx_dma_buffers()
6454 for ( i = 0; i < info->rx_buffer_count; i++ ) { mgsl_reset_rx_dma_buffers()
6455 *((unsigned long *)&(info->rx_buffer_list[i].count)) = DMABUFFERSIZE; mgsl_reset_rx_dma_buffers()
6456 // info->rx_buffer_list[i].count = DMABUFFERSIZE; mgsl_reset_rx_dma_buffers()
6457 // info->rx_buffer_list[i].status = 0; mgsl_reset_rx_dma_buffers()
6460 info->current_rx_buffer = 0; mgsl_reset_rx_dma_buffers()
6472 * info pointer to device instance data
6478 static void mgsl_free_rx_frame_buffers( struct mgsl_struct *info, unsigned int StartIndex, unsigned int EndIndex ) mgsl_free_rx_frame_buffers() argument
6490 pBufEntry = &(info->rx_buffer_list[Index]); mgsl_free_rx_frame_buffers()
6504 if ( Index == info->rx_buffer_count ) mgsl_free_rx_frame_buffers()
6509 info->current_rx_buffer = Index; mgsl_free_rx_frame_buffers()
6518 * Arguments: info pointer to device extension
6521 static bool mgsl_get_rx_frame(struct mgsl_struct *info) mgsl_get_rx_frame() argument
6529 struct tty_struct *tty = info->port.tty; mgsl_get_rx_frame()
6539 StartIndex = EndIndex = info->current_rx_buffer; mgsl_get_rx_frame()
6541 while( !info->rx_buffer_list[EndIndex].status ) { mgsl_get_rx_frame()
6549 if ( info->rx_buffer_list[EndIndex].count ) mgsl_get_rx_frame()
6554 if ( EndIndex == info->rx_buffer_count ) mgsl_get_rx_frame()
6564 if ( info->rx_enabled ){ mgsl_get_rx_frame()
6565 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_get_rx_frame()
6566 usc_start_receiver(info); mgsl_get_rx_frame()
6567 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_get_rx_frame()
6576 status = info->rx_buffer_list[EndIndex].status; mgsl_get_rx_frame()
6581 info->icount.rxshort++; mgsl_get_rx_frame()
6583 info->icount.rxabort++; mgsl_get_rx_frame()
6585 info->icount.rxover++; mgsl_get_rx_frame()
6587 info->icount.rxcrc++; mgsl_get_rx_frame()
6588 if ( info->params.crc_type & HDLC_CRC_RETURN_EX ) mgsl_get_rx_frame()
6594 info->netdev->stats.rx_errors++; mgsl_get_rx_frame()
6595 info->netdev->stats.rx_frame_errors++; mgsl_get_rx_frame()
6608 framesize = RCLRVALUE - info->rx_buffer_list[EndIndex].rcc; mgsl_get_rx_frame()
6611 if ( info->params.crc_type == HDLC_CRC_16_CCITT ) mgsl_get_rx_frame()
6613 else if ( info->params.crc_type == HDLC_CRC_32_CCITT ) mgsl_get_rx_frame()
6619 __FILE__,__LINE__,info->device_name,status,framesize); mgsl_get_rx_frame()
6622 mgsl_trace_block(info,info->rx_buffer_list[StartIndex].virt_addr, mgsl_get_rx_frame()
6626 if ( ( (info->params.crc_type & HDLC_CRC_RETURN_EX) && mgsl_get_rx_frame()
6627 ((framesize+1) > info->max_frame_size) ) || mgsl_get_rx_frame()
6628 (framesize > info->max_frame_size) ) mgsl_get_rx_frame()
6629 info->icount.rxlong++; mgsl_get_rx_frame()
6634 unsigned char *ptmp = info->intermediate_rxbuffer; mgsl_get_rx_frame()
6637 info->icount.rxok++; mgsl_get_rx_frame()
6646 pBufEntry = &(info->rx_buffer_list[index]); mgsl_get_rx_frame()
6651 if ( ++index == info->rx_buffer_count ) mgsl_get_rx_frame()
6655 if ( info->params.crc_type & HDLC_CRC_RETURN_EX ) { mgsl_get_rx_frame()
6663 __FILE__,__LINE__,info->device_name, mgsl_get_rx_frame()
6668 if (info->netcount) mgsl_get_rx_frame()
6669 hdlcdev_rx(info,info->intermediate_rxbuffer,framesize); mgsl_get_rx_frame()
6672 ldisc_receive_buf(tty, info->intermediate_rxbuffer, info->flag_buf, framesize); mgsl_get_rx_frame()
6676 mgsl_free_rx_frame_buffers( info, StartIndex, EndIndex ); mgsl_get_rx_frame()
6682 if ( info->rx_enabled && info->rx_overflow ) { mgsl_get_rx_frame()
6688 if ( !info->rx_buffer_list[EndIndex].status && mgsl_get_rx_frame()
6689 info->rx_buffer_list[EndIndex].count ) { mgsl_get_rx_frame()
6690 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_get_rx_frame()
6691 usc_start_receiver(info); mgsl_get_rx_frame()
6692 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_get_rx_frame()
6716 * Arguments: info pointer to device extension
6719 static bool mgsl_get_raw_rx_frame(struct mgsl_struct *info) mgsl_get_raw_rx_frame() argument
6727 struct tty_struct *tty = info->port.tty; mgsl_get_raw_rx_frame()
6744 CurrentIndex = NextIndex = info->current_rx_buffer; mgsl_get_raw_rx_frame()
6746 if ( NextIndex == info->rx_buffer_count ) mgsl_get_raw_rx_frame()
6749 if ( info->rx_buffer_list[CurrentIndex].status != 0 || mgsl_get_raw_rx_frame()
6750 (info->rx_buffer_list[CurrentIndex].count == 0 && mgsl_get_raw_rx_frame()
6751 info->rx_buffer_list[NextIndex].count == 0)) { mgsl_get_raw_rx_frame()
6759 status = info->rx_buffer_list[CurrentIndex].status; mgsl_get_raw_rx_frame()
6764 info->icount.rxshort++; mgsl_get_raw_rx_frame()
6766 info->icount.rxabort++; mgsl_get_raw_rx_frame()
6768 info->icount.rxover++; mgsl_get_raw_rx_frame()
6770 info->icount.rxcrc++; mgsl_get_raw_rx_frame()
6808 if ( info->rx_buffer_list[CurrentIndex].rcc ) mgsl_get_raw_rx_frame()
6809 framesize = RCLRVALUE - info->rx_buffer_list[CurrentIndex].rcc; mgsl_get_raw_rx_frame()
6830 __FILE__,__LINE__,info->device_name,status,framesize); mgsl_get_raw_rx_frame()
6833 mgsl_trace_block(info,info->rx_buffer_list[CurrentIndex].virt_addr, mgsl_get_raw_rx_frame()
6840 pBufEntry = &(info->rx_buffer_list[CurrentIndex]); mgsl_get_raw_rx_frame()
6841 memcpy( info->intermediate_rxbuffer, pBufEntry->virt_addr, framesize); mgsl_get_raw_rx_frame()
6842 info->icount.rxok++; mgsl_get_raw_rx_frame()
6844 ldisc_receive_buf(tty, info->intermediate_rxbuffer, info->flag_buf, framesize); mgsl_get_raw_rx_frame()
6848 mgsl_free_rx_frame_buffers( info, CurrentIndex, CurrentIndex ); mgsl_get_raw_rx_frame()
6854 if ( info->rx_enabled && info->rx_overflow ) { mgsl_get_raw_rx_frame()
6860 if ( !info->rx_buffer_list[CurrentIndex].status && mgsl_get_raw_rx_frame()
6861 info->rx_buffer_list[CurrentIndex].count ) { mgsl_get_raw_rx_frame()
6862 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_get_raw_rx_frame()
6863 usc_start_receiver(info); mgsl_get_raw_rx_frame()
6864 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_get_raw_rx_frame()
6878 * info pointer to device extension
6884 static void mgsl_load_tx_dma_buffer(struct mgsl_struct *info, mgsl_load_tx_dma_buffer() argument
6892 mgsl_trace_block(info,Buffer, min_t(int, BufferSize, DMABUFFERSIZE), 1); mgsl_load_tx_dma_buffer()
6894 if (info->params.flags & HDLC_FLAG_HDLC_LOOPMODE) { mgsl_load_tx_dma_buffer()
6898 info->cmr_value |= BIT13; mgsl_load_tx_dma_buffer()
6905 i = info->current_tx_buffer; mgsl_load_tx_dma_buffer()
6906 info->start_tx_dma_buffer = i; mgsl_load_tx_dma_buffer()
6911 info->tx_buffer_list[i].status = info->cmr_value & 0xf000; mgsl_load_tx_dma_buffer()
6912 info->tx_buffer_list[i].rcc = BufferSize; mgsl_load_tx_dma_buffer()
6913 info->tx_buffer_list[i].count = BufferSize; mgsl_load_tx_dma_buffer()
6920 pBufEntry = &info->tx_buffer_list[i++]; mgsl_load_tx_dma_buffer()
6922 if ( i == info->tx_buffer_count ) mgsl_load_tx_dma_buffer()
6934 if ( info->bus_type == MGSL_BUS_TYPE_PCI ) mgsl_load_tx_dma_buffer()
6945 ++info->tx_dma_buffers_used; mgsl_load_tx_dma_buffer()
6949 info->current_tx_buffer = i; mgsl_load_tx_dma_buffer()
6958 * Arguments: info pointer to device instance data
6961 static bool mgsl_register_test( struct mgsl_struct *info ) mgsl_register_test()
6970 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_register_test()
6971 usc_reset(info); mgsl_register_test()
6975 if ( (usc_InReg( info, SICR ) != 0) || mgsl_register_test()
6976 (usc_InReg( info, IVR ) != 0) || mgsl_register_test()
6977 (usc_InDmaReg( info, DIVR ) != 0) ){ mgsl_register_test()
6986 usc_OutReg( info, TC0R, BitPatterns[i] ); mgsl_register_test()
6987 usc_OutReg( info, TC1R, BitPatterns[(i+1)%Patterncount] ); mgsl_register_test()
6988 usc_OutReg( info, TCLR, BitPatterns[(i+2)%Patterncount] ); mgsl_register_test()
6989 usc_OutReg( info, RCLR, BitPatterns[(i+3)%Patterncount] ); mgsl_register_test()
6990 usc_OutReg( info, RSR, BitPatterns[(i+4)%Patterncount] ); mgsl_register_test()
6991 usc_OutDmaReg( info, TBCR, BitPatterns[(i+5)%Patterncount] ); mgsl_register_test()
6993 if ( (usc_InReg( info, TC0R ) != BitPatterns[i]) || mgsl_register_test()
6994 (usc_InReg( info, TC1R ) != BitPatterns[(i+1)%Patterncount]) || mgsl_register_test()
6995 (usc_InReg( info, TCLR ) != BitPatterns[(i+2)%Patterncount]) || mgsl_register_test()
6996 (usc_InReg( info, RCLR ) != BitPatterns[(i+3)%Patterncount]) || mgsl_register_test()
6997 (usc_InReg( info, RSR ) != BitPatterns[(i+4)%Patterncount]) || mgsl_register_test()
6998 (usc_InDmaReg( info, TBCR ) != BitPatterns[(i+5)%Patterncount]) ){ mgsl_register_test()
7005 usc_reset(info); mgsl_register_test()
7006 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_register_test()
7014 * Arguments: info pointer to device instance data
7017 static bool mgsl_irq_test( struct mgsl_struct *info ) mgsl_irq_test()
7022 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_irq_test()
7023 usc_reset(info); mgsl_irq_test()
7030 info->irq_occurred = false; mgsl_irq_test()
7036 usc_OutReg( info, PCR, (unsigned short)((usc_InReg(info, PCR) | BIT13) & ~BIT12) ); mgsl_irq_test()
7038 usc_EnableMasterIrqBit(info); mgsl_irq_test()
7039 usc_EnableInterrupts(info, IO_PIN); mgsl_irq_test()
7040 usc_ClearIrqPendingBits(info, IO_PIN); mgsl_irq_test()
7042 usc_UnlatchIostatusBits(info, MISCSTATUS_TXC_LATCHED); mgsl_irq_test()
7043 usc_EnableStatusIrqs(info, SICR_TXC_ACTIVE + SICR_TXC_INACTIVE); mgsl_irq_test()
7045 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_irq_test()
7048 while( EndTime-- && !info->irq_occurred ) { mgsl_irq_test()
7052 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_irq_test()
7053 usc_reset(info); mgsl_irq_test()
7054 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_irq_test()
7056 return info->irq_occurred; mgsl_irq_test()
7066 * Arguments: info pointer to device instance data
7069 static bool mgsl_dma_test( struct mgsl_struct *info ) mgsl_dma_test()
7083 memcpy(&tmp_params,&info->params,sizeof(MGSL_PARAMS)); mgsl_dma_test()
7085 memcpy(&info->params,&default_params,sizeof(MGSL_PARAMS)); mgsl_dma_test()
7089 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7093 usc_reset(info); mgsl_dma_test()
7094 usc_set_sdlc_mode(info); mgsl_dma_test()
7095 usc_enable_loopback(info,1); mgsl_dma_test()
7117 usc_OutDmaReg( info, RDMR, 0xe200 ); mgsl_dma_test()
7119 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7129 info->tx_buffer_list[0].count = FrameSize; mgsl_dma_test()
7130 info->tx_buffer_list[0].rcc = FrameSize; mgsl_dma_test()
7131 info->tx_buffer_list[0].status = 0x4000; mgsl_dma_test()
7135 TmpPtr = info->tx_buffer_list[0].virt_addr; mgsl_dma_test()
7142 info->rx_buffer_list[0].status = 0; mgsl_dma_test()
7143 info->rx_buffer_list[0].count = FrameSize + 4; mgsl_dma_test()
7147 memset( info->rx_buffer_list[0].virt_addr, 0, FrameSize + 4 ); mgsl_dma_test()
7152 info->tx_buffer_list[1].count = 0; mgsl_dma_test()
7153 info->rx_buffer_list[1].count = 0; mgsl_dma_test()
7160 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7163 usc_RTCmd( info, RTCmd_PurgeRxFifo ); mgsl_dma_test()
7166 phys_addr = info->rx_buffer_list[0].phys_entry; mgsl_dma_test()
7167 usc_OutDmaReg( info, NRARL, (unsigned short)phys_addr ); mgsl_dma_test()
7168 usc_OutDmaReg( info, NRARU, (unsigned short)(phys_addr >> 16) ); mgsl_dma_test()
7171 usc_InDmaReg( info, RDMR ); mgsl_dma_test()
7172 usc_DmaCmd( info, DmaCmd_InitRxChannel ); mgsl_dma_test()
7175 usc_OutReg( info, RMR, (unsigned short)((usc_InReg(info, RMR) & 0xfffc) | 0x0002) ); mgsl_dma_test()
7177 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7193 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7194 status = usc_InDmaReg( info, RDMR ); mgsl_dma_test()
7195 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7210 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7215 usc_OutReg( info, TCLR, (unsigned short)info->tx_buffer_list[0].count ); mgsl_dma_test()
7216 usc_RTCmd( info, RTCmd_PurgeTxFifo ); mgsl_dma_test()
7220 phys_addr = info->tx_buffer_list[0].phys_entry; mgsl_dma_test()
7221 usc_OutDmaReg( info, NTARL, (unsigned short)phys_addr ); mgsl_dma_test()
7222 usc_OutDmaReg( info, NTARU, (unsigned short)(phys_addr >> 16) ); mgsl_dma_test()
7226 usc_OutReg( info, TCSR, (unsigned short)(( usc_InReg(info, TCSR) & 0x0f00) | 0xfa) ); mgsl_dma_test()
7227 usc_DmaCmd( info, DmaCmd_InitTxChannel ); mgsl_dma_test()
7231 usc_TCmd( info, TCmd_SelectTicrTxFifostatus ); mgsl_dma_test()
7233 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7249 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7250 FifoLevel = usc_InReg(info, TICR) >> 8; mgsl_dma_test()
7251 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7269 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7272 usc_TCmd( info, TCmd_SendFrame ); mgsl_dma_test()
7273 usc_OutReg( info, TMR, (unsigned short)((usc_InReg(info, TMR) & 0xfffc) | 0x0002) ); mgsl_dma_test()
7275 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7287 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7288 status = usc_InReg( info, TCSR ); mgsl_dma_test()
7289 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7297 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7298 status = usc_InReg( info, TCSR ); mgsl_dma_test()
7299 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7317 status=info->rx_buffer_list[0].status; mgsl_dma_test()
7323 status=info->rx_buffer_list[0].status; mgsl_dma_test()
7330 status = info->rx_buffer_list[0].status; mgsl_dma_test()
7336 if ( memcmp( info->tx_buffer_list[0].virt_addr , mgsl_dma_test()
7337 info->rx_buffer_list[0].virt_addr, FrameSize ) ){ mgsl_dma_test()
7343 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_dma_test()
7344 usc_reset( info ); mgsl_dma_test()
7345 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_dma_test()
7348 memcpy(&info->params,&tmp_params,sizeof(MGSL_PARAMS)); mgsl_dma_test()
7358 * Arguments: info pointer to device instance data
7361 static int mgsl_adapter_test( struct mgsl_struct *info ) mgsl_adapter_test()
7365 __FILE__,__LINE__,info->device_name ); mgsl_adapter_test()
7367 if ( !mgsl_register_test( info ) ) { mgsl_adapter_test()
7368 info->init_error = DiagStatus_AddressFailure; mgsl_adapter_test()
7370 __FILE__,__LINE__,info->device_name, (unsigned short)(info->io_base) ); mgsl_adapter_test()
7374 if ( !mgsl_irq_test( info ) ) { mgsl_adapter_test()
7375 info->init_error = DiagStatus_IrqFailure; mgsl_adapter_test()
7377 __FILE__,__LINE__,info->device_name, (unsigned short)(info->irq_level) ); mgsl_adapter_test()
7381 if ( !mgsl_dma_test( info ) ) { mgsl_adapter_test()
7382 info->init_error = DiagStatus_DmaFailure; mgsl_adapter_test()
7384 __FILE__,__LINE__,info->device_name, (unsigned short)(info->dma_level) ); mgsl_adapter_test()
7390 __FILE__,__LINE__,info->device_name ); mgsl_adapter_test()
7400 * Arguments: info pointer to device instance data
7403 static bool mgsl_memory_test( struct mgsl_struct *info ) mgsl_memory_test()
7412 if ( info->bus_type != MGSL_BUS_TYPE_PCI ) mgsl_memory_test()
7415 TestAddr = (unsigned long *)info->memory_base; mgsl_memory_test()
7433 TestAddr = (unsigned long *)info->memory_base; mgsl_memory_test()
7441 memset( info->memory_base, 0, SHARED_MEM_ADDRESS_SIZE ); mgsl_memory_test()
7506 static void mgsl_trace_block(struct mgsl_struct *info,const char* data, int count, int xmit) mgsl_trace_block() argument
7511 printk("%s tx data:\n",info->device_name); mgsl_trace_block()
7513 printk("%s rx data:\n",info->device_name); mgsl_trace_block()
7548 struct mgsl_struct *info = (struct mgsl_struct*)context; mgsl_tx_timeout() local
7553 __FILE__,__LINE__,info->device_name); mgsl_tx_timeout()
7554 if(info->tx_active && mgsl_tx_timeout()
7555 (info->params.mode == MGSL_MODE_HDLC || mgsl_tx_timeout()
7556 info->params.mode == MGSL_MODE_RAW) ) { mgsl_tx_timeout()
7557 info->icount.txtimeout++; mgsl_tx_timeout()
7559 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_tx_timeout()
7560 info->tx_active = false; mgsl_tx_timeout()
7561 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; mgsl_tx_timeout()
7563 if ( info->params.flags & HDLC_FLAG_HDLC_LOOPMODE ) mgsl_tx_timeout()
7564 usc_loopmode_cancel_transmit( info ); mgsl_tx_timeout()
7566 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_tx_timeout()
7569 if (info->netcount) mgsl_tx_timeout()
7570 hdlcdev_tx_done(info); mgsl_tx_timeout()
7573 mgsl_bh_transmit(info); mgsl_tx_timeout()
7581 static int mgsl_loopmode_send_done( struct mgsl_struct * info ) mgsl_loopmode_send_done()
7585 spin_lock_irqsave(&info->irq_spinlock,flags); mgsl_loopmode_send_done()
7586 if (info->params.flags & HDLC_FLAG_HDLC_LOOPMODE) { mgsl_loopmode_send_done()
7587 if (info->tx_active) mgsl_loopmode_send_done()
7588 info->loopmode_send_done_requested = true; mgsl_loopmode_send_done()
7590 usc_loopmode_send_done(info); mgsl_loopmode_send_done()
7592 spin_unlock_irqrestore(&info->irq_spinlock,flags); mgsl_loopmode_send_done()
7600 static void usc_loopmode_send_done( struct mgsl_struct * info ) usc_loopmode_send_done()
7602 info->loopmode_send_done_requested = false; usc_loopmode_send_done()
7604 info->cmr_value &= ~BIT13; usc_loopmode_send_done()
7605 usc_OutReg(info, CMR, info->cmr_value); usc_loopmode_send_done()
7610 static void usc_loopmode_cancel_transmit( struct mgsl_struct * info ) usc_loopmode_cancel_transmit()
7613 usc_RTCmd( info, RTCmd_PurgeTxFifo ); usc_loopmode_cancel_transmit()
7614 usc_DmaCmd( info, DmaCmd_ResetTxChannel ); usc_loopmode_cancel_transmit()
7615 usc_loopmode_send_done( info ); usc_loopmode_cancel_transmit()
7622 static void usc_loopmode_insert_request( struct mgsl_struct * info ) usc_loopmode_insert_request()
7624 info->loopmode_insert_requested = true; usc_loopmode_insert_request()
7629 usc_OutReg( info, RICR, usc_loopmode_insert_request()
7630 (usc_InReg( info, RICR ) | RXSTATUS_ABORT_RECEIVED ) ); usc_loopmode_insert_request()
7633 info->cmr_value |= BIT13; usc_loopmode_insert_request()
7634 usc_OutReg(info, CMR, info->cmr_value); usc_loopmode_insert_request()
7639 static int usc_loopmode_active( struct mgsl_struct * info) usc_loopmode_active() argument
7641 return usc_InReg( info, CCSR ) & BIT7 ? 1 : 0 ; usc_loopmode_active()
7659 struct mgsl_struct *info = dev_to_port(dev); hdlcdev_attach() local
7664 if (info->port.count) hdlcdev_attach()
7685 info->params.encoding = new_encoding; hdlcdev_attach()
7686 info->params.crc_type = new_crctype; hdlcdev_attach()
7689 if (info->netcount) hdlcdev_attach()
7690 mgsl_program_hw(info); hdlcdev_attach()
7704 struct mgsl_struct *info = dev_to_port(dev); hdlcdev_xmit() local
7714 info->xmit_cnt = skb->len; hdlcdev_xmit()
7715 mgsl_load_tx_dma_buffer(info, skb->data, skb->len); hdlcdev_xmit()
7728 spin_lock_irqsave(&info->irq_spinlock,flags); hdlcdev_xmit()
7729 if (!info->tx_active) hdlcdev_xmit()
7730 usc_start_transmitter(info); hdlcdev_xmit()
7731 spin_unlock_irqrestore(&info->irq_spinlock,flags); hdlcdev_xmit()
7746 struct mgsl_struct *info = dev_to_port(dev); hdlcdev_open() local
7758 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
7759 if (info->port.count != 0 || info->netcount != 0) { hdlcdev_open()
7761 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
7764 info->netcount=1; hdlcdev_open()
7765 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
7768 if ((rc = startup(info)) != 0) { hdlcdev_open()
7769 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
7770 info->netcount=0; hdlcdev_open()
7771 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
7776 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; hdlcdev_open()
7777 mgsl_program_hw(info); hdlcdev_open()
7784 spin_lock_irqsave(&info->irq_spinlock, flags); hdlcdev_open()
7785 usc_get_serial_signals(info); hdlcdev_open()
7786 spin_unlock_irqrestore(&info->irq_spinlock, flags); hdlcdev_open()
7787 if (info->serial_signals & SerialSignal_DCD) hdlcdev_open()
7804 struct mgsl_struct *info = dev_to_port(dev); hdlcdev_close() local
7813 shutdown(info); hdlcdev_close()
7817 spin_lock_irqsave(&info->netlock, flags); hdlcdev_close()
7818 info->netcount=0; hdlcdev_close()
7819 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_close()
7838 struct mgsl_struct *info = dev_to_port(dev); hdlcdev_ioctl() local
7845 if (info->port.count) hdlcdev_ioctl()
7860 flags = info->params.flags & (HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
7874 new_line.clock_rate = info->params.clock_speed; hdlcdev_ioctl()
7875 new_line.loopback = info->params.loopback ? 1:0; hdlcdev_ioctl()
7894 case CLOCK_DEFAULT: flags = info->params.flags & hdlcdev_ioctl()
7905 info->params.flags &= ~(HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
7909 info->params.flags |= flags; hdlcdev_ioctl()
7911 info->params.loopback = new_line.loopback; hdlcdev_ioctl()
7914 info->params.clock_speed = new_line.clock_rate; hdlcdev_ioctl()
7916 info->params.clock_speed = 0; hdlcdev_ioctl()
7919 if (info->netcount) hdlcdev_ioctl()
7920 mgsl_program_hw(info); hdlcdev_ioctl()
7935 struct mgsl_struct *info = dev_to_port(dev); hdlcdev_tx_timeout() local
7944 spin_lock_irqsave(&info->irq_spinlock,flags); hdlcdev_tx_timeout()
7945 usc_stop_transmitter(info); hdlcdev_tx_timeout()
7946 spin_unlock_irqrestore(&info->irq_spinlock,flags); hdlcdev_tx_timeout()
7955 * info pointer to device instance information
7957 static void hdlcdev_tx_done(struct mgsl_struct *info) hdlcdev_tx_done() argument
7959 if (netif_queue_stopped(info->netdev)) hdlcdev_tx_done()
7960 netif_wake_queue(info->netdev); hdlcdev_tx_done()
7967 * info pointer to device instance information
7971 static void hdlcdev_rx(struct mgsl_struct *info, char *buf, int size) hdlcdev_rx() argument
7974 struct net_device *dev = info->netdev; hdlcdev_rx()
8009 * info pointer to device instance information
8013 static int hdlcdev_init(struct mgsl_struct *info) hdlcdev_init() argument
8021 if (!(dev = alloc_hdlcdev(info))) { hdlcdev_init()
8027 dev->base_addr = info->io_base; hdlcdev_init()
8028 dev->irq = info->irq_level; hdlcdev_init()
8029 dev->dma = info->dma_level; hdlcdev_init()
8048 info->netdev = dev; hdlcdev_init()
8056 * info pointer to device instance information
8058 static void hdlcdev_exit(struct mgsl_struct *info) hdlcdev_exit() argument
8060 unregister_hdlc_device(info->netdev); hdlcdev_exit()
8061 free_netdev(info->netdev); hdlcdev_exit()
8062 info->netdev = NULL; hdlcdev_exit()
8071 struct mgsl_struct *info; synclink_init_one() local
8078 if (!(info = mgsl_allocate_device())) { synclink_init_one()
8083 /* Copy user configuration info to device instance data */ synclink_init_one()
8085 info->io_base = pci_resource_start(dev, 2); synclink_init_one()
8086 info->irq_level = dev->irq; synclink_init_one()
8087 info->phys_memory_base = pci_resource_start(dev, 3); synclink_init_one()
8093 info->phys_lcr_base = pci_resource_start(dev, 0); synclink_init_one()
8094 info->lcr_offset = info->phys_lcr_base & (PAGE_SIZE-1); synclink_init_one()
8095 info->phys_lcr_base &= ~(PAGE_SIZE-1); synclink_init_one()
8097 info->bus_type = MGSL_BUS_TYPE_PCI; synclink_init_one()
8098 info->io_addr_size = 8; synclink_init_one()
8099 info->irq_flags = IRQF_SHARED; synclink_init_one()
8103 info->misc_ctrl_value = 0x007c4080; synclink_init_one()
8104 info->hw_version = 1; synclink_init_one()
8111 info->misc_ctrl_value = 0x087e4546; synclink_init_one()
8112 info->hw_version = 0; synclink_init_one()
8115 mgsl_add_device(info); synclink_init_one()
3264 block_til_ready(struct tty_struct *tty, struct file * filp, struct mgsl_struct *info) block_til_ready() argument
H A Dmxser.c268 const struct mxser_cardinfo *info; member in struct:mxser_board
357 static void mxser_set_must_fifo_value(struct mxser_port *info) mxser_set_must_fifo_value() argument
362 oldlcr = inb(info->ioaddr + UART_LCR); mxser_set_must_fifo_value()
363 outb(MOXA_MUST_ENTER_ENCHANCE, info->ioaddr + UART_LCR); mxser_set_must_fifo_value()
365 efr = inb(info->ioaddr + MOXA_MUST_EFR_REGISTER); mxser_set_must_fifo_value()
369 outb(efr, info->ioaddr + MOXA_MUST_EFR_REGISTER); mxser_set_must_fifo_value()
370 outb((u8)info->rx_high_water, info->ioaddr + MOXA_MUST_RBRTH_REGISTER); mxser_set_must_fifo_value()
371 outb((u8)info->rx_trigger, info->ioaddr + MOXA_MUST_RBRTI_REGISTER); mxser_set_must_fifo_value()
372 outb((u8)info->rx_low_water, info->ioaddr + MOXA_MUST_RBRTL_REGISTER); mxser_set_must_fifo_value()
373 outb(oldlcr, info->ioaddr + UART_LCR); mxser_set_must_fifo_value()
514 static void process_txrx_fifo(struct mxser_port *info) process_txrx_fifo() argument
518 if ((info->type == PORT_16450) || (info->type == PORT_8250)) { process_txrx_fifo()
519 info->rx_trigger = 1; process_txrx_fifo()
520 info->rx_high_water = 1; process_txrx_fifo()
521 info->rx_low_water = 1; process_txrx_fifo()
522 info->xmit_fifo_size = 1; process_txrx_fifo()
525 if (info->board->chip_flag == Gpci_uart_info[i].type) { process_txrx_fifo()
526 info->rx_trigger = Gpci_uart_info[i].rx_trigger; process_txrx_fifo()
527 info->rx_low_water = Gpci_uart_info[i].rx_low_water; process_txrx_fifo()
528 info->rx_high_water = Gpci_uart_info[i].rx_high_water; process_txrx_fifo()
529 info->xmit_fifo_size = Gpci_uart_info[i].xmit_fifo_size; process_txrx_fifo()
573 struct mxser_port *info = tty->driver_data; mxser_set_baud() local
577 if (!info->ioaddr) mxser_set_baud()
580 if (newspd > info->max_baud) mxser_set_baud()
584 quot = 2 * info->baud_base / 269; mxser_set_baud()
587 quot = info->baud_base / newspd; mxser_set_baud()
590 baud = info->baud_base/quot; mxser_set_baud()
596 info->timeout = ((info->xmit_fifo_size * HZ * 10 * quot) / info->baud_base); mxser_set_baud()
597 info->timeout += HZ / 50; /* Add .02 seconds of slop */ mxser_set_baud()
600 info->MCR |= UART_MCR_DTR; mxser_set_baud()
601 outb(info->MCR, info->ioaddr + UART_MCR); mxser_set_baud()
603 info->MCR &= ~UART_MCR_DTR; mxser_set_baud()
604 outb(info->MCR, info->ioaddr + UART_MCR); mxser_set_baud()
608 cval = inb(info->ioaddr + UART_LCR); mxser_set_baud()
610 outb(cval | UART_LCR_DLAB, info->ioaddr + UART_LCR); /* set DLAB */ mxser_set_baud()
612 outb(quot & 0xff, info->ioaddr + UART_DLL); /* LS of divisor */ mxser_set_baud()
613 outb(quot >> 8, info->ioaddr + UART_DLM); /* MS of divisor */ mxser_set_baud()
614 outb(cval, info->ioaddr + UART_LCR); /* reset DLAB */ mxser_set_baud()
618 quot = info->baud_base % newspd; mxser_set_baud()
626 mxser_set_must_enum_value(info->ioaddr, quot); mxser_set_baud()
629 mxser_set_must_enum_value(info->ioaddr, 0); mxser_set_baud()
641 struct mxser_port *info = tty->driver_data; mxser_change_speed() local
647 if (!info->ioaddr) mxser_change_speed()
680 if ((info->type == PORT_8250) || (info->type == PORT_16450)) { mxser_change_speed()
681 if (info->board->chip_flag) { mxser_change_speed()
684 mxser_set_must_fifo_value(info); mxser_change_speed()
689 if (info->board->chip_flag) { mxser_change_speed()
691 mxser_set_must_fifo_value(info); mxser_change_speed()
693 switch (info->rx_trigger) { mxser_change_speed()
711 info->IER &= ~UART_IER_MSI; mxser_change_speed()
712 info->MCR &= ~UART_MCR_AFE; mxser_change_speed()
714 info->port.flags |= ASYNC_CTS_FLOW; mxser_change_speed()
715 info->IER |= UART_IER_MSI; mxser_change_speed()
716 if ((info->type == PORT_16550A) || (info->board->chip_flag)) { mxser_change_speed()
717 info->MCR |= UART_MCR_AFE; mxser_change_speed()
719 status = inb(info->ioaddr + UART_MSR); mxser_change_speed()
723 if (info->type != PORT_16550A && mxser_change_speed()
724 !info->board->chip_flag) { mxser_change_speed()
725 outb(info->IER & ~UART_IER_THRI, mxser_change_speed()
726 info->ioaddr + mxser_change_speed()
728 info->IER |= UART_IER_THRI; mxser_change_speed()
729 outb(info->IER, info->ioaddr + mxser_change_speed()
737 if ((info->type != PORT_16550A) && mxser_change_speed()
738 (!info->board->chip_flag)) { mxser_change_speed()
739 info->IER &= ~UART_IER_THRI; mxser_change_speed()
740 outb(info->IER, info->ioaddr + mxser_change_speed()
747 info->port.flags &= ~ASYNC_CTS_FLOW; mxser_change_speed()
749 outb(info->MCR, info->ioaddr + UART_MCR); mxser_change_speed()
751 info->port.flags &= ~ASYNC_CHECK_CD; mxser_change_speed()
753 info->port.flags |= ASYNC_CHECK_CD; mxser_change_speed()
754 info->IER |= UART_IER_MSI; mxser_change_speed()
756 outb(info->IER, info->ioaddr + UART_IER); mxser_change_speed()
761 info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; mxser_change_speed()
763 info->read_status_mask |= UART_LSR_FE | UART_LSR_PE; mxser_change_speed()
765 info->read_status_mask |= UART_LSR_BI; mxser_change_speed()
767 info->ignore_status_mask = 0; mxser_change_speed()
770 info->ignore_status_mask |= UART_LSR_BI; mxser_change_speed()
771 info->read_status_mask |= UART_LSR_BI; mxser_change_speed()
777 info->ignore_status_mask |= mxser_change_speed()
781 info->read_status_mask |= mxser_change_speed()
787 if (info->board->chip_flag) { mxser_change_speed()
788 mxser_set_must_xon1_value(info->ioaddr, START_CHAR(tty)); mxser_change_speed()
789 mxser_set_must_xoff1_value(info->ioaddr, STOP_CHAR(tty)); mxser_change_speed()
792 info->ioaddr); mxser_change_speed()
795 info->ioaddr); mxser_change_speed()
799 info->ioaddr); mxser_change_speed()
802 info->ioaddr); mxser_change_speed()
807 outb(fcr, info->ioaddr + UART_FCR); /* set fcr */ mxser_change_speed()
808 outb(cval, info->ioaddr + UART_LCR); mxser_change_speed()
864 struct mxser_port *info = container_of(port, struct mxser_port, port); mxser_activate() local
872 spin_lock_irqsave(&info->slock, flags); mxser_activate()
874 if (!info->ioaddr || !info->type) { mxser_activate()
877 spin_unlock_irqrestore(&info->slock, flags); mxser_activate()
880 info->port.xmit_buf = (unsigned char *) page; mxser_activate()
886 if (info->board->chip_flag) mxser_activate()
889 MOXA_MUST_FCR_GDA_MODE_ENABLE), info->ioaddr + UART_FCR); mxser_activate()
892 info->ioaddr + UART_FCR); mxser_activate()
899 if (inb(info->ioaddr + UART_LSR) == 0xff) { mxser_activate()
900 spin_unlock_irqrestore(&info->slock, flags); mxser_activate()
911 (void) inb(info->ioaddr + UART_LSR); mxser_activate()
912 (void) inb(info->ioaddr + UART_RX); mxser_activate()
913 (void) inb(info->ioaddr + UART_IIR); mxser_activate()
914 (void) inb(info->ioaddr + UART_MSR); mxser_activate()
919 outb(UART_LCR_WLEN8, info->ioaddr + UART_LCR); /* reset DLAB */ mxser_activate()
920 info->MCR = UART_MCR_DTR | UART_MCR_RTS; mxser_activate()
921 outb(info->MCR, info->ioaddr + UART_MCR); mxser_activate()
926 info->IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI; mxser_activate()
928 if (info->board->chip_flag) mxser_activate()
929 info->IER |= MOXA_MUST_IER_EGDAI; mxser_activate()
930 outb(info->IER, info->ioaddr + UART_IER); /* enable interrupts */ mxser_activate()
935 (void) inb(info->ioaddr + UART_LSR); mxser_activate()
936 (void) inb(info->ioaddr + UART_RX); mxser_activate()
937 (void) inb(info->ioaddr + UART_IIR); mxser_activate()
938 (void) inb(info->ioaddr + UART_MSR); mxser_activate()
941 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; mxser_activate()
947 spin_unlock_irqrestore(&info->slock, flags); mxser_activate()
957 struct mxser_port *info = container_of(port, struct mxser_port, port); mxser_shutdown_port() local
960 spin_lock_irqsave(&info->slock, flags); mxser_shutdown_port()
966 wake_up_interruptible(&info->port.delta_msr_wait); mxser_shutdown_port()
971 if (info->port.xmit_buf) { mxser_shutdown_port()
972 free_page((unsigned long) info->port.xmit_buf); mxser_shutdown_port()
973 info->port.xmit_buf = NULL; mxser_shutdown_port()
976 info->IER = 0; mxser_shutdown_port()
977 outb(0x00, info->ioaddr + UART_IER); mxser_shutdown_port()
980 if (info->board->chip_flag) mxser_shutdown_port()
983 info->ioaddr + UART_FCR); mxser_shutdown_port()
986 info->ioaddr + UART_FCR); mxser_shutdown_port()
989 (void) inb(info->ioaddr + UART_RX); mxser_shutdown_port()
992 if (info->board->chip_flag) mxser_shutdown_port()
993 SET_MOXA_MUST_NO_SOFTWARE_FLOW_CONTROL(info->ioaddr); mxser_shutdown_port()
995 spin_unlock_irqrestore(&info->slock, flags); mxser_shutdown_port()
1006 struct mxser_port *info; mxser_open() local
1012 info = &mxser_boards[line / MXSER_PORTS_PER_BOARD].ports[line % MXSER_PORTS_PER_BOARD]; mxser_open()
1013 if (!info->ioaddr) mxser_open()
1016 tty->driver_data = info; mxser_open()
1017 return tty_port_open(&info->port, tty, filp); mxser_open()
1022 struct mxser_port *info = tty->driver_data; mxser_flush_buffer() local
1027 spin_lock_irqsave(&info->slock, flags); mxser_flush_buffer()
1028 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; mxser_flush_buffer()
1030 fcr = inb(info->ioaddr + UART_FCR); mxser_flush_buffer()
1032 info->ioaddr + UART_FCR); mxser_flush_buffer()
1033 outb(fcr, info->ioaddr + UART_FCR); mxser_flush_buffer()
1035 spin_unlock_irqrestore(&info->slock, flags); mxser_flush_buffer()
1043 struct mxser_port *info = container_of(port, struct mxser_port, port); mxser_close_port() local
1051 info->IER &= ~UART_IER_RLSI; mxser_close_port()
1052 if (info->board->chip_flag) mxser_close_port()
1053 info->IER &= ~MOXA_MUST_RECV_ISR; mxser_close_port()
1055 outb(info->IER, info->ioaddr + UART_IER); mxser_close_port()
1062 while (!(inb(info->ioaddr + UART_LSR) & UART_LSR_TEMT)) { mxser_close_port()
1077 struct mxser_port *info = tty->driver_data; mxser_close() local
1078 struct tty_port *port = &info->port; mxser_close()
1080 if (tty->index == MXSER_PORTS || info == NULL) mxser_close()
1103 struct mxser_port *info = tty->driver_data; mxser_write() local
1106 if (!info->port.xmit_buf) mxser_write()
1110 c = min_t(int, count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, mxser_write()
1111 SERIAL_XMIT_SIZE - info->xmit_head)); mxser_write()
1115 memcpy(info->port.xmit_buf + info->xmit_head, buf, c); mxser_write()
1116 spin_lock_irqsave(&info->slock, flags); mxser_write()
1117 info->xmit_head = (info->xmit_head + c) & mxser_write()
1119 info->xmit_cnt += c; mxser_write()
1120 spin_unlock_irqrestore(&info->slock, flags); mxser_write()
1127 if (info->xmit_cnt && !tty->stopped) { mxser_write()
1129 (info->type == PORT_16550A) || mxser_write()
1130 (info->board->chip_flag)) { mxser_write()
1131 spin_lock_irqsave(&info->slock, flags); mxser_write()
1132 outb(info->IER & ~UART_IER_THRI, info->ioaddr + mxser_write()
1134 info->IER |= UART_IER_THRI; mxser_write()
1135 outb(info->IER, info->ioaddr + UART_IER); mxser_write()
1136 spin_unlock_irqrestore(&info->slock, flags); mxser_write()
1144 struct mxser_port *info = tty->driver_data; mxser_put_char() local
1147 if (!info->port.xmit_buf) mxser_put_char()
1150 if (info->xmit_cnt >= SERIAL_XMIT_SIZE - 1) mxser_put_char()
1153 spin_lock_irqsave(&info->slock, flags); mxser_put_char()
1154 info->port.xmit_buf[info->xmit_head++] = ch; mxser_put_char()
1155 info->xmit_head &= SERIAL_XMIT_SIZE - 1; mxser_put_char()
1156 info->xmit_cnt++; mxser_put_char()
1157 spin_unlock_irqrestore(&info->slock, flags); mxser_put_char()
1160 (info->type == PORT_16550A) || mxser_put_char()
1161 info->board->chip_flag) { mxser_put_char()
1162 spin_lock_irqsave(&info->slock, flags); mxser_put_char()
1163 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER); mxser_put_char()
1164 info->IER |= UART_IER_THRI; mxser_put_char()
1165 outb(info->IER, info->ioaddr + UART_IER); mxser_put_char()
1166 spin_unlock_irqrestore(&info->slock, flags); mxser_put_char()
1175 struct mxser_port *info = tty->driver_data; mxser_flush_chars() local
1178 if (info->xmit_cnt <= 0 || tty->stopped || !info->port.xmit_buf || mxser_flush_chars()
1179 (tty->hw_stopped && info->type != PORT_16550A && mxser_flush_chars()
1180 !info->board->chip_flag)) mxser_flush_chars()
1183 spin_lock_irqsave(&info->slock, flags); mxser_flush_chars()
1185 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER); mxser_flush_chars()
1186 info->IER |= UART_IER_THRI; mxser_flush_chars()
1187 outb(info->IER, info->ioaddr + UART_IER); mxser_flush_chars()
1189 spin_unlock_irqrestore(&info->slock, flags); mxser_flush_chars()
1194 struct mxser_port *info = tty->driver_data; mxser_write_room() local
1197 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1; mxser_write_room()
1203 struct mxser_port *info = tty->driver_data; mxser_chars_in_buffer() local
1204 return info->xmit_cnt; mxser_chars_in_buffer()
1215 struct mxser_port *info = tty->driver_data; mxser_get_serial_info() local
1217 .type = info->type, mxser_get_serial_info()
1219 .port = info->ioaddr, mxser_get_serial_info()
1220 .irq = info->board->irq, mxser_get_serial_info()
1221 .flags = info->port.flags, mxser_get_serial_info()
1222 .baud_base = info->baud_base, mxser_get_serial_info()
1223 .close_delay = info->port.close_delay, mxser_get_serial_info()
1224 .closing_wait = info->port.closing_wait, mxser_get_serial_info()
1225 .custom_divisor = info->custom_divisor, mxser_get_serial_info()
1236 struct mxser_port *info = tty->driver_data; mxser_set_serial_info() local
1237 struct tty_port *port = &info->port; mxser_set_serial_info()
1244 if (!new_info || !info->ioaddr) mxser_set_serial_info()
1249 if (new_serial.irq != info->board->irq || mxser_set_serial_info()
1250 new_serial.port != info->ioaddr) mxser_set_serial_info()
1256 if ((new_serial.baud_base != info->baud_base) || mxser_set_serial_info()
1257 (new_serial.close_delay != info->port.close_delay) || mxser_set_serial_info()
1258 ((new_serial.flags & ~ASYNC_USR_MASK) != (info->port.flags & ~ASYNC_USR_MASK))) mxser_set_serial_info()
1260 info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) | mxser_set_serial_info()
1273 (new_serial.baud_base != info->baud_base || mxser_set_serial_info()
1275 info->custom_divisor)) { mxser_set_serial_info()
1283 info->type = new_serial.type; mxser_set_serial_info()
1285 process_txrx_fifo(info); mxser_set_serial_info()
1289 spin_lock_irqsave(&info->slock, sl_flags); mxser_set_serial_info()
1291 spin_unlock_irqrestore(&info->slock, sl_flags); mxser_set_serial_info()
1302 * mxser_get_lsr_info - get line status register info
1304 * Purpose: Let user call ioctl() to get info when the UART physically
1311 static int mxser_get_lsr_info(struct mxser_port *info, mxser_get_lsr_info() argument
1318 spin_lock_irqsave(&info->slock, flags); mxser_get_lsr_info()
1319 status = inb(info->ioaddr + UART_LSR); mxser_get_lsr_info()
1320 spin_unlock_irqrestore(&info->slock, flags); mxser_get_lsr_info()
1327 struct mxser_port *info = tty->driver_data; mxser_tiocmget() local
1337 control = info->MCR; mxser_tiocmget()
1339 spin_lock_irqsave(&info->slock, flags); mxser_tiocmget()
1340 status = inb(info->ioaddr + UART_MSR); mxser_tiocmget()
1342 mxser_check_modem_status(tty, info, status); mxser_tiocmget()
1343 spin_unlock_irqrestore(&info->slock, flags); mxser_tiocmget()
1355 struct mxser_port *info = tty->driver_data; mxser_tiocmset() local
1364 spin_lock_irqsave(&info->slock, flags); mxser_tiocmset()
1367 info->MCR |= UART_MCR_RTS; mxser_tiocmset()
1369 info->MCR |= UART_MCR_DTR; mxser_tiocmset()
1372 info->MCR &= ~UART_MCR_RTS; mxser_tiocmset()
1374 info->MCR &= ~UART_MCR_DTR; mxser_tiocmset()
1376 outb(info->MCR, info->ioaddr + UART_MCR); mxser_tiocmset()
1377 spin_unlock_irqrestore(&info->slock, flags); mxser_tiocmset()
1642 static int mxser_cflags_changed(struct mxser_port *info, unsigned long arg, mxser_cflags_changed() argument
1649 spin_lock_irqsave(&info->slock, flags); mxser_cflags_changed()
1650 cnow = info->icount; /* atomic copy */ mxser_cflags_changed()
1651 spin_unlock_irqrestore(&info->slock, flags); mxser_cflags_changed()
1666 struct mxser_port *info = tty->driver_data; mxser_ioctl() local
1667 struct tty_port *port = &info->port; mxser_ioctl()
1683 if (info->board->chip_flag != MOXA_MUST_MU860_HWID) mxser_ioctl()
1697 spin_lock_irq(&info->slock); mxser_ioctl()
1698 val = inb(info->opmode_ioaddr); mxser_ioctl()
1701 outb(val, info->opmode_ioaddr); mxser_ioctl()
1702 spin_unlock_irq(&info->slock); mxser_ioctl()
1705 spin_lock_irq(&info->slock); mxser_ioctl()
1706 opmode = inb(info->opmode_ioaddr) >> shiftbit; mxser_ioctl()
1707 spin_unlock_irq(&info->slock); mxser_ioctl()
1731 return mxser_get_lsr_info(info, argp); mxser_ioctl()
1739 spin_lock_irqsave(&info->slock, flags); mxser_ioctl()
1740 cnow = info->icount; /* note the counters on entry */ mxser_ioctl()
1741 spin_unlock_irqrestore(&info->slock, flags); mxser_ioctl()
1743 return wait_event_interruptible(info->port.delta_msr_wait, mxser_ioctl()
1744 mxser_cflags_changed(info, arg, &cnow)); mxser_ioctl()
1746 return put_user(info->baud_base != 115200 ? 1 : 0, (int __user *)argp); mxser_ioctl()
1748 spin_lock_irq(&info->slock); mxser_ioctl()
1749 info->mon_data.rxcnt = 0; mxser_ioctl()
1750 info->mon_data.txcnt = 0; mxser_ioctl()
1751 spin_unlock_irq(&info->slock); mxser_ioctl()
1758 spin_lock_irq(&info->slock); mxser_ioctl()
1759 lsr = inb(info->ioaddr + UART_LSR) & UART_LSR_THRE; mxser_ioctl()
1760 spin_unlock_irq(&info->slock); mxser_ioctl()
1768 spin_lock_irq(&info->slock); mxser_ioctl()
1769 status = mxser_get_msr(info->ioaddr, 1, tty->index); mxser_ioctl()
1770 mxser_check_modem_status(tty, info, status); mxser_ioctl()
1772 mcr = inb(info->ioaddr + UART_MCR); mxser_ioctl()
1773 spin_unlock_irq(&info->slock); mxser_ioctl()
1776 info->mon_data.hold_reason &= ~NPPI_NOTIFY_XOFFHOLD; mxser_ioctl()
1778 info->mon_data.hold_reason |= NPPI_NOTIFY_XOFFHOLD; mxser_ioctl()
1781 info->mon_data.hold_reason &= ~NPPI_NOTIFY_XOFFXENT; mxser_ioctl()
1783 info->mon_data.hold_reason |= NPPI_NOTIFY_XOFFXENT; mxser_ioctl()
1786 info->mon_data.hold_reason |= NPPI_NOTIFY_CTSHOLD; mxser_ioctl()
1788 info->mon_data.hold_reason &= ~NPPI_NOTIFY_CTSHOLD; mxser_ioctl()
1790 if (copy_to_user(argp, &info->mon_data, mxser_ioctl()
1797 if (put_user(info->err_shadow, (unsigned char __user *)argp)) mxser_ioctl()
1800 info->err_shadow = 0; mxser_ioctl()
1828 struct mxser_port *info = tty->driver_data; mxser_get_icount() local
1832 spin_lock_irqsave(&info->slock, flags); mxser_get_icount()
1833 cnow = info->icount; mxser_get_icount()
1834 spin_unlock_irqrestore(&info->slock, flags); mxser_get_icount()
1852 struct mxser_port *info = tty->driver_data; mxser_stoprx() local
1854 info->ldisc_stop_rx = 1; mxser_stoprx()
1856 if (info->board->chip_flag) { mxser_stoprx()
1857 info->IER &= ~MOXA_MUST_RECV_ISR; mxser_stoprx()
1858 outb(info->IER, info->ioaddr + UART_IER); mxser_stoprx()
1860 info->x_char = STOP_CHAR(tty); mxser_stoprx()
1861 outb(0, info->ioaddr + UART_IER); mxser_stoprx()
1862 info->IER |= UART_IER_THRI; mxser_stoprx()
1863 outb(info->IER, info->ioaddr + UART_IER); mxser_stoprx()
1868 info->MCR &= ~UART_MCR_RTS; mxser_stoprx()
1869 outb(info->MCR, info->ioaddr + UART_MCR); mxser_stoprx()
1884 struct mxser_port *info = tty->driver_data; mxser_unthrottle() local
1887 info->ldisc_stop_rx = 0; mxser_unthrottle()
1889 if (info->x_char) mxser_unthrottle()
1890 info->x_char = 0; mxser_unthrottle()
1892 if (info->board->chip_flag) { mxser_unthrottle()
1893 info->IER |= MOXA_MUST_RECV_ISR; mxser_unthrottle()
1894 outb(info->IER, info->ioaddr + UART_IER); mxser_unthrottle()
1896 info->x_char = START_CHAR(tty); mxser_unthrottle()
1897 outb(0, info->ioaddr + UART_IER); mxser_unthrottle()
1898 info->IER |= UART_IER_THRI; mxser_unthrottle()
1899 outb(info->IER, info->ioaddr + UART_IER); mxser_unthrottle()
1905 info->MCR |= UART_MCR_RTS; mxser_unthrottle()
1906 outb(info->MCR, info->ioaddr + UART_MCR); mxser_unthrottle()
1918 struct mxser_port *info = tty->driver_data; mxser_stop() local
1921 spin_lock_irqsave(&info->slock, flags); mxser_stop()
1922 if (info->IER & UART_IER_THRI) { mxser_stop()
1923 info->IER &= ~UART_IER_THRI; mxser_stop()
1924 outb(info->IER, info->ioaddr + UART_IER); mxser_stop()
1926 spin_unlock_irqrestore(&info->slock, flags); mxser_stop()
1931 struct mxser_port *info = tty->driver_data; mxser_start() local
1934 spin_lock_irqsave(&info->slock, flags); mxser_start()
1935 if (info->xmit_cnt && info->port.xmit_buf) { mxser_start()
1936 outb(info->IER & ~UART_IER_THRI, info->ioaddr + UART_IER); mxser_start()
1937 info->IER |= UART_IER_THRI; mxser_start()
1938 outb(info->IER, info->ioaddr + UART_IER); mxser_start()
1940 spin_unlock_irqrestore(&info->slock, flags); mxser_start()
1945 struct mxser_port *info = tty->driver_data; mxser_set_termios() local
1948 spin_lock_irqsave(&info->slock, flags); mxser_set_termios()
1950 spin_unlock_irqrestore(&info->slock, flags); mxser_set_termios()
1963 if (info->board->chip_flag) { mxser_set_termios()
1964 spin_lock_irqsave(&info->slock, flags); mxser_set_termios()
1966 info->ioaddr); mxser_set_termios()
1967 spin_unlock_irqrestore(&info->slock, flags); mxser_set_termios()
1979 struct mxser_port *info = tty->driver_data; mxser_wait_until_sent() local
1984 if (info->type == PORT_UNKNOWN) mxser_wait_until_sent()
1987 if (info->xmit_fifo_size == 0) mxser_wait_until_sent()
1999 char_time = (info->timeout - HZ / 50) / info->xmit_fifo_size; mxser_wait_until_sent()
2010 * takes longer than info->timeout, this is probably due to a mxser_wait_until_sent()
2012 * 2*info->timeout. mxser_wait_until_sent()
2014 if (!timeout || timeout > 2 * info->timeout) mxser_wait_until_sent()
2015 timeout = 2 * info->timeout; mxser_wait_until_sent()
2017 spin_lock_irqsave(&info->slock, flags); mxser_wait_until_sent()
2018 while (!((lsr = inb(info->ioaddr + UART_LSR)) & UART_LSR_TEMT)) { mxser_wait_until_sent()
2019 spin_unlock_irqrestore(&info->slock, flags); mxser_wait_until_sent()
2021 spin_lock_irqsave(&info->slock, flags); mxser_wait_until_sent()
2027 spin_unlock_irqrestore(&info->slock, flags); mxser_wait_until_sent()
2036 struct mxser_port *info = tty->driver_data; mxser_hangup() local
2039 tty_port_hangup(&info->port); mxser_hangup()
2047 struct mxser_port *info = tty->driver_data; mxser_rs_break() local
2050 spin_lock_irqsave(&info->slock, flags); mxser_rs_break()
2052 outb(inb(info->ioaddr + UART_LCR) | UART_LCR_SBC, mxser_rs_break()
2053 info->ioaddr + UART_LCR); mxser_rs_break()
2055 outb(inb(info->ioaddr + UART_LCR) & ~UART_LCR_SBC, mxser_rs_break()
2056 info->ioaddr + UART_LCR); mxser_rs_break()
2057 spin_unlock_irqrestore(&info->slock, flags); mxser_rs_break()
2236 max = brd->info->nports; mxser_interrupt()
2359 brd->vector < brd->ports[0].ioaddr + 8 * brd->info->nports; mxser_overlapping_vector()
2378 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); mxser_release_ISA_res()
2385 struct mxser_port *info; mxser_initbrd() local
2392 for (i = 0; i < brd->info->nports; i++) { mxser_initbrd()
2393 info = &brd->ports[i]; mxser_initbrd()
2394 tty_port_init(&info->port); mxser_initbrd()
2395 info->port.ops = &mxser_port_ops; mxser_initbrd()
2396 info->board = brd; mxser_initbrd()
2397 info->stop_rx = 0; mxser_initbrd()
2398 info->ldisc_stop_rx = 0; mxser_initbrd()
2402 mxser_enable_must_enchance_mode(info->ioaddr); mxser_initbrd()
2404 info->port.flags = ASYNC_SHARE_IRQ; mxser_initbrd()
2405 info->type = brd->uart_type; mxser_initbrd()
2407 process_txrx_fifo(info); mxser_initbrd()
2409 info->custom_divisor = info->baud_base * 16; mxser_initbrd()
2410 info->port.close_delay = 5 * HZ / 10; mxser_initbrd()
2411 info->port.closing_wait = 30 * HZ; mxser_initbrd()
2412 info->normal_termios = mxvar_sdriver->init_termios; mxser_initbrd()
2413 memset(&info->mon_data, 0, sizeof(struct mxser_mon)); mxser_initbrd()
2414 info->err_shadow = 0; mxser_initbrd()
2415 spin_lock_init(&info->slock); mxser_initbrd()
2418 outb(inb(info->ioaddr + UART_IER) & 0xf0, mxser_initbrd()
2419 info->ioaddr + UART_IER); mxser_initbrd()
2425 for (i = 0; i < brd->info->nports; i++) mxser_initbrd()
2429 brd->info->name, brd->irq); mxser_initbrd()
2439 for (i = 0; i < brd->info->nports; i++) { mxser_board_remove()
2457 brd->info = &mxser_cards[0]; mxser_get_ISA_conf()
2460 brd->info = &mxser_cards[1]; mxser_get_ISA_conf()
2463 brd->info = &mxser_cards[2]; mxser_get_ISA_conf()
2466 brd->info = &mxser_cards[5]; mxser_get_ISA_conf()
2469 brd->info = &mxser_cards[6]; mxser_get_ISA_conf()
2472 brd->info = &mxser_cards[7]; mxser_get_ISA_conf()
2481 if (brd->info->nports == 2 || (brd->info->flags & MXSER_HAS2)) { mxser_get_ISA_conf()
2486 } else if (brd->info->nports == 4) { mxser_get_ISA_conf()
2492 } else if (brd->info->nports == 8) { mxser_get_ISA_conf()
2536 if (!request_region(brd->ports[0].ioaddr, 8 * brd->info->nports, mxser_get_ISA_conf()
2541 8 * brd->info->nports - 1); mxser_get_ISA_conf()
2547 release_region(brd->ports[0].ioaddr, 8 * brd->info->nports); mxser_get_ISA_conf()
2551 8 * brd->info->nports - 1); mxser_get_ISA_conf()
2554 return brd->info->nports; mxser_get_ISA_conf()
2572 if (mxser_boards[i].info == NULL) mxser_probe()
2599 brd->info = &mxser_cards[ent->driver_data]; mxser_probe()
2600 for (i = 0; i < brd->info->nports; i++) mxser_probe()
2617 for (i = 0; i < brd->info->nports; i++) { mxser_probe()
2624 if (brd->info->flags & MXSER_HIGHBAUD) mxser_probe()
2632 for (i = 0; i < brd->info->nports; i++) { mxser_probe()
2642 for (i = 0; i < brd->info->nports; i++) { mxser_probe()
2652 for (i = 0; i < brd->info->nports; i++) { mxser_probe()
2668 for (i = 0; i < brd->info->nports; i++) mxser_probe()
2674 brd->info = NULL; mxser_probe()
2695 brd->info = NULL; mxser_remove()
2746 brd->info = NULL; mxser_module_init()
2751 brd->info->name, ioaddr[b]); mxser_module_init()
2756 brd->info = NULL; mxser_module_init()
2761 for (i = 0; i < brd->info->nports; i++) { mxser_module_init()
2768 for (i = 0; i < brd->info->nports; i++) mxser_module_init()
2772 brd->info = NULL; mxser_module_init()
2776 if (brd->info == NULL) mxser_module_init()
2806 if (mxser_boards[i].info != NULL) mxser_module_exit()
2812 if (mxser_boards[i].info != NULL) mxser_module_exit()
H A Dcyclades.c176 * are accessed via settings in info->port.flags.
332 static inline int serial_paranoia_check(struct cyclades_port *info, serial_paranoia_check() argument
336 if (!info) { serial_paranoia_check()
342 if (info->magic != CYCLADES_MAGIC) { serial_paranoia_check()
443 struct cyclades_port *info; cyy_chip_rx() local
454 info = &cinfo->ports[channel + chip * 4]; cyy_chip_rx()
455 port = &info->port; cyy_chip_rx()
456 save_car = cyy_readb(info, CyCAR); cyy_chip_rx()
457 cyy_writeb(info, CyCAR, save_xir); cyy_chip_rx()
458 ivr = cyy_readb(info, CyRIVR) & CyIVRMask; cyy_chip_rx()
462 data = cyy_readb(info, CyRDSR); cyy_chip_rx()
466 info->icount.brk++; cyy_chip_rx()
468 info->icount.frame++; cyy_chip_rx()
470 info->icount.parity++; cyy_chip_rx()
472 info->icount.overrun++; cyy_chip_rx()
474 if (data & info->ignore_status_mask) { cyy_chip_rx()
475 info->icount.rx++; cyy_chip_rx()
479 if (data & info->read_status_mask) { cyy_chip_rx()
482 cyy_readb(info, CyRDSR), cyy_chip_rx()
484 info->icount.rx++; cyy_chip_rx()
495 cyy_readb(info, CyRDSR), cyy_chip_rx()
497 info->icount.rx++; cyy_chip_rx()
498 info->idle_stats.frame_errs++; cyy_chip_rx()
502 cyy_readb(info, CyRDSR), cyy_chip_rx()
504 info->icount.rx++; cyy_chip_rx()
505 info->idle_stats.parity_errs++; cyy_chip_rx()
509 info->icount.rx++; cyy_chip_rx()
515 cyy_readb(info, CyRDSR), cyy_chip_rx()
517 info->icount.rx++; cyy_chip_rx()
518 info->idle_stats.overruns++; cyy_chip_rx()
526 info->icount.rx++; cyy_chip_rx()
530 info->icount.rx++; cyy_chip_rx()
535 info->icount.buf_overrun++; cyy_chip_rx()
536 info->idle_stats.overruns++; cyy_chip_rx()
540 char_count = cyy_readb(info, CyRDCR); cyy_chip_rx()
543 ++info->mon.int_count; cyy_chip_rx()
544 info->mon.char_count += char_count; cyy_chip_rx()
545 if (char_count > info->mon.char_max) cyy_chip_rx()
546 info->mon.char_max = char_count; cyy_chip_rx()
547 info->mon.char_last = char_count; cyy_chip_rx()
551 data = cyy_readb(info, CyRDSR); cyy_chip_rx()
553 info->idle_stats.recv_bytes++; cyy_chip_rx()
554 info->icount.rx++; cyy_chip_rx()
559 info->idle_stats.recv_idle = jiffies; cyy_chip_rx()
564 cyy_writeb(info, CyRIR, save_xir & 0x3f); cyy_chip_rx()
565 cyy_writeb(info, CyCAR, save_car); cyy_chip_rx()
571 struct cyclades_port *info; cyy_chip_tx() local
589 info = &cinfo->ports[channel + chip * 4]; cyy_chip_tx()
590 tty = tty_port_tty_get(&info->port); cyy_chip_tx()
592 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) & ~CyTxRdy); cyy_chip_tx()
597 char_count = info->xmit_fifo_size; cyy_chip_tx()
599 if (info->x_char) { /* send special char */ cyy_chip_tx()
600 outch = info->x_char; cyy_chip_tx()
601 cyy_writeb(info, CyTDR, outch); cyy_chip_tx()
603 info->icount.tx++; cyy_chip_tx()
604 info->x_char = 0; cyy_chip_tx()
607 if (info->breakon || info->breakoff) { cyy_chip_tx()
608 if (info->breakon) { cyy_chip_tx()
609 cyy_writeb(info, CyTDR, 0); cyy_chip_tx()
610 cyy_writeb(info, CyTDR, 0x81); cyy_chip_tx()
611 info->breakon = 0; cyy_chip_tx()
614 if (info->breakoff) { cyy_chip_tx()
615 cyy_writeb(info, CyTDR, 0); cyy_chip_tx()
616 cyy_writeb(info, CyTDR, 0x83); cyy_chip_tx()
617 info->breakoff = 0; cyy_chip_tx()
623 if (!info->xmit_cnt) { cyy_chip_tx()
624 if (cyy_readb(info, CySRER) & CyTxMpty) { cyy_chip_tx()
625 cyy_writeb(info, CySRER, cyy_chip_tx()
626 cyy_readb(info, CySRER) & ~CyTxMpty); cyy_chip_tx()
628 cyy_writeb(info, CySRER, CyTxMpty | cyy_chip_tx()
629 (cyy_readb(info, CySRER) & ~CyTxRdy)); cyy_chip_tx()
633 if (info->port.xmit_buf == NULL) { cyy_chip_tx()
634 cyy_writeb(info, CySRER, cyy_chip_tx()
635 cyy_readb(info, CySRER) & ~CyTxRdy); cyy_chip_tx()
639 cyy_writeb(info, CySRER, cyy_chip_tx()
640 cyy_readb(info, CySRER) & ~CyTxRdy); cyy_chip_tx()
652 outch = info->port.xmit_buf[info->xmit_tail]; cyy_chip_tx()
654 info->xmit_cnt--; cyy_chip_tx()
655 info->xmit_tail = (info->xmit_tail + 1) & cyy_chip_tx()
657 cyy_writeb(info, CyTDR, outch); cyy_chip_tx()
658 info->icount.tx++; cyy_chip_tx()
661 info->xmit_cnt--; cyy_chip_tx()
662 info->xmit_tail = (info->xmit_tail + 1) & cyy_chip_tx()
664 cyy_writeb(info, CyTDR, outch); cyy_chip_tx()
665 cyy_writeb(info, CyTDR, 0); cyy_chip_tx()
666 info->icount.tx++; cyy_chip_tx()
677 cyy_writeb(info, CyTIR, save_xir & 0x3f); cyy_chip_tx()
678 cyy_writeb(info, CyCAR, save_car); cyy_chip_tx()
684 struct cyclades_port *info; cyy_chip_modem() local
692 info = &cinfo->ports[channel + chip * 4]; cyy_chip_modem()
693 save_car = cyy_readb(info, CyCAR); cyy_chip_modem()
694 cyy_writeb(info, CyCAR, save_xir); cyy_chip_modem()
696 mdm_change = cyy_readb(info, CyMISR); cyy_chip_modem()
697 mdm_status = cyy_readb(info, CyMSVR1); cyy_chip_modem()
699 tty = tty_port_tty_get(&info->port); cyy_chip_modem()
706 info->icount.dcd++; cyy_chip_modem()
708 info->icount.cts++; cyy_chip_modem()
710 info->icount.dsr++; cyy_chip_modem()
712 info->icount.rng++; cyy_chip_modem()
714 wake_up_interruptible(&info->port.delta_msr_wait); cyy_chip_modem()
717 if ((mdm_change & CyDCD) && (info->port.flags & ASYNC_CHECK_CD)) { cyy_chip_modem()
719 wake_up_interruptible(&info->port.open_wait); cyy_chip_modem()
723 if ((mdm_change & CyCTS) && tty_port_cts_enabled(&info->port)) { cyy_chip_modem()
729 cyy_writeb(info, CySRER, cyy_chip_modem()
730 cyy_readb(info, CySRER) | CyTxRdy); cyy_chip_modem()
738 cyy_writeb(info, CySRER, cyy_chip_modem()
739 cyy_readb(info, CySRER) & ~CyTxRdy); cyy_chip_modem()
750 cyy_writeb(info, CyMIR, save_xir & 0x3f); cyy_chip_modem()
751 cyy_writeb(info, CyCAR, save_car); cyy_chip_modem()
822 static void cyy_change_rts_dtr(struct cyclades_port *info, unsigned int set, cyy_change_rts_dtr() argument
825 struct cyclades_card *card = info->card; cyy_change_rts_dtr()
826 int channel = info->line - card->first_line; cyy_change_rts_dtr()
831 if (info->rtsdtr_inv) { cyy_change_rts_dtr()
843 cyy_writeb(info, CyCAR, channel); cyy_change_rts_dtr()
844 cyy_writeb(info, msvrr, rts); cyy_change_rts_dtr()
847 cyy_writeb(info, CyCAR, channel); cyy_change_rts_dtr()
848 cyy_writeb(info, msvrr, ~rts); cyy_change_rts_dtr()
851 cyy_writeb(info, CyCAR, channel); cyy_change_rts_dtr()
852 cyy_writeb(info, msvrd, dtr); cyy_change_rts_dtr()
856 cyy_readb(info, CyMSVR1), cyy_change_rts_dtr()
857 cyy_readb(info, CyMSVR2)); cyy_change_rts_dtr()
861 cyy_writeb(info, CyCAR, channel); cyy_change_rts_dtr()
862 cyy_writeb(info, msvrd, ~dtr); cyy_change_rts_dtr()
866 cyy_readb(info, CyMSVR1), cyy_change_rts_dtr()
867 cyy_readb(info, CyMSVR2)); cyy_change_rts_dtr()
920 static void cyz_handle_rx(struct cyclades_port *info) cyz_handle_rx() argument
922 struct BUF_CTRL __iomem *buf_ctrl = info->u.cyz.buf_ctrl; cyz_handle_rx()
923 struct cyclades_card *cinfo = info->card; cyz_handle_rx()
924 struct tty_port *port = &info->port; cyz_handle_rx()
947 info->mon.int_count++; cyz_handle_rx()
948 info->mon.char_count += char_count; cyz_handle_rx()
949 if (char_count > info->mon.char_max) cyz_handle_rx()
950 info->mon.char_max = char_count; cyz_handle_rx()
951 info->mon.char_last = char_count; cyz_handle_rx()
973 info->icount.rx += len; cyz_handle_rx()
974 info->idle_stats.recv_bytes += len; cyz_handle_rx()
984 info->idle_stats.recv_bytes++; cyz_handle_rx()
985 info->icount.rx++; cyz_handle_rx()
998 info->line])) cyz_handle_rx()
999 mod_timer(&cyz_rx_full_timer[info->line], cyz_handle_rx()
1002 info->idle_stats.recv_idle = jiffies; cyz_handle_rx()
1003 tty_schedule_flip(&info->port); cyz_handle_rx()
1009 static void cyz_handle_tx(struct cyclades_port *info) cyz_handle_tx() argument
1011 struct BUF_CTRL __iomem *buf_ctrl = info->u.cyz.buf_ctrl; cyz_handle_tx()
1012 struct cyclades_card *cinfo = info->card; cyz_handle_tx()
1021 if (info->xmit_cnt <= 0) /* Nothing to transmit */ cyz_handle_tx()
1036 tty = tty_port_tty_get(&info->port); cyz_handle_tx()
1040 if (info->x_char) { /* send special char */ cyz_handle_tx()
1041 data = info->x_char; cyz_handle_tx()
1045 info->x_char = 0; cyz_handle_tx()
1047 info->icount.tx++; cyz_handle_tx()
1052 (SERIAL_XMIT_SIZE - info->xmit_tail), cyz_handle_tx()
1053 min_t(unsigned int, info->xmit_cnt, cyz_handle_tx()
1057 &info->port.xmit_buf[info->xmit_tail], cyz_handle_tx()
1062 info->icount.tx += small_count; cyz_handle_tx()
1063 info->xmit_cnt -= small_count; cyz_handle_tx()
1064 info->xmit_tail = (info->xmit_tail + small_count) & cyz_handle_tx()
1068 while (info->xmit_cnt && char_count) { cyz_handle_tx()
1069 data = info->port.xmit_buf[info->xmit_tail]; cyz_handle_tx()
1070 info->xmit_cnt--; cyz_handle_tx()
1071 info->xmit_tail = (info->xmit_tail + 1) & cyz_handle_tx()
1077 info->icount.tx++; cyz_handle_tx()
1090 struct cyclades_port *info; cyz_handle_cmd() local
1101 info = &cinfo->ports[channel]; cyz_handle_cmd()
1105 tty_insert_flip_char(&info->port, 0, TTY_PARITY); cyz_handle_cmd()
1106 info->icount.rx++; cyz_handle_cmd()
1110 tty_insert_flip_char(&info->port, 0, TTY_FRAME); cyz_handle_cmd()
1111 info->icount.rx++; cyz_handle_cmd()
1115 tty_insert_flip_char(&info->port, 0, TTY_BREAK); cyz_handle_cmd()
1116 info->icount.rx++; cyz_handle_cmd()
1120 info->icount.dcd++; cyz_handle_cmd()
1122 if (info->port.flags & ASYNC_CHECK_CD) { cyz_handle_cmd()
1124 readl(&info->u.cyz.ch_ctrl->rs_status); cyz_handle_cmd()
1126 wake_up_interruptible(&info->port.open_wait); cyz_handle_cmd()
1128 tty_port_tty_hangup(&info->port, false); cyz_handle_cmd()
1132 info->icount.cts++; cyz_handle_cmd()
1136 info->icount.rng++; cyz_handle_cmd()
1140 info->icount.dsr++; cyz_handle_cmd()
1145 complete(&info->shutdown_wait); cyz_handle_cmd()
1155 "port %ld\n", info->card, channel); cyz_handle_cmd()
1157 cyz_handle_rx(info); cyz_handle_cmd()
1165 "port %ld\n", info->card, channel); cyz_handle_cmd()
1167 cyz_handle_tx(info); cyz_handle_cmd()
1177 wake_up_interruptible(&info->port.delta_msr_wait); cyz_handle_cmd()
1179 tty_schedule_flip(&info->port); cyz_handle_cmd()
1204 struct cyclades_port *info = (struct cyclades_port *)arg; cyz_rx_restart() local
1205 struct cyclades_card *card = info->card; cyz_rx_restart()
1207 __u32 channel = info->line - card->first_line; cyz_rx_restart()
1214 info->line, retval); cyz_rx_restart()
1224 struct cyclades_port *info; cyz_poll() local
1245 info = &cinfo->ports[port]; cyz_poll()
1247 if (!info->throttle) cyz_poll()
1248 cyz_handle_rx(info); cyz_poll()
1249 cyz_handle_tx(info); cyz_poll()
1265 static int cy_startup(struct cyclades_port *info, struct tty_struct *tty) cy_startup() argument
1273 card = info->card; cy_startup()
1274 channel = info->line - card->first_line; cy_startup()
1282 if (info->port.flags & ASYNC_INITIALIZED) cy_startup()
1285 if (!info->type) { cy_startup()
1290 if (info->port.xmit_buf) cy_startup()
1293 info->port.xmit_buf = (unsigned char *)page; cy_startup()
1297 cy_set_line_char(info, tty); cy_startup()
1304 cyy_writeb(info, CyCAR, channel); cy_startup()
1306 cyy_writeb(info, CyRTPR, cy_startup()
1307 (info->default_timeout ? info->default_timeout : 0x02)); cy_startup()
1310 cyy_issue_cmd(info, CyCHAN_CTL | CyENB_RCVR | CyENB_XMTR); cy_startup()
1312 cyy_change_rts_dtr(info, TIOCM_RTS | TIOCM_DTR, 0); cy_startup()
1314 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) | CyRxData); cy_startup()
1316 struct CH_CTRL __iomem *ch_ctrl = info->u.cyz.ch_ctrl; cy_startup()
1350 "%x\n", info->line, retval); cy_startup()
1357 "%x\n", info->line, retval); cy_startup()
1362 tty_port_raise_dtr_rts(&info->port); cy_startup()
1367 info->port.flags |= ASYNC_INITIALIZED; cy_startup()
1370 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; cy_startup()
1371 info->breakon = info->breakoff = 0; cy_startup()
1372 memset((char *)&info->idle_stats, 0, sizeof(info->idle_stats)); cy_startup()
1373 info->idle_stats.in_use = cy_startup()
1374 info->idle_stats.recv_idle = cy_startup()
1375 info->idle_stats.xmit_idle = jiffies; cy_startup()
1390 static void start_xmit(struct cyclades_port *info) start_xmit() argument
1392 struct cyclades_card *card = info->card; start_xmit()
1394 int channel = info->line - card->first_line; start_xmit()
1398 cyy_writeb(info, CyCAR, channel & 0x03); start_xmit()
1399 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) | CyTxRdy); start_xmit()
1409 "%x\n", info->line, retval); start_xmit()
1422 static void cy_shutdown(struct cyclades_port *info, struct tty_struct *tty) cy_shutdown() argument
1427 if (!(info->port.flags & ASYNC_INITIALIZED)) cy_shutdown()
1430 card = info->card; cy_shutdown()
1435 wake_up_interruptible(&info->port.delta_msr_wait); cy_shutdown()
1437 if (info->port.xmit_buf) { cy_shutdown()
1439 temp = info->port.xmit_buf; cy_shutdown()
1440 info->port.xmit_buf = NULL; cy_shutdown()
1444 cyy_change_rts_dtr(info, 0, TIOCM_RTS | TIOCM_DTR); cy_shutdown()
1446 cyy_issue_cmd(info, CyCHAN_CTL | CyDIS_RCVR); cy_shutdown()
1451 info->port.flags &= ~ASYNC_INITIALIZED; cy_shutdown()
1455 int channel = info->line - card->first_line; cy_shutdown()
1465 if (info->port.xmit_buf) { cy_shutdown()
1467 temp = info->port.xmit_buf; cy_shutdown()
1468 info->port.xmit_buf = NULL; cy_shutdown()
1473 tty_port_lower_dtr_rts(&info->port); cy_shutdown()
1476 info->port.flags &= ~ASYNC_INITIALIZED; cy_shutdown()
1498 struct cyclades_port *info; cy_open() local
1508 info = &cy_card[i].ports[line - cy_card[i].first_line]; cy_open()
1509 if (info->line < 0) cy_open()
1516 if (cy_is_Z(info->card)) { cy_open()
1517 struct cyclades_card *cinfo = info->card; cy_open()
1559 if (info->line > (cinfo->first_line + cinfo->nports - 1)) cy_open()
1563 printk(KERN_DEBUG "cyc:cy_open ttyC%d\n", info->line); cy_open()
1565 tty->driver_data = info; cy_open()
1566 if (serial_paranoia_check(info, tty->name, "cy_open")) cy_open()
1570 printk(KERN_DEBUG "cyc:cy_open ttyC%d, count = %d\n", info->line, cy_open()
1571 info->port.count); cy_open()
1573 info->port.count++; cy_open()
1576 current->pid, info->port.count); cy_open()
1582 if (info->port.flags & ASYNC_CLOSING) { cy_open()
1583 wait_event_interruptible_tty(tty, info->port.close_wait, cy_open()
1584 !(info->port.flags & ASYNC_CLOSING)); cy_open()
1585 return (info->port.flags & ASYNC_HUP_NOTIFY) ? -EAGAIN: -ERESTARTSYS; cy_open()
1591 retval = cy_startup(info, tty); cy_open()
1595 retval = tty_port_block_til_ready(&info->port, tty, filp); cy_open()
1604 info->throttle = 0; cy_open()
1605 tty_port_tty_set(&info->port, tty); cy_open()
1619 struct cyclades_port *info = tty->driver_data; cy_wait_until_sent() local
1623 if (serial_paranoia_check(info, tty->name, "cy_wait_until_sent")) cy_wait_until_sent()
1626 if (info->xmit_fifo_size == 0) cy_wait_until_sent()
1638 char_time = (info->timeout - HZ / 50) / info->xmit_fifo_size; cy_wait_until_sent()
1651 * takes longer than info->timeout, this is probably due to a cy_wait_until_sent()
1653 * 2*info->timeout. cy_wait_until_sent()
1655 if (!timeout || timeout > 2 * info->timeout) cy_wait_until_sent()
1656 timeout = 2 * info->timeout; cy_wait_until_sent()
1658 card = info->card; cy_wait_until_sent()
1660 while (cyy_readb(info, CySRER) & CyTxRdy) { cy_wait_until_sent()
1674 struct cyclades_port *info = tty->driver_data; cy_flush_buffer() local
1680 printk(KERN_DEBUG "cyc:cy_flush_buffer ttyC%d\n", info->line); cy_flush_buffer()
1683 if (serial_paranoia_check(info, tty->name, "cy_flush_buffer")) cy_flush_buffer()
1686 card = info->card; cy_flush_buffer()
1687 channel = info->line - card->first_line; cy_flush_buffer()
1690 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; cy_flush_buffer()
1699 "was %x\n", info->line, retval); cy_flush_buffer()
1709 struct cyclades_port *info = container_of(port, struct cyclades_port, cy_do_close() local
1715 card = info->card; cy_do_close()
1716 channel = info->line - card->first_line; cy_do_close()
1721 cyy_writeb(info, CyCAR, channel & 0x03); cy_do_close()
1722 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) & ~CyRxData); cy_do_close()
1723 if (info->port.flags & ASYNC_INITIALIZED) { cy_do_close()
1727 cy_wait_until_sent(port->tty, info->timeout); cy_do_close()
1734 struct CH_CTRL __iomem *ch_ctrl = info->u.cyz.ch_ctrl; cy_do_close()
1741 "ttyC%d was %x\n", info->line, retval); cy_do_close()
1744 wait_for_completion_interruptible(&info->shutdown_wait); cy_do_close()
1750 cy_shutdown(info, port->tty); cy_do_close()
1758 struct cyclades_port *info = tty->driver_data; cy_close() local
1759 if (!info || serial_paranoia_check(info, tty->name, "cy_close")) cy_close()
1761 tty_port_close(&info->port, tty, filp); cy_close()
1779 struct cyclades_port *info = tty->driver_data; cy_write() local
1784 printk(KERN_DEBUG "cyc:cy_write ttyC%d\n", info->line); cy_write()
1787 if (serial_paranoia_check(info, tty->name, "cy_write")) cy_write()
1790 if (!info->port.xmit_buf) cy_write()
1793 spin_lock_irqsave(&info->card->card_lock, flags); cy_write()
1795 c = min(count, (int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1)); cy_write()
1796 c = min(c, (int)(SERIAL_XMIT_SIZE - info->xmit_head)); cy_write()
1801 memcpy(info->port.xmit_buf + info->xmit_head, buf, c); cy_write()
1802 info->xmit_head = (info->xmit_head + c) & cy_write()
1804 info->xmit_cnt += c; cy_write()
1809 spin_unlock_irqrestore(&info->card->card_lock, flags); cy_write()
1811 info->idle_stats.xmit_bytes += ret; cy_write()
1812 info->idle_stats.xmit_idle = jiffies; cy_write()
1814 if (info->xmit_cnt && !tty->stopped && !tty->hw_stopped) cy_write()
1815 start_xmit(info); cy_write()
1829 struct cyclades_port *info = tty->driver_data; cy_put_char() local
1833 printk(KERN_DEBUG "cyc:cy_put_char ttyC%d\n", info->line); cy_put_char()
1836 if (serial_paranoia_check(info, tty->name, "cy_put_char")) cy_put_char()
1839 if (!info->port.xmit_buf) cy_put_char()
1842 spin_lock_irqsave(&info->card->card_lock, flags); cy_put_char()
1843 if (info->xmit_cnt >= (int)(SERIAL_XMIT_SIZE - 1)) { cy_put_char()
1844 spin_unlock_irqrestore(&info->card->card_lock, flags); cy_put_char()
1848 info->port.xmit_buf[info->xmit_head++] = ch; cy_put_char()
1849 info->xmit_head &= SERIAL_XMIT_SIZE - 1; cy_put_char()
1850 info->xmit_cnt++; cy_put_char()
1851 info->idle_stats.xmit_bytes++; cy_put_char()
1852 info->idle_stats.xmit_idle = jiffies; cy_put_char()
1853 spin_unlock_irqrestore(&info->card->card_lock, flags); cy_put_char()
1863 struct cyclades_port *info = tty->driver_data; cy_flush_chars() local
1866 printk(KERN_DEBUG "cyc:cy_flush_chars ttyC%d\n", info->line); cy_flush_chars()
1869 if (serial_paranoia_check(info, tty->name, "cy_flush_chars")) cy_flush_chars()
1872 if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped || cy_flush_chars()
1873 !info->port.xmit_buf) cy_flush_chars()
1876 start_xmit(info); cy_flush_chars()
1887 struct cyclades_port *info = tty->driver_data; cy_write_room() local
1891 printk(KERN_DEBUG "cyc:cy_write_room ttyC%d\n", info->line); cy_write_room()
1894 if (serial_paranoia_check(info, tty->name, "cy_write_room")) cy_write_room()
1896 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1; cy_write_room()
1904 struct cyclades_port *info = tty->driver_data; cy_chars_in_buffer() local
1906 if (serial_paranoia_check(info, tty->name, "cy_chars_in_buffer")) cy_chars_in_buffer()
1910 if (!cy_is_Z(info->card)) { cy_chars_in_buffer()
1914 info->line, info->xmit_cnt); cy_chars_in_buffer()
1916 return info->xmit_cnt; cy_chars_in_buffer()
1919 struct BUF_CTRL __iomem *buf_ctrl = info->u.cyz.buf_ctrl; cy_chars_in_buffer()
1932 info->line, info->xmit_cnt + char_count); cy_chars_in_buffer()
1934 return info->xmit_cnt + char_count; cy_chars_in_buffer()
1945 static void cyy_baud_calc(struct cyclades_port *info, __u32 baud) cyy_baud_calc() argument
1948 __u32 cy_clock = ((info->chip_rev >= CD1400_REV_J) ? 60000000 : cyy_baud_calc()
1952 info->tbpr = info->tco = info->rbpr = info->rco = 0; cyy_baud_calc()
1966 info->tbpr = info->rbpr = bpr; cyy_baud_calc()
1967 info->tco = info->rco = co; cyy_baud_calc()
1974 static void cy_set_line_char(struct cyclades_port *info, struct tty_struct *tty) cy_set_line_char() argument
1983 if (info->line == -1) cy_set_line_char()
1992 if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) cy_set_line_char()
1994 if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) cy_set_line_char()
1996 if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) cy_set_line_char()
1998 if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) cy_set_line_char()
2001 card = info->card; cy_set_line_char()
2002 channel = info->line - card->first_line; cy_set_line_char()
2009 if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == cy_set_line_char()
2011 if (info->custom_divisor) cy_set_line_char()
2012 baud_rate = info->baud / info->custom_divisor; cy_set_line_char()
2014 baud_rate = info->baud; cy_set_line_char()
2026 if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == cy_set_line_char()
2028 cyy_baud_calc(info, baud_rate); cy_set_line_char()
2030 if (info->chip_rev >= CD1400_REV_J) { cy_set_line_char()
2032 info->tbpr = baud_bpr_60[i]; /* Tx BPR */ cy_set_line_char()
2033 info->tco = baud_co_60[i]; /* Tx CO */ cy_set_line_char()
2034 info->rbpr = baud_bpr_60[i]; /* Rx BPR */ cy_set_line_char()
2035 info->rco = baud_co_60[i]; /* Rx CO */ cy_set_line_char()
2037 info->tbpr = baud_bpr_25[i]; /* Tx BPR */ cy_set_line_char()
2038 info->tco = baud_co_25[i]; /* Tx CO */ cy_set_line_char()
2039 info->rbpr = baud_bpr_25[i]; /* Rx BPR */ cy_set_line_char()
2040 info->rco = baud_co_25[i]; /* Rx CO */ cy_set_line_char()
2045 info->timeout = (info->xmit_fifo_size * HZ * 30 / 269) + cy_set_line_char()
2047 } else if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == cy_set_line_char()
2049 info->timeout = (info->xmit_fifo_size * HZ * 15 / cy_set_line_char()
2052 info->timeout = (info->xmit_fifo_size * HZ * 15 / cy_set_line_char()
2054 /* this needs to be propagated into the card info */ cy_set_line_char()
2056 info->timeout = 0; cy_set_line_char()
2063 info->cor5 = 0; cy_set_line_char()
2064 info->cor4 = 0; cy_set_line_char()
2066 info->cor3 = (info->default_threshold ? cy_set_line_char()
2067 info->default_threshold : baud_cor3[i]); cy_set_line_char()
2068 info->cor2 = CyETC; cy_set_line_char()
2071 info->cor1 = Cy_5_BITS; cy_set_line_char()
2074 info->cor1 = Cy_6_BITS; cy_set_line_char()
2077 info->cor1 = Cy_7_BITS; cy_set_line_char()
2080 info->cor1 = Cy_8_BITS; cy_set_line_char()
2084 info->cor1 |= Cy_2_STOP; cy_set_line_char()
2088 info->cor1 |= CyPARITY_O; cy_set_line_char()
2090 info->cor1 |= CyPARITY_E; cy_set_line_char()
2092 info->cor1 |= CyPARITY_NONE; cy_set_line_char()
2096 info->port.flags |= ASYNC_CTS_FLOW; cy_set_line_char()
2097 info->cor2 |= CyCtsAE; cy_set_line_char()
2099 info->port.flags &= ~ASYNC_CTS_FLOW; cy_set_line_char()
2100 info->cor2 &= ~CyCtsAE; cy_set_line_char()
2103 info->port.flags &= ~ASYNC_CHECK_CD; cy_set_line_char()
2105 info->port.flags |= ASYNC_CHECK_CD; cy_set_line_char()
2120 cyy_writeb(info, CyCAR, channel); cy_set_line_char()
2124 cyy_writeb(info, CyTCOR, info->tco); cy_set_line_char()
2125 cyy_writeb(info, CyTBPR, info->tbpr); cy_set_line_char()
2126 cyy_writeb(info, CyRCOR, info->rco); cy_set_line_char()
2127 cyy_writeb(info, CyRBPR, info->rbpr); cy_set_line_char()
2131 cyy_writeb(info, CySCHR1, START_CHAR(tty)); cy_set_line_char()
2132 cyy_writeb(info, CySCHR2, STOP_CHAR(tty)); cy_set_line_char()
2133 cyy_writeb(info, CyCOR1, info->cor1); cy_set_line_char()
2134 cyy_writeb(info, CyCOR2, info->cor2); cy_set_line_char()
2135 cyy_writeb(info, CyCOR3, info->cor3); cy_set_line_char()
2136 cyy_writeb(info, CyCOR4, info->cor4); cy_set_line_char()
2137 cyy_writeb(info, CyCOR5, info->cor5); cy_set_line_char()
2139 cyy_issue_cmd(info, CyCOR_CHANGE | CyCOR1ch | CyCOR2ch | cy_set_line_char()
2143 cyy_writeb(info, CyCAR, channel); cy_set_line_char()
2144 cyy_writeb(info, CyRTPR, cy_set_line_char()
2145 (info->default_timeout ? info->default_timeout : 0x02)); cy_set_line_char()
2152 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) | CyMdmCh); cy_set_line_char()
2154 if ((cflag & CRTSCTS) && info->rflow) cy_set_line_char()
2155 cyy_writeb(info, CyMCOR1, cflags | rflow_thr[i]); cy_set_line_char()
2157 cyy_writeb(info, CyMCOR1, cflags); cy_set_line_char()
2159 cyy_writeb(info, CyMCOR2, cflags); cy_set_line_char()
2162 cyy_change_rts_dtr(info, 0, TIOCM_DTR); cy_set_line_char()
2164 cyy_change_rts_dtr(info, TIOCM_DTR, 0); cy_set_line_char()
2170 struct CH_CTRL __iomem *ch_ctrl = info->u.cyz.ch_ctrl; cy_set_line_char()
2179 if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == cy_set_line_char()
2181 if (info->custom_divisor) cy_set_line_char()
2182 baud_rate = info->baud / info->custom_divisor; cy_set_line_char()
2184 baud_rate = info->baud; cy_set_line_char()
2192 info->timeout = (info->xmit_fifo_size * HZ * 30 / 269) + cy_set_line_char()
2194 } else if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == cy_set_line_char()
2196 info->timeout = (info->xmit_fifo_size * HZ * 15 / cy_set_line_char()
2199 info->timeout = (info->xmit_fifo_size * HZ * 15 / cy_set_line_char()
2201 /* this needs to be propagated into the card info */ cy_set_line_char()
2203 info->timeout = 0; cy_set_line_char()
2246 info->port.flags &= ~ASYNC_CTS_FLOW; cy_set_line_char()
2260 "was %x\n", info->line, retval); cy_set_line_char()
2265 info->port.flags &= ~ASYNC_CHECK_CD; cy_set_line_char()
2267 info->port.flags |= ASYNC_CHECK_CD; cy_set_line_char()
2286 "was %x\n", info->line, retval); cy_set_line_char()
2293 static int cy_get_serial_info(struct cyclades_port *info, cy_get_serial_info() argument
2296 struct cyclades_card *cinfo = info->card; cy_get_serial_info()
2298 .type = info->type, cy_get_serial_info()
2299 .line = info->line, cy_get_serial_info()
2300 .port = (info->card - cy_card) * 0x100 + info->line - cy_get_serial_info()
2303 .flags = info->port.flags, cy_get_serial_info()
2304 .close_delay = info->port.close_delay, cy_get_serial_info()
2305 .closing_wait = info->port.closing_wait, cy_get_serial_info()
2306 .baud_base = info->baud, cy_get_serial_info()
2307 .custom_divisor = info->custom_divisor, cy_get_serial_info()
2314 cy_set_serial_info(struct cyclades_port *info, struct tty_struct *tty, cy_set_serial_info() argument
2323 mutex_lock(&info->port.mutex); cy_set_serial_info()
2325 if (new_serial.close_delay != info->port.close_delay || cy_set_serial_info()
2326 new_serial.baud_base != info->baud || cy_set_serial_info()
2329 (info->port.flags & ASYNC_FLAGS & ~ASYNC_USR_MASK)) cy_set_serial_info()
2331 mutex_unlock(&info->port.mutex); cy_set_serial_info()
2334 info->port.flags = (info->port.flags & ~ASYNC_USR_MASK) | cy_set_serial_info()
2336 info->baud = new_serial.baud_base; cy_set_serial_info()
2337 info->custom_divisor = new_serial.custom_divisor; cy_set_serial_info()
2346 info->baud = new_serial.baud_base; cy_set_serial_info()
2347 info->custom_divisor = new_serial.custom_divisor; cy_set_serial_info()
2348 info->port.flags = (info->port.flags & ~ASYNC_FLAGS) | cy_set_serial_info()
2350 info->port.close_delay = new_serial.close_delay * HZ / 100; cy_set_serial_info()
2351 info->port.closing_wait = new_serial.closing_wait * HZ / 100; cy_set_serial_info()
2354 if (info->port.flags & ASYNC_INITIALIZED) { cy_set_serial_info()
2355 cy_set_line_char(info, tty); cy_set_serial_info()
2358 ret = cy_startup(info, tty); cy_set_serial_info()
2360 mutex_unlock(&info->port.mutex); cy_set_serial_info()
2365 * get_lsr_info - get line status register info
2367 * Purpose: Let user call ioctl() to get info when the UART physically
2374 static int get_lsr_info(struct cyclades_port *info, unsigned int __user *value) get_lsr_info() argument
2376 struct cyclades_card *card = info->card; get_lsr_info()
2383 status = cyy_readb(info, CySRER) & (CyTxRdy | CyTxMpty); get_lsr_info()
2395 struct cyclades_port *info = tty->driver_data; cy_tiocmget() local
2399 if (serial_paranoia_check(info, tty->name, __func__)) cy_tiocmget()
2402 card = info->card; cy_tiocmget()
2406 int channel = info->line - card->first_line; cy_tiocmget()
2410 cyy_writeb(info, CyCAR, channel & 0x03); cy_tiocmget()
2411 status = cyy_readb(info, CyMSVR1); cy_tiocmget()
2412 status |= cyy_readb(info, CyMSVR2); cy_tiocmget()
2415 if (info->rtsdtr_inv) { cy_tiocmget()
2434 lstatus = readl(&info->u.cyz.ch_ctrl->rs_status); cy_tiocmget()
2450 struct cyclades_port *info = tty->driver_data; cy_tiocmset() local
2454 if (serial_paranoia_check(info, tty->name, __func__)) cy_tiocmset()
2457 card = info->card; cy_tiocmset()
2460 cyy_change_rts_dtr(info, set, clear); cy_tiocmset()
2463 struct CH_CTRL __iomem *ch_ctrl = info->u.cyz.ch_ctrl; cy_tiocmset()
2464 int retval, channel = info->line - card->first_line; cy_tiocmset()
2494 "was %x\n", info->line, retval); cy_tiocmset()
2505 struct cyclades_port *info = tty->driver_data; cy_break() local
2510 if (serial_paranoia_check(info, tty->name, "cy_break")) cy_break()
2513 card = info->card; cy_break()
2521 if (!info->breakon) { cy_break()
2522 info->breakon = 1; cy_break()
2523 if (!info->xmit_cnt) { cy_break()
2525 start_xmit(info); cy_break()
2530 if (!info->breakoff) { cy_break()
2531 info->breakoff = 1; cy_break()
2532 if (!info->xmit_cnt) { cy_break()
2534 start_xmit(info); cy_break()
2542 info->line - card->first_line, cy_break()
2546 "ttyC%d was %x\n", info->line, retval); cy_break()
2550 info->line - card->first_line, cy_break()
2554 "on ttyC%d was %x\n", info->line, cy_break()
2563 static int set_threshold(struct cyclades_port *info, unsigned long value) set_threshold() argument
2565 struct cyclades_card *card = info->card; set_threshold()
2569 info->cor3 &= ~CyREC_FIFO; set_threshold()
2570 info->cor3 |= value & CyREC_FIFO; set_threshold()
2573 cyy_writeb(info, CyCOR3, info->cor3); set_threshold()
2574 cyy_issue_cmd(info, CyCOR_CHANGE | CyCOR3ch); set_threshold()
2580 static int get_threshold(struct cyclades_port *info, get_threshold() argument
2583 struct cyclades_card *card = info->card; get_threshold()
2586 u8 tmp = cyy_readb(info, CyCOR3) & CyREC_FIFO; get_threshold()
2592 static int set_timeout(struct cyclades_port *info, unsigned long value) set_timeout() argument
2594 struct cyclades_card *card = info->card; set_timeout()
2599 cyy_writeb(info, CyRTPR, value & 0xff); set_timeout()
2605 static int get_timeout(struct cyclades_port *info, get_timeout() argument
2608 struct cyclades_card *card = info->card; get_timeout()
2611 u8 tmp = cyy_readb(info, CyRTPR); get_timeout()
2617 static int cy_cflags_changed(struct cyclades_port *info, unsigned long arg, cy_cflags_changed() argument
2624 spin_lock_irqsave(&info->card->card_lock, flags); cy_cflags_changed()
2625 cnow = info->icount; /* atomic copy */ cy_cflags_changed()
2626 spin_unlock_irqrestore(&info->card->card_lock, flags); cy_cflags_changed()
2647 struct cyclades_port *info = tty->driver_data; cy_ioctl() local
2653 if (serial_paranoia_check(info, tty->name, "cy_ioctl")) cy_ioctl()
2658 info->line, cmd, arg); cy_ioctl()
2663 if (copy_to_user(argp, &info->mon, sizeof(info->mon))) { cy_ioctl()
2667 memset(&info->mon, 0, sizeof(info->mon)); cy_ioctl()
2670 ret_val = get_threshold(info, argp); cy_ioctl()
2673 ret_val = set_threshold(info, arg); cy_ioctl()
2676 ret_val = put_user(info->default_threshold, cy_ioctl()
2680 info->default_threshold = arg & 0x0f; cy_ioctl()
2683 ret_val = get_timeout(info, argp); cy_ioctl()
2686 ret_val = set_timeout(info, arg); cy_ioctl()
2689 ret_val = put_user(info->default_timeout, cy_ioctl()
2693 info->default_timeout = arg & 0xff; cy_ioctl()
2696 info->rflow = (int)arg; cy_ioctl()
2699 ret_val = info->rflow; cy_ioctl()
2702 info->rtsdtr_inv = (int)arg; cy_ioctl()
2705 ret_val = info->rtsdtr_inv; cy_ioctl()
2708 ret_val = info->chip_rev; cy_ioctl()
2721 info->port.closing_wait = (unsigned short)arg * HZ / 100; cy_ioctl()
2724 ret_val = info->port.closing_wait / (HZ / 100); cy_ioctl()
2727 ret_val = cy_get_serial_info(info, argp); cy_ioctl()
2730 ret_val = cy_set_serial_info(info, tty, argp); cy_ioctl()
2733 ret_val = get_lsr_info(info, argp); cy_ioctl()
2742 spin_lock_irqsave(&info->card->card_lock, flags); cy_ioctl()
2744 cnow = info->icount; cy_ioctl()
2745 spin_unlock_irqrestore(&info->card->card_lock, flags); cy_ioctl()
2746 ret_val = wait_event_interruptible(info->port.delta_msr_wait, cy_ioctl()
2747 cy_cflags_changed(info, arg, &cnow)); cy_ioctl()
2769 struct cyclades_port *info = tty->driver_data; cy_get_icount() local
2773 spin_lock_irqsave(&info->card->card_lock, flags); cy_get_icount()
2774 cnow = info->icount; cy_get_icount()
2775 spin_unlock_irqrestore(&info->card->card_lock, flags); cy_get_icount()
2799 struct cyclades_port *info = tty->driver_data; cy_set_termios() local
2802 printk(KERN_DEBUG "cyc:cy_set_termios ttyC%d\n", info->line); cy_set_termios()
2805 cy_set_line_char(info, tty); cy_set_termios()
2821 wake_up_interruptible(&info->port.open_wait); cy_set_termios()
2830 struct cyclades_port *info = tty->driver_data; cy_send_xchar() local
2834 if (serial_paranoia_check(info, tty->name, "cy_send_xchar")) cy_send_xchar()
2837 info->x_char = ch; cy_send_xchar()
2842 card = info->card; cy_send_xchar()
2843 channel = info->line - card->first_line; cy_send_xchar()
2859 struct cyclades_port *info = tty->driver_data; cy_throttle() local
2867 tty->ldisc.chars_in_buffer(tty), info->line); cy_throttle()
2870 if (serial_paranoia_check(info, tty->name, "cy_throttle")) cy_throttle()
2873 card = info->card; cy_throttle()
2879 info->throttle = 1; cy_throttle()
2885 cyy_change_rts_dtr(info, 0, TIOCM_RTS); cy_throttle()
2888 info->throttle = 1; cy_throttle()
2900 struct cyclades_port *info = tty->driver_data; cy_unthrottle() local
2908 tty_name(tty, buf), tty_chars_in_buffer(tty), info->line); cy_unthrottle()
2911 if (serial_paranoia_check(info, tty->name, "cy_unthrottle")) cy_unthrottle()
2915 if (info->x_char) cy_unthrottle()
2916 info->x_char = 0; cy_unthrottle()
2922 card = info->card; cy_unthrottle()
2925 cyy_change_rts_dtr(info, TIOCM_RTS, 0); cy_unthrottle()
2928 info->throttle = 0; cy_unthrottle()
2939 struct cyclades_port *info = tty->driver_data; cy_stop() local
2944 printk(KERN_DEBUG "cyc:cy_stop ttyC%d\n", info->line); cy_stop()
2947 if (serial_paranoia_check(info, tty->name, "cy_stop")) cy_stop()
2950 cinfo = info->card; cy_stop()
2951 channel = info->line - cinfo->first_line; cy_stop()
2954 cyy_writeb(info, CyCAR, channel & 0x03); cy_stop()
2955 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) & ~CyTxRdy); cy_stop()
2963 struct cyclades_port *info = tty->driver_data; cy_start() local
2968 printk(KERN_DEBUG "cyc:cy_start ttyC%d\n", info->line); cy_start()
2971 if (serial_paranoia_check(info, tty->name, "cy_start")) cy_start()
2974 cinfo = info->card; cy_start()
2975 channel = info->line - cinfo->first_line; cy_start()
2978 cyy_writeb(info, CyCAR, channel & 0x03); cy_start()
2979 cyy_writeb(info, CySRER, cyy_readb(info, CySRER) | CyTxRdy); cy_start()
2989 struct cyclades_port *info = tty->driver_data; cy_hangup() local
2992 printk(KERN_DEBUG "cyc:cy_hangup ttyC%d\n", info->line); cy_hangup()
2995 if (serial_paranoia_check(info, tty->name, "cy_hangup")) cy_hangup()
2999 cy_shutdown(info, tty); cy_hangup()
3000 tty_port_hangup(&info->port); cy_hangup()
3005 struct cyclades_port *info = container_of(port, struct cyclades_port, cyy_carrier_raised() local
3007 struct cyclades_card *cinfo = info->card; cyy_carrier_raised()
3009 int channel = info->line - cinfo->first_line; cyy_carrier_raised()
3013 cyy_writeb(info, CyCAR, channel & 0x03); cyy_carrier_raised()
3014 cd = cyy_readb(info, CyMSVR1) & CyDCD; cyy_carrier_raised()
3022 struct cyclades_port *info = container_of(port, struct cyclades_port, cyy_dtr_rts() local
3024 struct cyclades_card *cinfo = info->card; cyy_dtr_rts()
3028 cyy_change_rts_dtr(info, raise ? TIOCM_RTS | TIOCM_DTR : 0, cyy_dtr_rts()
3035 struct cyclades_port *info = container_of(port, struct cyclades_port, cyz_carrier_raised() local
3038 return readl(&info->u.cyz.ch_ctrl->rs_status) & C_RS_DCD; cyz_carrier_raised()
3043 struct cyclades_port *info = container_of(port, struct cyclades_port, cyz_dtr_rts() local
3045 struct cyclades_card *cinfo = info->card; cyz_dtr_rts()
3046 struct CH_CTRL __iomem *ch_ctrl = info->u.cyz.ch_ctrl; cyz_dtr_rts()
3047 int ret, channel = info->line - cinfo->first_line; cyz_dtr_rts()
3059 __func__, info->line, ret); cyz_dtr_rts()
3087 struct cyclades_port *info; cy_init_card() local
3102 info = &cinfo->ports[channel]; cy_init_card()
3103 tty_port_init(&info->port); cy_init_card()
3104 info->magic = CYCLADES_MAGIC; cy_init_card()
3105 info->card = cinfo; cy_init_card()
3106 info->line = port; cy_init_card()
3108 info->port.closing_wait = CLOSING_WAIT_DELAY; cy_init_card()
3109 info->port.close_delay = 5 * HZ / 10; cy_init_card()
3110 info->port.flags = STD_COM_FLAGS; cy_init_card()
3111 init_completion(&info->shutdown_wait); cy_init_card()
3117 info->port.ops = &cyz_port_ops; cy_init_card()
3118 info->type = PORT_STARTECH; cy_init_card()
3122 info->u.cyz.ch_ctrl = &zfw_ctrl->ch_ctrl[channel]; cy_init_card()
3123 info->u.cyz.buf_ctrl = &zfw_ctrl->buf_ctrl[channel]; cy_init_card()
3126 info->xmit_fifo_size = CYZ_FIFO_SIZE; cy_init_card()
3128 info->xmit_fifo_size = 4 * CYZ_FIFO_SIZE; cy_init_card()
3131 cyz_rx_restart, (unsigned long)info); cy_init_card()
3137 info->port.ops = &cyy_port_ops; cy_init_card()
3138 info->type = PORT_CIRRUS; cy_init_card()
3139 info->xmit_fifo_size = CyMAX_CHAR_FIFO; cy_init_card()
3140 info->cor1 = CyPARITY_NONE | Cy_1_STOP | Cy_8_BITS; cy_init_card()
3141 info->cor2 = CyETC; cy_init_card()
3142 info->cor3 = 0x08; /* _very_ small rcv threshold */ cy_init_card()
3145 info->u.cyy.base_addr = cinfo->base_addr + cy_init_card()
3147 info->chip_rev = cyy_readb(info, CyGFRCR); cy_init_card()
3149 if (info->chip_rev >= CD1400_REV_J) { cy_init_card()
3151 info->tbpr = baud_bpr_60[13]; /* Tx BPR */ cy_init_card()
3152 info->tco = baud_co_60[13]; /* Tx CO */ cy_init_card()
3153 info->rbpr = baud_bpr_60[13]; /* Rx BPR */ cy_init_card()
3154 info->rco = baud_co_60[13]; /* Rx CO */ cy_init_card()
3155 info->rtsdtr_inv = 1; cy_init_card()
3157 info->tbpr = baud_bpr_25[13]; /* Tx BPR */ cy_init_card()
3158 info->tco = baud_co_25[13]; /* Tx CO */ cy_init_card()
3159 info->rbpr = baud_bpr_25[13]; /* Rx BPR */ cy_init_card()
3160 info->rco = baud_co_25[13]; /* Rx CO */ cy_init_card()
3161 info->rtsdtr_inv = 0; cy_init_card()
3163 info->read_status_mask = CyTIMEOUT | CySPECHAR | cy_init_card()
3965 struct cyclades_port *info; cyclades_proc_show() local
3975 info = &cy_card[i].ports[j]; cyclades_proc_show()
3977 if (info->port.count) { cyclades_proc_show()
3982 tty = tty_port_tty_get(&info->port); cyclades_proc_show()
3992 "%10lu %8lu %9lu %6d\n", info->line, cyclades_proc_show()
3993 (cur_jifs - info->idle_stats.in_use) / cyclades_proc_show()
3994 HZ, info->idle_stats.xmit_bytes, cyclades_proc_show()
3995 (cur_jifs - info->idle_stats.xmit_idle)/ cyclades_proc_show()
3996 HZ, info->idle_stats.recv_bytes, cyclades_proc_show()
3997 (cur_jifs - info->idle_stats.recv_idle)/ cyclades_proc_show()
3998 HZ, info->idle_stats.overruns, cyclades_proc_show()
4003 info->line, 0L, 0L, 0L, 0L, 0L, 0L, 0L); cyclades_proc_show()
H A Damiserial.c48 tty->name, (info->tport.flags), serial_driver->refcount,info->count,tty->count,s)
122 static void change_speed(struct tty_struct *tty, struct serial_state *info,
136 static inline int serial_paranoia_check(struct serial_state *info, serial_paranoia_check() argument
145 if (!info) { serial_paranoia_check()
149 if (info->magic != SERIAL_MAGIC) { serial_paranoia_check()
189 struct serial_state *info = tty->driver_data; rs_stop() local
192 if (serial_paranoia_check(info, tty->name, "rs_stop")) rs_stop()
196 if (info->IER & UART_IER_THRI) { rs_stop()
197 info->IER &= ~UART_IER_THRI; rs_stop()
209 struct serial_state *info = tty->driver_data; rs_start() local
212 if (serial_paranoia_check(info, tty->name, "rs_start")) rs_start()
216 if (info->xmit.head != info->xmit.tail rs_start()
217 && info->xmit.buf rs_start()
218 && !(info->IER & UART_IER_THRI)) { rs_start()
219 info->IER |= UART_IER_THRI; rs_start()
250 static void receive_chars(struct serial_state *info) receive_chars() argument
258 icount = &info->icount; receive_chars()
305 if (status & info->ignore_status_mask) receive_chars()
308 status &= info->read_status_mask; receive_chars()
315 if (info->tport.flags & ASYNC_SAK) receive_chars()
316 do_SAK(info->tport.tty); receive_chars()
330 tty_insert_flip_char(&info->tport, ch, flag); receive_chars()
332 tty_insert_flip_char(&info->tport, 0, TTY_OVERRUN); receive_chars()
333 tty_flip_buffer_push(&info->tport); receive_chars()
338 static void transmit_chars(struct serial_state *info) transmit_chars() argument
342 if (info->x_char) { transmit_chars()
343 custom.serdat = info->x_char | 0x100; transmit_chars()
345 info->icount.tx++; transmit_chars()
346 info->x_char = 0; transmit_chars()
349 if (info->xmit.head == info->xmit.tail transmit_chars()
350 || info->tport.tty->stopped transmit_chars()
351 || info->tport.tty->hw_stopped) { transmit_chars()
352 info->IER &= ~UART_IER_THRI; transmit_chars()
358 custom.serdat = info->xmit.buf[info->xmit.tail++] | 0x100; transmit_chars()
360 info->xmit.tail = info->xmit.tail & (SERIAL_XMIT_SIZE-1); transmit_chars()
361 info->icount.tx++; transmit_chars()
363 if (CIRC_CNT(info->xmit.head, transmit_chars()
364 info->xmit.tail, transmit_chars()
366 tty_wakeup(info->tport.tty); transmit_chars()
371 if (info->xmit.head == info->xmit.tail) { transmit_chars()
374 info->IER &= ~UART_IER_THRI; transmit_chars()
378 static void check_modem_status(struct serial_state *info) check_modem_status() argument
380 struct tty_port *port = &info->tport; check_modem_status()
390 icount = &info->icount; check_modem_status()
404 printk("ttyS%d CD now %s...", info->line, check_modem_status()
424 info->IER |= UART_IER_THRI; check_modem_status()
439 info->IER &= ~UART_IER_THRI; check_modem_status()
453 struct serial_state *info = data; ser_vbl_int() local
458 if(info->IER & UART_IER_MSI) ser_vbl_int()
459 check_modem_status(info); ser_vbl_int()
465 struct serial_state *info = dev_id; ser_rx_int() local
471 if (!info->tport.tty) ser_rx_int()
474 receive_chars(info); ser_rx_int()
483 struct serial_state *info = dev_id; ser_tx_int() local
490 if (!info->tport.tty) ser_tx_int()
493 transmit_chars(info); ser_tx_int()
516 static int startup(struct tty_struct *tty, struct serial_state *info) startup() argument
518 struct tty_port *port = &info->tport; startup()
534 if (info->xmit.buf) startup()
537 info->xmit.buf = (unsigned char *) page; startup()
540 printk("starting up ttys%d ...", info->line); startup()
548 retval = request_irq(IRQ_AMIGA_VERTB, ser_vbl_int, 0, "serial status", info); startup()
560 info->IER = UART_IER_MSI; startup()
565 info->MCR = 0; startup()
567 info->MCR = SER_DTR | SER_RTS; startup()
568 rtsdtr_ctrl(info->MCR); startup()
571 info->xmit.head = info->xmit.tail = 0; startup()
588 change_speed(tty, info, NULL); startup()
603 static void shutdown(struct tty_struct *tty, struct serial_state *info) shutdown() argument
608 if (!(info->tport.flags & ASYNC_INITIALIZED)) shutdown()
611 state = info; shutdown()
614 printk("Shutting down serial port %d ....\n", info->line); shutdown()
623 wake_up_interruptible(&info->tport.delta_msr_wait); shutdown()
628 free_irq(IRQ_AMIGA_VERTB, info); shutdown()
630 if (info->xmit.buf) { shutdown()
631 free_page((unsigned long) info->xmit.buf); shutdown()
632 info->xmit.buf = NULL; shutdown()
635 info->IER = 0; shutdown()
644 info->MCR &= ~(SER_DTR|SER_RTS); shutdown()
645 rtsdtr_ctrl(info->MCR); shutdown()
649 info->tport.flags &= ~ASYNC_INITIALIZED; shutdown()
658 static void change_speed(struct tty_struct *tty, struct serial_state *info, change_speed() argument
661 struct tty_port *port = &info->tport; change_speed()
691 baud_base = info->baud_base; change_speed()
693 quot = info->custom_divisor; change_speed()
711 quot = info->custom_divisor; change_speed()
723 info->quot = quot; change_speed()
724 info->timeout = ((info->xmit_fifo_size*HZ*bits*quot) / baud_base); change_speed()
725 info->timeout += HZ/50; /* Add .02 seconds of slop */ change_speed()
728 info->IER &= ~UART_IER_MSI; change_speed()
730 info->IER |= UART_IER_MSI; change_speed()
733 info->IER |= UART_IER_MSI; change_speed()
740 info->IER |= UART_IER_MSI; change_speed()
750 info->read_status_mask = UART_LSR_OE | UART_LSR_DR; change_speed()
752 info->read_status_mask |= UART_LSR_FE | UART_LSR_PE; change_speed()
754 info->read_status_mask |= UART_LSR_BI; change_speed()
759 info->ignore_status_mask = 0; change_speed()
761 info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; change_speed()
763 info->ignore_status_mask |= UART_LSR_BI; change_speed()
769 info->ignore_status_mask |= UART_LSR_OE; change_speed()
775 info->ignore_status_mask |= UART_LSR_DR; change_speed()
798 struct serial_state *info; rs_put_char() local
801 info = tty->driver_data; rs_put_char()
803 if (serial_paranoia_check(info, tty->name, "rs_put_char")) rs_put_char()
806 if (!info->xmit.buf) rs_put_char()
810 if (CIRC_SPACE(info->xmit.head, rs_put_char()
811 info->xmit.tail, rs_put_char()
817 info->xmit.buf[info->xmit.head++] = ch; rs_put_char()
818 info->xmit.head &= SERIAL_XMIT_SIZE-1; rs_put_char()
825 struct serial_state *info = tty->driver_data; rs_flush_chars() local
828 if (serial_paranoia_check(info, tty->name, "rs_flush_chars")) rs_flush_chars()
831 if (info->xmit.head == info->xmit.tail rs_flush_chars()
834 || !info->xmit.buf) rs_flush_chars()
838 info->IER |= UART_IER_THRI; rs_flush_chars()
850 struct serial_state *info = tty->driver_data; rs_write() local
853 if (serial_paranoia_check(info, tty->name, "rs_write")) rs_write()
856 if (!info->xmit.buf) rs_write()
861 c = CIRC_SPACE_TO_END(info->xmit.head, rs_write()
862 info->xmit.tail, rs_write()
869 memcpy(info->xmit.buf + info->xmit.head, buf, c); rs_write()
870 info->xmit.head = ((info->xmit.head + c) & rs_write()
878 if (info->xmit.head != info->xmit.tail rs_write()
881 && !(info->IER & UART_IER_THRI)) { rs_write()
882 info->IER |= UART_IER_THRI; rs_write()
896 struct serial_state *info = tty->driver_data; rs_write_room() local
898 if (serial_paranoia_check(info, tty->name, "rs_write_room")) rs_write_room()
900 return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_write_room()
905 struct serial_state *info = tty->driver_data; rs_chars_in_buffer() local
907 if (serial_paranoia_check(info, tty->name, "rs_chars_in_buffer")) rs_chars_in_buffer()
909 return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_chars_in_buffer()
914 struct serial_state *info = tty->driver_data; rs_flush_buffer() local
917 if (serial_paranoia_check(info, tty->name, "rs_flush_buffer")) rs_flush_buffer()
920 info->xmit.head = info->xmit.tail = 0; rs_flush_buffer()
931 struct serial_state *info = tty->driver_data; rs_send_xchar() local
934 if (serial_paranoia_check(info, tty->name, "rs_send_xchar")) rs_send_xchar()
937 info->x_char = ch; rs_send_xchar()
952 info->IER |= UART_IER_THRI; rs_send_xchar()
966 struct serial_state *info = tty->driver_data; rs_throttle() local
975 if (serial_paranoia_check(info, tty->name, "rs_throttle")) rs_throttle()
982 info->MCR &= ~SER_RTS; rs_throttle()
985 rtsdtr_ctrl(info->MCR); rs_throttle()
991 struct serial_state *info = tty->driver_data; rs_unthrottle() local
1000 if (serial_paranoia_check(info, tty->name, "rs_unthrottle")) rs_unthrottle()
1004 if (info->x_char) rs_unthrottle()
1005 info->x_char = 0; rs_unthrottle()
1010 info->MCR |= SER_RTS; rs_unthrottle()
1012 rtsdtr_ctrl(info->MCR); rs_unthrottle()
1119 * get_lsr_info - get line status register info
1121 * Purpose: Let user call ioctl() to get info when the UART physically
1128 static int get_lsr_info(struct serial_state *info, unsigned int __user *value) get_lsr_info() argument
1147 struct serial_state *info = tty->driver_data; rs_tiocmget() local
1151 if (serial_paranoia_check(info, tty->name, "rs_ioctl")) rs_tiocmget()
1156 control = info->MCR; rs_tiocmget()
1170 struct serial_state *info = tty->driver_data; rs_tiocmset() local
1173 if (serial_paranoia_check(info, tty->name, "rs_ioctl")) rs_tiocmset()
1180 info->MCR |= SER_RTS; rs_tiocmset()
1182 info->MCR |= SER_DTR; rs_tiocmset()
1184 info->MCR &= ~SER_RTS; rs_tiocmset()
1186 info->MCR &= ~SER_DTR; rs_tiocmset()
1187 rtsdtr_ctrl(info->MCR); rs_tiocmset()
1197 struct serial_state *info = tty->driver_data; rs_break() local
1200 if (serial_paranoia_check(info, tty->name, "rs_break")) rs_break()
1222 struct serial_state *info = tty->driver_data; rs_get_icount() local
1227 cnow = info->icount; rs_get_icount()
1247 struct serial_state *info = tty->driver_data; rs_ioctl() local
1254 if (serial_paranoia_check(info, tty->name, "rs_ioctl")) rs_ioctl()
1266 return get_serial_info(tty, info, argp); rs_ioctl()
1268 return set_serial_info(tty, info, argp); rs_ioctl()
1273 return get_lsr_info(info, argp); rs_ioctl()
1277 info, sizeof(struct serial_state))) rs_ioctl()
1290 cprev = info->icount; rs_ioctl()
1293 prepare_to_wait(&info->tport.delta_msr_wait, rs_ioctl()
1296 cnow = info->icount; /* atomic copy */ rs_ioctl()
1318 finish_wait(&info->tport.delta_msr_wait, &wait); rs_ioctl()
1335 struct serial_state *info = tty->driver_data; rs_set_termios() local
1339 change_speed(tty, info, old_termios); rs_set_termios()
1344 info->MCR &= ~(SER_DTR|SER_RTS); rs_set_termios()
1346 rtsdtr_ctrl(info->MCR); rs_set_termios()
1353 info->MCR |= SER_DTR; rs_set_termios()
1356 info->MCR |= SER_RTS; rs_set_termios()
1359 rtsdtr_ctrl(info->MCR); rs_set_termios()
1379 wake_up_interruptible(&info->open_wait); rs_set_termios()
1440 struct serial_state *info = tty->driver_data; rs_wait_until_sent() local
1444 if (serial_paranoia_check(info, tty->name, "rs_wait_until_sent")) rs_wait_until_sent()
1447 if (info->xmit_fifo_size == 0) rs_wait_until_sent()
1460 char_time = (info->timeout - HZ/50) / info->xmit_fifo_size; rs_wait_until_sent()
1471 * takes longer than info->timeout, this is probably due to a rs_wait_until_sent()
1473 * 2*info->timeout. rs_wait_until_sent()
1475 if (!timeout || timeout > 2*info->timeout) rs_wait_until_sent()
1476 timeout = 2*info->timeout; rs_wait_until_sent()
1503 struct serial_state *info = tty->driver_data; rs_hangup() local
1505 if (serial_paranoia_check(info, tty->name, "rs_hangup")) rs_hangup()
1509 shutdown(tty, info); rs_hangup()
1510 info->tport.count = 0; rs_hangup()
1511 info->tport.flags &= ~ASYNC_NORMAL_ACTIVE; rs_hangup()
1512 info->tport.tty = NULL; rs_hangup()
1513 wake_up_interruptible(&info->tport.open_wait); rs_hangup()
1524 struct serial_state *info = rs_table + tty->index; rs_open() local
1525 struct tty_port *port = &info->tport; rs_open()
1530 tty->driver_data = info; rs_open()
1532 if (serial_paranoia_check(info, tty->name, "rs_open")) rs_open()
1537 retval = startup(tty, info); rs_open()
1669 struct serial_state *info = container_of(port, struct serial_state, amiga_dtr_rts() local
1674 info->MCR |= SER_DTR|SER_RTS; amiga_dtr_rts()
1676 info->MCR &= ~(SER_DTR|SER_RTS); amiga_dtr_rts()
1679 rtsdtr_ctrl(info->MCR); amiga_dtr_rts()
/linux-4.1.27/drivers/mtd/maps/
H A Dlatch-addr-flash.c40 struct latch_addr_flash_info *info; lf_read() local
43 info = (struct latch_addr_flash_info *)map->map_priv_1; lf_read()
45 spin_lock(&info->lock); lf_read()
47 info->set_window(ofs, info->data); lf_read()
48 datum = inline_map_read(map, info->win_mask & ofs); lf_read()
50 spin_unlock(&info->lock); lf_read()
57 struct latch_addr_flash_info *info; lf_write() local
59 info = (struct latch_addr_flash_info *)map->map_priv_1; lf_write()
61 spin_lock(&info->lock); lf_write()
63 info->set_window(ofs, info->data); lf_write()
64 inline_map_write(map, datum, info->win_mask & ofs); lf_write()
66 spin_unlock(&info->lock); lf_write()
72 struct latch_addr_flash_info *info = lf_copy_from() local
77 n = info->win_mask + 1 - (from & info->win_mask); lf_copy_from()
81 spin_lock(&info->lock); lf_copy_from()
83 info->set_window(from, info->data); lf_copy_from()
84 memcpy_fromio(to, map->virt + (from & info->win_mask), n); lf_copy_from()
86 spin_unlock(&info->lock); lf_copy_from()
98 struct latch_addr_flash_info *info; latch_addr_flash_remove() local
101 info = platform_get_drvdata(dev); latch_addr_flash_remove()
102 if (info == NULL) latch_addr_flash_remove()
107 if (info->mtd != NULL) { latch_addr_flash_remove()
108 mtd_device_unregister(info->mtd); latch_addr_flash_remove()
109 map_destroy(info->mtd); latch_addr_flash_remove()
112 if (info->map.virt != NULL) latch_addr_flash_remove()
113 iounmap(info->map.virt); latch_addr_flash_remove()
115 if (info->res != NULL) latch_addr_flash_remove()
116 release_mem_region(info->res->start, resource_size(info->res)); latch_addr_flash_remove()
118 kfree(info); latch_addr_flash_remove()
129 struct latch_addr_flash_info *info; latch_addr_flash_probe() local
152 info = kzalloc(sizeof(struct latch_addr_flash_info), GFP_KERNEL); latch_addr_flash_probe()
153 if (info == NULL) { latch_addr_flash_probe()
158 platform_set_drvdata(dev, info); latch_addr_flash_probe()
160 info->res = request_mem_region(win_base, win_size, DRIVER_NAME); latch_addr_flash_probe()
161 if (info->res == NULL) { latch_addr_flash_probe()
167 info->map.name = DRIVER_NAME; latch_addr_flash_probe()
168 info->map.size = latch_addr_data->size; latch_addr_flash_probe()
169 info->map.bankwidth = latch_addr_data->width; latch_addr_flash_probe()
171 info->map.phys = NO_XIP; latch_addr_flash_probe()
172 info->map.virt = ioremap(win_base, win_size); latch_addr_flash_probe()
173 if (!info->map.virt) { latch_addr_flash_probe()
178 info->map.map_priv_1 = (unsigned long)info; latch_addr_flash_probe()
180 info->map.read = lf_read; latch_addr_flash_probe()
181 info->map.copy_from = lf_copy_from; latch_addr_flash_probe()
182 info->map.write = lf_write; latch_addr_flash_probe()
183 info->set_window = latch_addr_data->set_window; latch_addr_flash_probe()
184 info->data = latch_addr_data->data; latch_addr_flash_probe()
185 info->win_mask = win_size - 1; latch_addr_flash_probe()
187 spin_lock_init(&info->lock); latch_addr_flash_probe()
189 for (probe_type = rom_probe_types; !info->mtd && *probe_type; latch_addr_flash_probe()
191 info->mtd = do_map_probe(*probe_type, &info->map); latch_addr_flash_probe()
193 if (info->mtd == NULL) { latch_addr_flash_probe()
198 info->mtd->owner = THIS_MODULE; latch_addr_flash_probe()
200 mtd_device_parse_register(info->mtd, NULL, NULL, latch_addr_flash_probe()
206 iounmap(info->map.virt); latch_addr_flash_probe()
208 release_mem_region(info->res->start, resource_size(info->res)); latch_addr_flash_probe()
210 kfree(info); latch_addr_flash_probe()
H A Dpxa2xx-flash.c52 struct pxa2xx_flash_info *info; pxa2xx_flash_probe() local
59 info = kzalloc(sizeof(struct pxa2xx_flash_info), GFP_KERNEL); pxa2xx_flash_probe()
60 if (!info) pxa2xx_flash_probe()
63 info->map.name = flash->name; pxa2xx_flash_probe()
64 info->map.bankwidth = flash->width; pxa2xx_flash_probe()
65 info->map.phys = res->start; pxa2xx_flash_probe()
66 info->map.size = resource_size(res); pxa2xx_flash_probe()
68 info->map.virt = ioremap(info->map.phys, info->map.size); pxa2xx_flash_probe()
69 if (!info->map.virt) { pxa2xx_flash_probe()
71 info->map.name); pxa2xx_flash_probe()
74 info->map.cached = pxa2xx_flash_probe()
75 ioremap_cache(info->map.phys, info->map.size); pxa2xx_flash_probe()
76 if (!info->map.cached) pxa2xx_flash_probe()
78 info->map.name); pxa2xx_flash_probe()
79 info->map.inval_cache = pxa2xx_map_inval_cache; pxa2xx_flash_probe()
80 simple_map_init(&info->map); pxa2xx_flash_probe()
85 info->map.name, (unsigned long)info->map.phys, pxa2xx_flash_probe()
86 info->map.bankwidth * 8); pxa2xx_flash_probe()
88 info->mtd = do_map_probe(flash->map_name, &info->map); pxa2xx_flash_probe()
90 if (!info->mtd) { pxa2xx_flash_probe()
91 iounmap((void *)info->map.virt); pxa2xx_flash_probe()
92 if (info->map.cached) pxa2xx_flash_probe()
93 iounmap(info->map.cached); pxa2xx_flash_probe()
96 info->mtd->owner = THIS_MODULE; pxa2xx_flash_probe()
98 mtd_device_parse_register(info->mtd, probes, NULL, flash->parts, pxa2xx_flash_probe()
101 platform_set_drvdata(pdev, info); pxa2xx_flash_probe()
107 struct pxa2xx_flash_info *info = platform_get_drvdata(dev); pxa2xx_flash_remove() local
109 mtd_device_unregister(info->mtd); pxa2xx_flash_remove()
111 map_destroy(info->mtd); pxa2xx_flash_remove()
112 iounmap(info->map.virt); pxa2xx_flash_remove()
113 if (info->map.cached) pxa2xx_flash_remove()
114 iounmap(info->map.cached); pxa2xx_flash_remove()
115 kfree(info); pxa2xx_flash_remove()
122 struct pxa2xx_flash_info *info = platform_get_drvdata(dev); pxa2xx_flash_shutdown() local
124 if (info && mtd_suspend(info->mtd) == 0) pxa2xx_flash_shutdown()
125 mtd_resume(info->mtd); pxa2xx_flash_shutdown()
H A Drbtx4939-flash.c31 struct rbtx4939_flash_info *info; rbtx4939_flash_remove() local
33 info = platform_get_drvdata(dev); rbtx4939_flash_remove()
34 if (!info) rbtx4939_flash_remove()
37 if (info->mtd) { rbtx4939_flash_remove()
38 mtd_device_unregister(info->mtd); rbtx4939_flash_remove()
39 map_destroy(info->mtd); rbtx4939_flash_remove()
50 struct rbtx4939_flash_info *info; rbtx4939_flash_probe() local
63 info = devm_kzalloc(&dev->dev, sizeof(struct rbtx4939_flash_info), rbtx4939_flash_probe()
65 if (!info) rbtx4939_flash_probe()
68 platform_set_drvdata(dev, info); rbtx4939_flash_probe()
77 info->map.name = dev_name(&dev->dev); rbtx4939_flash_probe()
78 info->map.phys = res->start; rbtx4939_flash_probe()
79 info->map.size = size; rbtx4939_flash_probe()
80 info->map.bankwidth = pdata->width; rbtx4939_flash_probe()
82 info->map.virt = devm_ioremap(&dev->dev, info->map.phys, size); rbtx4939_flash_probe()
83 if (!info->map.virt) rbtx4939_flash_probe()
87 (*pdata->map_init)(&info->map); rbtx4939_flash_probe()
89 simple_map_init(&info->map); rbtx4939_flash_probe()
92 for (; !info->mtd && *probe_type; probe_type++) rbtx4939_flash_probe()
93 info->mtd = do_map_probe(*probe_type, &info->map); rbtx4939_flash_probe()
94 if (!info->mtd) { rbtx4939_flash_probe()
99 info->mtd->owner = THIS_MODULE; rbtx4939_flash_probe()
100 err = mtd_device_parse_register(info->mtd, NULL, NULL, pdata->parts, rbtx4939_flash_probe()
115 struct rbtx4939_flash_info *info = platform_get_drvdata(dev); rbtx4939_flash_shutdown() local
117 if (mtd_suspend(info->mtd) == 0) rbtx4939_flash_shutdown()
118 mtd_resume(info->mtd); rbtx4939_flash_shutdown()
H A Dphysmap.c36 struct physmap_flash_info *info; physmap_flash_remove() local
40 info = platform_get_drvdata(dev); physmap_flash_remove()
41 if (info == NULL) physmap_flash_remove()
46 if (info->cmtd) { physmap_flash_remove()
47 mtd_device_unregister(info->cmtd); physmap_flash_remove()
48 if (info->cmtd != info->mtd[0]) physmap_flash_remove()
49 mtd_concat_destroy(info->cmtd); physmap_flash_remove()
53 if (info->mtd[i] != NULL) physmap_flash_remove()
54 map_destroy(info->mtd[i]); physmap_flash_remove()
67 struct physmap_flash_info *info; physmap_set_vpp() local
76 info = platform_get_drvdata(pdev); physmap_set_vpp()
78 spin_lock_irqsave(&info->vpp_lock, flags); physmap_set_vpp()
80 if (++info->vpp_refcnt == 1) /* first nested 'on' */ physmap_set_vpp()
83 if (--info->vpp_refcnt == 0) /* last nested 'off' */ physmap_set_vpp()
86 spin_unlock_irqrestore(&info->vpp_lock, flags); physmap_set_vpp()
98 struct physmap_flash_info *info; physmap_flash_probe() local
109 info = devm_kzalloc(&dev->dev, sizeof(struct physmap_flash_info), physmap_flash_probe()
111 if (info == NULL) { physmap_flash_probe()
122 platform_set_drvdata(dev, info); physmap_flash_probe()
138 info->map[i].name = dev_name(&dev->dev); physmap_flash_probe()
139 info->map[i].phys = dev->resource[i].start; physmap_flash_probe()
140 info->map[i].size = resource_size(&dev->resource[i]); physmap_flash_probe()
141 info->map[i].bankwidth = physmap_data->width; physmap_flash_probe()
142 info->map[i].set_vpp = physmap_set_vpp; physmap_flash_probe()
143 info->map[i].pfow_base = physmap_data->pfow_base; physmap_flash_probe()
144 info->map[i].map_priv_1 = (unsigned long)dev; physmap_flash_probe()
146 info->map[i].virt = devm_ioremap(&dev->dev, info->map[i].phys, physmap_flash_probe()
147 info->map[i].size); physmap_flash_probe()
148 if (info->map[i].virt == NULL) { physmap_flash_probe()
154 simple_map_init(&info->map[i]); physmap_flash_probe()
158 for (; info->mtd[i] == NULL && *probe_type != NULL; probe_type++) physmap_flash_probe()
159 info->mtd[i] = do_map_probe(*probe_type, &info->map[i]); physmap_flash_probe()
161 info->mtd[i] = do_map_probe(physmap_data->probe_type, &info->map[i]); physmap_flash_probe()
163 if (info->mtd[i] == NULL) { physmap_flash_probe()
170 info->mtd[i]->owner = THIS_MODULE; physmap_flash_probe()
171 info->mtd[i]->dev.parent = &dev->dev; physmap_flash_probe()
175 info->cmtd = info->mtd[0]; physmap_flash_probe()
180 info->cmtd = mtd_concat_create(info->mtd, devices_found, dev_name(&dev->dev)); physmap_flash_probe()
181 if (info->cmtd == NULL) physmap_flash_probe()
187 spin_lock_init(&info->vpp_lock); physmap_flash_probe()
191 mtd_device_parse_register(info->cmtd, part_types, NULL, physmap_flash_probe()
203 struct physmap_flash_info *info = platform_get_drvdata(dev); physmap_flash_shutdown() local
206 for (i = 0; i < MAX_RESOURCES && info->mtd[i]; i++) physmap_flash_shutdown()
207 if (mtd_suspend(info->mtd[i]) == 0) physmap_flash_shutdown()
208 mtd_resume(info->mtd[i]); physmap_flash_shutdown()
H A Dplat-ram.c68 static inline void platram_setrw(struct platram_info *info, int to) platram_setrw() argument
70 if (info->pdata == NULL) platram_setrw()
73 if (info->pdata->set_rw != NULL) platram_setrw()
74 (info->pdata->set_rw)(info->dev, to); platram_setrw()
84 struct platram_info *info = to_platram_info(pdev); platram_remove() local
88 if (info == NULL) platram_remove()
91 if (info->mtd) { platram_remove()
92 mtd_device_unregister(info->mtd); platram_remove()
93 map_destroy(info->mtd); platram_remove()
98 platram_setrw(info, PLATRAM_RO); platram_remove()
102 if (info->area) { platram_remove()
103 release_resource(info->area); platram_remove()
104 kfree(info->area); platram_remove()
107 if (info->map.virt != NULL) platram_remove()
108 iounmap(info->map.virt); platram_remove()
110 kfree(info); platram_remove()
124 struct platram_info *info; platram_probe() local
138 info = kzalloc(sizeof(*info), GFP_KERNEL); platram_probe()
139 if (info == NULL) { platram_probe()
144 platform_set_drvdata(pdev, info); platram_probe()
146 info->dev = &pdev->dev; platram_probe()
147 info->pdata = pdata; platram_probe()
164 info->map.phys = res->start; platram_probe()
165 info->map.size = resource_size(res); platram_probe()
166 info->map.name = pdata->mapname != NULL ? platram_probe()
168 info->map.bankwidth = pdata->bankwidth; platram_probe()
172 info->area = request_mem_region(res->start, info->map.size, pdev->name); platram_probe()
173 if (info->area == NULL) { platram_probe()
181 info->map.virt = ioremap(res->start, info->map.size); platram_probe()
182 dev_dbg(&pdev->dev, "virt %p, %lu bytes\n", info->map.virt, info->map.size); platram_probe()
184 if (info->map.virt == NULL) { platram_probe()
190 simple_map_init(&info->map); platram_probe()
200 for ( ; !info->mtd && *map_probes; map_probes++) platram_probe()
201 info->mtd = do_map_probe(*map_probes , &info->map); platram_probe()
205 info->mtd = do_map_probe("map_ram", &info->map); platram_probe()
207 if (info->mtd == NULL) { platram_probe()
213 info->mtd->owner = THIS_MODULE; platram_probe()
214 info->mtd->dev.parent = &pdev->dev; platram_probe()
216 platram_setrw(info, PLATRAM_RW); platram_probe()
221 err = mtd_device_parse_register(info->mtd, pdata->probes, NULL, platram_probe()
229 err = mtd_device_register(info->mtd, NULL, 0); platram_probe()
244 /* device driver info */
H A Dphysmap_of.c42 struct of_flash *info; of_flash_remove() local
45 info = dev_get_drvdata(&dev->dev); of_flash_remove()
46 if (!info) of_flash_remove()
50 if (info->cmtd) { of_flash_remove()
51 mtd_device_unregister(info->cmtd); of_flash_remove()
52 if (info->cmtd != info->list[0].mtd) of_flash_remove()
53 mtd_concat_destroy(info->cmtd); of_flash_remove()
56 for (i = 0; i < info->list_size; i++) { of_flash_remove()
57 if (info->list[i].mtd) of_flash_remove()
58 map_destroy(info->list[i].mtd); of_flash_remove()
60 if (info->list[i].map.virt) of_flash_remove()
61 iounmap(info->list[i].map.virt); of_flash_remove()
63 if (info->list[i].res) { of_flash_remove()
64 release_resource(info->list[i].res); of_flash_remove()
65 kfree(info->list[i].res); of_flash_remove()
157 struct of_flash *info; of_flash_probe() local
198 info = devm_kzalloc(&dev->dev, of_flash_probe()
201 if (!info) of_flash_probe()
204 dev_set_drvdata(&dev->dev, info); of_flash_probe()
224 info->list[i].res = request_mem_region(res.start, res_size, of_flash_probe()
226 if (!info->list[i].res) of_flash_probe()
237 info->list[i].map.name = mtd_name ?: dev_name(&dev->dev); of_flash_probe()
238 info->list[i].map.phys = res.start; of_flash_probe()
239 info->list[i].map.size = res_size; of_flash_probe()
240 info->list[i].map.bankwidth = be32_to_cpup(width); of_flash_probe()
241 info->list[i].map.device_node = dp; of_flash_probe()
244 info->list[i].map.virt = ioremap(info->list[i].map.phys, of_flash_probe()
245 info->list[i].map.size); of_flash_probe()
246 if (!info->list[i].map.virt) { of_flash_probe()
252 simple_map_init(&info->list[i].map); of_flash_probe()
263 info->list[i].map.phys = NO_XIP; of_flash_probe()
266 info->list[i].mtd = do_map_probe(probe_type, of_flash_probe()
267 &info->list[i].map); of_flash_probe()
269 info->list[i].mtd = obsolete_probe(dev, of_flash_probe()
270 &info->list[i].map); of_flash_probe()
274 if (!info->list[i].mtd) { of_flash_probe()
279 info->list[i].mtd = do_map_probe("map_rom", of_flash_probe()
280 &info->list[i].map); of_flash_probe()
282 mtd_list[i] = info->list[i].mtd; of_flash_probe()
285 if (!info->list[i].mtd) { of_flash_probe()
289 info->list_size++; of_flash_probe()
291 info->list[i].mtd->owner = THIS_MODULE; of_flash_probe()
292 info->list[i].mtd->dev.parent = &dev->dev; of_flash_probe()
296 info->cmtd = NULL; of_flash_probe()
297 if (info->list_size == 1) { of_flash_probe()
298 info->cmtd = info->list[0].mtd; of_flash_probe()
299 } else if (info->list_size > 1) { of_flash_probe()
303 info->cmtd = mtd_concat_create(mtd_list, info->list_size, of_flash_probe()
306 if (info->cmtd == NULL) of_flash_probe()
314 mtd_device_parse_register(info->cmtd, part_probe_types, &ppdata, of_flash_probe()
/linux-4.1.27/arch/s390/kernel/
H A Dsysinfo.c54 static void stsi_1_1_1(struct seq_file *m, struct sysinfo_1_1_1 *info) stsi_1_1_1() argument
58 if (stsi(info, 1, 1, 1)) stsi_1_1_1()
60 EBCASC(info->manufacturer, sizeof(info->manufacturer)); stsi_1_1_1()
61 EBCASC(info->type, sizeof(info->type)); stsi_1_1_1()
62 EBCASC(info->model, sizeof(info->model)); stsi_1_1_1()
63 EBCASC(info->sequence, sizeof(info->sequence)); stsi_1_1_1()
64 EBCASC(info->plant, sizeof(info->plant)); stsi_1_1_1()
65 EBCASC(info->model_capacity, sizeof(info->model_capacity)); stsi_1_1_1()
66 EBCASC(info->model_perm_cap, sizeof(info->model_perm_cap)); stsi_1_1_1()
67 EBCASC(info->model_temp_cap, sizeof(info->model_temp_cap)); stsi_1_1_1()
68 seq_printf(m, "Manufacturer: %-16.16s\n", info->manufacturer); stsi_1_1_1()
69 seq_printf(m, "Type: %-4.4s\n", info->type); stsi_1_1_1()
77 seq_printf(m, "Model: %-16.16s", info->model_capacity); stsi_1_1_1()
78 if (info->model[0] != '\0') stsi_1_1_1()
79 seq_printf(m, " %-16.16s", info->model); stsi_1_1_1()
81 seq_printf(m, "Sequence Code: %-16.16s\n", info->sequence); stsi_1_1_1()
82 seq_printf(m, "Plant: %-4.4s\n", info->plant); stsi_1_1_1()
84 info->model_capacity, info->model_cap_rating); stsi_1_1_1()
85 if (info->model_perm_cap_rating) stsi_1_1_1()
87 info->model_perm_cap, stsi_1_1_1()
88 info->model_perm_cap_rating); stsi_1_1_1()
89 if (info->model_temp_cap_rating) stsi_1_1_1()
91 info->model_temp_cap, stsi_1_1_1()
92 info->model_temp_cap_rating); stsi_1_1_1()
93 if (info->ncr) stsi_1_1_1()
94 seq_printf(m, "Nominal Cap. Rating: %08u\n", info->ncr); stsi_1_1_1()
95 if (info->npr) stsi_1_1_1()
96 seq_printf(m, "Nominal Perm. Rating: %08u\n", info->npr); stsi_1_1_1()
97 if (info->ntr) stsi_1_1_1()
98 seq_printf(m, "Nominal Temp. Rating: %08u\n", info->ntr); stsi_1_1_1()
99 if (info->cai) { stsi_1_1_1()
100 seq_printf(m, "Capacity Adj. Ind.: %d\n", info->cai); stsi_1_1_1()
101 seq_printf(m, "Capacity Ch. Reason: %d\n", info->ccr); stsi_1_1_1()
102 seq_printf(m, "Capacity Transient: %d\n", info->t); stsi_1_1_1()
104 if (info->p) { stsi_1_1_1()
105 for (i = 1; i <= ARRAY_SIZE(info->typepct); i++) { stsi_1_1_1()
107 i, info->typepct[i - 1]); stsi_1_1_1()
112 static void stsi_15_1_x(struct seq_file *m, struct sysinfo_15_1_x *info) stsi_15_1_x() argument
120 if (stsi(info, 15, 1, topology_max_mnest)) stsi_15_1_x()
124 seq_printf(m, " %d", info->mag[i]); stsi_15_1_x()
127 store_topology(info); stsi_15_1_x()
130 seq_printf(m, " %d", info->mag[i]); stsi_15_1_x()
135 static void stsi_1_2_2(struct seq_file *m, struct sysinfo_1_2_2 *info) stsi_1_2_2() argument
140 if (stsi(info, 1, 2, 2)) stsi_1_2_2()
143 ((unsigned long) info + info->acc_offset); stsi_1_2_2()
144 seq_printf(m, "CPUs Total: %d\n", info->cpus_total); stsi_1_2_2()
145 seq_printf(m, "CPUs Configured: %d\n", info->cpus_configured); stsi_1_2_2()
146 seq_printf(m, "CPUs Standby: %d\n", info->cpus_standby); stsi_1_2_2()
147 seq_printf(m, "CPUs Reserved: %d\n", info->cpus_reserved); stsi_1_2_2()
157 seq_printf(m, "Capability: %u", info->capability); stsi_1_2_2()
158 if (info->format == 1) stsi_1_2_2()
161 if (info->nominal_cap) stsi_1_2_2()
162 seq_printf(m, "Nominal Capability: %d\n", info->nominal_cap); stsi_1_2_2()
163 if (info->secondary_cap) stsi_1_2_2()
164 seq_printf(m, "Secondary Capability: %d\n", info->secondary_cap); stsi_1_2_2()
165 for (i = 2; i <= info->cpus_total; i++) { stsi_1_2_2()
167 i, info->adjustment[i-2]); stsi_1_2_2()
168 if (info->format == 1) stsi_1_2_2()
174 static void stsi_2_2_2(struct seq_file *m, struct sysinfo_2_2_2 *info) stsi_2_2_2() argument
176 if (stsi(info, 2, 2, 2)) stsi_2_2_2()
178 EBCASC(info->name, sizeof(info->name)); stsi_2_2_2()
180 seq_printf(m, "LPAR Number: %d\n", info->lpar_number); stsi_2_2_2()
182 if (info->characteristics & LPAR_CHAR_DEDICATED) stsi_2_2_2()
184 if (info->characteristics & LPAR_CHAR_SHARED) stsi_2_2_2()
186 if (info->characteristics & LPAR_CHAR_LIMITED) stsi_2_2_2()
189 seq_printf(m, "LPAR Name: %-8.8s\n", info->name); stsi_2_2_2()
190 seq_printf(m, "LPAR Adjustment: %d\n", info->caf); stsi_2_2_2()
191 seq_printf(m, "LPAR CPUs Total: %d\n", info->cpus_total); stsi_2_2_2()
192 seq_printf(m, "LPAR CPUs Configured: %d\n", info->cpus_configured); stsi_2_2_2()
193 seq_printf(m, "LPAR CPUs Standby: %d\n", info->cpus_standby); stsi_2_2_2()
194 seq_printf(m, "LPAR CPUs Reserved: %d\n", info->cpus_reserved); stsi_2_2_2()
195 seq_printf(m, "LPAR CPUs Dedicated: %d\n", info->cpus_dedicated); stsi_2_2_2()
196 seq_printf(m, "LPAR CPUs Shared: %d\n", info->cpus_shared); stsi_2_2_2()
197 if (info->mt_installed & 0x80) { stsi_2_2_2()
199 info->mt_general & 0x1f); stsi_2_2_2()
201 info->mt_installed & 0x1f); stsi_2_2_2()
203 info->mt_psmtid & 0x1f); stsi_2_2_2()
208 struct sysinfo_3_2_2 *info) print_ext_name()
210 if (info->vm[lvl].ext_name_encoding == 0) print_ext_name()
212 if (info->ext_names[lvl][0] == 0) print_ext_name()
214 switch (info->vm[lvl].ext_name_encoding) { print_ext_name()
216 EBCASC(info->ext_names[lvl], sizeof(info->ext_names[lvl])); print_ext_name()
224 info->ext_names[lvl]); print_ext_name()
227 static void print_uuid(struct seq_file *m, int i, struct sysinfo_3_2_2 *info) print_uuid() argument
229 if (!memcmp(&info->vm[i].uuid, &NULL_UUID_BE, sizeof(uuid_be))) print_uuid()
231 seq_printf(m, "VM%02d UUID: %pUb\n", i, &info->vm[i].uuid); print_uuid()
234 static void stsi_3_2_2(struct seq_file *m, struct sysinfo_3_2_2 *info) stsi_3_2_2() argument
238 if (stsi(info, 3, 2, 2)) stsi_3_2_2()
240 for (i = 0; i < info->count; i++) { stsi_3_2_2()
241 EBCASC(info->vm[i].name, sizeof(info->vm[i].name)); stsi_3_2_2()
242 EBCASC(info->vm[i].cpi, sizeof(info->vm[i].cpi)); stsi_3_2_2()
244 seq_printf(m, "VM%02d Name: %-8.8s\n", i, info->vm[i].name); stsi_3_2_2()
245 seq_printf(m, "VM%02d Control Program: %-16.16s\n", i, info->vm[i].cpi); stsi_3_2_2()
246 seq_printf(m, "VM%02d Adjustment: %d\n", i, info->vm[i].caf); stsi_3_2_2()
247 seq_printf(m, "VM%02d CPUs Total: %d\n", i, info->vm[i].cpus_total); stsi_3_2_2()
248 seq_printf(m, "VM%02d CPUs Configured: %d\n", i, info->vm[i].cpus_configured); stsi_3_2_2()
249 seq_printf(m, "VM%02d CPUs Standby: %d\n", i, info->vm[i].cpus_standby); stsi_3_2_2()
250 seq_printf(m, "VM%02d CPUs Reserved: %d\n", i, info->vm[i].cpus_reserved); stsi_3_2_2()
251 print_ext_name(m, i, info); stsi_3_2_2()
252 print_uuid(m, i, info); stsi_3_2_2()
258 void *info = (void *)get_zeroed_page(GFP_KERNEL); sysinfo_show() local
261 if (!info) sysinfo_show()
265 stsi_1_1_1(m, info); sysinfo_show()
267 stsi_15_1_x(m, info); sysinfo_show()
269 stsi_1_2_2(m, info); sysinfo_show()
271 stsi_2_2_2(m, info); sysinfo_show()
273 stsi_3_2_2(m, info); sysinfo_show()
274 free_page((unsigned long)info); sysinfo_show()
416 struct sysinfo_1_2_2 *info; s390_adjust_jiffies() local
422 info = (void *) get_zeroed_page(GFP_KERNEL); s390_adjust_jiffies()
423 if (!info) s390_adjust_jiffies()
426 if (stsi(info, 1, 2, 2) == 0) { s390_adjust_jiffies()
429 * If the first 9 bits of info->capability are 0 then it s390_adjust_jiffies()
439 if ((info->capability >> 23) == 0) s390_adjust_jiffies()
440 FP_FROM_INT_S(SB, (long) info->capability, 64, long); s390_adjust_jiffies()
442 FP_UNPACK_SP(SB, &info->capability); s390_adjust_jiffies()
452 free_page((unsigned long) info); s390_adjust_jiffies()
207 print_ext_name(struct seq_file *m, int lvl, struct sysinfo_3_2_2 *info) print_ext_name() argument
/linux-4.1.27/drivers/rtc/
H A Drtc-s3c.c60 void (*irq_handler) (struct s3c_rtc *info, int mask);
61 void (*set_freq) (struct s3c_rtc *info, int freq);
62 void (*enable_tick) (struct s3c_rtc *info, struct seq_file *seq);
63 void (*select_tick_clk) (struct s3c_rtc *info);
64 void (*save_tick_cnt) (struct s3c_rtc *info);
65 void (*restore_tick_cnt) (struct s3c_rtc *info);
66 void (*enable) (struct s3c_rtc *info);
67 void (*disable) (struct s3c_rtc *info);
70 static void s3c_rtc_enable_clk(struct s3c_rtc *info) s3c_rtc_enable_clk() argument
74 spin_lock_irqsave(&info->alarm_clk_lock, irq_flags); s3c_rtc_enable_clk()
75 if (info->clk_disabled) { s3c_rtc_enable_clk()
76 clk_enable(info->rtc_clk); s3c_rtc_enable_clk()
77 if (info->data->needs_src_clk) s3c_rtc_enable_clk()
78 clk_enable(info->rtc_src_clk); s3c_rtc_enable_clk()
79 info->clk_disabled = false; s3c_rtc_enable_clk()
81 spin_unlock_irqrestore(&info->alarm_clk_lock, irq_flags); s3c_rtc_enable_clk()
84 static void s3c_rtc_disable_clk(struct s3c_rtc *info) s3c_rtc_disable_clk() argument
88 spin_lock_irqsave(&info->alarm_clk_lock, irq_flags); s3c_rtc_disable_clk()
89 if (!info->clk_disabled) { s3c_rtc_disable_clk()
90 if (info->data->needs_src_clk) s3c_rtc_disable_clk()
91 clk_disable(info->rtc_src_clk); s3c_rtc_disable_clk()
92 clk_disable(info->rtc_clk); s3c_rtc_disable_clk()
93 info->clk_disabled = true; s3c_rtc_disable_clk()
95 spin_unlock_irqrestore(&info->alarm_clk_lock, irq_flags); s3c_rtc_disable_clk()
101 struct s3c_rtc *info = (struct s3c_rtc *)id; s3c_rtc_tickirq() local
103 if (info->data->irq_handler) s3c_rtc_tickirq()
104 info->data->irq_handler(info, S3C2410_INTP_TIC); s3c_rtc_tickirq()
111 struct s3c_rtc *info = (struct s3c_rtc *)id; s3c_rtc_alarmirq() local
113 if (info->data->irq_handler) s3c_rtc_alarmirq()
114 info->data->irq_handler(info, S3C2410_INTP_ALM); s3c_rtc_alarmirq()
122 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_setaie() local
125 dev_dbg(info->dev, "%s: aie=%d\n", __func__, enabled); s3c_rtc_setaie()
127 s3c_rtc_enable_clk(info); s3c_rtc_setaie()
129 tmp = readb(info->base + S3C2410_RTCALM) & ~S3C2410_RTCALM_ALMEN; s3c_rtc_setaie()
134 writeb(tmp, info->base + S3C2410_RTCALM); s3c_rtc_setaie()
136 s3c_rtc_disable_clk(info); s3c_rtc_setaie()
139 s3c_rtc_enable_clk(info); s3c_rtc_setaie()
141 s3c_rtc_disable_clk(info); s3c_rtc_setaie()
147 static int s3c_rtc_setfreq(struct s3c_rtc *info, int freq) s3c_rtc_setfreq() argument
152 spin_lock_irq(&info->pie_lock); s3c_rtc_setfreq()
154 if (info->data->set_freq) s3c_rtc_setfreq()
155 info->data->set_freq(info, freq); s3c_rtc_setfreq()
157 spin_unlock_irq(&info->pie_lock); s3c_rtc_setfreq()
165 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_gettime() local
168 s3c_rtc_enable_clk(info); s3c_rtc_gettime()
171 rtc_tm->tm_min = readb(info->base + S3C2410_RTCMIN); s3c_rtc_gettime()
172 rtc_tm->tm_hour = readb(info->base + S3C2410_RTCHOUR); s3c_rtc_gettime()
173 rtc_tm->tm_mday = readb(info->base + S3C2410_RTCDATE); s3c_rtc_gettime()
174 rtc_tm->tm_mon = readb(info->base + S3C2410_RTCMON); s3c_rtc_gettime()
175 rtc_tm->tm_year = readb(info->base + S3C2410_RTCYEAR); s3c_rtc_gettime()
176 rtc_tm->tm_sec = readb(info->base + S3C2410_RTCSEC); s3c_rtc_gettime()
195 s3c_rtc_disable_clk(info); s3c_rtc_gettime()
210 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_settime() local
224 s3c_rtc_enable_clk(info); s3c_rtc_settime()
226 writeb(bin2bcd(tm->tm_sec), info->base + S3C2410_RTCSEC); s3c_rtc_settime()
227 writeb(bin2bcd(tm->tm_min), info->base + S3C2410_RTCMIN); s3c_rtc_settime()
228 writeb(bin2bcd(tm->tm_hour), info->base + S3C2410_RTCHOUR); s3c_rtc_settime()
229 writeb(bin2bcd(tm->tm_mday), info->base + S3C2410_RTCDATE); s3c_rtc_settime()
230 writeb(bin2bcd(tm->tm_mon + 1), info->base + S3C2410_RTCMON); s3c_rtc_settime()
231 writeb(bin2bcd(year), info->base + S3C2410_RTCYEAR); s3c_rtc_settime()
233 s3c_rtc_disable_clk(info); s3c_rtc_settime()
240 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_getalarm() local
244 s3c_rtc_enable_clk(info); s3c_rtc_getalarm()
246 alm_tm->tm_sec = readb(info->base + S3C2410_ALMSEC); s3c_rtc_getalarm()
247 alm_tm->tm_min = readb(info->base + S3C2410_ALMMIN); s3c_rtc_getalarm()
248 alm_tm->tm_hour = readb(info->base + S3C2410_ALMHOUR); s3c_rtc_getalarm()
249 alm_tm->tm_mon = readb(info->base + S3C2410_ALMMON); s3c_rtc_getalarm()
250 alm_tm->tm_mday = readb(info->base + S3C2410_ALMDATE); s3c_rtc_getalarm()
251 alm_tm->tm_year = readb(info->base + S3C2410_ALMYEAR); s3c_rtc_getalarm()
253 alm_en = readb(info->base + S3C2410_RTCALM); s3c_rtc_getalarm()
255 s3c_rtc_disable_clk(info); s3c_rtc_getalarm()
302 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_setalarm() local
311 s3c_rtc_enable_clk(info); s3c_rtc_setalarm()
313 alrm_en = readb(info->base + S3C2410_RTCALM) & S3C2410_RTCALM_ALMEN; s3c_rtc_setalarm()
314 writeb(0x00, info->base + S3C2410_RTCALM); s3c_rtc_setalarm()
318 writeb(bin2bcd(tm->tm_sec), info->base + S3C2410_ALMSEC); s3c_rtc_setalarm()
323 writeb(bin2bcd(tm->tm_min), info->base + S3C2410_ALMMIN); s3c_rtc_setalarm()
328 writeb(bin2bcd(tm->tm_hour), info->base + S3C2410_ALMHOUR); s3c_rtc_setalarm()
333 writeb(alrm_en, info->base + S3C2410_RTCALM); s3c_rtc_setalarm()
335 s3c_rtc_disable_clk(info); s3c_rtc_setalarm()
344 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_proc() local
346 s3c_rtc_enable_clk(info); s3c_rtc_proc()
348 if (info->data->enable_tick) s3c_rtc_proc()
349 info->data->enable_tick(info, seq); s3c_rtc_proc()
351 s3c_rtc_disable_clk(info); s3c_rtc_proc()
365 static void s3c24xx_rtc_enable(struct s3c_rtc *info) s3c24xx_rtc_enable() argument
369 con = readw(info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
372 dev_info(info->dev, "rtc disabled, re-enabling\n"); s3c24xx_rtc_enable()
374 tmp = readw(info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
376 info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
380 dev_info(info->dev, "removing RTCCON_CNTSEL\n"); s3c24xx_rtc_enable()
382 tmp = readw(info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
384 info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
388 dev_info(info->dev, "removing RTCCON_CLKRST\n"); s3c24xx_rtc_enable()
390 tmp = readw(info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
392 info->base + S3C2410_RTCCON); s3c24xx_rtc_enable()
396 static void s3c24xx_rtc_disable(struct s3c_rtc *info) s3c24xx_rtc_disable() argument
400 con = readw(info->base + S3C2410_RTCCON); s3c24xx_rtc_disable()
402 writew(con, info->base + S3C2410_RTCCON); s3c24xx_rtc_disable()
404 con = readb(info->base + S3C2410_TICNT); s3c24xx_rtc_disable()
406 writeb(con, info->base + S3C2410_TICNT); s3c24xx_rtc_disable()
409 static void s3c6410_rtc_disable(struct s3c_rtc *info) s3c6410_rtc_disable() argument
413 con = readw(info->base + S3C2410_RTCCON); s3c6410_rtc_disable()
416 writew(con, info->base + S3C2410_RTCCON); s3c6410_rtc_disable()
421 struct s3c_rtc *info = platform_get_drvdata(pdev); s3c_rtc_remove() local
423 s3c_rtc_setaie(info->dev, 0); s3c_rtc_remove()
425 clk_unprepare(info->rtc_clk); s3c_rtc_remove()
426 info->rtc_clk = NULL; s3c_rtc_remove()
443 struct s3c_rtc *info = NULL; s3c_rtc_probe() local
448 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); s3c_rtc_probe()
449 if (!info) s3c_rtc_probe()
453 info->irq_tick = platform_get_irq(pdev, 1); s3c_rtc_probe()
454 if (info->irq_tick < 0) { s3c_rtc_probe()
456 return info->irq_tick; s3c_rtc_probe()
459 info->dev = &pdev->dev; s3c_rtc_probe()
460 info->data = s3c_rtc_get_data(pdev); s3c_rtc_probe()
461 if (!info->data) { s3c_rtc_probe()
465 spin_lock_init(&info->pie_lock); s3c_rtc_probe()
466 spin_lock_init(&info->alarm_clk_lock); s3c_rtc_probe()
468 platform_set_drvdata(pdev, info); s3c_rtc_probe()
470 info->irq_alarm = platform_get_irq(pdev, 0); s3c_rtc_probe()
471 if (info->irq_alarm < 0) { s3c_rtc_probe()
473 return info->irq_alarm; s3c_rtc_probe()
477 info->irq_tick, info->irq_alarm); s3c_rtc_probe()
481 info->base = devm_ioremap_resource(&pdev->dev, res); s3c_rtc_probe()
482 if (IS_ERR(info->base)) s3c_rtc_probe()
483 return PTR_ERR(info->base); s3c_rtc_probe()
485 info->rtc_clk = devm_clk_get(&pdev->dev, "rtc"); s3c_rtc_probe()
486 if (IS_ERR(info->rtc_clk)) { s3c_rtc_probe()
488 return PTR_ERR(info->rtc_clk); s3c_rtc_probe()
490 clk_prepare_enable(info->rtc_clk); s3c_rtc_probe()
492 if (info->data->needs_src_clk) { s3c_rtc_probe()
493 info->rtc_src_clk = devm_clk_get(&pdev->dev, "rtc_src"); s3c_rtc_probe()
494 if (IS_ERR(info->rtc_src_clk)) { s3c_rtc_probe()
497 return PTR_ERR(info->rtc_src_clk); s3c_rtc_probe()
499 clk_prepare_enable(info->rtc_src_clk); s3c_rtc_probe()
503 if (info->data->enable) s3c_rtc_probe()
504 info->data->enable(info); s3c_rtc_probe()
507 readw(info->base + S3C2410_RTCCON)); s3c_rtc_probe()
526 info->rtc = devm_rtc_device_register(&pdev->dev, "s3c", &s3c_rtcops, s3c_rtc_probe()
528 if (IS_ERR(info->rtc)) { s3c_rtc_probe()
530 ret = PTR_ERR(info->rtc); s3c_rtc_probe()
534 ret = devm_request_irq(&pdev->dev, info->irq_alarm, s3c_rtc_alarmirq, s3c_rtc_probe()
535 0, "s3c2410-rtc alarm", info); s3c_rtc_probe()
537 dev_err(&pdev->dev, "IRQ%d error %d\n", info->irq_alarm, ret); s3c_rtc_probe()
541 ret = devm_request_irq(&pdev->dev, info->irq_tick, s3c_rtc_tickirq, s3c_rtc_probe()
542 0, "s3c2410-rtc tick", info); s3c_rtc_probe()
544 dev_err(&pdev->dev, "IRQ%d error %d\n", info->irq_tick, ret); s3c_rtc_probe()
548 if (info->data->select_tick_clk) s3c_rtc_probe()
549 info->data->select_tick_clk(info); s3c_rtc_probe()
551 s3c_rtc_setfreq(info, 1); s3c_rtc_probe()
553 s3c_rtc_disable_clk(info); s3c_rtc_probe()
558 if (info->data->disable) s3c_rtc_probe()
559 info->data->disable(info); s3c_rtc_probe()
561 if (info->data->needs_src_clk) s3c_rtc_probe()
562 clk_disable_unprepare(info->rtc_src_clk); s3c_rtc_probe()
563 clk_disable_unprepare(info->rtc_clk); s3c_rtc_probe()
572 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_suspend() local
574 s3c_rtc_enable_clk(info); s3c_rtc_suspend()
577 if (info->data->save_tick_cnt) s3c_rtc_suspend()
578 info->data->save_tick_cnt(info); s3c_rtc_suspend()
580 if (info->data->disable) s3c_rtc_suspend()
581 info->data->disable(info); s3c_rtc_suspend()
583 if (device_may_wakeup(dev) && !info->wake_en) { s3c_rtc_suspend()
584 if (enable_irq_wake(info->irq_alarm) == 0) s3c_rtc_suspend()
585 info->wake_en = true; s3c_rtc_suspend()
595 struct s3c_rtc *info = dev_get_drvdata(dev); s3c_rtc_resume() local
597 if (info->data->enable) s3c_rtc_resume()
598 info->data->enable(info); s3c_rtc_resume()
600 if (info->data->restore_tick_cnt) s3c_rtc_resume()
601 info->data->restore_tick_cnt(info); s3c_rtc_resume()
603 s3c_rtc_disable_clk(info); s3c_rtc_resume()
605 if (device_may_wakeup(dev) && info->wake_en) { s3c_rtc_resume()
606 disable_irq_wake(info->irq_alarm); s3c_rtc_resume()
607 info->wake_en = false; s3c_rtc_resume()
615 static void s3c24xx_rtc_irq(struct s3c_rtc *info, int mask) s3c24xx_rtc_irq() argument
617 rtc_update_irq(info->rtc, 1, RTC_AF | RTC_IRQF); s3c24xx_rtc_irq()
620 static void s3c6410_rtc_irq(struct s3c_rtc *info, int mask) s3c6410_rtc_irq() argument
622 rtc_update_irq(info->rtc, 1, RTC_AF | RTC_IRQF); s3c6410_rtc_irq()
623 writeb(mask, info->base + S3C2410_INTP); s3c6410_rtc_irq()
626 static void s3c2410_rtc_setfreq(struct s3c_rtc *info, int freq) s3c2410_rtc_setfreq() argument
631 tmp = readb(info->base + S3C2410_TICNT); s3c2410_rtc_setfreq()
634 val = (info->rtc->max_user_freq / freq) - 1; s3c2410_rtc_setfreq()
637 writel(tmp, info->base + S3C2410_TICNT); s3c2410_rtc_setfreq()
640 static void s3c2416_rtc_setfreq(struct s3c_rtc *info, int freq) s3c2416_rtc_setfreq() argument
645 tmp = readb(info->base + S3C2410_TICNT); s3c2416_rtc_setfreq()
648 val = (info->rtc->max_user_freq / freq) - 1; s3c2416_rtc_setfreq()
651 writel(S3C2443_TICNT1_PART(val), info->base + S3C2443_TICNT1); s3c2416_rtc_setfreq()
653 writel(S3C2416_TICNT2_PART(val), info->base + S3C2416_TICNT2); s3c2416_rtc_setfreq()
655 writel(tmp, info->base + S3C2410_TICNT); s3c2416_rtc_setfreq()
658 static void s3c2443_rtc_setfreq(struct s3c_rtc *info, int freq) s3c2443_rtc_setfreq() argument
663 tmp = readb(info->base + S3C2410_TICNT); s3c2443_rtc_setfreq()
666 val = (info->rtc->max_user_freq / freq) - 1; s3c2443_rtc_setfreq()
669 writel(S3C2443_TICNT1_PART(val), info->base + S3C2443_TICNT1); s3c2443_rtc_setfreq()
671 writel(tmp, info->base + S3C2410_TICNT); s3c2443_rtc_setfreq()
674 static void s3c6410_rtc_setfreq(struct s3c_rtc *info, int freq) s3c6410_rtc_setfreq() argument
678 val = (info->rtc->max_user_freq / freq) - 1; s3c6410_rtc_setfreq()
679 writel(val, info->base + S3C2410_TICNT); s3c6410_rtc_setfreq()
682 static void s3c24xx_rtc_enable_tick(struct s3c_rtc *info, struct seq_file *seq) s3c24xx_rtc_enable_tick() argument
686 ticnt = readb(info->base + S3C2410_TICNT); s3c24xx_rtc_enable_tick()
692 static void s3c2416_rtc_select_tick_clk(struct s3c_rtc *info) s3c2416_rtc_select_tick_clk() argument
696 con = readw(info->base + S3C2410_RTCCON); s3c2416_rtc_select_tick_clk()
698 writew(con, info->base + S3C2410_RTCCON); s3c2416_rtc_select_tick_clk()
701 static void s3c6410_rtc_enable_tick(struct s3c_rtc *info, struct seq_file *seq) s3c6410_rtc_enable_tick() argument
705 ticnt = readw(info->base + S3C2410_RTCCON); s3c6410_rtc_enable_tick()
711 static void s3c24xx_rtc_save_tick_cnt(struct s3c_rtc *info) s3c24xx_rtc_save_tick_cnt() argument
713 info->ticnt_save = readb(info->base + S3C2410_TICNT); s3c24xx_rtc_save_tick_cnt()
716 static void s3c24xx_rtc_restore_tick_cnt(struct s3c_rtc *info) s3c24xx_rtc_restore_tick_cnt() argument
718 writeb(info->ticnt_save, info->base + S3C2410_TICNT); s3c24xx_rtc_restore_tick_cnt()
721 static void s3c6410_rtc_save_tick_cnt(struct s3c_rtc *info) s3c6410_rtc_save_tick_cnt() argument
723 info->ticnt_en_save = readw(info->base + S3C2410_RTCCON); s3c6410_rtc_save_tick_cnt()
724 info->ticnt_en_save &= S3C64XX_RTCCON_TICEN; s3c6410_rtc_save_tick_cnt()
725 info->ticnt_save = readl(info->base + S3C2410_TICNT); s3c6410_rtc_save_tick_cnt()
728 static void s3c6410_rtc_restore_tick_cnt(struct s3c_rtc *info) s3c6410_rtc_restore_tick_cnt() argument
732 writel(info->ticnt_save, info->base + S3C2410_TICNT); s3c6410_rtc_restore_tick_cnt()
733 if (info->ticnt_en_save) { s3c6410_rtc_restore_tick_cnt()
734 con = readw(info->base + S3C2410_RTCCON); s3c6410_rtc_restore_tick_cnt()
735 writew(con | info->ticnt_en_save, s3c6410_rtc_restore_tick_cnt()
736 info->base + S3C2410_RTCCON); s3c6410_rtc_restore_tick_cnt()
H A Drtc-max8997.c119 static inline int max8997_rtc_set_update_reg(struct max8997_rtc_info *info) max8997_rtc_set_update_reg() argument
123 ret = max8997_write_reg(info->rtc, MAX8997_RTC_UPDATE1, max8997_rtc_set_update_reg()
126 dev_err(info->dev, "%s: fail to write update reg(%d)\n", max8997_rtc_set_update_reg()
140 struct max8997_rtc_info *info = dev_get_drvdata(dev); max8997_rtc_read_time() local
144 mutex_lock(&info->lock); max8997_rtc_read_time()
145 ret = max8997_bulk_read(info->rtc, MAX8997_RTC_SEC, RTC_NR_TIME, data); max8997_rtc_read_time()
146 mutex_unlock(&info->lock); max8997_rtc_read_time()
149 dev_err(info->dev, "%s: fail to read time reg(%d)\n", __func__, max8997_rtc_read_time()
154 max8997_rtc_data_to_tm(data, tm, info->rtc_24hr_mode); max8997_rtc_read_time()
161 struct max8997_rtc_info *info = dev_get_drvdata(dev); max8997_rtc_set_time() local
169 mutex_lock(&info->lock); max8997_rtc_set_time()
171 ret = max8997_bulk_write(info->rtc, MAX8997_RTC_SEC, RTC_NR_TIME, data); max8997_rtc_set_time()
173 dev_err(info->dev, "%s: fail to write time reg(%d)\n", __func__, max8997_rtc_set_time()
178 ret = max8997_rtc_set_update_reg(info); max8997_rtc_set_time()
180 mutex_unlock(&info->lock); max8997_rtc_set_time()
186 struct max8997_rtc_info *info = dev_get_drvdata(dev); max8997_rtc_read_alarm() local
191 mutex_lock(&info->lock); max8997_rtc_read_alarm()
193 ret = max8997_bulk_read(info->rtc, MAX8997_RTC_ALARM1_SEC, RTC_NR_TIME, max8997_rtc_read_alarm()
196 dev_err(info->dev, "%s:%d fail to read alarm reg(%d)\n", max8997_rtc_read_alarm()
201 max8997_rtc_data_to_tm(data, &alrm->time, info->rtc_24hr_mode); max8997_rtc_read_alarm()
212 ret = max8997_read_reg(info->max8997->i2c, MAX8997_REG_STATUS1, &val); max8997_rtc_read_alarm()
214 dev_err(info->dev, "%s:%d fail to read status1 reg(%d)\n", max8997_rtc_read_alarm()
223 mutex_unlock(&info->lock); max8997_rtc_read_alarm()
227 static int max8997_rtc_stop_alarm(struct max8997_rtc_info *info) max8997_rtc_stop_alarm() argument
232 if (!mutex_is_locked(&info->lock)) max8997_rtc_stop_alarm()
233 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); max8997_rtc_stop_alarm()
235 ret = max8997_bulk_read(info->rtc, MAX8997_RTC_ALARM1_SEC, RTC_NR_TIME, max8997_rtc_stop_alarm()
238 dev_err(info->dev, "%s: fail to read alarm reg(%d)\n", max8997_rtc_stop_alarm()
246 ret = max8997_bulk_write(info->rtc, MAX8997_RTC_ALARM1_SEC, RTC_NR_TIME, max8997_rtc_stop_alarm()
249 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max8997_rtc_stop_alarm()
254 ret = max8997_rtc_set_update_reg(info); max8997_rtc_stop_alarm()
259 static int max8997_rtc_start_alarm(struct max8997_rtc_info *info) max8997_rtc_start_alarm() argument
264 if (!mutex_is_locked(&info->lock)) max8997_rtc_start_alarm()
265 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); max8997_rtc_start_alarm()
267 ret = max8997_bulk_read(info->rtc, MAX8997_RTC_ALARM1_SEC, RTC_NR_TIME, max8997_rtc_start_alarm()
270 dev_err(info->dev, "%s: fail to read alarm reg(%d)\n", max8997_rtc_start_alarm()
286 ret = max8997_bulk_write(info->rtc, MAX8997_RTC_ALARM1_SEC, RTC_NR_TIME, max8997_rtc_start_alarm()
289 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max8997_rtc_start_alarm()
294 ret = max8997_rtc_set_update_reg(info); max8997_rtc_start_alarm()
300 struct max8997_rtc_info *info = dev_get_drvdata(dev); max8997_rtc_set_alarm() local
308 dev_info(info->dev, "%s: %d-%02d-%02d %02d:%02d:%02d\n", __func__, max8997_rtc_set_alarm()
312 mutex_lock(&info->lock); max8997_rtc_set_alarm()
314 ret = max8997_rtc_stop_alarm(info); max8997_rtc_set_alarm()
318 ret = max8997_bulk_write(info->rtc, MAX8997_RTC_ALARM1_SEC, RTC_NR_TIME, max8997_rtc_set_alarm()
321 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max8997_rtc_set_alarm()
326 ret = max8997_rtc_set_update_reg(info); max8997_rtc_set_alarm()
331 ret = max8997_rtc_start_alarm(info); max8997_rtc_set_alarm()
333 mutex_unlock(&info->lock); max8997_rtc_set_alarm()
340 struct max8997_rtc_info *info = dev_get_drvdata(dev); max8997_rtc_alarm_irq_enable() local
343 mutex_lock(&info->lock); max8997_rtc_alarm_irq_enable()
345 ret = max8997_rtc_start_alarm(info); max8997_rtc_alarm_irq_enable()
347 ret = max8997_rtc_stop_alarm(info); max8997_rtc_alarm_irq_enable()
348 mutex_unlock(&info->lock); max8997_rtc_alarm_irq_enable()
355 struct max8997_rtc_info *info = data; max8997_rtc_alarm_irq() local
357 dev_info(info->dev, "%s:irq(%d)\n", __func__, irq); max8997_rtc_alarm_irq()
359 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); max8997_rtc_alarm_irq()
372 static void max8997_rtc_enable_wtsr(struct max8997_rtc_info *info, bool enable) max8997_rtc_enable_wtsr() argument
387 dev_info(info->dev, "%s: %s WTSR\n", __func__, max8997_rtc_enable_wtsr()
390 ret = max8997_update_reg(info->rtc, MAX8997_RTC_WTSR_SMPL, val, mask); max8997_rtc_enable_wtsr()
392 dev_err(info->dev, "%s: fail to update WTSR reg(%d)\n", max8997_rtc_enable_wtsr()
397 max8997_rtc_set_update_reg(info); max8997_rtc_enable_wtsr()
400 static void max8997_rtc_enable_smpl(struct max8997_rtc_info *info, bool enable) max8997_rtc_enable_smpl() argument
415 dev_info(info->dev, "%s: %s SMPL\n", __func__, max8997_rtc_enable_smpl()
418 ret = max8997_update_reg(info->rtc, MAX8997_RTC_WTSR_SMPL, val, mask); max8997_rtc_enable_smpl()
420 dev_err(info->dev, "%s: fail to update SMPL reg(%d)\n", max8997_rtc_enable_smpl()
425 max8997_rtc_set_update_reg(info); max8997_rtc_enable_smpl()
428 max8997_read_reg(info->rtc, MAX8997_RTC_WTSR_SMPL, &val); max8997_rtc_enable_smpl()
432 static int max8997_rtc_init_reg(struct max8997_rtc_info *info) max8997_rtc_init_reg() argument
441 info->rtc_24hr_mode = 1; max8997_rtc_init_reg()
443 ret = max8997_bulk_write(info->rtc, MAX8997_RTC_CTRLMASK, 2, data); max8997_rtc_init_reg()
445 dev_err(info->dev, "%s: fail to write controlm reg(%d)\n", max8997_rtc_init_reg()
450 ret = max8997_rtc_set_update_reg(info); max8997_rtc_init_reg()
457 struct max8997_rtc_info *info; max8997_rtc_probe() local
460 info = devm_kzalloc(&pdev->dev, sizeof(struct max8997_rtc_info), max8997_rtc_probe()
462 if (!info) max8997_rtc_probe()
465 mutex_init(&info->lock); max8997_rtc_probe()
466 info->dev = &pdev->dev; max8997_rtc_probe()
467 info->max8997 = max8997; max8997_rtc_probe()
468 info->rtc = max8997->rtc; max8997_rtc_probe()
470 platform_set_drvdata(pdev, info); max8997_rtc_probe()
472 ret = max8997_rtc_init_reg(info); max8997_rtc_probe()
479 max8997_rtc_enable_wtsr(info, true); max8997_rtc_probe()
480 max8997_rtc_enable_smpl(info, true); max8997_rtc_probe()
484 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max8997-rtc", max8997_rtc_probe()
487 if (IS_ERR(info->rtc_dev)) { max8997_rtc_probe()
488 ret = PTR_ERR(info->rtc_dev); max8997_rtc_probe()
499 info->virq = virq; max8997_rtc_probe()
503 "rtc-alarm0", info); max8997_rtc_probe()
506 info->virq, ret); max8997_rtc_probe()
514 struct max8997_rtc_info *info = platform_get_drvdata(pdev); max8997_rtc_shutdown() local
516 max8997_rtc_enable_wtsr(info, false); max8997_rtc_shutdown()
517 max8997_rtc_enable_smpl(info, false); max8997_rtc_shutdown()
H A Drtc-max77686.c115 static int max77686_rtc_update(struct max77686_rtc_info *info, max77686_rtc_update() argument
126 ret = regmap_update_bits(info->max77686->rtc_regmap, max77686_rtc_update()
129 dev_err(info->dev, "%s: fail to write update reg(ret=%d, data=0x%x)\n", max77686_rtc_update()
141 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_read_time() local
145 mutex_lock(&info->lock); max77686_rtc_read_time()
147 ret = max77686_rtc_update(info, MAX77686_RTC_READ); max77686_rtc_read_time()
151 ret = regmap_bulk_read(info->max77686->rtc_regmap, max77686_rtc_read_time()
154 dev_err(info->dev, "%s: fail to read time reg(%d)\n", __func__, ret); max77686_rtc_read_time()
158 max77686_rtc_data_to_tm(data, tm, info->rtc_24hr_mode); max77686_rtc_read_time()
163 mutex_unlock(&info->lock); max77686_rtc_read_time()
169 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_set_time() local
177 mutex_lock(&info->lock); max77686_rtc_set_time()
179 ret = regmap_bulk_write(info->max77686->rtc_regmap, max77686_rtc_set_time()
182 dev_err(info->dev, "%s: fail to write time reg(%d)\n", __func__, max77686_rtc_set_time()
187 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); max77686_rtc_set_time()
190 mutex_unlock(&info->lock); max77686_rtc_set_time()
196 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_read_alarm() local
201 mutex_lock(&info->lock); max77686_rtc_read_alarm()
203 ret = max77686_rtc_update(info, MAX77686_RTC_READ); max77686_rtc_read_alarm()
207 ret = regmap_bulk_read(info->max77686->rtc_regmap, max77686_rtc_read_alarm()
210 dev_err(info->dev, "%s:%d fail to read alarm reg(%d)\n", max77686_rtc_read_alarm()
215 max77686_rtc_data_to_tm(data, &alrm->time, info->rtc_24hr_mode); max77686_rtc_read_alarm()
226 ret = regmap_read(info->max77686->regmap, MAX77686_REG_STATUS2, &val); max77686_rtc_read_alarm()
228 dev_err(info->dev, "%s:%d fail to read status2 reg(%d)\n", max77686_rtc_read_alarm()
237 mutex_unlock(&info->lock); max77686_rtc_read_alarm()
241 static int max77686_rtc_stop_alarm(struct max77686_rtc_info *info) max77686_rtc_stop_alarm() argument
247 if (!mutex_is_locked(&info->lock)) max77686_rtc_stop_alarm()
248 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); max77686_rtc_stop_alarm()
250 ret = max77686_rtc_update(info, MAX77686_RTC_READ); max77686_rtc_stop_alarm()
254 ret = regmap_bulk_read(info->max77686->rtc_regmap, max77686_rtc_stop_alarm()
257 dev_err(info->dev, "%s: fail to read alarm reg(%d)\n", max77686_rtc_stop_alarm()
262 max77686_rtc_data_to_tm(data, &tm, info->rtc_24hr_mode); max77686_rtc_stop_alarm()
267 ret = regmap_bulk_write(info->max77686->rtc_regmap, max77686_rtc_stop_alarm()
270 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max77686_rtc_stop_alarm()
275 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); max77686_rtc_stop_alarm()
280 static int max77686_rtc_start_alarm(struct max77686_rtc_info *info) max77686_rtc_start_alarm() argument
286 if (!mutex_is_locked(&info->lock)) max77686_rtc_start_alarm()
287 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); max77686_rtc_start_alarm()
289 ret = max77686_rtc_update(info, MAX77686_RTC_READ); max77686_rtc_start_alarm()
293 ret = regmap_bulk_read(info->max77686->rtc_regmap, max77686_rtc_start_alarm()
296 dev_err(info->dev, "%s: fail to read alarm reg(%d)\n", max77686_rtc_start_alarm()
301 max77686_rtc_data_to_tm(data, &tm, info->rtc_24hr_mode); max77686_rtc_start_alarm()
314 ret = regmap_bulk_write(info->max77686->rtc_regmap, max77686_rtc_start_alarm()
317 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max77686_rtc_start_alarm()
322 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); max77686_rtc_start_alarm()
329 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_set_alarm() local
337 mutex_lock(&info->lock); max77686_rtc_set_alarm()
339 ret = max77686_rtc_stop_alarm(info); max77686_rtc_set_alarm()
343 ret = regmap_bulk_write(info->max77686->rtc_regmap, max77686_rtc_set_alarm()
347 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max77686_rtc_set_alarm()
352 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); max77686_rtc_set_alarm()
357 ret = max77686_rtc_start_alarm(info); max77686_rtc_set_alarm()
359 mutex_unlock(&info->lock); max77686_rtc_set_alarm()
366 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_alarm_irq_enable() local
369 mutex_lock(&info->lock); max77686_rtc_alarm_irq_enable()
371 ret = max77686_rtc_start_alarm(info); max77686_rtc_alarm_irq_enable()
373 ret = max77686_rtc_stop_alarm(info); max77686_rtc_alarm_irq_enable()
374 mutex_unlock(&info->lock); max77686_rtc_alarm_irq_enable()
381 struct max77686_rtc_info *info = data; max77686_rtc_alarm_irq() local
383 dev_info(info->dev, "%s:irq(%d)\n", __func__, irq); max77686_rtc_alarm_irq()
385 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); max77686_rtc_alarm_irq()
398 static int max77686_rtc_init_reg(struct max77686_rtc_info *info) max77686_rtc_init_reg() argument
407 info->rtc_24hr_mode = 1; max77686_rtc_init_reg()
409 ret = regmap_bulk_write(info->max77686->rtc_regmap, MAX77686_RTC_CONTROLM, data, 2); max77686_rtc_init_reg()
411 dev_err(info->dev, "%s: fail to write controlm reg(%d)\n", max77686_rtc_init_reg()
416 ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); max77686_rtc_init_reg()
423 struct max77686_rtc_info *info; max77686_rtc_probe() local
428 info = devm_kzalloc(&pdev->dev, sizeof(struct max77686_rtc_info), max77686_rtc_probe()
430 if (!info) max77686_rtc_probe()
433 mutex_init(&info->lock); max77686_rtc_probe()
434 info->dev = &pdev->dev; max77686_rtc_probe()
435 info->max77686 = max77686; max77686_rtc_probe()
436 info->rtc = max77686->rtc; max77686_rtc_probe()
438 platform_set_drvdata(pdev, info); max77686_rtc_probe()
440 ret = max77686_rtc_init_reg(info); max77686_rtc_probe()
449 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max77686-rtc", max77686_rtc_probe()
452 if (IS_ERR(info->rtc_dev)) { max77686_rtc_probe()
453 ret = PTR_ERR(info->rtc_dev); max77686_rtc_probe()
466 info->virq = regmap_irq_get_virq(max77686->rtc_irq_data, max77686_rtc_probe()
468 if (!info->virq) { max77686_rtc_probe()
473 ret = devm_request_threaded_irq(&pdev->dev, info->virq, NULL, max77686_rtc_probe()
474 max77686_rtc_alarm_irq, 0, "rtc-alarm1", info); max77686_rtc_probe()
477 info->virq, ret); max77686_rtc_probe()
487 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_suspend() local
489 return enable_irq_wake(info->virq); max77686_rtc_suspend()
498 struct max77686_rtc_info *info = dev_get_drvdata(dev); max77686_rtc_resume() local
500 return disable_irq_wake(info->virq); max77686_rtc_resume()
H A Drtc-max77802.c114 static int max77802_rtc_update(struct max77802_rtc_info *info, max77802_rtc_update() argument
125 ret = regmap_update_bits(info->max77802->regmap, max77802_rtc_update()
128 dev_err(info->dev, "%s: fail to write update reg(ret=%d, data=0x%x)\n", max77802_rtc_update()
141 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_read_time() local
145 mutex_lock(&info->lock); max77802_rtc_read_time()
147 ret = max77802_rtc_update(info, MAX77802_RTC_READ); max77802_rtc_read_time()
151 ret = regmap_bulk_read(info->max77802->regmap, max77802_rtc_read_time()
154 dev_err(info->dev, "%s: fail to read time reg(%d)\n", __func__, max77802_rtc_read_time()
159 max77802_rtc_data_to_tm(data, tm, info->rtc_24hr_mode); max77802_rtc_read_time()
164 mutex_unlock(&info->lock); max77802_rtc_read_time()
170 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_set_time() local
178 mutex_lock(&info->lock); max77802_rtc_set_time()
180 ret = regmap_bulk_write(info->max77802->regmap, max77802_rtc_set_time()
183 dev_err(info->dev, "%s: fail to write time reg(%d)\n", __func__, max77802_rtc_set_time()
188 ret = max77802_rtc_update(info, MAX77802_RTC_WRITE); max77802_rtc_set_time()
191 mutex_unlock(&info->lock); max77802_rtc_set_time()
197 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_read_alarm() local
202 mutex_lock(&info->lock); max77802_rtc_read_alarm()
204 ret = max77802_rtc_update(info, MAX77802_RTC_READ); max77802_rtc_read_alarm()
208 ret = regmap_bulk_read(info->max77802->regmap, max77802_rtc_read_alarm()
211 dev_err(info->dev, "%s:%d fail to read alarm reg(%d)\n", max77802_rtc_read_alarm()
216 max77802_rtc_data_to_tm(data, &alrm->time, info->rtc_24hr_mode); max77802_rtc_read_alarm()
219 ret = regmap_read(info->max77802->regmap, max77802_rtc_read_alarm()
222 dev_err(info->dev, "%s:%d fail to read alarm enable(%d)\n", max77802_rtc_read_alarm()
230 ret = regmap_read(info->max77802->regmap, MAX77802_REG_STATUS2, &val); max77802_rtc_read_alarm()
232 dev_err(info->dev, "%s:%d fail to read status2 reg(%d)\n", max77802_rtc_read_alarm()
241 mutex_unlock(&info->lock); max77802_rtc_read_alarm()
245 static int max77802_rtc_stop_alarm(struct max77802_rtc_info *info) max77802_rtc_stop_alarm() argument
249 if (!mutex_is_locked(&info->lock)) max77802_rtc_stop_alarm()
250 dev_warn(info->dev, "%s: should have mutex locked\n", __func__); max77802_rtc_stop_alarm()
252 ret = max77802_rtc_update(info, MAX77802_RTC_READ); max77802_rtc_stop_alarm()
256 ret = regmap_write(info->max77802->regmap, max77802_rtc_stop_alarm()
259 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max77802_rtc_stop_alarm()
264 ret = max77802_rtc_update(info, MAX77802_RTC_WRITE); max77802_rtc_stop_alarm()
269 static int max77802_rtc_start_alarm(struct max77802_rtc_info *info) max77802_rtc_start_alarm() argument
273 if (!mutex_is_locked(&info->lock)) max77802_rtc_start_alarm()
274 dev_warn(info->dev, "%s: should have mutex locked\n", max77802_rtc_start_alarm()
277 ret = max77802_rtc_update(info, MAX77802_RTC_READ); max77802_rtc_start_alarm()
281 ret = regmap_write(info->max77802->regmap, max77802_rtc_start_alarm()
286 dev_err(info->dev, "%s: fail to read alarm reg(%d)\n", max77802_rtc_start_alarm()
291 ret = max77802_rtc_update(info, MAX77802_RTC_WRITE); max77802_rtc_start_alarm()
298 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_set_alarm() local
306 mutex_lock(&info->lock); max77802_rtc_set_alarm()
308 ret = max77802_rtc_stop_alarm(info); max77802_rtc_set_alarm()
312 ret = regmap_bulk_write(info->max77802->regmap, max77802_rtc_set_alarm()
316 dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", max77802_rtc_set_alarm()
321 ret = max77802_rtc_update(info, MAX77802_RTC_WRITE); max77802_rtc_set_alarm()
326 ret = max77802_rtc_start_alarm(info); max77802_rtc_set_alarm()
328 mutex_unlock(&info->lock); max77802_rtc_set_alarm()
335 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_alarm_irq_enable() local
338 mutex_lock(&info->lock); max77802_rtc_alarm_irq_enable()
340 ret = max77802_rtc_start_alarm(info); max77802_rtc_alarm_irq_enable()
342 ret = max77802_rtc_stop_alarm(info); max77802_rtc_alarm_irq_enable()
343 mutex_unlock(&info->lock); max77802_rtc_alarm_irq_enable()
350 struct max77802_rtc_info *info = data; max77802_rtc_alarm_irq() local
352 dev_dbg(info->dev, "%s:irq(%d)\n", __func__, irq); max77802_rtc_alarm_irq()
354 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); max77802_rtc_alarm_irq()
367 static int max77802_rtc_init_reg(struct max77802_rtc_info *info) max77802_rtc_init_reg() argument
372 max77802_rtc_update(info, MAX77802_RTC_READ); max77802_rtc_init_reg()
378 info->rtc_24hr_mode = 1; max77802_rtc_init_reg()
380 ret = regmap_bulk_write(info->max77802->regmap, max77802_rtc_init_reg()
383 dev_err(info->dev, "%s: fail to write controlm reg(%d)\n", max77802_rtc_init_reg()
388 ret = max77802_rtc_update(info, MAX77802_RTC_WRITE); max77802_rtc_init_reg()
395 struct max77802_rtc_info *info; max77802_rtc_probe() local
400 info = devm_kzalloc(&pdev->dev, sizeof(struct max77802_rtc_info), max77802_rtc_probe()
402 if (!info) max77802_rtc_probe()
405 mutex_init(&info->lock); max77802_rtc_probe()
406 info->dev = &pdev->dev; max77802_rtc_probe()
407 info->max77802 = max77802; max77802_rtc_probe()
408 info->rtc = max77802->i2c; max77802_rtc_probe()
410 platform_set_drvdata(pdev, info); max77802_rtc_probe()
412 ret = max77802_rtc_init_reg(info); max77802_rtc_probe()
421 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max77802-rtc", max77802_rtc_probe()
424 if (IS_ERR(info->rtc_dev)) { max77802_rtc_probe()
425 ret = PTR_ERR(info->rtc_dev); max77802_rtc_probe()
437 info->virq = regmap_irq_get_virq(max77802->rtc_irq_data, max77802_rtc_probe()
440 if (info->virq <= 0) { max77802_rtc_probe()
446 ret = devm_request_threaded_irq(&pdev->dev, info->virq, NULL, max77802_rtc_probe()
448 info); max77802_rtc_probe()
451 info->virq, ret); max77802_rtc_probe()
460 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_suspend() local
462 return enable_irq_wake(info->virq); max77802_rtc_suspend()
471 struct max77802_rtc_info *info = dev_get_drvdata(dev); max77802_rtc_resume() local
473 return disable_irq_wake(info->virq); max77802_rtc_resume()
H A Drtc-s5m.c163 static inline int s5m8767_wait_for_udr_update(struct s5m_rtc_info *info) s5m8767_wait_for_udr_update() argument
169 ret = regmap_read(info->regmap, info->regs->rtc_udr_update, s5m8767_wait_for_udr_update()
171 } while (--retry && (data & info->regs->rtc_udr_mask) && !ret); s5m8767_wait_for_udr_update()
174 dev_err(info->dev, "waiting for UDR update, reached max number of retries\n"); s5m8767_wait_for_udr_update()
179 static inline int s5m_check_peding_alarm_interrupt(struct s5m_rtc_info *info, s5m_check_peding_alarm_interrupt() argument
185 switch (info->device_type) { s5m_check_peding_alarm_interrupt()
188 ret = regmap_read(info->regmap, S5M_RTC_STATUS, &val); s5m_check_peding_alarm_interrupt()
193 ret = regmap_read(info->s5m87xx->regmap_pmic, S2MPS14_REG_ST2, s5m_check_peding_alarm_interrupt()
211 static inline int s5m8767_rtc_set_time_reg(struct s5m_rtc_info *info) s5m8767_rtc_set_time_reg() argument
216 ret = regmap_read(info->regmap, info->regs->rtc_udr_update, &data); s5m8767_rtc_set_time_reg()
218 dev_err(info->dev, "failed to read update reg(%d)\n", ret); s5m8767_rtc_set_time_reg()
222 data |= info->regs->rtc_udr_mask; s5m8767_rtc_set_time_reg()
223 if (info->device_type == S5M8763X || info->device_type == S5M8767X) s5m8767_rtc_set_time_reg()
226 ret = regmap_write(info->regmap, info->regs->rtc_udr_update, data); s5m8767_rtc_set_time_reg()
228 dev_err(info->dev, "failed to write update reg(%d)\n", ret); s5m8767_rtc_set_time_reg()
232 ret = s5m8767_wait_for_udr_update(info); s5m8767_rtc_set_time_reg()
237 static inline int s5m8767_rtc_set_alarm_reg(struct s5m_rtc_info *info) s5m8767_rtc_set_alarm_reg() argument
242 ret = regmap_read(info->regmap, info->regs->rtc_udr_update, &data); s5m8767_rtc_set_alarm_reg()
244 dev_err(info->dev, "%s: fail to read update reg(%d)\n", s5m8767_rtc_set_alarm_reg()
249 data |= info->regs->rtc_udr_mask; s5m8767_rtc_set_alarm_reg()
250 switch (info->device_type) { s5m8767_rtc_set_alarm_reg()
265 ret = regmap_write(info->regmap, info->regs->rtc_udr_update, data); s5m8767_rtc_set_alarm_reg()
267 dev_err(info->dev, "%s: fail to write update reg(%d)\n", s5m8767_rtc_set_alarm_reg()
272 ret = s5m8767_wait_for_udr_update(info); s5m8767_rtc_set_alarm_reg()
275 if (info->device_type == S2MPS13X) s5m8767_rtc_set_alarm_reg()
276 regmap_update_bits(info->regmap, info->regs->rtc_udr_update, s5m8767_rtc_set_alarm_reg()
316 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_read_time() local
317 u8 data[info->regs->regs_count]; s5m_rtc_read_time()
320 if (info->device_type == S2MPS14X || info->device_type == S2MPS13X) { s5m_rtc_read_time()
321 ret = regmap_update_bits(info->regmap, s5m_rtc_read_time()
322 info->regs->rtc_udr_update, s5m_rtc_read_time()
331 ret = regmap_bulk_read(info->regmap, info->regs->time, data, s5m_rtc_read_time()
332 info->regs->regs_count); s5m_rtc_read_time()
336 switch (info->device_type) { s5m_rtc_read_time()
344 s5m8767_data_to_tm(data, tm, info->rtc_24hr_mode); s5m_rtc_read_time()
360 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_set_time() local
361 u8 data[info->regs->regs_count]; s5m_rtc_set_time()
364 switch (info->device_type) { s5m_rtc_set_time()
384 ret = regmap_raw_write(info->regmap, info->regs->time, data, s5m_rtc_set_time()
385 info->regs->regs_count); s5m_rtc_set_time()
389 ret = s5m8767_rtc_set_time_reg(info); s5m_rtc_set_time()
396 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_read_alarm() local
397 u8 data[info->regs->regs_count]; s5m_rtc_read_alarm()
401 ret = regmap_bulk_read(info->regmap, info->regs->alarm0, data, s5m_rtc_read_alarm()
402 info->regs->regs_count); s5m_rtc_read_alarm()
406 switch (info->device_type) { s5m_rtc_read_alarm()
409 ret = regmap_read(info->regmap, S5M_ALARM0_CONF, &val); s5m_rtc_read_alarm()
419 s5m8767_data_to_tm(data, &alrm->time, info->rtc_24hr_mode); s5m_rtc_read_alarm()
421 for (i = 0; i < info->regs->regs_count; i++) { s5m_rtc_read_alarm()
439 ret = s5m_check_peding_alarm_interrupt(info, alrm); s5m_rtc_read_alarm()
444 static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info) s5m_rtc_stop_alarm() argument
446 u8 data[info->regs->regs_count]; s5m_rtc_stop_alarm()
450 ret = regmap_bulk_read(info->regmap, info->regs->alarm0, data, s5m_rtc_stop_alarm()
451 info->regs->regs_count); s5m_rtc_stop_alarm()
455 s5m8767_data_to_tm(data, &tm, info->rtc_24hr_mode); s5m_rtc_stop_alarm()
456 dev_dbg(info->dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__, s5m_rtc_stop_alarm()
460 switch (info->device_type) { s5m_rtc_stop_alarm()
462 ret = regmap_write(info->regmap, S5M_ALARM0_CONF, 0); s5m_rtc_stop_alarm()
468 for (i = 0; i < info->regs->regs_count; i++) s5m_rtc_stop_alarm()
471 ret = regmap_raw_write(info->regmap, info->regs->alarm0, data, s5m_rtc_stop_alarm()
472 info->regs->regs_count); s5m_rtc_stop_alarm()
476 ret = s5m8767_rtc_set_alarm_reg(info); s5m_rtc_stop_alarm()
487 static int s5m_rtc_start_alarm(struct s5m_rtc_info *info) s5m_rtc_start_alarm() argument
490 u8 data[info->regs->regs_count]; s5m_rtc_start_alarm()
494 ret = regmap_bulk_read(info->regmap, info->regs->alarm0, data, s5m_rtc_start_alarm()
495 info->regs->regs_count); s5m_rtc_start_alarm()
499 s5m8767_data_to_tm(data, &tm, info->rtc_24hr_mode); s5m_rtc_start_alarm()
500 dev_dbg(info->dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__, s5m_rtc_start_alarm()
504 switch (info->device_type) { s5m_rtc_start_alarm()
507 ret = regmap_write(info->regmap, S5M_ALARM0_CONF, alarm0_conf); s5m_rtc_start_alarm()
524 ret = regmap_raw_write(info->regmap, info->regs->alarm0, data, s5m_rtc_start_alarm()
525 info->regs->regs_count); s5m_rtc_start_alarm()
528 ret = s5m8767_rtc_set_alarm_reg(info); s5m_rtc_start_alarm()
541 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_set_alarm() local
542 u8 data[info->regs->regs_count]; s5m_rtc_set_alarm()
545 switch (info->device_type) { s5m_rtc_set_alarm()
565 ret = s5m_rtc_stop_alarm(info); s5m_rtc_set_alarm()
569 ret = regmap_raw_write(info->regmap, info->regs->alarm0, data, s5m_rtc_set_alarm()
570 info->regs->regs_count); s5m_rtc_set_alarm()
574 ret = s5m8767_rtc_set_alarm_reg(info); s5m_rtc_set_alarm()
579 ret = s5m_rtc_start_alarm(info); s5m_rtc_set_alarm()
587 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_alarm_irq_enable() local
590 return s5m_rtc_start_alarm(info); s5m_rtc_alarm_irq_enable()
592 return s5m_rtc_stop_alarm(info); s5m_rtc_alarm_irq_enable()
597 struct s5m_rtc_info *info = data; s5m_rtc_alarm_irq() local
599 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); s5m_rtc_alarm_irq()
612 static int s5m8767_rtc_init_reg(struct s5m_rtc_info *info) s5m8767_rtc_init_reg() argument
617 switch (info->device_type) { s5m8767_rtc_init_reg()
621 ret = regmap_update_bits(info->regmap, S5M_RTC_UDR_CON, s5m8767_rtc_init_reg()
624 dev_err(info->dev, "%s: fail to change UDR time: %d\n", s5m8767_rtc_init_reg()
631 ret = regmap_raw_write(info->regmap, S5M_ALARM0_CONF, data, 2); s5m8767_rtc_init_reg()
637 ret = regmap_write(info->regmap, info->regs->ctrl, data[0]); s5m8767_rtc_init_reg()
647 ret = s5m8767_rtc_set_alarm_reg(info); s5m8767_rtc_init_reg()
654 info->rtc_24hr_mode = 1; s5m8767_rtc_init_reg()
656 dev_err(info->dev, "%s: fail to write controlm reg(%d)\n", s5m8767_rtc_init_reg()
668 struct s5m_rtc_info *info; s5m_rtc_probe() local
677 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); s5m_rtc_probe()
678 if (!info) s5m_rtc_probe()
685 info->regs = &s2mps_rtc_regs; s5m_rtc_probe()
690 info->regs = &s5m_rtc_regs; s5m_rtc_probe()
695 info->regs = &s5m_rtc_regs; s5m_rtc_probe()
705 info->i2c = i2c_new_dummy(s5m87xx->i2c->adapter, RTC_I2C_ADDR); s5m_rtc_probe()
706 if (!info->i2c) { s5m_rtc_probe()
711 info->regmap = devm_regmap_init_i2c(info->i2c, regmap_cfg); s5m_rtc_probe()
712 if (IS_ERR(info->regmap)) { s5m_rtc_probe()
713 ret = PTR_ERR(info->regmap); s5m_rtc_probe()
719 info->dev = &pdev->dev; s5m_rtc_probe()
720 info->s5m87xx = s5m87xx; s5m_rtc_probe()
721 info->device_type = platform_get_device_id(pdev)->driver_data; s5m_rtc_probe()
724 info->irq = regmap_irq_get_virq(s5m87xx->irq_data, alarm_irq); s5m_rtc_probe()
725 if (info->irq <= 0) { s5m_rtc_probe()
733 platform_set_drvdata(pdev, info); s5m_rtc_probe()
735 ret = s5m8767_rtc_init_reg(info); s5m_rtc_probe()
739 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "s5m-rtc", s5m_rtc_probe()
742 if (IS_ERR(info->rtc_dev)) { s5m_rtc_probe()
743 ret = PTR_ERR(info->rtc_dev); s5m_rtc_probe()
747 if (!info->irq) { s5m_rtc_probe()
752 ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, s5m_rtc_probe()
754 info); s5m_rtc_probe()
757 info->irq, ret); s5m_rtc_probe()
764 i2c_unregister_device(info->i2c); s5m_rtc_probe()
771 struct s5m_rtc_info *info = platform_get_drvdata(pdev); s5m_rtc_remove() local
773 i2c_unregister_device(info->i2c); s5m_rtc_remove()
781 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_resume() local
784 if (info->irq && device_may_wakeup(dev)) s5m_rtc_resume()
785 ret = disable_irq_wake(info->irq); s5m_rtc_resume()
792 struct s5m_rtc_info *info = dev_get_drvdata(dev); s5m_rtc_suspend() local
795 if (info->irq && device_may_wakeup(dev)) s5m_rtc_suspend()
796 ret = enable_irq_wake(info->irq); s5m_rtc_suspend()
H A Drtc-88pm860x.c62 struct pm860x_rtc_info *info = (struct pm860x_rtc_info *)data; rtc_update_handler() local
66 pm860x_set_bits(info->i2c, PM8607_RTC1, mask | ALARM_EN, mask); rtc_update_handler()
67 rtc_update_irq(info->rtc_dev, 1, RTC_AF); rtc_update_handler()
73 struct pm860x_rtc_info *info = dev_get_drvdata(dev); pm860x_rtc_alarm_irq_enable() local
76 pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, ALARM_EN); pm860x_rtc_alarm_irq_enable()
78 pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, 0); pm860x_rtc_alarm_irq_enable()
111 struct pm860x_rtc_info *info = dev_get_drvdata(dev); pm860x_rtc_read_time() local
115 pm860x_page_bulk_read(info->i2c, REG0_ADDR, 8, buf); pm860x_rtc_read_time()
116 dev_dbg(info->dev, "%x-%x-%x-%x-%x-%x-%x-%x\n", buf[0], buf[1], pm860x_rtc_read_time()
121 pm860x_bulk_read(info->i2c, PM8607_RTC_COUNTER1, 4, buf); pm860x_rtc_read_time()
124 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm860x_rtc_read_time()
134 struct pm860x_rtc_info *info = dev_get_drvdata(dev); pm860x_rtc_set_time() local
139 dev_dbg(info->dev, "Set time %d out of range. " pm860x_rtc_set_time()
147 pm860x_bulk_read(info->i2c, PM8607_RTC_COUNTER1, 4, buf); pm860x_rtc_set_time()
150 dev_dbg(info->dev, "set base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm860x_rtc_set_time()
153 pm860x_page_reg_write(info->i2c, REG0_DATA, (base >> 24) & 0xFF); pm860x_rtc_set_time()
154 pm860x_page_reg_write(info->i2c, REG1_DATA, (base >> 16) & 0xFF); pm860x_rtc_set_time()
155 pm860x_page_reg_write(info->i2c, REG2_DATA, (base >> 8) & 0xFF); pm860x_rtc_set_time()
156 pm860x_page_reg_write(info->i2c, REG3_DATA, base & 0xFF); pm860x_rtc_set_time()
158 if (info->sync) pm860x_rtc_set_time()
159 info->sync(ticks); pm860x_rtc_set_time()
165 struct pm860x_rtc_info *info = dev_get_drvdata(dev); pm860x_rtc_read_alarm() local
170 pm860x_page_bulk_read(info->i2c, REG0_ADDR, 8, buf); pm860x_rtc_read_alarm()
171 dev_dbg(info->dev, "%x-%x-%x-%x-%x-%x-%x-%x\n", buf[0], buf[1], pm860x_rtc_read_alarm()
175 pm860x_bulk_read(info->i2c, PM8607_RTC_EXPIRE1, 4, buf); pm860x_rtc_read_alarm()
178 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm860x_rtc_read_alarm()
182 ret = pm860x_reg_read(info->i2c, PM8607_RTC1); pm860x_rtc_read_alarm()
190 struct pm860x_rtc_info *info = dev_get_drvdata(dev); pm860x_rtc_set_alarm() local
196 pm860x_set_bits(info->i2c, PM8607_RTC1, ALARM_EN, 0); pm860x_rtc_set_alarm()
198 pm860x_page_bulk_read(info->i2c, REG0_ADDR, 8, buf); pm860x_rtc_set_alarm()
199 dev_dbg(info->dev, "%x-%x-%x-%x-%x-%x-%x-%x\n", buf[0], buf[1], pm860x_rtc_set_alarm()
204 pm860x_bulk_read(info->i2c, PM8607_RTC_COUNTER1, 4, buf); pm860x_rtc_set_alarm()
207 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm860x_rtc_set_alarm()
220 pm860x_bulk_write(info->i2c, PM8607_RTC_EXPIRE1, 4, buf); pm860x_rtc_set_alarm()
223 pm860x_set_bits(info->i2c, PM8607_RTC1, mask, mask); pm860x_rtc_set_alarm()
226 pm860x_set_bits(info->i2c, PM8607_RTC1, mask, pm860x_rtc_set_alarm()
243 struct pm860x_rtc_info *info = container_of(work, calibrate_vrtc_work() local
251 pm860x_bulk_read(info->i2c, REG_VRTC_MEAS1, 2, buf); calibrate_vrtc_work()
257 vrtc_set = 2700 + (info->vrtc & 0x3) * 200; calibrate_vrtc_work()
258 dev_dbg(info->dev, "mean:%d, vrtc_set:%d\n", mean, vrtc_set); calibrate_vrtc_work()
260 sum = pm860x_reg_read(info->i2c, PM8607_RTC_MISC1); calibrate_vrtc_work()
267 pm860x_reg_write(info->i2c, PM8607_RTC_MISC1, data); calibrate_vrtc_work()
273 pm860x_reg_write(info->i2c, PM8607_RTC_MISC1, data); calibrate_vrtc_work()
276 dev_dbg(info->dev, "set 0x%x to RTC_MISC1\n", data); calibrate_vrtc_work()
278 schedule_delayed_work(&info->calib_work, VRTC_CALIB_INTERVAL); calibrate_vrtc_work()
282 pm860x_set_bits(info->i2c, PM8607_MEAS_EN2, MEAS2_VRTC, 0); calibrate_vrtc_work()
283 dev_dbg(info->dev, "finish VRTC calibration\n"); calibrate_vrtc_work()
290 struct pm860x_rtc_info *info) pm860x_rtc_dt_init()
301 ret = of_property_read_u32(np, "marvell,88pm860x-vrtc", &info->vrtc); pm860x_rtc_dt_init()
303 info->vrtc = 0; pm860x_rtc_dt_init()
315 struct pm860x_rtc_info *info; pm860x_rtc_probe() local
322 info = devm_kzalloc(&pdev->dev, sizeof(struct pm860x_rtc_info), pm860x_rtc_probe()
324 if (!info) pm860x_rtc_probe()
326 info->irq = platform_get_irq(pdev, 0); pm860x_rtc_probe()
327 if (info->irq < 0) { pm860x_rtc_probe()
329 return info->irq; pm860x_rtc_probe()
332 info->chip = chip; pm860x_rtc_probe()
333 info->i2c = (chip->id == CHIP_PM8607) ? chip->client : chip->companion; pm860x_rtc_probe()
334 info->dev = &pdev->dev; pm860x_rtc_probe()
335 dev_set_drvdata(&pdev->dev, info); pm860x_rtc_probe()
337 ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, pm860x_rtc_probe()
339 info); pm860x_rtc_probe()
342 info->irq, ret); pm860x_rtc_probe()
347 pm860x_page_reg_write(info->i2c, REG0_ADDR, REG0_DATA); pm860x_rtc_probe()
348 pm860x_page_reg_write(info->i2c, REG1_ADDR, REG1_DATA); pm860x_rtc_probe()
349 pm860x_page_reg_write(info->i2c, REG2_ADDR, REG2_DATA); pm860x_rtc_probe()
350 pm860x_page_reg_write(info->i2c, REG3_ADDR, REG3_DATA); pm860x_rtc_probe()
371 if (pm860x_rtc_dt_init(pdev, info)) { pm860x_rtc_probe()
374 info->sync = pdata->sync; pm860x_rtc_probe()
378 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "88pm860x-rtc", pm860x_rtc_probe()
380 ret = PTR_ERR(info->rtc_dev); pm860x_rtc_probe()
381 if (IS_ERR(info->rtc_dev)) { pm860x_rtc_probe()
390 pm860x_set_bits(info->i2c, PM8607_RTC1, RTC1_USE_XO, RTC1_USE_XO); pm860x_rtc_probe()
394 if (pm860x_rtc_dt_init(pdev, info)) { pm860x_rtc_probe()
396 info->vrtc = pdata->vrtc & 0x3; pm860x_rtc_probe()
398 info->vrtc = 1; pm860x_rtc_probe()
400 pm860x_set_bits(info->i2c, PM8607_MEAS_EN2, MEAS2_VRTC, MEAS2_VRTC); pm860x_rtc_probe()
403 INIT_DELAYED_WORK(&info->calib_work, calibrate_vrtc_work); pm860x_rtc_probe()
404 schedule_delayed_work(&info->calib_work, VRTC_CALIB_INTERVAL); pm860x_rtc_probe()
414 struct pm860x_rtc_info *info = platform_get_drvdata(pdev); pm860x_rtc_remove() local
419 pm860x_set_bits(info->i2c, PM8607_MEAS_EN2, MEAS2_VRTC, 0); pm860x_rtc_remove()
289 pm860x_rtc_dt_init(struct platform_device *pdev, struct pm860x_rtc_info *info) pm860x_rtc_dt_init() argument
H A Drtc-88pm80x.c63 struct pm80x_rtc_info *info = (struct pm80x_rtc_info *)data; rtc_update_handler() local
67 regmap_update_bits(info->map, PM800_RTC_CONTROL, mask | PM800_ALARM1_EN, rtc_update_handler()
69 rtc_update_irq(info->rtc_dev, 1, RTC_AF); rtc_update_handler()
75 struct pm80x_rtc_info *info = dev_get_drvdata(dev); pm80x_rtc_alarm_irq_enable() local
78 regmap_update_bits(info->map, PM800_RTC_CONTROL, pm80x_rtc_alarm_irq_enable()
81 regmap_update_bits(info->map, PM800_RTC_CONTROL, pm80x_rtc_alarm_irq_enable()
115 struct pm80x_rtc_info *info = dev_get_drvdata(dev); pm80x_rtc_read_time() local
118 regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4); pm80x_rtc_read_time()
120 dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]); pm80x_rtc_read_time()
123 regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4); pm80x_rtc_read_time()
126 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm80x_rtc_read_time()
134 struct pm80x_rtc_info *info = dev_get_drvdata(dev); pm80x_rtc_set_time() local
138 dev_dbg(info->dev, pm80x_rtc_set_time()
146 regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4); pm80x_rtc_set_time()
149 dev_dbg(info->dev, "set base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm80x_rtc_set_time()
155 regmap_raw_write(info->map, PM800_RTC_EXPIRE2_1, buf, 4); pm80x_rtc_set_time()
162 struct pm80x_rtc_info *info = dev_get_drvdata(dev); pm80x_rtc_read_alarm() local
167 regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4); pm80x_rtc_read_alarm()
169 dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]); pm80x_rtc_read_alarm()
171 regmap_raw_read(info->map, PM800_RTC_EXPIRE1_1, buf, 4); pm80x_rtc_read_alarm()
174 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm80x_rtc_read_alarm()
178 regmap_read(info->map, PM800_RTC_CONTROL, &ret); pm80x_rtc_read_alarm()
186 struct pm80x_rtc_info *info = dev_get_drvdata(dev); pm80x_rtc_set_alarm() local
192 regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_ALARM1_EN, 0); pm80x_rtc_set_alarm()
194 regmap_raw_read(info->map, PM800_RTC_EXPIRE2_1, buf, 4); pm80x_rtc_set_alarm()
196 dev_dbg(info->dev, "%x-%x-%x-%x\n", buf[0], buf[1], buf[2], buf[3]); pm80x_rtc_set_alarm()
199 regmap_raw_read(info->map, PM800_RTC_COUNTER1, buf, 4); pm80x_rtc_set_alarm()
202 dev_dbg(info->dev, "get base:0x%lx, RO count:0x%lx, ticks:0x%lx\n", pm80x_rtc_set_alarm()
206 dev_dbg(info->dev, "%s, now time : %lu\n", __func__, ticks); pm80x_rtc_set_alarm()
210 dev_dbg(info->dev, "%s, alarm time: %lu\n", __func__, ticks); pm80x_rtc_set_alarm()
217 regmap_raw_write(info->map, PM800_RTC_EXPIRE1_1, buf, 4); pm80x_rtc_set_alarm()
220 regmap_update_bits(info->map, PM800_RTC_CONTROL, mask, mask); pm80x_rtc_set_alarm()
223 regmap_update_bits(info->map, PM800_RTC_CONTROL, mask, pm80x_rtc_set_alarm()
257 struct pm80x_rtc_info *info; pm80x_rtc_probe() local
266 info = pm80x_rtc_probe()
268 if (!info) pm80x_rtc_probe()
270 info->irq = platform_get_irq(pdev, 0); pm80x_rtc_probe()
271 if (info->irq < 0) { pm80x_rtc_probe()
277 info->chip = chip; pm80x_rtc_probe()
278 info->map = chip->regmap; pm80x_rtc_probe()
279 if (!info->map) { pm80x_rtc_probe()
285 info->dev = &pdev->dev; pm80x_rtc_probe()
286 dev_set_drvdata(&pdev->dev, info); pm80x_rtc_probe()
288 ret = pm80x_request_irq(chip, info->irq, rtc_update_handler, pm80x_rtc_probe()
289 IRQF_ONESHOT, "rtc", info); pm80x_rtc_probe()
292 info->irq, ret); pm80x_rtc_probe()
316 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "88pm80x-rtc", pm80x_rtc_probe()
318 if (IS_ERR(info->rtc_dev)) { pm80x_rtc_probe()
319 ret = PTR_ERR(info->rtc_dev); pm80x_rtc_probe()
327 regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_RTC1_USE_XO, pm80x_rtc_probe()
333 info->rtc_dev->dev.platform_data = &pdata->rtc_wakeup; pm80x_rtc_probe()
340 pm80x_free_irq(chip, info->irq, info); pm80x_rtc_probe()
347 struct pm80x_rtc_info *info = platform_get_drvdata(pdev); pm80x_rtc_remove() local
348 pm80x_free_irq(info->chip, info->irq, info); pm80x_rtc_remove()
H A Drtc-tegra.c71 static inline u32 tegra_rtc_check_busy(struct tegra_rtc_info *info) tegra_rtc_check_busy() argument
73 return readl(info->rtc_base + TEGRA_RTC_REG_BUSY) & 1; tegra_rtc_check_busy()
87 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_wait_while_busy() local
93 while (tegra_rtc_check_busy(info)) { tegra_rtc_wait_while_busy()
109 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_read_time() local
115 spin_lock_irqsave(&info->tegra_rtc_lock, sl_irq_flags); tegra_rtc_read_time()
117 msec = readl(info->rtc_base + TEGRA_RTC_REG_MILLI_SECONDS); tegra_rtc_read_time()
118 sec = readl(info->rtc_base + TEGRA_RTC_REG_SHADOW_SECONDS); tegra_rtc_read_time()
120 spin_unlock_irqrestore(&info->tegra_rtc_lock, sl_irq_flags); tegra_rtc_read_time()
139 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_set_time() local
163 writel(sec, info->rtc_base + TEGRA_RTC_REG_SECONDS); tegra_rtc_set_time()
166 readl(info->rtc_base + TEGRA_RTC_REG_SECONDS)); tegra_rtc_set_time()
173 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_read_alarm() local
177 sec = readl(info->rtc_base + TEGRA_RTC_REG_SECONDS_ALARM0); tegra_rtc_read_alarm()
194 tmp = readl(info->rtc_base + TEGRA_RTC_REG_INTR_STATUS); tegra_rtc_read_alarm()
202 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_alarm_irq_enable() local
207 spin_lock_irqsave(&info->tegra_rtc_lock, sl_irq_flags); tegra_rtc_alarm_irq_enable()
210 status = readl(info->rtc_base + TEGRA_RTC_REG_INTR_MASK); tegra_rtc_alarm_irq_enable()
216 writel(status, info->rtc_base + TEGRA_RTC_REG_INTR_MASK); tegra_rtc_alarm_irq_enable()
218 spin_unlock_irqrestore(&info->tegra_rtc_lock, sl_irq_flags); tegra_rtc_alarm_irq_enable()
225 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_set_alarm() local
234 writel(sec, info->rtc_base + TEGRA_RTC_REG_SECONDS_ALARM0); tegra_rtc_set_alarm()
236 readl(info->rtc_base + TEGRA_RTC_REG_SECONDS_ALARM0)); tegra_rtc_set_alarm()
272 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_irq_handler() local
277 status = readl(info->rtc_base + TEGRA_RTC_REG_INTR_STATUS); tegra_rtc_irq_handler()
281 spin_lock_irqsave(&info->tegra_rtc_lock, sl_irq_flags); tegra_rtc_irq_handler()
282 writel(0, info->rtc_base + TEGRA_RTC_REG_INTR_MASK); tegra_rtc_irq_handler()
283 writel(status, info->rtc_base + TEGRA_RTC_REG_INTR_STATUS); tegra_rtc_irq_handler()
284 spin_unlock_irqrestore(&info->tegra_rtc_lock, sl_irq_flags); tegra_rtc_irq_handler()
295 rtc_update_irq(info->rtc_dev, 1, events); tegra_rtc_irq_handler()
317 struct tegra_rtc_info *info; tegra_rtc_probe() local
321 info = devm_kzalloc(&pdev->dev, sizeof(struct tegra_rtc_info), tegra_rtc_probe()
323 if (!info) tegra_rtc_probe()
327 info->rtc_base = devm_ioremap_resource(&pdev->dev, res); tegra_rtc_probe()
328 if (IS_ERR(info->rtc_base)) tegra_rtc_probe()
329 return PTR_ERR(info->rtc_base); tegra_rtc_probe()
331 info->tegra_rtc_irq = platform_get_irq(pdev, 0); tegra_rtc_probe()
332 if (info->tegra_rtc_irq <= 0) tegra_rtc_probe()
335 /* set context info. */ tegra_rtc_probe()
336 info->pdev = pdev; tegra_rtc_probe()
337 spin_lock_init(&info->tegra_rtc_lock); tegra_rtc_probe()
339 platform_set_drvdata(pdev, info); tegra_rtc_probe()
342 writel(0, info->rtc_base + TEGRA_RTC_REG_SECONDS_ALARM0); tegra_rtc_probe()
343 writel(0xffffffff, info->rtc_base + TEGRA_RTC_REG_INTR_STATUS); tegra_rtc_probe()
344 writel(0, info->rtc_base + TEGRA_RTC_REG_INTR_MASK); tegra_rtc_probe()
348 info->rtc_dev = devm_rtc_device_register(&pdev->dev, tegra_rtc_probe()
351 if (IS_ERR(info->rtc_dev)) { tegra_rtc_probe()
352 ret = PTR_ERR(info->rtc_dev); tegra_rtc_probe()
358 ret = devm_request_irq(&pdev->dev, info->tegra_rtc_irq, tegra_rtc_probe()
376 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_suspend() local
381 writel(0xffffffff, info->rtc_base + TEGRA_RTC_REG_INTR_STATUS); tegra_rtc_suspend()
383 info->rtc_base + TEGRA_RTC_REG_INTR_MASK); tegra_rtc_suspend()
386 readl(info->rtc_base + TEGRA_RTC_REG_SECONDS_ALARM0)); tegra_rtc_suspend()
389 device_may_wakeup(dev), info->tegra_rtc_irq); tegra_rtc_suspend()
393 enable_irq_wake(info->tegra_rtc_irq); tegra_rtc_suspend()
400 struct tegra_rtc_info *info = dev_get_drvdata(dev); tegra_rtc_resume() local
406 disable_irq_wake(info->tegra_rtc_irq); tegra_rtc_resume()
H A Drtc-max8998.c113 struct max8998_rtc_info *info = dev_get_drvdata(dev); max8998_rtc_read_time() local
117 ret = max8998_bulk_read(info->rtc, MAX8998_RTC_SEC, 8, data); max8998_rtc_read_time()
128 struct max8998_rtc_info *info = dev_get_drvdata(dev); max8998_rtc_set_time() local
134 ret = max8998_bulk_write(info->rtc, MAX8998_RTC_SEC, 8, data); max8998_rtc_set_time()
136 if (info->lp3974_bug_workaround) max8998_rtc_set_time()
144 struct max8998_rtc_info *info = dev_get_drvdata(dev); max8998_rtc_read_alarm() local
149 ret = max8998_bulk_read(info->rtc, MAX8998_ALARM0_SEC, 8, data); max8998_rtc_read_alarm()
155 ret = max8998_read_reg(info->rtc, MAX8998_ALARM0_CONF, &val); max8998_rtc_read_alarm()
161 ret = max8998_read_reg(info->rtc, MAX8998_RTC_STATUS, &val); max8998_rtc_read_alarm()
173 static int max8998_rtc_stop_alarm(struct max8998_rtc_info *info) max8998_rtc_stop_alarm() argument
175 int ret = max8998_write_reg(info->rtc, MAX8998_ALARM0_CONF, 0); max8998_rtc_stop_alarm()
177 if (info->lp3974_bug_workaround) max8998_rtc_stop_alarm()
183 static int max8998_rtc_start_alarm(struct max8998_rtc_info *info) max8998_rtc_start_alarm() argument
189 if (info->lp3974_bug_workaround) max8998_rtc_start_alarm()
192 ret = max8998_write_reg(info->rtc, MAX8998_ALARM0_CONF, alarm0_conf); max8998_rtc_start_alarm()
194 if (info->lp3974_bug_workaround) max8998_rtc_start_alarm()
202 struct max8998_rtc_info *info = dev_get_drvdata(dev); max8998_rtc_set_alarm() local
208 ret = max8998_rtc_stop_alarm(info); max8998_rtc_set_alarm()
212 ret = max8998_bulk_write(info->rtc, MAX8998_ALARM0_SEC, 8, data); max8998_rtc_set_alarm()
216 if (info->lp3974_bug_workaround) max8998_rtc_set_alarm()
220 ret = max8998_rtc_start_alarm(info); max8998_rtc_set_alarm()
228 struct max8998_rtc_info *info = dev_get_drvdata(dev); max8998_rtc_alarm_irq_enable() local
231 return max8998_rtc_start_alarm(info); max8998_rtc_alarm_irq_enable()
233 return max8998_rtc_stop_alarm(info); max8998_rtc_alarm_irq_enable()
238 struct max8998_rtc_info *info = data; max8998_rtc_alarm_irq() local
240 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); max8998_rtc_alarm_irq()
257 struct max8998_rtc_info *info; max8998_rtc_probe() local
260 info = devm_kzalloc(&pdev->dev, sizeof(struct max8998_rtc_info), max8998_rtc_probe()
262 if (!info) max8998_rtc_probe()
265 info->dev = &pdev->dev; max8998_rtc_probe()
266 info->max8998 = max8998; max8998_rtc_probe()
267 info->rtc = max8998->rtc; max8998_rtc_probe()
269 platform_set_drvdata(pdev, info); max8998_rtc_probe()
271 info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max8998-rtc", max8998_rtc_probe()
274 if (IS_ERR(info->rtc_dev)) { max8998_rtc_probe()
275 ret = PTR_ERR(info->rtc_dev); max8998_rtc_probe()
283 info->irq = irq_create_mapping(max8998->irq_domain, MAX8998_IRQ_ALARM0); max8998_rtc_probe()
284 if (!info->irq) { max8998_rtc_probe()
289 ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, max8998_rtc_probe()
290 max8998_rtc_alarm_irq, 0, "rtc-alarm0", info); max8998_rtc_probe()
294 info->irq, ret); max8998_rtc_probe()
299 info->lp3974_bug_workaround = true; max8998_rtc_probe()
/linux-4.1.27/net/netfilter/
H A Dxt_rateest.c20 const struct xt_rateest_match_info *info = par->matchinfo; xt_rateest_mt() local
25 spin_lock_bh(&info->est1->lock); xt_rateest_mt()
26 r = &info->est1->rstats; xt_rateest_mt()
27 if (info->flags & XT_RATEEST_MATCH_DELTA) { xt_rateest_mt()
28 bps1 = info->bps1 >= r->bps ? info->bps1 - r->bps : 0; xt_rateest_mt()
29 pps1 = info->pps1 >= r->pps ? info->pps1 - r->pps : 0; xt_rateest_mt()
34 spin_unlock_bh(&info->est1->lock); xt_rateest_mt()
36 if (info->flags & XT_RATEEST_MATCH_ABS) { xt_rateest_mt()
37 bps2 = info->bps2; xt_rateest_mt()
38 pps2 = info->pps2; xt_rateest_mt()
40 spin_lock_bh(&info->est2->lock); xt_rateest_mt()
41 r = &info->est2->rstats; xt_rateest_mt()
42 if (info->flags & XT_RATEEST_MATCH_DELTA) { xt_rateest_mt()
43 bps2 = info->bps2 >= r->bps ? info->bps2 - r->bps : 0; xt_rateest_mt()
44 pps2 = info->pps2 >= r->pps ? info->pps2 - r->pps : 0; xt_rateest_mt()
49 spin_unlock_bh(&info->est2->lock); xt_rateest_mt()
52 switch (info->mode) { xt_rateest_mt()
54 if (info->flags & XT_RATEEST_MATCH_BPS) xt_rateest_mt()
56 if (info->flags & XT_RATEEST_MATCH_PPS) xt_rateest_mt()
60 if (info->flags & XT_RATEEST_MATCH_BPS) xt_rateest_mt()
62 if (info->flags & XT_RATEEST_MATCH_PPS) xt_rateest_mt()
66 if (info->flags & XT_RATEEST_MATCH_BPS) xt_rateest_mt()
68 if (info->flags & XT_RATEEST_MATCH_PPS) xt_rateest_mt()
73 ret ^= info->flags & XT_RATEEST_MATCH_INVERT ? true : false; xt_rateest_mt()
79 struct xt_rateest_match_info *info = par->matchinfo; xt_rateest_mt_checkentry() local
83 if (hweight32(info->flags & (XT_RATEEST_MATCH_ABS | xt_rateest_mt_checkentry()
87 if (!(info->flags & (XT_RATEEST_MATCH_BPS | XT_RATEEST_MATCH_PPS))) xt_rateest_mt_checkentry()
90 switch (info->mode) { xt_rateest_mt_checkentry()
100 est1 = xt_rateest_lookup(info->name1); xt_rateest_mt_checkentry()
105 if (info->flags & XT_RATEEST_MATCH_REL) { xt_rateest_mt_checkentry()
106 est2 = xt_rateest_lookup(info->name2); xt_rateest_mt_checkentry()
111 info->est1 = est1; xt_rateest_mt_checkentry()
112 info->est2 = est2; xt_rateest_mt_checkentry()
123 struct xt_rateest_match_info *info = par->matchinfo; xt_rateest_mt_destroy() local
125 xt_rateest_put(info->est1); xt_rateest_mt_destroy()
126 if (info->est2) xt_rateest_mt_destroy()
127 xt_rateest_put(info->est2); xt_rateest_mt_destroy()
H A Dxt_conntrack.c44 const struct xt_conntrack_mtinfo2 *info, conntrack_mt_origsrc()
48 &info->origsrc_addr, &info->origsrc_mask, family); conntrack_mt_origsrc()
53 const struct xt_conntrack_mtinfo2 *info, conntrack_mt_origdst()
57 &info->origdst_addr, &info->origdst_mask, family); conntrack_mt_origdst()
62 const struct xt_conntrack_mtinfo2 *info, conntrack_mt_replsrc()
66 &info->replsrc_addr, &info->replsrc_mask, family); conntrack_mt_replsrc()
71 const struct xt_conntrack_mtinfo2 *info, conntrack_mt_repldst()
75 &info->repldst_addr, &info->repldst_mask, family); conntrack_mt_repldst()
79 ct_proto_port_check(const struct xt_conntrack_mtinfo2 *info, ct_proto_port_check() argument
85 if ((info->match_flags & XT_CONNTRACK_PROTO) && ct_proto_port_check()
86 (nf_ct_protonum(ct) == info->l4proto) ^ ct_proto_port_check()
87 !(info->invert_flags & XT_CONNTRACK_PROTO)) ct_proto_port_check()
91 if ((info->match_flags & XT_CONNTRACK_ORIGSRC_PORT) && ct_proto_port_check()
92 (tuple->src.u.all == info->origsrc_port) ^ ct_proto_port_check()
93 !(info->invert_flags & XT_CONNTRACK_ORIGSRC_PORT)) ct_proto_port_check()
96 if ((info->match_flags & XT_CONNTRACK_ORIGDST_PORT) && ct_proto_port_check()
97 (tuple->dst.u.all == info->origdst_port) ^ ct_proto_port_check()
98 !(info->invert_flags & XT_CONNTRACK_ORIGDST_PORT)) ct_proto_port_check()
103 if ((info->match_flags & XT_CONNTRACK_REPLSRC_PORT) && ct_proto_port_check()
104 (tuple->src.u.all == info->replsrc_port) ^ ct_proto_port_check()
105 !(info->invert_flags & XT_CONNTRACK_REPLSRC_PORT)) ct_proto_port_check()
108 if ((info->match_flags & XT_CONNTRACK_REPLDST_PORT) && ct_proto_port_check()
109 (tuple->dst.u.all == info->repldst_port) ^ ct_proto_port_check()
110 !(info->invert_flags & XT_CONNTRACK_REPLDST_PORT)) ct_proto_port_check()
123 ct_proto_port_check_v3(const struct xt_conntrack_mtinfo3 *info, ct_proto_port_check_v3() argument
129 if ((info->match_flags & XT_CONNTRACK_PROTO) && ct_proto_port_check_v3()
130 (nf_ct_protonum(ct) == info->l4proto) ^ ct_proto_port_check_v3()
131 !(info->invert_flags & XT_CONNTRACK_PROTO)) ct_proto_port_check_v3()
135 if ((info->match_flags & XT_CONNTRACK_ORIGSRC_PORT) && ct_proto_port_check_v3()
136 !port_match(info->origsrc_port, info->origsrc_port_high, ct_proto_port_check_v3()
138 info->invert_flags & XT_CONNTRACK_ORIGSRC_PORT)) ct_proto_port_check_v3()
141 if ((info->match_flags & XT_CONNTRACK_ORIGDST_PORT) && ct_proto_port_check_v3()
142 !port_match(info->origdst_port, info->origdst_port_high, ct_proto_port_check_v3()
144 info->invert_flags & XT_CONNTRACK_ORIGDST_PORT)) ct_proto_port_check_v3()
149 if ((info->match_flags & XT_CONNTRACK_REPLSRC_PORT) && ct_proto_port_check_v3()
150 !port_match(info->replsrc_port, info->replsrc_port_high, ct_proto_port_check_v3()
152 info->invert_flags & XT_CONNTRACK_REPLSRC_PORT)) ct_proto_port_check_v3()
155 if ((info->match_flags & XT_CONNTRACK_REPLDST_PORT) && ct_proto_port_check_v3()
156 !port_match(info->repldst_port, info->repldst_port_high, ct_proto_port_check_v3()
158 info->invert_flags & XT_CONNTRACK_REPLDST_PORT)) ct_proto_port_check_v3()
168 const struct xt_conntrack_mtinfo2 *info = par->matchinfo; conntrack_mt() local
183 if (info->match_flags & XT_CONNTRACK_STATE) { conntrack_mt()
191 !(info->invert_flags & XT_CONNTRACK_STATE)) conntrack_mt()
196 return info->match_flags & XT_CONNTRACK_STATE; conntrack_mt()
197 if ((info->match_flags & XT_CONNTRACK_DIRECTION) && conntrack_mt()
199 !(info->invert_flags & XT_CONNTRACK_DIRECTION)) conntrack_mt()
202 if (info->match_flags & XT_CONNTRACK_ORIGSRC) conntrack_mt()
203 if (conntrack_mt_origsrc(ct, info, par->family) ^ conntrack_mt()
204 !(info->invert_flags & XT_CONNTRACK_ORIGSRC)) conntrack_mt()
207 if (info->match_flags & XT_CONNTRACK_ORIGDST) conntrack_mt()
208 if (conntrack_mt_origdst(ct, info, par->family) ^ conntrack_mt()
209 !(info->invert_flags & XT_CONNTRACK_ORIGDST)) conntrack_mt()
212 if (info->match_flags & XT_CONNTRACK_REPLSRC) conntrack_mt()
213 if (conntrack_mt_replsrc(ct, info, par->family) ^ conntrack_mt()
214 !(info->invert_flags & XT_CONNTRACK_REPLSRC)) conntrack_mt()
217 if (info->match_flags & XT_CONNTRACK_REPLDST) conntrack_mt()
218 if (conntrack_mt_repldst(ct, info, par->family) ^ conntrack_mt()
219 !(info->invert_flags & XT_CONNTRACK_REPLDST)) conntrack_mt()
223 if (!ct_proto_port_check(info, ct)) conntrack_mt()
230 if ((info->match_flags & XT_CONNTRACK_STATUS) && conntrack_mt()
232 !(info->invert_flags & XT_CONNTRACK_STATUS))) conntrack_mt()
235 if (info->match_flags & XT_CONNTRACK_EXPIRES) { conntrack_mt()
240 if ((expires >= info->expires_min && conntrack_mt()
241 expires <= info->expires_max) ^ conntrack_mt()
242 !(info->invert_flags & XT_CONNTRACK_EXPIRES)) conntrack_mt()
251 const struct xt_conntrack_mtinfo1 *info = par->matchinfo; conntrack_mt_v1() local
253 return conntrack_mt(skb, par, info->state_mask, info->status_mask); conntrack_mt_v1()
259 const struct xt_conntrack_mtinfo2 *info = par->matchinfo; conntrack_mt_v2() local
261 return conntrack_mt(skb, par, info->state_mask, info->status_mask); conntrack_mt_v2()
267 const struct xt_conntrack_mtinfo3 *info = par->matchinfo; conntrack_mt_v3() local
269 return conntrack_mt(skb, par, info->state_mask, info->status_mask); conntrack_mt_v3()
43 conntrack_mt_origsrc(const struct nf_conn *ct, const struct xt_conntrack_mtinfo2 *info, u_int8_t family) conntrack_mt_origsrc() argument
52 conntrack_mt_origdst(const struct nf_conn *ct, const struct xt_conntrack_mtinfo2 *info, u_int8_t family) conntrack_mt_origdst() argument
61 conntrack_mt_replsrc(const struct nf_conn *ct, const struct xt_conntrack_mtinfo2 *info, u_int8_t family) conntrack_mt_replsrc() argument
70 conntrack_mt_repldst(const struct nf_conn *ct, const struct xt_conntrack_mtinfo2 *info, u_int8_t family) conntrack_mt_repldst() argument
H A Dxt_set.c54 const struct xt_set_info_match_v0 *info = par->matchinfo; set_match_v0() local
55 ADT_OPT(opt, par->family, info->match_set.u.compat.dim, set_match_v0()
56 info->match_set.u.compat.flags, 0, UINT_MAX); set_match_v0()
58 return match_set(info->match_set.index, skb, par, &opt, set_match_v0()
59 info->match_set.u.compat.flags & IPSET_INV_MATCH); set_match_v0()
63 compat_flags(struct xt_set_info_v0 *info) compat_flags() argument
68 info->u.compat.dim = IPSET_DIM_ZERO; compat_flags()
69 if (info->u.flags[0] & IPSET_MATCH_INV) compat_flags()
70 info->u.compat.flags |= IPSET_INV_MATCH; compat_flags()
71 for (i = 0; i < IPSET_DIM_MAX-1 && info->u.flags[i]; i++) { compat_flags()
72 info->u.compat.dim++; compat_flags()
73 if (info->u.flags[i] & IPSET_SRC) compat_flags()
74 info->u.compat.flags |= (1<<info->u.compat.dim); compat_flags()
81 struct xt_set_info_match_v0 *info = par->matchinfo; set_match_v0_checkentry() local
84 index = ip_set_nfnl_get_byindex(par->net, info->match_set.index); set_match_v0_checkentry()
88 info->match_set.index); set_match_v0_checkentry()
91 if (info->match_set.u.flags[IPSET_DIM_MAX-1] != 0) { set_match_v0_checkentry()
93 ip_set_nfnl_put(par->net, info->match_set.index); set_match_v0_checkentry()
98 compat_flags(&info->match_set); set_match_v0_checkentry()
106 struct xt_set_info_match_v0 *info = par->matchinfo; set_match_v0_destroy() local
108 ip_set_nfnl_put(par->net, info->match_set.index); set_match_v0_destroy()
116 const struct xt_set_info_match_v1 *info = par->matchinfo; set_match_v1() local
117 ADT_OPT(opt, par->family, info->match_set.dim, set_match_v1()
118 info->match_set.flags, 0, UINT_MAX); set_match_v1()
123 return match_set(info->match_set.index, skb, par, &opt, set_match_v1()
124 info->match_set.flags & IPSET_INV_MATCH); set_match_v1()
130 struct xt_set_info_match_v1 *info = par->matchinfo; set_match_v1_checkentry() local
133 index = ip_set_nfnl_get_byindex(par->net, info->match_set.index); set_match_v1_checkentry()
137 info->match_set.index); set_match_v1_checkentry()
140 if (info->match_set.dim > IPSET_DIM_MAX) { set_match_v1_checkentry()
142 ip_set_nfnl_put(par->net, info->match_set.index); set_match_v1_checkentry()
152 struct xt_set_info_match_v1 *info = par->matchinfo; set_match_v1_destroy() local
154 ip_set_nfnl_put(par->net, info->match_set.index); set_match_v1_destroy()
160 match_counter0(u64 counter, const struct ip_set_counter_match0 *info) match_counter0() argument
162 switch (info->op) { match_counter0()
166 return counter == info->value; match_counter0()
168 return counter != info->value; match_counter0()
170 return counter < info->value; match_counter0()
172 return counter > info->value; match_counter0()
180 const struct xt_set_info_match_v3 *info = par->matchinfo; set_match_v3() local
181 ADT_OPT(opt, par->family, info->match_set.dim, set_match_v3()
182 info->match_set.flags, info->flags, UINT_MAX); set_match_v3()
185 if (info->packets.op != IPSET_COUNTER_NONE || set_match_v3()
186 info->bytes.op != IPSET_COUNTER_NONE) set_match_v3()
189 ret = match_set(info->match_set.index, skb, par, &opt, set_match_v3()
190 info->match_set.flags & IPSET_INV_MATCH); set_match_v3()
195 if (!match_counter0(opt.ext.packets, &info->packets)) set_match_v3()
197 return match_counter0(opt.ext.bytes, &info->bytes); set_match_v3()
206 match_counter(u64 counter, const struct ip_set_counter_match *info) match_counter() argument
208 switch (info->op) { match_counter()
212 return counter == info->value; match_counter()
214 return counter != info->value; match_counter()
216 return counter < info->value; match_counter()
218 return counter > info->value; match_counter()
226 const struct xt_set_info_match_v4 *info = par->matchinfo; set_match_v4() local
227 ADT_OPT(opt, par->family, info->match_set.dim, set_match_v4()
228 info->match_set.flags, info->flags, UINT_MAX); set_match_v4()
231 if (info->packets.op != IPSET_COUNTER_NONE || set_match_v4()
232 info->bytes.op != IPSET_COUNTER_NONE) set_match_v4()
235 ret = match_set(info->match_set.index, skb, par, &opt, set_match_v4()
236 info->match_set.flags & IPSET_INV_MATCH); set_match_v4()
241 if (!match_counter(opt.ext.packets, &info->packets)) set_match_v4()
243 return match_counter(opt.ext.bytes, &info->bytes); set_match_v4()
254 const struct xt_set_info_target_v0 *info = par->targinfo; set_target_v0() local
255 ADT_OPT(add_opt, par->family, info->add_set.u.compat.dim, set_target_v0()
256 info->add_set.u.compat.flags, 0, UINT_MAX); set_target_v0()
257 ADT_OPT(del_opt, par->family, info->del_set.u.compat.dim, set_target_v0()
258 info->del_set.u.compat.flags, 0, UINT_MAX); set_target_v0()
260 if (info->add_set.index != IPSET_INVALID_ID) set_target_v0()
261 ip_set_add(info->add_set.index, skb, par, &add_opt); set_target_v0()
262 if (info->del_set.index != IPSET_INVALID_ID) set_target_v0()
263 ip_set_del(info->del_set.index, skb, par, &del_opt); set_target_v0()
271 struct xt_set_info_target_v0 *info = par->targinfo; set_target_v0_checkentry() local
274 if (info->add_set.index != IPSET_INVALID_ID) { set_target_v0_checkentry()
275 index = ip_set_nfnl_get_byindex(par->net, info->add_set.index); set_target_v0_checkentry()
278 info->add_set.index); set_target_v0_checkentry()
283 if (info->del_set.index != IPSET_INVALID_ID) { set_target_v0_checkentry()
284 index = ip_set_nfnl_get_byindex(par->net, info->del_set.index); set_target_v0_checkentry()
287 info->del_set.index); set_target_v0_checkentry()
288 if (info->add_set.index != IPSET_INVALID_ID) set_target_v0_checkentry()
289 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v0_checkentry()
293 if (info->add_set.u.flags[IPSET_DIM_MAX-1] != 0 || set_target_v0_checkentry()
294 info->del_set.u.flags[IPSET_DIM_MAX-1] != 0) { set_target_v0_checkentry()
296 if (info->add_set.index != IPSET_INVALID_ID) set_target_v0_checkentry()
297 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v0_checkentry()
298 if (info->del_set.index != IPSET_INVALID_ID) set_target_v0_checkentry()
299 ip_set_nfnl_put(par->net, info->del_set.index); set_target_v0_checkentry()
304 compat_flags(&info->add_set); set_target_v0_checkentry()
305 compat_flags(&info->del_set); set_target_v0_checkentry()
313 const struct xt_set_info_target_v0 *info = par->targinfo; set_target_v0_destroy() local
315 if (info->add_set.index != IPSET_INVALID_ID) set_target_v0_destroy()
316 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v0_destroy()
317 if (info->del_set.index != IPSET_INVALID_ID) set_target_v0_destroy()
318 ip_set_nfnl_put(par->net, info->del_set.index); set_target_v0_destroy()
326 const struct xt_set_info_target_v1 *info = par->targinfo; set_target_v1() local
327 ADT_OPT(add_opt, par->family, info->add_set.dim, set_target_v1()
328 info->add_set.flags, 0, UINT_MAX); set_target_v1()
329 ADT_OPT(del_opt, par->family, info->del_set.dim, set_target_v1()
330 info->del_set.flags, 0, UINT_MAX); set_target_v1()
332 if (info->add_set.index != IPSET_INVALID_ID) set_target_v1()
333 ip_set_add(info->add_set.index, skb, par, &add_opt); set_target_v1()
334 if (info->del_set.index != IPSET_INVALID_ID) set_target_v1()
335 ip_set_del(info->del_set.index, skb, par, &del_opt); set_target_v1()
343 const struct xt_set_info_target_v1 *info = par->targinfo; set_target_v1_checkentry() local
346 if (info->add_set.index != IPSET_INVALID_ID) { set_target_v1_checkentry()
347 index = ip_set_nfnl_get_byindex(par->net, info->add_set.index); set_target_v1_checkentry()
350 info->add_set.index); set_target_v1_checkentry()
355 if (info->del_set.index != IPSET_INVALID_ID) { set_target_v1_checkentry()
356 index = ip_set_nfnl_get_byindex(par->net, info->del_set.index); set_target_v1_checkentry()
359 info->del_set.index); set_target_v1_checkentry()
360 if (info->add_set.index != IPSET_INVALID_ID) set_target_v1_checkentry()
361 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v1_checkentry()
365 if (info->add_set.dim > IPSET_DIM_MAX || set_target_v1_checkentry()
366 info->del_set.dim > IPSET_DIM_MAX) { set_target_v1_checkentry()
368 if (info->add_set.index != IPSET_INVALID_ID) set_target_v1_checkentry()
369 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v1_checkentry()
370 if (info->del_set.index != IPSET_INVALID_ID) set_target_v1_checkentry()
371 ip_set_nfnl_put(par->net, info->del_set.index); set_target_v1_checkentry()
381 const struct xt_set_info_target_v1 *info = par->targinfo; set_target_v1_destroy() local
383 if (info->add_set.index != IPSET_INVALID_ID) set_target_v1_destroy()
384 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v1_destroy()
385 if (info->del_set.index != IPSET_INVALID_ID) set_target_v1_destroy()
386 ip_set_nfnl_put(par->net, info->del_set.index); set_target_v1_destroy()
394 const struct xt_set_info_target_v2 *info = par->targinfo; set_target_v2() local
395 ADT_OPT(add_opt, par->family, info->add_set.dim, set_target_v2()
396 info->add_set.flags, info->flags, info->timeout); set_target_v2()
397 ADT_OPT(del_opt, par->family, info->del_set.dim, set_target_v2()
398 info->del_set.flags, 0, UINT_MAX); set_target_v2()
404 if (info->add_set.index != IPSET_INVALID_ID) set_target_v2()
405 ip_set_add(info->add_set.index, skb, par, &add_opt); set_target_v2()
406 if (info->del_set.index != IPSET_INVALID_ID) set_target_v2()
407 ip_set_del(info->del_set.index, skb, par, &del_opt); set_target_v2()
420 const struct xt_set_info_target_v3 *info = par->targinfo; set_target_v3() local
421 ADT_OPT(add_opt, par->family, info->add_set.dim, set_target_v3()
422 info->add_set.flags, info->flags, info->timeout); set_target_v3()
423 ADT_OPT(del_opt, par->family, info->del_set.dim, set_target_v3()
424 info->del_set.flags, 0, UINT_MAX); set_target_v3()
425 ADT_OPT(map_opt, par->family, info->map_set.dim, set_target_v3()
426 info->map_set.flags, 0, UINT_MAX); set_target_v3()
434 if (info->add_set.index != IPSET_INVALID_ID) set_target_v3()
435 ip_set_add(info->add_set.index, skb, par, &add_opt); set_target_v3()
436 if (info->del_set.index != IPSET_INVALID_ID) set_target_v3()
437 ip_set_del(info->del_set.index, skb, par, &del_opt); set_target_v3()
438 if (info->map_set.index != IPSET_INVALID_ID) { set_target_v3()
439 map_opt.cmdflags |= info->flags & (IPSET_FLAG_MAP_SKBMARK | set_target_v3()
442 ret = match_set(info->map_set.index, skb, par, &map_opt, set_target_v3()
443 info->map_set.flags & IPSET_INV_MATCH); set_target_v3()
463 const struct xt_set_info_target_v3 *info = par->targinfo; set_target_v3_checkentry() local
466 if (info->add_set.index != IPSET_INVALID_ID) { set_target_v3_checkentry()
468 info->add_set.index); set_target_v3_checkentry()
471 info->add_set.index); set_target_v3_checkentry()
476 if (info->del_set.index != IPSET_INVALID_ID) { set_target_v3_checkentry()
478 info->del_set.index); set_target_v3_checkentry()
481 info->del_set.index); set_target_v3_checkentry()
482 if (info->add_set.index != IPSET_INVALID_ID) set_target_v3_checkentry()
484 info->add_set.index); set_target_v3_checkentry()
489 if (info->map_set.index != IPSET_INVALID_ID) { set_target_v3_checkentry()
494 if (((info->flags & IPSET_FLAG_MAP_SKBPRIO) | set_target_v3_checkentry()
495 (info->flags & IPSET_FLAG_MAP_SKBQUEUE)) && set_target_v3_checkentry()
504 info->map_set.index); set_target_v3_checkentry()
507 info->map_set.index); set_target_v3_checkentry()
508 if (info->add_set.index != IPSET_INVALID_ID) set_target_v3_checkentry()
510 info->add_set.index); set_target_v3_checkentry()
511 if (info->del_set.index != IPSET_INVALID_ID) set_target_v3_checkentry()
513 info->del_set.index); set_target_v3_checkentry()
518 if (info->add_set.dim > IPSET_DIM_MAX || set_target_v3_checkentry()
519 info->del_set.dim > IPSET_DIM_MAX || set_target_v3_checkentry()
520 info->map_set.dim > IPSET_DIM_MAX) { set_target_v3_checkentry()
523 if (info->add_set.index != IPSET_INVALID_ID) set_target_v3_checkentry()
524 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v3_checkentry()
525 if (info->del_set.index != IPSET_INVALID_ID) set_target_v3_checkentry()
526 ip_set_nfnl_put(par->net, info->del_set.index); set_target_v3_checkentry()
527 if (info->map_set.index != IPSET_INVALID_ID) set_target_v3_checkentry()
528 ip_set_nfnl_put(par->net, info->map_set.index); set_target_v3_checkentry()
538 const struct xt_set_info_target_v3 *info = par->targinfo; set_target_v3_destroy() local
540 if (info->add_set.index != IPSET_INVALID_ID) set_target_v3_destroy()
541 ip_set_nfnl_put(par->net, info->add_set.index); set_target_v3_destroy()
542 if (info->del_set.index != IPSET_INVALID_ID) set_target_v3_destroy()
543 ip_set_nfnl_put(par->net, info->del_set.index); set_target_v3_destroy()
544 if (info->map_set.index != IPSET_INVALID_ID) set_target_v3_destroy()
545 ip_set_nfnl_put(par->net, info->map_set.index); set_target_v3_destroy()
H A Dxt_physdev.c28 const struct xt_physdev_info *info = par->matchinfo; physdev_mt() local
33 /* Not a bridged IP packet or no info available yet: physdev_mt()
38 if ((info->bitmask & XT_PHYSDEV_OP_BRIDGED) && physdev_mt()
39 !(info->invert & XT_PHYSDEV_OP_BRIDGED)) physdev_mt()
41 if ((info->bitmask & XT_PHYSDEV_OP_ISIN) && physdev_mt()
42 !(info->invert & XT_PHYSDEV_OP_ISIN)) physdev_mt()
44 if ((info->bitmask & XT_PHYSDEV_OP_ISOUT) && physdev_mt()
45 !(info->invert & XT_PHYSDEV_OP_ISOUT)) physdev_mt()
47 if ((info->bitmask & XT_PHYSDEV_OP_IN) && physdev_mt()
48 !(info->invert & XT_PHYSDEV_OP_IN)) physdev_mt()
50 if ((info->bitmask & XT_PHYSDEV_OP_OUT) && physdev_mt()
51 !(info->invert & XT_PHYSDEV_OP_OUT)) physdev_mt()
60 if ((info->bitmask & XT_PHYSDEV_OP_BRIDGED) && physdev_mt()
61 (!!outdev ^ !(info->invert & XT_PHYSDEV_OP_BRIDGED))) physdev_mt()
67 if ((info->bitmask & XT_PHYSDEV_OP_ISIN && physdev_mt()
68 (!indev ^ !!(info->invert & XT_PHYSDEV_OP_ISIN))) || physdev_mt()
69 (info->bitmask & XT_PHYSDEV_OP_ISOUT && physdev_mt()
70 (!outdev ^ !!(info->invert & XT_PHYSDEV_OP_ISOUT)))) physdev_mt()
73 if (!(info->bitmask & XT_PHYSDEV_OP_IN)) physdev_mt()
77 ret = ifname_compare_aligned(indev, info->physindev, physdev_mt()
78 info->in_mask); physdev_mt()
80 if (!ret ^ !(info->invert & XT_PHYSDEV_OP_IN)) physdev_mt()
85 if (!(info->bitmask & XT_PHYSDEV_OP_OUT)) physdev_mt()
91 ret = ifname_compare_aligned(outdev, info->physoutdev, info->out_mask); physdev_mt()
93 return (!!ret ^ !(info->invert & XT_PHYSDEV_OP_OUT)); physdev_mt()
98 const struct xt_physdev_info *info = par->matchinfo; physdev_mt_check() local
102 if (!(info->bitmask & XT_PHYSDEV_OP_MASK) || physdev_mt_check()
103 info->bitmask & ~XT_PHYSDEV_OP_MASK) physdev_mt_check()
105 if (info->bitmask & XT_PHYSDEV_OP_OUT && physdev_mt_check()
106 (!(info->bitmask & XT_PHYSDEV_OP_BRIDGED) || physdev_mt_check()
107 info->invert & XT_PHYSDEV_OP_BRIDGED) && physdev_mt_check()
H A Dxt_iprange.c22 const struct xt_iprange_mtinfo *info = par->matchinfo; iprange_mt4() local
26 if (info->flags & IPRANGE_SRC) { iprange_mt4()
27 m = ntohl(iph->saddr) < ntohl(info->src_min.ip); iprange_mt4()
28 m |= ntohl(iph->saddr) > ntohl(info->src_max.ip); iprange_mt4()
29 m ^= !!(info->flags & IPRANGE_SRC_INV); iprange_mt4()
33 (info->flags & IPRANGE_SRC_INV) ? "(INV) " : "", iprange_mt4()
34 &info->src_min.ip, iprange_mt4()
35 &info->src_max.ip); iprange_mt4()
39 if (info->flags & IPRANGE_DST) { iprange_mt4()
40 m = ntohl(iph->daddr) < ntohl(info->dst_min.ip); iprange_mt4()
41 m |= ntohl(iph->daddr) > ntohl(info->dst_max.ip); iprange_mt4()
42 m ^= !!(info->flags & IPRANGE_DST_INV); iprange_mt4()
46 (info->flags & IPRANGE_DST_INV) ? "(INV) " : "", iprange_mt4()
47 &info->dst_min.ip, iprange_mt4()
48 &info->dst_max.ip); iprange_mt4()
71 const struct xt_iprange_mtinfo *info = par->matchinfo; iprange_mt6() local
75 if (info->flags & IPRANGE_SRC) { iprange_mt6()
76 m = iprange_ipv6_lt(&iph->saddr, &info->src_min.in6); iprange_mt6()
77 m |= iprange_ipv6_lt(&info->src_max.in6, &iph->saddr); iprange_mt6()
78 m ^= !!(info->flags & IPRANGE_SRC_INV); iprange_mt6()
82 (info->flags & IPRANGE_SRC_INV) ? "(INV) " : "", iprange_mt6()
83 &info->src_min.in6, iprange_mt6()
84 &info->src_max.in6); iprange_mt6()
88 if (info->flags & IPRANGE_DST) { iprange_mt6()
89 m = iprange_ipv6_lt(&iph->daddr, &info->dst_min.in6); iprange_mt6()
90 m |= iprange_ipv6_lt(&info->dst_max.in6, &iph->daddr); iprange_mt6()
91 m ^= !!(info->flags & IPRANGE_DST_INV); iprange_mt6()
95 (info->flags & IPRANGE_DST_INV) ? "(INV) " : "", iprange_mt6()
96 &info->dst_min.in6, iprange_mt6()
97 &info->dst_max.in6); iprange_mt6()
H A Dxt_owner.c22 struct xt_owner_match_info *info = par->matchinfo; owner_check() local
25 if ((info->match & (XT_OWNER_UID|XT_OWNER_GID)) && owner_check()
34 const struct xt_owner_match_info *info = par->matchinfo; owner_mt() local
38 return (info->match ^ info->invert) == 0; owner_mt()
39 else if (info->match & info->invert & XT_OWNER_SOCKET) owner_mt()
48 return ((info->match ^ info->invert) & owner_mt()
51 if (info->match & XT_OWNER_UID) { owner_mt()
52 kuid_t uid_min = make_kuid(&init_user_ns, info->uid_min); owner_mt()
53 kuid_t uid_max = make_kuid(&init_user_ns, info->uid_max); owner_mt()
56 !(info->invert & XT_OWNER_UID)) owner_mt()
60 if (info->match & XT_OWNER_GID) { owner_mt()
61 kgid_t gid_min = make_kgid(&init_user_ns, info->gid_min); owner_mt()
62 kgid_t gid_max = make_kgid(&init_user_ns, info->gid_max); owner_mt()
65 !(info->invert & XT_OWNER_GID)) owner_mt()
H A Dxt_statistic.c34 const struct xt_statistic_info *info = par->matchinfo; statistic_mt() local
35 bool ret = info->flags & XT_STATISTIC_INVERT; statistic_mt()
38 switch (info->mode) { statistic_mt()
40 if ((prandom_u32() & 0x7FFFFFFF) < info->u.random.probability) statistic_mt()
45 oval = atomic_read(&info->master->count); statistic_mt()
46 nval = (oval == info->u.nth.every) ? 0 : oval + 1; statistic_mt()
47 } while (atomic_cmpxchg(&info->master->count, oval, nval) != oval); statistic_mt()
58 struct xt_statistic_info *info = par->matchinfo; statistic_mt_check() local
60 if (info->mode > XT_STATISTIC_MODE_MAX || statistic_mt_check()
61 info->flags & ~XT_STATISTIC_MASK) statistic_mt_check()
64 info->master = kzalloc(sizeof(*info->master), GFP_KERNEL); statistic_mt_check()
65 if (info->master == NULL) statistic_mt_check()
67 atomic_set(&info->master->count, info->u.nth.count); statistic_mt_check()
74 const struct xt_statistic_info *info = par->matchinfo; statistic_mt_destroy() local
76 kfree(info->master); statistic_mt_destroy()
H A Dxt_devgroup.c24 const struct xt_devgroup_info *info = par->matchinfo; devgroup_mt() local
26 if (info->flags & XT_DEVGROUP_MATCH_SRC && devgroup_mt()
27 (((info->src_group ^ par->in->group) & info->src_mask ? 1 : 0) ^ devgroup_mt()
28 ((info->flags & XT_DEVGROUP_INVERT_SRC) ? 1 : 0))) devgroup_mt()
31 if (info->flags & XT_DEVGROUP_MATCH_DST && devgroup_mt()
32 (((info->dst_group ^ par->out->group) & info->dst_mask ? 1 : 0) ^ devgroup_mt()
33 ((info->flags & XT_DEVGROUP_INVERT_DST) ? 1 : 0))) devgroup_mt()
41 const struct xt_devgroup_info *info = par->matchinfo; devgroup_mt_checkentry() local
43 if (info->flags & ~(XT_DEVGROUP_MATCH_SRC | XT_DEVGROUP_INVERT_SRC | devgroup_mt_checkentry()
47 if (info->flags & XT_DEVGROUP_MATCH_SRC && devgroup_mt_checkentry()
53 if (info->flags & XT_DEVGROUP_MATCH_DST && devgroup_mt_checkentry()
H A Dxt_IDLETIMER.c119 static int idletimer_tg_create(struct idletimer_tg_info *info) idletimer_tg_create() argument
123 info->timer = kmalloc(sizeof(*info->timer), GFP_KERNEL); idletimer_tg_create()
124 if (!info->timer) { idletimer_tg_create()
129 info->timer->attr.attr.name = kstrdup(info->label, GFP_KERNEL); idletimer_tg_create()
130 if (!info->timer->attr.attr.name) { idletimer_tg_create()
134 info->timer->attr.attr.mode = S_IRUGO; idletimer_tg_create()
135 info->timer->attr.show = idletimer_tg_show; idletimer_tg_create()
137 ret = sysfs_create_file(idletimer_tg_kobj, &info->timer->attr.attr); idletimer_tg_create()
143 list_add(&info->timer->entry, &idletimer_tg_list); idletimer_tg_create()
145 setup_timer(&info->timer->timer, idletimer_tg_expired, idletimer_tg_create()
146 (unsigned long) info->timer); idletimer_tg_create()
147 info->timer->refcnt = 1; idletimer_tg_create()
149 mod_timer(&info->timer->timer, idletimer_tg_create()
150 msecs_to_jiffies(info->timeout * 1000) + jiffies); idletimer_tg_create()
152 INIT_WORK(&info->timer->work, idletimer_tg_work); idletimer_tg_create()
157 kfree(info->timer->attr.attr.name); idletimer_tg_create()
159 kfree(info->timer); idletimer_tg_create()
170 const struct idletimer_tg_info *info = par->targinfo; idletimer_tg_target() local
173 info->label, info->timeout); idletimer_tg_target()
175 BUG_ON(!info->timer); idletimer_tg_target()
177 mod_timer(&info->timer->timer, idletimer_tg_target()
178 msecs_to_jiffies(info->timeout * 1000) + jiffies); idletimer_tg_target()
185 struct idletimer_tg_info *info = par->targinfo; idletimer_tg_checkentry() local
188 pr_debug("checkentry targinfo%s\n", info->label); idletimer_tg_checkentry()
190 if (info->timeout == 0) { idletimer_tg_checkentry()
195 if (info->label[0] == '\0' || idletimer_tg_checkentry()
196 strnlen(info->label, idletimer_tg_checkentry()
204 info->timer = __idletimer_tg_find_by_label(info->label); idletimer_tg_checkentry()
205 if (info->timer) { idletimer_tg_checkentry()
206 info->timer->refcnt++; idletimer_tg_checkentry()
207 mod_timer(&info->timer->timer, idletimer_tg_checkentry()
208 msecs_to_jiffies(info->timeout * 1000) + jiffies); idletimer_tg_checkentry()
211 info->label, info->timer->refcnt); idletimer_tg_checkentry()
213 ret = idletimer_tg_create(info); idletimer_tg_checkentry()
227 const struct idletimer_tg_info *info = par->targinfo; idletimer_tg_destroy() local
229 pr_debug("destroy targinfo %s\n", info->label); idletimer_tg_destroy()
233 if (--info->timer->refcnt == 0) { idletimer_tg_destroy()
234 pr_debug("deleting timer %s\n", info->label); idletimer_tg_destroy()
236 list_del(&info->timer->entry); idletimer_tg_destroy()
237 del_timer_sync(&info->timer->timer); idletimer_tg_destroy()
238 sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr); idletimer_tg_destroy()
239 kfree(info->timer->attr.attr.name); idletimer_tg_destroy()
240 kfree(info->timer); idletimer_tg_destroy()
243 info->label, info->timer->refcnt); idletimer_tg_destroy()
H A Dxt_dscp.c30 const struct xt_dscp_info *info = par->matchinfo; dscp_mt() local
33 return (dscp == info->dscp) ^ !!info->invert; dscp_mt()
39 const struct xt_dscp_info *info = par->matchinfo; dscp_mt6() local
42 return (dscp == info->dscp) ^ !!info->invert; dscp_mt6()
47 const struct xt_dscp_info *info = par->matchinfo; dscp_mt_check() local
49 if (info->dscp > XT_DSCP_MAX) { dscp_mt_check()
50 pr_info("dscp %x out of range\n", info->dscp); dscp_mt_check()
59 const struct xt_tos_match_info *info = par->matchinfo; tos_mt() local
62 return ((ip_hdr(skb)->tos & info->tos_mask) == tos_mt()
63 info->tos_value) ^ !!info->invert; tos_mt()
65 return ((ipv6_get_dsfield(ipv6_hdr(skb)) & info->tos_mask) == tos_mt()
66 info->tos_value) ^ !!info->invert; tos_mt()
H A Dxt_NFQUEUE.c41 const struct xt_NFQ_info_v1 *info = par->targinfo; nfqueue_tg_v1() local
42 u32 queue = info->queuenum; nfqueue_tg_v1()
44 if (info->queues_total > 1) { nfqueue_tg_v1()
45 queue = nfqueue_hash(skb, queue, info->queues_total, nfqueue_tg_v1()
54 const struct xt_NFQ_info_v2 *info = par->targinfo; nfqueue_tg_v2() local
57 if (info->bypass) nfqueue_tg_v2()
64 const struct xt_NFQ_info_v3 *info = par->targinfo; nfqueue_tg_check() local
69 if (info->queues_total == 0) { nfqueue_tg_check()
73 maxid = info->queues_total - 1 + info->queuenum; nfqueue_tg_check()
76 info->queues_total, maxid); nfqueue_tg_check()
79 if (par->target->revision == 2 && info->flags > 1) nfqueue_tg_check()
81 if (par->target->revision == 3 && info->flags & ~NFQ_FLAG_MASK) nfqueue_tg_check()
90 const struct xt_NFQ_info_v3 *info = par->targinfo; nfqueue_tg_v3() local
91 u32 queue = info->queuenum; nfqueue_tg_v3()
94 if (info->queues_total > 1) { nfqueue_tg_v3()
95 if (info->flags & NFQ_FLAG_CPU_FANOUT) { nfqueue_tg_v3()
98 queue = info->queuenum + cpu % info->queues_total; nfqueue_tg_v3()
100 queue = nfqueue_hash(skb, queue, info->queues_total, nfqueue_tg_v3()
106 if (info->flags & NFQ_FLAG_BYPASS) nfqueue_tg_v3()
H A Dxt_HL.c32 const struct ipt_TTL_info *info = par->targinfo; ttl_tg() local
40 switch (info->mode) { ttl_tg()
42 new_ttl = info->ttl; ttl_tg()
45 new_ttl = iph->ttl + info->ttl; ttl_tg()
50 new_ttl = iph->ttl - info->ttl; ttl_tg()
72 const struct ip6t_HL_info *info = par->targinfo; hl_tg6() local
80 switch (info->mode) { hl_tg6()
82 new_hl = info->hop_limit; hl_tg6()
85 new_hl = ip6h->hop_limit + info->hop_limit; hl_tg6()
90 new_hl = ip6h->hop_limit - info->hop_limit; hl_tg6()
106 const struct ipt_TTL_info *info = par->targinfo; ttl_tg_check() local
108 if (info->mode > IPT_TTL_MAXMODE) { ttl_tg_check()
109 pr_info("TTL: invalid or unknown mode %u\n", info->mode); ttl_tg_check()
112 if (info->mode != IPT_TTL_SET && info->ttl == 0) ttl_tg_check()
119 const struct ip6t_HL_info *info = par->targinfo; hl_tg6_check() local
121 if (info->mode > IP6T_HL_MAXMODE) { hl_tg6_check()
122 pr_info("invalid or unknown mode %u\n", info->mode); hl_tg6_check()
125 if (info->mode != IP6T_HL_SET && info->hop_limit == 0) { hl_tg6_check()
H A Dxt_SECMARK.c36 const struct xt_secmark_target_info *info = par->targinfo; secmark_tg() local
38 BUG_ON(info->mode != mode); secmark_tg()
42 secmark = info->secid; secmark_tg()
52 static int checkentry_lsm(struct xt_secmark_target_info *info) checkentry_lsm() argument
56 info->secctx[SECMARK_SECCTX_MAX - 1] = '\0'; checkentry_lsm()
57 info->secid = 0; checkentry_lsm()
59 err = security_secctx_to_secid(info->secctx, strlen(info->secctx), checkentry_lsm()
60 &info->secid); checkentry_lsm()
63 pr_info("invalid security context \'%s\'\n", info->secctx); checkentry_lsm()
67 if (!info->secid) { checkentry_lsm()
68 pr_info("unable to map security context \'%s\'\n", info->secctx); checkentry_lsm()
72 err = security_secmark_relabel_packet(info->secid); checkentry_lsm()
84 struct xt_secmark_target_info *info = par->targinfo; secmark_tg_check() local
94 if (mode && mode != info->mode) { secmark_tg_check()
96 "rules for mode %hu\n", mode, info->mode); secmark_tg_check()
100 switch (info->mode) { secmark_tg_check()
104 pr_info("invalid mode: %hu\n", info->mode); secmark_tg_check()
108 err = checkentry_lsm(info); secmark_tg_check()
113 mode = info->mode; secmark_tg_check()
H A Dxt_HMARK.c62 const struct xt_hmark_info *info) hmark_swap_ports()
67 hp.b32 = (uports->b32 & info->port_mask.b32) | info->port_set.b32; hmark_swap_ports()
79 const struct xt_hmark_info *info) hmark_ct_set_htuple()
94 info->src_mask.ip6); hmark_ct_set_htuple()
96 info->dst_mask.ip6); hmark_ct_set_htuple()
98 if (info->flags & XT_HMARK_FLAG(XT_HMARK_METHOD_L3)) hmark_ct_set_htuple()
105 hmark_swap_ports(&t->uports, info); hmark_ct_set_htuple()
117 hmark_hash(struct hmark_tuple *t, const struct xt_hmark_info *info) hmark_hash() argument
126 hash = jhash_3words(src, dst, t->uports.v32, info->hashrnd); hmark_hash()
127 hash = hash ^ (t->proto & info->proto_mask); hmark_hash()
129 return reciprocal_scale(hash, info->hmodulus) + info->hoffset; hmark_hash()
134 struct hmark_tuple *t, const struct xt_hmark_info *info) hmark_set_tuple_ports()
146 hmark_swap_ports(&t->uports, info); hmark_set_tuple_ports()
167 const struct xt_hmark_info *info) hmark_pkt_set_htuple_ipv6()
194 t->src = hmark_addr6_mask(ip6->saddr.s6_addr32, info->src_mask.ip6); hmark_pkt_set_htuple_ipv6()
195 t->dst = hmark_addr6_mask(ip6->daddr.s6_addr32, info->dst_mask.ip6); hmark_pkt_set_htuple_ipv6()
197 if (info->flags & XT_HMARK_FLAG(XT_HMARK_METHOD_L3)) hmark_pkt_set_htuple_ipv6()
207 hmark_set_tuple_ports(skb, nhoff, t, info); hmark_pkt_set_htuple_ipv6()
214 const struct xt_hmark_info *info = par->targinfo; hmark_tg_v6() local
219 if (info->flags & XT_HMARK_FLAG(XT_HMARK_CT)) { hmark_tg_v6()
220 if (hmark_ct_set_htuple(skb, &t, info) < 0) hmark_tg_v6()
223 if (hmark_pkt_set_htuple_ipv6(skb, &t, info) < 0) hmark_tg_v6()
227 skb->mark = hmark_hash(&t, info); hmark_tg_v6()
256 const struct xt_hmark_info *info) hmark_pkt_set_htuple_ipv4()
271 t->src = ip->saddr & info->src_mask.ip; hmark_pkt_set_htuple_ipv4()
272 t->dst = ip->daddr & info->dst_mask.ip; hmark_pkt_set_htuple_ipv4()
274 if (info->flags & XT_HMARK_FLAG(XT_HMARK_METHOD_L3)) hmark_pkt_set_htuple_ipv4()
287 hmark_set_tuple_ports(skb, (ip->ihl * 4) + nhoff, t, info); hmark_pkt_set_htuple_ipv4()
295 const struct xt_hmark_info *info = par->targinfo; hmark_tg_v4() local
300 if (info->flags & XT_HMARK_FLAG(XT_HMARK_CT)) { hmark_tg_v4()
301 if (hmark_ct_set_htuple(skb, &t, info) < 0) hmark_tg_v4()
304 if (hmark_pkt_set_htuple_ipv4(skb, &t, info) < 0) hmark_tg_v4()
308 skb->mark = hmark_hash(&t, info); hmark_tg_v4()
314 const struct xt_hmark_info *info = par->targinfo; hmark_tg_check() local
316 if (!info->hmodulus) { hmark_tg_check()
320 if (info->proto_mask && hmark_tg_check()
321 (info->flags & XT_HMARK_FLAG(XT_HMARK_METHOD_L3))) { hmark_tg_check()
325 if (info->flags & XT_HMARK_FLAG(XT_HMARK_SPI_MASK) && hmark_tg_check()
326 (info->flags & (XT_HMARK_FLAG(XT_HMARK_SPORT_MASK) | hmark_tg_check()
331 if (info->flags & XT_HMARK_FLAG(XT_HMARK_SPI) && hmark_tg_check()
332 (info->flags & (XT_HMARK_FLAG(XT_HMARK_SPORT) | hmark_tg_check()
61 hmark_swap_ports(union hmark_ports *uports, const struct xt_hmark_info *info) hmark_swap_ports() argument
78 hmark_ct_set_htuple(const struct sk_buff *skb, struct hmark_tuple *t, const struct xt_hmark_info *info) hmark_ct_set_htuple() argument
133 hmark_set_tuple_ports(const struct sk_buff *skb, unsigned int nhoff, struct hmark_tuple *t, const struct xt_hmark_info *info) hmark_set_tuple_ports() argument
166 hmark_pkt_set_htuple_ipv6(const struct sk_buff *skb, struct hmark_tuple *t, const struct xt_hmark_info *info) hmark_pkt_set_htuple_ipv6() argument
255 hmark_pkt_set_htuple_ipv4(const struct sk_buff *skb, struct hmark_tuple *t, const struct xt_hmark_info *info) hmark_pkt_set_htuple_ipv4() argument
/linux-4.1.27/arch/sh/drivers/dma/
H A Ddma-api.c29 struct dma_info *info; get_dma_info() local
35 list_for_each_entry(info, &registered_dmac_list, list) { get_dma_info()
36 if ((chan < info->first_vchannel_nr) || get_dma_info()
37 (chan >= info->first_vchannel_nr + info->nr_channels)) get_dma_info()
40 return info; get_dma_info()
49 struct dma_info *info; get_dma_info_by_name() local
51 list_for_each_entry(info, &registered_dmac_list, list) { get_dma_info_by_name()
52 if (dmac_name && (strcmp(dmac_name, info->name) != 0)) get_dma_info_by_name()
55 return info; get_dma_info_by_name()
64 struct dma_info *info; get_nr_channels() local
70 list_for_each_entry(info, &registered_dmac_list, list) get_nr_channels()
71 nr += info->nr_channels; get_nr_channels()
78 struct dma_info *info = get_dma_info(chan); get_dma_channel() local
82 if (unlikely(!info)) get_dma_channel()
85 for (i = 0; i < info->nr_channels; i++) { get_dma_channel()
86 channel = &info->channels[i]; get_dma_channel()
97 struct dma_info *info = get_dma_info(chan); get_dma_residue() local
100 if (info->ops->get_residue) get_dma_residue()
101 return info->ops->get_residue(channel); get_dma_residue()
134 struct dma_info *info; request_dma_bycap() local
140 list_for_each_entry(info, &registered_dmac_list, list) request_dma_bycap()
141 if (strcmp(*dmac, info->name) == 0) { request_dma_bycap()
149 for (i = 0; i < info->nr_channels; i++) { request_dma_bycap()
150 struct dma_channel *channel = &info->channels[i]; request_dma_bycap()
170 struct dma_info *info = get_dma_info(0); dmac_search_free_channel() local
173 for (i = 0; i < info->nr_channels; i++) { dmac_search_free_channel()
174 channel = &info->channels[i]; dmac_search_free_channel()
182 if (info->ops->request) { dmac_search_free_channel()
183 int result = info->ops->request(channel); dmac_search_free_channel()
197 struct dma_info *info = get_dma_info(chan); request_dma() local
206 if (info->ops->request) { request_dma()
207 result = info->ops->request(channel); request_dma()
220 struct dma_info *info = get_dma_info(chan); free_dma() local
223 if (info->ops->free) free_dma()
224 info->ops->free(channel); free_dma()
232 struct dma_info *info = get_dma_info(chan); dma_wait_for_completion() local
237 (info->ops->get_residue(channel) == 0)); dma_wait_for_completion()
241 while (info->ops->get_residue(channel)) dma_wait_for_completion()
248 struct dma_info *info; register_chan_caps() local
252 list_for_each_entry(info, &registered_dmac_list, list) register_chan_caps()
253 if (strcmp(dmac, info->name) == 0) { register_chan_caps()
261 for (i = 0; i < info->nr_channels; i++, caps++) { register_chan_caps()
264 if ((info->first_channel_nr + i) != caps->ch_num) register_chan_caps()
267 channel = &info->channels[i]; register_chan_caps()
277 struct dma_info *info = get_dma_info(chan); dma_configure_channel() local
280 if (info->ops->configure) dma_configure_channel()
281 info->ops->configure(channel, flags); dma_configure_channel()
288 struct dma_info *info = get_dma_info(chan); dma_xfer() local
296 return info->ops->xfer(channel); dma_xfer()
302 struct dma_info *info = get_dma_info(chan); dma_extend() local
305 if (info->ops->extend) dma_extend()
306 return info->ops->extend(channel, op, param); dma_extend()
314 struct dma_info *info = v; dma_proc_show() local
322 list_for_each_entry(info, &registered_dmac_list, list) { dma_proc_show()
328 for (i = 0; i < info->nr_channels; i++) { dma_proc_show()
329 struct dma_channel *channel = info->channels + i; dma_proc_show()
335 info->name, channel->dev_id); dma_proc_show()
354 int register_dmac(struct dma_info *info) register_dmac() argument
358 INIT_LIST_HEAD(&info->list); register_dmac()
361 info->name, info->nr_channels, info->nr_channels > 1 ? "s" : ""); register_dmac()
363 BUG_ON((info->flags & DMAC_CHANNELS_CONFIGURED) && !info->channels); register_dmac()
365 info->pdev = platform_device_register_simple(info->name, -1, register_dmac()
367 if (IS_ERR(info->pdev)) register_dmac()
368 return PTR_ERR(info->pdev); register_dmac()
373 if (!(info->flags & DMAC_CHANNELS_CONFIGURED)) { register_dmac()
376 size = sizeof(struct dma_channel) * info->nr_channels; register_dmac()
378 info->channels = kzalloc(size, GFP_KERNEL); register_dmac()
379 if (!info->channels) register_dmac()
384 info->first_vchannel_nr = total_channels; register_dmac()
385 for (i = 0; i < info->nr_channels; i++) { register_dmac()
386 struct dma_channel *chan = &info->channels[i]; register_dmac()
390 chan->chan = info->first_channel_nr + i; register_dmac()
391 chan->vchan = info->first_channel_nr + i + total_channels; register_dmac()
395 if (info->flags & DMAC_CHANNELS_TEI_CAPABLE) register_dmac()
399 dma_create_sysfs_files(chan, info); register_dmac()
402 list_add(&info->list, &registered_dmac_list); register_dmac()
408 void unregister_dmac(struct dma_info *info) unregister_dmac() argument
412 for (i = 0; i < info->nr_channels; i++) unregister_dmac()
413 dma_remove_sysfs_files(info->channels + i, info); unregister_dmac()
415 if (!(info->flags & DMAC_CHANNELS_CONFIGURED)) unregister_dmac()
416 kfree(info->channels); unregister_dmac()
418 list_del(&info->list); unregister_dmac()
419 platform_device_unregister(info->pdev); unregister_dmac()
/linux-4.1.27/drivers/md/persistent-data/
H A Ddm-bitset.c29 struct dm_disk_bitset *info) dm_disk_bitset_init()
31 dm_array_info_init(&info->array_info, tm, &bitset_bvt); dm_disk_bitset_init()
32 info->current_index_set = false; dm_disk_bitset_init()
36 int dm_bitset_empty(struct dm_disk_bitset *info, dm_block_t *root) dm_bitset_empty() argument
38 return dm_array_empty(&info->array_info, root); dm_bitset_empty()
42 int dm_bitset_resize(struct dm_disk_bitset *info, dm_block_t root, dm_bitset_resize() argument
51 return dm_array_resize(&info->array_info, root, old_blocks, new_blocks, dm_bitset_resize()
56 int dm_bitset_del(struct dm_disk_bitset *info, dm_block_t root) dm_bitset_del() argument
58 return dm_array_del(&info->array_info, root); dm_bitset_del()
62 int dm_bitset_flush(struct dm_disk_bitset *info, dm_block_t root, dm_bitset_flush() argument
68 if (!info->current_index_set || !info->dirty) dm_bitset_flush()
71 value = cpu_to_le64(info->current_bits); dm_bitset_flush()
74 r = dm_array_set_value(&info->array_info, root, info->current_index, dm_bitset_flush()
79 info->current_index_set = false; dm_bitset_flush()
80 info->dirty = false; dm_bitset_flush()
86 static int read_bits(struct dm_disk_bitset *info, dm_block_t root, read_bits() argument
92 r = dm_array_get_value(&info->array_info, root, array_index, &value); read_bits()
96 info->current_bits = le64_to_cpu(value); read_bits()
97 info->current_index_set = true; read_bits()
98 info->current_index = array_index; read_bits()
99 info->dirty = false; read_bits()
104 static int get_array_entry(struct dm_disk_bitset *info, dm_block_t root, get_array_entry() argument
110 if (info->current_index_set) { get_array_entry()
111 if (info->current_index == array_index) get_array_entry()
114 r = dm_bitset_flush(info, root, new_root); get_array_entry()
119 return read_bits(info, root, array_index); get_array_entry()
122 int dm_bitset_set_bit(struct dm_disk_bitset *info, dm_block_t root, dm_bitset_set_bit() argument
128 r = get_array_entry(info, root, index, new_root); dm_bitset_set_bit()
132 set_bit(b, (unsigned long *) &info->current_bits); dm_bitset_set_bit()
133 info->dirty = true; dm_bitset_set_bit()
139 int dm_bitset_clear_bit(struct dm_disk_bitset *info, dm_block_t root, dm_bitset_clear_bit() argument
145 r = get_array_entry(info, root, index, new_root); dm_bitset_clear_bit()
149 clear_bit(b, (unsigned long *) &info->current_bits); dm_bitset_clear_bit()
150 info->dirty = true; dm_bitset_clear_bit()
156 int dm_bitset_test_bit(struct dm_disk_bitset *info, dm_block_t root, dm_bitset_test_bit() argument
162 r = get_array_entry(info, root, index, new_root); dm_bitset_test_bit()
166 *result = test_bit(b, (unsigned long *) &info->current_bits); dm_bitset_test_bit()
28 dm_disk_bitset_init(struct dm_transaction_manager *tm, struct dm_disk_bitset *info) dm_disk_bitset_init() argument
/linux-4.1.27/drivers/scsi/arm/
H A Dfas216.c18 * FAS216_Info info;
142 static inline unsigned char fas216_readb(FAS216_Info *info, unsigned int reg) fas216_readb() argument
144 unsigned int off = reg << info->scsi.io_shift; fas216_readb()
145 return readb(info->scsi.io_base + off); fas216_readb()
148 static inline void fas216_writeb(FAS216_Info *info, unsigned int reg, unsigned int val) fas216_writeb() argument
150 unsigned int off = reg << info->scsi.io_shift; fas216_writeb()
151 writeb(val, info->scsi.io_base + off); fas216_writeb()
154 static void fas216_dumpstate(FAS216_Info *info) fas216_dumpstate() argument
158 is = fas216_readb(info, REG_IS); fas216_dumpstate()
159 stat = fas216_readb(info, REG_STAT); fas216_dumpstate()
160 inst = fas216_readb(info, REG_INST); fas216_dumpstate()
164 fas216_readb(info, REG_CTCL), fas216_dumpstate()
165 fas216_readb(info, REG_CTCM), fas216_dumpstate()
166 fas216_readb(info, REG_CMD), stat, inst, is, fas216_dumpstate()
167 fas216_readb(info, REG_CFIS)); fas216_dumpstate()
169 fas216_readb(info, REG_CNTL1), fas216_dumpstate()
170 fas216_readb(info, REG_CNTL2), fas216_dumpstate()
171 fas216_readb(info, REG_CNTL3), fas216_dumpstate()
172 fas216_readb(info, REG_CTCH)); fas216_dumpstate()
183 static void fas216_dumpinfo(FAS216_Info *info) fas216_dumpinfo() argument
193 info->magic_start, info->host, info->SCpnt, fas216_dumpinfo()
194 info->origSCpnt); fas216_dumpinfo()
196 info->scsi.io_shift, info->scsi.irq, fas216_dumpinfo()
197 info->scsi.cfg[0], info->scsi.cfg[1], info->scsi.cfg[2], fas216_dumpinfo()
198 info->scsi.cfg[3]); fas216_dumpinfo()
200 info->scsi.type, info->scsi.phase); fas216_dumpinfo()
201 print_SCp(&info->scsi.SCp, " SCp={ ", " }\n"); fas216_dumpinfo()
203 info->scsi.async_stp, fas216_dumpinfo()
204 info->scsi.disconnectable, info->scsi.aborting); fas216_dumpinfo()
207 info->stats.queues, info->stats.removes, info->stats.fins, fas216_dumpinfo()
208 info->stats.reads, info->stats.writes, info->stats.miscs, fas216_dumpinfo()
209 info->stats.disconnects, info->stats.aborts, info->stats.bus_resets, fas216_dumpinfo()
210 info->stats.host_resets); fas216_dumpinfo()
212 info->ifcfg.clockrate, info->ifcfg.select_timeout, fas216_dumpinfo()
213 info->ifcfg.asyncperiod, info->ifcfg.sync_max_depth); fas216_dumpinfo()
216 i, info->busyluns[i], i, fas216_dumpinfo()
217 info->device[i].disconnect_ok, info->device[i].stp, fas216_dumpinfo()
218 info->device[i].sof, info->device[i].sync_state); fas216_dumpinfo()
221 info->dma.transfer_type, info->dma.setup, fas216_dumpinfo()
222 info->dma.pseudo, info->dma.stop); fas216_dumpinfo()
224 info->internal_done, info->magic_end); fas216_dumpinfo()
227 static void __fas216_checkmagic(FAS216_Info *info, const char *func) __fas216_checkmagic() argument
230 if (info->magic_start != MAGIC) { __fas216_checkmagic()
234 if (info->magic_end != MAGIC) { __fas216_checkmagic()
239 fas216_dumpinfo(info); __fas216_checkmagic()
243 #define fas216_checkmagic(info) __fas216_checkmagic((info), __func__)
245 #define fas216_checkmagic(info)
260 static const char *fas216_drv_phase(FAS216_Info *info) fas216_drv_phase() argument
276 if (info->scsi.phase < ARRAY_SIZE(phases) && fas216_drv_phase()
277 phases[info->scsi.phase]) fas216_drv_phase()
278 return phases[info->scsi.phase]; fas216_drv_phase()
282 static char fas216_target(FAS216_Info *info) fas216_target() argument
284 if (info->SCpnt) fas216_target()
285 return '0' + info->SCpnt->device->id; fas216_target()
291 fas216_do_log(FAS216_Info *info, char target, char *fmt, va_list ap) fas216_do_log() argument
296 printk("scsi%d.%c: %s", info->host->host_no, target, buf); fas216_do_log()
299 static void fas216_log_command(FAS216_Info *info, int level, fas216_log_command() argument
308 fas216_do_log(info, '0' + SCpnt->device->id, fmt, args); fas216_log_command()
315 fas216_log_target(FAS216_Info *info, int level, int target, char *fmt, ...) fas216_log_target() argument
328 fas216_do_log(info, target, fmt, args); fas216_log_target()
334 static void fas216_log(FAS216_Info *info, int level, char *fmt, ...) fas216_log() argument
342 fas216_do_log(info, fas216_target(info), fmt, args); fas216_log()
366 static void fas216_cmd(FAS216_Info *info, unsigned int command) fas216_cmd() argument
373 fas216_writeb(info, REG_CMD, command); fas216_cmd()
403 static void fas216_done(FAS216_Info *info, unsigned int result);
407 * @info: interface to search
413 fas216_get_last_msg(FAS216_Info *info, int pos) fas216_get_last_msg() argument
419 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) { fas216_get_last_msg()
431 fas216_log(info, LOG_MESSAGES, fas216_get_last_msg()
439 * @info: state structure for interface connected to device
445 static int fas216_syncperiod(FAS216_Info *info, int ns) fas216_syncperiod() argument
447 int value = (info->ifcfg.clockrate * ns) / 1000; fas216_syncperiod()
449 fas216_checkmagic(info); fas216_syncperiod()
461 * @info: state structure for interface connected to device
469 static void fas216_set_sync(FAS216_Info *info, int target) fas216_set_sync() argument
473 fas216_writeb(info, REG_SOF, info->device[target].sof); fas216_set_sync()
474 fas216_writeb(info, REG_STP, info->device[target].stp); fas216_set_sync()
476 cntl3 = info->scsi.cfg[2]; fas216_set_sync()
477 if (info->device[target].period >= (200 / 4)) fas216_set_sync()
480 fas216_writeb(info, REG_CNTL3, cntl3); fas216_set_sync()
509 * @info: state structure for interface
514 static void fas216_handlesync(FAS216_Info *info, char *msg) fas216_handlesync() argument
516 struct fas216_device *dev = &info->device[info->SCpnt->device->id]; fas216_handlesync()
555 fas216_cmd(info, CMD_SETATN); fas216_handlesync()
556 if (msg[4] > info->ifcfg.sync_max_depth) fas216_handlesync()
557 msg[4] = info->ifcfg.sync_max_depth; fas216_handlesync()
558 if (msg[3] < 1000 / info->ifcfg.clockrate) fas216_handlesync()
559 msg[3] = 1000 / info->ifcfg.clockrate; fas216_handlesync()
561 msgqueue_flush(&info->scsi.msgs); fas216_handlesync()
562 msgqueue_addmsg(&info->scsi.msgs, 5, fas216_handlesync()
565 info->scsi.phase = PHASE_MSGOUT_EXPECT; fas216_handlesync()
582 if (msg[4] <= info->ifcfg.sync_max_depth && fas216_handlesync()
583 msg[3] >= 1000 / info->ifcfg.clockrate) { fas216_handlesync()
598 dev->stp = fas216_syncperiod(info, msg[3] * 4); fas216_handlesync()
599 fas216_set_sync(info, info->SCpnt->device->id); fas216_handlesync()
603 fas216_cmd(info, CMD_SETATN); fas216_handlesync()
604 msgqueue_flush(&info->scsi.msgs); fas216_handlesync()
605 msgqueue_addmsg(&info->scsi.msgs, 1, MESSAGE_REJECT); fas216_handlesync()
606 info->scsi.phase = PHASE_MSGOUT_EXPECT; fas216_handlesync()
609 dev->period = info->ifcfg.asyncperiod / 4; fas216_handlesync()
611 dev->stp = info->scsi.async_stp; fas216_handlesync()
612 fas216_set_sync(info, info->SCpnt->device->id); fas216_handlesync()
622 * @info: interface's local pointer to update
627 static void fas216_updateptrs(FAS216_Info *info, int bytes_transferred) fas216_updateptrs() argument
629 struct scsi_pointer *SCp = &info->scsi.SCp; fas216_updateptrs()
631 fas216_checkmagic(info); fas216_updateptrs()
647 info->host->host_no, '0' + info->SCpnt->device->id); fas216_updateptrs()
661 * @info: interface to transfer data to/from
667 static void fas216_pio(FAS216_Info *info, fasdmadir_t direction) fas216_pio() argument
669 struct scsi_pointer *SCp = &info->scsi.SCp; fas216_pio()
671 fas216_checkmagic(info); fas216_pio()
674 fas216_writeb(info, REG_FF, get_next_SCp_byte(SCp)); fas216_pio()
676 put_next_SCp_byte(SCp, fas216_readb(info, REG_FF)); fas216_pio()
682 static void fas216_set_stc(FAS216_Info *info, unsigned int length) fas216_set_stc() argument
684 fas216_writeb(info, REG_STCL, length); fas216_set_stc()
685 fas216_writeb(info, REG_STCM, length >> 8); fas216_set_stc()
686 fas216_writeb(info, REG_STCH, length >> 16); fas216_set_stc()
689 static unsigned int fas216_get_ctc(FAS216_Info *info) fas216_get_ctc() argument
691 return fas216_readb(info, REG_CTCL) + fas216_get_ctc()
692 (fas216_readb(info, REG_CTCM) << 8) + fas216_get_ctc()
693 (fas216_readb(info, REG_CTCH) << 16); fas216_get_ctc()
698 * @info: interface to clean up
703 static void fas216_cleanuptransfer(FAS216_Info *info) fas216_cleanuptransfer() argument
706 fasdmatype_t dmatype = info->dma.transfer_type; fas216_cleanuptransfer()
708 info->dma.transfer_type = fasdma_none; fas216_cleanuptransfer()
717 total = info->scsi.SCp.phase; fas216_cleanuptransfer()
719 total = info->scsi.SCp.this_residual; fas216_cleanuptransfer()
721 residual = fas216_get_ctc(info); fas216_cleanuptransfer()
723 fifo = fas216_readb(info, REG_CFIS) & CFIS_CF; fas216_cleanuptransfer()
725 fas216_log(info, LOG_BUFFER, "cleaning up from previous " fas216_cleanuptransfer()
735 if (info->scsi.phase == PHASE_DATAOUT) fas216_cleanuptransfer()
738 fas216_updateptrs(info, total - residual); fas216_cleanuptransfer()
743 * @info: interface from which device disconnected from
747 static void fas216_transfer(FAS216_Info *info) fas216_transfer() argument
752 fas216_log(info, LOG_BUFFER, fas216_transfer()
754 info->scsi.SCp.ptr, info->scsi.SCp.this_residual, fas216_transfer()
755 info->scsi.SCp.phase); fas216_transfer()
757 if (!info->scsi.SCp.ptr) { fas216_transfer()
758 fas216_log(info, LOG_ERROR, "null buffer passed to " fas216_transfer()
760 print_SCp(&info->scsi.SCp, "SCp: ", "\n"); fas216_transfer()
761 print_SCp(&info->SCpnt->SCp, "Cmnd SCp: ", "\n"); fas216_transfer()
770 if (info->device[info->SCpnt->device->id].sof) fas216_transfer()
775 if (info->scsi.phase == PHASE_DATAOUT) fas216_transfer()
780 if (info->dma.setup) fas216_transfer()
781 dmatype = info->dma.setup(info->host, &info->scsi.SCp, fas216_transfer()
783 info->dma.transfer_type = dmatype; fas216_transfer()
786 fas216_set_stc(info, info->scsi.SCp.phase); fas216_transfer()
788 fas216_set_stc(info, info->scsi.SCp.this_residual); fas216_transfer()
792 fas216_log(info, LOG_BUFFER, "PIO transfer"); fas216_transfer()
793 fas216_writeb(info, REG_SOF, 0); fas216_transfer()
794 fas216_writeb(info, REG_STP, info->scsi.async_stp); fas216_transfer()
795 fas216_cmd(info, CMD_TRANSFERINFO); fas216_transfer()
796 fas216_pio(info, direction); fas216_transfer()
800 fas216_log(info, LOG_BUFFER, "pseudo transfer"); fas216_transfer()
801 fas216_cmd(info, CMD_TRANSFERINFO | CMD_WITHDMA); fas216_transfer()
802 info->dma.pseudo(info->host, &info->scsi.SCp, fas216_transfer()
803 direction, info->SCpnt->transfersize); fas216_transfer()
807 fas216_log(info, LOG_BUFFER, "block dma transfer"); fas216_transfer()
808 fas216_cmd(info, CMD_TRANSFERINFO | CMD_WITHDMA); fas216_transfer()
812 fas216_log(info, LOG_BUFFER, "total dma transfer"); fas216_transfer()
813 fas216_cmd(info, CMD_TRANSFERINFO | CMD_WITHDMA); fas216_transfer()
817 fas216_log(info, LOG_BUFFER | LOG_ERROR, fas216_transfer()
825 * @info: interface from which device disconnected from
829 static void fas216_stoptransfer(FAS216_Info *info) fas216_stoptransfer() argument
831 fas216_checkmagic(info); fas216_stoptransfer()
833 if (info->dma.transfer_type == fasdma_real_all || fas216_stoptransfer()
834 info->dma.transfer_type == fasdma_real_block) fas216_stoptransfer()
835 info->dma.stop(info->host, &info->scsi.SCp); fas216_stoptransfer()
837 fas216_cleanuptransfer(info); fas216_stoptransfer()
839 if (info->scsi.phase == PHASE_DATAIN) { fas216_stoptransfer()
847 fifo = fas216_readb(info, REG_CFIS) & CFIS_CF; fas216_stoptransfer()
848 while (fifo && info->scsi.SCp.ptr) { fas216_stoptransfer()
849 *info->scsi.SCp.ptr = fas216_readb(info, REG_FF); fas216_stoptransfer()
850 fas216_updateptrs(info, 1); fas216_stoptransfer()
858 fas216_cmd(info, CMD_FLUSHFIFO); fas216_stoptransfer()
862 static void fas216_aborttransfer(FAS216_Info *info) fas216_aborttransfer() argument
864 fas216_checkmagic(info); fas216_aborttransfer()
866 if (info->dma.transfer_type == fasdma_real_all || fas216_aborttransfer()
867 info->dma.transfer_type == fasdma_real_block) fas216_aborttransfer()
868 info->dma.stop(info->host, &info->scsi.SCp); fas216_aborttransfer()
870 info->dma.transfer_type = fasdma_none; fas216_aborttransfer()
871 fas216_cmd(info, CMD_FLUSHFIFO); fas216_aborttransfer()
874 static void fas216_kick(FAS216_Info *info);
878 * @info: interface from which device disconnected from
882 static void fas216_disconnect_intr(FAS216_Info *info) fas216_disconnect_intr() argument
886 fas216_checkmagic(info); fas216_disconnect_intr()
888 fas216_log(info, LOG_CONNECT, "disconnect phase=%02x", fas216_disconnect_intr()
889 info->scsi.phase); fas216_disconnect_intr()
891 msgqueue_flush(&info->scsi.msgs); fas216_disconnect_intr()
893 switch (info->scsi.phase) { fas216_disconnect_intr()
896 fas216_done(info, DID_NO_CONNECT); fas216_disconnect_intr()
900 info->scsi.disconnectable = 1; fas216_disconnect_intr()
901 info->scsi.phase = PHASE_IDLE; fas216_disconnect_intr()
902 info->stats.disconnects += 1; fas216_disconnect_intr()
903 spin_lock_irqsave(&info->host_lock, flags); fas216_disconnect_intr()
904 if (info->scsi.phase == PHASE_IDLE) fas216_disconnect_intr()
905 fas216_kick(info); fas216_disconnect_intr()
906 spin_unlock_irqrestore(&info->host_lock, flags); fas216_disconnect_intr()
910 fas216_done(info, DID_OK); fas216_disconnect_intr()
914 if (fas216_get_last_msg(info, info->scsi.msgin_fifo) == ABORT) { fas216_disconnect_intr()
915 info->scsi.aborting = 0; fas216_disconnect_intr()
916 fas216_done(info, DID_ABORT); fas216_disconnect_intr()
922 info->host->host_no, fas216_target(info), fas216_drv_phase(info)); fas216_disconnect_intr()
924 fas216_stoptransfer(info); fas216_disconnect_intr()
925 fas216_done(info, DID_ERROR); fas216_disconnect_intr()
932 * @info: interface which was reselected
937 fas216_reselected_intr(FAS216_Info *info) fas216_reselected_intr() argument
943 fas216_checkmagic(info); fas216_reselected_intr()
945 WARN_ON(info->scsi.phase == PHASE_SELECTION || fas216_reselected_intr()
946 info->scsi.phase == PHASE_SELSTEPS); fas216_reselected_intr()
948 cfis = fas216_readb(info, REG_CFIS); fas216_reselected_intr()
950 fas216_log(info, LOG_CONNECT, "reconnect phase=%02x cfis=%02x", fas216_reselected_intr()
951 info->scsi.phase, cfis); fas216_reselected_intr()
957 info->host->host_no); fas216_reselected_intr()
962 msg[i] = fas216_readb(info, REG_FF); fas216_reselected_intr()
964 if (!(msg[0] & (1 << info->host->this_id)) || fas216_reselected_intr()
968 target = msg[0] & ~(1 << info->host->this_id); fas216_reselected_intr()
981 fas216_writeb(info, REG_SDID, target); fas216_reselected_intr()
982 fas216_set_sync(info, target); fas216_reselected_intr()
983 msgqueue_flush(&info->scsi.msgs); fas216_reselected_intr()
985 fas216_log(info, LOG_CONNECT, "Reconnected: target %1x lun %1x tag %02x", fas216_reselected_intr()
988 if (info->scsi.disconnectable && info->SCpnt) { fas216_reselected_intr()
989 info->scsi.disconnectable = 0; fas216_reselected_intr()
990 if (info->SCpnt->device->id == target && fas216_reselected_intr()
991 info->SCpnt->device->lun == lun && fas216_reselected_intr()
992 info->SCpnt->tag == tag) { fas216_reselected_intr()
993 fas216_log(info, LOG_CONNECT, "reconnected previously executing command"); fas216_reselected_intr()
995 queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt); fas216_reselected_intr()
996 fas216_log(info, LOG_CONNECT, "had to move command to disconnected queue"); fas216_reselected_intr()
997 info->SCpnt = NULL; fas216_reselected_intr()
1000 if (!info->SCpnt) { fas216_reselected_intr()
1001 info->SCpnt = queue_remove_tgtluntag(&info->queues.disconnected, fas216_reselected_intr()
1003 fas216_log(info, LOG_CONNECT, "had to get command"); fas216_reselected_intr()
1006 if (info->SCpnt) { fas216_reselected_intr()
1010 info->scsi.SCp = info->SCpnt->SCp; fas216_reselected_intr()
1012 fas216_log(info, LOG_CONNECT, "data pointers: [%p, %X]", fas216_reselected_intr()
1013 info->scsi.SCp.ptr, info->scsi.SCp.this_residual); fas216_reselected_intr()
1014 info->scsi.phase = PHASE_MSGIN; fas216_reselected_intr()
1022 fas216_cmd(info, CMD_SETATN); fas216_reselected_intr()
1026 msgqueue_addmsg(&info->scsi.msgs, 2, ABORT_TAG, tag); fas216_reselected_intr()
1029 msgqueue_addmsg(&info->scsi.msgs, 1, ABORT); fas216_reselected_intr()
1030 info->scsi.phase = PHASE_MSGOUT_EXPECT; fas216_reselected_intr()
1031 info->scsi.aborting = 1; fas216_reselected_intr()
1034 fas216_cmd(info, CMD_MSGACCEPTED); fas216_reselected_intr()
1039 info->host->host_no); fas216_reselected_intr()
1044 fas216_cmd(info, CMD_SETATN); fas216_reselected_intr()
1045 msgqueue_flush(&info->scsi.msgs); fas216_reselected_intr()
1046 msgqueue_addmsg(&info->scsi.msgs, 1, INITIATOR_ERROR); fas216_reselected_intr()
1047 info->scsi.phase = PHASE_MSGOUT_EXPECT; fas216_reselected_intr()
1048 fas216_cmd(info, CMD_MSGACCEPTED); fas216_reselected_intr()
1051 static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int msglen) fas216_parse_message() argument
1062 info->host->host_no, fas216_target(info)); fas216_parse_message()
1077 info->SCpnt->SCp = info->scsi.SCp; fas216_parse_message()
1078 info->SCpnt->SCp.sent_command = 0; fas216_parse_message()
1079 fas216_log(info, LOG_CONNECT | LOG_MESSAGES | LOG_BUFFER, fas216_parse_message()
1081 info->scsi.SCp.ptr, info->scsi.SCp.this_residual); fas216_parse_message()
1091 info->scsi.SCp = info->SCpnt->SCp; fas216_parse_message()
1092 fas216_log(info, LOG_CONNECT | LOG_MESSAGES | LOG_BUFFER, fas216_parse_message()
1094 info->scsi.SCp.ptr, info->scsi.SCp.this_residual); fas216_parse_message()
1101 info->scsi.phase = PHASE_MSGIN_DISCONNECT; fas216_parse_message()
1108 switch (fas216_get_last_msg(info, info->scsi.msgin_fifo)) { fas216_parse_message()
1110 fas216_handlesync(info, message); fas216_parse_message()
1114 fas216_log(info, 0, "reject, last message 0x%04x", fas216_parse_message()
1115 fas216_get_last_msg(info, info->scsi.msgin_fifo)); fas216_parse_message()
1128 fas216_handlesync(info, message); fas216_parse_message()
1142 fas216_log(info, 0, "unrecognised message, rejecting"); fas216_parse_message()
1143 printk("scsi%d.%c: message was", info->host->host_no, fas216_target(info)); fas216_parse_message()
1153 fas216_cmd(info, CMD_NOP); fas216_parse_message()
1154 fas216_dumpstate(info); fas216_parse_message()
1155 fas216_cmd(info, CMD_SETATN); fas216_parse_message()
1156 msgqueue_flush(&info->scsi.msgs); fas216_parse_message()
1157 msgqueue_addmsg(&info->scsi.msgs, 1, MESSAGE_REJECT); fas216_parse_message()
1158 info->scsi.phase = PHASE_MSGOUT_EXPECT; fas216_parse_message()
1159 fas216_dumpstate(info); fas216_parse_message()
1162 static int fas216_wait_cmd(FAS216_Info *info, int cmd) fas216_wait_cmd() argument
1167 fas216_cmd(info, cmd); fas216_wait_cmd()
1170 stat = fas216_readb(info, REG_STAT); fas216_wait_cmd()
1179 static int fas216_get_msg_byte(FAS216_Info *info) fas216_get_msg_byte() argument
1181 unsigned int stat = fas216_wait_cmd(info, CMD_MSGACCEPTED); fas216_get_msg_byte()
1189 fas216_readb(info, REG_INST); fas216_get_msg_byte()
1191 stat = fas216_wait_cmd(info, CMD_TRANSFERINFO); fas216_get_msg_byte()
1202 fas216_readb(info, REG_INST); fas216_get_msg_byte()
1204 return fas216_readb(info, REG_FF); fas216_get_msg_byte()
1207 fas216_log(info, LOG_ERROR, "timed out waiting for message byte"); fas216_get_msg_byte()
1211 fas216_log(info, LOG_ERROR, "unexpected phase change: status = %02x", stat); fas216_get_msg_byte()
1215 fas216_log(info, LOG_ERROR, "parity error during message in phase"); fas216_get_msg_byte()
1221 * @info: interface which caused function done interrupt
1225 static void fas216_message(FAS216_Info *info) fas216_message() argument
1227 unsigned char *message = info->scsi.message; fas216_message()
1231 fas216_checkmagic(info); fas216_message()
1233 message[0] = fas216_readb(info, REG_FF); fas216_message()
1236 msgbyte = fas216_get_msg_byte(info); fas216_message()
1242 msgbyte = fas216_get_msg_byte(info); fas216_message()
1260 info->host->host_no, fas216_target(info)); fas216_message()
1267 fas216_parse_message(info, message, msglen); fas216_message()
1268 fas216_cmd(info, CMD_MSGACCEPTED); fas216_message()
1272 fas216_cmd(info, CMD_SETATN); fas216_message()
1273 msgqueue_flush(&info->scsi.msgs); fas216_message()
1274 msgqueue_addmsg(&info->scsi.msgs, 1, MSG_PARITY_ERROR); fas216_message()
1275 info->scsi.phase = PHASE_MSGOUT_EXPECT; fas216_message()
1276 fas216_cmd(info, CMD_MSGACCEPTED); fas216_message()
1282 * @info: interface which caused bus service
1286 static void fas216_send_command(FAS216_Info *info) fas216_send_command() argument
1290 fas216_checkmagic(info); fas216_send_command()
1292 fas216_cmd(info, CMD_NOP|CMD_WITHDMA); fas216_send_command()
1293 fas216_cmd(info, CMD_FLUSHFIFO); fas216_send_command()
1296 for (i = info->scsi.SCp.sent_command; i < info->SCpnt->cmd_len; i++) fas216_send_command()
1297 fas216_writeb(info, REG_FF, info->SCpnt->cmnd[i]); fas216_send_command()
1299 fas216_cmd(info, CMD_TRANSFERINFO); fas216_send_command()
1301 info->scsi.phase = PHASE_COMMAND; fas216_send_command()
1306 * @info: interface which caused bus service
1311 static void fas216_send_messageout(FAS216_Info *info, int start) fas216_send_messageout() argument
1313 unsigned int tot_msglen = msgqueue_msglength(&info->scsi.msgs); fas216_send_messageout()
1315 fas216_checkmagic(info); fas216_send_messageout()
1317 fas216_cmd(info, CMD_FLUSHFIFO); fas216_send_messageout()
1323 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) { fas216_send_messageout()
1327 fas216_writeb(info, REG_FF, msg->msg[i]); fas216_send_messageout()
1329 msg->fifo = tot_msglen - (fas216_readb(info, REG_CFIS) & CFIS_CF); fas216_send_messageout()
1333 fas216_writeb(info, REG_FF, NOP); fas216_send_messageout()
1335 fas216_cmd(info, CMD_TRANSFERINFO); fas216_send_messageout()
1337 info->scsi.phase = PHASE_MSGOUT; fas216_send_messageout()
1342 * @info: interface which caused bus service interrupt
1348 static void fas216_busservice_intr(FAS216_Info *info, unsigned int stat, unsigned int is) fas216_busservice_intr() argument
1350 fas216_checkmagic(info); fas216_busservice_intr()
1352 fas216_log(info, LOG_BUSSERVICE, fas216_busservice_intr()
1354 stat, is, info->scsi.phase); fas216_busservice_intr()
1356 switch (info->scsi.phase) { fas216_busservice_intr()
1382 fas216_cmd(info, CMD_NOP); fas216_busservice_intr()
1388 switch (STATE(stat & STAT_BUSMASK, info->scsi.phase)) { fas216_busservice_intr()
1393 info->scsi.phase = PHASE_DATAIN; fas216_busservice_intr()
1394 fas216_transfer(info); fas216_busservice_intr()
1399 fas216_cleanuptransfer(info); fas216_busservice_intr()
1400 fas216_transfer(info); fas216_busservice_intr()
1407 fas216_cmd(info, CMD_FLUSHFIFO); fas216_busservice_intr()
1408 info->scsi.phase = PHASE_DATAOUT; fas216_busservice_intr()
1409 fas216_transfer(info); fas216_busservice_intr()
1414 fas216_stoptransfer(info); fas216_busservice_intr()
1419 fas216_cmd(info, CMD_INITCMDCOMPLETE); fas216_busservice_intr()
1420 info->scsi.phase = PHASE_STATUS; fas216_busservice_intr()
1425 fas216_stoptransfer(info); fas216_busservice_intr()
1429 info->scsi.msgin_fifo = fas216_readb(info, REG_CFIS) & CFIS_CF; fas216_busservice_intr()
1430 fas216_cmd(info, CMD_FLUSHFIFO); fas216_busservice_intr()
1431 fas216_cmd(info, CMD_TRANSFERINFO); fas216_busservice_intr()
1432 info->scsi.phase = PHASE_MSGIN; fas216_busservice_intr()
1436 info->scsi.msgin_fifo = fas216_readb(info, REG_CFIS) & CFIS_CF; fas216_busservice_intr()
1437 fas216_cmd(info, CMD_TRANSFERINFO); fas216_busservice_intr()
1442 fas216_send_command(info); fas216_busservice_intr()
1443 info->scsi.phase = PHASE_COMMAND; fas216_busservice_intr()
1451 fas216_send_messageout(info, 1); fas216_busservice_intr()
1465 if (info->device[info->SCpnt->device->id].parity_check) { STATE()
1470 info->device[info->SCpnt->device->id].parity_check = 0; STATE()
1471 info->device[info->SCpnt->device->id].parity_enabled = 1; STATE()
1472 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]); STATE()
1475 if (msgqueue_msglength(&info->scsi.msgs) > 1)
1476 fas216_cmd(info, CMD_SETATN);
1483 fas216_send_messageout(info, 0);
1499 info->host->host_no, fas216_target(info));
1500 fas216_cmd(info, CMD_SETATN);
1501 fas216_set_stc(info, 15);
1502 fas216_cmd(info, CMD_PADBYTES | CMD_WITHDMA);
1503 msgqueue_flush(&info->scsi.msgs);
1504 msgqueue_addmsg(&info->scsi.msgs, 1, INITIATOR_ERROR);
1505 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1509 if (info->scsi.phase == PHASE_MSGIN_DISCONNECT) {
1511 info->host->host_no, fas216_target(info),
1513 msgqueue_flush(&info->scsi.msgs);
1514 fas216_cmd(info, CMD_SETATN);
1515 msgqueue_addmsg(&info->scsi.msgs, 1, INITIATOR_ERROR);
1516 info->scsi.phase = PHASE_MSGOUT_EXPECT;
1517 info->scsi.aborting = 1;
1518 fas216_cmd(info, CMD_TRANSFERINFO);
1522 info->host->host_no, fas216_target(info),
1524 fas216_drv_phase(info));
1529 fas216_log(info, 0, "bus service at step %d?", is & IS_BITS);
1530 fas216_dumpstate(info);
1533 fas216_done(info, DID_ERROR);
1538 * @info: interface which caused function done interrupt
1544 static void fas216_funcdone_intr(FAS216_Info *info, unsigned int stat, unsigned int is) fas216_funcdone_intr() argument
1546 unsigned int fifo_len = fas216_readb(info, REG_CFIS) & CFIS_CF; fas216_funcdone_intr()
1548 fas216_checkmagic(info); fas216_funcdone_intr()
1550 fas216_log(info, LOG_FUNCTIONDONE, fas216_funcdone_intr()
1552 stat, is, info->scsi.phase); fas216_funcdone_intr()
1554 switch (info->scsi.phase) { fas216_funcdone_intr()
1557 fas216_log(info, 0, "odd number of bytes in FIFO: %d", fifo_len); fas216_funcdone_intr()
1562 info->scsi.SCp.Status = fas216_readb(info, REG_FF); fas216_funcdone_intr()
1563 info->scsi.SCp.Message = fas216_readb(info, REG_FF); fas216_funcdone_intr()
1564 info->scsi.phase = PHASE_DONE; fas216_funcdone_intr()
1565 fas216_cmd(info, CMD_MSGACCEPTED); fas216_funcdone_intr()
1575 info->scsi.msgin_fifo = fifo_len; fas216_funcdone_intr()
1576 fas216_message(info); fas216_funcdone_intr()
1581 fas216_log(info, 0, "internal phase %s for function done?" fas216_funcdone_intr()
1583 fas216_target(info), fas216_drv_phase(info)); fas216_funcdone_intr()
1587 static void fas216_bus_reset(FAS216_Info *info) fas216_bus_reset() argument
1592 msgqueue_flush(&info->scsi.msgs); fas216_bus_reset()
1597 if (info->ifcfg.capabilities & (FASCAP_DMA|FASCAP_PSEUDODMA)) fas216_bus_reset()
1601 info->scsi.phase = PHASE_IDLE; fas216_bus_reset()
1602 info->SCpnt = NULL; /* bug! */ fas216_bus_reset()
1603 memset(&info->scsi.SCp, 0, sizeof(info->scsi.SCp)); fas216_bus_reset()
1606 info->device[i].disconnect_ok = info->ifcfg.disconnect_ok; fas216_bus_reset()
1607 info->device[i].sync_state = sync_state; fas216_bus_reset()
1608 info->device[i].period = info->ifcfg.asyncperiod / 4; fas216_bus_reset()
1609 info->device[i].stp = info->scsi.async_stp; fas216_bus_reset()
1610 info->device[i].sof = 0; fas216_bus_reset()
1611 info->device[i].wide_xfer = 0; fas216_bus_reset()
1614 info->rst_bus_status = 1; fas216_bus_reset()
1615 wake_up(&info->eh_wait); fas216_bus_reset()
1620 * @info: interface to service
1624 irqreturn_t fas216_intr(FAS216_Info *info) fas216_intr() argument
1629 fas216_checkmagic(info); fas216_intr()
1631 stat = fas216_readb(info, REG_STAT); fas216_intr()
1632 is = fas216_readb(info, REG_IS); fas216_intr()
1633 inst = fas216_readb(info, REG_INST); fas216_intr()
1635 add_debug_list(stat, is, inst, info->scsi.phase); fas216_intr()
1639 fas216_log(info, 0, "bus reset detected"); fas216_intr()
1640 fas216_bus_reset(info); fas216_intr()
1641 scsi_report_bus_reset(info->host, 0); fas216_intr()
1643 fas216_log(info, LOG_ERROR, "illegal command given\n"); fas216_intr()
1644 fas216_dumpstate(info); fas216_intr()
1647 fas216_disconnect_intr(info); fas216_intr()
1649 fas216_reselected_intr(info); fas216_intr()
1651 fas216_busservice_intr(info, stat, is); fas216_intr()
1653 fas216_funcdone_intr(info, stat, is); fas216_intr()
1655 fas216_log(info, 0, "unknown interrupt received:" fas216_intr()
1657 fas216_drv_phase(info), inst, is, stat); fas216_intr()
1663 static void __fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt) __fas216_start_command() argument
1668 fas216_set_stc(info, 0); __fas216_start_command()
1669 fas216_cmd(info, CMD_NOP | CMD_WITHDMA); __fas216_start_command()
1672 fas216_cmd(info, CMD_FLUSHFIFO); __fas216_start_command()
1675 fas216_writeb(info, REG_SDID, BUSID(SCpnt->device->id)); __fas216_start_command()
1676 fas216_writeb(info, REG_STIM, info->ifcfg.select_timeout); __fas216_start_command()
1679 fas216_set_sync(info, SCpnt->device->id); __fas216_start_command()
1681 tot_msglen = msgqueue_msglength(&info->scsi.msgs); __fas216_start_command()
1689 info->host->host_no, '0' + SCpnt->device->id); __fas216_start_command()
1690 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) { __fas216_start_command()
1707 info->scsi.phase = PHASE_SELSTEPS; __fas216_start_command()
1710 while ((msg = msgqueue_getmsg(&info->scsi.msgs, msgnr++)) != NULL) { __fas216_start_command()
1712 fas216_writeb(info, REG_FF, msg->msg[i]); __fas216_start_command()
1713 msg->fifo = tot_msglen - (fas216_readb(info, REG_CFIS) & CFIS_CF); __fas216_start_command()
1718 fas216_writeb(info, REG_FF, SCpnt->cmnd[i]); __fas216_start_command()
1721 fas216_cmd(info, CMD_SELECTATN); __fas216_start_command()
1723 fas216_cmd(info, CMD_SELECTATN3); __fas216_start_command()
1730 struct message *msg = msgqueue_getmsg(&info->scsi.msgs, 0); __fas216_start_command()
1732 fas216_writeb(info, REG_FF, msg->msg[0]); __fas216_start_command()
1735 fas216_cmd(info, CMD_SELECTATNSTOP); __fas216_start_command()
1744 static int parity_test(FAS216_Info *info, int target) parity_test() argument
1748 info->device[target].parity_check = 0; parity_test()
1752 return info->device[target].parity_check; parity_test()
1755 static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt) fas216_start_command() argument
1762 info->scsi.phase = PHASE_SELECTION; fas216_start_command()
1763 info->scsi.SCp = SCpnt->SCp; fas216_start_command()
1764 info->SCpnt = SCpnt; fas216_start_command()
1765 info->dma.transfer_type = fasdma_none; fas216_start_command()
1767 if (parity_test(info, SCpnt->device->id)) fas216_start_command()
1768 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0] | CNTL1_PTE); fas216_start_command()
1770 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]); fas216_start_command()
1776 info->device[SCpnt->device->id].disconnect_ok; fas216_start_command()
1781 msgqueue_flush(&info->scsi.msgs); fas216_start_command()
1782 msgqueue_addmsg(&info->scsi.msgs, 1, IDENTIFY(disconnect_ok, SCpnt->device->lun)); fas216_start_command()
1788 msgqueue_addmsg(&info->scsi.msgs, 2, SIMPLE_QUEUE_TAG, SCpnt->tag); fas216_start_command()
1792 if ((info->device[SCpnt->device->id].sync_state == neg_wait || fas216_start_command()
1793 info->device[SCpnt->device->id].sync_state == neg_complete) && fas216_start_command()
1796 info->device[SCpnt->device->id].sync_state = neg_inprogress; fas216_start_command()
1797 msgqueue_addmsg(&info->scsi.msgs, 5, fas216_start_command()
1799 1000 / info->ifcfg.clockrate, fas216_start_command()
1800 info->ifcfg.sync_max_depth); fas216_start_command()
1806 __fas216_start_command(info, SCpnt); fas216_start_command()
1809 static void fas216_allocate_tag(FAS216_Info *info, struct scsi_cmnd *SCpnt) fas216_allocate_tag() argument
1824 (u8)(SCpnt->device->lun & 0x7), info->busyluns); fas216_allocate_tag()
1826 info->stats.removes += 1; fas216_allocate_tag()
1831 info->stats.writes += 1; fas216_allocate_tag()
1836 info->stats.reads += 1; fas216_allocate_tag()
1839 info->stats.miscs += 1; fas216_allocate_tag()
1844 static void fas216_do_bus_device_reset(FAS216_Info *info, fas216_do_bus_device_reset() argument
1852 info->scsi.phase = PHASE_SELECTION; fas216_do_bus_device_reset()
1853 info->scsi.SCp = SCpnt->SCp; fas216_do_bus_device_reset()
1854 info->SCpnt = SCpnt; fas216_do_bus_device_reset()
1855 info->dma.transfer_type = fasdma_none; fas216_do_bus_device_reset()
1857 fas216_log(info, LOG_ERROR, "sending bus device reset"); fas216_do_bus_device_reset()
1859 msgqueue_flush(&info->scsi.msgs); fas216_do_bus_device_reset()
1860 msgqueue_addmsg(&info->scsi.msgs, 1, BUS_DEVICE_RESET); fas216_do_bus_device_reset()
1863 fas216_set_stc(info, 0); fas216_do_bus_device_reset()
1864 fas216_cmd(info, CMD_NOP | CMD_WITHDMA); fas216_do_bus_device_reset()
1867 fas216_cmd(info, CMD_FLUSHFIFO); fas216_do_bus_device_reset()
1870 fas216_writeb(info, REG_SDID, BUSID(SCpnt->device->id)); fas216_do_bus_device_reset()
1871 fas216_writeb(info, REG_STIM, info->ifcfg.select_timeout); fas216_do_bus_device_reset()
1874 fas216_set_sync(info, SCpnt->device->id); fas216_do_bus_device_reset()
1876 msg = msgqueue_getmsg(&info->scsi.msgs, 0); fas216_do_bus_device_reset()
1878 fas216_writeb(info, REG_FF, BUS_DEVICE_RESET); fas216_do_bus_device_reset()
1881 fas216_cmd(info, CMD_SELECTATNSTOP); fas216_do_bus_device_reset()
1886 * @info: our host interface to kick
1891 static void fas216_kick(FAS216_Info *info) fas216_kick() argument
1899 fas216_checkmagic(info); fas216_kick()
1905 if (info->rstSCpnt) { fas216_kick()
1906 SCpnt = info->rstSCpnt; fas216_kick()
1912 if (info->reqSCpnt) { fas216_kick()
1913 SCpnt = info->reqSCpnt; fas216_kick()
1914 info->reqSCpnt = NULL; fas216_kick()
1918 if (info->origSCpnt) { fas216_kick()
1919 SCpnt = info->origSCpnt; fas216_kick()
1920 info->origSCpnt = NULL; fas216_kick()
1926 SCpnt = queue_remove_exclude(&info->queues.issue, fas216_kick()
1927 info->busyluns); fas216_kick()
1937 fas216_cmd(info, CMD_ENABLESEL); fas216_kick()
1944 fas216_cmd(info, CMD_DISABLESEL); fas216_kick()
1946 if (info->scsi.disconnectable && info->SCpnt) { fas216_kick()
1947 fas216_log(info, LOG_CONNECT, fas216_kick()
1949 info->SCpnt->device->id); fas216_kick()
1950 queue_add_cmd_tail(&info->queues.disconnected, info->SCpnt); fas216_kick()
1951 info->scsi.disconnectable = 0; fas216_kick()
1952 info->SCpnt = NULL; fas216_kick()
1955 fas216_log_command(info, LOG_CONNECT | LOG_MESSAGES, SCpnt, fas216_kick()
1960 fas216_allocate_tag(info, SCpnt); fas216_kick()
1962 fas216_start_command(info, SCpnt); fas216_kick()
1965 fas216_do_bus_device_reset(info, SCpnt); fas216_kick()
1969 fas216_log(info, LOG_CONNECT, "select: data pointers [%p, %X]", fas216_kick()
1970 info->scsi.SCp.ptr, info->scsi.SCp.this_residual); fas216_kick()
1981 static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, fas216_devicereset_done() argument
1984 fas216_log(info, LOG_ERROR, "fas216 device reset complete"); fas216_devicereset_done()
1986 info->rstSCpnt = NULL; fas216_devicereset_done()
1987 info->rst_dev_status = 1; fas216_devicereset_done()
1988 wake_up(&info->eh_wait); fas216_devicereset_done()
1993 * @info: interface that completed
1999 static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, fas216_rq_sns_done() argument
2002 fas216_log_target(info, LOG_CONNECT, SCpnt->device->id, fas216_rq_sns_done()
2013 //printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->device->id); fas216_rq_sns_done()
2021 scsi_eh_restore_cmnd(SCpnt, &info->ses); fas216_rq_sns_done()
2027 * @info: interface that completed
2034 fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result) fas216_std_done() argument
2036 info->stats.fins += 1; fas216_std_done()
2038 SCpnt->result = result << 16 | info->scsi.SCp.Message << 8 | fas216_std_done()
2039 info->scsi.SCp.Status; fas216_std_done()
2041 fas216_log_command(info, LOG_CONNECT, SCpnt, fas216_std_done()
2073 if (info->scsi.SCp.ptr) { fas216_std_done()
2083 SCpnt->result, info->scsi.SCp.ptr, fas216_std_done()
2084 info->scsi.SCp.this_residual); fas216_std_done()
2098 info->host->host_no); fas216_std_done()
2105 scsi_eh_prep_cmnd(SCpnt, &info->ses, NULL, 0, ~0); fas216_std_done()
2106 fas216_log_target(info, LOG_CONNECT, SCpnt->device->id, fas216_std_done()
2119 if (info->reqSCpnt) fas216_std_done()
2121 info->host->host_no, '0' + SCpnt->device->id); fas216_std_done()
2122 info->reqSCpnt = SCpnt; fas216_std_done()
2127 * @info: interface that completed
2132 static void fas216_done(FAS216_Info *info, unsigned int result) fas216_done() argument
2138 fas216_checkmagic(info); fas216_done()
2140 if (!info->SCpnt) fas216_done()
2143 SCpnt = info->SCpnt; fas216_done()
2144 info->SCpnt = NULL; fas216_done()
2145 info->scsi.phase = PHASE_IDLE; fas216_done()
2147 if (info->scsi.aborting) { fas216_done()
2148 fas216_log(info, 0, "uncaught abort - returning DID_ABORT"); fas216_done()
2150 info->scsi.aborting = 0; fas216_done()
2157 if (info->scsi.SCp.ptr && info->scsi.SCp.this_residual == 0) { fas216_done()
2160 info->scsi.SCp.ptr, info->scsi.SCp.this_residual); fas216_done()
2161 info->scsi.SCp.ptr = NULL; fas216_done()
2170 info->device[SCpnt->device->id].parity_check = 0; fas216_done()
2172 (u8)(SCpnt->device->lun & 0x7), info->busyluns); fas216_done()
2175 fn(info, SCpnt, result); fas216_done()
2177 if (info->scsi.irq) { fas216_done()
2178 spin_lock_irqsave(&info->host_lock, flags); fas216_done()
2179 if (info->scsi.phase == PHASE_IDLE) fas216_done()
2180 fas216_kick(info); fas216_done()
2181 spin_unlock_irqrestore(&info->host_lock, flags); fas216_done()
2187 info->host->host_no); fas216_done()
2202 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_queue_command_lck() local
2205 fas216_checkmagic(info); fas216_queue_command_lck()
2207 fas216_log_command(info, LOG_CONNECT, SCpnt, fas216_queue_command_lck()
2216 info->stats.queues += 1; fas216_queue_command_lck()
2219 spin_lock(&info->host_lock); fas216_queue_command_lck()
2225 result = !queue_add_cmd_ordered(&info->queues.issue, SCpnt); fas216_queue_command_lck()
2231 if (result == 0 && info->scsi.phase == PHASE_IDLE) fas216_queue_command_lck()
2232 fas216_kick(info); fas216_queue_command_lck()
2233 spin_unlock(&info->host_lock); fas216_queue_command_lck()
2235 fas216_log_target(info, LOG_CONNECT, -1, "queue %s", fas216_queue_command_lck()
2251 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_internal_done() local
2253 fas216_checkmagic(info); fas216_internal_done()
2255 info->internal_done = 1; fas216_internal_done()
2269 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_noqueue_command_lck() local
2271 fas216_checkmagic(info); fas216_noqueue_command_lck()
2277 BUG_ON(info->scsi.irq); fas216_noqueue_command_lck()
2279 info->internal_done = 0; fas216_noqueue_command_lck()
2288 spin_unlock_irq(info->host->host_lock); fas216_noqueue_command_lck()
2290 while (!info->internal_done) { fas216_noqueue_command_lck()
2299 if (fas216_readb(info, REG_STAT) & STAT_INT) { fas216_noqueue_command_lck()
2300 spin_lock_irq(info->host->host_lock); fas216_noqueue_command_lck()
2301 fas216_intr(info); fas216_noqueue_command_lck()
2302 spin_unlock_irq(info->host->host_lock); fas216_noqueue_command_lck()
2306 spin_lock_irq(info->host->host_lock); fas216_noqueue_command_lck()
2321 FAS216_Info *info = (FAS216_Info *)data; fas216_eh_timer() local
2323 fas216_log(info, LOG_ERROR, "error handling timed out\n"); fas216_eh_timer()
2325 del_timer(&info->eh_timer); fas216_eh_timer()
2327 if (info->rst_bus_status == 0) fas216_eh_timer()
2328 info->rst_bus_status = -1; fas216_eh_timer()
2329 if (info->rst_dev_status == 0) fas216_eh_timer()
2330 info->rst_dev_status = -1; fas216_eh_timer()
2332 wake_up(&info->eh_wait); fas216_eh_timer()
2348 static enum res_find fas216_find_command(FAS216_Info *info, fas216_find_command() argument
2353 if (queue_remove_cmd(&info->queues.issue, SCpnt)) { fas216_find_command()
2363 } else if (queue_remove_cmd(&info->queues.disconnected, SCpnt)) { fas216_find_command()
2372 } else if (info->SCpnt == SCpnt) { fas216_find_command()
2375 switch (info->scsi.phase) { fas216_find_command()
2381 if (info->scsi.disconnectable) { fas216_find_command()
2382 info->scsi.disconnectable = 0; fas216_find_command()
2383 info->SCpnt = NULL; fas216_find_command()
2391 } else if (info->origSCpnt == SCpnt) { fas216_find_command()
2398 info->origSCpnt = NULL; fas216_find_command()
2400 (u8)(SCpnt->device->lun & 0x7), info->busyluns); fas216_find_command()
2419 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_eh_abort() local
2422 fas216_checkmagic(info); fas216_eh_abort()
2424 info->stats.aborts += 1; fas216_eh_abort()
2429 fas216_dumpstate(info); fas216_eh_abort()
2431 switch (fas216_find_command(info, SCpnt)) { fas216_eh_abort()
2472 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_eh_device_reset() local
2476 fas216_log(info, LOG_ERROR, "device reset for target %d", target); fas216_eh_device_reset()
2478 spin_lock_irqsave(&info->host_lock, flags); fas216_eh_device_reset()
2487 if (info->SCpnt && !info->scsi.disconnectable && fas216_eh_device_reset()
2488 info->SCpnt->device->id == SCpnt->device->id) fas216_eh_device_reset()
2497 queue_remove_all_target(&info->queues.issue, target); fas216_eh_device_reset()
2498 queue_remove_all_target(&info->queues.disconnected, target); fas216_eh_device_reset()
2499 if (info->origSCpnt && info->origSCpnt->device->id == target) fas216_eh_device_reset()
2500 info->origSCpnt = NULL; fas216_eh_device_reset()
2501 if (info->reqSCpnt && info->reqSCpnt->device->id == target) fas216_eh_device_reset()
2502 info->reqSCpnt = NULL; fas216_eh_device_reset()
2504 clear_bit(target * 8 + i, info->busyluns); fas216_eh_device_reset()
2512 info->rst_dev_status = 0; fas216_eh_device_reset()
2513 info->rstSCpnt = SCpnt; fas216_eh_device_reset()
2515 if (info->scsi.phase == PHASE_IDLE) fas216_eh_device_reset()
2516 fas216_kick(info); fas216_eh_device_reset()
2518 mod_timer(&info->eh_timer, jiffies + 30 * HZ); fas216_eh_device_reset()
2519 spin_unlock_irqrestore(&info->host_lock, flags); fas216_eh_device_reset()
2524 wait_event(info->eh_wait, info->rst_dev_status); fas216_eh_device_reset()
2526 del_timer_sync(&info->eh_timer); fas216_eh_device_reset()
2527 spin_lock_irqsave(&info->host_lock, flags); fas216_eh_device_reset()
2528 info->rstSCpnt = NULL; fas216_eh_device_reset()
2530 if (info->rst_dev_status == 1) fas216_eh_device_reset()
2535 spin_unlock_irqrestore(&info->host_lock, flags); fas216_eh_device_reset()
2537 fas216_log(info, LOG_ERROR, "device reset complete: %s\n", fas216_eh_device_reset()
2553 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_eh_bus_reset() local
2557 fas216_checkmagic(info); fas216_eh_bus_reset()
2558 fas216_log(info, LOG_ERROR, "resetting bus"); fas216_eh_bus_reset()
2560 info->stats.bus_resets += 1; fas216_eh_bus_reset()
2562 spin_lock_irqsave(&info->host_lock, flags); fas216_eh_bus_reset()
2567 fas216_aborttransfer(info); fas216_eh_bus_reset()
2568 fas216_writeb(info, REG_CNTL3, info->scsi.cfg[2]); fas216_eh_bus_reset()
2573 while (fas216_readb(info, REG_STAT) & STAT_INT) fas216_eh_bus_reset()
2574 fas216_readb(info, REG_INST); fas216_eh_bus_reset()
2576 info->rst_bus_status = 0; fas216_eh_bus_reset()
2583 shost_for_each_device(SDpnt, info->host) { fas216_eh_bus_reset()
2589 queue_remove_all_target(&info->queues.issue, SDpnt->id); fas216_eh_bus_reset()
2590 queue_remove_all_target(&info->queues.disconnected, SDpnt->id); fas216_eh_bus_reset()
2591 if (info->origSCpnt && info->origSCpnt->device->id == SDpnt->id) fas216_eh_bus_reset()
2592 info->origSCpnt = NULL; fas216_eh_bus_reset()
2593 if (info->reqSCpnt && info->reqSCpnt->device->id == SDpnt->id) fas216_eh_bus_reset()
2594 info->reqSCpnt = NULL; fas216_eh_bus_reset()
2595 info->SCpnt = NULL; fas216_eh_bus_reset()
2598 clear_bit(SDpnt->id * 8 + i, info->busyluns); fas216_eh_bus_reset()
2601 info->scsi.phase = PHASE_IDLE; fas216_eh_bus_reset()
2607 fas216_cmd(info, CMD_RESETSCSI); fas216_eh_bus_reset()
2609 mod_timer(&info->eh_timer, jiffies + HZ); fas216_eh_bus_reset()
2610 spin_unlock_irqrestore(&info->host_lock, flags); fas216_eh_bus_reset()
2615 wait_event(info->eh_wait, info->rst_bus_status); fas216_eh_bus_reset()
2616 del_timer_sync(&info->eh_timer); fas216_eh_bus_reset()
2618 fas216_log(info, LOG_ERROR, "bus reset complete: %s\n", fas216_eh_bus_reset()
2619 info->rst_bus_status == 1 ? "success" : "failed"); fas216_eh_bus_reset()
2621 return info->rst_bus_status == 1 ? SUCCESS : FAILED; fas216_eh_bus_reset()
2626 * @info: state structure for interface
2630 static void fas216_init_chip(FAS216_Info *info) fas216_init_chip() argument
2632 unsigned int clock = ((info->ifcfg.clockrate - 1) / 5 + 1) & 7; fas216_init_chip()
2633 fas216_writeb(info, REG_CLKF, clock); fas216_init_chip()
2634 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]); fas216_init_chip()
2635 fas216_writeb(info, REG_CNTL2, info->scsi.cfg[1]); fas216_init_chip()
2636 fas216_writeb(info, REG_CNTL3, info->scsi.cfg[2]); fas216_init_chip()
2637 fas216_writeb(info, REG_STIM, info->ifcfg.select_timeout); fas216_init_chip()
2638 fas216_writeb(info, REG_SOF, 0); fas216_init_chip()
2639 fas216_writeb(info, REG_STP, info->scsi.async_stp); fas216_init_chip()
2640 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]); fas216_init_chip()
2653 FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata; fas216_eh_host_reset() local
2655 spin_lock_irq(info->host->host_lock); fas216_eh_host_reset()
2657 fas216_checkmagic(info); fas216_eh_host_reset()
2659 fas216_log(info, LOG_ERROR, "resetting host"); fas216_eh_host_reset()
2664 fas216_cmd(info, CMD_RESETCHIP); fas216_eh_host_reset()
2672 spin_unlock_irq(info->host->host_lock); fas216_eh_host_reset()
2674 spin_lock_irq(info->host->host_lock); fas216_eh_host_reset()
2679 fas216_cmd(info, CMD_NOP); fas216_eh_host_reset()
2681 fas216_init_chip(info); fas216_eh_host_reset()
2683 spin_unlock_irq(info->host->host_lock); fas216_eh_host_reset()
2705 static int fas216_detect_type(FAS216_Info *info) fas216_detect_type() argument
2712 fas216_writeb(info, REG_CMD, CMD_RESETCHIP); fas216_detect_type()
2714 fas216_writeb(info, REG_CMD, CMD_NOP); fas216_detect_type()
2719 fas216_writeb(info, REG_CNTL3, 0); fas216_detect_type()
2720 fas216_writeb(info, REG_CNTL2, CNTL2_S2FE); fas216_detect_type()
2727 if ((fas216_readb(info, REG_CNTL2) & (~0xe0)) != CNTL2_S2FE) fas216_detect_type()
2733 fas216_writeb(info, REG_CNTL2, 0); fas216_detect_type()
2734 fas216_writeb(info, REG_CNTL3, 0); fas216_detect_type()
2735 fas216_writeb(info, REG_CNTL3, 5); fas216_detect_type()
2741 if (fas216_readb(info, REG_CNTL3) != 5) fas216_detect_type()
2747 fas216_writeb(info, REG_CNTL3, 0); fas216_detect_type()
2749 fas216_writeb(info, REG_CNTL3, CNTL3_ADIDCHK); fas216_detect_type()
2750 fas216_writeb(info, REG_CNTL3, 0); fas216_detect_type()
2752 fas216_writeb(info, REG_CMD, CMD_RESETCHIP); fas216_detect_type()
2754 fas216_writeb(info, REG_CMD, CMD_WITHDMA | CMD_NOP); fas216_detect_type()
2756 fas216_writeb(info, REG_CNTL2, CNTL2_ENF); fas216_detect_type()
2757 fas216_writeb(info, REG_CMD, CMD_RESETCHIP); fas216_detect_type()
2759 fas216_writeb(info, REG_CMD, CMD_NOP); fas216_detect_type()
2761 rev = fas216_readb(info, REG_ID); fas216_detect_type()
2789 * @info: state to initialise
2793 static void fas216_reset_state(FAS216_Info *info) fas216_reset_state() argument
2797 fas216_checkmagic(info); fas216_reset_state()
2799 fas216_bus_reset(info); fas216_reset_state()
2802 * Clear out all stale info in our state structure fas216_reset_state()
2804 memset(info->busyluns, 0, sizeof(info->busyluns)); fas216_reset_state()
2805 info->scsi.disconnectable = 0; fas216_reset_state()
2806 info->scsi.aborting = 0; fas216_reset_state()
2809 info->device[i].parity_enabled = 0; fas216_reset_state()
2810 info->device[i].parity_check = 1; fas216_reset_state()
2816 while (queue_remove(&info->queues.disconnected) != NULL); fas216_reset_state()
2821 info->SCpnt = NULL; fas216_reset_state()
2822 info->reqSCpnt = NULL; fas216_reset_state()
2823 info->rstSCpnt = NULL; fas216_reset_state()
2824 info->origSCpnt = NULL; fas216_reset_state()
2836 FAS216_Info *info = (FAS216_Info *)host->hostdata; fas216_init() local
2838 info->magic_start = MAGIC; fas216_init()
2839 info->magic_end = MAGIC; fas216_init()
2840 info->host = host; fas216_init()
2841 info->scsi.cfg[0] = host->this_id | CNTL1_PERE; fas216_init()
2842 info->scsi.cfg[1] = CNTL2_ENF | CNTL2_S2FE; fas216_init()
2843 info->scsi.cfg[2] = info->ifcfg.cntl3 | fas216_init()
2845 info->scsi.async_stp = fas216_syncperiod(info, info->ifcfg.asyncperiod); fas216_init()
2847 info->rst_dev_status = -1; fas216_init()
2848 info->rst_bus_status = -1; fas216_init()
2849 init_waitqueue_head(&info->eh_wait); fas216_init()
2850 init_timer(&info->eh_timer); fas216_init()
2851 info->eh_timer.data = (unsigned long)info; fas216_init()
2852 info->eh_timer.function = fas216_eh_timer; fas216_init()
2854 spin_lock_init(&info->host_lock); fas216_init()
2856 memset(&info->stats, 0, sizeof(info->stats)); fas216_init()
2858 msgqueue_initialise(&info->scsi.msgs); fas216_init()
2860 if (!queue_initialise(&info->queues.issue)) fas216_init()
2863 if (!queue_initialise(&info->queues.disconnected)) { fas216_init()
2864 queue_free(&info->queues.issue); fas216_init()
2881 FAS216_Info *info = (FAS216_Info *)host->hostdata; fas216_add() local
2884 if (info->ifcfg.clockrate <= 10 || info->ifcfg.clockrate > 40) { fas216_add()
2886 info->ifcfg.clockrate); fas216_add()
2890 fas216_reset_state(info); fas216_add()
2891 type = fas216_detect_type(info); fas216_add()
2892 info->scsi.type = chip_types[type]; fas216_add()
2899 fas216_init_chip(info); fas216_add()
2906 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0] | CNTL1_DISR); fas216_add()
2907 fas216_writeb(info, REG_CMD, CMD_RESETSCSI); fas216_add()
2912 spin_unlock_irq(info->host->host_lock); fas216_add()
2914 spin_lock_irq(info->host->host_lock); fas216_add()
2916 fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]); fas216_add()
2917 fas216_readb(info, REG_INST); fas216_add()
2919 fas216_checkmagic(info); fas216_add()
2923 fas216_writeb(info, REG_CMD, CMD_RESETCHIP); fas216_add()
2932 FAS216_Info *info = (FAS216_Info *)host->hostdata; fas216_remove() local
2934 fas216_checkmagic(info); fas216_remove()
2937 fas216_writeb(info, REG_CMD, CMD_RESETCHIP); fas216_remove()
2949 FAS216_Info *info = (FAS216_Info *)host->hostdata; fas216_release() local
2951 queue_free(&info->queues.disconnected); fas216_release()
2952 queue_free(&info->queues.issue); fas216_release()
2955 void fas216_print_host(FAS216_Info *info, struct seq_file *m) fas216_print_host() argument
2963 info->scsi.type, info->scsi.io_base, fas216_print_host()
2964 info->scsi.irq, info->scsi.dma); fas216_print_host()
2967 void fas216_print_stats(FAS216_Info *info, struct seq_file *m) fas216_print_stats() argument
2981 info->stats.queues, info->stats.removes, fas216_print_stats()
2982 info->stats.fins, info->stats.reads, fas216_print_stats()
2983 info->stats.writes, info->stats.miscs, fas216_print_stats()
2984 info->stats.disconnects, info->stats.aborts, fas216_print_stats()
2985 info->stats.bus_resets, info->stats.host_resets); fas216_print_stats()
2988 void fas216_print_devices(FAS216_Info *info, struct seq_file *m) fas216_print_devices() argument
2995 shost_for_each_device(scd, info->host) { fas216_print_devices()
2996 dev = &info->device[scd->id]; fas216_print_devices()
H A Dpowertec.c60 FAS216_Info info; member in struct:powertec_info
75 struct powertec_info *info = ec->irq_data; powertecscsi_irqenable() local
76 writeb(POWERTEC_INTR_ENABLE, info->base + POWERTEC_INTR_CONTROL); powertecscsi_irqenable()
87 struct powertec_info *info = ec->irq_data; powertecscsi_irqdisable() local
88 writeb(POWERTEC_INTR_DISABLE, info->base + POWERTEC_INTR_CONTROL); powertecscsi_irqdisable()
104 struct powertec_info *info = (struct powertec_info *)host->hostdata; powertecscsi_terminator_ctl() local
106 info->term_ctl = on_off ? POWERTEC_TERM_ENABLE : 0; powertecscsi_terminator_ctl()
107 writeb(info->term_ctl, info->base + POWERTEC_TERM_CONTROL); powertecscsi_terminator_ctl()
117 struct powertec_info *info = dev_id; powertecscsi_intr() local
119 return fas216_intr(&info->info); powertecscsi_intr()
134 struct powertec_info *info = (struct powertec_info *)host->hostdata; powertecscsi_dma_setup() local
136 int dmach = info->info.scsi.dma; powertecscsi_dma_setup()
138 if (info->info.ifcfg.capabilities & FASCAP_DMA && powertecscsi_dma_setup()
142 bufs = copy_SCp_to_sg(&info->sg[0], SCp, NR_SG); powertecscsi_dma_setup()
151 dma_map_sg(dev, info->sg, bufs, map_dir); powertecscsi_dma_setup()
154 set_dma_sg(dmach, info->sg, bufs); powertecscsi_dma_setup()
175 struct powertec_info *info = (struct powertec_info *)host->hostdata; powertecscsi_dma_stop() local
176 if (info->info.scsi.dma != NO_DMA) powertecscsi_dma_stop()
177 disable_dma(info->info.scsi.dma); powertecscsi_dma_stop()
182 * Params : host - driver host structure to return info for.
187 struct powertec_info *info = (struct powertec_info *)host->hostdata; powertecscsi_info() local
191 host->hostt->name, info->info.scsi.type, info->ec->slot_no, powertecscsi_info()
192 VERSION, info->term_ctl ? "n" : "ff"); powertecscsi_info()
242 struct powertec_info *info; powertecscsi_show_info() local
244 info = (struct powertec_info *)host->hostdata; powertecscsi_show_info()
247 fas216_print_host(&info->info, m); powertecscsi_show_info()
249 info->term_ctl ? "n" : "ff"); powertecscsi_show_info()
251 fas216_print_stats(&info->info, m); powertecscsi_show_info()
252 fas216_print_devices(&info->info, m); powertecscsi_show_info()
260 struct powertec_info *info = (struct powertec_info *)host->hostdata; powertecscsi_show_term() local
262 return sprintf(buf, "%d\n", info->term_ctl ? 1 : 0); powertecscsi_show_term()
285 .info = powertecscsi_info,
305 struct powertec_info *info; powertecscsi_probe() local
328 info = (struct powertec_info *)host->hostdata; powertecscsi_probe()
329 info->base = base; powertecscsi_probe()
332 info->ec = ec; powertecscsi_probe()
333 info->info.scsi.io_base = base + POWERTEC_FAS216_OFFSET; powertecscsi_probe()
334 info->info.scsi.io_shift = POWERTEC_FAS216_SHIFT; powertecscsi_probe()
335 info->info.scsi.irq = ec->irq; powertecscsi_probe()
336 info->info.scsi.dma = ec->dma; powertecscsi_probe()
337 info->info.ifcfg.clockrate = 40; /* MHz */ powertecscsi_probe()
338 info->info.ifcfg.select_timeout = 255; powertecscsi_probe()
339 info->info.ifcfg.asyncperiod = 200; /* ns */ powertecscsi_probe()
340 info->info.ifcfg.sync_max_depth = 7; powertecscsi_probe()
341 info->info.ifcfg.cntl3 = CNTL3_BS8 | CNTL3_FASTSCSI | CNTL3_FASTCLK; powertecscsi_probe()
342 info->info.ifcfg.disconnect_ok = 1; powertecscsi_probe()
343 info->info.ifcfg.wide_max_size = 0; powertecscsi_probe()
344 info->info.ifcfg.capabilities = 0; powertecscsi_probe()
345 info->info.dma.setup = powertecscsi_dma_setup; powertecscsi_probe()
346 info->info.dma.pseudo = NULL; powertecscsi_probe()
347 info->info.dma.stop = powertecscsi_dma_stop; powertecscsi_probe()
352 ecard_setirq(ec, &powertecscsi_ops, info); powertecscsi_probe()
361 0, "powertec", info); powertecscsi_probe()
368 if (info->info.scsi.dma != NO_DMA) { powertecscsi_probe()
369 if (request_dma(info->info.scsi.dma, "powertec")) { powertecscsi_probe()
371 host->host_no, info->info.scsi.dma); powertecscsi_probe()
372 info->info.scsi.dma = NO_DMA; powertecscsi_probe()
374 set_dma_speed(info->info.scsi.dma, 180); powertecscsi_probe()
375 info->info.ifcfg.capabilities |= FASCAP_DMA; powertecscsi_probe()
383 if (info->info.scsi.dma != NO_DMA) powertecscsi_probe()
384 free_dma(info->info.scsi.dma); powertecscsi_probe()
404 struct powertec_info *info = (struct powertec_info *)host->hostdata; powertecscsi_remove() local
411 if (info->info.scsi.dma != NO_DMA) powertecscsi_remove()
412 free_dma(info->info.scsi.dma); powertecscsi_remove()
413 free_irq(ec->irq, info); powertecscsi_remove()
H A Deesox.c72 FAS216_Info info; member in struct:eesoxscsi_info
88 struct eesoxscsi_info *info = (struct eesoxscsi_info *)ec->irq_data; eesoxscsi_irqenable() local
90 info->control |= EESOX_INTR_ENABLE; eesoxscsi_irqenable()
92 writeb(info->control, info->ctl_port); eesoxscsi_irqenable()
103 struct eesoxscsi_info *info = (struct eesoxscsi_info *)ec->irq_data; eesoxscsi_irqdisable() local
105 info->control &= ~EESOX_INTR_ENABLE; eesoxscsi_irqdisable()
107 writeb(info->control, info->ctl_port); eesoxscsi_irqdisable()
123 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_terminator_ctl() local
128 info->control |= EESOX_TERM_ENABLE; eesoxscsi_terminator_ctl()
130 info->control &= ~EESOX_TERM_ENABLE; eesoxscsi_terminator_ctl()
132 writeb(info->control, info->ctl_port); eesoxscsi_terminator_ctl()
144 struct eesoxscsi_info *info = dev_id; eesoxscsi_intr() local
146 return fas216_intr(&info->info); eesoxscsi_intr()
161 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_dma_setup() local
163 int dmach = info->info.scsi.dma; eesoxscsi_dma_setup()
169 bufs = copy_SCp_to_sg(&info->sg[0], SCp, NR_SG); eesoxscsi_dma_setup()
178 dma_map_sg(dev, info->sg, bufs, map_dir); eesoxscsi_dma_setup()
181 set_dma_sg(dmach, info->sg, bufs); eesoxscsi_dma_setup()
356 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_dma_pseudo() local
358 eesoxscsi_buffer_in(SCp->ptr, SCp->this_residual, info->base); eesoxscsi_dma_pseudo()
360 eesoxscsi_buffer_out(SCp->ptr, SCp->this_residual, info->base); eesoxscsi_dma_pseudo()
372 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_dma_stop() local
373 if (info->info.scsi.dma != NO_DMA) eesoxscsi_dma_stop()
374 disable_dma(info->info.scsi.dma); eesoxscsi_dma_stop()
379 * Params : host - driver host structure to return info for.
384 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_info() local
388 host->hostt->name, info->info.scsi.type, info->ec->slot_no, eesoxscsi_info()
389 VERSION, info->control & EESOX_TERM_ENABLE ? "n" : "ff"); eesoxscsi_info()
427 struct eesoxscsi_info *info; eesoxscsi_show_info() local
429 info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_show_info()
432 fas216_print_host(&info->info, m); eesoxscsi_show_info()
434 info->control & EESOX_TERM_ENABLE ? "n" : "ff"); eesoxscsi_show_info()
436 fas216_print_stats(&info->info, m); eesoxscsi_show_info()
437 fas216_print_devices(&info->info, m); eesoxscsi_show_info()
445 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_show_term() local
447 return sprintf(buf, "%d\n", info->control & EESOX_TERM_ENABLE ? 1 : 0); eesoxscsi_show_term()
454 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_store_term() local
460 info->control |= EESOX_TERM_ENABLE; eesoxscsi_store_term()
462 info->control &= ~EESOX_TERM_ENABLE; eesoxscsi_store_term()
464 writeb(info->control, info->ctl_port); eesoxscsi_store_term()
479 .info = eesoxscsi_info,
497 struct eesoxscsi_info *info; eesoxscsi_probe() local
520 info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_probe()
521 info->ec = ec; eesoxscsi_probe()
522 info->base = base; eesoxscsi_probe()
523 info->ctl_port = base + EESOX_CONTROL; eesoxscsi_probe()
524 info->control = term[ec->slot_no] ? EESOX_TERM_ENABLE : 0; eesoxscsi_probe()
525 writeb(info->control, info->ctl_port); eesoxscsi_probe()
527 info->info.scsi.io_base = base + EESOX_FAS216_OFFSET; eesoxscsi_probe()
528 info->info.scsi.io_shift = EESOX_FAS216_SHIFT; eesoxscsi_probe()
529 info->info.scsi.irq = ec->irq; eesoxscsi_probe()
530 info->info.scsi.dma = ec->dma; eesoxscsi_probe()
531 info->info.ifcfg.clockrate = 40; /* MHz */ eesoxscsi_probe()
532 info->info.ifcfg.select_timeout = 255; eesoxscsi_probe()
533 info->info.ifcfg.asyncperiod = 200; /* ns */ eesoxscsi_probe()
534 info->info.ifcfg.sync_max_depth = 7; eesoxscsi_probe()
535 info->info.ifcfg.cntl3 = CNTL3_FASTSCSI | CNTL3_FASTCLK; eesoxscsi_probe()
536 info->info.ifcfg.disconnect_ok = 1; eesoxscsi_probe()
537 info->info.ifcfg.wide_max_size = 0; eesoxscsi_probe()
538 info->info.ifcfg.capabilities = FASCAP_PSEUDODMA; eesoxscsi_probe()
539 info->info.dma.setup = eesoxscsi_dma_setup; eesoxscsi_probe()
540 info->info.dma.pseudo = eesoxscsi_dma_pseudo; eesoxscsi_probe()
541 info->info.dma.stop = eesoxscsi_dma_stop; eesoxscsi_probe()
546 ecard_setirq(ec, &eesoxscsi_ops, info); eesoxscsi_probe()
554 ret = request_irq(ec->irq, eesoxscsi_intr, 0, "eesoxscsi", info); eesoxscsi_probe()
561 if (info->info.scsi.dma != NO_DMA) { eesoxscsi_probe()
562 if (request_dma(info->info.scsi.dma, "eesox")) { eesoxscsi_probe()
564 host->host_no, info->info.scsi.dma); eesoxscsi_probe()
565 info->info.scsi.dma = NO_DMA; eesoxscsi_probe()
567 set_dma_speed(info->info.scsi.dma, 180); eesoxscsi_probe()
568 info->info.ifcfg.capabilities |= FASCAP_DMA; eesoxscsi_probe()
569 info->info.ifcfg.cntl3 |= CNTL3_BS8; eesoxscsi_probe()
577 if (info->info.scsi.dma != NO_DMA) eesoxscsi_probe()
578 free_dma(info->info.scsi.dma); eesoxscsi_probe()
598 struct eesoxscsi_info *info = (struct eesoxscsi_info *)host->hostdata; eesoxscsi_remove() local
603 if (info->info.scsi.dma != NO_DMA) eesoxscsi_remove()
604 free_dma(info->info.scsi.dma); eesoxscsi_remove()
605 free_irq(ec->irq, info); eesoxscsi_remove()
H A Dcumana_2.c77 FAS216_Info info; member in struct:cumanascsi2_info
95 struct cumanascsi2_info *info = ec->irq_data; cumanascsi_2_irqenable() local
96 writeb(ALATCH_ENA_INT, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_irqenable()
107 struct cumanascsi2_info *info = ec->irq_data; cumanascsi_2_irqdisable() local
108 writeb(ALATCH_DIS_INT, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_irqdisable()
124 struct cumanascsi2_info *info = (struct cumanascsi2_info *)host->hostdata; cumanascsi_2_terminator_ctl() local
127 info->terms = 1; cumanascsi_2_terminator_ctl()
128 writeb(ALATCH_ENA_TERM, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_terminator_ctl()
130 info->terms = 0; cumanascsi_2_terminator_ctl()
131 writeb(ALATCH_DIS_TERM, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_terminator_ctl()
143 struct cumanascsi2_info *info = dev_id; cumanascsi_2_intr() local
145 return fas216_intr(&info->info); cumanascsi_2_intr()
160 struct cumanascsi2_info *info = (struct cumanascsi2_info *)host->hostdata; cumanascsi_2_dma_setup() local
162 int dmach = info->info.scsi.dma; cumanascsi_2_dma_setup()
164 writeb(ALATCH_DIS_DMA, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_dma_setup()
170 bufs = copy_SCp_to_sg(&info->sg[0], SCp, NR_SG); cumanascsi_2_dma_setup()
181 dma_map_sg(dev, info->sg, bufs, map_dir); cumanascsi_2_dma_setup()
184 set_dma_sg(dmach, info->sg, bufs); cumanascsi_2_dma_setup()
185 writeb(alatch_dir, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_dma_setup()
188 writeb(ALATCH_ENA_DMA, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_dma_setup()
189 writeb(ALATCH_DIS_BIT32, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_dma_setup()
212 struct cumanascsi2_info *info = (struct cumanascsi2_info *)host->hostdata; cumanascsi_2_dma_pseudo() local
223 unsigned int status = readb(info->base + CUMANASCSI2_STATUS); cumanascsi_2_dma_pseudo()
232 writew(word, info->base + CUMANASCSI2_PSEUDODMA); cumanascsi_2_dma_pseudo()
242 unsigned int status = readb(info->base + CUMANASCSI2_STATUS); cumanascsi_2_dma_pseudo()
250 readsw(info->base + CUMANASCSI2_PSEUDODMA, cumanascsi_2_dma_pseudo()
259 unsigned int status = readb(info->base + CUMANASCSI2_STATUS); cumanascsi_2_dma_pseudo()
267 word = readw(info->base + CUMANASCSI2_PSEUDODMA); cumanascsi_2_dma_pseudo()
285 struct cumanascsi2_info *info = (struct cumanascsi2_info *)host->hostdata; cumanascsi_2_dma_stop() local
286 if (info->info.scsi.dma != NO_DMA) { cumanascsi_2_dma_stop()
287 writeb(ALATCH_DIS_DMA, info->base + CUMANASCSI2_ALATCH); cumanascsi_2_dma_stop()
288 disable_dma(info->info.scsi.dma); cumanascsi_2_dma_stop()
294 * Params : host - driver host structure to return info for.
299 struct cumanascsi2_info *info = (struct cumanascsi2_info *)host->hostdata; cumanascsi_2_info() local
303 host->hostt->name, info->info.scsi.type, info->ec->slot_no, cumanascsi_2_info()
304 VERSION, info->terms ? "n" : "ff"); cumanascsi_2_info()
342 struct cumanascsi2_info *info; cumanascsi_2_show_info() local
343 info = (struct cumanascsi2_info *)host->hostdata; cumanascsi_2_show_info()
346 fas216_print_host(&info->info, m); cumanascsi_2_show_info()
348 info->terms ? "n" : "ff"); cumanascsi_2_show_info()
350 fas216_print_stats(&info->info, m); cumanascsi_2_show_info()
351 fas216_print_devices(&info->info, m); cumanascsi_2_show_info()
360 .info = cumanascsi_2_info,
379 struct cumanascsi2_info *info; cumanascsi2_probe() local
402 info = (struct cumanascsi2_info *)host->hostdata; cumanascsi2_probe()
403 info->ec = ec; cumanascsi2_probe()
404 info->base = base; cumanascsi2_probe()
408 info->info.scsi.io_base = base + CUMANASCSI2_FAS216_OFFSET; cumanascsi2_probe()
409 info->info.scsi.io_shift = CUMANASCSI2_FAS216_SHIFT; cumanascsi2_probe()
410 info->info.scsi.irq = ec->irq; cumanascsi2_probe()
411 info->info.scsi.dma = ec->dma; cumanascsi2_probe()
412 info->info.ifcfg.clockrate = 40; /* MHz */ cumanascsi2_probe()
413 info->info.ifcfg.select_timeout = 255; cumanascsi2_probe()
414 info->info.ifcfg.asyncperiod = 200; /* ns */ cumanascsi2_probe()
415 info->info.ifcfg.sync_max_depth = 7; cumanascsi2_probe()
416 info->info.ifcfg.cntl3 = CNTL3_BS8 | CNTL3_FASTSCSI | CNTL3_FASTCLK; cumanascsi2_probe()
417 info->info.ifcfg.disconnect_ok = 1; cumanascsi2_probe()
418 info->info.ifcfg.wide_max_size = 0; cumanascsi2_probe()
419 info->info.ifcfg.capabilities = FASCAP_PSEUDODMA; cumanascsi2_probe()
420 info->info.dma.setup = cumanascsi_2_dma_setup; cumanascsi2_probe()
421 info->info.dma.pseudo = cumanascsi_2_dma_pseudo; cumanascsi2_probe()
422 info->info.dma.stop = cumanascsi_2_dma_stop; cumanascsi2_probe()
424 ec->irqaddr = info->base + CUMANASCSI2_STATUS; cumanascsi2_probe()
427 ecard_setirq(ec, &cumanascsi_2_ops, info); cumanascsi2_probe()
434 0, "cumanascsi2", info); cumanascsi2_probe()
441 if (info->info.scsi.dma != NO_DMA) { cumanascsi2_probe()
442 if (request_dma(info->info.scsi.dma, "cumanascsi2")) { cumanascsi2_probe()
444 host->host_no, info->info.scsi.dma); cumanascsi2_probe()
445 info->info.scsi.dma = NO_DMA; cumanascsi2_probe()
447 set_dma_speed(info->info.scsi.dma, 180); cumanascsi2_probe()
448 info->info.ifcfg.capabilities |= FASCAP_DMA; cumanascsi2_probe()
456 if (info->info.scsi.dma != NO_DMA) cumanascsi2_probe()
457 free_dma(info->info.scsi.dma); cumanascsi2_probe()
476 struct cumanascsi2_info *info = (struct cumanascsi2_info *)host->hostdata; cumanascsi2_remove() local
481 if (info->info.scsi.dma != NO_DMA) cumanascsi2_remove()
482 free_dma(info->info.scsi.dma); cumanascsi2_remove()
483 free_irq(ec->irq, info); cumanascsi2_remove()
H A Darxescsi.c42 FAS216_Info info; member in struct:arxescsi_info
63 * Returns : 0 if we should not set CMD_WITHDMA for transfer info command
115 struct arxescsi_info *info = (struct arxescsi_info *)host->hostdata; arxescsi_dma_pseudo() local
117 void __iomem *base = info->info.scsi.io_base; arxescsi_dma_pseudo()
208 * Params : host - driver host structure to return info for.
213 struct arxescsi_info *info = (struct arxescsi_info *)host->hostdata; arxescsi_info() local
217 host->hostt->name, info->info.scsi.type, info->ec->slot_no, arxescsi_info()
226 struct arxescsi_info *info; arxescsi_show_info() local
227 info = (struct arxescsi_info *)host->hostdata; arxescsi_show_info()
230 fas216_print_host(&info->info, m); arxescsi_show_info()
231 fas216_print_stats(&info->info, m); arxescsi_show_info()
232 fas216_print_devices(&info->info, m); arxescsi_show_info()
239 .info = arxescsi_info,
256 struct arxescsi_info *info; arxescsi_probe() local
276 info = (struct arxescsi_info *)host->hostdata; arxescsi_probe()
277 info->ec = ec; arxescsi_probe()
278 info->base = base; arxescsi_probe()
280 info->info.scsi.io_base = base + 0x2000; arxescsi_probe()
281 info->info.scsi.irq = 0; arxescsi_probe()
282 info->info.scsi.dma = NO_DMA; arxescsi_probe()
283 info->info.scsi.io_shift = 5; arxescsi_probe()
284 info->info.ifcfg.clockrate = 24; /* MHz */ arxescsi_probe()
285 info->info.ifcfg.select_timeout = 255; arxescsi_probe()
286 info->info.ifcfg.asyncperiod = 200; /* ns */ arxescsi_probe()
287 info->info.ifcfg.sync_max_depth = 0; arxescsi_probe()
288 info->info.ifcfg.cntl3 = CNTL3_FASTSCSI | CNTL3_FASTCLK; arxescsi_probe()
289 info->info.ifcfg.disconnect_ok = 0; arxescsi_probe()
290 info->info.ifcfg.wide_max_size = 0; arxescsi_probe()
291 info->info.ifcfg.capabilities = FASCAP_PSEUDODMA; arxescsi_probe()
292 info->info.dma.setup = arxescsi_dma_setup; arxescsi_probe()
293 info->info.dma.pseudo = arxescsi_dma_pseudo; arxescsi_probe()
294 info->info.dma.stop = arxescsi_dma_stop; arxescsi_probe()
/linux-4.1.27/drivers/mtd/nand/
H A Dpxa3xx_nand.c129 #define nand_writel(info, off, val) \
130 writel_relaxed((val), (info)->mmio_base + (off))
132 #define nand_readl(info, off) \
133 readl_relaxed((info)->mmio_base + (off))
366 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_set_timing() local
367 unsigned long nand_clk = clk_get_rate(info->clk); pxa3xx_nand_set_timing()
381 info->ndtr0cs0 = ndtr0; pxa3xx_nand_set_timing()
382 info->ndtr1cs0 = ndtr1; pxa3xx_nand_set_timing()
383 nand_writel(info, NDTR0CS0, ndtr0); pxa3xx_nand_set_timing()
384 nand_writel(info, NDTR1CS0, ndtr1); pxa3xx_nand_set_timing()
392 static void pxa3xx_set_datasize(struct pxa3xx_nand_info *info, pxa3xx_set_datasize() argument
395 int oob_enable = info->reg_ndcr & NDCR_SPARE_EN; pxa3xx_set_datasize()
397 info->data_size = mtd->writesize; pxa3xx_set_datasize()
401 info->oob_size = info->spare_size; pxa3xx_set_datasize()
402 if (!info->use_ecc) pxa3xx_set_datasize()
403 info->oob_size += info->ecc_size; pxa3xx_set_datasize()
412 static void pxa3xx_nand_start(struct pxa3xx_nand_info *info) pxa3xx_nand_start() argument
416 ndcr = info->reg_ndcr; pxa3xx_nand_start()
418 if (info->use_ecc) { pxa3xx_nand_start()
420 if (info->ecc_bch) pxa3xx_nand_start()
421 nand_writel(info, NDECCCTRL, 0x1); pxa3xx_nand_start()
424 if (info->ecc_bch) pxa3xx_nand_start()
425 nand_writel(info, NDECCCTRL, 0x0); pxa3xx_nand_start()
428 if (info->use_dma) pxa3xx_nand_start()
433 if (info->use_spare) pxa3xx_nand_start()
441 nand_writel(info, NDCR, 0); pxa3xx_nand_start()
442 nand_writel(info, NDSR, NDSR_MASK); pxa3xx_nand_start()
443 nand_writel(info, NDCR, ndcr); pxa3xx_nand_start()
446 static void pxa3xx_nand_stop(struct pxa3xx_nand_info *info) pxa3xx_nand_stop() argument
452 ndcr = nand_readl(info, NDCR); pxa3xx_nand_stop()
454 ndcr = nand_readl(info, NDCR); pxa3xx_nand_stop()
460 nand_writel(info, NDCR, ndcr); pxa3xx_nand_stop()
463 nand_writel(info, NDSR, NDSR_MASK); pxa3xx_nand_stop()
467 enable_int(struct pxa3xx_nand_info *info, uint32_t int_mask) enable_int() argument
471 ndcr = nand_readl(info, NDCR); enable_int()
472 nand_writel(info, NDCR, ndcr & ~int_mask); enable_int()
475 static void disable_int(struct pxa3xx_nand_info *info, uint32_t int_mask) disable_int() argument
479 ndcr = nand_readl(info, NDCR); disable_int()
480 nand_writel(info, NDCR, ndcr | int_mask); disable_int()
483 static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len) drain_fifo() argument
485 if (info->ecc_bch) { drain_fifo()
497 __raw_readsl(info->mmio_base + NDDB, data, 8); drain_fifo()
500 !(nand_readl(info, NDSR) & NDSR_RDDREQ); drain_fifo()
503 dev_err(&info->pdev->dev, drain_fifo()
516 __raw_readsl(info->mmio_base + NDDB, data, len); drain_fifo()
519 static void handle_data_pio(struct pxa3xx_nand_info *info) handle_data_pio() argument
521 unsigned int do_bytes = min(info->data_size, info->chunk_size); handle_data_pio()
523 switch (info->state) { handle_data_pio()
525 __raw_writesl(info->mmio_base + NDDB, handle_data_pio()
526 info->data_buff + info->data_buff_pos, handle_data_pio()
529 if (info->oob_size > 0) handle_data_pio()
530 __raw_writesl(info->mmio_base + NDDB, handle_data_pio()
531 info->oob_buff + info->oob_buff_pos, handle_data_pio()
532 DIV_ROUND_UP(info->oob_size, 4)); handle_data_pio()
535 drain_fifo(info, handle_data_pio()
536 info->data_buff + info->data_buff_pos, handle_data_pio()
539 if (info->oob_size > 0) handle_data_pio()
540 drain_fifo(info, handle_data_pio()
541 info->oob_buff + info->oob_buff_pos, handle_data_pio()
542 DIV_ROUND_UP(info->oob_size, 4)); handle_data_pio()
545 dev_err(&info->pdev->dev, "%s: invalid state %d\n", __func__, handle_data_pio()
546 info->state); handle_data_pio()
551 info->data_buff_pos += do_bytes; handle_data_pio()
552 info->oob_buff_pos += info->oob_size; handle_data_pio()
553 info->data_size -= do_bytes; handle_data_pio()
557 static void start_data_dma(struct pxa3xx_nand_info *info) start_data_dma() argument
559 struct pxa_dma_desc *desc = info->data_desc; start_data_dma()
560 int dma_len = ALIGN(info->data_size + info->oob_size, 32); start_data_dma()
565 switch (info->state) { start_data_dma()
567 desc->dsadr = info->data_buff_phys; start_data_dma()
568 desc->dtadr = info->mmio_phys + NDDB; start_data_dma()
572 desc->dtadr = info->data_buff_phys; start_data_dma()
573 desc->dsadr = info->mmio_phys + NDDB; start_data_dma()
577 dev_err(&info->pdev->dev, "%s: invalid state %d\n", __func__, start_data_dma()
578 info->state); start_data_dma()
582 DRCMR(info->drcmr_dat) = DRCMR_MAPVLD | info->data_dma_ch; start_data_dma()
583 DDADR(info->data_dma_ch) = info->data_desc_addr; start_data_dma()
584 DCSR(info->data_dma_ch) |= DCSR_RUN; start_data_dma()
589 struct pxa3xx_nand_info *info = data; pxa3xx_nand_data_dma_irq() local
596 info->retcode = ERR_DMABUSERR; pxa3xx_nand_data_dma_irq()
599 info->state = STATE_DMA_DONE; pxa3xx_nand_data_dma_irq()
600 enable_int(info, NDCR_INT_MASK); pxa3xx_nand_data_dma_irq()
601 nand_writel(info, NDSR, NDSR_WRDREQ | NDSR_RDDREQ); pxa3xx_nand_data_dma_irq()
604 static void start_data_dma(struct pxa3xx_nand_info *info) start_data_dma() argument
610 struct pxa3xx_nand_info *info = data; pxa3xx_nand_irq_thread() local
612 handle_data_pio(info); pxa3xx_nand_irq_thread()
614 info->state = STATE_CMD_DONE; pxa3xx_nand_irq_thread()
615 nand_writel(info, NDSR, NDSR_WRDREQ | NDSR_RDDREQ); pxa3xx_nand_irq_thread()
622 struct pxa3xx_nand_info *info = devid; pxa3xx_nand_irq() local
627 if (info->cs == 0) { pxa3xx_nand_irq()
635 status = nand_readl(info, NDSR); pxa3xx_nand_irq()
638 info->retcode = ERR_UNCORERR; pxa3xx_nand_irq()
640 info->retcode = ERR_CORERR; pxa3xx_nand_irq()
641 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370 && pxa3xx_nand_irq()
642 info->ecc_bch) pxa3xx_nand_irq()
643 info->ecc_err_cnt = NDSR_ERR_CNT(status); pxa3xx_nand_irq()
645 info->ecc_err_cnt = 1; pxa3xx_nand_irq()
652 info->max_bitflips = max_t(unsigned int, pxa3xx_nand_irq()
653 info->max_bitflips, pxa3xx_nand_irq()
654 info->ecc_err_cnt); pxa3xx_nand_irq()
658 if (info->use_dma) { pxa3xx_nand_irq()
659 disable_int(info, NDCR_INT_MASK); pxa3xx_nand_irq()
660 info->state = (status & NDSR_RDDREQ) ? pxa3xx_nand_irq()
662 start_data_dma(info); pxa3xx_nand_irq()
665 info->state = (status & NDSR_RDDREQ) ? pxa3xx_nand_irq()
672 info->state = STATE_CMD_DONE; pxa3xx_nand_irq()
676 info->state = STATE_READY; pxa3xx_nand_irq()
681 nand_writel(info, NDSR, NDSR_WRCMDREQ); pxa3xx_nand_irq()
683 info->state = STATE_CMD_HANDLE; pxa3xx_nand_irq()
693 nand_writel(info, NDCB0, info->ndcb0); pxa3xx_nand_irq()
694 nand_writel(info, NDCB0, info->ndcb1); pxa3xx_nand_irq()
695 nand_writel(info, NDCB0, info->ndcb2); pxa3xx_nand_irq()
698 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370) pxa3xx_nand_irq()
699 nand_writel(info, NDCB0, info->ndcb3); pxa3xx_nand_irq()
703 nand_writel(info, NDSR, status); pxa3xx_nand_irq()
705 complete(&info->cmd_complete); pxa3xx_nand_irq()
707 complete(&info->dev_ready); pxa3xx_nand_irq()
720 static void set_command_address(struct pxa3xx_nand_info *info, set_command_address() argument
725 info->ndcb1 = ((page_addr & 0xFFFFFF) << 8) set_command_address()
728 info->ndcb2 = 0; set_command_address()
730 info->ndcb1 = ((page_addr & 0xFFFF) << 16) set_command_address()
734 info->ndcb2 = (page_addr & 0xFF0000) >> 16; set_command_address()
736 info->ndcb2 = 0; set_command_address()
740 static void prepare_start_command(struct pxa3xx_nand_info *info, int command) prepare_start_command() argument
742 struct pxa3xx_nand_host *host = info->host[info->cs]; prepare_start_command()
746 info->buf_start = 0; prepare_start_command()
747 info->buf_count = 0; prepare_start_command()
748 info->oob_size = 0; prepare_start_command()
749 info->data_buff_pos = 0; prepare_start_command()
750 info->oob_buff_pos = 0; prepare_start_command()
751 info->use_ecc = 0; prepare_start_command()
752 info->use_spare = 1; prepare_start_command()
753 info->retcode = ERR_NONE; prepare_start_command()
754 info->ecc_err_cnt = 0; prepare_start_command()
755 info->ndcb3 = 0; prepare_start_command()
756 info->need_wait = 0; prepare_start_command()
761 info->use_ecc = 1; prepare_start_command()
763 pxa3xx_set_datasize(info, mtd); prepare_start_command()
766 info->use_spare = 0; prepare_start_command()
769 info->ndcb1 = 0; prepare_start_command()
770 info->ndcb2 = 0; prepare_start_command()
782 info->buf_count = mtd->writesize + mtd->oobsize; prepare_start_command()
783 memset(info->data_buff, 0xFF, info->buf_count); prepare_start_command()
788 static int prepare_set_command(struct pxa3xx_nand_info *info, int command, prepare_set_command() argument
795 host = info->host[info->cs]; prepare_set_command()
800 if (info->cs != 0) prepare_set_command()
801 info->ndcb0 = NDCB0_CSEL; prepare_set_command()
803 info->ndcb0 = 0; prepare_set_command()
814 info->buf_start = column; prepare_set_command()
815 info->ndcb0 |= NDCB0_CMD_TYPE(0) prepare_set_command()
820 info->buf_start += mtd->writesize; prepare_set_command()
828 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8); prepare_set_command()
830 info->ndcb0 |= NDCB0_DBC | (NAND_CMD_READSTART << 8) prepare_set_command()
833 info->ndcb3 = info->chunk_size + prepare_set_command()
834 info->oob_size; prepare_set_command()
837 set_command_address(info, mtd->writesize, column, page_addr); prepare_set_command()
842 info->buf_start = column; prepare_set_command()
843 set_command_address(info, mtd->writesize, 0, page_addr); prepare_set_command()
850 info->ndcb0 |= NDCB0_CMD_TYPE(0x1) prepare_set_command()
855 info->data_size = 0; prepare_set_command()
861 if (is_buf_blank(info->data_buff, prepare_set_command()
874 info->ndcb0 |= NDCB0_CMD_TYPE(0x1) prepare_set_command()
877 info->ndcb3 = info->chunk_size + prepare_set_command()
878 info->oob_size; prepare_set_command()
884 if (info->data_size == 0) { prepare_set_command()
885 info->ndcb0 = NDCB0_CMD_TYPE(0x1) prepare_set_command()
888 info->ndcb1 = 0; prepare_set_command()
889 info->ndcb2 = 0; prepare_set_command()
890 info->ndcb3 = 0; prepare_set_command()
893 info->ndcb0 |= NDCB0_CMD_TYPE(0x1) prepare_set_command()
904 info->buf_count = 256; prepare_set_command()
905 info->ndcb0 |= NDCB0_CMD_TYPE(0) prepare_set_command()
909 info->ndcb1 = (column & 0xFF); prepare_set_command()
910 info->ndcb3 = 256; prepare_set_command()
911 info->data_size = 256; prepare_set_command()
915 info->buf_count = host->read_id_bytes; prepare_set_command()
916 info->ndcb0 |= NDCB0_CMD_TYPE(3) prepare_set_command()
919 info->ndcb1 = (column & 0xFF); prepare_set_command()
921 info->data_size = 8; prepare_set_command()
924 info->buf_count = 1; prepare_set_command()
925 info->ndcb0 |= NDCB0_CMD_TYPE(4) prepare_set_command()
929 info->data_size = 8; prepare_set_command()
933 info->ndcb0 |= NDCB0_CMD_TYPE(2) prepare_set_command()
939 info->ndcb1 = page_addr; prepare_set_command()
940 info->ndcb2 = 0; prepare_set_command()
944 info->ndcb0 |= NDCB0_CMD_TYPE(5) prepare_set_command()
955 dev_err(&info->pdev->dev, "non-supported command %x\n", prepare_set_command()
967 struct pxa3xx_nand_info *info = host->info_data; nand_cmdfunc() local
975 if (info->reg_ndcr & NDCR_DWIDTH_M) nand_cmdfunc()
983 if (info->cs != host->cs) { nand_cmdfunc()
984 info->cs = host->cs; nand_cmdfunc()
985 nand_writel(info, NDTR0CS0, info->ndtr0cs0); nand_cmdfunc()
986 nand_writel(info, NDTR1CS0, info->ndtr1cs0); nand_cmdfunc()
989 prepare_start_command(info, command); nand_cmdfunc()
991 info->state = STATE_PREPARED; nand_cmdfunc()
992 exec_cmd = prepare_set_command(info, command, 0, column, page_addr); nand_cmdfunc()
995 init_completion(&info->cmd_complete); nand_cmdfunc()
996 init_completion(&info->dev_ready); nand_cmdfunc()
997 info->need_wait = 1; nand_cmdfunc()
998 pxa3xx_nand_start(info); nand_cmdfunc()
1000 if (!wait_for_completion_timeout(&info->cmd_complete, nand_cmdfunc()
1002 dev_err(&info->pdev->dev, "Wait time out!!!\n"); nand_cmdfunc()
1004 pxa3xx_nand_stop(info); nand_cmdfunc()
1007 info->state = STATE_IDLE; nand_cmdfunc()
1015 struct pxa3xx_nand_info *info = host->info_data; nand_cmdfunc_extended() local
1023 if (info->reg_ndcr & NDCR_DWIDTH_M) nand_cmdfunc_extended()
1031 if (info->cs != host->cs) { nand_cmdfunc_extended()
1032 info->cs = host->cs; nand_cmdfunc_extended()
1033 nand_writel(info, NDTR0CS0, info->ndtr0cs0); nand_cmdfunc_extended()
1034 nand_writel(info, NDTR1CS0, info->ndtr1cs0); nand_cmdfunc_extended()
1054 prepare_start_command(info, command); nand_cmdfunc_extended()
1064 info->need_wait = 1; nand_cmdfunc_extended()
1065 init_completion(&info->dev_ready); nand_cmdfunc_extended()
1067 info->state = STATE_PREPARED; nand_cmdfunc_extended()
1068 exec_cmd = prepare_set_command(info, command, ext_cmd_type, nand_cmdfunc_extended()
1071 info->need_wait = 0; nand_cmdfunc_extended()
1072 complete(&info->dev_ready); nand_cmdfunc_extended()
1076 init_completion(&info->cmd_complete); nand_cmdfunc_extended()
1077 pxa3xx_nand_start(info); nand_cmdfunc_extended()
1079 if (!wait_for_completion_timeout(&info->cmd_complete, nand_cmdfunc_extended()
1081 dev_err(&info->pdev->dev, "Wait time out!!!\n"); nand_cmdfunc_extended()
1083 pxa3xx_nand_stop(info); nand_cmdfunc_extended()
1088 if (info->data_size == 0 && command != NAND_CMD_PAGEPROG) nand_cmdfunc_extended()
1095 if (info->data_size == 0 && nand_cmdfunc_extended()
1102 if (info->data_size == info->chunk_size) nand_cmdfunc_extended()
1112 info->data_size == 0) { nand_cmdfunc_extended()
1117 info->state = STATE_IDLE; nand_cmdfunc_extended()
1134 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_read_page_hwecc() local
1139 if (info->retcode == ERR_CORERR && info->use_ecc) { pxa3xx_nand_read_page_hwecc()
1140 mtd->ecc_stats.corrected += info->ecc_err_cnt; pxa3xx_nand_read_page_hwecc()
1142 } else if (info->retcode == ERR_UNCORERR) { pxa3xx_nand_read_page_hwecc()
1149 info->retcode = ERR_NONE; pxa3xx_nand_read_page_hwecc()
1154 return info->max_bitflips; pxa3xx_nand_read_page_hwecc()
1160 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_read_byte() local
1163 if (info->buf_start < info->buf_count) pxa3xx_nand_read_byte()
1165 retval = info->data_buff[info->buf_start++]; pxa3xx_nand_read_byte()
1173 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_read_word() local
1176 if (!(info->buf_start & 0x01) && info->buf_start < info->buf_count) { pxa3xx_nand_read_word()
1177 retval = *((u16 *)(info->data_buff+info->buf_start)); pxa3xx_nand_read_word()
1178 info->buf_start += 2; pxa3xx_nand_read_word()
1186 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_read_buf() local
1187 int real_len = min_t(size_t, len, info->buf_count - info->buf_start); pxa3xx_nand_read_buf()
1189 memcpy(buf, info->data_buff + info->buf_start, real_len); pxa3xx_nand_read_buf()
1190 info->buf_start += real_len; pxa3xx_nand_read_buf()
1197 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_write_buf() local
1198 int real_len = min_t(size_t, len, info->buf_count - info->buf_start); pxa3xx_nand_write_buf()
1200 memcpy(info->data_buff + info->buf_start, buf, real_len); pxa3xx_nand_write_buf()
1201 info->buf_start += real_len; pxa3xx_nand_write_buf()
1212 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_waitfunc() local
1214 if (info->need_wait) { pxa3xx_nand_waitfunc()
1215 info->need_wait = 0; pxa3xx_nand_waitfunc()
1216 if (!wait_for_completion_timeout(&info->dev_ready, pxa3xx_nand_waitfunc()
1218 dev_err(&info->pdev->dev, "Ready time out!!!\n"); pxa3xx_nand_waitfunc()
1225 if (info->retcode == ERR_NONE) pxa3xx_nand_waitfunc()
1234 static int pxa3xx_nand_config_flash(struct pxa3xx_nand_info *info, pxa3xx_nand_config_flash() argument
1237 struct platform_device *pdev = info->pdev; pxa3xx_nand_config_flash()
1239 struct pxa3xx_nand_host *host = info->host[info->cs]; pxa3xx_nand_config_flash()
1273 info->reg_ndcr = ndcr; pxa3xx_nand_config_flash()
1279 static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info) pxa3xx_nand_detect_config() argument
1285 struct pxa3xx_nand_host *host = info->host[0]; pxa3xx_nand_detect_config()
1286 uint32_t ndcr = nand_readl(info, NDCR); pxa3xx_nand_detect_config()
1290 info->chunk_size = 2048; pxa3xx_nand_detect_config()
1293 info->chunk_size = 512; pxa3xx_nand_detect_config()
1298 info->reg_ndcr = ndcr & ~NDCR_INT_MASK; pxa3xx_nand_detect_config()
1299 info->ndtr0cs0 = nand_readl(info, NDTR0CS0); pxa3xx_nand_detect_config()
1300 info->ndtr1cs0 = nand_readl(info, NDTR1CS0); pxa3xx_nand_detect_config()
1305 static int pxa3xx_nand_init_buff(struct pxa3xx_nand_info *info) pxa3xx_nand_init_buff() argument
1307 struct platform_device *pdev = info->pdev; pxa3xx_nand_init_buff()
1308 int data_desc_offset = info->buf_size - sizeof(struct pxa_dma_desc); pxa3xx_nand_init_buff()
1311 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL); pxa3xx_nand_init_buff()
1312 if (info->data_buff == NULL) pxa3xx_nand_init_buff()
1317 info->data_buff = dma_alloc_coherent(&pdev->dev, info->buf_size, pxa3xx_nand_init_buff()
1318 &info->data_buff_phys, GFP_KERNEL); pxa3xx_nand_init_buff()
1319 if (info->data_buff == NULL) { pxa3xx_nand_init_buff()
1324 info->data_desc = (void *)info->data_buff + data_desc_offset; pxa3xx_nand_init_buff()
1325 info->data_desc_addr = info->data_buff_phys + data_desc_offset; pxa3xx_nand_init_buff()
1327 info->data_dma_ch = pxa_request_dma("nand-data", DMA_PRIO_LOW, pxa3xx_nand_init_buff()
1328 pxa3xx_nand_data_dma_irq, info); pxa3xx_nand_init_buff()
1329 if (info->data_dma_ch < 0) { pxa3xx_nand_init_buff()
1331 dma_free_coherent(&pdev->dev, info->buf_size, pxa3xx_nand_init_buff()
1332 info->data_buff, info->data_buff_phys); pxa3xx_nand_init_buff()
1333 return info->data_dma_ch; pxa3xx_nand_init_buff()
1340 info->use_dma = 1; pxa3xx_nand_init_buff()
1344 static void pxa3xx_nand_free_buff(struct pxa3xx_nand_info *info) pxa3xx_nand_free_buff() argument
1346 struct platform_device *pdev = info->pdev; pxa3xx_nand_free_buff()
1347 if (info->use_dma) { pxa3xx_nand_free_buff()
1348 pxa_free_dma(info->data_dma_ch); pxa3xx_nand_free_buff()
1349 dma_free_coherent(&pdev->dev, info->buf_size, pxa3xx_nand_free_buff()
1350 info->data_buff, info->data_buff_phys); pxa3xx_nand_free_buff()
1352 kfree(info->data_buff); pxa3xx_nand_free_buff()
1356 static int pxa3xx_nand_init_buff(struct pxa3xx_nand_info *info) pxa3xx_nand_init_buff() argument
1358 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL); pxa3xx_nand_init_buff()
1359 if (info->data_buff == NULL) pxa3xx_nand_init_buff()
1364 static void pxa3xx_nand_free_buff(struct pxa3xx_nand_info *info) pxa3xx_nand_free_buff() argument
1366 kfree(info->data_buff); pxa3xx_nand_free_buff()
1370 static int pxa3xx_nand_sensing(struct pxa3xx_nand_info *info) pxa3xx_nand_sensing() argument
1376 mtd = info->host[info->cs]->mtd; pxa3xx_nand_sensing()
1380 ret = pxa3xx_nand_config_flash(info, &builtin_flash_types[0]); pxa3xx_nand_sensing()
1392 static int pxa_ecc_init(struct pxa3xx_nand_info *info, pxa_ecc_init() argument
1397 info->chunk_size = 2048; pxa_ecc_init()
1398 info->spare_size = 40; pxa_ecc_init()
1399 info->ecc_size = 24; pxa_ecc_init()
1405 info->chunk_size = 512; pxa_ecc_init()
1406 info->spare_size = 8; pxa_ecc_init()
1407 info->ecc_size = 8; pxa_ecc_init()
1417 info->ecc_bch = 1; pxa_ecc_init()
1418 info->chunk_size = 2048; pxa_ecc_init()
1419 info->spare_size = 32; pxa_ecc_init()
1420 info->ecc_size = 32; pxa_ecc_init()
1422 ecc->size = info->chunk_size; pxa_ecc_init()
1427 info->ecc_bch = 1; pxa_ecc_init()
1428 info->chunk_size = 2048; pxa_ecc_init()
1429 info->spare_size = 32; pxa_ecc_init()
1430 info->ecc_size = 32; pxa_ecc_init()
1432 ecc->size = info->chunk_size; pxa_ecc_init()
1441 info->ecc_bch = 1; pxa_ecc_init()
1442 info->chunk_size = 1024; pxa_ecc_init()
1443 info->spare_size = 0; pxa_ecc_init()
1444 info->ecc_size = 32; pxa_ecc_init()
1446 ecc->size = info->chunk_size; pxa_ecc_init()
1450 dev_err(&info->pdev->dev, pxa_ecc_init()
1456 dev_info(&info->pdev->dev, "ECC strength %d, ECC step size %d\n", pxa_ecc_init()
1464 struct pxa3xx_nand_info *info = host->info_data; pxa3xx_nand_scan() local
1465 struct platform_device *pdev = info->pdev; pxa3xx_nand_scan()
1475 if (pdata->keep_config && !pxa3xx_nand_detect_config(info)) pxa3xx_nand_scan()
1479 info->chunk_size = 512; pxa3xx_nand_scan()
1481 ret = pxa3xx_nand_sensing(info); pxa3xx_nand_scan()
1483 dev_info(&info->pdev->dev, "There is no chip on cs %d!\n", pxa3xx_nand_scan()
1484 info->cs); pxa3xx_nand_scan()
1490 id = *((uint16_t *)(info->data_buff)); pxa3xx_nand_scan()
1492 dev_info(&info->pdev->dev, "Detect a flash id %x\n", id); pxa3xx_nand_scan()
1494 dev_warn(&info->pdev->dev, pxa3xx_nand_scan()
1513 dev_err(&info->pdev->dev, "ERROR!! flash not defined!!!\n"); pxa3xx_nand_scan()
1518 ret = pxa3xx_nand_config_flash(info, f); pxa3xx_nand_scan()
1520 dev_err(&info->pdev->dev, "ERROR! Configure failed\n"); pxa3xx_nand_scan()
1537 if (info->reg_ndcr & NDCR_DWIDTH_M) pxa3xx_nand_scan()
1541 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370) pxa3xx_nand_scan()
1542 nand_writel(info, NDECCCTRL, 0x0); pxa3xx_nand_scan()
1564 if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370) { pxa3xx_nand_scan()
1567 dev_err(&info->pdev->dev, pxa3xx_nand_scan()
1587 ret = pxa_ecc_init(info, &chip->ecc, ecc_strength, pxa3xx_nand_scan()
1599 kfree(info->data_buff); pxa3xx_nand_scan()
1602 info->buf_size = mtd->writesize + mtd->oobsize; pxa3xx_nand_scan()
1603 ret = pxa3xx_nand_init_buff(info); pxa3xx_nand_scan()
1606 info->oob_buff = info->data_buff + mtd->writesize; pxa3xx_nand_scan()
1618 struct pxa3xx_nand_info *info; alloc_nand_resource() local
1628 info = devm_kzalloc(&pdev->dev, sizeof(*info) + (sizeof(*mtd) + alloc_nand_resource()
1630 if (!info) alloc_nand_resource()
1633 info->pdev = pdev; alloc_nand_resource()
1634 info->variant = pxa3xx_nand_get_variant(pdev); alloc_nand_resource()
1636 mtd = (struct mtd_info *)((unsigned int)&info[1] + alloc_nand_resource()
1640 info->host[cs] = host; alloc_nand_resource()
1643 host->info_data = info; alloc_nand_resource()
1649 chip->controller = &info->controller; alloc_nand_resource()
1662 info->clk = devm_clk_get(&pdev->dev, NULL); alloc_nand_resource()
1663 if (IS_ERR(info->clk)) { alloc_nand_resource()
1665 return PTR_ERR(info->clk); alloc_nand_resource()
1667 ret = clk_prepare_enable(info->clk); alloc_nand_resource()
1679 info->drcmr_dat = 97; alloc_nand_resource()
1680 info->drcmr_cmd = 99; alloc_nand_resource()
1689 info->drcmr_dat = r->start; alloc_nand_resource()
1698 info->drcmr_cmd = r->start; alloc_nand_resource()
1710 info->mmio_base = devm_ioremap_resource(&pdev->dev, r); alloc_nand_resource()
1711 if (IS_ERR(info->mmio_base)) { alloc_nand_resource()
1712 ret = PTR_ERR(info->mmio_base); alloc_nand_resource()
1715 info->mmio_phys = r->start; alloc_nand_resource()
1718 info->buf_size = INIT_BUFFER_SIZE; alloc_nand_resource()
1719 info->data_buff = kmalloc(info->buf_size, GFP_KERNEL); alloc_nand_resource()
1720 if (info->data_buff == NULL) { alloc_nand_resource()
1726 disable_int(info, NDSR_MASK); alloc_nand_resource()
1730 pdev->name, info); alloc_nand_resource()
1736 platform_set_drvdata(pdev, info); alloc_nand_resource()
1741 free_irq(irq, info); alloc_nand_resource()
1742 kfree(info->data_buff); alloc_nand_resource()
1744 clk_disable_unprepare(info->clk); alloc_nand_resource()
1750 struct pxa3xx_nand_info *info = platform_get_drvdata(pdev); pxa3xx_nand_remove() local
1754 if (!info) pxa3xx_nand_remove()
1761 free_irq(irq, info); pxa3xx_nand_remove()
1762 pxa3xx_nand_free_buff(info); pxa3xx_nand_remove()
1764 clk_disable_unprepare(info->clk); pxa3xx_nand_remove()
1767 nand_release(info->host[cs]->mtd); pxa3xx_nand_remove()
1809 struct pxa3xx_nand_info *info; pxa3xx_nand_probe() local
1835 info = platform_get_drvdata(pdev); pxa3xx_nand_probe()
1838 struct mtd_info *mtd = info->host[cs]->mtd; pxa3xx_nand_probe()
1846 info->cs = cs; pxa3xx_nand_probe()
1873 struct pxa3xx_nand_info *info = platform_get_drvdata(pdev); pxa3xx_nand_suspend() local
1879 if (info->state) { pxa3xx_nand_suspend()
1880 dev_err(&pdev->dev, "driver busy, state = %d\n", info->state); pxa3xx_nand_suspend()
1885 mtd = info->host[cs]->mtd; pxa3xx_nand_suspend()
1894 struct pxa3xx_nand_info *info = platform_get_drvdata(pdev); pxa3xx_nand_resume() local
1901 disable_int(info, NDCR_INT_MASK); pxa3xx_nand_resume()
1908 info->cs = 0xff; pxa3xx_nand_resume()
1916 nand_writel(info, NDSR, NDSR_MASK); pxa3xx_nand_resume()
1918 mtd = info->host[cs]->mtd; pxa3xx_nand_resume()
H A Domap_elm.c95 static void elm_write_reg(struct elm_info *info, int offset, u32 val) elm_write_reg() argument
97 writel(val, info->elm_base + offset); elm_write_reg()
100 static u32 elm_read_reg(struct elm_info *info, int offset) elm_read_reg() argument
102 return readl(info->elm_base + offset); elm_read_reg()
114 struct elm_info *info = dev_get_drvdata(dev); elm_config() local
116 if (!info) { elm_config()
132 elm_write_reg(info, ELM_LOCATION_CONFIG, reg_val); elm_config()
133 info->bch_type = bch_type; elm_config()
134 info->ecc_steps = ecc_steps; elm_config()
135 info->ecc_syndrome_size = ecc_syndrome_size; elm_config()
143 * @info: elm info
149 static void elm_configure_page_mode(struct elm_info *info, int index, elm_configure_page_mode() argument
154 reg_val = elm_read_reg(info, ELM_PAGE_CTRL); elm_configure_page_mode()
160 elm_write_reg(info, ELM_PAGE_CTRL, reg_val); elm_configure_page_mode()
165 * @info: elm info
171 static void elm_load_syndrome(struct elm_info *info, elm_load_syndrome() argument
177 for (i = 0; i < info->ecc_steps; i++) { elm_load_syndrome()
181 elm_configure_page_mode(info, i, true); elm_load_syndrome()
184 switch (info->bch_type) { elm_load_syndrome()
188 elm_write_reg(info, offset, val); elm_load_syndrome()
193 elm_write_reg(info, offset, val); elm_load_syndrome()
198 elm_write_reg(info, offset, val); elm_load_syndrome()
203 elm_write_reg(info, offset, val); elm_load_syndrome()
209 elm_write_reg(info, offset, val); elm_load_syndrome()
214 elm_write_reg(info, offset, val); elm_load_syndrome()
218 elm_write_reg(info, offset, val); elm_load_syndrome()
221 elm_write_reg(info, offset, val); elm_load_syndrome()
224 elm_write_reg(info, offset, val); elm_load_syndrome()
227 elm_write_reg(info, offset, val); elm_load_syndrome()
230 elm_write_reg(info, offset, val); elm_load_syndrome()
233 elm_write_reg(info, offset, val); elm_load_syndrome()
236 elm_write_reg(info, offset, val); elm_load_syndrome()
244 ecc += info->ecc_syndrome_size; elm_load_syndrome()
250 * @info: elm info
257 static void elm_start_processing(struct elm_info *info, elm_start_processing() argument
267 for (i = 0; i < info->ecc_steps; i++) { elm_start_processing()
271 reg_val = elm_read_reg(info, offset); elm_start_processing()
273 elm_write_reg(info, offset, reg_val); elm_start_processing()
280 * @info: elm info
289 static void elm_error_correction(struct elm_info *info, elm_error_correction() argument
296 for (i = 0; i < info->ecc_steps; i++) { elm_error_correction()
301 reg_val = elm_read_reg(info, offset); elm_error_correction()
315 reg_val = elm_read_reg(info, offset); elm_error_correction()
329 elm_write_reg(info, ELM_IRQSTATUS, BIT(i)); elm_error_correction()
332 elm_configure_page_mode(info, i, false); elm_error_correction()
349 struct elm_info *info = dev_get_drvdata(dev); elm_decode_bch_error_page() local
353 reg_val = elm_read_reg(info, ELM_IRQSTATUS); elm_decode_bch_error_page()
354 elm_write_reg(info, ELM_IRQSTATUS, reg_val & INTR_STATUS_PAGE_VALID); elm_decode_bch_error_page()
355 elm_write_reg(info, ELM_IRQENABLE, INTR_EN_PAGE_MASK); elm_decode_bch_error_page()
358 elm_load_syndrome(info, err_vec, ecc_calc); elm_decode_bch_error_page()
361 elm_start_processing(info, err_vec); elm_decode_bch_error_page()
364 wait_for_completion(&info->elm_completion); elm_decode_bch_error_page()
367 reg_val = elm_read_reg(info, ELM_IRQENABLE); elm_decode_bch_error_page()
368 elm_write_reg(info, ELM_IRQENABLE, reg_val & ~INTR_EN_PAGE_MASK); elm_decode_bch_error_page()
369 elm_error_correction(info, err_vec); elm_decode_bch_error_page()
376 struct elm_info *info = dev_id; elm_isr() local
378 reg_val = elm_read_reg(info, ELM_IRQSTATUS); elm_isr()
382 elm_write_reg(info, ELM_IRQSTATUS, elm_isr()
384 complete(&info->elm_completion); elm_isr()
395 struct elm_info *info; elm_probe() local
397 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); elm_probe()
398 if (!info) elm_probe()
401 info->dev = &pdev->dev; elm_probe()
410 info->elm_base = devm_ioremap_resource(&pdev->dev, res); elm_probe()
411 if (IS_ERR(info->elm_base)) elm_probe()
412 return PTR_ERR(info->elm_base); elm_probe()
415 pdev->name, info); elm_probe()
429 init_completion(&info->elm_completion); elm_probe()
430 INIT_LIST_HEAD(&info->list); elm_probe()
431 list_add(&info->list, &elm_devices); elm_probe()
432 platform_set_drvdata(pdev, info); elm_probe()
448 static int elm_context_save(struct elm_info *info) elm_context_save() argument
450 struct elm_registers *regs = &info->elm_regs; elm_context_save()
451 enum bch_ecc bch_type = info->bch_type; elm_context_save()
454 regs->elm_irqenable = elm_read_reg(info, ELM_IRQENABLE); elm_context_save()
455 regs->elm_sysconfig = elm_read_reg(info, ELM_SYSCONFIG); elm_context_save()
456 regs->elm_location_config = elm_read_reg(info, ELM_LOCATION_CONFIG); elm_context_save()
457 regs->elm_page_ctrl = elm_read_reg(info, ELM_PAGE_CTRL); elm_context_save()
462 regs->elm_syndrome_fragment_6[i] = elm_read_reg(info, elm_context_save()
464 regs->elm_syndrome_fragment_5[i] = elm_read_reg(info, elm_context_save()
466 regs->elm_syndrome_fragment_4[i] = elm_read_reg(info, elm_context_save()
469 regs->elm_syndrome_fragment_3[i] = elm_read_reg(info, elm_context_save()
471 regs->elm_syndrome_fragment_2[i] = elm_read_reg(info, elm_context_save()
474 regs->elm_syndrome_fragment_1[i] = elm_read_reg(info, elm_context_save()
476 regs->elm_syndrome_fragment_0[i] = elm_read_reg(info, elm_context_save()
484 regs->elm_syndrome_fragment_6[i] = elm_read_reg(info, elm_context_save()
494 static int elm_context_restore(struct elm_info *info) elm_context_restore() argument
496 struct elm_registers *regs = &info->elm_regs; elm_context_restore()
497 enum bch_ecc bch_type = info->bch_type; elm_context_restore()
500 elm_write_reg(info, ELM_IRQENABLE, regs->elm_irqenable); elm_context_restore()
501 elm_write_reg(info, ELM_SYSCONFIG, regs->elm_sysconfig); elm_context_restore()
502 elm_write_reg(info, ELM_LOCATION_CONFIG, regs->elm_location_config); elm_context_restore()
503 elm_write_reg(info, ELM_PAGE_CTRL, regs->elm_page_ctrl); elm_context_restore()
508 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_6 + offset, elm_context_restore()
510 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_5 + offset, elm_context_restore()
512 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_4 + offset, elm_context_restore()
515 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_3 + offset, elm_context_restore()
517 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_2 + offset, elm_context_restore()
520 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_1 + offset, elm_context_restore()
522 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_0 + offset, elm_context_restore()
529 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_6 + offset, elm_context_restore()
538 struct elm_info *info = dev_get_drvdata(dev); elm_suspend() local
539 elm_context_save(info); elm_suspend()
546 struct elm_info *info = dev_get_drvdata(dev); elm_resume() local
548 elm_context_restore(info); elm_resume()
H A Ds3c2410.c103 * @info: Link back to the hardware information.
110 struct s3c2410_nand_info *info; member in struct:s3c2410_nand_mtd
144 /* mtd info */
149 /* device info */
176 return s3c2410_nand_mtd_toours(mtd)->info; s3c2410_nand_mtd_toinfo()
189 static inline int allow_clk_suspend(struct s3c2410_nand_info *info) allow_clk_suspend() argument
200 * @info: The controller instance.
203 static void s3c2410_nand_clk_set_state(struct s3c2410_nand_info *info, s3c2410_nand_clk_set_state() argument
206 if (!allow_clk_suspend(info) && new_state == CLOCK_SUSPEND) s3c2410_nand_clk_set_state()
209 if (info->clk_state == CLOCK_ENABLE) { s3c2410_nand_clk_set_state()
211 clk_disable_unprepare(info->clk); s3c2410_nand_clk_set_state()
214 clk_prepare_enable(info->clk); s3c2410_nand_clk_set_state()
217 info->clk_state = new_state; s3c2410_nand_clk_set_state()
258 * @info: The controller instance.
264 static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) s3c2410_nand_setrate() argument
266 struct s3c2410_platform_nand *plat = info->platform; s3c2410_nand_setrate()
267 int tacls_max = (info->cpu_type == TYPE_S3C2412) ? 8 : 4; s3c2410_nand_setrate()
269 unsigned long clkrate = clk_get_rate(info->clk); s3c2410_nand_setrate()
275 info->clk_rate = clkrate; s3c2410_nand_setrate()
290 dev_err(info->device, "cannot get suitable timings\n"); s3c2410_nand_setrate()
294 dev_info(info->device, "Tacls=%d, %dns Twrph0=%d %dns, Twrph1=%d %dns\n", s3c2410_nand_setrate()
298 switch (info->cpu_type) { s3c2410_nand_setrate()
326 cfg = readl(info->regs + S3C2410_NFCONF); s3c2410_nand_setrate()
329 writel(cfg, info->regs + S3C2410_NFCONF); s3c2410_nand_setrate()
333 dev_dbg(info->device, "NF_CONF is 0x%lx\n", cfg); s3c2410_nand_setrate()
340 * @info: The hardware state.
345 static int s3c2410_nand_inithw(struct s3c2410_nand_info *info) s3c2410_nand_inithw() argument
349 ret = s3c2410_nand_setrate(info); s3c2410_nand_inithw()
353 switch (info->cpu_type) { s3c2410_nand_inithw()
362 writel(S3C2440_NFCONT_ENABLE, info->regs + S3C2440_NFCONT); s3c2410_nand_inithw()
383 struct s3c2410_nand_info *info; s3c2410_nand_select_chip() local
389 info = nmtd->info; s3c2410_nand_select_chip()
392 s3c2410_nand_clk_set_state(info, CLOCK_ENABLE); s3c2410_nand_select_chip()
394 cur = readl(info->sel_reg); s3c2410_nand_select_chip()
397 cur |= info->sel_bit; s3c2410_nand_select_chip()
400 dev_err(info->device, "invalid chip %d\n", chip); s3c2410_nand_select_chip()
404 if (info->platform != NULL) { s3c2410_nand_select_chip()
405 if (info->platform->select_chip != NULL) s3c2410_nand_select_chip()
406 (info->platform->select_chip) (nmtd->set, chip); s3c2410_nand_select_chip()
409 cur &= ~info->sel_bit; s3c2410_nand_select_chip()
412 writel(cur, info->sel_reg); s3c2410_nand_select_chip()
415 s3c2410_nand_clk_set_state(info, CLOCK_SUSPEND); s3c2410_nand_select_chip()
426 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2410_nand_hwcontrol() local
432 writeb(cmd, info->regs + S3C2410_NFCMD); s3c2410_nand_hwcontrol()
434 writeb(cmd, info->regs + S3C2410_NFADDR); s3c2410_nand_hwcontrol()
442 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2440_nand_hwcontrol() local
448 writeb(cmd, info->regs + S3C2440_NFCMD); s3c2440_nand_hwcontrol()
450 writeb(cmd, info->regs + S3C2440_NFADDR); s3c2440_nand_hwcontrol()
460 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2410_nand_devready() local
461 return readb(info->regs + S3C2410_NFSTAT) & S3C2410_NFSTAT_BUSY; s3c2410_nand_devready()
466 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2440_nand_devready() local
467 return readb(info->regs + S3C2440_NFSTAT) & S3C2440_NFSTAT_READY; s3c2440_nand_devready()
472 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2412_nand_devready() local
473 return readb(info->regs + S3C2412_NFSTAT) & S3C2412_NFSTAT_READY; s3c2412_nand_devready()
482 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2410_nand_correct_data() local
504 && info->platform->ignore_unset_ecc) s3c2410_nand_correct_data()
531 dev_dbg(info->device, "correcting error bit %d, byte %d\n", s3c2410_nand_correct_data()
559 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2410_nand_enable_hwecc() local
562 ctrl = readl(info->regs + S3C2410_NFCONF); s3c2410_nand_enable_hwecc()
564 writel(ctrl, info->regs + S3C2410_NFCONF); s3c2410_nand_enable_hwecc()
569 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2412_nand_enable_hwecc() local
572 ctrl = readl(info->regs + S3C2440_NFCONT); s3c2412_nand_enable_hwecc()
574 info->regs + S3C2440_NFCONT); s3c2412_nand_enable_hwecc()
579 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2440_nand_enable_hwecc() local
582 ctrl = readl(info->regs + S3C2440_NFCONT); s3c2440_nand_enable_hwecc()
583 writel(ctrl | S3C2440_NFCONT_INITECC, info->regs + S3C2440_NFCONT); s3c2440_nand_enable_hwecc()
589 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2410_nand_calculate_ecc() local
591 ecc_code[0] = readb(info->regs + S3C2410_NFECC + 0); s3c2410_nand_calculate_ecc()
592 ecc_code[1] = readb(info->regs + S3C2410_NFECC + 1); s3c2410_nand_calculate_ecc()
593 ecc_code[2] = readb(info->regs + S3C2410_NFECC + 2); s3c2410_nand_calculate_ecc()
603 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2412_nand_calculate_ecc() local
604 unsigned long ecc = readl(info->regs + S3C2412_NFMECC0); s3c2412_nand_calculate_ecc()
618 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2440_nand_calculate_ecc() local
619 unsigned long ecc = readl(info->regs + S3C2440_NFMECC0); s3c2440_nand_calculate_ecc()
643 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2440_nand_read_buf() local
645 readsl(info->regs + S3C2440_NFDATA, buf, len >> 2); s3c2440_nand_read_buf()
652 *buf++ = readb(info->regs + S3C2440_NFDATA); s3c2440_nand_read_buf()
666 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); s3c2440_nand_write_buf() local
668 writesl(info->regs + S3C2440_NFDATA, buf, len >> 2); s3c2440_nand_write_buf()
675 writeb(*buf, info->regs + S3C2440_NFDATA); s3c2440_nand_write_buf()
686 struct s3c2410_nand_info *info; s3c2410_nand_cpufreq_transition() local
689 info = container_of(nb, struct s3c2410_nand_info, freq_transition); s3c2410_nand_cpufreq_transition()
690 newclk = clk_get_rate(info->clk); s3c2410_nand_cpufreq_transition()
692 if ((val == CPUFREQ_POSTCHANGE && newclk < info->clk_rate) || s3c2410_nand_cpufreq_transition()
693 (val == CPUFREQ_PRECHANGE && newclk > info->clk_rate)) { s3c2410_nand_cpufreq_transition()
694 s3c2410_nand_setrate(info); s3c2410_nand_cpufreq_transition()
700 static inline int s3c2410_nand_cpufreq_register(struct s3c2410_nand_info *info) s3c2410_nand_cpufreq_register() argument
702 info->freq_transition.notifier_call = s3c2410_nand_cpufreq_transition; s3c2410_nand_cpufreq_register()
704 return cpufreq_register_notifier(&info->freq_transition, s3c2410_nand_cpufreq_register()
709 s3c2410_nand_cpufreq_deregister(struct s3c2410_nand_info *info) s3c2410_nand_cpufreq_deregister() argument
711 cpufreq_unregister_notifier(&info->freq_transition, s3c2410_nand_cpufreq_deregister()
716 static inline int s3c2410_nand_cpufreq_register(struct s3c2410_nand_info *info) s3c2410_nand_cpufreq_register() argument
722 s3c2410_nand_cpufreq_deregister(struct s3c2410_nand_info *info) s3c2410_nand_cpufreq_deregister() argument
731 struct s3c2410_nand_info *info = to_nand_info(pdev); s3c24xx_nand_remove() local
733 if (info == NULL) s3c24xx_nand_remove()
736 s3c2410_nand_cpufreq_deregister(info); s3c24xx_nand_remove()
742 if (info->mtds != NULL) { s3c24xx_nand_remove()
743 struct s3c2410_nand_mtd *ptr = info->mtds; s3c24xx_nand_remove()
746 for (mtdno = 0; mtdno < info->mtd_count; mtdno++, ptr++) { s3c24xx_nand_remove()
754 if (!IS_ERR(info->clk)) s3c24xx_nand_remove()
755 s3c2410_nand_clk_set_state(info, CLOCK_DISABLE); s3c24xx_nand_remove()
760 static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info, s3c2410_nand_add_partition() argument
776 * @info: The base NAND controller the chip is on.
780 * Initialise the given @nmtd from the information in @info and @set. This
784 static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, s3c2410_nand_init_chip() argument
789 void __iomem *regs = info->regs; s3c2410_nand_init_chip()
797 chip->controller = &info->controller; s3c2410_nand_init_chip()
799 switch (info->cpu_type) { s3c2410_nand_init_chip()
802 info->sel_reg = regs + S3C2410_NFCONF; s3c2410_nand_init_chip()
803 info->sel_bit = S3C2410_NFCONF_nFCE; s3c2410_nand_init_chip()
810 info->sel_reg = regs + S3C2440_NFCONT; s3c2410_nand_init_chip()
811 info->sel_bit = S3C2440_NFCONT_nFCE; s3c2410_nand_init_chip()
820 info->sel_reg = regs + S3C2440_NFCONT; s3c2410_nand_init_chip()
821 info->sel_bit = S3C2412_NFCONT_nFCE0; s3c2410_nand_init_chip()
826 dev_info(info->device, "System booted from NAND\n"); s3c2410_nand_init_chip()
833 nmtd->info = info; s3c2410_nand_init_chip()
844 switch (info->cpu_type) { s3c2410_nand_init_chip()
872 dev_info(info->device, "NAND ECC disabled\n"); s3c2410_nand_init_chip()
875 dev_info(info->device, "NAND soft ECC\n"); s3c2410_nand_init_chip()
878 dev_info(info->device, "NAND hardware ECC\n"); s3c2410_nand_init_chip()
881 dev_info(info->device, "NAND ECC UNKNOWN\n"); s3c2410_nand_init_chip()
896 * @info: The controller instance.
905 static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info, s3c2410_nand_update_chip() argument
910 dev_dbg(info->device, "chip %p => page shift %d\n", s3c2410_nand_update_chip()
940 struct s3c2410_nand_info *info; s3c24xx_nand_probe() local
951 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); s3c24xx_nand_probe()
952 if (info == NULL) { s3c24xx_nand_probe()
957 platform_set_drvdata(pdev, info); s3c24xx_nand_probe()
959 spin_lock_init(&info->controller.lock); s3c24xx_nand_probe()
960 init_waitqueue_head(&info->controller.wq); s3c24xx_nand_probe()
964 info->clk = devm_clk_get(&pdev->dev, "nand"); s3c24xx_nand_probe()
965 if (IS_ERR(info->clk)) { s3c24xx_nand_probe()
971 s3c2410_nand_clk_set_state(info, CLOCK_ENABLE); s3c24xx_nand_probe()
979 info->device = &pdev->dev; s3c24xx_nand_probe()
980 info->platform = plat; s3c24xx_nand_probe()
981 info->cpu_type = cpu_type; s3c24xx_nand_probe()
983 info->regs = devm_ioremap_resource(&pdev->dev, res); s3c24xx_nand_probe()
984 if (IS_ERR(info->regs)) { s3c24xx_nand_probe()
985 err = PTR_ERR(info->regs); s3c24xx_nand_probe()
989 dev_dbg(&pdev->dev, "mapped registers at %p\n", info->regs); s3c24xx_nand_probe()
993 err = s3c2410_nand_inithw(info); s3c24xx_nand_probe()
1000 info->mtd_count = nr_sets; s3c24xx_nand_probe()
1004 size = nr_sets * sizeof(*info->mtds); s3c24xx_nand_probe()
1005 info->mtds = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); s3c24xx_nand_probe()
1006 if (info->mtds == NULL) { s3c24xx_nand_probe()
1013 nmtd = info->mtds; s3c24xx_nand_probe()
1016 pr_debug("initialising set %d (%p, info %p)\n", s3c24xx_nand_probe()
1017 setno, nmtd, info); s3c24xx_nand_probe()
1019 s3c2410_nand_init_chip(info, nmtd, sets); s3c24xx_nand_probe()
1026 s3c2410_nand_update_chip(info, nmtd); s3c24xx_nand_probe()
1028 s3c2410_nand_add_partition(info, nmtd, sets); s3c24xx_nand_probe()
1035 err = s3c2410_nand_cpufreq_register(info); s3c24xx_nand_probe()
1041 if (allow_clk_suspend(info)) { s3c24xx_nand_probe()
1043 s3c2410_nand_clk_set_state(info, CLOCK_SUSPEND); s3c24xx_nand_probe()
1061 struct s3c2410_nand_info *info = platform_get_drvdata(dev); s3c24xx_nand_suspend() local
1063 if (info) { s3c24xx_nand_suspend()
1064 info->save_sel = readl(info->sel_reg); s3c24xx_nand_suspend()
1071 writel(info->save_sel | info->sel_bit, info->sel_reg); s3c24xx_nand_suspend()
1073 s3c2410_nand_clk_set_state(info, CLOCK_DISABLE); s3c24xx_nand_suspend()
1081 struct s3c2410_nand_info *info = platform_get_drvdata(dev); s3c24xx_nand_resume() local
1084 if (info) { s3c24xx_nand_resume()
1085 s3c2410_nand_clk_set_state(info, CLOCK_ENABLE); s3c24xx_nand_resume()
1086 s3c2410_nand_inithw(info); s3c24xx_nand_resume()
1090 sel = readl(info->sel_reg); s3c24xx_nand_resume()
1091 sel &= ~info->sel_bit; s3c24xx_nand_resume()
1092 sel |= info->save_sel & info->sel_bit; s3c24xx_nand_resume()
1093 writel(sel, info->sel_reg); s3c24xx_nand_resume()
1095 s3c2410_nand_clk_set_state(info, CLOCK_SUSPEND); s3c24xx_nand_resume()
/linux-4.1.27/drivers/uio/
H A Duio_mf624.c46 struct uio_info *info) mf624_disable_interrupt()
48 void __iomem *INTCSR_reg = info->mem[0].internal_addr + INTCSR; mf624_disable_interrupt()
74 struct uio_info *info) mf624_enable_interrupt()
76 void __iomem *INTCSR_reg = info->mem[0].internal_addr + INTCSR; mf624_enable_interrupt()
101 static irqreturn_t mf624_irq_handler(int irq, struct uio_info *info) mf624_irq_handler() argument
103 void __iomem *INTCSR_reg = info->mem[0].internal_addr + INTCSR; mf624_irq_handler()
107 mf624_disable_interrupt(ADC, info); mf624_irq_handler()
113 mf624_disable_interrupt(CTR4, info); mf624_irq_handler()
120 static int mf624_irqcontrol(struct uio_info *info, s32 irq_on) mf624_irqcontrol() argument
123 mf624_disable_interrupt(ALL, info); mf624_irqcontrol()
125 mf624_enable_interrupt(ALL, info); mf624_irqcontrol()
132 struct uio_info *info; mf624_pci_probe() local
134 info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); mf624_pci_probe()
135 if (!info) mf624_pci_probe()
144 info->name = "mf624"; mf624_pci_probe()
145 info->version = "0.0.1"; mf624_pci_probe()
150 info->mem[0].name = "PCI chipset, interrupts, status " mf624_pci_probe()
152 info->mem[0].addr = pci_resource_start(dev, 0); mf624_pci_probe()
153 if (!info->mem[0].addr) mf624_pci_probe()
155 info->mem[0].size = pci_resource_len(dev, 0); mf624_pci_probe()
156 info->mem[0].memtype = UIO_MEM_PHYS; mf624_pci_probe()
157 info->mem[0].internal_addr = pci_ioremap_bar(dev, 0); mf624_pci_probe()
158 if (!info->mem[0].internal_addr) mf624_pci_probe()
162 info->mem[1].name = "ADC, DAC, DIO"; mf624_pci_probe()
163 info->mem[1].addr = pci_resource_start(dev, 2); mf624_pci_probe()
164 if (!info->mem[1].addr) mf624_pci_probe()
166 info->mem[1].size = pci_resource_len(dev, 2); mf624_pci_probe()
167 info->mem[1].memtype = UIO_MEM_PHYS; mf624_pci_probe()
168 info->mem[1].internal_addr = pci_ioremap_bar(dev, 2); mf624_pci_probe()
169 if (!info->mem[1].internal_addr) mf624_pci_probe()
173 info->mem[2].name = "Counter/timer chip"; mf624_pci_probe()
174 info->mem[2].addr = pci_resource_start(dev, 4); mf624_pci_probe()
175 if (!info->mem[2].addr) mf624_pci_probe()
177 info->mem[2].size = pci_resource_len(dev, 4); mf624_pci_probe()
178 info->mem[2].memtype = UIO_MEM_PHYS; mf624_pci_probe()
179 info->mem[2].internal_addr = pci_ioremap_bar(dev, 4); mf624_pci_probe()
180 if (!info->mem[2].internal_addr) mf624_pci_probe()
183 info->irq = dev->irq; mf624_pci_probe()
184 info->irq_flags = IRQF_SHARED; mf624_pci_probe()
185 info->handler = mf624_irq_handler; mf624_pci_probe()
187 info->irqcontrol = mf624_irqcontrol; mf624_pci_probe()
189 if (uio_register_device(&dev->dev, info)) mf624_pci_probe()
192 pci_set_drvdata(dev, info); mf624_pci_probe()
197 iounmap(info->mem[2].internal_addr); mf624_pci_probe()
199 iounmap(info->mem[1].internal_addr); mf624_pci_probe()
201 iounmap(info->mem[0].internal_addr); mf624_pci_probe()
210 kfree(info); mf624_pci_probe()
216 struct uio_info *info = pci_get_drvdata(dev); mf624_pci_remove() local
218 mf624_disable_interrupt(ALL, info); mf624_pci_remove()
220 uio_unregister_device(info); mf624_pci_remove()
224 iounmap(info->mem[0].internal_addr); mf624_pci_remove()
225 iounmap(info->mem[1].internal_addr); mf624_pci_remove()
226 iounmap(info->mem[2].internal_addr); mf624_pci_remove()
228 kfree(info); mf624_pci_remove()
45 mf624_disable_interrupt(enum mf624_interrupt_source source, struct uio_info *info) mf624_disable_interrupt() argument
73 mf624_enable_interrupt(enum mf624_interrupt_source source, struct uio_info *info) mf624_enable_interrupt() argument
H A Duio_cif.c46 struct uio_info *info; hilscher_pci_probe() local
48 info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); hilscher_pci_probe()
49 if (!info) hilscher_pci_probe()
58 info->mem[0].addr = pci_resource_start(dev, 0); hilscher_pci_probe()
59 if (!info->mem[0].addr) hilscher_pci_probe()
61 info->mem[0].internal_addr = pci_ioremap_bar(dev, 0); hilscher_pci_probe()
62 if (!info->mem[0].internal_addr) hilscher_pci_probe()
65 info->mem[0].size = pci_resource_len(dev, 0); hilscher_pci_probe()
66 info->mem[0].memtype = UIO_MEM_PHYS; hilscher_pci_probe()
67 info->mem[1].addr = pci_resource_start(dev, 2); hilscher_pci_probe()
68 info->mem[1].size = pci_resource_len(dev, 2); hilscher_pci_probe()
69 info->mem[1].memtype = UIO_MEM_PHYS; hilscher_pci_probe()
72 info->name = "CIF_Profibus"; hilscher_pci_probe()
75 info->name = "CIF_Devicenet"; hilscher_pci_probe()
78 info->name = "CIF_???"; hilscher_pci_probe()
80 info->version = "0.0.1"; hilscher_pci_probe()
81 info->irq = dev->irq; hilscher_pci_probe()
82 info->irq_flags = IRQF_SHARED; hilscher_pci_probe()
83 info->handler = hilscher_handler; hilscher_pci_probe()
85 if (uio_register_device(&dev->dev, info)) hilscher_pci_probe()
88 pci_set_drvdata(dev, info); hilscher_pci_probe()
92 iounmap(info->mem[0].internal_addr); hilscher_pci_probe()
98 kfree (info); hilscher_pci_probe()
104 struct uio_info *info = pci_get_drvdata(dev); hilscher_pci_remove() local
106 uio_unregister_device(info); hilscher_pci_remove()
109 iounmap(info->mem[0].internal_addr); hilscher_pci_remove()
111 kfree (info); hilscher_pci_remove()
H A Duio_sercos3.c51 static void sercos3_disable_interrupts(struct uio_info *info, sercos3_disable_interrupts() argument
54 void __iomem *ier0 = info->mem[3].internal_addr + IER0_OFFSET; sercos3_disable_interrupts()
64 static void sercos3_enable_interrupts(struct uio_info *info, sercos3_enable_interrupts() argument
67 void __iomem *ier0 = info->mem[3].internal_addr + IER0_OFFSET; sercos3_enable_interrupts()
74 static irqreturn_t sercos3_handler(int irq, struct uio_info *info) sercos3_handler() argument
76 struct sercos3_priv *priv = info->priv; sercos3_handler()
77 void __iomem *isr0 = info->mem[3].internal_addr + ISR0_OFFSET; sercos3_handler()
78 void __iomem *ier0 = info->mem[3].internal_addr + IER0_OFFSET; sercos3_handler()
84 sercos3_disable_interrupts(info, priv); sercos3_handler()
90 static int sercos3_irqcontrol(struct uio_info *info, s32 irq_on) sercos3_irqcontrol() argument
92 struct sercos3_priv *priv = info->priv; sercos3_irqcontrol()
96 sercos3_enable_interrupts(info, priv); sercos3_irqcontrol()
98 sercos3_disable_interrupts(info, priv); sercos3_irqcontrol()
104 static int sercos3_setup_iomem(struct pci_dev *dev, struct uio_info *info, sercos3_setup_iomem() argument
107 info->mem[n].addr = pci_resource_start(dev, pci_bar); sercos3_setup_iomem()
108 if (!info->mem[n].addr) sercos3_setup_iomem()
110 info->mem[n].internal_addr = ioremap(pci_resource_start(dev, pci_bar), sercos3_setup_iomem()
112 if (!info->mem[n].internal_addr) sercos3_setup_iomem()
114 info->mem[n].size = pci_resource_len(dev, pci_bar); sercos3_setup_iomem()
115 info->mem[n].memtype = UIO_MEM_PHYS; sercos3_setup_iomem()
122 struct uio_info *info; sercos3_pci_probe() local
126 info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); sercos3_pci_probe()
127 if (!info) sercos3_pci_probe()
141 if (sercos3_setup_iomem(dev, info, 0, 0)) sercos3_pci_probe()
143 if (sercos3_setup_iomem(dev, info, 1, 2)) sercos3_pci_probe()
145 if (sercos3_setup_iomem(dev, info, 2, 3)) sercos3_pci_probe()
147 if (sercos3_setup_iomem(dev, info, 3, 4)) sercos3_pci_probe()
149 if (sercos3_setup_iomem(dev, info, 4, 5)) sercos3_pci_probe()
153 info->priv = priv; sercos3_pci_probe()
154 info->name = "Sercos_III_PCI"; sercos3_pci_probe()
155 info->version = "0.0.1"; sercos3_pci_probe()
156 info->irq = dev->irq; sercos3_pci_probe()
157 info->irq_flags = IRQF_SHARED; sercos3_pci_probe()
158 info->handler = sercos3_handler; sercos3_pci_probe()
159 info->irqcontrol = sercos3_irqcontrol; sercos3_pci_probe()
161 pci_set_drvdata(dev, info); sercos3_pci_probe()
163 if (uio_register_device(&dev->dev, info)) sercos3_pci_probe()
170 if (info->mem[i].internal_addr) sercos3_pci_probe()
171 iounmap(info->mem[i].internal_addr); sercos3_pci_probe()
179 kfree(info); sercos3_pci_probe()
185 struct uio_info *info = pci_get_drvdata(dev); sercos3_pci_remove() local
188 uio_unregister_device(info); sercos3_pci_remove()
192 if (info->mem[i].internal_addr) sercos3_pci_remove()
193 iounmap(info->mem[i].internal_addr); sercos3_pci_remove()
195 kfree(info->priv); sercos3_pci_remove()
196 kfree(info); sercos3_pci_remove()
H A Duio_netx.c54 struct uio_info *info; netx_pci_probe() local
57 info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); netx_pci_probe()
58 if (!info) netx_pci_probe()
70 info->name = "netx"; netx_pci_probe()
74 info->name = "netplc"; netx_pci_probe()
78 info->name = "netx_plx"; netx_pci_probe()
82 info->mem[0].addr = pci_resource_start(dev, bar); netx_pci_probe()
83 if (!info->mem[0].addr) netx_pci_probe()
85 info->mem[0].internal_addr = ioremap(pci_resource_start(dev, bar), netx_pci_probe()
88 if (!info->mem[0].internal_addr) netx_pci_probe()
91 info->mem[0].size = pci_resource_len(dev, bar); netx_pci_probe()
92 info->mem[0].memtype = UIO_MEM_PHYS; netx_pci_probe()
93 info->irq = dev->irq; netx_pci_probe()
94 info->irq_flags = IRQF_SHARED; netx_pci_probe()
95 info->handler = netx_handler; netx_pci_probe()
96 info->version = "0.0.1"; netx_pci_probe()
99 iowrite32(0, info->mem[0].internal_addr + DPM_HOST_INT_EN0); netx_pci_probe()
101 if (uio_register_device(&dev->dev, info)) netx_pci_probe()
104 pci_set_drvdata(dev, info); netx_pci_probe()
106 info->name); netx_pci_probe()
111 iounmap(info->mem[0].internal_addr); netx_pci_probe()
117 kfree(info); netx_pci_probe()
123 struct uio_info *info = pci_get_drvdata(dev); netx_pci_remove() local
126 iowrite32(0, info->mem[0].internal_addr + DPM_HOST_INT_EN0); netx_pci_remove()
127 uio_unregister_device(info); netx_pci_remove()
130 iounmap(info->mem[0].internal_addr); netx_pci_remove()
132 kfree(info); netx_pci_remove()
H A Duio_aec.c83 struct uio_info *info; probe() local
86 info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); probe()
87 if (!info) probe()
96 info->name = "aectc"; probe()
97 info->port[0].start = pci_resource_start(pdev, 0); probe()
98 if (!info->port[0].start) probe()
100 info->priv = pci_iomap(pdev, 0, 0); probe()
101 if (!info->priv) probe()
103 info->port[0].size = pci_resource_len(pdev, 0); probe()
104 info->port[0].porttype = UIO_PORT_GPIO; probe()
106 info->version = "0.0.1"; probe()
107 info->irq = pdev->irq; probe()
108 info->irq_flags = IRQF_SHARED; probe()
109 info->handler = aectc_irq; probe()
111 print_board_data(pdev, info); probe()
112 ret = uio_register_device(&pdev->dev, info); probe()
116 iowrite32(INT_ENABLE, info->priv + INT_ENABLE_ADDR); probe()
117 iowrite8(INT_MASK_ALL, info->priv + INT_MASK_ADDR); probe()
118 if (!(ioread8(info->priv + INTA_DRVR_ADDR) probe()
122 pci_set_drvdata(pdev, info); probe()
127 pci_iounmap(pdev, info->priv); probe()
133 kfree(info); probe()
139 struct uio_info *info = pci_get_drvdata(pdev); remove() local
142 iowrite8(INT_DISABLE, info->priv + INT_MASK_ADDR); remove()
143 iowrite32(INT_DISABLE, info->priv + INT_ENABLE_ADDR); remove()
145 ioread8(info->priv + MAILBOX); remove()
147 uio_unregister_device(info); remove()
150 iounmap(info->priv); remove()
152 kfree(info); remove()
/linux-4.1.27/arch/arm/mach-mmp/
H A Dsram.c44 struct sram_bank_info *info = NULL; sram_get_gpool() local
51 list_for_each_entry(info, &sram_bank_list, node) sram_get_gpool()
52 if (!strcmp(pool_name, info->pool_name)) sram_get_gpool()
57 if (&info->node == &sram_bank_list) sram_get_gpool()
60 return info->gpool; sram_get_gpool()
67 struct sram_bank_info *info; sram_probe() local
74 info = kzalloc(sizeof(*info), GFP_KERNEL); sram_probe()
75 if (!info) sram_probe()
88 info->sram_phys = (phys_addr_t)res->start; sram_probe()
89 info->sram_size = resource_size(res); sram_probe()
90 info->sram_virt = ioremap(info->sram_phys, info->sram_size); sram_probe()
91 info->pool_name = kstrdup(pdata->pool_name, GFP_KERNEL); sram_probe()
92 info->granularity = pdata->granularity; sram_probe()
94 info->gpool = gen_pool_create(ilog2(info->granularity), -1); sram_probe()
95 if (!info->gpool) { sram_probe()
101 ret = gen_pool_add_virt(info->gpool, (unsigned long)info->sram_virt, sram_probe()
102 info->sram_phys, info->sram_size, -1); sram_probe()
110 list_add(&info->node, &sram_bank_list); sram_probe()
113 platform_set_drvdata(pdev, info); sram_probe()
119 gen_pool_destroy(info->gpool); sram_probe()
121 iounmap(info->sram_virt); sram_probe()
122 kfree(info->pool_name); sram_probe()
124 kfree(info); sram_probe()
130 struct sram_bank_info *info; sram_remove() local
132 info = platform_get_drvdata(pdev); sram_remove()
133 if (info == NULL) sram_remove()
137 list_del(&info->node); sram_remove()
140 gen_pool_destroy(info->gpool); sram_remove()
141 iounmap(info->sram_virt); sram_remove()
142 kfree(info->pool_name); sram_remove()
143 kfree(info); sram_remove()
/linux-4.1.27/net/bridge/netfilter/
H A Debt_limit.c37 struct ebt_limit_info *info = (void *)par->matchinfo; ebt_limit_mt() local
41 info->credit += (now - xchg(&info->prev, now)) * CREDITS_PER_JIFFY; ebt_limit_mt()
42 if (info->credit > info->credit_cap) ebt_limit_mt()
43 info->credit = info->credit_cap; ebt_limit_mt()
45 if (info->credit >= info->cost) { ebt_limit_mt()
47 info->credit -= info->cost; ebt_limit_mt()
70 struct ebt_limit_info *info = par->matchinfo; ebt_limit_mt_check() local
73 if (info->burst == 0 || ebt_limit_mt_check()
74 user2credits(info->avg * info->burst) < user2credits(info->avg)) { ebt_limit_mt_check()
76 info->avg, info->burst); ebt_limit_mt_check()
81 info->prev = jiffies; ebt_limit_mt_check()
82 info->credit = user2credits(info->avg * info->burst); ebt_limit_mt_check()
83 info->credit_cap = user2credits(info->avg * info->burst); ebt_limit_mt_check()
84 info->cost = user2credits(info->avg); ebt_limit_mt_check()
H A Debt_ip.c30 const struct ebt_ip_info *info = par->matchinfo; ebt_ip_mt() local
39 if (info->bitmask & EBT_IP_TOS && ebt_ip_mt()
40 FWINV(info->tos != ih->tos, EBT_IP_TOS)) ebt_ip_mt()
42 if (info->bitmask & EBT_IP_SOURCE && ebt_ip_mt()
43 FWINV((ih->saddr & info->smsk) != ebt_ip_mt()
44 info->saddr, EBT_IP_SOURCE)) ebt_ip_mt()
46 if ((info->bitmask & EBT_IP_DEST) && ebt_ip_mt()
47 FWINV((ih->daddr & info->dmsk) != ebt_ip_mt()
48 info->daddr, EBT_IP_DEST)) ebt_ip_mt()
50 if (info->bitmask & EBT_IP_PROTO) { ebt_ip_mt()
51 if (FWINV(info->protocol != ih->protocol, EBT_IP_PROTO)) ebt_ip_mt()
53 if (!(info->bitmask & EBT_IP_DPORT) && ebt_ip_mt()
54 !(info->bitmask & EBT_IP_SPORT)) ebt_ip_mt()
62 if (info->bitmask & EBT_IP_DPORT) { ebt_ip_mt()
64 if (FWINV(dst < info->dport[0] || ebt_ip_mt()
65 dst > info->dport[1], ebt_ip_mt()
69 if (info->bitmask & EBT_IP_SPORT) { ebt_ip_mt()
71 if (FWINV(src < info->sport[0] || ebt_ip_mt()
72 src > info->sport[1], ebt_ip_mt()
82 const struct ebt_ip_info *info = par->matchinfo; ebt_ip_mt_check() local
88 if (info->bitmask & ~EBT_IP_MASK || info->invflags & ~EBT_IP_MASK) ebt_ip_mt_check()
90 if (info->bitmask & (EBT_IP_DPORT | EBT_IP_SPORT)) { ebt_ip_mt_check()
91 if (info->invflags & EBT_IP_PROTO) ebt_ip_mt_check()
93 if (info->protocol != IPPROTO_TCP && ebt_ip_mt_check()
94 info->protocol != IPPROTO_UDP && ebt_ip_mt_check()
95 info->protocol != IPPROTO_UDPLITE && ebt_ip_mt_check()
96 info->protocol != IPPROTO_SCTP && ebt_ip_mt_check()
97 info->protocol != IPPROTO_DCCP) ebt_ip_mt_check()
100 if (info->bitmask & EBT_IP_DPORT && info->dport[0] > info->dport[1]) ebt_ip_mt_check()
102 if (info->bitmask & EBT_IP_SPORT && info->sport[0] > info->sport[1]) ebt_ip_mt_check()
H A Debt_ip6.c39 const struct ebt_ip6_info *info = par->matchinfo; ebt_ip6_mt() local
48 if (info->bitmask & EBT_IP6_TCLASS && ebt_ip6_mt()
49 FWINV(info->tclass != ipv6_get_dsfield(ih6), EBT_IP6_TCLASS)) ebt_ip6_mt()
51 if ((info->bitmask & EBT_IP6_SOURCE && ebt_ip6_mt()
52 FWINV(ipv6_masked_addr_cmp(&ih6->saddr, &info->smsk, ebt_ip6_mt()
53 &info->saddr), EBT_IP6_SOURCE)) || ebt_ip6_mt()
54 (info->bitmask & EBT_IP6_DEST && ebt_ip6_mt()
55 FWINV(ipv6_masked_addr_cmp(&ih6->daddr, &info->dmsk, ebt_ip6_mt()
56 &info->daddr), EBT_IP6_DEST))) ebt_ip6_mt()
58 if (info->bitmask & EBT_IP6_PROTO) { ebt_ip6_mt()
66 if (FWINV(info->protocol != nexthdr, EBT_IP6_PROTO)) ebt_ip6_mt()
68 if (!(info->bitmask & ( EBT_IP6_DPORT | ebt_ip6_mt()
77 if (info->bitmask & EBT_IP6_DPORT) { ebt_ip6_mt()
79 if (FWINV(dst < info->dport[0] || ebt_ip6_mt()
80 dst > info->dport[1], EBT_IP6_DPORT)) ebt_ip6_mt()
83 if (info->bitmask & EBT_IP6_SPORT) { ebt_ip6_mt()
85 if (FWINV(src < info->sport[0] || ebt_ip6_mt()
86 src > info->sport[1], EBT_IP6_SPORT)) ebt_ip6_mt()
89 if ((info->bitmask & EBT_IP6_ICMP6) && ebt_ip6_mt()
90 FWINV(pptr->icmphdr.type < info->icmpv6_type[0] || ebt_ip6_mt()
91 pptr->icmphdr.type > info->icmpv6_type[1] || ebt_ip6_mt()
92 pptr->icmphdr.code < info->icmpv6_code[0] || ebt_ip6_mt()
93 pptr->icmphdr.code > info->icmpv6_code[1], ebt_ip6_mt()
103 struct ebt_ip6_info *info = par->matchinfo; ebt_ip6_mt_check() local
107 if (info->bitmask & ~EBT_IP6_MASK || info->invflags & ~EBT_IP6_MASK) ebt_ip6_mt_check()
109 if (info->bitmask & (EBT_IP6_DPORT | EBT_IP6_SPORT)) { ebt_ip6_mt_check()
110 if (info->invflags & EBT_IP6_PROTO) ebt_ip6_mt_check()
112 if (info->protocol != IPPROTO_TCP && ebt_ip6_mt_check()
113 info->protocol != IPPROTO_UDP && ebt_ip6_mt_check()
114 info->protocol != IPPROTO_UDPLITE && ebt_ip6_mt_check()
115 info->protocol != IPPROTO_SCTP && ebt_ip6_mt_check()
116 info->protocol != IPPROTO_DCCP) ebt_ip6_mt_check()
119 if (info->bitmask & EBT_IP6_DPORT && info->dport[0] > info->dport[1]) ebt_ip6_mt_check()
121 if (info->bitmask & EBT_IP6_SPORT && info->sport[0] > info->sport[1]) ebt_ip6_mt_check()
123 if (info->bitmask & EBT_IP6_ICMP6) { ebt_ip6_mt_check()
124 if ((info->invflags & EBT_IP6_PROTO) || ebt_ip6_mt_check()
125 info->protocol != IPPROTO_ICMPV6) ebt_ip6_mt_check()
127 if (info->icmpv6_type[0] > info->icmpv6_type[1] || ebt_ip6_mt_check()
128 info->icmpv6_code[0] > info->icmpv6_code[1]) ebt_ip6_mt_check()
H A Debt_arp.c21 const struct ebt_arp_info *info = par->matchinfo; ebt_arp_mt() local
28 if (info->bitmask & EBT_ARP_OPCODE && FWINV(info->opcode != ebt_arp_mt()
31 if (info->bitmask & EBT_ARP_HTYPE && FWINV(info->htype != ebt_arp_mt()
34 if (info->bitmask & EBT_ARP_PTYPE && FWINV(info->ptype != ebt_arp_mt()
38 if (info->bitmask & (EBT_ARP_SRC_IP | EBT_ARP_DST_IP | EBT_ARP_GRAT)) { ebt_arp_mt()
54 if (info->bitmask & EBT_ARP_SRC_IP && ebt_arp_mt()
55 FWINV(info->saddr != (*sap & info->smsk), EBT_ARP_SRC_IP)) ebt_arp_mt()
57 if (info->bitmask & EBT_ARP_DST_IP && ebt_arp_mt()
58 FWINV(info->daddr != (*dap & info->dmsk), EBT_ARP_DST_IP)) ebt_arp_mt()
60 if (info->bitmask & EBT_ARP_GRAT && ebt_arp_mt()
65 if (info->bitmask & (EBT_ARP_SRC_MAC | EBT_ARP_DST_MAC)) { ebt_arp_mt()
72 if (info->bitmask & EBT_ARP_SRC_MAC) { ebt_arp_mt()
79 verdict |= (mp[i] ^ info->smaddr[i]) & ebt_arp_mt()
80 info->smmsk[i]; ebt_arp_mt()
85 if (info->bitmask & EBT_ARP_DST_MAC) { ebt_arp_mt()
93 verdict |= (mp[i] ^ info->dmaddr[i]) & ebt_arp_mt()
94 info->dmmsk[i]; ebt_arp_mt()
105 const struct ebt_arp_info *info = par->matchinfo; ebt_arp_mt_check() local
112 if (info->bitmask & ~EBT_ARP_MASK || info->invflags & ~EBT_ARP_MASK) ebt_arp_mt_check()
H A Debt_mark_m.c18 const struct ebt_mark_m_info *info = par->matchinfo; ebt_mark_mt() local
20 if (info->bitmask & EBT_MARK_OR) ebt_mark_mt()
21 return !!(skb->mark & info->mask) ^ info->invert; ebt_mark_mt()
22 return ((skb->mark & info->mask) == info->mark) ^ info->invert; ebt_mark_mt()
27 const struct ebt_mark_m_info *info = par->matchinfo; ebt_mark_mt_check() local
29 if (info->bitmask & ~EBT_MARK_MASK) ebt_mark_mt_check()
31 if ((info->bitmask & EBT_MARK_OR) && (info->bitmask & EBT_MARK_AND)) ebt_mark_mt_check()
33 if (!info->bitmask) ebt_mark_mt_check()
/linux-4.1.27/drivers/power/
H A D88pm860x_charger.c119 static int measure_vchg(struct pm860x_charger_info *info, int *data) measure_vchg() argument
124 ret = pm860x_bulk_read(info->i2c, PM8607_VCHG_MEAS1, 2, buf); measure_vchg()
132 dev_dbg(info->dev, "%s, vchg: %d mv\n", __func__, *data); measure_vchg()
137 static void set_vchg_threshold(struct pm860x_charger_info *info, set_vchg_threshold() argument
147 pm860x_reg_write(info->i2c, PM8607_VCHG_LOWTH, data); set_vchg_threshold()
148 dev_dbg(info->dev, "VCHG_LOWTH:%dmv, 0x%x\n", min, data); set_vchg_threshold()
154 pm860x_reg_write(info->i2c, PM8607_VCHG_HIGHTH, data); set_vchg_threshold()
155 dev_dbg(info->dev, "VCHG_HIGHTH:%dmv, 0x%x\n", max, data); set_vchg_threshold()
159 static void set_vbatt_threshold(struct pm860x_charger_info *info, set_vbatt_threshold() argument
169 pm860x_reg_write(info->i2c, PM8607_VBAT_LOWTH, data); set_vbatt_threshold()
170 dev_dbg(info->dev, "VBAT Min:%dmv, LOWTH:0x%x\n", min, data); set_vbatt_threshold()
176 pm860x_reg_write(info->i2c, PM8607_VBAT_HIGHTH, data); set_vbatt_threshold()
177 dev_dbg(info->dev, "VBAT Max:%dmv, HIGHTH:0x%x\n", max, data); set_vbatt_threshold()
182 static int start_precharge(struct pm860x_charger_info *info) start_precharge() argument
186 dev_dbg(info->dev, "Start Pre-charging!\n"); start_precharge()
187 set_vbatt_threshold(info, 0, 0); start_precharge()
189 ret = pm860x_reg_write(info->i2c_8606, PM8606_PREREGULATORA, start_precharge()
194 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL1, 3, start_precharge()
199 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL3, (0xf << 4), start_precharge()
204 ret = pm860x_reg_write(info->i2c, PM8607_CHG_CTRL4, start_precharge()
209 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL7, start_precharge()
215 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL1, 3, start_precharge()
221 static int start_fastcharge(struct pm860x_charger_info *info) start_fastcharge() argument
225 dev_dbg(info->dev, "Start Fast-charging!\n"); start_fastcharge()
228 ret = pm860x_reg_write(info->i2c, PM8607_CHG_CTRL1, start_fastcharge()
233 ret = pm860x_reg_write(info->i2c_8606, PM8606_PREREGULATORA, start_fastcharge()
237 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL2, 0x1f, start_fastcharge()
242 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL3, (0xf << 4), start_fastcharge()
247 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL4, start_fastcharge()
252 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL6, start_fastcharge()
259 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL7, start_fastcharge()
265 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL1, 3, start_fastcharge()
268 set_vchg_threshold(info, VCHG_NORMAL_LOW, VCHG_NORMAL_HIGH); start_fastcharge()
273 static void stop_charge(struct pm860x_charger_info *info, int vbatt) stop_charge() argument
275 dev_dbg(info->dev, "Stop charging!\n"); stop_charge()
276 pm860x_set_bits(info->i2c, PM8607_CHG_CTRL1, 3, CC1_MODE_OFF); stop_charge()
277 if (vbatt > CHARGE_THRESHOLD && info->online) stop_charge()
278 set_vbatt_threshold(info, CHARGE_THRESHOLD, 0); stop_charge()
281 static void power_off_notification(struct pm860x_charger_info *info) power_off_notification() argument
283 dev_dbg(info->dev, "Power-off notification!\n"); power_off_notification()
286 static int set_charging_fsm(struct pm860x_charger_info *info) set_charging_fsm() argument
314 mutex_lock(&info->lock); set_charging_fsm()
315 info->present = data.intval; set_charging_fsm()
317 dev_dbg(info->dev, "Entering FSM:%s, Charger:%s, Battery:%s, " set_charging_fsm()
319 &fsm_state[info->state][0], set_charging_fsm()
320 (info->online) ? "online" : "N/A", set_charging_fsm()
321 (info->present) ? "present" : "N/A", info->allowed); set_charging_fsm()
322 dev_dbg(info->dev, "set_charging_fsm:vbatt:%d(mV)\n", vbatt); set_charging_fsm()
324 switch (info->state) { set_charging_fsm()
326 if (info->online && info->present && info->allowed) { set_charging_fsm()
328 info->state = FSM_PRECHARGE; set_charging_fsm()
329 start_precharge(info); set_charging_fsm()
331 info->state = FSM_DISCHARGE; set_charging_fsm()
332 stop_charge(info, vbatt); set_charging_fsm()
334 info->state = FSM_FASTCHARGE; set_charging_fsm()
335 start_fastcharge(info); set_charging_fsm()
339 power_off_notification(info); set_charging_fsm()
341 info->state = FSM_DISCHARGE; set_charging_fsm()
342 stop_charge(info, vbatt); set_charging_fsm()
347 if (info->online && info->present && info->allowed) { set_charging_fsm()
349 info->state = FSM_FASTCHARGE; set_charging_fsm()
350 start_fastcharge(info); set_charging_fsm()
353 info->state = FSM_DISCHARGE; set_charging_fsm()
354 stop_charge(info, vbatt); set_charging_fsm()
358 if (info->online && info->present && info->allowed) { set_charging_fsm()
360 info->state = FSM_PRECHARGE; set_charging_fsm()
361 start_precharge(info); set_charging_fsm()
364 info->state = FSM_DISCHARGE; set_charging_fsm()
365 stop_charge(info, vbatt); set_charging_fsm()
369 if (info->online && info->present && info->allowed) { set_charging_fsm()
371 info->state = FSM_PRECHARGE; set_charging_fsm()
372 start_precharge(info); set_charging_fsm()
374 info->state = FSM_FASTCHARGE; set_charging_fsm()
375 start_fastcharge(info); set_charging_fsm()
379 power_off_notification(info); set_charging_fsm()
380 else if (vbatt > CHARGE_THRESHOLD && info->online) set_charging_fsm()
381 set_vbatt_threshold(info, CHARGE_THRESHOLD, 0); set_charging_fsm()
385 dev_warn(info->dev, "FSM meets wrong state:%d\n", set_charging_fsm()
386 info->state); set_charging_fsm()
389 dev_dbg(info->dev, set_charging_fsm()
391 &fsm_state[info->state][0], set_charging_fsm()
392 (info->online) ? "online" : "N/A", set_charging_fsm()
393 (info->present) ? "present" : "N/A", info->allowed); set_charging_fsm()
394 mutex_unlock(&info->lock); set_charging_fsm()
401 struct pm860x_charger_info *info = data; pm860x_charger_handler() local
404 mutex_lock(&info->lock); pm860x_charger_handler()
405 ret = pm860x_reg_read(info->i2c, PM8607_STATUS_2); pm860x_charger_handler()
407 mutex_unlock(&info->lock); pm860x_charger_handler()
411 info->online = 1; pm860x_charger_handler()
412 info->allowed = 1; pm860x_charger_handler()
414 info->online = 0; pm860x_charger_handler()
415 info->allowed = 0; pm860x_charger_handler()
417 mutex_unlock(&info->lock); pm860x_charger_handler()
418 dev_dbg(info->dev, "%s, Charger:%s, Allowed:%d\n", __func__, pm860x_charger_handler()
419 (info->online) ? "online" : "N/A", info->allowed); pm860x_charger_handler()
421 set_charging_fsm(info); pm860x_charger_handler()
423 power_supply_changed(info->usb); pm860x_charger_handler()
431 struct pm860x_charger_info *info = data; pm860x_temp_handler() local
444 mutex_lock(&info->lock); pm860x_temp_handler()
447 info->allowed = 0; pm860x_temp_handler()
449 info->allowed = 1; pm860x_temp_handler()
450 dev_dbg(info->dev, "%s, Allowed: %d\n", __func__, info->allowed); pm860x_temp_handler()
451 mutex_unlock(&info->lock); pm860x_temp_handler()
453 set_charging_fsm(info); pm860x_temp_handler()
461 struct pm860x_charger_info *info = data; pm860x_exception_handler() local
463 mutex_lock(&info->lock); pm860x_exception_handler()
464 info->allowed = 0; pm860x_exception_handler()
465 mutex_unlock(&info->lock); pm860x_exception_handler()
466 dev_dbg(info->dev, "%s, irq: %d\n", __func__, irq); pm860x_exception_handler()
468 set_charging_fsm(info); pm860x_exception_handler()
474 struct pm860x_charger_info *info = data; pm860x_done_handler() local
480 mutex_lock(&info->lock); pm860x_done_handler()
482 if (info->state == FSM_PRECHARGE) { pm860x_done_handler()
483 info->allowed = 1; pm860x_done_handler()
491 info->allowed = 0; pm860x_done_handler()
502 * plug in/out usb, So we can not rely on info->online, we pm860x_done_handler()
507 ret = pm860x_reg_read(info->i2c, PM8607_STATUS_2); pm860x_done_handler()
517 mutex_unlock(&info->lock); pm860x_done_handler()
518 dev_dbg(info->dev, "%s, Allowed: %d\n", __func__, info->allowed); pm860x_done_handler()
519 set_charging_fsm(info); pm860x_done_handler()
526 struct pm860x_charger_info *info = data; pm860x_vbattery_handler() local
528 mutex_lock(&info->lock); pm860x_vbattery_handler()
530 set_vbatt_threshold(info, 0, 0); pm860x_vbattery_handler()
532 if (info->present && info->online) pm860x_vbattery_handler()
533 info->allowed = 1; pm860x_vbattery_handler()
535 info->allowed = 0; pm860x_vbattery_handler()
536 mutex_unlock(&info->lock); pm860x_vbattery_handler()
537 dev_dbg(info->dev, "%s, Allowed: %d\n", __func__, info->allowed); pm860x_vbattery_handler()
539 set_charging_fsm(info); pm860x_vbattery_handler()
546 struct pm860x_charger_info *info = data; pm860x_vchg_handler() local
549 if (info->present) pm860x_vchg_handler()
552 measure_vchg(info, &vchg); pm860x_vchg_handler()
554 mutex_lock(&info->lock); pm860x_vchg_handler()
555 if (!info->online) { pm860x_vchg_handler()
558 status = pm860x_reg_read(info->i2c_8606, PM8606_FLAGS); pm860x_vchg_handler()
561 pm860x_set_bits(info->i2c_8606, PM8606_FLAGS, pm860x_vchg_handler()
563 pm860x_set_bits(info->i2c_8606, pm860x_vchg_handler()
567 dev_dbg(info->dev, pm860x_vchg_handler()
573 set_vchg_threshold(info, VCHG_OVP_LOW, 0); pm860x_vchg_handler()
574 info->allowed = 0; pm860x_vchg_handler()
575 dev_dbg(info->dev, pm860x_vchg_handler()
579 set_vchg_threshold(info, VCHG_NORMAL_LOW, pm860x_vchg_handler()
581 info->allowed = 1; pm860x_vchg_handler()
582 dev_dbg(info->dev, pm860x_vchg_handler()
586 mutex_unlock(&info->lock); pm860x_vchg_handler()
588 dev_dbg(info->dev, "%s, Allowed: %d\n", __func__, info->allowed); pm860x_vchg_handler()
589 set_charging_fsm(info); pm860x_vchg_handler()
598 struct pm860x_charger_info *info = power_supply_get_drvdata(psy); pm860x_usb_get_prop() local
602 if (info->state == FSM_FASTCHARGE || pm860x_usb_get_prop()
603 info->state == FSM_PRECHARGE) pm860x_usb_get_prop()
609 val->intval = info->online; pm860x_usb_get_prop()
622 static int pm860x_init_charger(struct pm860x_charger_info *info) pm860x_init_charger() argument
626 ret = pm860x_reg_read(info->i2c, PM8607_STATUS_2); pm860x_init_charger()
630 mutex_lock(&info->lock); pm860x_init_charger()
631 info->state = FSM_INIT; pm860x_init_charger()
633 info->online = 1; pm860x_init_charger()
634 info->allowed = 1; pm860x_init_charger()
636 info->online = 0; pm860x_init_charger()
637 info->allowed = 0; pm860x_init_charger()
639 mutex_unlock(&info->lock); pm860x_init_charger()
641 set_charging_fsm(info); pm860x_init_charger()
670 struct pm860x_charger_info *info; pm860x_charger_probe() local
676 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); pm860x_charger_probe()
677 if (!info) pm860x_charger_probe()
682 info->irq[j] = platform_get_irq(pdev, i); pm860x_charger_probe()
683 if (info->irq[j] < 0) pm860x_charger_probe()
687 info->irq_nums = j; pm860x_charger_probe()
689 info->chip = chip; pm860x_charger_probe()
690 info->i2c = pm860x_charger_probe()
692 info->i2c_8606 = pm860x_charger_probe()
694 if (!info->i2c_8606) { pm860x_charger_probe()
699 info->dev = &pdev->dev; pm860x_charger_probe()
702 set_vchg_threshold(info, VCHG_NORMAL_LOW, VCHG_OVP_LOW); pm860x_charger_probe()
704 mutex_init(&info->lock); pm860x_charger_probe()
705 platform_set_drvdata(pdev, info); pm860x_charger_probe()
707 psy_cfg.drv_data = info; pm860x_charger_probe()
710 info->usb = power_supply_register(&pdev->dev, &pm860x_charger_desc, pm860x_charger_probe()
712 if (IS_ERR(info->usb)) { pm860x_charger_probe()
713 ret = PTR_ERR(info->usb); pm860x_charger_probe()
717 pm860x_init_charger(info); pm860x_charger_probe()
719 for (i = 0; i < ARRAY_SIZE(info->irq); i++) { pm860x_charger_probe()
720 ret = request_threaded_irq(info->irq[i], NULL, pm860x_charger_probe()
722 IRQF_ONESHOT, pm860x_irq_descs[i].name, info); pm860x_charger_probe()
725 info->irq[i], ret); pm860x_charger_probe()
732 power_supply_unregister(info->usb); pm860x_charger_probe()
734 free_irq(info->irq[i], info); pm860x_charger_probe()
741 struct pm860x_charger_info *info = platform_get_drvdata(pdev); pm860x_charger_remove() local
744 power_supply_unregister(info->usb); pm860x_charger_remove()
745 free_irq(info->irq[0], info); pm860x_charger_remove()
746 for (i = 0; i < info->irq_nums; i++) pm860x_charger_remove()
747 free_irq(info->irq[i], info); pm860x_charger_remove()
H A D88pm860x_battery.c157 static int measure_12bit_voltage(struct pm860x_battery_info *info, measure_12bit_voltage() argument
163 ret = pm860x_bulk_read(info->i2c, offset, 2, buf); measure_12bit_voltage()
173 static int measure_vbatt(struct pm860x_battery_info *info, int state, measure_vbatt() argument
181 ret = measure_12bit_voltage(info, PM8607_VBAT_MEAS1, data); measure_vbatt()
197 ret = pm860x_bulk_read(info->i2c, PM8607_LDO5, 5, buf); measure_vbatt()
216 static int measure_current(struct pm860x_battery_info *info, int *data) measure_current() argument
222 ret = pm860x_bulk_read(info->i2c, PM8607_IBAT_MEAS1, 2, buf); measure_current()
232 static int set_charger_current(struct pm860x_battery_info *info, int data, set_charger_current() argument
241 *old = pm860x_reg_read(info->i2c, PM8607_CHG_CTRL2); set_charger_current()
243 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL2, 0x1f, data); set_charger_current()
249 static int read_ccnt(struct pm860x_battery_info *info, int offset, read_ccnt() argument
255 ret = pm860x_set_bits(info->i2c, PM8607_CCNT, 7, offset & 7); read_ccnt()
258 ret = pm860x_bulk_read(info->i2c, PM8607_CCNT_MEAS1, 2, buf); read_ccnt()
267 static int calc_ccnt(struct pm860x_battery_info *info, struct ccnt *ccnt) calc_ccnt() argument
273 ret = read_ccnt(info, CCNT_POS1, &data); calc_ccnt()
277 ret = read_ccnt(info, CCNT_POS2, &data); calc_ccnt()
283 ret = read_ccnt(info, CCNT_NEG1, &data); calc_ccnt()
287 ret = read_ccnt(info, CCNT_NEG2, &data); calc_ccnt()
294 ret = read_ccnt(info, CCNT_SPOS, &data); calc_ccnt()
298 ret = read_ccnt(info, CCNT_SNEG, &data); calc_ccnt()
314 static int clear_ccnt(struct pm860x_battery_info *info, struct ccnt *ccnt) clear_ccnt() argument
320 read_ccnt(info, CCNT_POS1, &data); clear_ccnt()
321 read_ccnt(info, CCNT_POS2, &data); clear_ccnt()
322 read_ccnt(info, CCNT_NEG1, &data); clear_ccnt()
323 read_ccnt(info, CCNT_NEG2, &data); clear_ccnt()
324 read_ccnt(info, CCNT_SPOS, &data); clear_ccnt()
325 read_ccnt(info, CCNT_SNEG, &data); clear_ccnt()
330 static int calc_ocv(struct pm860x_battery_info *info, int *ocv) calc_ocv() argument
344 ret = measure_vbatt(info, OCV_MODE_ACTIVE, &data); calc_ocv()
348 ret = measure_current(info, &data); calc_ocv()
356 mutex_lock(&info->lock); calc_ocv()
357 if (info->present) calc_ocv()
358 *ocv = vbatt_avg - ibatt_avg * info->resistor / 1000; calc_ocv()
361 mutex_unlock(&info->lock); calc_ocv()
362 dev_dbg(info->dev, "VBAT average:%d, OCV:%d\n", vbatt_avg, *ocv); calc_ocv()
369 static int calc_soc(struct pm860x_battery_info *info, int state, int *soc) calc_soc() argument
381 ret = calc_ocv(info, &ocv); calc_soc()
384 ret = measure_vbatt(info, OCV_MODE_SLEEP, &ocv); calc_soc()
407 struct pm860x_battery_info *info = data; pm860x_coulomb_handler() local
409 calc_ccnt(info, &ccnt_data); pm860x_coulomb_handler()
415 struct pm860x_battery_info *info = data; pm860x_batt_handler() local
418 mutex_lock(&info->lock); pm860x_batt_handler()
419 ret = pm860x_reg_read(info->i2c, PM8607_STATUS_2); pm860x_batt_handler()
421 info->present = 1; pm860x_batt_handler()
422 info->temp_type = PM860X_TEMP_TBAT; pm860x_batt_handler()
424 info->present = 0; pm860x_batt_handler()
425 info->temp_type = PM860X_TEMP_TINT; pm860x_batt_handler()
427 mutex_unlock(&info->lock); pm860x_batt_handler()
429 clear_ccnt(info, &ccnt_data); pm860x_batt_handler()
433 static void pm860x_init_battery(struct pm860x_battery_info *info) pm860x_init_battery() argument
443 if (info->temp_type == PM860X_TEMP_TINT) pm860x_init_battery()
445 ret = pm860x_set_bits(info->i2c, PM8607_MEAS_EN1, data, data); pm860x_init_battery()
451 ret = pm860x_set_bits(info->i2c, PM8607_MEAS_EN3, data, data); pm860x_init_battery()
456 ret = pm860x_reg_write(info->i2c, PM8607_MEAS_OFF_TIME1, 0x82); pm860x_init_battery()
459 ret = pm860x_reg_write(info->i2c, PM8607_MEAS_OFF_TIME2, 0x6c); pm860x_init_battery()
464 ret = pm860x_set_bits(info->i2c, PM8607_GPADC_MISC1, pm860x_init_battery()
470 ret = pm860x_set_bits(info->i2c, PM8607_CHG_CTRL6, pm860x_init_battery()
475 ret = pm860x_set_bits(info->i2c, PM8607_CCNT, 7 << 3, pm860x_init_battery()
481 ret = pm860x_set_bits(info->i2c, PM8607_GP_BIAS2, 0xF << 4, pm860x_init_battery()
487 mutex_lock(&info->lock); pm860x_init_battery()
488 ret = pm860x_reg_read(info->i2c, PM8607_STATUS_2); pm860x_init_battery()
490 mutex_unlock(&info->lock); pm860x_init_battery()
494 info->present = 1; pm860x_init_battery()
495 info->temp_type = PM860X_TEMP_TBAT; pm860x_init_battery()
497 info->present = 0; pm860x_init_battery()
498 info->temp_type = PM860X_TEMP_TINT; pm860x_init_battery()
500 mutex_unlock(&info->lock); pm860x_init_battery()
502 calc_soc(info, OCV_MODE_ACTIVE, &soc); pm860x_init_battery()
504 data = pm860x_reg_read(info->i2c, PM8607_POWER_UP_LOG); pm860x_init_battery()
507 dev_dbg(info->dev, "battery wake up? %s\n", pm860x_init_battery()
512 buf[0] = pm860x_reg_read(info->i2c, PM8607_RTC_MISC2); pm860x_init_battery()
513 buf[1] = pm860x_reg_read(info->i2c, PM8607_RTC1); pm860x_init_battery()
516 info->start_soc = soc; pm860x_init_battery()
518 info->start_soc = soc; pm860x_init_battery()
520 info->start_soc = data; pm860x_init_battery()
521 dev_dbg(info->dev, "soc_rtc %d, soc_ocv :%d\n", data, soc); pm860x_init_battery()
523 pm860x_set_bits(info->i2c, PM8607_POWER_UP_LOG, pm860x_init_battery()
525 info->start_soc = soc; pm860x_init_battery()
527 info->last_capacity = info->start_soc; pm860x_init_battery()
528 dev_dbg(info->dev, "init soc : %d\n", info->last_capacity); pm860x_init_battery()
533 static void set_temp_threshold(struct pm860x_battery_info *info, set_temp_threshold() argument
543 pm860x_reg_write(info->i2c, PM8607_GPADC1_HIGHTH, data); set_temp_threshold()
544 dev_dbg(info->dev, "TEMP_HIGHTH : min: %d, 0x%x\n", min, data); set_temp_threshold()
550 pm860x_reg_write(info->i2c, PM8607_GPADC1_LOWTH, data); set_temp_threshold()
551 dev_dbg(info->dev, "TEMP_LOWTH:max : %d, 0x%x\n", max, data); set_temp_threshold()
554 static int measure_temp(struct pm860x_battery_info *info, int *data) measure_temp() argument
561 if (info->temp_type == PM860X_TEMP_TINT) { measure_temp()
562 ret = measure_12bit_voltage(info, PM8607_TINT_MEAS1, data); measure_temp()
567 ret = measure_12bit_voltage(info, PM8607_GPADC1_MEAS1, data); measure_temp()
576 set_temp_threshold(info, 0, max); measure_temp()
580 set_temp_threshold(info, 0, max); measure_temp()
585 set_temp_threshold(info, min, max); measure_temp()
590 set_temp_threshold(info, min, max); measure_temp()
595 set_temp_threshold(info, min, max); measure_temp()
600 set_temp_threshold(info, min, max); measure_temp()
605 set_temp_threshold(info, min, max); measure_temp()
608 set_temp_threshold(info, min, 0); measure_temp()
612 dev_dbg(info->dev, "temp_C:%d C,temp_mv:%d mv\n", temp, *data); measure_temp()
618 static int calc_resistor(struct pm860x_battery_info *info) calc_resistor() argument
629 ret = measure_current(info, &data); calc_resistor()
634 ret = measure_vbatt(info, OCV_MODE_ACTIVE, &data); calc_resistor()
642 if (set_charger_current(info, 500, &chg_current)) calc_resistor()
652 ret = measure_vbatt(info, OCV_MODE_ACTIVE, &data); calc_resistor()
656 ret = measure_current(info, &data); calc_resistor()
666 if (set_charger_current(info, 100, &ret)) calc_resistor()
675 ret = measure_vbatt(info, OCV_MODE_ACTIVE, &data); calc_resistor()
679 ret = measure_current(info, &data); calc_resistor()
690 if (set_charger_current(info, chg_current, &ret)) calc_resistor()
698 if ((data - info->resistor > 0) && calc_resistor()
699 (data - info->resistor < info->resistor)) calc_resistor()
700 info->resistor = data; calc_resistor()
701 if ((info->resistor - data > 0) && calc_resistor()
702 (info->resistor - data < data)) calc_resistor()
703 info->resistor = data; calc_resistor()
708 set_charger_current(info, chg_current, &ret); calc_resistor()
713 static int calc_capacity(struct pm860x_battery_info *info, int *cap) calc_capacity() argument
721 ret = calc_ccnt(info, &ccnt_data); calc_capacity()
725 data = info->max_capacity * info->start_soc / 100; calc_capacity()
730 clear_ccnt(info, &ccnt_data); calc_capacity()
731 calc_soc(info, OCV_MODE_ACTIVE, &info->start_soc); calc_capacity()
732 dev_dbg(info->dev, "restart soc = %d !\n", calc_capacity()
733 info->start_soc); calc_capacity()
737 cap_cc = cap_cc * 100 / info->max_capacity; calc_capacity()
743 dev_dbg(info->dev, "%s, last cap : %d", __func__, calc_capacity()
744 info->last_capacity); calc_capacity()
746 ret = measure_current(info, &ibat); calc_capacity()
751 ret = calc_soc(info, OCV_MODE_ACTIVE, &cap_ocv); calc_capacity()
753 cap_ocv = info->last_capacity; calc_capacity()
754 ret = measure_vbatt(info, OCV_MODE_ACTIVE, &data); calc_capacity()
776 if (*cap > info->last_capacity) calc_capacity()
777 *cap = info->last_capacity; calc_capacity()
781 info->last_capacity = *cap; calc_capacity()
783 dev_dbg(info->dev, "%s, cap_ocv:%d cap_cc:%d, cap:%d\n", calc_capacity()
790 pm860x_set_bits(info->i2c, PM8607_RTC_MISC2, RTC_SOC_5LSB, calc_capacity()
792 pm860x_set_bits(info->i2c, PM8607_RTC1, RTC_SOC_3MSB, calc_capacity()
801 struct pm860x_battery_info *info = dev_get_drvdata(psy->dev.parent); pm860x_external_power_changed() local
803 calc_resistor(info); pm860x_external_power_changed()
810 struct pm860x_battery_info *info = dev_get_drvdata(psy->dev.parent); pm860x_batt_get_prop() local
816 val->intval = info->present; pm860x_batt_get_prop()
819 ret = calc_capacity(info, &data); pm860x_batt_get_prop()
827 if (!info->present) pm860x_batt_get_prop()
836 ret = measure_vbatt(info, OCV_MODE_ACTIVE, &data); pm860x_batt_get_prop()
843 ret = calc_ocv(info, &data); pm860x_batt_get_prop()
849 ret = measure_current(info, &data); pm860x_batt_get_prop()
855 if (info->present) { pm860x_batt_get_prop()
856 ret = measure_temp(info, &data); pm860x_batt_get_prop()
876 struct pm860x_battery_info *info = dev_get_drvdata(psy->dev.parent); pm860x_batt_set_prop() local
880 clear_ccnt(info, &ccnt_data); pm860x_batt_set_prop()
881 info->start_soc = 100; pm860x_batt_set_prop()
882 dev_dbg(info->dev, "chg done, update soc = %d\n", pm860x_batt_set_prop()
883 info->start_soc); pm860x_batt_set_prop()
916 struct pm860x_battery_info *info; pm860x_battery_probe() local
920 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); pm860x_battery_probe()
921 if (!info) pm860x_battery_probe()
924 info->irq_cc = platform_get_irq(pdev, 0); pm860x_battery_probe()
925 if (info->irq_cc <= 0) { pm860x_battery_probe()
930 info->irq_batt = platform_get_irq(pdev, 1); pm860x_battery_probe()
931 if (info->irq_batt <= 0) { pm860x_battery_probe()
936 info->chip = chip; pm860x_battery_probe()
937 info->i2c = pm860x_battery_probe()
939 info->dev = &pdev->dev; pm860x_battery_probe()
940 info->status = POWER_SUPPLY_STATUS_UNKNOWN; pm860x_battery_probe()
943 mutex_init(&info->lock); pm860x_battery_probe()
944 platform_set_drvdata(pdev, info); pm860x_battery_probe()
946 pm860x_init_battery(info); pm860x_battery_probe()
949 info->max_capacity = pdata->max_capacity; pm860x_battery_probe()
951 info->max_capacity = 1500; /* set default capacity */ pm860x_battery_probe()
953 info->resistor = pdata->resistor; pm860x_battery_probe()
955 info->resistor = 300; /* set default internal resistor */ pm860x_battery_probe()
957 info->battery = power_supply_register(&pdev->dev, &pm860x_battery_desc, pm860x_battery_probe()
959 if (IS_ERR(info->battery)) pm860x_battery_probe()
960 return PTR_ERR(info->battery); pm860x_battery_probe()
961 info->battery->dev.parent = &pdev->dev; pm860x_battery_probe()
963 ret = request_threaded_irq(info->irq_cc, NULL, pm860x_battery_probe()
965 "coulomb", info); pm860x_battery_probe()
968 info->irq_cc, ret); pm860x_battery_probe()
972 ret = request_threaded_irq(info->irq_batt, NULL, pm860x_batt_handler, pm860x_battery_probe()
973 IRQF_ONESHOT, "battery", info); pm860x_battery_probe()
976 info->irq_batt, ret); pm860x_battery_probe()
984 free_irq(info->irq_cc, info); pm860x_battery_probe()
986 power_supply_unregister(info->battery); pm860x_battery_probe()
992 struct pm860x_battery_info *info = platform_get_drvdata(pdev); pm860x_battery_remove() local
994 free_irq(info->irq_batt, info); pm860x_battery_remove()
995 free_irq(info->irq_cc, info); pm860x_battery_remove()
996 power_supply_unregister(info->battery); pm860x_battery_remove()
H A Dltc2941-battery-gauge.c76 const struct ltc294x_info *info, int Q) convert_bin_to_uAh()
78 return ((Q * (info->Qlsb / 10))) / 100; convert_bin_to_uAh()
82 const struct ltc294x_info *info, int uAh) convert_uAh_to_bin()
86 Q = (uAh * 100) / (info->Qlsb/10); convert_uAh_to_bin()
136 static int ltc294x_reset(const struct ltc294x_info *info, int prescaler_exp) ltc294x_reset() argument
143 ret = ltc294x_read_regs(info->client, LTC294X_REG_CONTROL, &value, 1); ltc294x_reset()
145 dev_err(&info->client->dev, ltc294x_reset()
153 if (info->num_regs == LTC2943_NUM_REGS) ltc294x_reset()
157 ret = ltc294x_write_regs(info->client, ltc294x_reset()
160 dev_err(&info->client->dev, ltc294x_reset()
172 static int ltc294x_read_charge_register(const struct ltc294x_info *info) ltc294x_read_charge_register() argument
177 ret = ltc294x_read_regs(info->client, ltc294x_read_charge_register()
184 static int ltc294x_get_charge_now(const struct ltc294x_info *info, int *val) ltc294x_get_charge_now() argument
186 int value = ltc294x_read_charge_register(info); ltc294x_get_charge_now()
191 if (info->Qlsb < 0) ltc294x_get_charge_now()
193 *val = convert_bin_to_uAh(info, value); ltc294x_get_charge_now()
197 static int ltc294x_set_charge_now(const struct ltc294x_info *info, int val) ltc294x_set_charge_now() argument
204 value = convert_uAh_to_bin(info, val); ltc294x_set_charge_now()
206 if (info->Qlsb < 0) ltc294x_set_charge_now()
212 ret = ltc294x_read_regs(info->client, ltc294x_set_charge_now()
218 ret = ltc294x_write_regs(info->client, ltc294x_set_charge_now()
225 ret = ltc294x_write_regs(info->client, ltc294x_set_charge_now()
232 ret = ltc294x_write_regs(info->client, ltc294x_set_charge_now()
239 const struct ltc294x_info *info, int *val) ltc294x_get_charge_counter()
241 int value = ltc294x_read_charge_register(info); ltc294x_get_charge_counter()
246 *val = convert_bin_to_uAh(info, value); ltc294x_get_charge_counter()
250 static int ltc294x_get_voltage(const struct ltc294x_info *info, int *val) ltc294x_get_voltage() argument
256 ret = ltc294x_read_regs(info->client, ltc294x_get_voltage()
263 static int ltc294x_get_current(const struct ltc294x_info *info, int *val) ltc294x_get_current() argument
269 ret = ltc294x_read_regs(info->client, ltc294x_get_current()
276 *val = 1000 * ((60000 * value) / (info->r_sense * 0x7FFF)); /* in uA */ ltc294x_get_current()
280 static int ltc294x_get_temperature(const struct ltc294x_info *info, int *val) ltc294x_get_temperature() argument
286 ret = ltc294x_read_regs(info->client, ltc294x_get_temperature()
298 struct ltc294x_info *info = power_supply_get_drvdata(psy); ltc294x_get_property() local
302 return ltc294x_get_charge_now(info, &val->intval); ltc294x_get_property()
304 return ltc294x_get_charge_counter(info, &val->intval); ltc294x_get_property()
306 return ltc294x_get_voltage(info, &val->intval); ltc294x_get_property()
308 return ltc294x_get_current(info, &val->intval); ltc294x_get_property()
310 return ltc294x_get_temperature(info, &val->intval); ltc294x_get_property()
320 struct ltc294x_info *info = power_supply_get_drvdata(psy); ltc294x_set_property() local
324 return ltc294x_set_charge_now(info, val->intval); ltc294x_set_property()
341 static void ltc294x_update(struct ltc294x_info *info) ltc294x_update() argument
343 int charge = ltc294x_read_charge_register(info); ltc294x_update()
345 if (charge != info->charge) { ltc294x_update()
346 info->charge = charge; ltc294x_update()
347 power_supply_changed(info->supply); ltc294x_update()
353 struct ltc294x_info *info; ltc294x_work() local
355 info = container_of(work, struct ltc294x_info, work.work); ltc294x_work()
356 ltc294x_update(info); ltc294x_work()
357 schedule_delayed_work(&info->work, LTC294X_WORK_DELAY * HZ); ltc294x_work()
370 struct ltc294x_info *info = i2c_get_clientdata(client); ltc294x_i2c_remove() local
372 cancel_delayed_work(&info->work); ltc294x_i2c_remove()
373 power_supply_unregister(info->supply); ltc294x_i2c_remove()
374 kfree(info->supply_desc.name); ltc294x_i2c_remove()
376 idr_remove(&ltc294x_id, info->id); ltc294x_i2c_remove()
385 struct ltc294x_info *info; ltc294x_i2c_probe() local
400 info = devm_kzalloc(&client->dev, sizeof(*info), GFP_KERNEL); ltc294x_i2c_probe()
401 if (info == NULL) { ltc294x_i2c_probe()
406 i2c_set_clientdata(client, info); ltc294x_i2c_probe()
408 info->num_regs = id->driver_data; ltc294x_i2c_probe()
409 info->supply_desc.name = kasprintf(GFP_KERNEL, "%s-%d", client->name, ltc294x_i2c_probe()
411 if (!info->supply_desc.name) { ltc294x_i2c_probe()
426 info->r_sense = r_sense; ltc294x_i2c_probe()
436 if (info->num_regs == LTC2943_NUM_REGS) { ltc294x_i2c_probe()
439 info->Qlsb = ((340 * 50000) / r_sense) / ltc294x_i2c_probe()
444 info->Qlsb = ((85 * 50000) / r_sense) / ltc294x_i2c_probe()
448 info->client = client; ltc294x_i2c_probe()
449 info->id = num; ltc294x_i2c_probe()
450 info->supply_desc.type = POWER_SUPPLY_TYPE_BATTERY; ltc294x_i2c_probe()
451 info->supply_desc.properties = ltc294x_properties; ltc294x_i2c_probe()
452 if (info->num_regs >= LTC294X_REG_TEMPERATURE_LSB) ltc294x_i2c_probe()
453 info->supply_desc.num_properties = ltc294x_i2c_probe()
455 else if (info->num_regs >= LTC294X_REG_CURRENT_LSB) ltc294x_i2c_probe()
456 info->supply_desc.num_properties = ltc294x_i2c_probe()
458 else if (info->num_regs >= LTC294X_REG_VOLTAGE_LSB) ltc294x_i2c_probe()
459 info->supply_desc.num_properties = ltc294x_i2c_probe()
462 info->supply_desc.num_properties = ltc294x_i2c_probe()
464 info->supply_desc.get_property = ltc294x_get_property; ltc294x_i2c_probe()
465 info->supply_desc.set_property = ltc294x_set_property; ltc294x_i2c_probe()
466 info->supply_desc.property_is_writeable = ltc294x_property_is_writeable; ltc294x_i2c_probe()
467 info->supply_desc.external_power_changed = NULL; ltc294x_i2c_probe()
469 psy_cfg.drv_data = info; ltc294x_i2c_probe()
471 INIT_DELAYED_WORK(&info->work, ltc294x_work); ltc294x_i2c_probe()
473 ret = ltc294x_reset(info, prescaler_exp); ltc294x_i2c_probe()
479 info->supply = power_supply_register(&client->dev, &info->supply_desc, ltc294x_i2c_probe()
481 if (IS_ERR(info->supply)) { ltc294x_i2c_probe()
483 ret = PTR_ERR(info->supply); ltc294x_i2c_probe()
486 schedule_delayed_work(&info->work, LTC294X_WORK_DELAY * HZ); ltc294x_i2c_probe()
492 kfree(info->supply_desc.name); ltc294x_i2c_probe()
508 struct ltc294x_info *info = i2c_get_clientdata(client); ltc294x_suspend() local
510 cancel_delayed_work(&info->work); ltc294x_suspend()
517 struct ltc294x_info *info = i2c_get_clientdata(client); ltc294x_resume() local
519 schedule_delayed_work(&info->work, LTC294X_WORK_DELAY * HZ); ltc294x_resume()
75 convert_bin_to_uAh( const struct ltc294x_info *info, int Q) convert_bin_to_uAh() argument
81 convert_uAh_to_bin( const struct ltc294x_info *info, int uAh) convert_uAh_to_bin() argument
238 ltc294x_get_charge_counter( const struct ltc294x_info *info, int *val) ltc294x_get_charge_counter() argument
H A Dds2782_battery.c51 int (*get_battery_current)(struct ds278x_info *info, int *current_uA);
52 int (*get_battery_voltage)(struct ds278x_info *info, int *voltage_uV);
53 int (*get_battery_capacity)(struct ds278x_info *info, int *capacity);
73 static inline int ds278x_read_reg(struct ds278x_info *info, int reg, u8 *val) ds278x_read_reg() argument
77 ret = i2c_smbus_read_byte_data(info->client, reg); ds278x_read_reg()
79 dev_err(&info->client->dev, "register read failed\n"); ds278x_read_reg()
87 static inline int ds278x_read_reg16(struct ds278x_info *info, int reg_msb, ds278x_read_reg16() argument
92 ret = i2c_smbus_read_word_data(info->client, reg_msb); ds278x_read_reg16()
94 dev_err(&info->client->dev, "register read failed\n"); ds278x_read_reg16()
102 static int ds278x_get_temp(struct ds278x_info *info, int *temp) ds278x_get_temp() argument
113 err = ds278x_read_reg16(info, DS278x_REG_TEMP_MSB, &raw); ds278x_get_temp()
120 static int ds2782_get_current(struct ds278x_info *info, int *current_uA) ds2782_get_current() argument
131 err = ds278x_read_reg(info, DS2782_REG_RSNSP, &sense_res_raw); ds2782_get_current()
135 dev_err(&info->client->dev, "sense resistor value is 0\n"); ds2782_get_current()
140 dev_dbg(&info->client->dev, "sense resistor = %d milli-ohms\n", ds2782_get_current()
142 err = ds278x_read_reg16(info, DS278x_REG_CURRENT_MSB, &raw); ds2782_get_current()
149 static int ds2782_get_voltage(struct ds278x_info *info, int *voltage_uV) ds2782_get_voltage() argument
158 err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw); ds2782_get_voltage()
165 static int ds2782_get_capacity(struct ds278x_info *info, int *capacity) ds2782_get_capacity() argument
170 err = ds278x_read_reg(info, DS2782_REG_RARC, &raw); ds2782_get_capacity()
177 static int ds2786_get_current(struct ds278x_info *info, int *current_uA) ds2786_get_current() argument
182 err = ds278x_read_reg16(info, DS278x_REG_CURRENT_MSB, &raw); ds2786_get_current()
185 *current_uA = (raw / 16) * (DS2786_CURRENT_UNITS / info->rsns); ds2786_get_current()
189 static int ds2786_get_voltage(struct ds278x_info *info, int *voltage_uV) ds2786_get_voltage() argument
198 err = ds278x_read_reg16(info, DS278x_REG_VOLT_MSB, &raw); ds2786_get_voltage()
205 static int ds2786_get_capacity(struct ds278x_info *info, int *capacity) ds2786_get_capacity() argument
210 err = ds278x_read_reg(info, DS2786_REG_RARC, &raw); ds2786_get_capacity()
218 static int ds278x_get_status(struct ds278x_info *info, int *status) ds278x_get_status() argument
224 err = info->ops->get_battery_current(info, &current_uA); ds278x_get_status()
228 err = info->ops->get_battery_capacity(info, &capacity); ds278x_get_status()
232 info->capacity = capacity; ds278x_get_status()
250 struct ds278x_info *info = to_ds278x_info(psy); ds278x_battery_get_property() local
255 ret = ds278x_get_status(info, &val->intval); ds278x_battery_get_property()
259 ret = info->ops->get_battery_capacity(info, &val->intval); ds278x_battery_get_property()
263 ret = info->ops->get_battery_voltage(info, &val->intval); ds278x_battery_get_property()
267 ret = info->ops->get_battery_current(info, &val->intval); ds278x_battery_get_property()
271 ret = ds278x_get_temp(info, &val->intval); ds278x_battery_get_property()
281 static void ds278x_bat_update(struct ds278x_info *info) ds278x_bat_update() argument
283 int old_status = info->status; ds278x_bat_update()
284 int old_capacity = info->capacity; ds278x_bat_update()
286 ds278x_get_status(info, &info->status); ds278x_bat_update()
288 if ((old_status != info->status) || (old_capacity != info->capacity)) ds278x_bat_update()
289 power_supply_changed(info->battery); ds278x_bat_update()
294 struct ds278x_info *info; ds278x_bat_work() local
296 info = container_of(work, struct ds278x_info, bat_work.work); ds278x_bat_work()
297 ds278x_bat_update(info); ds278x_bat_work()
299 schedule_delayed_work(&info->bat_work, DS278x_DELAY); ds278x_bat_work()
321 struct ds278x_info *info = i2c_get_clientdata(client); ds278x_battery_remove() local
323 power_supply_unregister(info->battery); ds278x_battery_remove()
324 kfree(info->battery_desc.name); ds278x_battery_remove()
327 idr_remove(&battery_id, info->id); ds278x_battery_remove()
330 cancel_delayed_work(&info->bat_work); ds278x_battery_remove()
332 kfree(info); ds278x_battery_remove()
341 struct ds278x_info *info = i2c_get_clientdata(client); ds278x_suspend() local
343 cancel_delayed_work(&info->bat_work); ds278x_suspend()
350 struct ds278x_info *info = i2c_get_clientdata(client); ds278x_resume() local
352 schedule_delayed_work(&info->bat_work, DS278x_DELAY); ds278x_resume()
382 struct ds278x_info *info; ds278x_battery_probe() local
403 info = kzalloc(sizeof(*info), GFP_KERNEL); ds278x_battery_probe()
404 if (!info) { ds278x_battery_probe()
409 info->battery_desc.name = kasprintf(GFP_KERNEL, "%s-%d", ds278x_battery_probe()
411 if (!info->battery_desc.name) { ds278x_battery_probe()
417 info->rsns = pdata->rsns; ds278x_battery_probe()
419 i2c_set_clientdata(client, info); ds278x_battery_probe()
420 info->client = client; ds278x_battery_probe()
421 info->id = num; ds278x_battery_probe()
422 info->ops = &ds278x_ops[id->driver_data]; ds278x_battery_probe()
423 ds278x_power_supply_init(&info->battery_desc); ds278x_battery_probe()
424 psy_cfg.drv_data = info; ds278x_battery_probe()
426 info->capacity = 100; ds278x_battery_probe()
427 info->status = POWER_SUPPLY_STATUS_FULL; ds278x_battery_probe()
429 INIT_DELAYED_WORK(&info->bat_work, ds278x_bat_work); ds278x_battery_probe()
431 info->battery = power_supply_register(&client->dev, ds278x_battery_probe()
432 &info->battery_desc, &psy_cfg); ds278x_battery_probe()
433 if (IS_ERR(info->battery)) { ds278x_battery_probe()
435 ret = PTR_ERR(info->battery); ds278x_battery_probe()
438 schedule_delayed_work(&info->bat_work, DS278x_DELAY); ds278x_battery_probe()
444 kfree(info->battery_desc.name); ds278x_battery_probe()
446 kfree(info); ds278x_battery_probe()
H A Daxp288_fuel_gauge.c160 static int fuel_gauge_reg_readb(struct axp288_fg_info *info, int reg) fuel_gauge_reg_readb() argument
166 ret = regmap_read(info->regmap, reg, &val); fuel_gauge_reg_readb()
174 dev_err(&info->pdev->dev, "axp288 reg read err:%d\n", ret); fuel_gauge_reg_readb()
179 static int fuel_gauge_reg_writeb(struct axp288_fg_info *info, int reg, u8 val) fuel_gauge_reg_writeb() argument
183 ret = regmap_write(info->regmap, reg, (unsigned int)val); fuel_gauge_reg_writeb()
186 dev_err(&info->pdev->dev, "axp288 reg write err:%d\n", ret); fuel_gauge_reg_writeb()
192 struct axp288_fg_info *info) pmic_read_adc_val()
204 dev_err(&info->pdev->dev, pmic_read_adc_val()
209 dev_dbg(&info->pdev->dev, "adc raw val=%x\n", val); pmic_read_adc_val()
221 struct axp288_fg_info *info = s->private; fuel_gauge_debug_show() local
226 fuel_gauge_reg_readb(info, AXP20X_PWR_INPUT_STATUS)); fuel_gauge_debug_show()
229 fuel_gauge_reg_readb(info, AXP20X_PWR_OP_MODE)); fuel_gauge_debug_show()
232 fuel_gauge_reg_readb(info, AXP20X_CHRG_CTRL1)); fuel_gauge_debug_show()
235 fuel_gauge_reg_readb(info, AXP20X_V_LTF_DISCHRG)); fuel_gauge_debug_show()
238 fuel_gauge_reg_readb(info, AXP20X_V_HTF_DISCHRG)); fuel_gauge_debug_show()
241 fuel_gauge_reg_readb(info, AXP20X_CC_CTRL)); fuel_gauge_debug_show()
244 fuel_gauge_reg_readb(info, AXP20X_FG_RES)); fuel_gauge_debug_show()
247 fuel_gauge_reg_readb(info, AXP288_FG_RDC1_REG)); fuel_gauge_debug_show()
250 fuel_gauge_reg_readb(info, AXP288_FG_RDC0_REG)); fuel_gauge_debug_show()
253 fuel_gauge_reg_readb(info, AXP288_FG_OCVH_REG)); fuel_gauge_debug_show()
256 fuel_gauge_reg_readb(info, AXP288_FG_OCVL_REG)); fuel_gauge_debug_show()
259 fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP1_REG)); fuel_gauge_debug_show()
262 fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP0_REG)); fuel_gauge_debug_show()
265 fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR1_REG)); fuel_gauge_debug_show()
268 fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR0_REG)); fuel_gauge_debug_show()
271 fuel_gauge_reg_readb(info, AXP288_FG_OCV_CAP_REG)); fuel_gauge_debug_show()
274 fuel_gauge_reg_readb(info, AXP288_FG_CC_CAP_REG)); fuel_gauge_debug_show()
277 fuel_gauge_reg_readb(info, AXP288_FG_LOW_CAP_REG)); fuel_gauge_debug_show()
280 fuel_gauge_reg_readb(info, AXP288_FG_TUNE0)); fuel_gauge_debug_show()
283 fuel_gauge_reg_readb(info, AXP288_FG_TUNE1)); fuel_gauge_debug_show()
286 fuel_gauge_reg_readb(info, AXP288_FG_TUNE2)); fuel_gauge_debug_show()
289 fuel_gauge_reg_readb(info, AXP288_FG_TUNE3)); fuel_gauge_debug_show()
292 fuel_gauge_reg_readb(info, AXP288_FG_TUNE4)); fuel_gauge_debug_show()
295 fuel_gauge_reg_readb(info, AXP288_FG_TUNE5)); fuel_gauge_debug_show()
297 ret = pmic_read_adc_val("axp288-batt-temp", &raw_val, info); fuel_gauge_debug_show()
300 ret = pmic_read_adc_val("axp288-pmic-temp", &raw_val, info); fuel_gauge_debug_show()
303 ret = pmic_read_adc_val("axp288-system-temp", &raw_val, info); fuel_gauge_debug_show()
306 ret = pmic_read_adc_val("axp288-chrg-curr", &raw_val, info); fuel_gauge_debug_show()
309 ret = pmic_read_adc_val("axp288-chrg-d-curr", &raw_val, info); fuel_gauge_debug_show()
312 ret = pmic_read_adc_val("axp288-batt-volt", &raw_val, info); fuel_gauge_debug_show()
331 static void fuel_gauge_create_debugfs(struct axp288_fg_info *info) fuel_gauge_create_debugfs() argument
333 info->debug_file = debugfs_create_file("fuelgauge", 0666, NULL, fuel_gauge_create_debugfs()
334 info, &fg_debug_fops); fuel_gauge_create_debugfs()
337 static void fuel_gauge_remove_debugfs(struct axp288_fg_info *info) fuel_gauge_remove_debugfs() argument
339 debugfs_remove(info->debug_file); fuel_gauge_remove_debugfs()
342 static inline void fuel_gauge_create_debugfs(struct axp288_fg_info *info) fuel_gauge_create_debugfs() argument
345 static inline void fuel_gauge_remove_debugfs(struct axp288_fg_info *info) fuel_gauge_remove_debugfs() argument
350 static void fuel_gauge_get_status(struct axp288_fg_info *info) fuel_gauge_get_status() argument
355 pwr_stat = fuel_gauge_reg_readb(info, AXP20X_PWR_INPUT_STATUS); fuel_gauge_get_status()
357 dev_err(&info->pdev->dev, fuel_gauge_get_status()
361 ret = pmic_read_adc_val("axp288-chrg-curr", &charge, info); fuel_gauge_get_status()
363 dev_err(&info->pdev->dev, fuel_gauge_get_status()
367 ret = pmic_read_adc_val("axp288-chrg-d-curr", &discharge, info); fuel_gauge_get_status()
369 dev_err(&info->pdev->dev, fuel_gauge_get_status()
375 info->status = POWER_SUPPLY_STATUS_CHARGING; fuel_gauge_get_status()
377 info->status = POWER_SUPPLY_STATUS_DISCHARGING; fuel_gauge_get_status()
380 info->status = POWER_SUPPLY_STATUS_FULL; fuel_gauge_get_status()
382 info->status = POWER_SUPPLY_STATUS_NOT_CHARGING; fuel_gauge_get_status()
386 static int fuel_gauge_get_vbatt(struct axp288_fg_info *info, int *vbatt) fuel_gauge_get_vbatt() argument
390 ret = pmic_read_adc_val("axp288-batt-volt", &raw_val, info); fuel_gauge_get_vbatt()
399 static int fuel_gauge_get_current(struct axp288_fg_info *info, int *cur) fuel_gauge_get_current() argument
404 ret = pmic_read_adc_val("axp288-chrg-curr", &charge, info); fuel_gauge_get_current()
407 ret = pmic_read_adc_val("axp288-chrg-d-curr", &discharge, info); fuel_gauge_get_current()
421 static int temp_to_adc(struct axp288_fg_info *info, int tval) temp_to_adc() argument
425 int tcsz = info->pdata->tcsz; temp_to_adc()
428 if (tval > info->pdata->thermistor_curve[0][1]) { temp_to_adc()
429 rntc = info->pdata->thermistor_curve[0][0]; temp_to_adc()
430 } else if (tval <= info->pdata->thermistor_curve[tcsz-1][1]) { temp_to_adc()
431 rntc = info->pdata->thermistor_curve[tcsz-1][0]; temp_to_adc()
434 if (tval > info->pdata->thermistor_curve[i][1]) { temp_to_adc()
435 rmin = info->pdata->thermistor_curve[i-1][0]; temp_to_adc()
436 rmax = info->pdata->thermistor_curve[i][0]; temp_to_adc()
437 tmin = info->pdata->thermistor_curve[i-1][1]; temp_to_adc()
438 tmax = info->pdata->thermistor_curve[i][1]; temp_to_adc()
447 ret = fuel_gauge_reg_readb(info, AXP20X_ADC_RATE); temp_to_adc()
449 dev_err(&info->pdev->dev, "%s:read err:%d\n", __func__, ret); temp_to_adc()
463 static int adc_to_temp(struct axp288_fg_info *info, int adc_val) adc_to_temp() argument
467 int tcsz = info->pdata->tcsz; adc_to_temp()
469 ret = fuel_gauge_reg_readb(info, AXP20X_ADC_RATE); adc_to_temp()
471 dev_err(&info->pdev->dev, "%s:read err:%d\n", __func__, ret); adc_to_temp()
482 if (r < info->pdata->thermistor_curve[0][0]) { adc_to_temp()
483 tval = info->pdata->thermistor_curve[0][1]; adc_to_temp()
484 } else if (r >= info->pdata->thermistor_curve[tcsz-1][0]) { adc_to_temp()
485 tval = info->pdata->thermistor_curve[tcsz-1][1]; adc_to_temp()
488 if (r < info->pdata->thermistor_curve[i][0]) { adc_to_temp()
489 rmin = info->pdata->thermistor_curve[i-1][0]; adc_to_temp()
490 rmax = info->pdata->thermistor_curve[i][0]; adc_to_temp()
491 tmin = info->pdata->thermistor_curve[i-1][1]; adc_to_temp()
492 tmax = info->pdata->thermistor_curve[i][1]; adc_to_temp()
503 static int fuel_gauge_get_btemp(struct axp288_fg_info *info, int *btemp) fuel_gauge_get_btemp() argument
507 ret = pmic_read_adc_val("axp288-batt-temp", &raw_val, info); fuel_gauge_get_btemp()
511 *btemp = adc_to_temp(info, raw_val); fuel_gauge_get_btemp()
517 static int fuel_gauge_get_vocv(struct axp288_fg_info *info, int *vocv) fuel_gauge_get_vocv() argument
522 ret = fuel_gauge_reg_readb(info, AXP288_FG_OCVH_REG); fuel_gauge_get_vocv()
527 ret = fuel_gauge_reg_readb(info, AXP288_FG_OCVL_REG); fuel_gauge_get_vocv()
537 static int fuel_gauge_battery_health(struct axp288_fg_info *info) fuel_gauge_battery_health() argument
542 ret = fuel_gauge_get_btemp(info, &temp); fuel_gauge_battery_health()
546 ret = fuel_gauge_get_vocv(info, &vocv); fuel_gauge_battery_health()
550 if (vocv > info->pdata->max_volt) fuel_gauge_battery_health()
552 else if (temp > info->pdata->max_temp) fuel_gauge_battery_health()
554 else if (temp < info->pdata->min_temp) fuel_gauge_battery_health()
556 else if (vocv < info->pdata->min_volt) fuel_gauge_battery_health()
565 static int fuel_gauge_set_high_btemp_alert(struct axp288_fg_info *info) fuel_gauge_set_high_btemp_alert() argument
570 adc_val = temp_to_adc(info, info->pdata->max_temp); fuel_gauge_set_high_btemp_alert()
571 ret = fuel_gauge_reg_writeb(info, AXP20X_V_HTF_DISCHRG, adc_val >> 4); fuel_gauge_set_high_btemp_alert()
576 static int fuel_gauge_set_low_btemp_alert(struct axp288_fg_info *info) fuel_gauge_set_low_btemp_alert() argument
581 adc_val = temp_to_adc(info, info->pdata->min_temp); fuel_gauge_set_low_btemp_alert()
582 ret = fuel_gauge_reg_writeb(info, AXP20X_V_LTF_DISCHRG, adc_val >> 4); fuel_gauge_set_low_btemp_alert()
591 struct axp288_fg_info *info = power_supply_get_drvdata(ps); fuel_gauge_get_property() local
594 mutex_lock(&info->lock); fuel_gauge_get_property()
597 fuel_gauge_get_status(info); fuel_gauge_get_property()
598 val->intval = info->status; fuel_gauge_get_property()
601 val->intval = fuel_gauge_battery_health(info); fuel_gauge_get_property()
604 ret = fuel_gauge_get_vbatt(info, &value); fuel_gauge_get_property()
610 ret = fuel_gauge_get_vocv(info, &value); fuel_gauge_get_property()
616 ret = fuel_gauge_get_current(info, &value); fuel_gauge_get_property()
622 ret = fuel_gauge_reg_readb(info, AXP20X_PWR_OP_MODE); fuel_gauge_get_property()
632 ret = fuel_gauge_reg_readb(info, AXP20X_FG_RES); fuel_gauge_get_property()
637 dev_err(&info->pdev->dev, fuel_gauge_get_property()
642 ret = fuel_gauge_reg_readb(info, AXP288_FG_LOW_CAP_REG); fuel_gauge_get_property()
648 ret = fuel_gauge_get_btemp(info, &value); fuel_gauge_get_property()
655 val->intval = PROP_TEMP(info->pdata->max_temp); fuel_gauge_get_property()
659 val->intval = PROP_TEMP(info->pdata->min_temp); fuel_gauge_get_property()
665 ret = fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR1_REG); fuel_gauge_get_property()
670 ret = fuel_gauge_reg_readb(info, AXP288_FG_CC_MTR0_REG); fuel_gauge_get_property()
677 ret = fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP1_REG); fuel_gauge_get_property()
682 ret = fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP0_REG); fuel_gauge_get_property()
689 val->intval = PROP_CURR(info->pdata->design_cap); fuel_gauge_get_property()
692 val->intval = PROP_VOLT(info->pdata->max_volt); fuel_gauge_get_property()
695 val->intval = PROP_VOLT(info->pdata->min_volt); fuel_gauge_get_property()
698 val->strval = info->pdata->battid; fuel_gauge_get_property()
701 mutex_unlock(&info->lock); fuel_gauge_get_property()
705 mutex_unlock(&info->lock); fuel_gauge_get_property()
709 mutex_unlock(&info->lock); fuel_gauge_get_property()
717 struct axp288_fg_info *info = power_supply_get_drvdata(ps); fuel_gauge_set_property() local
720 mutex_lock(&info->lock); fuel_gauge_set_property()
723 info->status = val->intval; fuel_gauge_set_property()
732 info->pdata->min_temp = UNPROP_TEMP(val->intval); fuel_gauge_set_property()
733 ret = fuel_gauge_set_low_btemp_alert(info); fuel_gauge_set_property()
735 dev_err(&info->pdev->dev, fuel_gauge_set_property()
745 info->pdata->max_temp = UNPROP_TEMP(val->intval); fuel_gauge_set_property()
746 ret = fuel_gauge_set_high_btemp_alert(info); fuel_gauge_set_property()
748 dev_err(&info->pdev->dev, fuel_gauge_set_property()
756 ret = fuel_gauge_reg_readb(info, AXP288_FG_LOW_CAP_REG); fuel_gauge_set_property()
761 ret = fuel_gauge_reg_writeb(info, AXP288_FG_LOW_CAP_REG, ret); fuel_gauge_set_property()
768 mutex_unlock(&info->lock); fuel_gauge_set_property()
795 struct axp288_fg_info *info = container_of(work, fuel_gauge_status_monitor() local
798 fuel_gauge_get_status(info); fuel_gauge_status_monitor()
799 power_supply_changed(info->bat); fuel_gauge_status_monitor()
800 schedule_delayed_work(&info->status_monitor, STATUS_MON_DELAY_JIFFIES); fuel_gauge_status_monitor()
805 struct axp288_fg_info *info = dev; fuel_gauge_thread_handler() local
809 if (info->irq[i] == irq) fuel_gauge_thread_handler()
814 dev_warn(&info->pdev->dev, "spurious interrupt!!\n"); fuel_gauge_thread_handler()
820 dev_info(&info->pdev->dev, fuel_gauge_thread_handler()
824 dev_info(&info->pdev->dev, fuel_gauge_thread_handler()
828 dev_info(&info->pdev->dev, fuel_gauge_thread_handler()
832 dev_info(&info->pdev->dev, fuel_gauge_thread_handler()
836 dev_info(&info->pdev->dev, "Low Batt Warning(2) INTR\n"); fuel_gauge_thread_handler()
839 dev_info(&info->pdev->dev, "Low Batt Warning(1) INTR\n"); fuel_gauge_thread_handler()
842 dev_warn(&info->pdev->dev, "Spurious Interrupt!!!\n"); fuel_gauge_thread_handler()
845 power_supply_changed(info->bat); fuel_gauge_thread_handler()
851 struct axp288_fg_info *info = power_supply_get_drvdata(psy); fuel_gauge_external_power_changed() local
853 power_supply_changed(info->bat); fuel_gauge_external_power_changed()
867 static int fuel_gauge_set_lowbatt_thresholds(struct axp288_fg_info *info) fuel_gauge_set_lowbatt_thresholds() argument
872 ret = fuel_gauge_reg_readb(info, AXP20X_FG_RES); fuel_gauge_set_lowbatt_thresholds()
874 dev_err(&info->pdev->dev, "%s:read err:%d\n", __func__, ret); fuel_gauge_set_lowbatt_thresholds()
887 ret = fuel_gauge_reg_writeb(info, AXP288_FG_LOW_CAP_REG, reg_val); fuel_gauge_set_lowbatt_thresholds()
889 dev_err(&info->pdev->dev, "%s:write err:%d\n", __func__, ret); fuel_gauge_set_lowbatt_thresholds()
894 static int fuel_gauge_program_vbatt_full(struct axp288_fg_info *info) fuel_gauge_program_vbatt_full() argument
899 ret = fuel_gauge_reg_readb(info, AXP20X_CHRG_CTRL1); fuel_gauge_program_vbatt_full()
905 switch (info->pdata->max_volt) { fuel_gauge_program_vbatt_full()
923 ret = fuel_gauge_reg_writeb(info, AXP20X_CHRG_CTRL1, val); fuel_gauge_program_vbatt_full()
928 static int fuel_gauge_program_design_cap(struct axp288_fg_info *info) fuel_gauge_program_design_cap() argument
932 ret = fuel_gauge_reg_writeb(info, fuel_gauge_program_design_cap()
933 AXP288_FG_DES_CAP1_REG, info->pdata->cap1); fuel_gauge_program_design_cap()
937 ret = fuel_gauge_reg_writeb(info, fuel_gauge_program_design_cap()
938 AXP288_FG_DES_CAP0_REG, info->pdata->cap0); fuel_gauge_program_design_cap()
944 static int fuel_gauge_program_ocv_curve(struct axp288_fg_info *info) fuel_gauge_program_ocv_curve() argument
949 ret = fuel_gauge_reg_writeb(info, fuel_gauge_program_ocv_curve()
950 AXP288_FG_OCV_CURVE_REG + i, info->pdata->ocv_curve[i]); fuel_gauge_program_ocv_curve()
959 static int fuel_gauge_program_rdc_vals(struct axp288_fg_info *info) fuel_gauge_program_rdc_vals() argument
963 ret = fuel_gauge_reg_writeb(info, fuel_gauge_program_rdc_vals()
964 AXP288_FG_RDC1_REG, info->pdata->rdc1); fuel_gauge_program_rdc_vals()
968 ret = fuel_gauge_reg_writeb(info, fuel_gauge_program_rdc_vals()
969 AXP288_FG_RDC0_REG, info->pdata->rdc0); fuel_gauge_program_rdc_vals()
975 static void fuel_gauge_init_config_regs(struct axp288_fg_info *info) fuel_gauge_init_config_regs() argument
984 ret = fuel_gauge_reg_readb(info, AXP288_FG_DES_CAP1_REG); fuel_gauge_init_config_regs()
986 dev_warn(&info->pdev->dev, "CAP1 reg read err!!\n"); fuel_gauge_init_config_regs()
988 dev_info(&info->pdev->dev, "FG data needs to be initialized\n"); fuel_gauge_init_config_regs()
990 dev_info(&info->pdev->dev, "FG data is already initialized\n"); fuel_gauge_init_config_regs()
994 ret = fuel_gauge_program_vbatt_full(info); fuel_gauge_init_config_regs()
996 dev_err(&info->pdev->dev, "set vbatt full fail:%d\n", ret); fuel_gauge_init_config_regs()
998 ret = fuel_gauge_program_design_cap(info); fuel_gauge_init_config_regs()
1000 dev_err(&info->pdev->dev, "set design cap fail:%d\n", ret); fuel_gauge_init_config_regs()
1002 ret = fuel_gauge_program_rdc_vals(info); fuel_gauge_init_config_regs()
1004 dev_err(&info->pdev->dev, "set rdc fail:%d\n", ret); fuel_gauge_init_config_regs()
1006 ret = fuel_gauge_program_ocv_curve(info); fuel_gauge_init_config_regs()
1008 dev_err(&info->pdev->dev, "set ocv curve fail:%d\n", ret); fuel_gauge_init_config_regs()
1010 ret = fuel_gauge_set_lowbatt_thresholds(info); fuel_gauge_init_config_regs()
1012 dev_err(&info->pdev->dev, "lowbatt thr set fail:%d\n", ret); fuel_gauge_init_config_regs()
1014 ret = fuel_gauge_reg_writeb(info, AXP20X_CC_CTRL, 0xef); fuel_gauge_init_config_regs()
1016 dev_err(&info->pdev->dev, "gauge cntl set fail:%d\n", ret); fuel_gauge_init_config_regs()
1019 static void fuel_gauge_init_irq(struct axp288_fg_info *info) fuel_gauge_init_irq() argument
1024 pirq = platform_get_irq(info->pdev, i); fuel_gauge_init_irq()
1025 info->irq[i] = regmap_irq_get_virq(info->regmap_irqc, pirq); fuel_gauge_init_irq()
1026 if (info->irq[i] < 0) { fuel_gauge_init_irq()
1027 dev_warn(&info->pdev->dev, fuel_gauge_init_irq()
1029 pirq, info->irq[i]); fuel_gauge_init_irq()
1030 info->irq[i] = -1; fuel_gauge_init_irq()
1033 ret = request_threaded_irq(info->irq[i], fuel_gauge_init_irq()
1035 IRQF_ONESHOT, DEV_NAME, info); fuel_gauge_init_irq()
1037 dev_warn(&info->pdev->dev, fuel_gauge_init_irq()
1039 pirq, info->irq[i]); fuel_gauge_init_irq()
1040 info->irq[i] = -1; fuel_gauge_init_irq()
1043 dev_info(&info->pdev->dev, "HW IRQ %d -> VIRQ %d\n", fuel_gauge_init_irq()
1044 pirq, info->irq[i]); fuel_gauge_init_irq()
1051 free_irq(info->irq[i - 1], info); fuel_gauge_init_irq()
1052 info->irq[i - 1] = -1; fuel_gauge_init_irq()
1056 static void fuel_gauge_init_hw_regs(struct axp288_fg_info *info) fuel_gauge_init_hw_regs() argument
1061 ret = fuel_gauge_set_high_btemp_alert(info); fuel_gauge_init_hw_regs()
1063 dev_err(&info->pdev->dev, "high batt temp set fail:%d\n", ret); fuel_gauge_init_hw_regs()
1065 ret = fuel_gauge_set_low_btemp_alert(info); fuel_gauge_init_hw_regs()
1067 dev_err(&info->pdev->dev, "low batt temp set fail:%d\n", ret); fuel_gauge_init_hw_regs()
1070 val = fuel_gauge_reg_readb(info, AXP20X_IRQ3_EN); fuel_gauge_init_hw_regs()
1072 fuel_gauge_reg_writeb(info, AXP20X_IRQ3_EN, val); fuel_gauge_init_hw_regs()
1074 val = fuel_gauge_reg_readb(info, AXP20X_IRQ4_EN); fuel_gauge_init_hw_regs()
1076 val = fuel_gauge_reg_writeb(info, AXP20X_IRQ4_EN, val); fuel_gauge_init_hw_regs()
1082 struct axp288_fg_info *info; axp288_fuel_gauge_probe() local
1086 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); axp288_fuel_gauge_probe()
1087 if (!info) axp288_fuel_gauge_probe()
1090 info->pdev = pdev; axp288_fuel_gauge_probe()
1091 info->regmap = axp20x->regmap; axp288_fuel_gauge_probe()
1092 info->regmap_irqc = axp20x->regmap_irqc; axp288_fuel_gauge_probe()
1093 info->status = POWER_SUPPLY_STATUS_UNKNOWN; axp288_fuel_gauge_probe()
1094 info->pdata = pdev->dev.platform_data; axp288_fuel_gauge_probe()
1095 if (!info->pdata) axp288_fuel_gauge_probe()
1098 platform_set_drvdata(pdev, info); axp288_fuel_gauge_probe()
1100 mutex_init(&info->lock); axp288_fuel_gauge_probe()
1101 INIT_DELAYED_WORK(&info->status_monitor, fuel_gauge_status_monitor); axp288_fuel_gauge_probe()
1103 psy_cfg.drv_data = info; axp288_fuel_gauge_probe()
1104 info->bat = power_supply_register(&pdev->dev, &fuel_gauge_desc, &psy_cfg); axp288_fuel_gauge_probe()
1105 if (IS_ERR(info->bat)) { axp288_fuel_gauge_probe()
1106 ret = PTR_ERR(info->bat); axp288_fuel_gauge_probe()
1111 fuel_gauge_create_debugfs(info); axp288_fuel_gauge_probe()
1112 fuel_gauge_init_config_regs(info); axp288_fuel_gauge_probe()
1113 fuel_gauge_init_irq(info); axp288_fuel_gauge_probe()
1114 fuel_gauge_init_hw_regs(info); axp288_fuel_gauge_probe()
1115 schedule_delayed_work(&info->status_monitor, STATUS_MON_DELAY_JIFFIES); axp288_fuel_gauge_probe()
1127 struct axp288_fg_info *info = platform_get_drvdata(pdev); axp288_fuel_gauge_remove() local
1130 cancel_delayed_work_sync(&info->status_monitor); axp288_fuel_gauge_remove()
1131 power_supply_unregister(info->bat); axp288_fuel_gauge_remove()
1132 fuel_gauge_remove_debugfs(info); axp288_fuel_gauge_remove()
1135 if (info->irq[i] >= 0) axp288_fuel_gauge_remove()
1136 free_irq(info->irq[i], info); axp288_fuel_gauge_remove()
191 pmic_read_adc_val(const char *name, int *raw_val, struct axp288_fg_info *info) pmic_read_adc_val() argument
H A Dmax8925_power.c88 static int __set_charger(struct max8925_power_info *info, int enable) __set_charger() argument
90 struct max8925_chip *chip = info->chip; __set_charger()
93 if (info->set_charger) __set_charger()
94 info->set_charger(1); __set_charger()
96 max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 1 << 7, 0); __set_charger()
99 max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 1 << 7, 1 << 7); __set_charger()
100 if (info->set_charger) __set_charger()
101 info->set_charger(0); __set_charger()
110 struct max8925_power_info *info = (struct max8925_power_info *)data; max8925_charger_handler() local
111 struct max8925_chip *chip = info->chip; max8925_charger_handler()
115 info->ac_online = 1; max8925_charger_handler()
116 __set_charger(info, 1); max8925_charger_handler()
120 info->ac_online = 0; max8925_charger_handler()
121 __set_charger(info, 0); max8925_charger_handler()
129 __set_charger(info, 0); max8925_charger_handler()
143 __set_charger(info, 0); max8925_charger_handler()
150 __set_charger(info, 0); max8925_charger_handler()
154 __set_charger(info, 0); max8925_charger_handler()
161 static int start_measure(struct max8925_power_info *info, int type) start_measure() argument
188 max8925_reg_write(info->adc, meas_cmd, 0); start_measure()
189 max8925_bulk_read(info->adc, meas_reg, 2, buf); start_measure()
199 struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); max8925_ac_get_prop() local
204 val->intval = info->ac_online; max8925_ac_get_prop()
207 if (info->ac_online) { max8925_ac_get_prop()
208 ret = start_measure(info, MEASURE_VCHG); max8925_ac_get_prop()
233 struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); max8925_usb_get_prop() local
238 val->intval = info->usb_online; max8925_usb_get_prop()
241 if (info->usb_online) { max8925_usb_get_prop()
242 ret = start_measure(info, MEASURE_VCHG); max8925_usb_get_prop()
267 struct max8925_power_info *info = dev_get_drvdata(psy->dev.parent); max8925_bat_get_prop() local
272 val->intval = info->bat_online; max8925_bat_get_prop()
275 if (info->bat_online) { max8925_bat_get_prop()
276 ret = start_measure(info, MEASURE_VMBATT); max8925_bat_get_prop()
286 if (info->bat_online) { max8925_bat_get_prop()
287 ret = start_measure(info, MEASURE_ISNS); max8925_bat_get_prop()
301 if (!info->bat_online) { max8925_bat_get_prop()
305 ret = max8925_reg_read(info->gpm, MAX8925_CHG_STATUS); max8925_bat_get_prop()
322 if (!info->bat_online) { max8925_bat_get_prop()
326 ret = max8925_reg_read(info->gpm, MAX8925_CHG_STATUS); max8925_bat_get_prop()
327 if (info->usb_online || info->ac_online) { max8925_bat_get_prop()
378 IRQF_ONESHOT, _name, info); \
385 struct max8925_power_info *info) max8925_init_charger()
390 if (!info->no_insert_detect) { max8925_init_charger()
394 if (!info->no_temp_support) { max8925_init_charger()
405 info->usb_online = 0; max8925_init_charger()
406 info->bat_online = 0; max8925_init_charger()
409 if (start_measure(info, MEASURE_VCHG) * 2000 > 500000) max8925_init_charger()
410 info->ac_online = 1; max8925_init_charger()
412 info->ac_online = 0; max8925_init_charger()
414 ret = max8925_reg_read(info->gpm, MAX8925_CHG_STATUS); max8925_init_charger()
422 if (info->batt_detect) max8925_init_charger()
423 info->bat_online = (ret & MAX8925_CHG_MBDET) ? 0 : 1; max8925_init_charger()
425 info->bat_online = 1; max8925_init_charger()
427 info->ac_online = 1; max8925_init_charger()
429 info->ac_online = 0; max8925_init_charger()
432 max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 1 << 7, 1 << 7); max8925_init_charger()
434 max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 3 << 5, max8925_init_charger()
435 info->topoff_threshold << 5); max8925_init_charger()
437 max8925_set_bits(info->gpm, MAX8925_CHG_CNTL1, 7, info->fast_charge); max8925_init_charger()
442 static int max8925_deinit_charger(struct max8925_power_info *info) max8925_deinit_charger() argument
444 struct max8925_chip *chip = info->chip; max8925_deinit_charger()
449 free_irq(irq, info); max8925_deinit_charger()
511 struct max8925_power_info *info; max8925_power_probe() local
521 info = devm_kzalloc(&pdev->dev, sizeof(struct max8925_power_info), max8925_power_probe()
523 if (!info) max8925_power_probe()
525 info->chip = chip; max8925_power_probe()
526 info->gpm = chip->i2c; max8925_power_probe()
527 info->adc = chip->adc; max8925_power_probe()
528 platform_set_drvdata(pdev, info); max8925_power_probe()
533 info->ac = power_supply_register(&pdev->dev, &ac_desc, &psy_cfg); max8925_power_probe()
534 if (IS_ERR(info->ac)) { max8925_power_probe()
535 ret = PTR_ERR(info->ac); max8925_power_probe()
538 info->ac->dev.parent = &pdev->dev; max8925_power_probe()
540 info->usb = power_supply_register(&pdev->dev, &usb_desc, &psy_cfg); max8925_power_probe()
541 if (IS_ERR(info->usb)) { max8925_power_probe()
542 ret = PTR_ERR(info->usb); max8925_power_probe()
545 info->usb->dev.parent = &pdev->dev; max8925_power_probe()
547 info->battery = power_supply_register(&pdev->dev, &battery_desc, NULL); max8925_power_probe()
548 if (IS_ERR(info->battery)) { max8925_power_probe()
549 ret = PTR_ERR(info->battery); max8925_power_probe()
552 info->battery->dev.parent = &pdev->dev; max8925_power_probe()
554 info->batt_detect = pdata->batt_detect; max8925_power_probe()
555 info->topoff_threshold = pdata->topoff_threshold; max8925_power_probe()
556 info->fast_charge = pdata->fast_charge; max8925_power_probe()
557 info->set_charger = pdata->set_charger; max8925_power_probe()
558 info->no_temp_support = pdata->no_temp_support; max8925_power_probe()
559 info->no_insert_detect = pdata->no_insert_detect; max8925_power_probe()
561 max8925_init_charger(chip, info); max8925_power_probe()
564 power_supply_unregister(info->battery); max8925_power_probe()
566 power_supply_unregister(info->ac); max8925_power_probe()
573 struct max8925_power_info *info = platform_get_drvdata(pdev); max8925_power_remove() local
575 if (info) { max8925_power_remove()
576 power_supply_unregister(info->ac); max8925_power_remove()
577 power_supply_unregister(info->usb); max8925_power_remove()
578 power_supply_unregister(info->battery); max8925_power_remove()
579 max8925_deinit_charger(info); max8925_power_remove()
384 max8925_init_charger(struct max8925_chip *chip, struct max8925_power_info *info) max8925_init_charger() argument
H A Dz2_battery.c24 struct z2_battery_info *info; member in struct:z2_charger
37 charger->info->batt_I2C_reg); z2_read_bat()
41 return data * charger->info->batt_mult / charger->info->batt_div; z2_read_bat()
49 struct z2_battery_info *info = charger->info; z2_batt_get_property() local
56 val->intval = info->batt_tech; z2_batt_get_property()
59 if (info->batt_I2C_reg >= 0) z2_batt_get_property()
65 if (info->max_voltage >= 0) z2_batt_get_property()
66 val->intval = info->max_voltage; z2_batt_get_property()
71 if (info->min_voltage >= 0) z2_batt_get_property()
72 val->intval = info->min_voltage; z2_batt_get_property()
96 struct z2_battery_info *info; z2_batt_update() local
98 info = charger->info; z2_batt_update()
102 charger->bat_status = (info->charge_gpio >= 0) ? z2_batt_update()
103 (gpio_get_value(info->charge_gpio) ? z2_batt_update()
136 struct z2_battery_info *info = charger->info; z2_batt_ps_init() local
138 if (info->charge_gpio >= 0) z2_batt_ps_init()
140 if (info->batt_tech >= 0) z2_batt_ps_init()
142 if (info->batt_I2C_reg >= 0) z2_batt_ps_init()
144 if (info->max_voltage >= 0) z2_batt_ps_init()
146 if (info->min_voltage >= 0) z2_batt_ps_init()
154 if (info->charge_gpio >= 0) z2_batt_ps_init()
156 if (info->batt_tech >= 0) z2_batt_ps_init()
158 if (info->batt_I2C_reg >= 0) z2_batt_ps_init()
160 if (info->max_voltage >= 0) z2_batt_ps_init()
162 if (info->min_voltage >= 0) z2_batt_ps_init()
165 if (!info->batt_name) { z2_batt_ps_init()
172 charger->batt_ps_desc.name = info->batt_name; z2_batt_ps_init()
191 struct z2_battery_info *info = client->dev.platform_data; z2_batt_probe() local
194 if (info == NULL) { z2_batt_probe()
206 charger->info = info; z2_batt_probe()
213 if (info->charge_gpio >= 0 && gpio_is_valid(info->charge_gpio)) { z2_batt_probe()
214 ret = gpio_request(info->charge_gpio, "BATT CHRG"); z2_batt_probe()
218 ret = gpio_direction_input(info->charge_gpio); z2_batt_probe()
222 irq_set_irq_type(gpio_to_irq(info->charge_gpio), z2_batt_probe()
224 ret = request_irq(gpio_to_irq(info->charge_gpio), z2_batt_probe()
252 if (info->charge_gpio >= 0 && gpio_is_valid(info->charge_gpio)) z2_batt_probe()
253 free_irq(gpio_to_irq(info->charge_gpio), charger); z2_batt_probe()
255 if (info->charge_gpio >= 0 && gpio_is_valid(info->charge_gpio)) z2_batt_probe()
256 gpio_free(info->charge_gpio); z2_batt_probe()
265 struct z2_battery_info *info = charger->info; z2_batt_remove() local
271 if (info->charge_gpio >= 0 && gpio_is_valid(info->charge_gpio)) { z2_batt_remove()
272 free_irq(gpio_to_irq(info->charge_gpio), charger); z2_batt_remove()
273 gpio_free(info->charge_gpio); z2_batt_remove()
/linux-4.1.27/drivers/video/fbdev/
H A Dep93xx-fb.c152 static void ep93xxfb_set_video_attribs(struct fb_info *info) ep93xxfb_set_video_attribs() argument
154 struct ep93xx_fbi *fbi = info->par; ep93xxfb_set_video_attribs()
162 static int ep93xxfb_set_pixelmode(struct fb_info *info) ep93xxfb_set_pixelmode() argument
164 struct ep93xx_fbi *fbi = info->par; ep93xxfb_set_pixelmode()
167 info->var.transp.offset = 0; ep93xxfb_set_pixelmode()
168 info->var.transp.length = 0; ep93xxfb_set_pixelmode()
170 switch (info->var.bits_per_pixel) { ep93xxfb_set_pixelmode()
175 info->var.red.offset = 0; ep93xxfb_set_pixelmode()
176 info->var.red.length = 8; ep93xxfb_set_pixelmode()
177 info->var.green.offset = 0; ep93xxfb_set_pixelmode()
178 info->var.green.length = 8; ep93xxfb_set_pixelmode()
179 info->var.blue.offset = 0; ep93xxfb_set_pixelmode()
180 info->var.blue.length = 8; ep93xxfb_set_pixelmode()
181 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; ep93xxfb_set_pixelmode()
188 info->var.red.offset = 11; ep93xxfb_set_pixelmode()
189 info->var.red.length = 5; ep93xxfb_set_pixelmode()
190 info->var.green.offset = 5; ep93xxfb_set_pixelmode()
191 info->var.green.length = 6; ep93xxfb_set_pixelmode()
192 info->var.blue.offset = 0; ep93xxfb_set_pixelmode()
193 info->var.blue.length = 5; ep93xxfb_set_pixelmode()
194 info->fix.visual = FB_VISUAL_TRUECOLOR; ep93xxfb_set_pixelmode()
201 info->var.red.offset = 16; ep93xxfb_set_pixelmode()
202 info->var.red.length = 8; ep93xxfb_set_pixelmode()
203 info->var.green.offset = 8; ep93xxfb_set_pixelmode()
204 info->var.green.length = 8; ep93xxfb_set_pixelmode()
205 info->var.blue.offset = 0; ep93xxfb_set_pixelmode()
206 info->var.blue.length = 8; ep93xxfb_set_pixelmode()
207 info->fix.visual = FB_VISUAL_TRUECOLOR; ep93xxfb_set_pixelmode()
214 info->var.red.offset = 16; ep93xxfb_set_pixelmode()
215 info->var.red.length = 8; ep93xxfb_set_pixelmode()
216 info->var.green.offset = 8; ep93xxfb_set_pixelmode()
217 info->var.green.length = 8; ep93xxfb_set_pixelmode()
218 info->var.blue.offset = 0; ep93xxfb_set_pixelmode()
219 info->var.blue.length = 8; ep93xxfb_set_pixelmode()
220 info->fix.visual = FB_VISUAL_TRUECOLOR; ep93xxfb_set_pixelmode()
231 static void ep93xxfb_set_timing(struct fb_info *info) ep93xxfb_set_timing() argument
233 struct ep93xx_fbi *fbi = info->par; ep93xxfb_set_timing()
236 vlines_total = info->var.yres + info->var.upper_margin + ep93xxfb_set_timing()
237 info->var.lower_margin + info->var.vsync_len - 1; ep93xxfb_set_timing()
239 hclks_total = info->var.xres + info->var.left_margin + ep93xxfb_set_timing()
240 info->var.right_margin + info->var.hsync_len - 1; ep93xxfb_set_timing()
246 stop = vlines_total - info->var.vsync_len; ep93xxfb_set_timing()
249 start = vlines_total - info->var.vsync_len - info->var.upper_margin; ep93xxfb_set_timing()
250 stop = info->var.lower_margin - 1; ep93xxfb_set_timing()
259 stop = hclks_total - info->var.hsync_len; ep93xxfb_set_timing()
262 start = hclks_total - info->var.hsync_len - info->var.left_margin; ep93xxfb_set_timing()
263 stop = info->var.right_margin - 1; ep93xxfb_set_timing()
274 static int ep93xxfb_set_par(struct fb_info *info) ep93xxfb_set_par() argument
276 struct ep93xx_fbi *fbi = info->par; ep93xxfb_set_par()
278 clk_set_rate(fbi->clk, 1000 * PICOS2KHZ(info->var.pixclock)); ep93xxfb_set_par()
280 ep93xxfb_set_timing(info); ep93xxfb_set_par()
282 info->fix.line_length = info->var.xres_virtual * ep93xxfb_set_par()
283 info->var.bits_per_pixel / 8; ep93xxfb_set_par()
285 ep93xxfb_writel(fbi, info->fix.smem_start, EP93XXFB_SCREEN_PAGE); ep93xxfb_set_par()
286 ep93xxfb_writel(fbi, info->var.yres - 1, EP93XXFB_SCREEN_LINES); ep93xxfb_set_par()
287 ep93xxfb_writel(fbi, ((info->var.xres * info->var.bits_per_pixel) ep93xxfb_set_par()
289 ep93xxfb_writel(fbi, info->fix.line_length / 4, EP93XXFB_VLINE_STEP); ep93xxfb_set_par()
290 ep93xxfb_set_video_attribs(info); ep93xxfb_set_par()
295 struct fb_info *info) ep93xxfb_check_var()
299 err = ep93xxfb_set_pixelmode(info); ep93xxfb_check_var()
314 static int ep93xxfb_mmap(struct fb_info *info, struct vm_area_struct *vma) ep93xxfb_mmap() argument
318 if (offset < info->fix.smem_len) { ep93xxfb_mmap()
319 return dma_mmap_writecombine(info->dev, vma, info->screen_base, ep93xxfb_mmap()
320 info->fix.smem_start, ep93xxfb_mmap()
321 info->fix.smem_len); ep93xxfb_mmap()
327 static int ep93xxfb_blank(int blank_mode, struct fb_info *info) ep93xxfb_blank() argument
329 struct ep93xx_fbi *fbi = info->par; ep93xxfb_blank()
334 fbi->mach_info->blank(blank_mode, info); ep93xxfb_blank()
343 fbi->mach_info->blank(blank_mode, info); ep93xxfb_blank()
356 unsigned int transp, struct fb_info *info) ep93xxfb_setcolreg()
358 struct ep93xx_fbi *fbi = info->par; ep93xxfb_setcolreg()
359 unsigned int *pal = info->pseudo_palette; ep93xxfb_setcolreg()
362 switch (info->fix.visual) { ep93xxfb_setcolreg()
391 red = ep93xxfb_convert_color(red, info->var.red.length); ep93xxfb_setcolreg()
392 green = ep93xxfb_convert_color(green, info->var.green.length); ep93xxfb_setcolreg()
393 blue = ep93xxfb_convert_color(blue, info->var.blue.length); ep93xxfb_setcolreg()
395 info->var.transp.length); ep93xxfb_setcolreg()
397 pal[regno] = (red << info->var.red.offset) | ep93xxfb_setcolreg()
398 (green << info->var.green.offset) | ep93xxfb_setcolreg()
399 (blue << info->var.blue.offset) | ep93xxfb_setcolreg()
400 (transp << info->var.transp.offset); ep93xxfb_setcolreg()
444 static int ep93xxfb_alloc_videomem(struct fb_info *info) ep93xxfb_alloc_videomem() argument
446 struct ep93xx_fbi *fbi = info->par; ep93xxfb_alloc_videomem()
452 virt_addr = dma_alloc_writecombine(info->dev, fb_size, ep93xxfb_alloc_videomem()
460 * See: http://marc.info/?l=linux-arm-kernel&m=110061245502000&w=2 ep93xxfb_alloc_videomem()
466 dev_err(info->dev, "ep93xx framebuffer bug. phys addr (0x%x) " ep93xxfb_alloc_videomem()
470 dma_free_coherent(info->dev, fb_size, virt_addr, phys_addr); ep93xxfb_alloc_videomem()
474 info->fix.smem_start = phys_addr; ep93xxfb_alloc_videomem()
475 info->fix.smem_len = fb_size; ep93xxfb_alloc_videomem()
476 info->screen_base = virt_addr; ep93xxfb_alloc_videomem()
481 static void ep93xxfb_dealloc_videomem(struct fb_info *info) ep93xxfb_dealloc_videomem() argument
483 if (info->screen_base) ep93xxfb_dealloc_videomem()
484 dma_free_coherent(info->dev, info->fix.smem_len, ep93xxfb_dealloc_videomem()
485 info->screen_base, info->fix.smem_start); ep93xxfb_dealloc_videomem()
491 struct fb_info *info; ep93xxfb_probe() local
500 info = framebuffer_alloc(sizeof(struct ep93xx_fbi), &pdev->dev); ep93xxfb_probe()
501 if (!info) ep93xxfb_probe()
504 info->dev = &pdev->dev; ep93xxfb_probe()
505 platform_set_drvdata(pdev, info); ep93xxfb_probe()
506 fbi = info->par; ep93xxfb_probe()
509 err = fb_alloc_cmap(&info->cmap, 256, 0); ep93xxfb_probe()
513 err = ep93xxfb_alloc_videomem(info); ep93xxfb_probe()
540 strcpy(info->fix.id, pdev->name); ep93xxfb_probe()
541 info->fbops = &ep93xxfb_ops; ep93xxfb_probe()
542 info->fix.type = FB_TYPE_PACKED_PIXELS; ep93xxfb_probe()
543 info->fix.accel = FB_ACCEL_NONE; ep93xxfb_probe()
544 info->var.activate = FB_ACTIVATE_NOW; ep93xxfb_probe()
545 info->var.vmode = FB_VMODE_NONINTERLACED; ep93xxfb_probe()
546 info->flags = FBINFO_DEFAULT; ep93xxfb_probe()
547 info->node = -1; ep93xxfb_probe()
548 info->state = FBINFO_STATE_RUNNING; ep93xxfb_probe()
549 info->pseudo_palette = &fbi->pseudo_palette; ep93xxfb_probe()
552 err = fb_find_mode(&info->var, info, video_mode, ep93xxfb_probe()
556 dev_err(info->dev, "No suitable video mode found\n"); ep93xxfb_probe()
567 err = ep93xxfb_check_var(&info->var, info); ep93xxfb_probe()
578 ep93xxfb_set_par(info); ep93xxfb_probe()
581 err = register_framebuffer(info); ep93xxfb_probe()
585 dev_info(info->dev, "registered. Mode = %dx%d-%d\n", ep93xxfb_probe()
586 info->var.xres, info->var.yres, info->var.bits_per_pixel); ep93xxfb_probe()
593 ep93xxfb_dealloc_videomem(info); ep93xxfb_probe()
595 fb_dealloc_cmap(&info->cmap); ep93xxfb_probe()
597 kfree(info); ep93xxfb_probe()
604 struct fb_info *info = platform_get_drvdata(pdev); ep93xxfb_remove() local
605 struct ep93xx_fbi *fbi = info->par; ep93xxfb_remove()
607 unregister_framebuffer(info); ep93xxfb_remove()
609 ep93xxfb_dealloc_videomem(info); ep93xxfb_remove()
610 fb_dealloc_cmap(&info->cmap); ep93xxfb_remove()
615 kfree(info); ep93xxfb_remove()
294 ep93xxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) ep93xxfb_check_var() argument
354 ep93xxfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green, unsigned int blue, unsigned int transp, struct fb_info *info) ep93xxfb_setcolreg() argument
H A Dcobalt_lcdfb.c67 static inline void lcd_write_control(struct fb_info *info, u8 control) lcd_write_control() argument
69 writel((u32)control << 24, info->screen_base); lcd_write_control()
72 static inline u8 lcd_read_control(struct fb_info *info) lcd_read_control() argument
74 return readl(info->screen_base) >> 24; lcd_read_control()
77 static inline void lcd_write_data(struct fb_info *info, u8 data) lcd_write_data() argument
79 writel((u32)data << 24, info->screen_base + LCD_DATA_REG_OFFSET); lcd_write_data()
82 static inline u8 lcd_read_data(struct fb_info *info) lcd_read_data() argument
84 return readl(info->screen_base + LCD_DATA_REG_OFFSET) >> 24; lcd_read_data()
93 static inline void cpld_wait(struct fb_info *info) cpld_wait() argument
96 } while (readl(info->screen_base + CPLD_STATUS) & 1); cpld_wait()
99 static inline void lcd_write_control(struct fb_info *info, u8 control) lcd_write_control() argument
101 cpld_wait(info); lcd_write_control()
102 writel(control, info->screen_base + LCD_CTL); lcd_write_control()
105 static inline u8 lcd_read_control(struct fb_info *info) lcd_read_control() argument
107 cpld_wait(info); lcd_read_control()
108 readl(info->screen_base + LCD_CTL); lcd_read_control()
109 cpld_wait(info); lcd_read_control()
110 return readl(info->screen_base + CPLD_DATA) & 0xff; lcd_read_control()
113 static inline void lcd_write_data(struct fb_info *info, u8 data) lcd_write_data() argument
115 cpld_wait(info); lcd_write_data()
116 writel(data, info->screen_base + LCD_DATA); lcd_write_data()
119 static inline u8 lcd_read_data(struct fb_info *info) lcd_read_data() argument
121 cpld_wait(info); lcd_read_data()
122 readl(info->screen_base + LCD_DATA); lcd_read_data()
123 cpld_wait(info); lcd_read_data()
124 return readl(info->screen_base + CPLD_DATA) & 0xff; lcd_read_data()
128 static int lcd_busy_wait(struct fb_info *info) lcd_busy_wait() argument
134 val = lcd_read_control(info); lcd_busy_wait()
151 static void lcd_clear(struct fb_info *info) lcd_clear() argument
158 lcd_write_control(info, LCD_PRERESET); lcd_clear()
163 lcd_write_control(info, LCD_CLEAR); lcd_clear()
167 lcd_write_control(info, LCD_RESET); lcd_clear()
179 static ssize_t cobalt_lcdfb_read(struct fb_info *info, char __user *buf, cobalt_lcdfb_read() argument
197 retval = lcd_busy_wait(info); cobalt_lcdfb_read()
201 lcd_write_control(info, LCD_TEXT_POS(pos)); cobalt_lcdfb_read()
203 retval = lcd_busy_wait(info); cobalt_lcdfb_read()
207 src[len] = lcd_read_data(info); cobalt_lcdfb_read()
225 static ssize_t cobalt_lcdfb_write(struct fb_info *info, const char __user *buf, cobalt_lcdfb_write() argument
246 retval = lcd_busy_wait(info); cobalt_lcdfb_write()
250 lcd_write_control(info, LCD_TEXT_POS(pos)); cobalt_lcdfb_write()
252 retval = lcd_busy_wait(info); cobalt_lcdfb_write()
256 lcd_write_data(info, dst[len]); cobalt_lcdfb_write()
271 static int cobalt_lcdfb_blank(int blank_mode, struct fb_info *info) cobalt_lcdfb_blank() argument
275 retval = lcd_busy_wait(info); cobalt_lcdfb_blank()
281 lcd_write_control(info, LCD_ON); cobalt_lcdfb_blank()
284 lcd_write_control(info, LCD_OFF); cobalt_lcdfb_blank()
291 static int cobalt_lcdfb_cursor(struct fb_info *info, struct fb_cursor *cursor) cobalt_lcdfb_cursor() argument
303 retval = lcd_busy_wait(info); cobalt_lcdfb_cursor()
307 lcd_write_control(info, cobalt_lcdfb_cursor()
308 LCD_TEXT_POS(info->fix.line_length * y + x)); cobalt_lcdfb_cursor()
314 retval = lcd_busy_wait(info); cobalt_lcdfb_cursor()
319 lcd_write_control(info, LCD_CURSOR_ON); cobalt_lcdfb_cursor()
321 lcd_write_control(info, LCD_CURSOR_OFF); cobalt_lcdfb_cursor()
336 struct fb_info *info; cobalt_lcdfb_probe() local
340 info = framebuffer_alloc(0, &dev->dev); cobalt_lcdfb_probe()
341 if (!info) cobalt_lcdfb_probe()
346 framebuffer_release(info); cobalt_lcdfb_probe()
350 info->screen_size = resource_size(res); cobalt_lcdfb_probe()
351 info->screen_base = devm_ioremap(&dev->dev, res->start, cobalt_lcdfb_probe()
352 info->screen_size); cobalt_lcdfb_probe()
353 info->fbops = &cobalt_lcd_fbops; cobalt_lcdfb_probe()
354 info->fix = cobalt_lcdfb_fix; cobalt_lcdfb_probe()
355 info->fix.smem_start = res->start; cobalt_lcdfb_probe()
356 info->fix.smem_len = info->screen_size; cobalt_lcdfb_probe()
357 info->pseudo_palette = NULL; cobalt_lcdfb_probe()
358 info->par = NULL; cobalt_lcdfb_probe()
359 info->flags = FBINFO_DEFAULT; cobalt_lcdfb_probe()
361 retval = register_framebuffer(info); cobalt_lcdfb_probe()
363 framebuffer_release(info); cobalt_lcdfb_probe()
367 platform_set_drvdata(dev, info); cobalt_lcdfb_probe()
369 lcd_clear(info); cobalt_lcdfb_probe()
371 fb_info(info, "Cobalt server LCD frame buffer device\n"); cobalt_lcdfb_probe()
378 struct fb_info *info; cobalt_lcdfb_remove() local
380 info = platform_get_drvdata(dev); cobalt_lcdfb_remove()
381 if (info) { cobalt_lcdfb_remove()
382 unregister_framebuffer(info); cobalt_lcdfb_remove()
383 framebuffer_release(info); cobalt_lcdfb_remove()
H A Dvt8623fb.c124 static void vt8623fb_tilecursor(struct fb_info *info, struct fb_tilecursor *cursor) vt8623fb_tilecursor() argument
126 struct vt8623fb_info *par = info->par; vt8623fb_tilecursor()
128 svga_tilecursor(par->state.vgabase, info, cursor); vt8623fb_tilecursor()
151 static void vt8623fb_iplan_imageblit(struct fb_info *info, const struct fb_image *image) vt8623fb_iplan_imageblit() argument
162 dst1 = info->screen_base + (image->dy * info->fix.line_length) vt8623fb_iplan_imageblit()
174 dst1 += info->fix.line_length; vt8623fb_iplan_imageblit()
179 static void vt8623fb_iplan_fillrect(struct fb_info *info, const struct fb_fillrect *rect) vt8623fb_iplan_fillrect() argument
186 dst1 = info->screen_base + (rect->dy * info->fix.line_length) vt8623fb_iplan_fillrect()
194 dst1 += info->fix.line_length; vt8623fb_iplan_fillrect()
207 static void vt8623fb_cfb4_imageblit(struct fb_info *info, const struct fb_image *image) vt8623fb_cfb4_imageblit() argument
218 dst1 = info->screen_base + (image->dy * info->fix.line_length) vt8623fb_cfb4_imageblit()
230 dst1 += info->fix.line_length; vt8623fb_cfb4_imageblit()
234 static void vt8623fb_imageblit(struct fb_info *info, const struct fb_image *image) vt8623fb_imageblit() argument
236 if ((info->var.bits_per_pixel == 4) && (image->depth == 1) vt8623fb_imageblit()
238 if (info->fix.type == FB_TYPE_INTERLEAVED_PLANES) vt8623fb_imageblit()
239 vt8623fb_iplan_imageblit(info, image); vt8623fb_imageblit()
241 vt8623fb_cfb4_imageblit(info, image); vt8623fb_imageblit()
243 cfb_imageblit(info, image); vt8623fb_imageblit()
246 static void vt8623fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) vt8623fb_fillrect() argument
248 if ((info->var.bits_per_pixel == 4) vt8623fb_fillrect()
250 && (info->fix.type == FB_TYPE_INTERLEAVED_PLANES)) vt8623fb_fillrect()
251 vt8623fb_iplan_fillrect(info, rect); vt8623fb_fillrect()
253 cfb_fillrect(info, rect); vt8623fb_fillrect()
260 static void vt8623_set_pixclock(struct fb_info *info, u32 pixclock) vt8623_set_pixclock() argument
262 struct vt8623fb_info *par = info->par; vt8623_set_pixclock()
267 rv = svga_compute_pll(&vt8623_pll, 1000000000 / pixclock, &m, &n, &r, info->node); vt8623_set_pixclock()
269 fb_err(info, "cannot set requested pixclock, keeping old value\n"); vt8623_set_pixclock()
289 static int vt8623fb_open(struct fb_info *info, int user) vt8623fb_open() argument
291 struct vt8623fb_info *par = info->par; vt8623fb_open()
311 static int vt8623fb_release(struct fb_info *info, int user) vt8623fb_release() argument
313 struct vt8623fb_info *par = info->par; vt8623fb_release()
330 static int vt8623fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) vt8623fb_check_var() argument
338 fb_err(info, "unsupported mode requested\n"); vt8623fb_check_var()
355 if (mem > info->screen_size) vt8623fb_check_var()
357 fb_err(info, "not enough framebuffer memory (%d kB requested, %d kB available)\n", vt8623fb_check_var()
358 mem >> 10, (unsigned int) (info->screen_size >> 10)); vt8623fb_check_var()
365 fb_err(info, "text framebuffer size too large (%d kB requested, 256 kB possible)\n", vt8623fb_check_var()
370 rv = svga_check_timings (&vt8623_timing_regs, var, info->node); vt8623fb_check_var()
373 fb_err(info, "invalid timings requested\n"); vt8623fb_check_var()
385 static int vt8623fb_set_par(struct fb_info *info) vt8623fb_set_par() argument
388 struct vt8623fb_info *par = info->par; vt8623fb_set_par()
389 u32 bpp = info->var.bits_per_pixel; vt8623fb_set_par()
392 info->fix.ypanstep = 1; vt8623fb_set_par()
393 info->fix.line_length = (info->var.xres_virtual * bpp) / 8; vt8623fb_set_par()
395 info->flags &= ~FBINFO_MISC_TILEBLITTING; vt8623fb_set_par()
396 info->tileops = NULL; vt8623fb_set_par()
399 info->pixmap.blit_x = (bpp == 4) ? (1 << (8 - 1)) : (~(u32)0); vt8623fb_set_par()
400 info->pixmap.blit_y = ~(u32)0; vt8623fb_set_par()
402 offset_value = (info->var.xres_virtual * bpp) / 64; vt8623fb_set_par()
403 fetch_value = ((info->var.xres * bpp) / 128) + 4; vt8623fb_set_par()
406 fetch_value = (info->var.xres / 8) + 8; /* + 0 is OK */ vt8623fb_set_par()
408 screen_size = info->var.yres_virtual * info->fix.line_length; vt8623fb_set_par()
410 info->fix.ypanstep = 16; vt8623fb_set_par()
411 info->fix.line_length = 0; vt8623fb_set_par()
413 info->flags |= FBINFO_MISC_TILEBLITTING; vt8623fb_set_par()
414 info->tileops = &vt8623fb_tile_ops; vt8623fb_set_par()
417 info->pixmap.blit_x = 1 << (8 - 1); vt8623fb_set_par()
418 info->pixmap.blit_y = 1 << (16 - 1); vt8623fb_set_par()
420 offset_value = info->var.xres_virtual / 16; vt8623fb_set_par()
421 fetch_value = (info->var.xres / 8) + 8; vt8623fb_set_par()
422 screen_size = (info->var.xres_virtual * info->var.yres_virtual) / 64; vt8623fb_set_par()
425 info->var.xoffset = 0; vt8623fb_set_par()
426 info->var.yoffset = 0; vt8623fb_set_par()
427 info->var.activate = FB_ACTIVATE_NOW; vt8623fb_set_par()
454 if (info->var.vmode & FB_VMODE_DOUBLE) vt8623fb_set_par()
476 mode = svga_match_format(vt8623fb_formats, &(info->var), &(info->fix)); vt8623fb_set_par()
479 fb_dbg(info, "text mode\n"); vt8623fb_set_par()
485 fb_dbg(info, "4 bit pseudocolor\n"); vt8623fb_set_par()
491 fb_dbg(info, "4 bit pseudocolor, planar\n"); vt8623fb_set_par()
496 fb_dbg(info, "8 bit pseudocolor\n"); vt8623fb_set_par()
500 fb_dbg(info, "5/6/5 truecolor\n"); vt8623fb_set_par()
504 fb_dbg(info, "8/8/8 truecolor\n"); vt8623fb_set_par()
512 vt8623_set_pixclock(info, info->var.pixclock); vt8623fb_set_par()
513 svga_set_timings(par->state.vgabase, &vt8623_timing_regs, &(info->var), 1, 1, vt8623fb_set_par()
514 (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, 1, vt8623fb_set_par()
515 1, info->node); vt8623fb_set_par()
517 memset_io(info->screen_base, 0x00, screen_size); vt8623fb_set_par()
583 static int vt8623fb_blank(int blank_mode, struct fb_info *info) vt8623fb_blank() argument
585 struct vt8623fb_info *par = info->par; vt8623fb_blank()
589 fb_dbg(info, "unblank\n"); vt8623fb_blank()
594 fb_dbg(info, "blank\n"); vt8623fb_blank()
599 fb_dbg(info, "DPMS standby (hsync off)\n"); vt8623fb_blank()
604 fb_dbg(info, "DPMS suspend (vsync off)\n"); vt8623fb_blank()
609 fb_dbg(info, "DPMS off (no sync)\n"); vt8623fb_blank()
619 static int vt8623fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) vt8623fb_pan_display() argument
621 struct vt8623fb_info *par = info->par; vt8623fb_pan_display()
625 if (info->var.bits_per_pixel == 0) { vt8623fb_pan_display()
626 offset = (var->yoffset / 16) * info->var.xres_virtual vt8623fb_pan_display()
630 offset = (var->yoffset * info->fix.line_length) + vt8623fb_pan_display()
631 (var->xoffset * info->var.bits_per_pixel / 8); vt8623fb_pan_display()
632 offset = offset >> ((info->var.bits_per_pixel == 4) ? 2 : 1); vt8623fb_pan_display()
669 struct fb_info *info; vt8623_pci_probe() local
681 info = framebuffer_alloc(sizeof(struct vt8623fb_info), &(dev->dev)); vt8623_pci_probe()
682 if (! info) { vt8623_pci_probe()
687 par = info->par; vt8623_pci_probe()
690 info->flags = FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN; vt8623_pci_probe()
691 info->fbops = &vt8623fb_ops; vt8623_pci_probe()
697 dev_err(info->device, "cannot enable PCI device\n"); vt8623_pci_probe()
703 dev_err(info->device, "cannot reserve framebuffer region\n"); vt8623_pci_probe()
707 info->fix.smem_start = pci_resource_start(dev, 0); vt8623_pci_probe()
708 info->fix.smem_len = pci_resource_len(dev, 0); vt8623_pci_probe()
709 info->fix.mmio_start = pci_resource_start(dev, 1); vt8623_pci_probe()
710 info->fix.mmio_len = pci_resource_len(dev, 1); vt8623_pci_probe()
713 info->screen_base = pci_iomap(dev, 0, 0); vt8623_pci_probe()
714 if (! info->screen_base) { vt8623_pci_probe()
716 dev_err(info->device, "iomap for framebuffer failed\n"); vt8623_pci_probe()
723 dev_err(info->device, "iomap for MMIO failed\n"); vt8623_pci_probe()
741 info->screen_size = memsize1 << 20; vt8623_pci_probe()
743 dev_err(info->device, "memory size detection failed (%x %x), suppose 16 MB\n", memsize1, memsize2); vt8623_pci_probe()
744 info->screen_size = 16 << 20; vt8623_pci_probe()
747 info->fix.smem_len = info->screen_size; vt8623_pci_probe()
748 strcpy(info->fix.id, "VIA VT8623"); vt8623_pci_probe()
749 info->fix.type = FB_TYPE_PACKED_PIXELS; vt8623_pci_probe()
750 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; vt8623_pci_probe()
751 info->fix.ypanstep = 0; vt8623_pci_probe()
752 info->fix.accel = FB_ACCEL_NONE; vt8623_pci_probe()
753 info->pseudo_palette = (void*)par->pseudo_palette; vt8623_pci_probe()
758 rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); vt8623_pci_probe()
762 dev_err(info->device, "mode %s not found\n", mode_option); vt8623_pci_probe()
766 rc = fb_alloc_cmap(&info->cmap, 256, 0); vt8623_pci_probe()
768 dev_err(info->device, "cannot allocate colormap\n"); vt8623_pci_probe()
772 rc = register_framebuffer(info); vt8623_pci_probe()
774 dev_err(info->device, "cannot register framebuffer\n"); vt8623_pci_probe()
778 fb_info(info, "%s on %s, %d MB RAM\n", vt8623_pci_probe()
779 info->fix.id, pci_name(dev), info->fix.smem_len >> 20); vt8623_pci_probe()
782 pci_set_drvdata(dev, info); vt8623_pci_probe()
787 par->mtrr_reg = mtrr_add(info->fix.smem_start, info->fix.smem_len, MTRR_TYPE_WRCOMB, 1); vt8623_pci_probe()
795 fb_dealloc_cmap(&info->cmap); vt8623_pci_probe()
800 pci_iounmap(dev, info->screen_base); vt8623_pci_probe()
806 framebuffer_release(info); vt8623_pci_probe()
814 struct fb_info *info = pci_get_drvdata(dev); vt8623_pci_remove() local
816 if (info) { vt8623_pci_remove()
817 struct vt8623fb_info *par = info->par; vt8623_pci_remove()
826 unregister_framebuffer(info); vt8623_pci_remove()
827 fb_dealloc_cmap(&info->cmap); vt8623_pci_remove()
829 pci_iounmap(dev, info->screen_base); vt8623_pci_remove()
834 framebuffer_release(info); vt8623_pci_remove()
844 struct fb_info *info = pci_get_drvdata(dev); vt8623_pci_suspend() local
845 struct vt8623fb_info *par = info->par; vt8623_pci_suspend()
847 dev_info(info->device, "suspend\n"); vt8623_pci_suspend()
858 fb_set_suspend(info, 1); vt8623_pci_suspend()
875 struct fb_info *info = pci_get_drvdata(dev); vt8623_pci_resume() local
876 struct vt8623fb_info *par = info->par; vt8623_pci_resume()
878 dev_info(info->device, "resume\n"); vt8623_pci_resume()
894 vt8623fb_set_par(info); vt8623_pci_resume()
895 fb_set_suspend(info, 0); vt8623_pci_resume()
H A Dxen-fbfront.c73 static void xenfb_send_event(struct xenfb_info *info, xenfb_send_event() argument
78 prod = info->page->out_prod; xenfb_send_event()
81 XENFB_OUT_RING_REF(info->page, prod) = *event; xenfb_send_event()
83 info->page->out_prod = prod + 1; xenfb_send_event()
85 notify_remote_via_irq(info->irq); xenfb_send_event()
88 static void xenfb_do_update(struct xenfb_info *info, xenfb_do_update() argument
101 xenfb_send_event(info, &event); xenfb_do_update()
104 static void xenfb_do_resize(struct xenfb_info *info) xenfb_do_resize() argument
109 event.resize = info->resize; xenfb_do_resize()
112 xenfb_send_event(info, &event); xenfb_do_resize()
115 static int xenfb_queue_full(struct xenfb_info *info) xenfb_queue_full() argument
119 prod = info->page->out_prod; xenfb_queue_full()
120 cons = info->page->out_cons; xenfb_queue_full()
124 static void xenfb_handle_resize_dpy(struct xenfb_info *info) xenfb_handle_resize_dpy() argument
128 spin_lock_irqsave(&info->resize_lock, flags); xenfb_handle_resize_dpy()
129 if (info->resize_dpy) { xenfb_handle_resize_dpy()
130 if (!xenfb_queue_full(info)) { xenfb_handle_resize_dpy()
131 info->resize_dpy = 0; xenfb_handle_resize_dpy()
132 xenfb_do_resize(info); xenfb_handle_resize_dpy()
135 spin_unlock_irqrestore(&info->resize_lock, flags); xenfb_handle_resize_dpy()
138 static void xenfb_refresh(struct xenfb_info *info, xenfb_refresh() argument
145 xenfb_handle_resize_dpy(info); xenfb_refresh()
147 if (!info->update_wanted) xenfb_refresh()
150 spin_lock_irqsave(&info->dirty_lock, flags); xenfb_refresh()
153 if (info->y1 < y1) xenfb_refresh()
154 y1 = info->y1; xenfb_refresh()
155 if (info->y2 > y2) xenfb_refresh()
156 y2 = info->y2; xenfb_refresh()
157 if (info->x1 < x1) xenfb_refresh()
158 x1 = info->x1; xenfb_refresh()
159 if (info->x2 > x2) xenfb_refresh()
160 x2 = info->x2; xenfb_refresh()
162 if (xenfb_queue_full(info)) { xenfb_refresh()
164 info->x1 = x1; xenfb_refresh()
165 info->x2 = x2; xenfb_refresh()
166 info->y1 = y1; xenfb_refresh()
167 info->y2 = y2; xenfb_refresh()
168 spin_unlock_irqrestore(&info->dirty_lock, flags); xenfb_refresh()
173 info->x1 = info->y1 = INT_MAX; xenfb_refresh()
174 info->x2 = info->y2 = 0; xenfb_refresh()
176 spin_unlock_irqrestore(&info->dirty_lock, flags); xenfb_refresh()
179 xenfb_do_update(info, x1, y1, x2 - x1 + 1, y2 - y1 + 1); xenfb_refresh()
185 struct xenfb_info *info = fb_info->par; xenfb_deferred_io() local
204 xenfb_refresh(info, 0, miny, fb_info->var.xres, maxy - miny + 1);
214 struct fb_info *info) xenfb_setcolreg()
218 if (regno > info->cmap.len) xenfb_setcolreg()
222 red = CNVT_TOHW(red, info->var.red.length); xenfb_setcolreg()
223 green = CNVT_TOHW(green, info->var.green.length); xenfb_setcolreg()
224 blue = CNVT_TOHW(blue, info->var.blue.length); xenfb_setcolreg()
225 transp = CNVT_TOHW(transp, info->var.transp.length); xenfb_setcolreg()
228 v = (red << info->var.red.offset) | xenfb_setcolreg()
229 (green << info->var.green.offset) | xenfb_setcolreg()
230 (blue << info->var.blue.offset); xenfb_setcolreg()
232 switch (info->var.bits_per_pixel) { xenfb_setcolreg()
236 ((u32 *)info->pseudo_palette)[regno] = v; xenfb_setcolreg()
245 struct xenfb_info *info = p->par; xenfb_fillrect() local
248 xenfb_refresh(info, rect->dx, rect->dy, rect->width, rect->height); xenfb_fillrect()
253 struct xenfb_info *info = p->par; xenfb_imageblit() local
256 xenfb_refresh(info, image->dx, image->dy, image->width, image->height); xenfb_imageblit()
261 struct xenfb_info *info = p->par; xenfb_copyarea() local
264 xenfb_refresh(info, area->dx, area->dy, area->width, area->height); xenfb_copyarea()
270 struct xenfb_info *info = p->par; xenfb_write() local
274 xenfb_refresh(info, 0, 0, info->page->width, info->page->height); xenfb_write()
279 xenfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) xenfb_check_var() argument
284 xenfb_info = info->par; xenfb_check_var()
301 var->xres <= info->fix.line_length / (XENFB_DEPTH / 8) && xenfb_check_var()
302 required_mem_len <= info->fix.smem_len) { xenfb_check_var()
310 static int xenfb_set_par(struct fb_info *info) xenfb_set_par() argument
315 xenfb_info = info->par; xenfb_set_par()
319 xenfb_info->resize.width = info->var.xres; xenfb_set_par()
320 xenfb_info->resize.height = info->var.yres; xenfb_set_par()
321 xenfb_info->resize.stride = info->fix.line_length; xenfb_set_par()
322 xenfb_info->resize.depth = info->var.bits_per_pixel; xenfb_set_par()
348 struct xenfb_info *info = dev_id; xenfb_event_handler() local
349 struct xenfb_page *page = info->page; xenfb_event_handler()
352 info->page->in_cons = info->page->in_prod; xenfb_event_handler()
353 notify_remote_via_irq(info->irq); xenfb_event_handler()
357 xenfb_refresh(info, INT_MAX, INT_MAX, -INT_MAX, -INT_MAX); xenfb_event_handler()
365 struct xenfb_info *info; xenfb_probe() local
371 info = kzalloc(sizeof(*info), GFP_KERNEL); xenfb_probe()
372 if (info == NULL) { xenfb_probe()
373 xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure"); xenfb_probe()
392 dev_set_drvdata(&dev->dev, info); xenfb_probe()
393 info->xbdev = dev; xenfb_probe()
394 info->irq = -1; xenfb_probe()
395 info->x1 = info->y1 = INT_MAX; xenfb_probe()
396 spin_lock_init(&info->dirty_lock); xenfb_probe()
397 spin_lock_init(&info->resize_lock); xenfb_probe()
399 info->fb = vzalloc(fb_size); xenfb_probe()
400 if (info->fb == NULL) xenfb_probe()
403 info->nr_pages = (fb_size + PAGE_SIZE - 1) >> PAGE_SHIFT; xenfb_probe()
405 info->mfns = vmalloc(sizeof(unsigned long) * info->nr_pages); xenfb_probe()
406 if (!info->mfns) xenfb_probe()
410 info->page = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO); xenfb_probe()
411 if (!info->page) xenfb_probe()
421 fb_info->par = info; xenfb_probe()
423 fb_info->screen_base = info->fb; xenfb_probe()
459 xenfb_init_shared_page(info, fb_info); xenfb_probe()
461 ret = xenfb_connect_backend(dev, info); xenfb_probe()
472 info->fb_info = fb_info; xenfb_probe()
514 struct xenfb_info *info = dev_get_drvdata(&dev->dev); xenfb_resume() local
516 xenfb_disconnect_backend(info); xenfb_resume()
517 xenfb_init_shared_page(info, info->fb_info); xenfb_resume()
518 return xenfb_connect_backend(dev, info); xenfb_resume()
523 struct xenfb_info *info = dev_get_drvdata(&dev->dev); xenfb_remove() local
525 xenfb_disconnect_backend(info); xenfb_remove()
526 if (info->fb_info) { xenfb_remove()
527 fb_deferred_io_cleanup(info->fb_info); xenfb_remove()
528 unregister_framebuffer(info->fb_info); xenfb_remove()
529 fb_dealloc_cmap(&info->fb_info->cmap); xenfb_remove()
530 framebuffer_release(info->fb_info); xenfb_remove()
532 free_page((unsigned long)info->page); xenfb_remove()
533 vfree(info->mfns); xenfb_remove()
534 vfree(info->fb); xenfb_remove()
535 kfree(info); xenfb_remove()
545 static void xenfb_init_shared_page(struct xenfb_info *info, xenfb_init_shared_page() argument
549 int epd = PAGE_SIZE / sizeof(info->mfns[0]); xenfb_init_shared_page()
551 for (i = 0; i < info->nr_pages; i++) xenfb_init_shared_page()
552 info->mfns[i] = vmalloc_to_mfn(info->fb + i * PAGE_SIZE); xenfb_init_shared_page()
554 for (i = 0; i * epd < info->nr_pages; i++) xenfb_init_shared_page()
555 info->page->pd[i] = vmalloc_to_mfn(&info->mfns[i * epd]); xenfb_init_shared_page()
557 info->page->width = fb_info->var.xres; xenfb_init_shared_page()
558 info->page->height = fb_info->var.yres; xenfb_init_shared_page()
559 info->page->depth = fb_info->var.bits_per_pixel; xenfb_init_shared_page()
560 info->page->line_length = fb_info->fix.line_length; xenfb_init_shared_page()
561 info->page->mem_length = fb_info->fix.smem_len; xenfb_init_shared_page()
562 info->page->in_cons = info->page->in_prod = 0; xenfb_init_shared_page()
563 info->page->out_cons = info->page->out_prod = 0; xenfb_init_shared_page()
567 struct xenfb_info *info) xenfb_connect_backend()
576 0, dev->devicetype, info); xenfb_connect_backend()
589 virt_to_mfn(info->page)); xenfb_connect_backend()
612 info->irq = irq; xenfb_connect_backend()
619 unbind_from_irqhandler(irq, info); xenfb_connect_backend()
623 static void xenfb_disconnect_backend(struct xenfb_info *info) xenfb_disconnect_backend() argument
626 info->update_wanted = 0; xenfb_disconnect_backend()
627 if (info->irq >= 0) xenfb_disconnect_backend()
628 unbind_from_irqhandler(info->irq, info); xenfb_disconnect_backend()
629 info->irq = -1; xenfb_disconnect_backend()
635 struct xenfb_info *info = dev_get_drvdata(&dev->dev); xenfb_backend_changed() local
660 if (xenbus_scanf(XBT_NIL, info->xbdev->otherend, xenfb_backend_changed()
664 info->update_wanted = 1; xenfb_backend_changed()
669 info->feature_resize = val; xenfb_backend_changed()
212 xenfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) xenfb_setcolreg() argument
566 xenfb_connect_backend(struct xenbus_device *dev, struct xenfb_info *info) xenfb_connect_backend() argument
H A Dsh7760fb.c73 static int sh7760fb_blank(int blank, struct fb_info *info) sh7760fb_blank() argument
75 struct sh7760fb_par *par = info->par; sh7760fb_blank()
102 u_int transp, struct fb_info *info) sh7760_setcolreg()
104 u32 *palette = info->pseudo_palette; sh7760_setcolreg()
111 red >>= 16 - info->var.red.length; sh7760_setcolreg()
112 green >>= 16 - info->var.green.length; sh7760_setcolreg()
113 blue >>= 16 - info->var.blue.length; sh7760_setcolreg()
114 transp >>= 16 - info->var.transp.length; sh7760_setcolreg()
116 palette[regno] = (red << info->var.red.offset) | sh7760_setcolreg()
117 (green << info->var.green.offset) | sh7760_setcolreg()
118 (blue << info->var.blue.offset) | sh7760_setcolreg()
119 (transp << info->var.transp.offset); sh7760_setcolreg()
169 struct fb_info *info) sh7760fb_check_var()
171 struct fb_fix_screeninfo *fix = &info->fix; sh7760fb_check_var()
172 struct sh7760fb_par *par = info->par; sh7760fb_check_var()
175 /* get color info from register value */ sh7760fb_check_var()
176 ret = sh7760fb_get_color_info(info->dev, par->pd->lddfr, &bpp, NULL); sh7760fb_check_var()
199 static int sh7760fb_set_par(struct fb_info *info) sh7760fb_set_par() argument
201 struct sh7760fb_par *par = info->par; sh7760fb_set_par()
213 dev_dbg(info->dev, "rotation disabled due to display size\n"); sh7760fb_set_par()
227 /* get color info from register value */ sh7760fb_set_par()
228 ret = sh7760fb_get_color_info(info->dev, par->pd->lddfr, &bpp, &gray); sh7760fb_set_par()
232 dev_dbg(info->dev, "%dx%d %dbpp %s (orientation %s)\n", hdcn, sh7760fb_set_par()
250 sh7760fb_blank(FB_BLANK_POWERDOWN, info); sh7760fb_set_par()
312 dev_dbg(info->dev, " ***** DSTN untested! *****\n"); sh7760fb_set_par()
326 info->fix.line_length = stride; sh7760fb_set_par()
328 sh7760fb_check_var(&info->var, info); sh7760fb_set_par()
330 sh7760fb_blank(FB_BLANK_UNBLANK, info); /* panel on! */ sh7760fb_set_par()
332 dev_dbg(info->dev, "hdcn : %6d htcn : %6d\n", hdcn, htcn); sh7760fb_set_par()
333 dev_dbg(info->dev, "hsynw : %6d hsynp : %6d\n", hsynw, hsynp); sh7760fb_set_par()
334 dev_dbg(info->dev, "vdln : %6d vtln : %6d\n", vdln, vtln); sh7760fb_set_par()
335 dev_dbg(info->dev, "vsynw : %6d vsynp : %6d\n", vsynw, vsynp); sh7760fb_set_par()
336 dev_dbg(info->dev, "clksrc: %6d clkdiv: %6d\n", sh7760fb_set_par()
338 dev_dbg(info->dev, "ldpmmr: 0x%04x ldpspr: 0x%04x\n", par->pd->ldpmmr, sh7760fb_set_par()
340 dev_dbg(info->dev, "ldmtr : 0x%04x lddfr : 0x%04x\n", ldmtr, lddfr); sh7760fb_set_par()
341 dev_dbg(info->dev, "ldlaor: %ld\n", stride); sh7760fb_set_par()
342 dev_dbg(info->dev, "ldsaru: 0x%08lx ldsarl: 0x%08lx\n", sbase, ldsarl); sh7760fb_set_par()
358 static void sh7760fb_free_mem(struct fb_info *info) sh7760fb_free_mem() argument
360 struct sh7760fb_par *par = info->par; sh7760fb_free_mem()
362 if (!info->screen_base) sh7760fb_free_mem()
365 dma_free_coherent(info->dev, info->screen_size, sh7760fb_free_mem()
366 info->screen_base, par->fbdma); sh7760fb_free_mem()
369 info->screen_base = NULL; sh7760fb_free_mem()
370 info->screen_size = 0; sh7760fb_free_mem()
376 static int sh7760fb_alloc_mem(struct fb_info *info) sh7760fb_alloc_mem() argument
378 struct sh7760fb_par *par = info->par; sh7760fb_alloc_mem()
383 if (info->screen_base) sh7760fb_alloc_mem()
386 /* get color info from register value */ sh7760fb_alloc_mem()
387 ret = sh7760fb_get_color_info(info->dev, par->pd->lddfr, &bpp, NULL); sh7760fb_alloc_mem()
396 vram = info->var.xres * info->var.yres; sh7760fb_alloc_mem()
397 if (info->var.grayscale) { sh7760fb_alloc_mem()
407 dev_dbg(info->dev, "too much VRAM required. Check settings\n"); sh7760fb_alloc_mem()
414 fbmem = dma_alloc_coherent(info->dev, vram, &par->fbdma, GFP_KERNEL); sh7760fb_alloc_mem()
420 sh7760fb_free_mem(info); sh7760fb_alloc_mem()
421 dev_err(info->dev, "kernel gave me memory at 0x%08lx, which is" sh7760fb_alloc_mem()
426 info->screen_base = fbmem; sh7760fb_alloc_mem()
427 info->screen_size = vram; sh7760fb_alloc_mem()
428 info->fix.smem_start = (unsigned long)info->screen_base; sh7760fb_alloc_mem()
429 info->fix.smem_len = info->screen_size; sh7760fb_alloc_mem()
436 struct fb_info *info; sh7760fb_probe() local
447 info = framebuffer_alloc(sizeof(struct sh7760fb_par), &pdev->dev); sh7760fb_probe()
448 if (!info) sh7760fb_probe()
451 par = info->par; sh7760fb_probe()
456 dev_dbg(info->dev, "no display setup data!\n"); sh7760fb_probe()
488 fb_videomode_to_var(&info->var, par->pd->def_mode); sh7760fb_probe()
490 ret = sh7760fb_alloc_mem(info); sh7760fb_probe()
492 dev_dbg(info->dev, "framebuffer memory allocation failed!\n"); sh7760fb_probe()
496 info->pseudo_palette = par->pseudo_palette; sh7760fb_probe()
499 info->var.red.offset = 11; sh7760fb_probe()
500 info->var.red.length = 5; sh7760fb_probe()
501 info->var.red.msb_right = 0; sh7760fb_probe()
503 info->var.green.offset = 5; sh7760fb_probe()
504 info->var.green.length = 6; sh7760fb_probe()
505 info->var.green.msb_right = 0; sh7760fb_probe()
507 info->var.blue.offset = 0; sh7760fb_probe()
508 info->var.blue.length = 5; sh7760fb_probe()
509 info->var.blue.msb_right = 0; sh7760fb_probe()
511 info->var.transp.offset = 0; sh7760fb_probe()
512 info->var.transp.length = 0; sh7760fb_probe()
513 info->var.transp.msb_right = 0; sh7760fb_probe()
515 strcpy(info->fix.id, "sh7760-lcdc"); sh7760fb_probe()
521 info->fbops = &sh7760fb_ops; sh7760fb_probe()
523 ret = fb_alloc_cmap(&info->cmap, 256, 0); sh7760fb_probe()
525 dev_dbg(info->dev, "Unable to allocate cmap memory\n"); sh7760fb_probe()
529 ret = register_framebuffer(info); sh7760fb_probe()
531 dev_dbg(info->dev, "cannot register fb!\n"); sh7760fb_probe()
534 platform_set_drvdata(pdev, info); sh7760fb_probe()
539 (unsigned long)(par->fbdma + info->screen_size - 1), sh7760fb_probe()
540 info->screen_size >> 10); sh7760fb_probe()
545 sh7760fb_blank(FB_BLANK_POWERDOWN, info); sh7760fb_probe()
546 fb_dealloc_cmap(&info->cmap); sh7760fb_probe()
548 sh7760fb_free_mem(info); sh7760fb_probe()
556 framebuffer_release(info); sh7760fb_probe()
562 struct fb_info *info = platform_get_drvdata(dev); sh7760fb_remove() local
563 struct sh7760fb_par *par = info->par; sh7760fb_remove()
565 sh7760fb_blank(FB_BLANK_POWERDOWN, info); sh7760fb_remove()
566 unregister_framebuffer(info); sh7760fb_remove()
567 fb_dealloc_cmap(&info->cmap); sh7760fb_remove()
568 sh7760fb_free_mem(info); sh7760fb_remove()
573 framebuffer_release(info); sh7760fb_remove()
100 sh7760_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) sh7760_setcolreg() argument
168 sh7760fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) sh7760fb_check_var() argument
H A Dq40fb.c56 struct fb_info *info) q40fb_setcolreg()
71 ((u32 *)info->pseudo_palette)[regno] = ((red & 31) <<6) | q40fb_setcolreg()
88 struct fb_info *info; q40fb_probe() local
96 info = framebuffer_alloc(sizeof(u32) * 16, &dev->dev); q40fb_probe()
97 if (!info) q40fb_probe()
100 info->var = q40fb_var; q40fb_probe()
101 info->fix = q40fb_fix; q40fb_probe()
102 info->fbops = &q40fb_ops; q40fb_probe()
103 info->flags = FBINFO_DEFAULT; /* not as module for now */ q40fb_probe()
104 info->pseudo_palette = info->par; q40fb_probe()
105 info->par = NULL; q40fb_probe()
106 info->screen_base = (char *) q40fb_fix.smem_start; q40fb_probe()
108 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { q40fb_probe()
109 framebuffer_release(info); q40fb_probe()
115 if (register_framebuffer(info) < 0) { q40fb_probe()
117 fb_dealloc_cmap(&info->cmap); q40fb_probe()
118 framebuffer_release(info); q40fb_probe()
122 fb_info(info, "Q40 frame buffer alive and kicking !\n"); q40fb_probe()
54 q40fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) q40fb_setcolreg() argument
H A Dbw2.c119 * @info: frame buffer structure that represents a single frame buffer
122 bw2_blank(int blank, struct fb_info *info) bw2_blank() argument
124 struct bw2_par *par = (struct bw2_par *) info->par; bw2_blank()
162 static int bw2_mmap(struct fb_info *info, struct vm_area_struct *vma) bw2_mmap() argument
164 struct bw2_par *par = (struct bw2_par *)info->par; bw2_mmap()
167 info->fix.smem_start, info->fix.smem_len, bw2_mmap()
172 static int bw2_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) bw2_ioctl() argument
174 return sbusfb_ioctl_helper(cmd, arg, info, bw2_ioctl()
175 FBTYPE_SUN2BW, 1, info->fix.smem_len); bw2_ioctl()
182 static void bw2_init_fix(struct fb_info *info, int linebytes) bw2_init_fix() argument
184 strlcpy(info->fix.id, "bwtwo", sizeof(info->fix.id)); bw2_init_fix()
186 info->fix.type = FB_TYPE_PACKED_PIXELS; bw2_init_fix()
187 info->fix.visual = FB_VISUAL_MONO01; bw2_init_fix()
189 info->fix.line_length = linebytes; bw2_init_fix()
191 info->fix.accel = FB_ACCEL_SUN_BWTWO; bw2_init_fix()
229 static int bw2_do_default_mode(struct bw2_par *par, struct fb_info *info, bw2_do_default_mode() argument
241 info->var.xres = info->var.xres_virtual = 1600; bw2_do_default_mode()
242 info->var.yres = info->var.yres_virtual = 1280; bw2_do_default_mode()
278 struct fb_info *info; bw2_probe() local
282 info = framebuffer_alloc(sizeof(struct bw2_par), &op->dev); bw2_probe()
285 if (!info) bw2_probe()
287 par = info->par; bw2_probe()
291 info->fix.smem_start = op->resource[0].start; bw2_probe()
294 sbusfb_fill_var(&info->var, dp, 1); bw2_probe()
296 info->var.xres); bw2_probe()
298 info->var.red.length = info->var.green.length = bw2_probe()
299 info->var.blue.length = info->var.bits_per_pixel; bw2_probe()
300 info->var.red.offset = info->var.green.offset = bw2_probe()
301 info->var.blue.offset = 0; bw2_probe()
309 err = bw2_do_default_mode(par, info, &linebytes); bw2_probe()
314 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); bw2_probe()
316 info->flags = FBINFO_DEFAULT; bw2_probe()
317 info->fbops = &bw2_ops; bw2_probe()
319 info->screen_base = of_ioremap(&op->resource[0], 0, bw2_probe()
320 info->fix.smem_len, "bw2 ram"); bw2_probe()
321 if (!info->screen_base) { bw2_probe()
326 bw2_blank(FB_BLANK_UNBLANK, info); bw2_probe()
328 bw2_init_fix(info, linebytes); bw2_probe()
330 err = register_framebuffer(info); bw2_probe()
334 dev_set_drvdata(&op->dev, info); bw2_probe()
337 dp->full_name, par->which_io, info->fix.smem_start); bw2_probe()
342 of_iounmap(&op->resource[0], info->screen_base, info->fix.smem_len); bw2_probe()
348 framebuffer_release(info); bw2_probe()
356 struct fb_info *info = dev_get_drvdata(&op->dev); bw2_remove() local
357 struct bw2_par *par = info->par; bw2_remove()
359 unregister_framebuffer(info); bw2_remove()
362 of_iounmap(&op->resource[0], info->screen_base, info->fix.smem_len); bw2_remove()
364 framebuffer_release(info); bw2_remove()
H A Dsunxvr2500.c16 struct fb_info *info; member in struct:s3d_info
49 unsigned transp, struct fb_info *info) s3d_setcolreg()
59 ((u32 *)info->pseudo_palette)[regno] = value; s3d_setcolreg()
75 struct fb_info *info = sp->info; s3d_set_fbinfo() local
76 struct fb_var_screeninfo *var = &info->var; s3d_set_fbinfo()
78 info->flags = FBINFO_DEFAULT; s3d_set_fbinfo()
79 info->fbops = &s3d_ops; s3d_set_fbinfo()
80 info->screen_base = sp->fb_base; s3d_set_fbinfo()
81 info->screen_size = sp->fb_size; s3d_set_fbinfo()
83 info->pseudo_palette = sp->pseudo_palette; s3d_set_fbinfo()
86 strlcpy(info->fix.id, "s3d", sizeof(info->fix.id)); s3d_set_fbinfo()
87 info->fix.smem_start = sp->fb_base_phys; s3d_set_fbinfo()
88 info->fix.smem_len = sp->fb_size; s3d_set_fbinfo()
89 info->fix.type = FB_TYPE_PACKED_PIXELS; s3d_set_fbinfo()
91 info->fix.visual = FB_VISUAL_TRUECOLOR; s3d_set_fbinfo()
93 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; s3d_set_fbinfo()
110 if (fb_alloc_cmap(&info->cmap, 256, 0)) { s3d_set_fbinfo()
121 struct fb_info *info; s3d_pci_register() local
132 info = framebuffer_alloc(sizeof(struct s3d_info), &pdev->dev); s3d_pci_register()
133 if (!info) { s3d_pci_register()
139 sp = info->par; s3d_pci_register()
140 sp->info = info; s3d_pci_register()
169 info->fix.line_length = sp->width; s3d_pci_register()
172 info->fix.line_length = sp->width * 2; s3d_pci_register()
175 info->fix.line_length = sp->width * 3; s3d_pci_register()
178 info->fix.line_length = sp->width * 4; s3d_pci_register()
181 sp->fb_size = info->fix.line_length * sp->height; s3d_pci_register()
193 pci_set_drvdata(pdev, info); s3d_pci_register()
197 err = register_framebuffer(info); s3d_pci_register()
213 framebuffer_release(info); s3d_pci_register()
224 struct fb_info *info = pci_get_drvdata(pdev); s3d_pci_unregister() local
225 struct s3d_info *sp = info->par; s3d_pci_unregister()
227 unregister_framebuffer(info); s3d_pci_unregister()
233 framebuffer_release(info); s3d_pci_unregister()
47 s3d_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) s3d_setcolreg() argument
H A Dp9100.c146 * @info: frame buffer info structure
150 unsigned transp, struct fb_info *info) p9100_setcolreg()
152 struct p9100_par *par = (struct p9100_par *) info->par; p9100_setcolreg()
178 * @info: frame buffer structure that represents a single frame buffer
181 p9100_blank(int blank, struct fb_info *info) p9100_blank() argument
183 struct p9100_par *par = (struct p9100_par *) info->par; p9100_blank()
219 static int p9100_mmap(struct fb_info *info, struct vm_area_struct *vma) p9100_mmap() argument
221 struct p9100_par *par = (struct p9100_par *)info->par; p9100_mmap()
224 info->fix.smem_start, info->fix.smem_len, p9100_mmap()
228 static int p9100_ioctl(struct fb_info *info, unsigned int cmd, p9100_ioctl() argument
232 return sbusfb_ioctl_helper(cmd, arg, info, p9100_ioctl()
233 FBTYPE_SUN3COLOR, 8, info->fix.smem_len); p9100_ioctl()
240 static void p9100_init_fix(struct fb_info *info, int linebytes, struct device_node *dp) p9100_init_fix() argument
242 strlcpy(info->fix.id, dp->name, sizeof(info->fix.id)); p9100_init_fix()
244 info->fix.type = FB_TYPE_PACKED_PIXELS; p9100_init_fix()
245 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; p9100_init_fix()
247 info->fix.line_length = linebytes; p9100_init_fix()
249 info->fix.accel = FB_ACCEL_SUN_CGTHREE; p9100_init_fix()
255 struct fb_info *info; p9100_probe() local
259 info = framebuffer_alloc(sizeof(struct p9100_par), &op->dev); p9100_probe()
262 if (!info) p9100_probe()
264 par = info->par; p9100_probe()
269 info->fix.smem_start = op->resource[2].start; p9100_probe()
272 sbusfb_fill_var(&info->var, dp, 8); p9100_probe()
273 info->var.red.length = 8; p9100_probe()
274 info->var.green.length = 8; p9100_probe()
275 info->var.blue.length = 8; p9100_probe()
277 linebytes = of_getintprop_default(dp, "linebytes", info->var.xres); p9100_probe()
278 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); p9100_probe()
285 info->flags = FBINFO_DEFAULT; p9100_probe()
286 info->fbops = &p9100_ops; p9100_probe()
287 info->screen_base = of_ioremap(&op->resource[2], 0, p9100_probe()
288 info->fix.smem_len, "p9100 ram"); p9100_probe()
289 if (!info->screen_base) p9100_probe()
292 p9100_blank(FB_BLANK_UNBLANK, info); p9100_probe()
294 if (fb_alloc_cmap(&info->cmap, 256, 0)) p9100_probe()
297 p9100_init_fix(info, linebytes, dp); p9100_probe()
299 err = register_framebuffer(info); p9100_probe()
303 fb_set_cmap(&info->cmap, info); p9100_probe()
305 dev_set_drvdata(&op->dev, info); p9100_probe()
309 par->which_io, info->fix.smem_start); p9100_probe()
314 fb_dealloc_cmap(&info->cmap); p9100_probe()
317 of_iounmap(&op->resource[2], info->screen_base, info->fix.smem_len); p9100_probe()
323 framebuffer_release(info); p9100_probe()
331 struct fb_info *info = dev_get_drvdata(&op->dev); p9100_remove() local
332 struct p9100_par *par = info->par; p9100_remove()
334 unregister_framebuffer(info); p9100_remove()
335 fb_dealloc_cmap(&info->cmap); p9100_remove()
338 of_iounmap(&op->resource[2], info->screen_base, info->fix.smem_len); p9100_remove()
340 framebuffer_release(info); p9100_remove()
148 p9100_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) p9100_setcolreg() argument
H A Dtcx.c125 static void __tcx_set_control_plane(struct fb_info *info) __tcx_set_control_plane() argument
127 struct tcx_par *par = info->par; __tcx_set_control_plane()
136 for (pend = p + info->fix.smem_len; p < pend; p++) { __tcx_set_control_plane()
144 static void tcx_reset(struct fb_info *info) tcx_reset() argument
146 struct tcx_par *par = (struct tcx_par *) info->par; tcx_reset()
150 __tcx_set_control_plane(info); tcx_reset()
154 static int tcx_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) tcx_pan_display() argument
156 tcx_reset(info); tcx_pan_display()
167 * @info: frame buffer info structure
171 unsigned transp, struct fb_info *info) tcx_setcolreg()
173 struct tcx_par *par = (struct tcx_par *) info->par; tcx_setcolreg()
199 * @info: frame buffer structure that represents a single frame buffer
202 tcx_blank(int blank, struct fb_info *info) tcx_blank() argument
204 struct tcx_par *par = (struct tcx_par *) info->par; tcx_blank()
300 static int tcx_mmap(struct fb_info *info, struct vm_area_struct *vma) tcx_mmap() argument
302 struct tcx_par *par = (struct tcx_par *)info->par; tcx_mmap()
305 info->fix.smem_start, info->fix.smem_len, tcx_mmap()
309 static int tcx_ioctl(struct fb_info *info, unsigned int cmd, tcx_ioctl() argument
312 struct tcx_par *par = (struct tcx_par *) info->par; tcx_ioctl()
314 return sbusfb_ioctl_helper(cmd, arg, info, tcx_ioctl()
317 info->fix.smem_len); tcx_ioctl()
325 tcx_init_fix(struct fb_info *info, int linebytes) tcx_init_fix() argument
327 struct tcx_par *par = (struct tcx_par *)info->par; tcx_init_fix()
335 strlcpy(info->fix.id, tcx_name, sizeof(info->fix.id)); tcx_init_fix()
337 info->fix.type = FB_TYPE_PACKED_PIXELS; tcx_init_fix()
338 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; tcx_init_fix()
340 info->fix.line_length = linebytes; tcx_init_fix()
342 info->fix.accel = FB_ACCEL_SUN_TCX; tcx_init_fix()
345 static void tcx_unmap_regs(struct platform_device *op, struct fb_info *info, tcx_unmap_regs() argument
359 par->cplane, info->fix.smem_len * sizeof(u32)); tcx_unmap_regs()
360 if (info->screen_base) tcx_unmap_regs()
362 info->screen_base, info->fix.smem_len); tcx_unmap_regs()
368 struct fb_info *info; tcx_probe() local
372 info = framebuffer_alloc(sizeof(struct tcx_par), &op->dev); tcx_probe()
375 if (!info) tcx_probe()
377 par = info->par; tcx_probe()
384 sbusfb_fill_var(&info->var, dp, 8); tcx_probe()
385 info->var.red.length = 8; tcx_probe()
386 info->var.green.length = 8; tcx_probe()
387 info->var.blue.length = 8; tcx_probe()
390 info->var.xres); tcx_probe()
391 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); tcx_probe()
399 info->screen_base = of_ioremap(&op->resource[0], 0, tcx_probe()
400 info->fix.smem_len, "tcx ram"); tcx_probe()
402 !par->bt || !info->screen_base) tcx_probe()
408 info->fix.smem_len * sizeof(u32), tcx_probe()
419 info->fix.smem_start = op->resource[0].start; tcx_probe()
441 info->flags = FBINFO_DEFAULT; tcx_probe()
442 info->fbops = &tcx_ops; tcx_probe()
454 tcx_reset(info); tcx_probe()
456 tcx_blank(FB_BLANK_UNBLANK, info); tcx_probe()
458 if (fb_alloc_cmap(&info->cmap, 256, 0)) tcx_probe()
461 fb_set_cmap(&info->cmap, info); tcx_probe()
462 tcx_init_fix(info, linebytes); tcx_probe()
464 err = register_framebuffer(info); tcx_probe()
468 dev_set_drvdata(&op->dev, info); tcx_probe()
473 info->fix.smem_start, tcx_probe()
479 fb_dealloc_cmap(&info->cmap); tcx_probe()
482 tcx_unmap_regs(op, info, par); tcx_probe()
483 framebuffer_release(info); tcx_probe()
491 struct fb_info *info = dev_get_drvdata(&op->dev); tcx_remove() local
492 struct tcx_par *par = info->par; tcx_remove()
494 unregister_framebuffer(info); tcx_remove()
495 fb_dealloc_cmap(&info->cmap); tcx_remove()
497 tcx_unmap_regs(op, info, par); tcx_remove()
499 framebuffer_release(info); tcx_remove()
169 tcx_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) tcx_setcolreg() argument
H A Darkfb.c132 static void arkfb_settile(struct fb_info *info, struct fb_tilemap *map) arkfb_settile() argument
135 u8 __iomem *fb = (u8 __iomem *)info->screen_base; arkfb_settile()
140 fb_err(info, "unsupported font parameters: width %d, height %d, depth %d, length %d\n", arkfb_settile()
160 static void arkfb_tilecursor(struct fb_info *info, struct fb_tilecursor *cursor) arkfb_tilecursor() argument
162 struct arkfb_info *par = info->par; arkfb_tilecursor()
164 svga_tilecursor(par->state.vgabase, info, cursor); arkfb_tilecursor()
187 static void arkfb_iplan_imageblit(struct fb_info *info, const struct fb_image *image) arkfb_iplan_imageblit() argument
198 dst1 = info->screen_base + (image->dy * info->fix.line_length) arkfb_iplan_imageblit()
210 dst1 += info->fix.line_length; arkfb_iplan_imageblit()
216 static void arkfb_iplan_fillrect(struct fb_info *info, const struct fb_fillrect *rect) arkfb_iplan_fillrect() argument
223 dst1 = info->screen_base + (rect->dy * info->fix.line_length) arkfb_iplan_fillrect()
231 dst1 += info->fix.line_length; arkfb_iplan_fillrect()
245 static void arkfb_cfb4_imageblit(struct fb_info *info, const struct fb_image *image) arkfb_cfb4_imageblit() argument
256 dst1 = info->screen_base + (image->dy * info->fix.line_length) arkfb_cfb4_imageblit()
268 dst1 += info->fix.line_length; arkfb_cfb4_imageblit()
273 static void arkfb_imageblit(struct fb_info *info, const struct fb_image *image) arkfb_imageblit() argument
275 if ((info->var.bits_per_pixel == 4) && (image->depth == 1) arkfb_imageblit()
277 if (info->fix.type == FB_TYPE_INTERLEAVED_PLANES) arkfb_imageblit()
278 arkfb_iplan_imageblit(info, image); arkfb_imageblit()
280 arkfb_cfb4_imageblit(info, image); arkfb_imageblit()
282 cfb_imageblit(info, image); arkfb_imageblit()
285 static void arkfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) arkfb_fillrect() argument
287 if ((info->var.bits_per_pixel == 4) arkfb_fillrect()
289 && (info->fix.type == FB_TYPE_INTERLEAVED_PLANES)) arkfb_fillrect()
290 arkfb_iplan_fillrect(info, rect); arkfb_fillrect()
292 cfb_fillrect(info, rect); arkfb_fillrect()
315 int (*dac_get_mode)(struct dac_info *info);
316 int (*dac_set_mode)(struct dac_info *info, int mode);
317 int (*dac_get_freq)(struct dac_info *info, int channel);
318 int (*dac_set_freq)(struct dac_info *info, int channel, u32 freq);
319 void (*dac_release)(struct dac_info *info);
334 static inline u8 dac_read_reg(struct dac_info *info, u8 reg) dac_read_reg() argument
337 info->dac_read_regs(info->data, code, 1); dac_read_reg()
341 static inline void dac_read_regs(struct dac_info *info, u8 *code, int count) dac_read_regs() argument
343 info->dac_read_regs(info->data, code, count); dac_read_regs()
346 static inline void dac_write_reg(struct dac_info *info, u8 reg, u8 val) dac_write_reg() argument
349 info->dac_write_regs(info->data, code, 1); dac_write_reg()
352 static inline void dac_write_regs(struct dac_info *info, u8 *code, int count) dac_write_regs() argument
354 info->dac_write_regs(info->data, code, count); dac_write_regs()
357 static inline int dac_set_mode(struct dac_info *info, int mode) dac_set_mode() argument
359 return info->dacops->dac_set_mode(info, mode); dac_set_mode()
362 static inline int dac_set_freq(struct dac_info *info, int channel, u32 freq) dac_set_freq() argument
364 return info->dacops->dac_set_freq(info, channel, freq); dac_set_freq()
367 static inline void dac_release(struct dac_info *info) dac_release() argument
369 info->dacops->dac_release(info); dac_release()
384 #define DAC_PAR(info) ((struct ics5342_info *) info)
393 static int ics5342_set_mode(struct dac_info *info, int mode) ics5342_set_mode() argument
405 dac_write_reg(info, 6, code & 0xF0); ics5342_set_mode()
406 DAC_PAR(info)->mode = mode; ics5342_set_mode()
421 static int ics5342_set_freq(struct dac_info *info, int channel, u32 freq) ics5342_set_freq() argument
426 int rv = svga_compute_pll((DAC_PAR(info)->mode == DAC_PSEUDO8_16) ics5342_set_freq()
434 dac_write_regs(info, code, 3); ics5342_set_freq()
439 static void ics5342_release(struct dac_info *info) ics5342_release() argument
441 ics5342_set_mode(info, DAC_PSEUDO8_8); ics5342_release()
442 kfree(info); ics5342_release()
454 struct dac_info *info = kzalloc(sizeof(struct ics5342_info), GFP_KERNEL); ics5342_init() local
456 if (! info) ics5342_init()
459 info->dacops = &ics5342_ops; ics5342_init()
460 info->dac_read_regs = drr; ics5342_init()
461 info->dac_write_regs = dwr; ics5342_init()
462 info->data = data; ics5342_init()
463 DAC_PAR(info)->mode = DAC_PSEUDO8_8; /* estimation */ ics5342_init()
464 return info; ics5342_init()
475 struct fb_info *info = data; ark_dac_read_regs() local
479 par = info->par; ark_dac_read_regs()
494 struct fb_info *info = data; ark_dac_write_regs() local
498 par = info->par; ark_dac_write_regs()
512 static void ark_set_pixclock(struct fb_info *info, u32 pixclock) ark_set_pixclock() argument
514 struct arkfb_info *par = info->par; ark_set_pixclock()
519 fb_err(info, "cannot set requested pixclock, keeping old value\n"); ark_set_pixclock()
531 static int arkfb_open(struct fb_info *info, int user) arkfb_open() argument
533 struct arkfb_info *par = info->par; arkfb_open()
555 static int arkfb_release(struct fb_info *info, int user) arkfb_release() argument
557 struct arkfb_info *par = info->par; arkfb_release()
578 static int arkfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) arkfb_check_var() argument
586 fb_err(info, "unsupported mode requested\n"); arkfb_check_var()
604 if (mem > info->screen_size) arkfb_check_var()
606 fb_err(info, "not enough framebuffer memory (%d kB requested, %d kB available)\n", arkfb_check_var()
607 mem >> 10, (unsigned int) (info->screen_size >> 10)); arkfb_check_var()
611 rv = svga_check_timings (&ark_timing_regs, var, info->node); arkfb_check_var()
614 fb_err(info, "invalid timings requested\n"); arkfb_check_var()
627 static int arkfb_set_par(struct fb_info *info) arkfb_set_par() argument
629 struct arkfb_info *par = info->par; arkfb_set_par()
631 u32 bpp = info->var.bits_per_pixel; arkfb_set_par()
635 info->fix.ypanstep = 1; arkfb_set_par()
636 info->fix.line_length = (info->var.xres_virtual * bpp) / 8; arkfb_set_par()
638 info->flags &= ~FBINFO_MISC_TILEBLITTING; arkfb_set_par()
639 info->tileops = NULL; arkfb_set_par()
642 info->pixmap.blit_x = (bpp == 4) ? (1 << (8 - 1)) : (~(u32)0); arkfb_set_par()
643 info->pixmap.blit_y = ~(u32)0; arkfb_set_par()
645 offset_value = (info->var.xres_virtual * bpp) / 64; arkfb_set_par()
646 screen_size = info->var.yres_virtual * info->fix.line_length; arkfb_set_par()
648 info->fix.ypanstep = 16; arkfb_set_par()
649 info->fix.line_length = 0; arkfb_set_par()
651 info->flags |= FBINFO_MISC_TILEBLITTING; arkfb_set_par()
652 info->tileops = &arkfb_tile_ops; arkfb_set_par()
655 info->pixmap.blit_x = 1 << (8 - 1); arkfb_set_par()
656 info->pixmap.blit_y = 1 << (16 - 1); arkfb_set_par()
658 offset_value = info->var.xres_virtual / 16; arkfb_set_par()
659 screen_size = (info->var.xres_virtual * info->var.yres_virtual) / 64; arkfb_set_par()
662 info->var.xoffset = 0; arkfb_set_par()
663 info->var.yoffset = 0; arkfb_set_par()
664 info->var.activate = FB_ACTIVATE_NOW; arkfb_set_par()
685 vga_wseq(par->state.vgabase, 0x13, info->fix.smem_start >> 16); arkfb_set_par()
686 vga_wseq(par->state.vgabase, 0x14, info->fix.smem_start >> 24); arkfb_set_par()
696 fb_dbg(info, "offset register : %d\n", offset_value); arkfb_set_par()
702 if (info->var.vmode & FB_VMODE_DOUBLE) arkfb_set_par()
707 if (info->var.vmode & FB_VMODE_INTERLACED) arkfb_set_par()
714 mode = svga_match_format(arkfb_formats, &(info->var), &(info->fix)); arkfb_set_par()
719 fb_dbg(info, "text mode\n"); arkfb_set_par()
728 fb_dbg(info, "4 bit pseudocolor\n"); arkfb_set_par()
736 fb_dbg(info, "4 bit pseudocolor, planar\n"); arkfb_set_par()
743 fb_dbg(info, "8 bit pseudocolor\n"); arkfb_set_par()
747 if (info->var.pixclock > 20000) { arkfb_set_par()
748 fb_dbg(info, "not using multiplex\n"); arkfb_set_par()
752 fb_dbg(info, "using multiplex\n"); arkfb_set_par()
759 fb_dbg(info, "5/5/5 truecolor\n"); arkfb_set_par()
766 fb_dbg(info, "5/6/5 truecolor\n"); arkfb_set_par()
773 fb_dbg(info, "8/8/8 truecolor\n"); arkfb_set_par()
782 fb_dbg(info, "8/8/8/8 truecolor\n"); arkfb_set_par()
790 fb_err(info, "unsupported mode - bug\n"); arkfb_set_par()
794 ark_set_pixclock(info, (hdiv * info->var.pixclock) / hmul); arkfb_set_par()
795 svga_set_timings(par->state.vgabase, &ark_timing_regs, &(info->var), hmul, hdiv, arkfb_set_par()
796 (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, arkfb_set_par()
797 (info->var.vmode & FB_VMODE_INTERLACED) ? 2 : 1, arkfb_set_par()
798 hmul, info->node); arkfb_set_par()
801 value = info->var.xres + info->var.left_margin + info->var.right_margin + info->var.hsync_len; arkfb_set_par()
805 memset_io(info->screen_base, 0x00, screen_size); arkfb_set_par()
876 static int arkfb_blank(int blank_mode, struct fb_info *info) arkfb_blank() argument
878 struct arkfb_info *par = info->par; arkfb_blank()
882 fb_dbg(info, "unblank\n"); arkfb_blank()
887 fb_dbg(info, "blank\n"); arkfb_blank()
894 fb_dbg(info, "sync down\n"); arkfb_blank()
905 static int arkfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) arkfb_pan_display() argument
907 struct arkfb_info *par = info->par; arkfb_pan_display()
911 if (info->var.bits_per_pixel == 0) { arkfb_pan_display()
912 offset = (var->yoffset / 16) * (info->var.xres_virtual / 2) arkfb_pan_display()
916 offset = (var->yoffset * info->fix.line_length) + arkfb_pan_display()
917 (var->xoffset * info->var.bits_per_pixel / 8); arkfb_pan_display()
918 offset = offset >> ((info->var.bits_per_pixel == 4) ? 2 : 3); arkfb_pan_display()
957 struct fb_info *info; ark_pci_probe() local
969 info = framebuffer_alloc(sizeof(struct arkfb_info), &(dev->dev)); ark_pci_probe()
970 if (! info) { ark_pci_probe()
975 par = info->par; ark_pci_probe()
978 info->flags = FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN; ark_pci_probe()
979 info->fbops = &arkfb_ops; ark_pci_probe()
984 dev_err(info->device, "cannot enable PCI device\n"); ark_pci_probe()
990 dev_err(info->device, "cannot reserve framebuffer region\n"); ark_pci_probe()
994 par->dac = ics5342_init(ark_dac_read_regs, ark_dac_write_regs, info); ark_pci_probe()
997 dev_err(info->device, "RAMDAC initialization failed\n"); ark_pci_probe()
1001 info->fix.smem_start = pci_resource_start(dev, 0); ark_pci_probe()
1002 info->fix.smem_len = pci_resource_len(dev, 0); ark_pci_probe()
1005 info->screen_base = pci_iomap(dev, 0, 0); ark_pci_probe()
1006 if (! info->screen_base) { ark_pci_probe()
1008 dev_err(info->device, "iomap for framebuffer failed\n"); ark_pci_probe()
1023 info->screen_size = (1 << (regval >> 6)) << 20; ark_pci_probe()
1024 info->fix.smem_len = info->screen_size; ark_pci_probe()
1026 strcpy(info->fix.id, "ARK 2000PV"); ark_pci_probe()
1027 info->fix.mmio_start = 0; ark_pci_probe()
1028 info->fix.mmio_len = 0; ark_pci_probe()
1029 info->fix.type = FB_TYPE_PACKED_PIXELS; ark_pci_probe()
1030 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; ark_pci_probe()
1031 info->fix.ypanstep = 0; ark_pci_probe()
1032 info->fix.accel = FB_ACCEL_NONE; ark_pci_probe()
1033 info->pseudo_palette = (void*) (par->pseudo_palette); ark_pci_probe()
1036 rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); ark_pci_probe()
1039 dev_err(info->device, "mode %s not found\n", mode_option); ark_pci_probe()
1043 rc = fb_alloc_cmap(&info->cmap, 256, 0); ark_pci_probe()
1045 dev_err(info->device, "cannot allocate colormap\n"); ark_pci_probe()
1049 rc = register_framebuffer(info); ark_pci_probe()
1051 dev_err(info->device, "cannot register framebuffer\n"); ark_pci_probe()
1055 fb_info(info, "%s on %s, %d MB RAM\n", ark_pci_probe()
1056 info->fix.id, pci_name(dev), info->fix.smem_len >> 20); ark_pci_probe()
1059 pci_set_drvdata(dev, info); ark_pci_probe()
1064 par->mtrr_reg = mtrr_add(info->fix.smem_start, info->fix.smem_len, MTRR_TYPE_WRCOMB, 1); ark_pci_probe()
1072 fb_dealloc_cmap(&info->cmap); ark_pci_probe()
1075 pci_iounmap(dev, info->screen_base); ark_pci_probe()
1083 framebuffer_release(info); ark_pci_probe()
1091 struct fb_info *info = pci_get_drvdata(dev); ark_pci_remove() local
1093 if (info) { ark_pci_remove()
1094 struct arkfb_info *par = info->par; ark_pci_remove()
1104 unregister_framebuffer(info); ark_pci_remove()
1105 fb_dealloc_cmap(&info->cmap); ark_pci_remove()
1107 pci_iounmap(dev, info->screen_base); ark_pci_remove()
1111 framebuffer_release(info); ark_pci_remove()
1121 struct fb_info *info = pci_get_drvdata(dev); ark_pci_suspend() local
1122 struct arkfb_info *par = info->par; ark_pci_suspend()
1124 dev_info(info->device, "suspend\n"); ark_pci_suspend()
1135 fb_set_suspend(info, 1); ark_pci_suspend()
1152 struct fb_info *info = pci_get_drvdata(dev); ark_pci_resume() local
1153 struct arkfb_info *par = info->par; ark_pci_resume()
1155 dev_info(info->device, "resume\n"); ark_pci_resume()
1171 arkfb_set_par(info); ark_pci_resume()
1172 fb_set_suspend(info, 0); ark_pci_resume()
H A Dsunxvr1000.c13 struct fb_info *info; member in struct:gfb_info
45 unsigned transp, struct fb_info *info) gfb_setcolreg()
55 ((u32 *)info->pseudo_palette)[regno] = value; gfb_setcolreg()
71 struct fb_info *info = gp->info; gfb_set_fbinfo() local
72 struct fb_var_screeninfo *var = &info->var; gfb_set_fbinfo()
74 info->flags = FBINFO_DEFAULT; gfb_set_fbinfo()
75 info->fbops = &gfb_ops; gfb_set_fbinfo()
76 info->screen_base = gp->fb_base; gfb_set_fbinfo()
77 info->screen_size = gp->fb_size; gfb_set_fbinfo()
79 info->pseudo_palette = gp->pseudo_palette; gfb_set_fbinfo()
82 strlcpy(info->fix.id, "gfb", sizeof(info->fix.id)); gfb_set_fbinfo()
83 info->fix.smem_start = gp->fb_base_phys; gfb_set_fbinfo()
84 info->fix.smem_len = gp->fb_size; gfb_set_fbinfo()
85 info->fix.type = FB_TYPE_PACKED_PIXELS; gfb_set_fbinfo()
87 info->fix.visual = FB_VISUAL_TRUECOLOR; gfb_set_fbinfo()
89 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; gfb_set_fbinfo()
106 if (fb_alloc_cmap(&info->cmap, 256, 0)) { gfb_set_fbinfo()
117 struct fb_info *info; gfb_probe() local
121 info = framebuffer_alloc(sizeof(struct gfb_info), &op->dev); gfb_probe()
122 if (!info) { gfb_probe()
128 gp = info->par; gfb_probe()
129 gp->info = info; gfb_probe()
139 info->fix.line_length = 16384; gfb_probe()
140 gp->fb_size = info->fix.line_length * gp->height; gfb_probe()
155 err = register_framebuffer(info); gfb_probe()
162 dev_set_drvdata(&op->dev, info); gfb_probe()
170 framebuffer_release(info); gfb_probe()
178 struct fb_info *info = dev_get_drvdata(&op->dev); gfb_remove() local
179 struct gfb_info *gp = info->par; gfb_remove()
181 unregister_framebuffer(info); gfb_remove()
187 framebuffer_release(info); gfb_remove()
43 gfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) gfb_setcolreg() argument
H A Dclps711x-fb.c49 u_int blue, u_int transp, struct fb_info *info) clps711x_fb_setcolreg()
51 struct clps711x_fb_info *cfb = info->par; clps711x_fb_setcolreg()
54 if (regno >= BIT(info->var.bits_per_pixel)) clps711x_fb_setcolreg()
72 struct fb_info *info) clps711x_fb_check_var()
105 static int clps711x_fb_set_par(struct fb_info *info) clps711x_fb_set_par() argument
107 struct clps711x_fb_info *cfb = info->par; clps711x_fb_set_par()
111 size = (info->var.xres * info->var.yres * info->var.bits_per_pixel) / 8; clps711x_fb_set_par()
115 switch (info->var.bits_per_pixel) { clps711x_fb_set_par()
117 info->fix.visual = FB_VISUAL_MONO01; clps711x_fb_set_par()
121 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; clps711x_fb_set_par()
127 info->fix.line_length = info->var.xres * info->var.bits_per_pixel / 8; clps711x_fb_set_par()
128 info->fix.smem_len = size; clps711x_fb_set_par()
130 lcdcon = (info->var.xres * info->var.yres * clps711x_fb_set_par()
131 info->var.bits_per_pixel) / 128 - 1; clps711x_fb_set_par()
132 lcdcon |= ((info->var.xres / 16) - 1) << 13; clps711x_fb_set_par()
135 pps = clk_get_rate(cfb->clk) / (PICOS2KHZ(info->var.pixclock) * 1000); clps711x_fb_set_par()
140 if (info->var.bits_per_pixel == 4) clps711x_fb_set_par()
142 if (info->var.bits_per_pixel >= 2) clps711x_fb_set_par()
154 static int clps711x_fb_blank(int blank, struct fb_info *info) clps711x_fb_blank() argument
218 struct fb_info *info; clps711x_fb_probe() local
226 info = framebuffer_alloc(sizeof(*cfb), dev); clps711x_fb_probe()
227 if (!info) clps711x_fb_probe()
230 cfb = info->par; clps711x_fb_probe()
231 platform_set_drvdata(pdev, info); clps711x_fb_probe()
242 info->fix.mmio_start = res->start; clps711x_fb_probe()
243 info->fix.mmio_len = resource_size(res); clps711x_fb_probe()
246 info->screen_base = devm_ioremap_resource(dev, res); clps711x_fb_probe()
247 if (IS_ERR(info->screen_base)) { clps711x_fb_probe()
248 ret = PTR_ERR(info->screen_base); clps711x_fb_probe()
258 info->apertures = alloc_apertures(1); clps711x_fb_probe()
259 if (!info->apertures) { clps711x_fb_probe()
265 info->fix.smem_start = res->start; clps711x_fb_probe()
266 info->apertures->ranges[0].base = info->fix.smem_start; clps711x_fb_probe()
267 info->apertures->ranges[0].size = cfb->buffsize; clps711x_fb_probe()
297 &info->var.bits_per_pixel); clps711x_fb_probe()
302 if (info->fix.smem_start != (readb(cfb->base + CLPS711X_FBADDR) << 28)) clps711x_fb_probe()
312 writeb(info->fix.smem_start >> 28, cfb->base + CLPS711X_FBADDR); clps711x_fb_probe()
314 memset_io(info->screen_base, 0, cfb->buffsize); clps711x_fb_probe()
323 info->fbops = &clps711x_fb_ops; clps711x_fb_probe()
324 info->flags = FBINFO_DEFAULT; clps711x_fb_probe()
325 info->var.activate = FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW; clps711x_fb_probe()
326 info->var.height = -1; clps711x_fb_probe()
327 info->var.width = -1; clps711x_fb_probe()
328 info->var.vmode = FB_VMODE_NONINTERLACED; clps711x_fb_probe()
329 info->fix.type = FB_TYPE_PACKED_PIXELS; clps711x_fb_probe()
330 info->fix.accel = FB_ACCEL_NONE; clps711x_fb_probe()
331 strlcpy(info->fix.id, CLPS711X_FB_NAME, sizeof(info->fix.id)); clps711x_fb_probe()
332 fb_videomode_to_var(&info->var, &cfb->mode); clps711x_fb_probe()
334 ret = fb_alloc_cmap(&info->cmap, BIT(CLPS711X_FB_BPP_MAX), 0); clps711x_fb_probe()
338 ret = fb_set_var(info, &info->var); clps711x_fb_probe()
342 ret = register_framebuffer(info); clps711x_fb_probe()
352 unregister_framebuffer(info); clps711x_fb_probe()
356 fb_dealloc_cmap(&info->cmap); clps711x_fb_probe()
359 framebuffer_release(info); clps711x_fb_probe()
366 struct fb_info *info = platform_get_drvdata(pdev); clps711x_fb_remove() local
367 struct clps711x_fb_info *cfb = info->par; clps711x_fb_remove()
371 unregister_framebuffer(info); clps711x_fb_remove()
372 fb_dealloc_cmap(&info->cmap); clps711x_fb_remove()
373 framebuffer_release(info); clps711x_fb_remove()
48 clps711x_fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) clps711x_fb_setcolreg() argument
71 clps711x_fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) clps711x_fb_check_var() argument
H A Datafb.h4 void atafb_mfb_copyarea(struct fb_info *info, u_long next_line, int sy, int sx, int dy,
6 void atafb_mfb_fillrect(struct fb_info *info, u_long next_line, u32 color,
8 void atafb_mfb_linefill(struct fb_info *info, u_long next_line,
12 void atafb_iplan2p2_copyarea(struct fb_info *info, u_long next_line, int sy, int sx, int dy,
14 void atafb_iplan2p2_fillrect(struct fb_info *info, u_long next_line, u32 color,
16 void atafb_iplan2p2_linefill(struct fb_info *info, u_long next_line,
20 void atafb_iplan2p4_copyarea(struct fb_info *info, u_long next_line, int sy, int sx, int dy,
22 void atafb_iplan2p4_fillrect(struct fb_info *info, u_long next_line, u32 color,
24 void atafb_iplan2p4_linefill(struct fb_info *info, u_long next_line,
28 void atafb_iplan2p8_copyarea(struct fb_info *info, u_long next_line, int sy, int sx, int dy,
30 void atafb_iplan2p8_fillrect(struct fb_info *info, u_long next_line, u32 color,
32 void atafb_iplan2p8_linefill(struct fb_info *info, u_long next_line,
H A Dclps711xfb.c51 u_int transp, struct fb_info *info) clps7111fb_setcolreg()
55 if (regno >= (1 << info->var.bits_per_pixel)) clps7111fb_setcolreg()
90 clps7111fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) clps7111fb_check_var() argument
111 clps7111fb_set_par(struct fb_info *info) clps7111fb_set_par() argument
115 switch (info->var.bits_per_pixel) { clps7111fb_set_par()
117 info->fix.visual = FB_VISUAL_MONO01; clps7111fb_set_par()
120 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; clps7111fb_set_par()
123 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; clps7111fb_set_par()
127 info->fix.line_length = info->var.xres_virtual * info->var.bits_per_pixel / 8; clps7111fb_set_par()
129 lcdcon = (info->var.xres_virtual * info->var.yres_virtual * info->var.bits_per_pixel) / 128 - 1; clps7111fb_set_par()
130 lcdcon |= ((info->var.xres_virtual / 16) - 1) << 13; clps7111fb_set_par()
142 pixclock = 9 * info->var.pixclock / 244140 - 1; clps7111fb_set_par()
145 if (info->var.bits_per_pixel == 4) clps7111fb_set_par()
147 if (info->var.bits_per_pixel >= 2) clps7111fb_set_par()
160 static int clps7111fb_blank(int blank, struct fb_info *info) clps7111fb_blank() argument
182 static void clps711x_guess_lcd_params(struct fb_info *info) clps711x_guess_lcd_params() argument
188 info->var.xres_virtual = 640; clps711x_guess_lcd_params()
189 info->var.yres_virtual = 240; clps711x_guess_lcd_params()
190 info->var.bits_per_pixel = 4; clps711x_guess_lcd_params()
191 info->var.activate = FB_ACTIVATE_NOW; clps711x_guess_lcd_params()
192 info->var.height = -1; clps711x_guess_lcd_params()
193 info->var.width = -1; clps711x_guess_lcd_params()
194 info->var.pixclock = 93006; /* 10.752MHz pixel clock */ clps711x_guess_lcd_params()
209 info->var.bits_per_pixel = 4; clps711x_guess_lcd_params()
213 info->var.bits_per_pixel = 2; clps711x_guess_lcd_params()
217 info->var.bits_per_pixel = 1; clps711x_guess_lcd_params()
224 info->var.xres_virtual = (((lcdcon >> 13) & 0x3f) + 1) * 16; clps711x_guess_lcd_params()
225 info->var.yres_virtual = (((lcdcon & 0x1fff) + 1) * 128) / clps711x_guess_lcd_params()
226 (info->var.xres_virtual * clps711x_guess_lcd_params()
227 info->var.bits_per_pixel); clps711x_guess_lcd_params()
232 info->var.pixclock = (((lcdcon >> 19) & 0x3f) + 1) * 244140 / 9; clps711x_guess_lcd_params()
240 info->var.xres = info->var.xres_virtual; clps711x_guess_lcd_params()
241 info->var.yres = info->var.yres_virtual; clps711x_guess_lcd_params()
242 info->var.grayscale = info->var.bits_per_pixel > 1; clps711x_guess_lcd_params()
244 size = info->var.xres * info->var.yres * info->var.bits_per_pixel / 8; clps711x_guess_lcd_params()
264 info->screen_base = virt_base; clps711x_guess_lcd_params()
265 info->fix.smem_start = phys_base; clps711x_guess_lcd_params()
266 info->fix.smem_len = PAGE_ALIGN(size); clps711x_guess_lcd_params()
267 info->fix.type = FB_TYPE_PACKED_PIXELS; clps711x_guess_lcd_params()
50 clps7111fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) clps7111fb_setcolreg() argument
H A Dwmt_ge_rops.h3 extern void wmt_ge_fillrect(struct fb_info *info,
5 extern void wmt_ge_copyarea(struct fb_info *info,
7 extern int wmt_ge_sync(struct fb_info *info);
H A Dvt8500lcdfb.c47 static int vt8500lcd_set_par(struct fb_info *info) vt8500lcd_set_par() argument
49 struct vt8500lcd_info *fbi = to_vt8500lcd_info(info); vt8500lcd_set_par()
57 if (info->var.bits_per_pixel <= 8) { vt8500lcd_set_par()
59 info->var.red.offset = 0; vt8500lcd_set_par()
60 info->var.red.length = info->var.bits_per_pixel; vt8500lcd_set_par()
61 info->var.red.msb_right = 0; vt8500lcd_set_par()
63 info->var.green.offset = 0; vt8500lcd_set_par()
64 info->var.green.length = info->var.bits_per_pixel; vt8500lcd_set_par()
65 info->var.green.msb_right = 0; vt8500lcd_set_par()
67 info->var.blue.offset = 0; vt8500lcd_set_par()
68 info->var.blue.length = info->var.bits_per_pixel; vt8500lcd_set_par()
69 info->var.blue.msb_right = 0; vt8500lcd_set_par()
71 info->var.transp.offset = 0; vt8500lcd_set_par()
72 info->var.transp.length = 0; vt8500lcd_set_par()
73 info->var.transp.msb_right = 0; vt8500lcd_set_par()
75 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; vt8500lcd_set_par()
76 info->fix.line_length = info->var.xres_virtual / vt8500lcd_set_par()
77 (8/info->var.bits_per_pixel); vt8500lcd_set_par()
80 info->var.transp.offset = 0; vt8500lcd_set_par()
81 info->var.transp.length = 0; vt8500lcd_set_par()
82 info->var.transp.msb_right = 0; vt8500lcd_set_par()
84 if (info->var.bits_per_pixel == 16) { vt8500lcd_set_par()
86 info->var.red.offset = 11; vt8500lcd_set_par()
87 info->var.red.length = 5; vt8500lcd_set_par()
88 info->var.red.msb_right = 0; vt8500lcd_set_par()
89 info->var.green.offset = 5; vt8500lcd_set_par()
90 info->var.green.length = 6; vt8500lcd_set_par()
91 info->var.green.msb_right = 0; vt8500lcd_set_par()
92 info->var.blue.offset = 0; vt8500lcd_set_par()
93 info->var.blue.length = 5; vt8500lcd_set_par()
94 info->var.blue.msb_right = 0; vt8500lcd_set_par()
97 info->var.red.offset = info->var.bits_per_pixel vt8500lcd_set_par()
99 info->var.red.length = info->var.bits_per_pixel / 3; vt8500lcd_set_par()
100 info->var.red.msb_right = 0; vt8500lcd_set_par()
101 info->var.green.offset = info->var.bits_per_pixel / 3; vt8500lcd_set_par()
102 info->var.green.length = info->var.bits_per_pixel / 3; vt8500lcd_set_par()
103 info->var.green.msb_right = 0; vt8500lcd_set_par()
104 info->var.blue.offset = 0; vt8500lcd_set_par()
105 info->var.blue.length = info->var.bits_per_pixel / 3; vt8500lcd_set_par()
106 info->var.blue.msb_right = 0; vt8500lcd_set_par()
109 info->fix.visual = FB_VISUAL_TRUECOLOR; vt8500lcd_set_par()
110 info->fix.line_length = info->var.bits_per_pixel > 16 ? vt8500lcd_set_par()
111 info->var.xres_virtual << 2 : vt8500lcd_set_par()
112 info->var.xres_virtual << 1; vt8500lcd_set_par()
116 if (bpp_values[i] == info->var.bits_per_pixel) vt8500lcd_set_par()
124 writel((((info->var.hsync_len - 1) & 0x3f) << 26) vt8500lcd_set_par()
125 | ((info->var.left_margin & 0xff) << 18) vt8500lcd_set_par()
126 | (((info->var.xres - 1) & 0x3ff) << 8) vt8500lcd_set_par()
127 | (info->var.right_margin & 0xff), fbi->regbase + 0x4); vt8500lcd_set_par()
128 writel((((info->var.vsync_len - 1) & 0x3f) << 26) vt8500lcd_set_par()
129 | ((info->var.upper_margin & 0xff) << 18) vt8500lcd_set_par()
130 | (((info->var.yres - 1) & 0x3ff) << 8) vt8500lcd_set_par()
131 | (info->var.lower_margin & 0xff), fbi->regbase + 0x8); vt8500lcd_set_par()
132 writel((((info->var.yres - 1) & 0x400) << 2) vt8500lcd_set_par()
133 | ((info->var.xres - 1) & 0x400), fbi->regbase + 0x10); vt8500lcd_set_par()
149 struct fb_info *info) { vt8500lcd_setcolreg()
150 struct vt8500lcd_info *fbi = to_vt8500lcd_info(info); vt8500lcd_setcolreg()
156 if (info->var.grayscale) vt8500lcd_setcolreg()
186 static int vt8500lcd_ioctl(struct fb_info *info, unsigned int cmd, vt8500lcd_ioctl() argument
190 struct vt8500lcd_info *fbi = to_vt8500lcd_info(info); vt8500lcd_ioctl()
209 struct fb_info *info) vt8500lcd_pan_display()
211 unsigned pixlen = info->fix.line_length / info->var.xres_virtual; vt8500lcd_pan_display()
213 + info->fix.line_length * var->yoffset; vt8500lcd_pan_display()
214 struct vt8500lcd_info *fbi = to_vt8500lcd_info(info); vt8500lcd_pan_display()
217 | (((info->var.xres_virtual - info->var.xres) * pixlen / 4) << 20) vt8500lcd_pan_display()
228 static int vt8500lcd_blank(int blank, struct fb_info *info) vt8500lcd_blank() argument
237 if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR || vt8500lcd_blank()
238 info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) vt8500lcd_blank()
240 vt8500lcd_setcolreg(i, 0, 0, 0, 0, info); vt8500lcd_blank()
242 if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR || vt8500lcd_blank()
243 info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) vt8500lcd_blank()
244 fb_set_cmap(&info->cmap, info); vt8500lcd_blank()
147 vt8500lcd_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) vt8500lcd_setcolreg() argument
208 vt8500lcd_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) vt8500lcd_pan_display() argument
H A Dsimplefb.c49 u_int transp, struct fb_info *info) simplefb_setcolreg()
51 u32 *pal = info->pseudo_palette; simplefb_setcolreg()
52 u32 cr = red >> (16 - info->var.red.length); simplefb_setcolreg()
53 u32 cg = green >> (16 - info->var.green.length); simplefb_setcolreg()
54 u32 cb = blue >> (16 - info->var.blue.length); simplefb_setcolreg()
60 value = (cr << info->var.red.offset) | simplefb_setcolreg()
61 (cg << info->var.green.offset) | simplefb_setcolreg()
62 (cb << info->var.blue.offset); simplefb_setcolreg()
63 if (info->var.transp.length > 0) { simplefb_setcolreg()
64 u32 mask = (1 << info->var.transp.length) - 1; simplefb_setcolreg()
65 mask <<= info->var.transp.offset; simplefb_setcolreg()
73 static void simplefb_destroy(struct fb_info *info) simplefb_destroy() argument
75 if (info->screen_base) simplefb_destroy()
76 iounmap(info->screen_base); simplefb_destroy()
275 struct fb_info *info; simplefb_probe() local
297 info = framebuffer_alloc(sizeof(struct simplefb_par), &pdev->dev); simplefb_probe()
298 if (!info) simplefb_probe()
300 platform_set_drvdata(pdev, info); simplefb_probe()
302 par = info->par; simplefb_probe()
304 info->fix = simplefb_fix; simplefb_probe()
305 info->fix.smem_start = mem->start; simplefb_probe()
306 info->fix.smem_len = resource_size(mem); simplefb_probe()
307 info->fix.line_length = params.stride; simplefb_probe()
309 info->var = simplefb_var; simplefb_probe()
310 info->var.xres = params.width; simplefb_probe()
311 info->var.yres = params.height; simplefb_probe()
312 info->var.xres_virtual = params.width; simplefb_probe()
313 info->var.yres_virtual = params.height; simplefb_probe()
314 info->var.bits_per_pixel = params.format->bits_per_pixel; simplefb_probe()
315 info->var.red = params.format->red; simplefb_probe()
316 info->var.green = params.format->green; simplefb_probe()
317 info->var.blue = params.format->blue; simplefb_probe()
318 info->var.transp = params.format->transp; simplefb_probe()
320 info->apertures = alloc_apertures(1); simplefb_probe()
321 if (!info->apertures) { simplefb_probe()
325 info->apertures->ranges[0].base = info->fix.smem_start; simplefb_probe()
326 info->apertures->ranges[0].size = info->fix.smem_len; simplefb_probe()
328 info->fbops = &simplefb_ops; simplefb_probe()
329 info->flags = FBINFO_DEFAULT | FBINFO_MISC_FIRMWARE; simplefb_probe()
330 info->screen_base = ioremap_wc(info->fix.smem_start, simplefb_probe()
331 info->fix.smem_len); simplefb_probe()
332 if (!info->screen_base) { simplefb_probe()
336 info->pseudo_palette = par->palette; simplefb_probe()
343 info->fix.smem_start, info->fix.smem_len, simplefb_probe()
344 info->screen_base); simplefb_probe()
347 info->var.xres, info->var.yres, simplefb_probe()
348 info->var.bits_per_pixel, info->fix.line_length); simplefb_probe()
350 ret = register_framebuffer(info); simplefb_probe()
356 dev_info(&pdev->dev, "fb%d: simplefb registered!\n", info->node); simplefb_probe()
363 iounmap(info->screen_base); simplefb_probe()
365 framebuffer_release(info); simplefb_probe()
371 struct fb_info *info = platform_get_drvdata(pdev); simplefb_remove() local
372 struct simplefb_par *par = info->par; simplefb_remove()
374 unregister_framebuffer(info); simplefb_remove()
376 framebuffer_release(info); simplefb_remove()
48 simplefb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) simplefb_setcolreg() argument
H A Dfb-puv3.c104 static void unifb_sync(struct fb_info *info) unifb_sync() argument
115 dev_warn(info->device, "Warning: UniGFX GE time out ...\n"); unifb_sync()
118 static void unifb_prim_fillrect(struct fb_info *info, unifb_prim_fillrect() argument
123 int m_iBpp = info->var.bits_per_pixel; unifb_prim_fillrect()
124 int screen_width = info->var.xres; unifb_prim_fillrect()
146 int bottom = info->var.yres - 1; unifb_prim_fillrect()
147 int right = info->var.xres - 1; unifb_prim_fillrect()
162 unifb_sync(info); unifb_prim_fillrect()
164 writel(((u32 *)(info->pseudo_palette))[fg_color], UGE_FCOLOR); unifb_prim_fillrect()
178 static void unifb_fillrect(struct fb_info *info, unifb_fillrect() argument
184 if (info->flags & FBINFO_HWACCEL_DISABLED) { unifb_fillrect()
185 sys_fillrect(info, region); unifb_fillrect()
189 vxres = info->var.xres_virtual; unifb_fillrect()
190 vyres = info->var.yres_virtual; unifb_fillrect()
203 unifb_prim_fillrect(info, &modded); unifb_fillrect()
206 static void unifb_prim_copyarea(struct fb_info *info, unifb_prim_copyarea() argument
211 int m_iBpp = info->var.bits_per_pixel; unifb_prim_copyarea()
212 int screen_width = info->var.xres; unifb_prim_copyarea()
236 int bottom = info->var.yres; unifb_prim_copyarea()
237 int right = info->var.xres; unifb_prim_copyarea()
269 unifb_sync(info); unifb_prim_copyarea()
285 static void unifb_copyarea(struct fb_info *info, const struct fb_copyarea *area) unifb_copyarea() argument
296 if (info->flags & FBINFO_HWACCEL_DISABLED) { unifb_copyarea()
297 sys_copyarea(info, area); unifb_copyarea()
301 vxres = info->var.xres_virtual; unifb_copyarea()
302 vyres = info->var.yres_virtual; unifb_copyarea()
318 unifb_prim_copyarea(info, &modded); unifb_copyarea()
321 static void unifb_imageblit(struct fb_info *info, const struct fb_image *image) unifb_imageblit() argument
323 sys_imageblit(info, image); unifb_imageblit()
344 struct fb_info *info) unifb_check_var()
355 var->xoffset = info->var.xoffset; unifb_check_var()
356 var->yoffset = info->var.yoffset; unifb_check_var()
465 * the hardware state info->par and fix which can be affected by the
468 static int unifb_set_par(struct fb_info *info) unifb_set_par() argument
479 if (info->var.xres == unifb_modes[i].xres unifb_set_par()
480 && info->var.yres == unifb_modes[i].yres unifb_set_par()
481 && info->var.upper_margin == unifb_modes[i].upper_margin unifb_set_par()
482 && info->var.lower_margin == unifb_modes[i].lower_margin unifb_set_par()
483 && info->var.left_margin == unifb_modes[i].left_margin unifb_set_par()
484 && info->var.right_margin == unifb_modes[i].right_margin unifb_set_par()
485 && info->var.hsync_len == unifb_modes[i].hsync_len unifb_set_par()
486 && info->var.vsync_len == unifb_modes[i].vsync_len) { unifb_set_par()
493 clk_vga = clk_get(info->device, "VGA_CLK"); unifb_set_par()
499 info->fix = unifb_fix; unifb_set_par()
500 info->var = unifb_default; unifb_set_par()
507 info->fix.line_length = get_line_length(info->var.xres_virtual, unifb_set_par()
508 info->var.bits_per_pixel); unifb_set_par()
510 hSyncStart = info->var.xres + info->var.right_margin; unifb_set_par()
511 hSyncEnd = hSyncStart + info->var.hsync_len; unifb_set_par()
512 hTotal = hSyncEnd + info->var.left_margin; unifb_set_par()
514 vSyncStart = info->var.yres + info->var.lower_margin; unifb_set_par()
515 vSyncEnd = vSyncStart + info->var.vsync_len; unifb_set_par()
516 vTotal = vSyncEnd + info->var.upper_margin; unifb_set_par()
518 switch (info->var.bits_per_pixel) { unifb_set_par()
535 writel(info->fix.smem_start, UDE_FSA); unifb_set_par()
536 writel(info->var.yres, UDE_LS); unifb_set_par()
537 writel(get_line_length(info->var.xres, unifb_set_par()
538 info->var.bits_per_pixel) >> 3, UDE_PS); unifb_set_par()
540 writel((hTotal << 16) | (info->var.xres), UDE_HAT); unifb_set_par()
541 writel(((hTotal - 1) << 16) | (info->var.xres - 1), UDE_HBT); unifb_set_par()
543 writel((vTotal << 16) | (info->var.yres), UDE_VAT); unifb_set_par()
544 writel(((vTotal - 1) << 16) | (info->var.yres - 1), UDE_VBT); unifb_set_par()
558 u_int transp, struct fb_info *info) unifb_setcolreg()
564 if (info->var.grayscale) { unifb_setcolreg()
571 switch (info->fix.visual) { unifb_setcolreg()
574 red = CNVT_TOHW(red, info->var.red.length); unifb_setcolreg()
575 green = CNVT_TOHW(green, info->var.green.length); unifb_setcolreg()
576 blue = CNVT_TOHW(blue, info->var.blue.length); unifb_setcolreg()
577 transp = CNVT_TOHW(transp, info->var.transp.length); unifb_setcolreg()
589 if (info->fix.visual == FB_VISUAL_TRUECOLOR) { unifb_setcolreg()
595 v = (red << info->var.red.offset) | unifb_setcolreg()
596 (green << info->var.green.offset) | unifb_setcolreg()
597 (blue << info->var.blue.offset) | unifb_setcolreg()
598 (transp << info->var.transp.offset); unifb_setcolreg()
599 switch (info->var.bits_per_pixel) { unifb_setcolreg()
605 ((u32 *) (info->pseudo_palette))[regno] = v; unifb_setcolreg()
621 struct fb_info *info) unifb_pan_display()
625 || var->yoffset >= info->var.yres_virtual unifb_pan_display()
629 if (var->xoffset + info->var.xres > info->var.xres_virtual || unifb_pan_display()
630 var->yoffset + info->var.yres > info->var.yres_virtual) unifb_pan_display()
633 info->var.xoffset = var->xoffset; unifb_pan_display()
634 info->var.yoffset = var->yoffset; unifb_pan_display()
636 info->var.vmode |= FB_VMODE_YWRAP; unifb_pan_display()
638 info->var.vmode &= ~FB_VMODE_YWRAP; unifb_pan_display()
642 int unifb_mmap(struct fb_info *info, unifb_mmap() argument
647 return vm_iomap_memory(vma, info->fix.smem_start, info->fix.smem_len); unifb_mmap()
668 struct fb_info *info; unifb_probe() local
687 info = framebuffer_alloc(sizeof(u32)*256, &dev->dev); unifb_probe()
688 if (!info) unifb_probe()
691 info->screen_base = (char __iomem *)videomemory; unifb_probe()
692 info->fbops = &unifb_ops; unifb_probe()
694 retval = fb_find_mode(&info->var, info, NULL, unifb_probe()
698 info->var = unifb_default; unifb_probe()
700 info->fix = unifb_fix; unifb_probe()
701 info->pseudo_palette = info->par; unifb_probe()
702 info->par = NULL; unifb_probe()
703 info->flags = FBINFO_FLAG_DEFAULT; unifb_probe()
705 info->fix.accel = FB_ACCEL_PUV3_UNIGFX; unifb_probe()
708 retval = fb_alloc_cmap(&info->cmap, 256, 0); unifb_probe()
712 retval = register_framebuffer(info); unifb_probe()
715 platform_set_drvdata(dev, info); unifb_probe()
718 fb_info(info, "Virtual frame buffer device, using %dM of video memory\n", unifb_probe()
722 fb_dealloc_cmap(&info->cmap); unifb_probe()
724 framebuffer_release(info); unifb_probe()
731 struct fb_info *info = platform_get_drvdata(dev); unifb_remove() local
733 if (info) { unifb_remove()
734 unregister_framebuffer(info); unifb_remove()
735 fb_dealloc_cmap(&info->cmap); unifb_remove()
736 framebuffer_release(info); unifb_remove()
343 unifb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) unifb_check_var() argument
557 unifb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) unifb_setcolreg() argument
620 unifb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) unifb_pan_display() argument
H A Dgrvga.c84 struct fb_info *info) grvga_check_var()
86 struct grvga_par *par = info->par; grvga_check_var()
107 if (info->fix.smem_len) { grvga_check_var()
108 if ((var->yres_virtual*var->xres_virtual*var->bits_per_pixel/8) > info->fix.smem_len) grvga_check_var()
122 switch (info->var.bits_per_pixel) { grvga_check_var()
149 static int grvga_set_par(struct fb_info *info) grvga_set_par() argument
153 struct grvga_par *par = info->par; grvga_set_par()
155 __raw_writel(((info->var.yres - 1) << 16) | (info->var.xres - 1), grvga_set_par()
158 __raw_writel((info->var.lower_margin << 16) | (info->var.right_margin), grvga_set_par()
161 __raw_writel((info->var.vsync_len << 16) | (info->var.hsync_len), grvga_set_par()
164 __raw_writel(((info->var.yres + info->var.lower_margin + info->var.upper_margin + info->var.vsync_len - 1) << 16) | grvga_set_par()
165 (info->var.xres + info->var.right_margin + info->var.left_margin + info->var.hsync_len - 1), grvga_set_par()
168 switch (info->var.bits_per_pixel) { grvga_set_par()
170 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; grvga_set_par()
174 info->fix.visual = FB_VISUAL_TRUECOLOR; grvga_set_par()
179 info->fix.visual = FB_VISUAL_TRUECOLOR; grvga_set_par()
189 info->fix.line_length = (info->var.xres_virtual*info->var.bits_per_pixel)/8; grvga_set_par()
193 static int grvga_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) grvga_setcolreg() argument
196 par = info->par; grvga_setcolreg()
201 if (info->var.grayscale) { grvga_setcolreg()
210 red = CNVT_TOHW(red, info->var.red.length); grvga_setcolreg()
211 green = CNVT_TOHW(green, info->var.green.length); grvga_setcolreg()
212 blue = CNVT_TOHW(blue, info->var.blue.length); grvga_setcolreg()
213 transp = CNVT_TOHW(transp, info->var.transp.length); grvga_setcolreg()
218 if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR) grvga_setcolreg()
223 else if (info->fix.visual == FB_VISUAL_TRUECOLOR) { grvga_setcolreg()
229 v = (red << info->var.red.offset) | grvga_setcolreg()
230 (green << info->var.green.offset) | grvga_setcolreg()
231 (blue << info->var.blue.offset) | grvga_setcolreg()
232 (transp << info->var.transp.offset); grvga_setcolreg()
234 ((u32 *) (info->pseudo_palette))[regno] = v; grvga_setcolreg()
240 struct fb_info *info) grvga_pan_display()
242 struct grvga_par *par = info->par; grvga_pan_display()
243 struct fb_fix_screeninfo *fix = &info->fix; grvga_pan_display()
334 struct fb_info *info; grvga_probe() local
343 info = framebuffer_alloc(sizeof(struct grvga_par), &dev->dev); grvga_probe()
344 if (!info) { grvga_probe()
370 if (grvga_parse_custom(this_opt, &info->var) < 0) { grvga_probe()
383 par = info->par; grvga_probe()
384 info->fbops = &grvga_ops; grvga_probe()
385 info->fix = grvga_fix; grvga_probe()
386 info->pseudo_palette = par->color_palette; grvga_probe()
387 info->flags = FBINFO_DEFAULT | FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN; grvga_probe()
388 info->fix.smem_len = grvga_mem_size; grvga_probe()
407 retval = fb_alloc_cmap(&info->cmap, 256, 0); grvga_probe()
415 retval = fb_find_mode(&info->var, info, mode_opt, grvga_probe()
424 grvga_mem_size = info->var.xres_virtual * info->var.yres_virtual * info->var.bits_per_pixel/8; grvga_probe()
475 info->screen_base = (char __iomem *) virtual_start; grvga_probe()
476 info->fix.smem_start = physical_start; grvga_probe()
477 info->fix.smem_len = grvga_mem_size; grvga_probe()
479 dev_set_drvdata(&dev->dev, info); grvga_probe()
483 info->node, info->var.xres, info->var.yres, info->var.bits_per_pixel, grvga_probe()
484 grvga_mem_size >> 10, info->screen_base); grvga_probe()
486 retval = register_framebuffer(info); grvga_probe()
504 fb_dealloc_cmap(&info->cmap); grvga_probe()
509 framebuffer_release(info); grvga_probe()
516 struct fb_info *info = dev_get_drvdata(&device->dev); grvga_remove() local
519 if (info) { grvga_remove()
520 par = info->par; grvga_remove()
521 unregister_framebuffer(info); grvga_remove()
522 fb_dealloc_cmap(&info->cmap); grvga_remove()
528 iounmap(info->screen_base); grvga_remove()
530 kfree((void *)info->screen_base); grvga_remove()
532 framebuffer_release(info); grvga_remove()
83 grvga_check_var(struct fb_var_screeninfo *var, struct fb_info *info) grvga_check_var() argument
239 grvga_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) grvga_pan_display() argument
H A Dpmag-aa-fb.c53 struct fb_info *info);
85 struct fb_info info; member in struct:aafb_info
105 static void aafb_set_cursor(struct aafb_info *info, int on) aafb_set_cursor() argument
107 struct aafb_cursor *c = &info->cursor; aafb_set_cursor()
110 bt431_position_cursor(info->bt431, c->x, c->y); aafb_set_cursor()
111 bt431_enable_cursor(info->bt431); aafb_set_cursor()
113 bt431_erase_cursor(info->bt431); aafb_set_cursor()
118 struct aafb_info *info = (struct aafb_info *)disp->fb_info; aafbcon_cursor() local
119 struct aafb_cursor *c = &info->cursor; aafbcon_cursor()
129 aafb_set_cursor(info, 0); aafbcon_cursor()
140 aafb_set_cursor(info, c->on); aafbcon_cursor()
150 struct aafb_info *info = (struct aafb_info *)disp->fb_info; aafbcon_set_font() local
151 struct aafb_cursor *c = &info->cursor; aafbcon_set_font()
152 u8 fgc = ~attr_bgcol_ec(disp, disp->conp, &info->info); aafbcon_set_font()
160 bt431_set_font(info->bt431, fgc, width, height); aafbcon_set_font()
167 struct aafb_info *info = (struct aafb_info *)data; aafb_cursor_timer_handler() local
168 struct aafb_cursor *c = &info->cursor; aafb_cursor_timer_handler()
175 aafb_set_cursor(info, c->on); aafb_cursor_timer_handler()
184 static void __init aafb_cursor_init(struct aafb_info *info) aafb_cursor_init() argument
186 struct aafb_cursor *c = &info->cursor; aafb_cursor_init()
196 c->timer.data = (unsigned long)info; aafb_cursor_init()
201 static void __exit aafb_cursor_exit(struct aafb_info *info) aafb_cursor_exit() argument
203 struct aafb_cursor *c = &info->cursor; aafb_cursor_exit()
227 struct fb_info *info) aafb_get_fix()
229 struct aafb_info *ip = (struct aafb_info *)info; aafb_get_fix()
246 struct aafb_info *info) aafb_set_disp()
250 disp->fb_info = &info->info; aafb_set_disp()
251 aafb_set_var(&disp->var, con, &info->info); aafb_set_disp()
257 aafb_get_fix(&fix, con, &info->info); aafb_set_disp()
274 struct fb_info *info) aafb_get_cmap()
284 struct fb_info *info) aafb_set_cmap()
299 static int aafb_ioctl(struct fb_info *info, u32 cmd, unsigned long arg) aafb_ioctl() argument
305 static int aafb_switch(int con, struct fb_info *info) aafb_switch() argument
307 struct aafb_info *ip = (struct aafb_info *)info; aafb_switch()
352 struct fb_info *info) aafb_get_var()
361 *var = info->var; aafb_get_var()
367 struct fb_info *info) aafb_set_var()
373 info->var = *var; aafb_set_var()
378 static int aafb_update_var(int con, struct fb_info *info) aafb_update_var() argument
380 struct aafb_info *ip = (struct aafb_info *)info; aafb_update_var()
391 static void aafb_blank(int blank, struct fb_info *info) aafb_blank() argument
393 struct aafb_info *ip = (struct aafb_info *)info; aafb_blank()
430 strcpy(ip->info.modename, "PMAG-AA"); init_one()
431 ip->info.node = -1; init_one()
432 ip->info.flags = FBINFO_FLAG_DEFAULT; init_one()
433 ip->info.fbops = &aafb_ops; init_one()
434 ip->info.disp = &ip->disp; init_one()
435 ip->info.changevar = NULL; init_one()
436 ip->info.switch_con = &aafb_switch; init_one()
437 ip->info.updatevar = &aafb_update_var; init_one()
438 ip->info.blank = &aafb_blank; init_one()
458 if (register_framebuffer(&ip->info) < 0) init_one()
462 GET_FB_IDX(ip->info.node), ip->info.modename, slot); init_one()
471 if (unregister_framebuffer(&ip->info) < 0) exit_one()
226 aafb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info) aafb_get_fix() argument
245 aafb_set_disp(struct display *disp, int con, struct aafb_info *info) aafb_set_disp() argument
273 aafb_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info) aafb_get_cmap() argument
283 aafb_set_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info) aafb_set_cmap() argument
351 aafb_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) aafb_get_var() argument
366 aafb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) aafb_set_var() argument
H A Dsunxvr500.c27 struct fb_info *info; member in struct:e3d_info
112 unsigned transp, struct fb_info *info) e3d_setcolreg()
114 struct e3d_info *ep = info->par; e3d_setcolreg()
128 if (info->fix.visual == FB_VISUAL_TRUECOLOR && regno < 16) e3d_setcolreg()
129 ((u32 *)info->pseudo_palette)[regno] = value; e3d_setcolreg()
149 static void e3d_imageblit(struct fb_info *info, const struct fb_image *image) e3d_imageblit() argument
151 struct e3d_info *ep = info->par; e3d_imageblit()
155 cfb_imageblit(info, image); e3d_imageblit()
156 info->screen_base += ep->fb8_buf_diff; e3d_imageblit()
157 cfb_imageblit(info, image); e3d_imageblit()
158 info->screen_base -= ep->fb8_buf_diff; e3d_imageblit()
162 static void e3d_fillrect(struct fb_info *info, const struct fb_fillrect *rect) e3d_fillrect() argument
164 struct e3d_info *ep = info->par; e3d_fillrect()
168 cfb_fillrect(info, rect); e3d_fillrect()
169 info->screen_base += ep->fb8_buf_diff; e3d_fillrect()
170 cfb_fillrect(info, rect); e3d_fillrect()
171 info->screen_base -= ep->fb8_buf_diff; e3d_fillrect()
175 static void e3d_copyarea(struct fb_info *info, const struct fb_copyarea *area) e3d_copyarea() argument
177 struct e3d_info *ep = info->par; e3d_copyarea()
181 cfb_copyarea(info, area); e3d_copyarea()
182 info->screen_base += ep->fb8_buf_diff; e3d_copyarea()
183 cfb_copyarea(info, area); e3d_copyarea()
184 info->screen_base -= ep->fb8_buf_diff; e3d_copyarea()
198 struct fb_info *info = ep->info; e3d_set_fbinfo() local
199 struct fb_var_screeninfo *var = &info->var; e3d_set_fbinfo()
201 info->flags = FBINFO_DEFAULT; e3d_set_fbinfo()
202 info->fbops = &e3d_ops; e3d_set_fbinfo()
203 info->screen_base = ep->fb_base; e3d_set_fbinfo()
204 info->screen_size = ep->fb_size; e3d_set_fbinfo()
206 info->pseudo_palette = ep->pseudo_palette; e3d_set_fbinfo()
209 strlcpy(info->fix.id, "e3d", sizeof(info->fix.id)); e3d_set_fbinfo()
210 info->fix.smem_start = ep->fb_base_phys; e3d_set_fbinfo()
211 info->fix.smem_len = ep->fb_size; e3d_set_fbinfo()
212 info->fix.type = FB_TYPE_PACKED_PIXELS; e3d_set_fbinfo()
214 info->fix.visual = FB_VISUAL_TRUECOLOR; e3d_set_fbinfo()
216 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; e3d_set_fbinfo()
233 if (fb_alloc_cmap(&info->cmap, 256, 0)) { e3d_set_fbinfo()
246 struct fb_info *info; e3d_pci_register() local
272 info = framebuffer_alloc(sizeof(struct e3d_info), &pdev->dev); e3d_pci_register()
273 if (!info) { e3d_pci_register()
279 ep = info->par; e3d_pci_register()
280 ep->info = info; e3d_pci_register()
333 info->fix.line_length = line_length; e3d_pci_register()
336 info->fix.line_length = line_length * 2; e3d_pci_register()
339 info->fix.line_length = line_length * 3; e3d_pci_register()
342 info->fix.line_length = line_length * 4; e3d_pci_register()
345 ep->fb_size = info->fix.line_length * ep->height; e3d_pci_register()
357 pci_set_drvdata(pdev, info); e3d_pci_register()
361 err = register_framebuffer(info); e3d_pci_register()
371 fb_dealloc_cmap(&info->cmap); e3d_pci_register()
386 framebuffer_release(info); e3d_pci_register()
397 struct fb_info *info = pci_get_drvdata(pdev); e3d_pci_unregister() local
398 struct e3d_info *ep = info->par; e3d_pci_unregister()
400 unregister_framebuffer(info); e3d_pci_unregister()
408 fb_dealloc_cmap(&info->cmap); e3d_pci_unregister()
409 framebuffer_release(info); e3d_pci_unregister()
110 e3d_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) e3d_setcolreg() argument
H A Dcg3.c130 * @info: frame buffer info structure
139 unsigned transp, struct fb_info *info) cg3_setcolreg()
141 struct cg3_par *par = (struct cg3_par *) info->par; cg3_setcolreg()
182 * @info: frame buffer structure that represents a single frame buffer
184 static int cg3_blank(int blank, struct fb_info *info) cg3_blank() argument
186 struct cg3_par *par = (struct cg3_par *) info->par; cg3_blank()
226 static int cg3_mmap(struct fb_info *info, struct vm_area_struct *vma) cg3_mmap() argument
228 struct cg3_par *par = (struct cg3_par *)info->par; cg3_mmap()
231 info->fix.smem_start, info->fix.smem_len, cg3_mmap()
236 static int cg3_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) cg3_ioctl() argument
238 return sbusfb_ioctl_helper(cmd, arg, info, cg3_ioctl()
239 FBTYPE_SUN3COLOR, 8, info->fix.smem_len); cg3_ioctl()
246 static void cg3_init_fix(struct fb_info *info, int linebytes, cg3_init_fix() argument
249 strlcpy(info->fix.id, dp->name, sizeof(info->fix.id)); cg3_init_fix()
251 info->fix.type = FB_TYPE_PACKED_PIXELS; cg3_init_fix()
252 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; cg3_init_fix()
254 info->fix.line_length = linebytes; cg3_init_fix()
256 info->fix.accel = FB_ACCEL_SUN_CGTHREE; cg3_init_fix()
352 struct fb_info *info; cg3_probe() local
356 info = framebuffer_alloc(sizeof(struct cg3_par), &op->dev); cg3_probe()
359 if (!info) cg3_probe()
361 par = info->par; cg3_probe()
365 info->fix.smem_start = op->resource[0].start; cg3_probe()
368 sbusfb_fill_var(&info->var, dp, 8); cg3_probe()
369 info->var.red.length = 8; cg3_probe()
370 info->var.green.length = 8; cg3_probe()
371 info->var.blue.length = 8; cg3_probe()
375 cg3_rdi_maybe_fixup_var(&info->var, dp); cg3_probe()
378 info->var.xres); cg3_probe()
379 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); cg3_probe()
386 info->flags = FBINFO_DEFAULT; cg3_probe()
387 info->fbops = &cg3_ops; cg3_probe()
388 info->screen_base = of_ioremap(&op->resource[0], CG3_RAM_OFFSET, cg3_probe()
389 info->fix.smem_len, "cg3 ram"); cg3_probe()
390 if (!info->screen_base) cg3_probe()
393 cg3_blank(FB_BLANK_UNBLANK, info); cg3_probe()
401 err = fb_alloc_cmap(&info->cmap, 256, 0); cg3_probe()
405 fb_set_cmap(&info->cmap, info); cg3_probe()
407 cg3_init_fix(info, linebytes, dp); cg3_probe()
409 err = register_framebuffer(info); cg3_probe()
413 dev_set_drvdata(&op->dev, info); cg3_probe()
416 dp->full_name, par->which_io, info->fix.smem_start); cg3_probe()
421 fb_dealloc_cmap(&info->cmap); cg3_probe()
424 of_iounmap(&op->resource[0], info->screen_base, info->fix.smem_len); cg3_probe()
430 framebuffer_release(info); cg3_probe()
438 struct fb_info *info = dev_get_drvdata(&op->dev); cg3_remove() local
439 struct cg3_par *par = info->par; cg3_remove()
441 unregister_framebuffer(info); cg3_remove()
442 fb_dealloc_cmap(&info->cmap); cg3_remove()
445 of_iounmap(&op->resource[0], info->screen_base, info->fix.smem_len); cg3_remove()
447 framebuffer_release(info); cg3_remove()
137 cg3_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) cg3_setcolreg() argument
H A Dpmagb-b-fb.c100 unsigned int transp, struct fb_info *info) pmagbbfb_setcolreg()
102 struct pmagbbfb_par *par = info->par; pmagbbfb_setcolreg()
104 if (regno >= info->cmap.len) pmagbbfb_setcolreg()
136 static void __init pmagbbfb_erase_cursor(struct fb_info *info) pmagbbfb_erase_cursor() argument
138 struct pmagbbfb_par *par = info->par; pmagbbfb_erase_cursor()
150 static void pmagbbfb_screen_setup(struct fb_info *info) pmagbbfb_screen_setup() argument
152 struct pmagbbfb_par *par = info->par; pmagbbfb_screen_setup()
154 info->var.xres = ((sfb_read(par, SFB_REG_VID_HOR) >> pmagbbfb_screen_setup()
156 info->var.xres_virtual = info->var.xres; pmagbbfb_screen_setup()
157 info->var.yres = (sfb_read(par, SFB_REG_VID_VER) >> pmagbbfb_screen_setup()
159 info->var.yres_virtual = info->var.yres; pmagbbfb_screen_setup()
160 info->var.left_margin = ((sfb_read(par, SFB_REG_VID_HOR) >> pmagbbfb_screen_setup()
163 info->var.right_margin = ((sfb_read(par, SFB_REG_VID_HOR) >> pmagbbfb_screen_setup()
166 info->var.upper_margin = (sfb_read(par, SFB_REG_VID_VER) >> pmagbbfb_screen_setup()
168 info->var.lower_margin = (sfb_read(par, SFB_REG_VID_VER) >> pmagbbfb_screen_setup()
170 info->var.hsync_len = ((sfb_read(par, SFB_REG_VID_HOR) >> pmagbbfb_screen_setup()
173 info->var.vsync_len = (sfb_read(par, SFB_REG_VID_VER) >> pmagbbfb_screen_setup()
176 info->fix.line_length = info->var.xres; pmagbbfb_screen_setup()
182 static void pmagbbfb_osc_setup(struct fb_info *info) pmagbbfb_osc_setup() argument
188 struct pmagbbfb_par *par = info->par; pmagbbfb_osc_setup()
189 struct tc_bus *tbus = to_tc_dev(info->device)->bus; pmagbbfb_osc_setup()
243 info->var.pixclock = par->osc1 ? pmagbbfb_osc_setup()
253 struct fb_info *info; pmagbbfb_probe() local
259 info = framebuffer_alloc(sizeof(struct pmagbbfb_par), dev); pmagbbfb_probe()
260 if (!info) { pmagbbfb_probe()
265 par = info->par; pmagbbfb_probe()
266 dev_set_drvdata(dev, info); pmagbbfb_probe()
268 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { pmagbbfb_probe()
275 info->fbops = &pmagbbfb_ops; pmagbbfb_probe()
276 info->fix = pmagbbfb_fix; pmagbbfb_probe()
277 info->var = pmagbbfb_defined; pmagbbfb_probe()
278 info->flags = FBINFO_DEFAULT; pmagbbfb_probe()
291 info->fix.mmio_start = start; pmagbbfb_probe()
292 par->mmio = ioremap_nocache(info->fix.mmio_start, info->fix.mmio_len); pmagbbfb_probe()
302 info->fix.smem_start = start + PMAGB_B_FBMEM; pmagbbfb_probe()
303 par->smem = ioremap_nocache(info->fix.smem_start, info->fix.smem_len); pmagbbfb_probe()
310 info->screen_base = (void __iomem *)par->smem + vid_base * 0x1000; pmagbbfb_probe()
311 info->screen_size = info->fix.smem_len - 2 * vid_base * 0x1000; pmagbbfb_probe()
313 pmagbbfb_erase_cursor(info); pmagbbfb_probe()
314 pmagbbfb_screen_setup(info); pmagbbfb_probe()
315 pmagbbfb_osc_setup(info); pmagbbfb_probe()
317 err = register_framebuffer(info); pmagbbfb_probe()
331 fb_info(info, "%s frame buffer device at %s\n", pmagbbfb_probe()
332 info->fix.id, dev_name(dev)); pmagbbfb_probe()
333 fb_info(info, "Osc0: %s, Osc1: %s, Osc%u selected\n", pmagbbfb_probe()
349 fb_dealloc_cmap(&info->cmap); pmagbbfb_probe()
352 framebuffer_release(info); pmagbbfb_probe()
359 struct fb_info *info = dev_get_drvdata(dev); pmagbbfb_remove() local
360 struct pmagbbfb_par *par = info->par; pmagbbfb_remove()
364 unregister_framebuffer(info); pmagbbfb_remove()
370 fb_dealloc_cmap(&info->cmap); pmagbbfb_remove()
371 framebuffer_release(info); pmagbbfb_remove()
98 pmagbbfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green, unsigned int blue, unsigned int transp, struct fb_info *info) pmagbbfb_setcolreg() argument
H A Dwm8505fb.c51 static int wm8505fb_init_hw(struct fb_info *info) wm8505fb_init_hw() argument
53 struct wm8505fb_info *fbi = to_wm8505fb_info(info); wm8505fb_init_hw()
74 writel(info->var.xres, fbi->regbase + WMT_GOVR_XRES); wm8505fb_init_hw()
75 writel(info->var.xres_virtual, fbi->regbase + WMT_GOVR_XRES_VIRTUAL); wm8505fb_init_hw()
86 static int wm8505fb_set_timing(struct fb_info *info) wm8505fb_set_timing() argument
88 struct wm8505fb_info *fbi = to_wm8505fb_info(info); wm8505fb_set_timing()
90 int h_start = info->var.left_margin; wm8505fb_set_timing()
91 int h_end = h_start + info->var.xres; wm8505fb_set_timing()
92 int h_all = h_end + info->var.right_margin; wm8505fb_set_timing()
93 int h_sync = info->var.hsync_len; wm8505fb_set_timing()
95 int v_start = info->var.upper_margin; wm8505fb_set_timing()
96 int v_end = v_start + info->var.yres; wm8505fb_set_timing()
97 int v_all = v_end + info->var.lower_margin; wm8505fb_set_timing()
98 int v_sync = info->var.vsync_len; wm8505fb_set_timing()
118 static int wm8505fb_set_par(struct fb_info *info) wm8505fb_set_par() argument
120 struct wm8505fb_info *fbi = to_wm8505fb_info(info); wm8505fb_set_par()
125 if (info->var.bits_per_pixel == 32) { wm8505fb_set_par()
126 info->var.red.offset = 16; wm8505fb_set_par()
127 info->var.red.length = 8; wm8505fb_set_par()
128 info->var.red.msb_right = 0; wm8505fb_set_par()
129 info->var.green.offset = 8; wm8505fb_set_par()
130 info->var.green.length = 8; wm8505fb_set_par()
131 info->var.green.msb_right = 0; wm8505fb_set_par()
132 info->var.blue.offset = 0; wm8505fb_set_par()
133 info->var.blue.length = 8; wm8505fb_set_par()
134 info->var.blue.msb_right = 0; wm8505fb_set_par()
135 info->fix.visual = FB_VISUAL_TRUECOLOR; wm8505fb_set_par()
136 info->fix.line_length = info->var.xres_virtual << 2; wm8505fb_set_par()
137 } else if (info->var.bits_per_pixel == 16) { wm8505fb_set_par()
138 info->var.red.offset = 11; wm8505fb_set_par()
139 info->var.red.length = 5; wm8505fb_set_par()
140 info->var.red.msb_right = 0; wm8505fb_set_par()
141 info->var.green.offset = 5; wm8505fb_set_par()
142 info->var.green.length = 6; wm8505fb_set_par()
143 info->var.green.msb_right = 0; wm8505fb_set_par()
144 info->var.blue.offset = 0; wm8505fb_set_par()
145 info->var.blue.length = 5; wm8505fb_set_par()
146 info->var.blue.msb_right = 0; wm8505fb_set_par()
147 info->fix.visual = FB_VISUAL_TRUECOLOR; wm8505fb_set_par()
148 info->fix.line_length = info->var.xres_virtual << 1; wm8505fb_set_par()
151 wm8505fb_set_timing(info); wm8505fb_set_par()
162 struct fb_info *info = dev_get_drvdata(dev); contrast_show() local
163 struct wm8505fb_info *fbi = to_wm8505fb_info(info); contrast_show()
172 struct fb_info *info = dev_get_drvdata(dev); contrast_store() local
173 struct wm8505fb_info *fbi = to_wm8505fb_info(info); contrast_store()
180 wm8505fb_set_par(info); contrast_store()
196 struct fb_info *info) { wm8505fb_setcolreg()
197 struct wm8505fb_info *fbi = to_wm8505fb_info(info); wm8505fb_setcolreg()
203 if (info->var.grayscale) wm8505fb_setcolreg()
210 u32 *pal = info->pseudo_palette; wm8505fb_setcolreg()
226 struct fb_info *info) wm8505fb_pan_display()
228 struct wm8505fb_info *fbi = to_wm8505fb_info(info); wm8505fb_pan_display()
235 static int wm8505fb_blank(int blank, struct fb_info *info) wm8505fb_blank() argument
237 struct wm8505fb_info *fbi = to_wm8505fb_info(info); wm8505fb_blank()
241 wm8505fb_set_timing(info); wm8505fb_blank()
194 wm8505fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) wm8505fb_setcolreg() argument
225 wm8505fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) wm8505fb_pan_display() argument
H A Ds3fb.c258 static int s3fb_setup_ddc_bus(struct fb_info *info) s3fb_setup_ddc_bus() argument
260 struct s3fb_info *par = info->par; s3fb_setup_ddc_bus()
262 strlcpy(par->ddc_adapter.name, info->fix.id, s3fb_setup_ddc_bus()
267 par->ddc_adapter.dev.parent = info->device; s3fb_setup_ddc_bus()
301 static void s3fb_settile_fast(struct fb_info *info, struct fb_tilemap *map) s3fb_settile_fast() argument
304 u8 __iomem *fb = (u8 __iomem *) info->screen_base; s3fb_settile_fast()
309 fb_err(info, "unsupported font parameters: width %d, height %d, depth %d, length %d\n", s3fb_settile_fast()
323 static void s3fb_tilecursor(struct fb_info *info, struct fb_tilecursor *cursor) s3fb_tilecursor() argument
325 struct s3fb_info *par = info->par; s3fb_tilecursor()
327 svga_tilecursor(par->state.vgabase, info, cursor); s3fb_tilecursor()
358 static void s3fb_iplan_imageblit(struct fb_info *info, const struct fb_image *image) s3fb_iplan_imageblit() argument
369 dst1 = info->screen_base + (image->dy * info->fix.line_length) s3fb_iplan_imageblit()
381 dst1 += info->fix.line_length; s3fb_iplan_imageblit()
387 static void s3fb_iplan_fillrect(struct fb_info *info, const struct fb_fillrect *rect) s3fb_iplan_fillrect() argument
394 dst1 = info->screen_base + (rect->dy * info->fix.line_length) s3fb_iplan_fillrect()
402 dst1 += info->fix.line_length; s3fb_iplan_fillrect()
415 static void s3fb_cfb4_imageblit(struct fb_info *info, const struct fb_image *image) s3fb_cfb4_imageblit() argument
426 dst1 = info->screen_base + (image->dy * info->fix.line_length) s3fb_cfb4_imageblit()
438 dst1 += info->fix.line_length; s3fb_cfb4_imageblit()
442 static void s3fb_imageblit(struct fb_info *info, const struct fb_image *image) s3fb_imageblit() argument
444 if ((info->var.bits_per_pixel == 4) && (image->depth == 1) s3fb_imageblit()
446 if (info->fix.type == FB_TYPE_INTERLEAVED_PLANES) s3fb_imageblit()
447 s3fb_iplan_imageblit(info, image); s3fb_imageblit()
449 s3fb_cfb4_imageblit(info, image); s3fb_imageblit()
451 cfb_imageblit(info, image); s3fb_imageblit()
454 static void s3fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) s3fb_fillrect() argument
456 if ((info->var.bits_per_pixel == 4) s3fb_fillrect()
458 && (info->fix.type == FB_TYPE_INTERLEAVED_PLANES)) s3fb_fillrect()
459 s3fb_iplan_fillrect(info, rect); s3fb_fillrect()
461 cfb_fillrect(info, rect); s3fb_fillrect()
469 static void s3_set_pixclock(struct fb_info *info, u32 pixclock) s3_set_pixclock() argument
471 struct s3fb_info *par = info->par; s3_set_pixclock()
477 1000000000 / pixclock, &m, &n, &r, info->node); s3_set_pixclock()
479 fb_err(info, "cannot set requested pixclock, keeping old value\n"); s3_set_pixclock()
512 static int s3fb_open(struct fb_info *info, int user) s3fb_open() argument
514 struct s3fb_info *par = info->par; s3fb_open()
536 static int s3fb_release(struct fb_info *info, int user) s3fb_release() argument
538 struct s3fb_info *par = info->par; s3fb_release()
557 static int s3fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) s3fb_check_var() argument
559 struct s3fb_info *par = info->par; s3fb_check_var()
572 fb_err(info, "unsupported mode requested\n"); s3fb_check_var()
589 if (mem > info->screen_size) { s3fb_check_var()
590 fb_err(info, "not enough framebuffer memory (%d kB requested , %u kB available)\n", s3fb_check_var()
591 mem >> 10, (unsigned int) (info->screen_size >> 10)); s3fb_check_var()
595 rv = svga_check_timings (&s3_timing_regs, var, info->node); s3fb_check_var()
597 fb_err(info, "invalid timings requested\n"); s3fb_check_var()
602 info->node); s3fb_check_var()
604 fb_err(info, "invalid pixclock value requested\n"); s3fb_check_var()
613 static int s3fb_set_par(struct fb_info *info) s3fb_set_par() argument
615 struct s3fb_info *par = info->par; s3fb_set_par()
617 u32 bpp = info->var.bits_per_pixel; s3fb_set_par()
621 info->fix.ypanstep = 1; s3fb_set_par()
622 info->fix.line_length = (info->var.xres_virtual * bpp) / 8; s3fb_set_par()
624 info->flags &= ~FBINFO_MISC_TILEBLITTING; s3fb_set_par()
625 info->tileops = NULL; s3fb_set_par()
628 info->pixmap.blit_x = (bpp == 4) ? (1 << (8 - 1)) : (~(u32)0); s3fb_set_par()
629 info->pixmap.blit_y = ~(u32)0; s3fb_set_par()
631 offset_value = (info->var.xres_virtual * bpp) / 64; s3fb_set_par()
632 screen_size = info->var.yres_virtual * info->fix.line_length; s3fb_set_par()
634 info->fix.ypanstep = 16; s3fb_set_par()
635 info->fix.line_length = 0; s3fb_set_par()
637 info->flags |= FBINFO_MISC_TILEBLITTING; s3fb_set_par()
638 info->tileops = fasttext ? &s3fb_fast_tile_ops : &s3fb_tile_ops; s3fb_set_par()
641 info->pixmap.blit_x = 1 << (8 - 1); s3fb_set_par()
642 info->pixmap.blit_y = 1 << (16 - 1); s3fb_set_par()
644 offset_value = info->var.xres_virtual / 16; s3fb_set_par()
645 screen_size = (info->var.xres_virtual * info->var.yres_virtual) / 64; s3fb_set_par()
648 info->var.xoffset = 0; s3fb_set_par()
649 info->var.yoffset = 0; s3fb_set_par()
650 info->var.activate = FB_ACTIVATE_NOW; s3fb_set_par()
688 fb_dbg(info, "offset register : %d\n", offset_value); s3fb_set_par()
706 if (info->var.vmode & FB_VMODE_DOUBLE) s3fb_set_par()
711 if (info->var.vmode & FB_VMODE_INTERLACED) s3fb_set_par()
721 mode = svga_match_format(s3fb_formats, &(info->var), &(info->fix)); s3fb_set_par()
747 dbytes = info->var.xres * ((bpp+7)/8); s3fb_set_par()
771 fb_dbg(info, "text mode\n"); s3fb_set_par()
782 fb_dbg(info, "high speed text mode set\n"); s3fb_set_par()
787 fb_dbg(info, "4 bit pseudocolor\n"); s3fb_set_par()
798 fb_dbg(info, "4 bit pseudocolor, planar\n"); s3fb_set_par()
808 fb_dbg(info, "8 bit pseudocolor\n"); s3fb_set_par()
810 if (info->var.pixclock > 20000 || s3fb_set_par()
824 fb_dbg(info, "5/5/5 truecolor\n"); s3fb_set_par()
826 if (info->var.pixclock > 20000) s3fb_set_par()
832 if (info->var.pixclock > 8695) { s3fb_set_par()
852 fb_dbg(info, "5/6/5 truecolor\n"); s3fb_set_par()
854 if (info->var.pixclock > 20000) s3fb_set_par()
860 if (info->var.pixclock > 8695) { s3fb_set_par()
881 fb_dbg(info, "8/8/8 truecolor\n"); s3fb_set_par()
885 fb_dbg(info, "8/8/8/8 truecolor\n"); s3fb_set_par()
890 fb_err(info, "unsupported mode - bug\n"); s3fb_set_par()
899 s3_set_pixclock(info, info->var.pixclock); s3fb_set_par()
900 svga_set_timings(par->state.vgabase, &s3_timing_regs, &(info->var), hmul, 1, s3fb_set_par()
901 (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, s3fb_set_par()
902 (info->var.vmode & FB_VMODE_INTERLACED) ? 2 : 1, s3fb_set_par()
903 hmul, info->node); s3fb_set_par()
906 htotal = info->var.xres + info->var.left_margin + info->var.right_margin + info->var.hsync_len; s3fb_set_par()
911 hsstart = ((info->var.xres + info->var.right_margin) * hmul) / 8; s3fb_set_par()
916 memset_io(info->screen_base, 0x00, screen_size); s3fb_set_par()
987 static int s3fb_blank(int blank_mode, struct fb_info *info) s3fb_blank() argument
989 struct s3fb_info *par = info->par; s3fb_blank()
993 fb_dbg(info, "unblank\n"); s3fb_blank()
998 fb_dbg(info, "blank\n"); s3fb_blank()
1003 fb_dbg(info, "hsync\n"); s3fb_blank()
1008 fb_dbg(info, "vsync\n"); s3fb_blank()
1013 fb_dbg(info, "sync down\n"); s3fb_blank()
1025 static int s3fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) s3fb_pan_display() argument
1027 struct s3fb_info *par = info->par; s3fb_pan_display()
1031 if (info->var.bits_per_pixel == 0) { s3fb_pan_display()
1032 offset = (var->yoffset / 16) * (info->var.xres_virtual / 2) s3fb_pan_display()
1036 offset = (var->yoffset * info->fix.line_length) + s3fb_pan_display()
1037 (var->xoffset * info->var.bits_per_pixel / 8); s3fb_pan_display()
1128 struct fb_info *info; s3_pci_probe() local
1141 info = framebuffer_alloc(sizeof(struct s3fb_info), &(dev->dev)); s3_pci_probe()
1142 if (!info) { s3_pci_probe()
1147 par = info->par; s3_pci_probe()
1150 info->flags = FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN; s3_pci_probe()
1151 info->fbops = &s3fb_ops; s3_pci_probe()
1156 dev_err(info->device, "cannot enable PCI device\n"); s3_pci_probe()
1162 dev_err(info->device, "cannot reserve framebuffer region\n"); s3_pci_probe()
1167 info->fix.smem_start = pci_resource_start(dev, 0); s3_pci_probe()
1168 info->fix.smem_len = pci_resource_len(dev, 0); s3_pci_probe()
1171 info->screen_base = pci_iomap(dev, 0, 0); s3_pci_probe()
1172 if (! info->screen_base) { s3_pci_probe()
1174 dev_err(info->device, "iomap for framebuffer failed\n"); s3_pci_probe()
1211 info->screen_size = 4 << 20; s3_pci_probe()
1215 info->screen_size = 2 << 20; s3_pci_probe()
1223 info->screen_size = 4 << 20; s3_pci_probe()
1226 info->screen_size = 2 << 20; s3_pci_probe()
1232 info->screen_size = 2 << 20; s3_pci_probe()
1235 info->screen_size = 4 << 20; s3_pci_probe()
1238 info->screen_size = 6 << 20; s3_pci_probe()
1241 info->screen_size = 8 << 20; s3_pci_probe()
1248 info->screen_size -= 4 << 20; s3_pci_probe()
1251 info->screen_size -= 2 << 20; s3_pci_probe()
1255 info->screen_size = s3_memsizes[regval >> 5] << 10; s3_pci_probe()
1256 info->fix.smem_len = info->screen_size; s3_pci_probe()
1267 strcpy(info->fix.id, s3_names [par->chip]); s3_pci_probe()
1268 info->fix.mmio_start = 0; s3_pci_probe()
1269 info->fix.mmio_len = 0; s3_pci_probe()
1270 info->fix.type = FB_TYPE_PACKED_PIXELS; s3_pci_probe()
1271 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; s3_pci_probe()
1272 info->fix.ypanstep = 0; s3_pci_probe()
1273 info->fix.accel = FB_ACCEL_NONE; s3_pci_probe()
1274 info->pseudo_palette = (void*) (par->pseudo_palette); s3_pci_probe()
1275 info->var.bits_per_pixel = 8; s3_pci_probe()
1280 par->mmio = ioremap(info->fix.smem_start + MMIO_OFFSET, MMIO_SIZE); s3_pci_probe()
1284 dev_err(info->device, "unable to map MMIO at 0x%lx, disabling DDC", s3_pci_probe()
1285 info->fix.smem_start + MMIO_OFFSET); s3_pci_probe()
1288 if (s3fb_setup_ddc_bus(info) == 0) { s3_pci_probe()
1292 fb_edid_to_monspecs(edid, &info->monspecs); s3_pci_probe()
1294 if (!info->monspecs.modedb) s3_pci_probe()
1295 dev_err(info->device, "error getting mode database\n"); s3_pci_probe()
1299 fb_videomode_to_modelist(info->monspecs.modedb, s3_pci_probe()
1300 info->monspecs.modedb_len, s3_pci_probe()
1301 &info->modelist); s3_pci_probe()
1302 m = fb_find_best_display(&info->monspecs, &info->modelist); s3_pci_probe()
1304 fb_videomode_to_var(&info->var, m); s3_pci_probe()
1305 /* fill all other info->var's fields */ s3_pci_probe()
1306 if (s3fb_check_var(&info->var, info) == 0) s3_pci_probe()
1318 rc = fb_find_mode(&info->var, info, mode_option, s3_pci_probe()
1319 info->monspecs.modedb, info->monspecs.modedb_len, s3_pci_probe()
1320 NULL, info->var.bits_per_pixel); s3_pci_probe()
1323 dev_err(info->device, "mode %s not found\n", mode_option); s3_pci_probe()
1324 fb_destroy_modedb(info->monspecs.modedb); s3_pci_probe()
1325 info->monspecs.modedb = NULL; s3_pci_probe()
1330 fb_destroy_modedb(info->monspecs.modedb); s3_pci_probe()
1331 info->monspecs.modedb = NULL; s3_pci_probe()
1334 info->var.yres_virtual = info->fix.smem_len * 8 / s3_pci_probe()
1335 (info->var.bits_per_pixel * info->var.xres_virtual); s3_pci_probe()
1336 if (info->var.yres_virtual < info->var.yres) { s3_pci_probe()
1337 dev_err(info->device, "virtual vertical size smaller than real\n"); s3_pci_probe()
1342 rc = fb_alloc_cmap(&info->cmap, 256, 0); s3_pci_probe()
1344 dev_err(info->device, "cannot allocate colormap\n"); s3_pci_probe()
1348 rc = register_framebuffer(info); s3_pci_probe()
1350 dev_err(info->device, "cannot register framebuffer\n"); s3_pci_probe()
1354 fb_info(info, "%s on %s, %d MB RAM, %d MHz MCLK\n", s3_pci_probe()
1355 info->fix.id, pci_name(dev), s3_pci_probe()
1356 info->fix.smem_len >> 20, (par->mclk_freq + 500) / 1000); s3_pci_probe()
1359 fb_info(info, "unknown chip, CR2D=%x, CR2E=%x, CRT2F=%x, CRT30=%x\n", s3_pci_probe()
1366 pci_set_drvdata(dev, info); s3_pci_probe()
1371 par->mtrr_reg = mtrr_add(info->fix.smem_start, info->fix.smem_len, MTRR_TYPE_WRCOMB, 1); s3_pci_probe()
1379 fb_dealloc_cmap(&info->cmap); s3_pci_probe()
1388 pci_iounmap(dev, info->screen_base); s3_pci_probe()
1394 framebuffer_release(info); s3_pci_probe()
1403 struct fb_info *info = pci_get_drvdata(dev); s3_pci_remove() local
1406 if (info) { s3_pci_remove()
1407 par = info->par; s3_pci_remove()
1416 unregister_framebuffer(info); s3_pci_remove()
1417 fb_dealloc_cmap(&info->cmap); s3_pci_remove()
1426 pci_iounmap(dev, info->screen_base); s3_pci_remove()
1430 framebuffer_release(info); s3_pci_remove()
1438 struct fb_info *info = pci_get_drvdata(dev); s3_pci_suspend() local
1439 struct s3fb_info *par = info->par; s3_pci_suspend()
1441 dev_info(info->device, "suspend\n"); s3_pci_suspend()
1452 fb_set_suspend(info, 1); s3_pci_suspend()
1469 struct fb_info *info = pci_get_drvdata(dev); s3_pci_resume() local
1470 struct s3fb_info *par = info->par; s3_pci_resume()
1473 dev_info(info->device, "resume\n"); s3_pci_resume()
1490 dev_err(info->device, "error %d enabling device for resume\n", err); s3_pci_resume()
1495 s3fb_set_par(info); s3_pci_resume()
1496 fb_set_suspend(info, 0); s3_pci_resume()
H A Dhyperv_fb.c215 struct fb_info *info; member in struct:hvfb_par
261 /* Send screen resolution info to host */ synthvid_send_situ()
264 struct fb_info *info = hv_get_drvdata(hdev); synthvid_send_situ() local
267 if (!info) synthvid_send_situ()
279 msg.situ.video_output[0].depth_bits = info->var.bits_per_pixel; synthvid_send_situ()
280 msg.situ.video_output[0].width_pixels = info->var.xres; synthvid_send_situ()
281 msg.situ.video_output[0].height_pixels = info->var.yres; synthvid_send_situ()
282 msg.situ.video_output[0].pitch_bytes = info->fix.line_length; synthvid_send_situ()
289 /* Send mouse pointer info to host */ synthvid_send_ptr()
324 static int synthvid_update(struct fb_info *info) synthvid_update() argument
326 struct hv_device *hdev = device_to_hv_device(info->device); synthvid_update()
338 msg.dirt.rect[0].x2 = info->var.xres; synthvid_update()
339 msg.dirt.rect[0].y2 = info->var.yres; synthvid_update()
350 * Or, reply with screen and cursor info.
354 struct fb_info *info = hv_get_drvdata(hdev); synthvid_recv_sub() local
358 if (!info) synthvid_recv_sub()
361 par = info->par; synthvid_recv_sub()
372 /* Reply with screen and cursor info */ synthvid_recv_sub()
389 struct fb_info *info = hv_get_drvdata(hdev); synthvid_receive() local
396 if (!info) synthvid_receive()
399 par = info->par; synthvid_receive()
415 struct fb_info *info = hv_get_drvdata(hdev); synthvid_negotiate_ver() local
416 struct hvfb_par *par = info->par; synthvid_negotiate_ver()
448 struct fb_info *info = hv_get_drvdata(hdev); synthvid_connect_vsp() local
449 struct hvfb_par *par = info->par; synthvid_connect_vsp()
489 struct fb_info *info = hv_get_drvdata(hdev); synthvid_send_config() local
490 struct hvfb_par *par = info->par; synthvid_send_config()
500 msg->vram.user_ctx = msg->vram.vram_gpa = info->fix.smem_start; synthvid_send_config()
510 if (msg->vram_ack.user_ctx != info->fix.smem_start) { synthvid_send_config()
533 struct fb_info *info = par->info; hvfb_update_work() local
536 synthvid_update(info); hvfb_update_work()
546 struct fb_info *info; hvfb_on_panic() local
550 info = par->info; hvfb_on_panic()
551 synthvid_update(info); hvfb_on_panic()
558 static int hvfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) hvfb_check_var() argument
571 static int hvfb_set_par(struct fb_info *info) hvfb_set_par() argument
573 struct hv_device *hdev = device_to_hv_device(info->device); hvfb_set_par()
585 unsigned blue, unsigned transp, struct fb_info *info) hvfb_setcolreg()
587 u32 *pal = info->pseudo_palette; hvfb_setcolreg()
592 pal[regno] = chan_to_field(red, &info->var.red) hvfb_setcolreg()
593 | chan_to_field(green, &info->var.green) hvfb_setcolreg()
594 | chan_to_field(blue, &info->var.blue) hvfb_setcolreg()
595 | chan_to_field(transp, &info->var.transp); hvfb_setcolreg()
600 static int hvfb_blank(int blank, struct fb_info *info) hvfb_blank() argument
648 static void hvfb_get_option(struct fb_info *info) hvfb_get_option() argument
650 struct hvfb_par *par = info->par; hvfb_get_option()
680 static int hvfb_getmem(struct fb_info *info) hvfb_getmem() argument
682 struct hvfb_par *par = info->par; hvfb_getmem()
725 info->apertures = alloc_apertures(1); hvfb_getmem()
726 if (!info->apertures) hvfb_getmem()
730 info->apertures->ranges[0].base = screen_info.lfb_base; hvfb_getmem()
731 info->apertures->ranges[0].size = screen_info.lfb_size; hvfb_getmem()
732 remove_conflicting_framebuffers(info->apertures, hvfb_getmem()
735 info->apertures->ranges[0].base = pci_resource_start(pdev, 0); hvfb_getmem()
736 info->apertures->ranges[0].size = pci_resource_len(pdev, 0); hvfb_getmem()
739 info->fix.smem_start = par->mem.start; hvfb_getmem()
740 info->fix.smem_len = screen_fb_size; hvfb_getmem()
741 info->screen_base = fb_virt; hvfb_getmem()
742 info->screen_size = screen_fb_size; hvfb_getmem()
761 static void hvfb_putmem(struct fb_info *info) hvfb_putmem() argument
763 struct hvfb_par *par = info->par; hvfb_putmem()
765 iounmap(info->screen_base); hvfb_putmem()
773 struct fb_info *info; hvfb_probe() local
777 info = framebuffer_alloc(sizeof(struct hvfb_par), &hdev->device); hvfb_probe()
778 if (!info) { hvfb_probe()
779 pr_err("No memory for framebuffer info\n"); hvfb_probe()
783 par = info->par; hvfb_probe()
784 par->info = info; hvfb_probe()
790 hv_set_drvdata(hdev, info); hvfb_probe()
797 ret = hvfb_getmem(info); hvfb_probe()
803 hvfb_get_option(info); hvfb_probe()
809 info->flags = FBINFO_DEFAULT; hvfb_probe()
811 info->var.xres_virtual = info->var.xres = screen_width; hvfb_probe()
812 info->var.yres_virtual = info->var.yres = screen_height; hvfb_probe()
813 info->var.bits_per_pixel = screen_depth; hvfb_probe()
815 if (info->var.bits_per_pixel == 16) { hvfb_probe()
816 info->var.red = (struct fb_bitfield){11, 5, 0}; hvfb_probe()
817 info->var.green = (struct fb_bitfield){5, 6, 0}; hvfb_probe()
818 info->var.blue = (struct fb_bitfield){0, 5, 0}; hvfb_probe()
819 info->var.transp = (struct fb_bitfield){0, 0, 0}; hvfb_probe()
821 info->var.red = (struct fb_bitfield){16, 8, 0}; hvfb_probe()
822 info->var.green = (struct fb_bitfield){8, 8, 0}; hvfb_probe()
823 info->var.blue = (struct fb_bitfield){0, 8, 0}; hvfb_probe()
824 info->var.transp = (struct fb_bitfield){24, 8, 0}; hvfb_probe()
827 info->var.activate = FB_ACTIVATE_NOW; hvfb_probe()
828 info->var.height = -1; hvfb_probe()
829 info->var.width = -1; hvfb_probe()
830 info->var.vmode = FB_VMODE_NONINTERLACED; hvfb_probe()
832 strcpy(info->fix.id, KBUILD_MODNAME); hvfb_probe()
833 info->fix.type = FB_TYPE_PACKED_PIXELS; hvfb_probe()
834 info->fix.visual = FB_VISUAL_TRUECOLOR; hvfb_probe()
835 info->fix.line_length = screen_width * screen_depth / 8; hvfb_probe()
836 info->fix.accel = FB_ACCEL_NONE; hvfb_probe()
838 info->fbops = &hvfb_ops; hvfb_probe()
839 info->pseudo_palette = par->pseudo_palette; hvfb_probe()
846 ret = register_framebuffer(info); hvfb_probe()
862 hvfb_putmem(info); hvfb_probe()
868 framebuffer_release(info); hvfb_probe()
875 struct fb_info *info = hv_get_drvdata(hdev); hvfb_remove() local
876 struct hvfb_par *par = info->par; hvfb_remove()
884 unregister_framebuffer(info); hvfb_remove()
890 hvfb_putmem(info); hvfb_remove()
891 framebuffer_release(info); hvfb_remove()
584 hvfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) hvfb_setcolreg() argument
H A Dhecubafb.c105 unsigned char *buf = (unsigned char __force *)par->info->screen_base; hecubafb_dpy_update()
118 static void hecubafb_dpy_deferred_io(struct fb_info *info, hecubafb_dpy_deferred_io() argument
121 hecubafb_dpy_update(info->par); hecubafb_dpy_deferred_io()
124 static void hecubafb_fillrect(struct fb_info *info, hecubafb_fillrect() argument
127 struct hecubafb_par *par = info->par; hecubafb_fillrect()
129 sys_fillrect(info, rect); hecubafb_fillrect()
134 static void hecubafb_copyarea(struct fb_info *info, hecubafb_copyarea() argument
137 struct hecubafb_par *par = info->par; hecubafb_copyarea()
139 sys_copyarea(info, area); hecubafb_copyarea()
144 static void hecubafb_imageblit(struct fb_info *info, hecubafb_imageblit() argument
147 struct hecubafb_par *par = info->par; hecubafb_imageblit()
149 sys_imageblit(info, image); hecubafb_imageblit()
158 static ssize_t hecubafb_write(struct fb_info *info, const char __user *buf, hecubafb_write() argument
161 struct hecubafb_par *par = info->par; hecubafb_write()
167 if (info->state != FBINFO_STATE_RUNNING) hecubafb_write()
170 total_size = info->fix.smem_len; hecubafb_write()
187 dst = (void __force *) (info->screen_base + p); hecubafb_write()
216 struct fb_info *info; hecubafb_probe() local
238 info = framebuffer_alloc(sizeof(struct hecubafb_par), &dev->dev); hecubafb_probe()
239 if (!info) hecubafb_probe()
242 info->screen_base = (char __force __iomem *)videomemory; hecubafb_probe()
243 info->fbops = &hecubafb_ops; hecubafb_probe()
245 info->var = hecubafb_var; hecubafb_probe()
246 info->fix = hecubafb_fix; hecubafb_probe()
247 info->fix.smem_len = videomemorysize; hecubafb_probe()
248 par = info->par; hecubafb_probe()
249 par->info = info; hecubafb_probe()
254 info->flags = FBINFO_FLAG_DEFAULT | FBINFO_VIRTFB; hecubafb_probe()
256 info->fbdefio = &hecubafb_defio; hecubafb_probe()
257 fb_deferred_io_init(info); hecubafb_probe()
259 retval = register_framebuffer(info); hecubafb_probe()
262 platform_set_drvdata(dev, info); hecubafb_probe()
264 fb_info(info, "Hecuba frame buffer device, using %dK of video memory\n", hecubafb_probe()
274 framebuffer_release(info); hecubafb_probe()
284 struct fb_info *info = platform_get_drvdata(dev); hecubafb_remove() local
286 if (info) { hecubafb_remove()
287 struct hecubafb_par *par = info->par; hecubafb_remove()
288 fb_deferred_io_cleanup(info); hecubafb_remove()
289 unregister_framebuffer(info); hecubafb_remove()
290 vfree((void __force *)info->screen_base); hecubafb_remove()
294 framebuffer_release(info); hecubafb_remove()
H A Dleo.c208 static void leo_switch_from_graph(struct fb_info *info) leo_switch_from_graph() argument
210 struct leo_par *par = (struct leo_par *) info->par; leo_switch_from_graph()
218 par->extent = ((info->var.xres - 1) | leo_switch_from_graph()
219 ((info->var.yres - 1) << 16)); leo_switch_from_graph()
229 sbus_writel((info->var.xres-1) | ((info->var.yres-1) << 11), leo_switch_from_graph()
250 static int leo_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) leo_pan_display() argument
255 leo_switch_from_graph(info); leo_pan_display()
269 * @info: frame buffer info structure
273 unsigned transp, struct fb_info *info) leo_setcolreg()
275 struct leo_par *par = (struct leo_par *) info->par; leo_setcolreg()
311 * @info: frame buffer structure that represents a single frame buffer
313 static int leo_blank(int blank, struct fb_info *info) leo_blank() argument
315 struct leo_par *par = (struct leo_par *) info->par; leo_blank()
415 static int leo_mmap(struct fb_info *info, struct vm_area_struct *vma) leo_mmap() argument
417 struct leo_par *par = (struct leo_par *)info->par; leo_mmap()
420 info->fix.smem_start, info->fix.smem_len, leo_mmap()
424 static int leo_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) leo_ioctl() argument
426 return sbusfb_ioctl_helper(cmd, arg, info, leo_ioctl()
427 FBTYPE_SUNLEO, 32, info->fix.smem_len); leo_ioctl()
435 leo_init_fix(struct fb_info *info, struct device_node *dp) leo_init_fix() argument
437 strlcpy(info->fix.id, dp->name, sizeof(info->fix.id)); leo_init_fix()
439 info->fix.type = FB_TYPE_PACKED_PIXELS; leo_init_fix()
440 info->fix.visual = FB_VISUAL_TRUECOLOR; leo_init_fix()
442 info->fix.line_length = 8192; leo_init_fix()
444 info->fix.accel = FB_ACCEL_SUN_LEO; leo_init_fix()
447 static void leo_wid_put(struct fb_info *info, struct fb_wid_list *wl) leo_wid_put() argument
449 struct leo_par *par = (struct leo_par *) info->par; leo_wid_put()
485 static void leo_init_wids(struct fb_info *info) leo_init_wids() argument
495 leo_wid_put(info, &wl); leo_init_wids()
498 leo_wid_put(info, &wl); leo_init_wids()
501 leo_wid_put(info, &wl); leo_init_wids()
505 leo_wid_put(info, &wl); leo_init_wids()
508 static void leo_init_hw(struct fb_info *info) leo_init_hw() argument
510 struct leo_par *par = (struct leo_par *) info->par; leo_init_hw()
517 leo_switch_from_graph(info); leo_init_hw()
532 static void leo_unmap_regs(struct platform_device *op, struct fb_info *info, leo_unmap_regs() argument
546 if (info->screen_base) leo_unmap_regs()
547 of_iounmap(&op->resource[0], info->screen_base, 0x800000); leo_unmap_regs()
553 struct fb_info *info; leo_probe() local
557 info = framebuffer_alloc(sizeof(struct leo_par), &op->dev); leo_probe()
560 if (!info) leo_probe()
562 par = info->par; leo_probe()
566 info->fix.smem_start = op->resource[0].start; leo_probe()
569 sbusfb_fill_var(&info->var, dp, 32); leo_probe()
570 leo_fixup_var_rgb(&info->var); leo_probe()
573 info->var.xres); leo_probe()
574 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); leo_probe()
591 info->screen_base = leo_probe()
599 !info->screen_base) leo_probe()
602 info->flags = FBINFO_DEFAULT; leo_probe()
603 info->fbops = &leo_ops; leo_probe()
604 info->pseudo_palette = par->clut_data; leo_probe()
606 leo_init_wids(info); leo_probe()
607 leo_init_hw(info); leo_probe()
609 leo_blank(FB_BLANK_UNBLANK, info); leo_probe()
611 if (fb_alloc_cmap(&info->cmap, 256, 0)) leo_probe()
614 leo_init_fix(info, dp); leo_probe()
616 err = register_framebuffer(info); leo_probe()
620 dev_set_drvdata(&op->dev, info); leo_probe()
624 par->which_io, info->fix.smem_start); leo_probe()
629 fb_dealloc_cmap(&info->cmap); leo_probe()
632 leo_unmap_regs(op, info, par); leo_probe()
633 framebuffer_release(info); leo_probe()
641 struct fb_info *info = dev_get_drvdata(&op->dev); leo_remove() local
642 struct leo_par *par = info->par; leo_remove()
644 unregister_framebuffer(info); leo_remove()
645 fb_dealloc_cmap(&info->cmap); leo_remove()
647 leo_unmap_regs(op, info, par); leo_remove()
649 framebuffer_release(info); leo_remove()
271 leo_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) leo_setcolreg() argument
/linux-4.1.27/drivers/input/misc/
H A Dtwl6040-vibra.c70 struct vibra_info *info = data; twl6040_vib_irq_handler() local
71 struct twl6040 *twl6040 = info->twl6040; twl6040_vib_irq_handler()
76 dev_warn(info->dev, "Left Vibrator overcurrent detected\n"); twl6040_vib_irq_handler()
81 dev_warn(info->dev, "Right Vibrator overcurrent detected\n"); twl6040_vib_irq_handler()
89 static void twl6040_vibra_enable(struct vibra_info *info) twl6040_vibra_enable() argument
91 struct twl6040 *twl6040 = info->twl6040; twl6040_vibra_enable()
94 ret = regulator_bulk_enable(ARRAY_SIZE(info->supplies), info->supplies); twl6040_vibra_enable()
96 dev_err(info->dev, "failed to enable regulators %d\n", ret); twl6040_vibra_enable()
100 twl6040_power(info->twl6040, 1); twl6040_vibra_enable()
119 info->enabled = true; twl6040_vibra_enable()
122 static void twl6040_vibra_disable(struct vibra_info *info) twl6040_vibra_disable() argument
124 struct twl6040 *twl6040 = info->twl6040; twl6040_vibra_disable()
128 twl6040_power(info->twl6040, 0); twl6040_vibra_disable()
130 regulator_bulk_disable(ARRAY_SIZE(info->supplies), info->supplies); twl6040_vibra_disable()
132 info->enabled = false; twl6040_vibra_disable()
159 static void twl6040_vibra_set_effect(struct vibra_info *info) twl6040_vibra_set_effect() argument
161 struct twl6040 *twl6040 = info->twl6040; twl6040_vibra_set_effect()
166 volt = regulator_get_voltage(info->supplies[0].consumer) / 1000; twl6040_vibra_set_effect()
167 vibdatl = twl6040_vibra_code(volt, info->vibldrv_res, twl6040_vibra_set_effect()
168 info->viblmotor_res, twl6040_vibra_set_effect()
169 info->weak_speed, info->direction); twl6040_vibra_set_effect()
172 volt = regulator_get_voltage(info->supplies[1].consumer) / 1000; twl6040_vibra_set_effect()
173 vibdatr = twl6040_vibra_code(volt, info->vibrdrv_res, twl6040_vibra_set_effect()
174 info->vibrmotor_res, twl6040_vibra_set_effect()
175 info->strong_speed, info->direction); twl6040_vibra_set_effect()
183 struct vibra_info *info = container_of(work, vibra_play_work() local
186 mutex_lock(&info->mutex); vibra_play_work()
188 if (info->weak_speed || info->strong_speed) { vibra_play_work()
189 if (!info->enabled) vibra_play_work()
190 twl6040_vibra_enable(info); vibra_play_work()
192 twl6040_vibra_set_effect(info); vibra_play_work()
193 } else if (info->enabled) vibra_play_work()
194 twl6040_vibra_disable(info); vibra_play_work()
196 mutex_unlock(&info->mutex); vibra_play_work()
202 struct vibra_info *info = input_get_drvdata(input); vibra_play() local
206 ret = twl6040_get_vibralr_status(info->twl6040); vibra_play()
212 info->weak_speed = effect->u.rumble.weak_magnitude; vibra_play()
213 info->strong_speed = effect->u.rumble.strong_magnitude; vibra_play()
214 info->direction = effect->direction < EFFECT_DIR_180_DEG ? 1 : -1; vibra_play()
216 ret = queue_work(info->workqueue, &info->play_work); vibra_play()
227 struct vibra_info *info = input_get_drvdata(input); twl6040_vibra_close() local
229 cancel_work_sync(&info->play_work); twl6040_vibra_close()
231 mutex_lock(&info->mutex); twl6040_vibra_close()
233 if (info->enabled) twl6040_vibra_close()
234 twl6040_vibra_disable(info); twl6040_vibra_close()
236 mutex_unlock(&info->mutex); twl6040_vibra_close()
242 struct vibra_info *info = platform_get_drvdata(pdev); twl6040_vibra_suspend() local
244 mutex_lock(&info->mutex); twl6040_vibra_suspend()
246 if (info->enabled) twl6040_vibra_suspend()
247 twl6040_vibra_disable(info); twl6040_vibra_suspend()
249 mutex_unlock(&info->mutex); twl6040_vibra_suspend()
260 struct vibra_info *info; twl6040_vibra_probe() local
272 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); twl6040_vibra_probe()
273 if (!info) { twl6040_vibra_probe()
279 info->dev = &pdev->dev; twl6040_vibra_probe()
281 info->twl6040 = dev_get_drvdata(pdev->dev.parent); twl6040_vibra_probe()
284 &info->vibldrv_res); twl6040_vibra_probe()
286 &info->vibrdrv_res); twl6040_vibra_probe()
288 &info->viblmotor_res); twl6040_vibra_probe()
290 &info->vibrmotor_res); twl6040_vibra_probe()
296 if ((!info->vibldrv_res && !info->viblmotor_res) || twl6040_vibra_probe()
297 (!info->vibrdrv_res && !info->vibrmotor_res)) { twl6040_vibra_probe()
298 dev_err(info->dev, "invalid vibra driver/motor resistance\n"); twl6040_vibra_probe()
302 info->irq = platform_get_irq(pdev, 0); twl6040_vibra_probe()
303 if (info->irq < 0) { twl6040_vibra_probe()
304 dev_err(info->dev, "invalid irq\n"); twl6040_vibra_probe()
308 mutex_init(&info->mutex); twl6040_vibra_probe()
310 error = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, twl6040_vibra_probe()
312 "twl6040_irq_vib", info); twl6040_vibra_probe()
314 dev_err(info->dev, "VIB IRQ request failed: %d\n", error); twl6040_vibra_probe()
318 info->supplies[0].supply = "vddvibl"; twl6040_vibra_probe()
319 info->supplies[1].supply = "vddvibr"; twl6040_vibra_probe()
325 ARRAY_SIZE(info->supplies), twl6040_vibra_probe()
326 info->supplies); twl6040_vibra_probe()
328 dev_err(info->dev, "couldn't get regulators %d\n", error); twl6040_vibra_probe()
333 error = regulator_set_voltage(info->supplies[0].consumer, twl6040_vibra_probe()
336 dev_err(info->dev, "failed to set VDDVIBL volt %d\n", twl6040_vibra_probe()
343 error = regulator_set_voltage(info->supplies[1].consumer, twl6040_vibra_probe()
346 dev_err(info->dev, "failed to set VDDVIBR volt %d\n", twl6040_vibra_probe()
352 INIT_WORK(&info->play_work, vibra_play_work); twl6040_vibra_probe()
354 info->input_dev = devm_input_allocate_device(&pdev->dev); twl6040_vibra_probe()
355 if (!info->input_dev) { twl6040_vibra_probe()
356 dev_err(info->dev, "couldn't allocate input device\n"); twl6040_vibra_probe()
360 input_set_drvdata(info->input_dev, info); twl6040_vibra_probe()
362 info->input_dev->name = "twl6040:vibrator"; twl6040_vibra_probe()
363 info->input_dev->id.version = 1; twl6040_vibra_probe()
364 info->input_dev->dev.parent = pdev->dev.parent; twl6040_vibra_probe()
365 info->input_dev->close = twl6040_vibra_close; twl6040_vibra_probe()
366 __set_bit(FF_RUMBLE, info->input_dev->ffbit); twl6040_vibra_probe()
368 error = input_ff_create_memless(info->input_dev, NULL, vibra_play); twl6040_vibra_probe()
370 dev_err(info->dev, "couldn't register vibrator to FF\n"); twl6040_vibra_probe()
374 error = input_register_device(info->input_dev); twl6040_vibra_probe()
376 dev_err(info->dev, "couldn't register input device\n"); twl6040_vibra_probe()
380 platform_set_drvdata(pdev, info); twl6040_vibra_probe()
H A Dtwl4030-vibra.c66 static void vibra_enable(struct vibra_info *info) vibra_enable() argument
80 info->enabled = true; vibra_enable()
83 static void vibra_disable(struct vibra_info *info) vibra_disable() argument
96 info->enabled = false; vibra_disable()
101 struct vibra_info *info = container_of(work, vibra_play_work() local
107 dir = info->direction; vibra_play_work()
108 pwm = info->speed; vibra_play_work()
112 if (pwm && (!info->coexist || !(reg & TWL4030_VIBRA_SEL))) { vibra_play_work()
114 if (!info->enabled) vibra_play_work()
115 vibra_enable(info); vibra_play_work()
129 if (info->enabled) vibra_play_work()
130 vibra_disable(info); vibra_play_work()
139 struct vibra_info *info = input_get_drvdata(input); vibra_play() local
141 info->speed = effect->u.rumble.strong_magnitude >> 8; vibra_play()
142 if (!info->speed) vibra_play()
143 info->speed = effect->u.rumble.weak_magnitude >> 9; vibra_play()
144 info->direction = effect->direction < EFFECT_DIR_180_DEG ? 0 : 1; vibra_play()
145 schedule_work(&info->play_work); vibra_play()
151 struct vibra_info *info = input_get_drvdata(input); twl4030_vibra_close() local
153 cancel_work_sync(&info->play_work); twl4030_vibra_close()
155 if (info->enabled) twl4030_vibra_close()
156 vibra_disable(info); twl4030_vibra_close()
163 struct vibra_info *info = platform_get_drvdata(pdev); twl4030_vibra_suspend() local
165 if (info->enabled) twl4030_vibra_suspend()
166 vibra_disable(info); twl4030_vibra_suspend()
198 struct vibra_info *info; twl4030_vibra_probe() local
206 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); twl4030_vibra_probe()
207 if (!info) twl4030_vibra_probe()
210 info->dev = &pdev->dev; twl4030_vibra_probe()
211 info->coexist = twl4030_vibra_check_coexist(pdata, twl4030_core_node); twl4030_vibra_probe()
212 INIT_WORK(&info->play_work, vibra_play_work); twl4030_vibra_probe()
214 info->input_dev = devm_input_allocate_device(&pdev->dev); twl4030_vibra_probe()
215 if (info->input_dev == NULL) { twl4030_vibra_probe()
220 input_set_drvdata(info->input_dev, info); twl4030_vibra_probe()
222 info->input_dev->name = "twl4030:vibrator"; twl4030_vibra_probe()
223 info->input_dev->id.version = 1; twl4030_vibra_probe()
224 info->input_dev->dev.parent = pdev->dev.parent; twl4030_vibra_probe()
225 info->input_dev->close = twl4030_vibra_close; twl4030_vibra_probe()
226 __set_bit(FF_RUMBLE, info->input_dev->ffbit); twl4030_vibra_probe()
228 ret = input_ff_create_memless(info->input_dev, NULL, vibra_play); twl4030_vibra_probe()
234 ret = input_register_device(info->input_dev); twl4030_vibra_probe()
242 platform_set_drvdata(pdev, info); twl4030_vibra_probe()
246 input_ff_destroy(info->input_dev); twl4030_vibra_probe()
H A D88pm80x_onkey.c45 struct pm80x_onkey_info *info = data; pm80x_onkey_handler() local
49 ret = regmap_read(info->map, PM800_STATUS_1, &val); pm80x_onkey_handler()
51 dev_err(info->idev->dev.parent, "failed to read status: %d\n", ret); pm80x_onkey_handler()
56 input_report_key(info->idev, KEY_POWER, val); pm80x_onkey_handler()
57 input_sync(info->idev); pm80x_onkey_handler()
69 struct pm80x_onkey_info *info; pm80x_onkey_probe() local
72 info = kzalloc(sizeof(struct pm80x_onkey_info), GFP_KERNEL); pm80x_onkey_probe()
73 if (!info) pm80x_onkey_probe()
76 info->pm80x = chip; pm80x_onkey_probe()
78 info->irq = platform_get_irq(pdev, 0); pm80x_onkey_probe()
79 if (info->irq < 0) { pm80x_onkey_probe()
85 info->map = info->pm80x->regmap; pm80x_onkey_probe()
86 if (!info->map) { pm80x_onkey_probe()
92 info->idev = input_allocate_device(); pm80x_onkey_probe()
93 if (!info->idev) { pm80x_onkey_probe()
99 info->idev->name = "88pm80x_on"; pm80x_onkey_probe()
100 info->idev->phys = "88pm80x_on/input0"; pm80x_onkey_probe()
101 info->idev->id.bustype = BUS_I2C; pm80x_onkey_probe()
102 info->idev->dev.parent = &pdev->dev; pm80x_onkey_probe()
103 info->idev->evbit[0] = BIT_MASK(EV_KEY); pm80x_onkey_probe()
104 __set_bit(KEY_POWER, info->idev->keybit); pm80x_onkey_probe()
106 err = pm80x_request_irq(info->pm80x, info->irq, pm80x_onkey_handler, pm80x_onkey_probe()
107 IRQF_ONESHOT, "onkey", info); pm80x_onkey_probe()
110 info->irq, err); pm80x_onkey_probe()
114 err = input_register_device(info->idev); pm80x_onkey_probe()
120 platform_set_drvdata(pdev, info); pm80x_onkey_probe()
123 regmap_update_bits(info->map, PM800_RTC_MISC4, PM800_LONG_ONKEY_EN, pm80x_onkey_probe()
126 regmap_update_bits(info->map, PM800_RTC_MISC3, pm80x_onkey_probe()
134 pm80x_free_irq(info->pm80x, info->irq, info); pm80x_onkey_probe()
136 input_free_device(info->idev); pm80x_onkey_probe()
138 kfree(info); pm80x_onkey_probe()
144 struct pm80x_onkey_info *info = platform_get_drvdata(pdev); pm80x_onkey_remove() local
147 pm80x_free_irq(info->pm80x, info->irq, info); pm80x_onkey_remove()
148 input_unregister_device(info->idev); pm80x_onkey_remove()
149 kfree(info); pm80x_onkey_remove()
H A Dxen-kbdfront.c55 struct xenkbd_info *info = dev_id; input_handler() local
56 struct xenkbd_page *page = info->page; input_handler()
68 dev = info->ptr; input_handler()
79 if (test_bit(event->key.keycode, info->kbd->keybit)) input_handler()
80 dev = info->kbd; input_handler()
81 if (test_bit(event->key.keycode, info->ptr->keybit)) input_handler()
82 dev = info->ptr; input_handler()
103 notify_remote_via_irq(info->irq); input_handler()
112 struct xenkbd_info *info; xenkbd_probe() local
115 info = kzalloc(sizeof(*info), GFP_KERNEL); xenkbd_probe()
116 if (!info) { xenkbd_probe()
117 xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure"); xenkbd_probe()
120 dev_set_drvdata(&dev->dev, info); xenkbd_probe()
121 info->xbdev = dev; xenkbd_probe()
122 info->irq = -1; xenkbd_probe()
123 info->gref = -1; xenkbd_probe()
124 snprintf(info->phys, sizeof(info->phys), "xenbus/%s", dev->nodename); xenkbd_probe()
126 info->page = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO); xenkbd_probe()
127 if (!info->page) xenkbd_probe()
140 kbd->phys = info->phys; xenkbd_probe()
157 info->kbd = kbd; xenkbd_probe()
164 ptr->phys = info->phys; xenkbd_probe()
189 info->ptr = ptr; xenkbd_probe()
191 ret = xenkbd_connect_backend(dev, info); xenkbd_probe()
207 struct xenkbd_info *info = dev_get_drvdata(&dev->dev); xenkbd_resume() local
209 xenkbd_disconnect_backend(info); xenkbd_resume()
210 memset(info->page, 0, PAGE_SIZE); xenkbd_resume()
211 return xenkbd_connect_backend(dev, info); xenkbd_resume()
216 struct xenkbd_info *info = dev_get_drvdata(&dev->dev); xenkbd_remove() local
218 xenkbd_disconnect_backend(info); xenkbd_remove()
219 if (info->kbd) xenkbd_remove()
220 input_unregister_device(info->kbd); xenkbd_remove()
221 if (info->ptr) xenkbd_remove()
222 input_unregister_device(info->ptr); xenkbd_remove()
223 free_page((unsigned long)info->page); xenkbd_remove()
224 kfree(info); xenkbd_remove()
229 struct xenkbd_info *info) xenkbd_connect_backend()
235 virt_to_mfn(info->page), 0); xenkbd_connect_backend()
238 info->gref = ret; xenkbd_connect_backend()
244 0, dev->devicetype, info); xenkbd_connect_backend()
249 info->irq = ret; xenkbd_connect_backend()
258 virt_to_mfn(info->page)); xenkbd_connect_backend()
261 ret = xenbus_printf(xbt, dev->nodename, "page-gref", "%u", info->gref); xenkbd_connect_backend()
283 unbind_from_irqhandler(info->irq, info); xenkbd_connect_backend()
284 info->irq = -1; xenkbd_connect_backend()
288 gnttab_end_foreign_access(info->gref, 0, 0UL); xenkbd_connect_backend()
289 info->gref = -1; xenkbd_connect_backend()
293 static void xenkbd_disconnect_backend(struct xenkbd_info *info) xenkbd_disconnect_backend() argument
295 if (info->irq >= 0) xenkbd_disconnect_backend()
296 unbind_from_irqhandler(info->irq, info); xenkbd_disconnect_backend()
297 info->irq = -1; xenkbd_disconnect_backend()
298 if (info->gref >= 0) xenkbd_disconnect_backend()
299 gnttab_end_foreign_access(info->gref, 0, 0UL); xenkbd_disconnect_backend()
300 info->gref = -1; xenkbd_disconnect_backend()
306 struct xenkbd_info *info = dev_get_drvdata(&dev->dev); xenkbd_backend_changed() local
319 ret = xenbus_scanf(XBT_NIL, info->xbdev->otherend, xenkbd_backend_changed()
324 ret = xenbus_printf(XBT_NIL, info->xbdev->nodename, xenkbd_backend_changed()
343 if (xenbus_scanf(XBT_NIL, info->xbdev->otherend, xenkbd_backend_changed()
345 input_set_abs_params(info->ptr, ABS_X, 0, val, 0, 0); xenkbd_backend_changed()
347 if (xenbus_scanf(XBT_NIL, info->xbdev->otherend, xenkbd_backend_changed()
349 input_set_abs_params(info->ptr, ABS_Y, 0, val, 0, 0); xenkbd_backend_changed()
228 xenkbd_connect_backend(struct xenbus_device *dev, struct xenkbd_info *info) xenkbd_connect_backend() argument
/linux-4.1.27/drivers/isdn/i4l/
H A Disdn_tty.c61 isdn_tty_try_read(modem_info *info, struct sk_buff *skb) isdn_tty_try_read() argument
63 struct tty_port *port = &info->port; isdn_tty_try_read()
68 if (!info->online) isdn_tty_try_read()
71 if (!(info->mcr & UART_MCR_RTS)) isdn_tty_try_read()
104 if (info->emu.mdmreg[REG_CPPP] & BIT_CPPP) isdn_tty_try_read()
125 modem_info *info; isdn_tty_readmodem() local
132 info = &dev->mdm.info[midx]; isdn_tty_readmodem()
133 if (!info->online) isdn_tty_readmodem()
138 isdn_audio_eval_dtmf(info); isdn_tty_readmodem()
139 if ((info->vonline & 1) && (info->emu.vpar[1])) isdn_tty_readmodem()
140 isdn_audio_eval_silence(info); isdn_tty_readmodem()
142 if (info->mcr & UART_MCR_RTS) { isdn_tty_readmodem()
144 if (!(info->emu.mdmreg[REG_CPPP] & BIT_CPPP)) isdn_tty_readmodem()
145 r = isdn_readbchan_tty(info->isdn_driver, isdn_tty_readmodem()
146 info->isdn_channel, isdn_tty_readmodem()
147 &info->port, 0); isdn_tty_readmodem()
149 r = isdn_readbchan_tty(info->isdn_driver, isdn_tty_readmodem()
150 info->isdn_channel, isdn_tty_readmodem()
151 &info->port, 1); isdn_tty_readmodem()
153 tty_flip_buffer_push(&info->port); isdn_tty_readmodem()
158 info->rcvsched = 0; isdn_tty_readmodem()
161 info->rcvsched = 1; isdn_tty_readmodem()
175 modem_info *info; isdn_tty_rcv_skb() local
181 info = &dev->mdm.info[midx]; isdn_tty_rcv_skb()
185 if ((info->vonline) && (!info->emu.vpar[4])) isdn_tty_rcv_skb()
186 isdn_audio_calc_dtmf(info, skb->data, skb->len, ifmt); isdn_tty_rcv_skb()
187 if ((info->vonline & 1) && (info->emu.vpar[1])) isdn_tty_rcv_skb()
188 isdn_audio_calc_silence(info, skb->data, skb->len, ifmt); isdn_tty_rcv_skb()
190 if ((info->online < 2) isdn_tty_rcv_skb()
192 && (!(info->vonline & 1)) isdn_tty_rcv_skb()
199 if (info->emu.mdmreg[REG_T70] & BIT_T70) { isdn_tty_rcv_skb()
200 if (info->emu.mdmreg[REG_T70] & BIT_T70_EXT) { isdn_tty_rcv_skb()
215 if (info->vonline & 1) { isdn_tty_rcv_skb()
217 switch (info->emu.vpar[3]) { isdn_tty_rcv_skb()
225 skb_trim(skb, isdn_audio_xlaw2adpcm(info->adpcmr, isdn_tty_rcv_skb()
247 if (info->faxonline & 2) { isdn_tty_rcv_skb()
248 isdn_tty_fax_bitorder(info, skb); isdn_tty_rcv_skb()
256 spin_lock_irqsave(&info->readlock, flags); isdn_tty_rcv_skb()
258 if (isdn_tty_try_read(info, skb)) { isdn_tty_rcv_skb()
259 spin_unlock_irqrestore(&info->readlock, flags); isdn_tty_rcv_skb()
272 spin_unlock_irqrestore(&info->readlock, flags); isdn_tty_rcv_skb()
274 if ((dev->modempoll) && (info->rcvsched)) isdn_tty_rcv_skb()
280 isdn_tty_cleanup_xmit(modem_info *info) isdn_tty_cleanup_xmit() argument
282 skb_queue_purge(&info->xmit_queue); isdn_tty_cleanup_xmit()
284 skb_queue_purge(&info->dtmf_queue); isdn_tty_cleanup_xmit()
289 isdn_tty_tint(modem_info *info) isdn_tty_tint() argument
291 struct sk_buff *skb = skb_dequeue(&info->xmit_queue); isdn_tty_tint()
297 if ((slen = isdn_writebuf_skb_stub(info->isdn_driver, isdn_tty_tint()
298 info->isdn_channel, 1, skb)) == len) { isdn_tty_tint()
299 struct tty_struct *tty = info->port.tty; isdn_tty_tint()
300 info->send_outstanding++; isdn_tty_tint()
301 info->msr &= ~UART_MSR_CTS; isdn_tty_tint()
302 info->lsr &= ~UART_LSR_TEMT; isdn_tty_tint()
311 skb_queue_head(&info->xmit_queue, skb); isdn_tty_tint()
330 isdn_tty_handleDLEdown(modem_info *info, atemu *m, int len) isdn_tty_handleDLEdown() argument
332 unsigned char *p = &info->port.xmit_buf[info->xmit_count]; isdn_tty_handleDLEdown()
348 info->vonline |= 4; isdn_tty_handleDLEdown()
352 info->vonline &= ~1; isdn_tty_handleDLEdown()
356 info->line); isdn_tty_handleDLEdown()
358 isdn_tty_at_cout("\020\003", info); isdn_tty_handleDLEdown()
359 if (!info->vonline) { isdn_tty_handleDLEdown()
363 info->line); isdn_tty_handleDLEdown()
365 isdn_tty_at_cout("\r\nVCON\r\n", info); isdn_tty_handleDLEdown()
421 isdn_tty_senddown(modem_info *info) isdn_tty_senddown() argument
431 if (info->vonline & 4) { isdn_tty_senddown()
432 info->vonline &= ~6; isdn_tty_senddown()
433 if (!info->vonline) { isdn_tty_senddown()
437 info->line); isdn_tty_senddown()
439 isdn_tty_at_cout("\r\nVCON\r\n", info); isdn_tty_senddown()
443 if (!(buflen = info->xmit_count)) isdn_tty_senddown()
445 if ((info->emu.mdmreg[REG_CTS] & BIT_CTS) != 0) isdn_tty_senddown()
446 info->msr &= ~UART_MSR_CTS; isdn_tty_senddown()
447 info->lsr &= ~UART_LSR_TEMT; isdn_tty_senddown()
448 /* info->xmit_count is modified here and in isdn_tty_write(). isdn_tty_senddown()
452 atomic_inc(&info->xmit_lock); isdn_tty_senddown()
453 if (!(atomic_dec_and_test(&info->xmit_lock))) isdn_tty_senddown()
455 if (info->isdn_driver < 0) { isdn_tty_senddown()
456 info->xmit_count = 0; isdn_tty_senddown()
459 skb_res = dev->drv[info->isdn_driver]->interface->hl_hdrlen + 4; isdn_tty_senddown()
461 if (info->vonline & 2) isdn_tty_senddown()
462 audio_len = buflen * voice_cf[info->emu.vpar[3]]; isdn_tty_senddown()
472 info->line); isdn_tty_senddown()
476 memcpy(skb_put(skb, buflen), info->port.xmit_buf, buflen); isdn_tty_senddown()
477 info->xmit_count = 0; isdn_tty_senddown()
479 if (info->vonline & 2) { isdn_tty_senddown()
489 switch (info->emu.vpar[3]) { isdn_tty_senddown()
496 audio_len = isdn_audio_adpcm2xlaw(info->adpcms, isdn_tty_senddown()
519 if (info->emu.mdmreg[REG_T70] & BIT_T70) { isdn_tty_senddown()
521 if (info->emu.mdmreg[REG_T70] & BIT_T70_EXT) isdn_tty_senddown()
526 skb_queue_tail(&info->xmit_queue, skb); isdn_tty_senddown()
545 modem_info *info = (modem_info *) data; isdn_tty_modem_do_ncarrier() local
546 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_modem_do_ncarrier()
555 isdn_tty_modem_ncarrier(modem_info *info) isdn_tty_modem_ncarrier() argument
557 if (info->ncarrier) { isdn_tty_modem_ncarrier()
558 info->nc_timer.expires = jiffies + HZ; isdn_tty_modem_ncarrier()
559 add_timer(&info->nc_timer); isdn_tty_modem_ncarrier()
596 isdn_tty_dial(char *n, modem_info *info, atemu *m) isdn_tty_dial() argument
628 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); isdn_tty_dial()
630 info->isdn_driver = dev->drvmap[i]; isdn_tty_dial()
631 info->isdn_channel = dev->chanmap[i]; isdn_tty_dial()
632 info->drv_index = i; isdn_tty_dial()
633 dev->m_idx[i] = info->line; isdn_tty_dial()
635 info->last_dir = 1; isdn_tty_dial()
636 strcpy(info->last_num, n); isdn_tty_dial()
639 cmd.driver = info->isdn_driver; isdn_tty_dial()
640 cmd.arg = info->isdn_channel; isdn_tty_dial()
643 strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver)); isdn_tty_dial()
644 cmd.driver = info->isdn_driver; isdn_tty_dial()
647 cmd.driver = info->isdn_driver; isdn_tty_dial()
649 info->last_l2 = l2; isdn_tty_dial()
650 cmd.arg = info->isdn_channel + (l2 << 8); isdn_tty_dial()
652 cmd.driver = info->isdn_driver; isdn_tty_dial()
654 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); isdn_tty_dial()
657 cmd.parm.fax = info->fax; isdn_tty_dial()
658 info->fax->direction = ISDN_TTY_FAX_CONN_OUT; isdn_tty_dial()
662 cmd.driver = info->isdn_driver; isdn_tty_dial()
663 cmd.arg = info->isdn_channel; isdn_tty_dial()
666 isdn_map_eaz2msn(m->msn, info->isdn_driver)); isdn_tty_dial()
670 info->dialing = 1; isdn_tty_dial()
671 info->emu.carrierwait = 0; isdn_tty_dial()
684 isdn_tty_modem_hup(modem_info *info, int local) isdn_tty_modem_hup() argument
689 if (!info) isdn_tty_modem_hup()
692 di = info->isdn_driver; isdn_tty_modem_hup()
693 ch = info->isdn_channel; isdn_tty_modem_hup()
697 info->isdn_driver = -1; isdn_tty_modem_hup()
698 info->isdn_channel = -1; isdn_tty_modem_hup()
701 printk(KERN_DEBUG "Mhup ttyI%d\n", info->line); isdn_tty_modem_hup()
703 info->rcvsched = 0; isdn_tty_modem_hup()
704 isdn_tty_flush_buffer(info->port.tty); isdn_tty_modem_hup()
705 if (info->online) { isdn_tty_modem_hup()
706 info->last_lhup = local; isdn_tty_modem_hup()
707 info->online = 0; isdn_tty_modem_hup()
708 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_modem_hup()
711 info->vonline = 0; isdn_tty_modem_hup()
713 info->faxonline = 0; isdn_tty_modem_hup()
714 info->fax->phase = ISDN_FAX_PHASE_IDLE; isdn_tty_modem_hup()
716 info->emu.vpar[4] = 0; isdn_tty_modem_hup()
717 info->emu.vpar[5] = 8; isdn_tty_modem_hup()
718 kfree(info->dtmf_state); isdn_tty_modem_hup()
719 info->dtmf_state = NULL; isdn_tty_modem_hup()
720 kfree(info->silence_state); isdn_tty_modem_hup()
721 info->silence_state = NULL; isdn_tty_modem_hup()
722 kfree(info->adpcms); isdn_tty_modem_hup()
723 info->adpcms = NULL; isdn_tty_modem_hup()
724 kfree(info->adpcmr); isdn_tty_modem_hup()
725 info->adpcmr = NULL; isdn_tty_modem_hup()
727 if ((info->msr & UART_MSR_RI) && isdn_tty_modem_hup()
728 (info->emu.mdmreg[REG_RUNG] & BIT_RUNG)) isdn_tty_modem_hup()
729 isdn_tty_modem_result(RESULT_RUNG, info); isdn_tty_modem_hup()
730 info->msr &= ~(UART_MSR_DCD | UART_MSR_RI); isdn_tty_modem_hup()
731 info->lsr |= UART_LSR_TEMT; isdn_tty_modem_hup()
741 info->emu.mdmreg[REG_RINGCNT] = 0; isdn_tty_modem_hup()
744 if (info->drv_index >= 0) { isdn_tty_modem_hup()
745 dev->m_idx[info->drv_index] = -1; isdn_tty_modem_hup()
746 info->drv_index = -1; isdn_tty_modem_hup()
765 isdn_tty_suspend(char *id, modem_info *info, atemu *m) isdn_tty_suspend() argument
771 if (!info) isdn_tty_suspend()
775 printk(KERN_DEBUG "Msusp ttyI%d\n", info->line); isdn_tty_suspend()
778 if ((info->isdn_driver >= 0)) { isdn_tty_suspend()
782 cmd.parm.cmsg.adr.Controller = info->isdn_driver + 1; isdn_tty_suspend()
791 cmd.driver = info->isdn_driver; isdn_tty_suspend()
792 cmd.arg = info->isdn_channel; isdn_tty_suspend()
805 isdn_tty_resume(char *id, modem_info *info, atemu *m) isdn_tty_resume() argument
839 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); isdn_tty_resume()
841 info->isdn_driver = dev->drvmap[i]; isdn_tty_resume()
842 info->isdn_channel = dev->chanmap[i]; isdn_tty_resume()
843 info->drv_index = i; isdn_tty_resume()
844 dev->m_idx[i] = info->line; isdn_tty_resume()
846 info->last_dir = 1; isdn_tty_resume()
847 // strcpy(info->last_num, n); isdn_tty_resume()
850 cmd.driver = info->isdn_driver; isdn_tty_resume()
851 cmd.arg = info->isdn_channel; isdn_tty_resume()
854 strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver)); isdn_tty_resume()
855 cmd.driver = info->isdn_driver; isdn_tty_resume()
858 cmd.driver = info->isdn_driver; isdn_tty_resume()
860 info->last_l2 = l2; isdn_tty_resume()
861 cmd.arg = info->isdn_channel + (l2 << 8); isdn_tty_resume()
863 cmd.driver = info->isdn_driver; isdn_tty_resume()
865 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); isdn_tty_resume()
867 cmd.driver = info->isdn_driver; isdn_tty_resume()
868 cmd.arg = info->isdn_channel; isdn_tty_resume()
872 cmd.parm.cmsg.adr.Controller = info->isdn_driver + 1; isdn_tty_resume()
881 info->dialing = 1; isdn_tty_resume()
894 isdn_tty_send_msg(modem_info *info, atemu *m, char *msg) isdn_tty_send_msg() argument
909 isdn_tty_modem_result(RESULT_ERROR, info); isdn_tty_send_msg()
934 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); isdn_tty_send_msg()
936 info->isdn_driver = dev->drvmap[i]; isdn_tty_send_msg()
937 info->isdn_channel = dev->chanmap[i]; isdn_tty_send_msg()
938 info->drv_index = i; isdn_tty_send_msg()
939 dev->m_idx[i] = info->line; isdn_tty_send_msg()
941 info->last_dir = 1; isdn_tty_send_msg()
944 cmd.driver = info->isdn_driver; isdn_tty_send_msg()
945 cmd.arg = info->isdn_channel; isdn_tty_send_msg()
948 strcpy(cmd.parm.num, isdn_map_eaz2msn(m->msn, info->isdn_driver)); isdn_tty_send_msg()
949 cmd.driver = info->isdn_driver; isdn_tty_send_msg()
952 cmd.driver = info->isdn_driver; isdn_tty_send_msg()
954 info->last_l2 = l2; isdn_tty_send_msg()
955 cmd.arg = info->isdn_channel + (l2 << 8); isdn_tty_send_msg()
957 cmd.driver = info->isdn_driver; isdn_tty_send_msg()
959 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); isdn_tty_send_msg()
961 cmd.driver = info->isdn_driver; isdn_tty_send_msg()
962 cmd.arg = info->isdn_channel; isdn_tty_send_msg()
966 cmd.parm.cmsg.adr.Controller = info->isdn_driver + 1; isdn_tty_send_msg()
971 /* info->dialing = 1; isdn_tty_send_msg()
980 isdn_tty_paranoia_check(modem_info *info, char *name, const char *routine) isdn_tty_paranoia_check() argument
983 if (!info) { isdn_tty_paranoia_check()
988 if (info->magic != ISDN_ASYNC_MAGIC) { isdn_tty_paranoia_check()
1002 isdn_tty_change_speed(modem_info *info) isdn_tty_change_speed() argument
1004 struct tty_port *port = &info->port; isdn_tty_change_speed()
1023 info->mcr |= UART_MCR_DTR; isdn_tty_change_speed()
1024 isdn_tty_modem_ncarrier(info); isdn_tty_change_speed()
1026 info->mcr &= ~UART_MCR_DTR; isdn_tty_change_speed()
1027 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) { isdn_tty_change_speed()
1031 if (info->online) isdn_tty_change_speed()
1032 info->ncarrier = 1; isdn_tty_change_speed()
1033 isdn_tty_modem_reset_regs(info, 0); isdn_tty_change_speed()
1034 isdn_tty_modem_hup(info, 1); isdn_tty_change_speed()
1054 isdn_tty_startup(modem_info *info) isdn_tty_startup() argument
1056 if (info->port.flags & ASYNC_INITIALIZED) isdn_tty_startup()
1060 printk(KERN_DEBUG "starting up ttyi%d ...\n", info->line); isdn_tty_startup()
1065 info->mcr = UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2; isdn_tty_startup()
1066 if (info->port.tty) isdn_tty_startup()
1067 clear_bit(TTY_IO_ERROR, &info->port.tty->flags); isdn_tty_startup()
1071 isdn_tty_change_speed(info); isdn_tty_startup()
1073 info->port.flags |= ASYNC_INITIALIZED; isdn_tty_startup()
1074 info->msr |= (UART_MSR_DSR | UART_MSR_CTS); isdn_tty_startup()
1075 info->send_outstanding = 0; isdn_tty_startup()
1084 isdn_tty_shutdown(modem_info *info) isdn_tty_shutdown() argument
1086 if (!(info->port.flags & ASYNC_INITIALIZED)) isdn_tty_shutdown()
1089 printk(KERN_DEBUG "Shutting down isdnmodem port %d ....\n", info->line); isdn_tty_shutdown()
1092 info->msr &= ~UART_MSR_RI; isdn_tty_shutdown()
1093 if (!info->port.tty || (info->port.tty->termios.c_cflag & HUPCL)) { isdn_tty_shutdown()
1094 info->mcr &= ~(UART_MCR_DTR | UART_MCR_RTS); isdn_tty_shutdown()
1095 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) { isdn_tty_shutdown()
1096 isdn_tty_modem_reset_regs(info, 0); isdn_tty_shutdown()
1100 isdn_tty_modem_hup(info, 1); isdn_tty_shutdown()
1103 if (info->port.tty) isdn_tty_shutdown()
1104 set_bit(TTY_IO_ERROR, &info->port.tty->flags); isdn_tty_shutdown()
1106 info->port.flags &= ~ASYNC_INITIALIZED; isdn_tty_shutdown()
1123 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_write() local
1124 atemu *m = &info->emu; isdn_tty_write()
1126 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_write")) isdn_tty_write()
1129 atomic_inc(&info->xmit_lock); isdn_tty_write()
1132 if (c > info->xmit_size - info->xmit_count) isdn_tty_write()
1133 c = info->xmit_size - info->xmit_count; isdn_tty_write()
1134 if (info->isdn_driver >= 0 && c > dev->drv[info->isdn_driver]->maxbufsize) isdn_tty_write()
1135 c = dev->drv[info->isdn_driver]->maxbufsize; isdn_tty_write()
1138 if ((info->online > 1) isdn_tty_write()
1140 || (info->vonline & 3) isdn_tty_write()
1144 if (!info->vonline) isdn_tty_write()
1149 memcpy(&info->port.xmit_buf[info->xmit_count], buf, c); isdn_tty_write()
1151 if (info->vonline) { isdn_tty_write()
1152 int cc = isdn_tty_handleDLEdown(info, m, c); isdn_tty_write()
1153 if (info->vonline & 2) { isdn_tty_write()
1159 info->msr |= UART_MSR_CTS; isdn_tty_write()
1160 info->lsr |= UART_LSR_TEMT; isdn_tty_write()
1162 info->xmit_count += cc; isdn_tty_write()
1164 if ((info->vonline & 3) == 1) { isdn_tty_write()
1169 info->vonline &= ~1; isdn_tty_write()
1173 info->line); isdn_tty_write()
1175 isdn_tty_at_cout("\020\003\r\nVCON\r\n", info); isdn_tty_write()
1179 if (TTY_IS_FCLASS1(info)) { isdn_tty_write()
1180 int cc = isdn_tty_handleDLEdown(info, m, c); isdn_tty_write()
1182 if (info->vonline & 4) { /* ETX seen */ isdn_tty_write()
1186 c.driver = info->isdn_driver; isdn_tty_write()
1187 c.arg = info->isdn_channel; isdn_tty_write()
1192 info->vonline = 0; isdn_tty_write()
1196 info->xmit_count += cc; isdn_tty_write()
1199 info->xmit_count += c; isdn_tty_write()
1201 info->msr |= UART_MSR_CTS; isdn_tty_write()
1202 info->lsr |= UART_LSR_TEMT; isdn_tty_write()
1203 if (info->dialing) { isdn_tty_write()
1204 info->dialing = 0; isdn_tty_write()
1208 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_write()
1209 isdn_tty_modem_hup(info, 1); isdn_tty_write()
1211 c = isdn_tty_edit_at(buf, c, info); isdn_tty_write()
1217 atomic_dec(&info->xmit_lock); isdn_tty_write()
1218 if ((info->xmit_count) || !skb_queue_empty(&info->xmit_queue)) { isdn_tty_write()
1220 isdn_tty_senddown(info); isdn_tty_write()
1221 isdn_tty_tint(info); isdn_tty_write()
1231 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_write_room() local
1234 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_write_room")) isdn_tty_write_room()
1236 if (!info->online) isdn_tty_write_room()
1237 return info->xmit_size; isdn_tty_write_room()
1238 ret = info->xmit_size - info->xmit_count; isdn_tty_write_room()
1245 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_chars_in_buffer() local
1247 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_chars_in_buffer")) isdn_tty_chars_in_buffer()
1249 if (!info->online) isdn_tty_chars_in_buffer()
1251 return (info->xmit_count); isdn_tty_chars_in_buffer()
1257 modem_info *info; isdn_tty_flush_buffer() local
1262 info = (modem_info *) tty->driver_data; isdn_tty_flush_buffer()
1263 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_flush_buffer")) { isdn_tty_flush_buffer()
1266 isdn_tty_cleanup_xmit(info); isdn_tty_flush_buffer()
1267 info->xmit_count = 0; isdn_tty_flush_buffer()
1274 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_flush_chars() local
1276 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_flush_chars")) isdn_tty_flush_chars()
1278 if ((info->xmit_count) || !skb_queue_empty(&info->xmit_queue)) isdn_tty_flush_chars()
1293 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_throttle() local
1295 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_throttle")) isdn_tty_throttle()
1298 info->x_char = STOP_CHAR(tty); isdn_tty_throttle()
1299 info->mcr &= ~UART_MCR_RTS; isdn_tty_throttle()
1305 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_unthrottle() local
1307 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_unthrottle")) isdn_tty_unthrottle()
1310 if (info->x_char) isdn_tty_unthrottle()
1311 info->x_char = 0; isdn_tty_unthrottle()
1313 info->x_char = START_CHAR(tty); isdn_tty_unthrottle()
1315 info->mcr |= UART_MCR_RTS; isdn_tty_unthrottle()
1325 * isdn_tty_get_lsr_info - get line status register info
1327 * Purpose: Let user call ioctl() to get info when the UART physically
1335 isdn_tty_get_lsr_info(modem_info *info, uint __user *value) isdn_tty_get_lsr_info() argument
1340 status = info->lsr; isdn_tty_get_lsr_info()
1349 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_tiocmget() local
1352 if (isdn_tty_paranoia_check(info, tty->name, __func__)) isdn_tty_tiocmget()
1359 printk(KERN_DEBUG "ttyI%d ioctl TIOCMGET\n", info->line); isdn_tty_tiocmget()
1362 control = info->mcr; isdn_tty_tiocmget()
1363 status = info->msr; isdn_tty_tiocmget()
1377 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_tiocmset() local
1379 if (isdn_tty_paranoia_check(info, tty->name, __func__)) isdn_tty_tiocmset()
1385 printk(KERN_DEBUG "ttyI%d ioctl TIOCMxxx: %x %x\n", info->line, set, clear); isdn_tty_tiocmset()
1390 info->mcr |= UART_MCR_RTS; isdn_tty_tiocmset()
1392 info->mcr |= UART_MCR_DTR; isdn_tty_tiocmset()
1393 isdn_tty_modem_ncarrier(info); isdn_tty_tiocmset()
1397 info->mcr &= ~UART_MCR_RTS; isdn_tty_tiocmset()
1399 info->mcr &= ~UART_MCR_DTR; isdn_tty_tiocmset()
1400 if (info->emu.mdmreg[REG_DTRHUP] & BIT_DTRHUP) { isdn_tty_tiocmset()
1401 isdn_tty_modem_reset_regs(info, 0); isdn_tty_tiocmset()
1405 if (info->online) isdn_tty_tiocmset()
1406 info->ncarrier = 1; isdn_tty_tiocmset()
1407 isdn_tty_modem_hup(info, 1); isdn_tty_tiocmset()
1417 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_ioctl() local
1420 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_ioctl")) isdn_tty_ioctl()
1427 printk(KERN_DEBUG "ttyI%d ioctl TCSBRK\n", info->line); isdn_tty_ioctl()
1436 printk(KERN_DEBUG "ttyI%d ioctl TCSBRKP\n", info->line); isdn_tty_ioctl()
1445 printk(KERN_DEBUG "ttyI%d ioctl TIOCSERGETLSR\n", info->line); isdn_tty_ioctl()
1447 return isdn_tty_get_lsr_info(info, (uint __user *) arg); isdn_tty_ioctl()
1450 printk(KERN_DEBUG "UNKNOWN ioctl 0x%08x on ttyi%d\n", cmd, info->line); isdn_tty_ioctl()
1460 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_set_termios() local
1463 isdn_tty_change_speed(info); isdn_tty_set_termios()
1469 isdn_tty_change_speed(info); isdn_tty_set_termios()
1481 modem_info *info = &dev->mdm.info[tty->index]; isdn_tty_install() local
1483 if (isdn_tty_paranoia_check(info, tty->name, __func__)) isdn_tty_install()
1486 tty->driver_data = info; isdn_tty_install()
1488 return tty_port_install(&info->port, driver, tty); isdn_tty_install()
1500 modem_info *info = tty->driver_data; isdn_tty_open() local
1501 struct tty_port *port = &info->port; isdn_tty_open()
1513 retval = isdn_tty_startup(info); isdn_tty_open()
1528 printk(KERN_DEBUG "isdn_tty_open ttyi%d successful...\n", info->line); isdn_tty_open()
1540 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_close() local
1541 struct tty_port *port = &info->port; isdn_tty_close()
1544 if (!info || isdn_tty_paranoia_check(info, tty->name, "isdn_tty_close")) isdn_tty_close()
1561 "info->count is %d\n", port->count); isdn_tty_close()
1566 info->line, port->count); isdn_tty_close()
1571 printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n"); isdn_tty_close()
1592 while (!(info->lsr & UART_LSR_TEMT)) { isdn_tty_close()
1599 isdn_tty_shutdown(info); isdn_tty_close()
1603 info->ncarrier = 0; isdn_tty_close()
1617 modem_info *info = (modem_info *) tty->driver_data; isdn_tty_hangup() local
1618 struct tty_port *port = &info->port; isdn_tty_hangup()
1620 if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup")) isdn_tty_hangup()
1622 isdn_tty_shutdown(info); isdn_tty_hangup()
1675 isdn_tty_modem_reset_faxpar(modem_info *info) isdn_tty_modem_reset_faxpar() argument
1677 T30_s *f = info->fax; isdn_tty_modem_reset_faxpar()
1708 isdn_tty_modem_reset_regs(modem_info *info, int force) isdn_tty_modem_reset_regs() argument
1710 atemu *m = &info->emu; isdn_tty_modem_reset_regs()
1715 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; isdn_tty_modem_reset_regs()
1721 isdn_tty_modem_reset_faxpar(info); isdn_tty_modem_reset_regs()
1756 modem_info *info = container_of(port, modem_info, port); isdn_tty_carrier_raised() local
1757 return info->msr & UART_MSR_DCD; isdn_tty_carrier_raised()
1769 modem_info *info; isdn_tty_modem_init() local
1791 info = &m->info[i]; isdn_tty_modem_init()
1793 if (!(info->fax = kmalloc(sizeof(T30_s), GFP_KERNEL))) { isdn_tty_modem_init()
1799 tty_port_init(&info->port); isdn_tty_modem_init()
1800 info->port.ops = &isdn_tty_port_ops; isdn_tty_modem_init()
1801 spin_lock_init(&info->readlock); isdn_tty_modem_init()
1802 sprintf(info->last_cause, "0000"); isdn_tty_modem_init()
1803 sprintf(info->last_num, "none"); isdn_tty_modem_init()
1804 info->last_dir = 0; isdn_tty_modem_init()
1805 info->last_lhup = 1; isdn_tty_modem_init()
1806 info->last_l2 = -1; isdn_tty_modem_init()
1807 info->last_si = 0; isdn_tty_modem_init()
1808 isdn_tty_reset_profile(&info->emu); isdn_tty_modem_init()
1809 isdn_tty_modem_reset_regs(info, 1); isdn_tty_modem_init()
1810 info->magic = ISDN_ASYNC_MAGIC; isdn_tty_modem_init()
1811 info->line = i; isdn_tty_modem_init()
1812 info->x_char = 0; isdn_tty_modem_init()
1813 info->isdn_driver = -1; isdn_tty_modem_init()
1814 info->isdn_channel = -1; isdn_tty_modem_init()
1815 info->drv_index = -1; isdn_tty_modem_init()
1816 info->xmit_size = ISDN_SERIAL_XMIT_SIZE; isdn_tty_modem_init()
1817 init_timer(&info->nc_timer); isdn_tty_modem_init()
1818 info->nc_timer.function = isdn_tty_modem_do_ncarrier; isdn_tty_modem_init()
1819 info->nc_timer.data = (unsigned long) info; isdn_tty_modem_init()
1820 skb_queue_head_init(&info->xmit_queue); isdn_tty_modem_init()
1822 skb_queue_head_init(&info->dtmf_queue); isdn_tty_modem_init()
1824 info->port.xmit_buf = kmalloc(ISDN_SERIAL_XMIT_MAX + 5, isdn_tty_modem_init()
1826 if (!info->port.xmit_buf) { isdn_tty_modem_init()
1832 info->port.xmit_buf += 4; isdn_tty_modem_init()
1837 info = &m->info[i]; isdn_tty_modem_init()
1839 kfree(info->fax); isdn_tty_modem_init()
1841 kfree(info->port.xmit_buf - 4); isdn_tty_modem_init()
1842 info->port.xmit_buf = NULL; isdn_tty_modem_init()
1843 tty_port_destroy(&info->port); isdn_tty_modem_init()
1855 modem_info *info; isdn_tty_exit() local
1859 info = &dev->mdm.info[i]; isdn_tty_exit()
1860 isdn_tty_cleanup_xmit(info); isdn_tty_exit()
1862 kfree(info->fax); isdn_tty_exit()
1864 kfree(info->port.xmit_buf - 4); isdn_tty_exit()
1865 info->port.xmit_buf = NULL; isdn_tty_exit()
1866 tty_port_destroy(&info->port); isdn_tty_exit()
1966 modem_info *info = &dev->mdm.info[i]; isdn_tty_find_icall() local
1968 if (info->port.count == 0) isdn_tty_find_icall()
1970 if ((info->emu.mdmreg[REG_SI1] & si2bit[si1]) && /* SI1 is matching */ isdn_tty_find_icall()
1971 (info->emu.mdmreg[REG_SI2] == si2)) { /* SI2 is matching */ isdn_tty_find_icall()
1976 info->port.flags, info->isdn_driver, isdn_tty_find_icall()
1977 info->isdn_channel, dev->usage[idx]); isdn_tty_find_icall()
1981 (info->port.flags & ASYNC_NORMAL_ACTIVE) && isdn_tty_find_icall()
1983 (info->isdn_driver == -1) && isdn_tty_find_icall()
1984 (info->isdn_channel == -1) && isdn_tty_find_icall()
1988 if ((matchret = isdn_tty_match_icall(eaz, &info->emu, di)) > wret) isdn_tty_find_icall()
1991 info->isdn_driver = di; isdn_tty_find_icall()
1992 info->isdn_channel = ch; isdn_tty_find_icall()
1993 info->drv_index = idx; isdn_tty_find_icall()
1994 dev->m_idx[idx] = info->line; isdn_tty_find_icall()
1996 dev->usage[idx] |= isdn_calc_usage(si1, info->emu.mdmreg[REG_L2PROT]); isdn_tty_find_icall()
1998 strcpy(info->emu.cpn, eaz); isdn_tty_find_icall()
1999 info->emu.mdmreg[REG_SI1I] = si2bit[si1]; isdn_tty_find_icall()
2000 info->emu.mdmreg[REG_PLAN] = setup->plan; isdn_tty_find_icall()
2001 info->emu.mdmreg[REG_SCREEN] = setup->screen; isdn_tty_find_icall()
2005 info->line); isdn_tty_find_icall()
2006 info->msr |= UART_MSR_RI; isdn_tty_find_icall()
2007 isdn_tty_modem_result(RESULT_RING, info); isdn_tty_find_icall()
2020 #define TTY_IS_ACTIVE(info) (info->port.flags & ASYNC_NORMAL_ACTIVE)
2026 modem_info *info; isdn_tty_stat_callback() local
2032 info = &dev->mdm.info[mi]; isdn_tty_stat_callback()
2035 printk(KERN_DEBUG "CHARGEINFO on ttyI%d: %ld %s\n", info->line, c->arg, c->parm.num); isdn_tty_stat_callback()
2036 info->emu.charge = (unsigned) simple_strtoul(c->parm.num, &e, 10); isdn_tty_stat_callback()
2038 info->emu.charge = 0; isdn_tty_stat_callback()
2043 printk(KERN_DEBUG "tty_STAT_BSENT ttyI%d\n", info->line); isdn_tty_stat_callback()
2045 if ((info->isdn_driver == c->driver) && isdn_tty_stat_callback()
2046 (info->isdn_channel == c->arg)) { isdn_tty_stat_callback()
2047 info->msr |= UART_MSR_CTS; isdn_tty_stat_callback()
2048 if (info->send_outstanding) isdn_tty_stat_callback()
2049 if (!(--info->send_outstanding)) isdn_tty_stat_callback()
2050 info->lsr |= UART_LSR_TEMT; isdn_tty_stat_callback()
2051 isdn_tty_tint(info); isdn_tty_stat_callback()
2057 printk(KERN_DEBUG "tty_STAT_CAUSE ttyI%d\n", info->line); isdn_tty_stat_callback()
2060 strncpy(info->last_cause, c->parm.num, 5); isdn_tty_stat_callback()
2064 printk(KERN_DEBUG "tty_STAT_DISPLAY ttyI%d\n", info->line); isdn_tty_stat_callback()
2067 if ((info->emu.mdmreg[REG_DISPLAY] & BIT_DISPLAY) && isdn_tty_stat_callback()
2068 !(info->emu.mdmreg[REG_RESPNUM] & BIT_RESPNUM)) { isdn_tty_stat_callback()
2069 isdn_tty_at_cout("\r\n", info); isdn_tty_stat_callback()
2070 isdn_tty_at_cout("DISPLAY: ", info); isdn_tty_stat_callback()
2071 isdn_tty_at_cout(c->parm.display, info); isdn_tty_stat_callback()
2072 isdn_tty_at_cout("\r\n", info); isdn_tty_stat_callback()
2077 printk(KERN_DEBUG "tty_STAT_DCONN ttyI%d\n", info->line); isdn_tty_stat_callback()
2079 if (TTY_IS_ACTIVE(info)) { isdn_tty_stat_callback()
2080 if (info->dialing == 1) { isdn_tty_stat_callback()
2081 info->dialing = 2; isdn_tty_stat_callback()
2088 printk(KERN_DEBUG "tty_STAT_DHUP ttyI%d\n", info->line); isdn_tty_stat_callback()
2090 if (TTY_IS_ACTIVE(info)) { isdn_tty_stat_callback()
2091 if (info->dialing == 1) isdn_tty_stat_callback()
2092 isdn_tty_modem_result(RESULT_BUSY, info); isdn_tty_stat_callback()
2093 if (info->dialing > 1) isdn_tty_stat_callback()
2094 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_stat_callback()
2095 info->dialing = 0; isdn_tty_stat_callback()
2099 isdn_tty_modem_hup(info, 0); isdn_tty_stat_callback()
2105 printk(KERN_DEBUG "tty_STAT_BCONN ttyI%d\n", info->line); isdn_tty_stat_callback()
2111 if (info->port.blocked_open && isdn_tty_stat_callback()
2112 (info->emu.mdmreg[REG_DCD] & BIT_DCD)) { isdn_tty_stat_callback()
2113 wake_up_interruptible(&info->port.open_wait); isdn_tty_stat_callback()
2120 if (TTY_IS_ACTIVE(info) || isdn_tty_stat_callback()
2121 (info->port.blocked_open && isdn_tty_stat_callback()
2122 (info->emu.mdmreg[REG_DCD] & BIT_DCD))) { isdn_tty_stat_callback()
2123 info->msr |= UART_MSR_DCD; isdn_tty_stat_callback()
2124 info->emu.charge = 0; isdn_tty_stat_callback()
2125 if (info->dialing & 0xf) isdn_tty_stat_callback()
2126 info->last_dir = 1; isdn_tty_stat_callback()
2128 info->last_dir = 0; isdn_tty_stat_callback()
2129 info->dialing = 0; isdn_tty_stat_callback()
2130 info->rcvsched = 1; isdn_tty_stat_callback()
2132 if (info->emu.mdmreg[REG_L2PROT] == ISDN_PROTO_L2_MODEM) { isdn_tty_stat_callback()
2133 strcpy(info->emu.connmsg, c->parm.num); isdn_tty_stat_callback()
2134 isdn_tty_modem_result(RESULT_CONNECT, info); isdn_tty_stat_callback()
2136 isdn_tty_modem_result(RESULT_CONNECT64000, info); isdn_tty_stat_callback()
2139 isdn_tty_modem_result(RESULT_VCON, info); isdn_tty_stat_callback()
2145 printk(KERN_DEBUG "tty_STAT_BHUP ttyI%d\n", info->line); isdn_tty_stat_callback()
2147 if (TTY_IS_ACTIVE(info)) { isdn_tty_stat_callback()
2151 isdn_tty_modem_hup(info, 0); isdn_tty_stat_callback()
2157 printk(KERN_DEBUG "tty_STAT_NODCH ttyI%d\n", info->line); isdn_tty_stat_callback()
2159 if (TTY_IS_ACTIVE(info)) { isdn_tty_stat_callback()
2160 if (info->dialing) { isdn_tty_stat_callback()
2161 info->dialing = 0; isdn_tty_stat_callback()
2162 info->last_l2 = -1; isdn_tty_stat_callback()
2163 info->last_si = 0; isdn_tty_stat_callback()
2164 sprintf(info->last_cause, "0000"); isdn_tty_stat_callback()
2165 isdn_tty_modem_result(RESULT_NO_DIALTONE, info); isdn_tty_stat_callback()
2167 isdn_tty_modem_hup(info, 0); isdn_tty_stat_callback()
2173 printk(KERN_DEBUG "tty_STAT_UNLOAD ttyI%d\n", info->line); isdn_tty_stat_callback()
2176 info = &dev->mdm.info[i]; isdn_tty_stat_callback()
2177 if (info->isdn_driver == c->driver) { isdn_tty_stat_callback()
2178 if (info->online) isdn_tty_stat_callback()
2179 isdn_tty_modem_hup(info, 1); isdn_tty_stat_callback()
2185 if (TTY_IS_ACTIVE(info)) { isdn_tty_stat_callback()
2186 isdn_tty_fax_command(info, c); isdn_tty_stat_callback()
2192 if (TTY_IS_ACTIVE(info)) { isdn_tty_stat_callback()
2195 if (info->vonline) { isdn_tty_stat_callback()
2196 isdn_audio_put_dle_code(info, isdn_tty_stat_callback()
2220 isdn_tty_at_cout(char *msg, modem_info *info) isdn_tty_at_cout() argument
2222 struct tty_port *port = &info->port; isdn_tty_at_cout()
2223 atemu *m = &info->emu; isdn_tty_at_cout()
2238 spin_lock_irqsave(&info->readlock, flags); isdn_tty_at_cout()
2240 spin_unlock_irqrestore(&info->readlock, flags); isdn_tty_at_cout()
2246 if (info->online && ((tty_buffer_request_room(port, l) < l) || isdn_tty_at_cout()
2247 !skb_queue_empty(&dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel]))) { isdn_tty_at_cout()
2250 spin_unlock_irqrestore(&info->readlock, flags); isdn_tty_at_cout()
2282 __skb_queue_tail(&dev->drv[info->isdn_driver]->rpqueue[info->isdn_channel], skb); isdn_tty_at_cout()
2283 dev->drv[info->isdn_driver]->rcvcount[info->isdn_channel] += skb->len; isdn_tty_at_cout()
2284 spin_unlock_irqrestore(&info->readlock, flags); isdn_tty_at_cout()
2286 if (dev->modempoll && info->rcvsched) isdn_tty_at_cout()
2290 spin_unlock_irqrestore(&info->readlock, flags); isdn_tty_at_cout()
2299 isdn_tty_on_hook(modem_info *info) isdn_tty_on_hook() argument
2301 if (info->isdn_channel >= 0) { isdn_tty_on_hook()
2305 isdn_tty_modem_hup(info, 1); isdn_tty_on_hook()
2370 isdn_tty_modem_result(int code, modem_info *info) isdn_tty_modem_result() argument
2372 atemu *m = &info->emu; isdn_tty_modem_result()
2384 isdn_tty_cmd_ATA(info); isdn_tty_modem_result()
2389 (info->port.flags & ASYNC_CLOSING), isdn_tty_modem_result()
2390 (!info->port.tty)); isdn_tty_modem_result()
2393 del_timer(&info->nc_timer); isdn_tty_modem_result()
2394 info->ncarrier = 0; isdn_tty_modem_result()
2395 if ((info->port.flags & ASYNC_CLOSING) || (!info->port.tty)) isdn_tty_modem_result()
2399 if (info->vonline & 1) { isdn_tty_modem_result()
2402 info->line); isdn_tty_modem_result()
2405 isdn_tty_at_cout("\020\003", info); isdn_tty_modem_result()
2407 if (info->vonline & 2) { isdn_tty_modem_result()
2410 info->line); isdn_tty_modem_result()
2413 isdn_tty_at_cout("\020\024", info); isdn_tty_modem_result()
2419 sprintf(info->last_cause, "0000"); isdn_tty_modem_result()
2420 if (!info->online) isdn_tty_modem_result()
2421 info->online = 2; isdn_tty_modem_result()
2426 info->line); isdn_tty_modem_result()
2428 sprintf(info->last_cause, "0000"); isdn_tty_modem_result()
2429 if (!info->online) isdn_tty_modem_result()
2430 info->online = 1; isdn_tty_modem_result()
2439 isdn_tty_at_cout(s, info); isdn_tty_modem_result()
2448 isdn_tty_at_cout("\r\nCALLER NUMBER: ", info); isdn_tty_modem_result()
2449 isdn_tty_at_cout(dev->num[info->drv_index], info); isdn_tty_modem_result()
2451 isdn_tty_at_cout("\r\nCALLED NUMBER: ", info); isdn_tty_modem_result()
2452 isdn_tty_at_cout(info->emu.cpn, info); isdn_tty_modem_result()
2456 isdn_tty_at_cout("\r\n", info); isdn_tty_modem_result()
2457 isdn_tty_at_cout(msg[code], info); isdn_tty_modem_result()
2462 isdn_tty_at_cout(" ", info); isdn_tty_modem_result()
2463 isdn_tty_at_cout(m->connmsg, info); isdn_tty_modem_result()
2471 isdn_tty_at_cout(s, info); isdn_tty_modem_result()
2476 isdn_tty_at_cout("\r\n", info); isdn_tty_modem_result()
2477 isdn_tty_at_cout("CALLER NUMBER: ", info); isdn_tty_modem_result()
2478 isdn_tty_at_cout(dev->num[info->drv_index], info); isdn_tty_modem_result()
2480 isdn_tty_at_cout("\r\nCALLED NUMBER: ", info); isdn_tty_modem_result()
2481 isdn_tty_at_cout(info->emu.cpn, info); isdn_tty_modem_result()
2492 sprintf(s, "/%s", info->last_cause); isdn_tty_modem_result()
2493 isdn_tty_at_cout(s, info); isdn_tty_modem_result()
2502 isdn_tty_at_cout("/X.75", info); isdn_tty_modem_result()
2505 isdn_tty_at_cout("/HDLC", info); isdn_tty_modem_result()
2508 isdn_tty_at_cout("/V110/9600", info); isdn_tty_modem_result()
2511 isdn_tty_at_cout("/V110/19200", info); isdn_tty_modem_result()
2514 isdn_tty_at_cout("/V110/38400", info); isdn_tty_modem_result()
2518 isdn_tty_at_cout("/T.70", info); isdn_tty_modem_result()
2520 isdn_tty_at_cout("+", info); isdn_tty_modem_result()
2524 isdn_tty_at_cout("\r\n", info); isdn_tty_modem_result()
2528 if ((info->port.flags & ASYNC_CLOSING) || (!info->port.tty)) isdn_tty_modem_result()
2531 if (info->port.flags & ASYNC_CHECK_CD) isdn_tty_modem_result()
2532 tty_hangup(info->port.tty); isdn_tty_modem_result()
2541 isdn_tty_show_profile(int ridx, modem_info *info) isdn_tty_show_profile() argument
2545 sprintf(v, "\r\n%d", info->emu.mdmreg[ridx]); isdn_tty_show_profile()
2546 isdn_tty_at_cout(v, info); isdn_tty_show_profile()
2590 #define PARSE_ERROR { isdn_tty_modem_result(RESULT_ERROR, info); return; }
2591 #define PARSE_ERROR1 { isdn_tty_modem_result(RESULT_ERROR, info); return 1; }
2594 isdn_tty_report(modem_info *info) isdn_tty_report() argument
2596 atemu *m = &info->emu; isdn_tty_report()
2599 isdn_tty_at_cout("\r\nStatistics of last connection:\r\n\r\n", info); isdn_tty_report()
2600 sprintf(s, " Remote Number: %s\r\n", info->last_num); isdn_tty_report()
2601 isdn_tty_at_cout(s, info); isdn_tty_report()
2602 sprintf(s, " Direction: %s\r\n", info->last_dir ? "outgoing" : "incoming"); isdn_tty_report()
2603 isdn_tty_at_cout(s, info); isdn_tty_report()
2604 isdn_tty_at_cout(" Layer-2 Protocol: ", info); isdn_tty_report()
2605 switch (info->last_l2) { isdn_tty_report()
2607 isdn_tty_at_cout("X.75i", info); isdn_tty_report()
2610 isdn_tty_at_cout("X.75ui", info); isdn_tty_report()
2613 isdn_tty_at_cout("X.75bui", info); isdn_tty_report()
2616 isdn_tty_at_cout("HDLC", info); isdn_tty_report()
2619 isdn_tty_at_cout("V.110 9600 Baud", info); isdn_tty_report()
2622 isdn_tty_at_cout("V.110 19200 Baud", info); isdn_tty_report()
2625 isdn_tty_at_cout("V.110 38400 Baud", info); isdn_tty_report()
2628 isdn_tty_at_cout("transparent", info); isdn_tty_report()
2631 isdn_tty_at_cout("modem", info); isdn_tty_report()
2634 isdn_tty_at_cout("fax", info); isdn_tty_report()
2637 isdn_tty_at_cout("unknown", info); isdn_tty_report()
2641 isdn_tty_at_cout("/T.70", info); isdn_tty_report()
2643 isdn_tty_at_cout("+", info); isdn_tty_report()
2645 isdn_tty_at_cout("\r\n", info); isdn_tty_report()
2646 isdn_tty_at_cout(" Service: ", info); isdn_tty_report()
2647 switch (info->last_si) { isdn_tty_report()
2649 isdn_tty_at_cout("audio\r\n", info); isdn_tty_report()
2652 isdn_tty_at_cout("btx\r\n", info); isdn_tty_report()
2655 isdn_tty_at_cout("data\r\n", info); isdn_tty_report()
2658 sprintf(s, "%d\r\n", info->last_si); isdn_tty_report()
2659 isdn_tty_at_cout(s, info); isdn_tty_report()
2662 sprintf(s, " Hangup location: %s\r\n", info->last_lhup ? "local" : "remote"); isdn_tty_report()
2663 isdn_tty_at_cout(s, info); isdn_tty_report()
2664 sprintf(s, " Last cause: %s\r\n", info->last_cause); isdn_tty_report()
2665 isdn_tty_at_cout(s, info); isdn_tty_report()
2672 isdn_tty_cmd_ATand(char **p, modem_info *info) isdn_tty_cmd_ATand() argument
2674 atemu *m = &info->emu; isdn_tty_cmd_ATand()
2692 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; isdn_tty_cmd_ATand()
2697 info->xmit_size /= 10; isdn_tty_cmd_ATand()
2742 if (info->msr & UART_MSR_DCD) isdn_tty_cmd_ATand()
2745 isdn_tty_modem_reset_regs(info, 1); isdn_tty_cmd_ATand()
2773 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; isdn_tty_cmd_ATand()
2778 info->xmit_size = m->mdmreg[REG_PSIZE] * 16 / 10; isdn_tty_cmd_ATand()
2783 info->xmit_size = m->mdmreg[REG_PSIZE] * 16 / 10; isdn_tty_cmd_ATand()
2788 info->xmit_size = m->mdmreg[REG_PSIZE] * 16 / 10; isdn_tty_cmd_ATand()
2810 isdn_tty_at_cout("\r\n", info); isdn_tty_cmd_ATand()
2814 isdn_tty_at_cout(rb, info); isdn_tty_cmd_ATand()
2818 isdn_tty_at_cout(rb, info); isdn_tty_cmd_ATand()
2820 isdn_tty_at_cout("\r\nListen: ", info); isdn_tty_cmd_ATand()
2821 isdn_tty_at_cout(m->lmsn, info); isdn_tty_cmd_ATand()
2822 isdn_tty_at_cout("\r\n", info); isdn_tty_cmd_ATand()
2843 info->xmit_size = m->mdmreg[REG_PSIZE] * 16; isdn_tty_cmd_ATand()
2849 info->xmit_size = 112; isdn_tty_cmd_ATand()
2856 info->xmit_size = 112; isdn_tty_cmd_ATand()
2871 isdn_tty_check_ats(int mreg, int mval, modem_info *info, atemu *m) isdn_tty_check_ats() argument
2886 info->xmit_size = mval * 16; isdn_tty_check_ats()
2891 info->xmit_size /= 10; isdn_tty_check_ats()
2907 isdn_tty_cmd_ATS(char **p, modem_info *info) isdn_tty_cmd_ATS() argument
2909 atemu *m = &info->emu; isdn_tty_cmd_ATS()
2924 if (isdn_tty_check_ats(mreg, mval, info, m)) isdn_tty_cmd_ATS()
2944 if (isdn_tty_check_ats(mreg, mval, info, m)) isdn_tty_cmd_ATS()
2950 isdn_tty_at_cout("\r\n", info); isdn_tty_cmd_ATS()
2952 info); isdn_tty_cmd_ATS()
2960 isdn_tty_show_profile(mreg, info); isdn_tty_cmd_ATS()
2973 isdn_tty_cmd_ATA(modem_info *info) isdn_tty_cmd_ATA() argument
2975 atemu *m = &info->emu; isdn_tty_cmd_ATA()
2979 if (info->msr & UART_MSR_RI) { isdn_tty_cmd_ATA()
2981 info->last_dir = 0; isdn_tty_cmd_ATA()
2982 strcpy(info->last_num, dev->num[info->drv_index]); isdn_tty_cmd_ATA()
2984 info->msr &= ~UART_MSR_RI; isdn_tty_cmd_ATA()
2996 cmd.driver = info->isdn_driver; isdn_tty_cmd_ATA()
2998 cmd.arg = info->isdn_channel + (l2 << 8); isdn_tty_cmd_ATA()
2999 info->last_l2 = l2; isdn_tty_cmd_ATA()
3001 cmd.driver = info->isdn_driver; isdn_tty_cmd_ATA()
3003 cmd.arg = info->isdn_channel + (m->mdmreg[REG_L3PROT] << 8); isdn_tty_cmd_ATA()
3006 cmd.parm.fax = info->fax; isdn_tty_cmd_ATA()
3007 info->fax->direction = ISDN_TTY_FAX_CONN_IN; isdn_tty_cmd_ATA()
3011 cmd.driver = info->isdn_driver; isdn_tty_cmd_ATA()
3012 cmd.arg = info->isdn_channel; isdn_tty_cmd_ATA()
3014 info->dialing = 16; isdn_tty_cmd_ATA()
3015 info->emu.carrierwait = 0; isdn_tty_cmd_ATA()
3019 isdn_tty_modem_result(RESULT_NO_ANSWER, info); isdn_tty_cmd_ATA()
3027 isdn_tty_cmd_PLUSF(char **p, modem_info *info) isdn_tty_cmd_PLUSF() argument
3029 atemu *m = &info->emu; isdn_tty_cmd_PLUSF()
3040 if (TTY_IS_FCLASS2(info)) isdn_tty_cmd_PLUSF()
3042 else if (TTY_IS_FCLASS1(info)) isdn_tty_cmd_PLUSF()
3045 isdn_tty_at_cout(rs, info); isdn_tty_cmd_PLUSF()
3055 info->xmit_size = isdn_tty_cmd_PLUSF()
3067 info->xmit_size = isdn_tty_cmd_PLUSF()
3078 info->xmit_size = isdn_tty_cmd_PLUSF()
3088 info->xmit_size = VBUF; isdn_tty_cmd_PLUSF()
3102 isdn_tty_at_cout(rs, info); isdn_tty_cmd_PLUSF()
3114 return (isdn_tty_cmd_PLUSF_FAX(p, info)); isdn_tty_cmd_PLUSF()
3124 isdn_tty_cmd_PLUSV(char **p, modem_info *info) isdn_tty_cmd_PLUSV() argument
3126 atemu *m = &info->emu; isdn_tty_cmd_PLUSV()
3149 isdn_tty_at_cout("\r\n1", info); isdn_tty_cmd_PLUSV()
3159 isdn_tty_at_cout("\r\n1", info); isdn_tty_cmd_PLUSV()
3179 isdn_tty_at_cout(rs, info); isdn_tty_cmd_PLUSV()
3194 isdn_tty_at_cout("\r\n0,2", info); isdn_tty_cmd_PLUSV()
3208 if (info->online != 1) { isdn_tty_cmd_PLUSV()
3209 isdn_tty_modem_result(RESULT_NO_ANSWER, info); isdn_tty_cmd_PLUSV()
3212 info->dtmf_state = isdn_audio_dtmf_init(info->dtmf_state); isdn_tty_cmd_PLUSV()
3213 if (!info->dtmf_state) { isdn_tty_cmd_PLUSV()
3217 info->silence_state = isdn_audio_silence_init(info->silence_state); isdn_tty_cmd_PLUSV()
3218 if (!info->silence_state) { isdn_tty_cmd_PLUSV()
3223 info->adpcmr = isdn_audio_adpcm_init(info->adpcmr, m->vpar[3]); isdn_tty_cmd_PLUSV()
3224 if (!info->adpcmr) { isdn_tty_cmd_PLUSV()
3232 info->vonline |= 1; isdn_tty_cmd_PLUSV()
3233 isdn_tty_modem_result(RESULT_CONNECT, info); isdn_tty_cmd_PLUSV()
3244 isdn_tty_at_cout(rs, info); isdn_tty_cmd_PLUSV()
3265 info); isdn_tty_cmd_PLUSV()
3282 isdn_tty_at_cout(rs, info); isdn_tty_cmd_PLUSV()
3300 info); isdn_tty_cmd_PLUSV()
3302 info); isdn_tty_cmd_PLUSV()
3304 info); isdn_tty_cmd_PLUSV()
3306 info); isdn_tty_cmd_PLUSV()
3308 info); isdn_tty_cmd_PLUSV()
3322 if (info->online != 1) { isdn_tty_cmd_PLUSV()
3323 isdn_tty_modem_result(RESULT_NO_ANSWER, info); isdn_tty_cmd_PLUSV()
3326 info->dtmf_state = isdn_audio_dtmf_init(info->dtmf_state); isdn_tty_cmd_PLUSV()
3327 if (!info->dtmf_state) { isdn_tty_cmd_PLUSV()
3332 info->adpcms = isdn_audio_adpcm_init(info->adpcms, m->vpar[3]); isdn_tty_cmd_PLUSV()
3333 if (!info->adpcms) { isdn_tty_cmd_PLUSV()
3342 info->vonline |= 2; isdn_tty_cmd_PLUSV()
3343 isdn_tty_modem_result(RESULT_CONNECT, info); isdn_tty_cmd_PLUSV()
3354 isdn_tty_at_cout(rs, info); isdn_tty_cmd_PLUSV()
3359 if (info->online != 1) isdn_tty_cmd_PLUSV()
3372 cmd.driver = info->isdn_driver; isdn_tty_cmd_PLUSV()
3374 cmd.arg = info->isdn_channel + (ISDN_AUDIO_SETDD << 8); isdn_tty_cmd_PLUSV()
3383 info); isdn_tty_cmd_PLUSV()
3403 isdn_tty_parse_at(modem_info *info) isdn_tty_parse_at() argument
3405 atemu *m = &info->emu; isdn_tty_parse_at()
3420 isdn_tty_cmd_ATA(info); isdn_tty_parse_at()
3424 if (info->msr & UART_MSR_DCD) isdn_tty_parse_at()
3426 if (info->msr & UART_MSR_RI) { isdn_tty_parse_at()
3427 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_parse_at()
3433 isdn_tty_modem_result(RESULT_NO_MSN_EAZ, info); isdn_tty_parse_at()
3435 isdn_tty_dial(ds, info, m); isdn_tty_parse_at()
3459 isdn_tty_on_hook(info); isdn_tty_parse_at()
3466 isdn_tty_on_hook(info); isdn_tty_parse_at()
3473 isdn_tty_at_cout("\r\nLinux ISDN", info); isdn_tty_parse_at()
3481 isdn_tty_report(info); isdn_tty_parse_at()
3485 snprintf(ds, sizeof(ds), "\r\n%d", info->emu.charge); isdn_tty_parse_at()
3486 isdn_tty_at_cout(ds, info); isdn_tty_parse_at()
3503 if (info->msr & UART_MSR_DCD) isdn_tty_parse_at()
3505 isdn_tty_modem_result((m->mdmreg[REG_L2PROT] == ISDN_PROTO_L2_MODEM) ? RESULT_CONNECT : RESULT_CONNECT64000, info); isdn_tty_parse_at()
3507 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_parse_at()
3526 if (isdn_tty_cmd_ATS(&p, info)) isdn_tty_parse_at()
3546 if (info->msr & UART_MSR_DCD) { isdn_tty_parse_at()
3547 info->online = 0; isdn_tty_parse_at()
3548 isdn_tty_on_hook(info); isdn_tty_parse_at()
3550 isdn_tty_modem_reset_regs(info, 1); isdn_tty_parse_at()
3558 if (isdn_tty_cmd_PLUSF(&p, info)) isdn_tty_parse_at()
3566 if (isdn_tty_cmd_PLUSV(&p, info)) isdn_tty_parse_at()
3573 isdn_tty_suspend(ds, info, m); isdn_tty_parse_at()
3578 isdn_tty_resume(ds, info, m); isdn_tty_parse_at()
3582 isdn_tty_send_msg(info, m, p); isdn_tty_parse_at()
3590 if (isdn_tty_cmd_ATand(&p, info)) isdn_tty_parse_at()
3598 if (!info->vonline) isdn_tty_parse_at()
3600 isdn_tty_modem_result(RESULT_OK, info); isdn_tty_parse_at()
3617 isdn_tty_edit_at(const char *p, int count, modem_info *info) isdn_tty_edit_at() argument
3619 atemu *m = &info->emu; isdn_tty_edit_at()
3634 isdn_tty_at_cout(eb, info); isdn_tty_edit_at()
3637 isdn_tty_parse_at(info); isdn_tty_edit_at()
3647 isdn_tty_at_cout("\b", info); isdn_tty_edit_at()
3655 isdn_tty_at_cout(eb, info); isdn_tty_edit_at()
3699 modem_info *info = &dev->mdm.info[midx]; isdn_tty_modem_escape() local
3700 if (info->online) { isdn_tty_modem_escape()
3702 if ((info->emu.pluscount == 3) && isdn_tty_modem_escape()
3704 info->emu.lastplus + PLUSWAIT2)) { isdn_tty_modem_escape()
3705 info->emu.pluscount = 0; isdn_tty_modem_escape()
3706 info->online = 0; isdn_tty_modem_escape()
3707 isdn_tty_modem_result(RESULT_OK, info); isdn_tty_modem_escape()
3726 modem_info *info = &dev->mdm.info[i]; isdn_tty_modem_ring() local
3727 if (info->msr & UART_MSR_RI) { isdn_tty_modem_ring()
3729 isdn_tty_modem_result(RESULT_RING, info); isdn_tty_modem_ring()
3746 modem_info *info = &dev->mdm.info[i]; isdn_tty_modem_xmit() local
3747 if (info->online) { isdn_tty_modem_xmit()
3749 isdn_tty_senddown(info); isdn_tty_modem_xmit()
3750 isdn_tty_tint(info); isdn_tty_modem_xmit()
3767 modem_info *info = &dev->mdm.info[i]; isdn_tty_carrier_timeout() local
3768 if (!info->dialing) isdn_tty_carrier_timeout()
3770 if (info->emu.carrierwait++ > info->emu.mdmreg[REG_WAITC]) { isdn_tty_carrier_timeout()
3771 info->dialing = 0; isdn_tty_carrier_timeout()
3772 isdn_tty_modem_result(RESULT_NO_CARRIER, info); isdn_tty_carrier_timeout()
3773 isdn_tty_modem_hup(info, 1); isdn_tty_carrier_timeout()
H A Disdn_ttyfax.c25 #define PARSE_ERROR1 { isdn_tty_fax_modem_result(1, info); return 1; }
48 isdn_tty_fax_modem_result(int code, modem_info *info) isdn_tty_fax_modem_result() argument
50 atemu *m = &info->emu; isdn_tty_fax_modem_result()
51 T30_s *f = info->fax; isdn_tty_fax_modem_result()
62 isdn_tty_at_cout("\r\n", info); isdn_tty_fax_modem_result()
63 isdn_tty_at_cout(msg[code], info); isdn_tty_fax_modem_result()
67 msg[code], info->line); isdn_tty_fax_modem_result()
77 (!(dev->usage[info->isdn_channel] & ISDN_USAGE_OUTGOING))) { isdn_tty_fax_modem_result()
79 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
81 info->online = 1; isdn_tty_fax_modem_result()
89 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
99 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
102 rs, info->line); isdn_tty_fax_modem_result()
107 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
108 info->faxonline = 0; isdn_tty_fax_modem_result()
118 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
121 rs, info->line); isdn_tty_fax_modem_result()
125 info->faxonline |= 2; isdn_tty_fax_modem_result()
130 isdn_tty_at_cout("1", info); isdn_tty_fax_modem_result()
134 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
138 isdn_tty_at_cout("\r\n", info); isdn_tty_fax_modem_result()
142 info->online = 2; isdn_tty_fax_modem_result()
143 if (info->faxonline & 1) { isdn_tty_fax_modem_result()
145 isdn_tty_at_cout(rs, info); isdn_tty_fax_modem_result()
152 isdn_tty_fax_command1(modem_info *info, isdn_ctrl *c) isdn_tty_fax_command1() argument
161 if (info->online) isdn_tty_fax_command1()
162 info->online = 1; isdn_tty_fax_command1()
163 isdn_tty_at_cout("\r\n", info); isdn_tty_fax_command1()
164 isdn_tty_at_cout(msg[c->parm.aux.cmd], info); isdn_tty_fax_command1()
165 isdn_tty_at_cout("\r\n", info); isdn_tty_fax_command1()
169 info->online = 2; isdn_tty_fax_command1()
177 isdn_tty_at_cout("\r\n", info); isdn_tty_fax_command1()
179 isdn_tty_at_cout(msg[ISDN_FAX_CLASS1_ERROR], info); isdn_tty_fax_command1()
180 isdn_tty_at_cout("\r\n", info); isdn_tty_fax_command1()
182 isdn_tty_at_cout(c->parm.aux.para, info); isdn_tty_fax_command1()
183 isdn_tty_at_cout("\r\nOK\r\n", info); isdn_tty_fax_command1()
191 isdn_tty_fax_command(modem_info *info, isdn_ctrl *c) isdn_tty_fax_command() argument
193 T30_s *f = info->fax; isdn_tty_fax_command()
196 if (TTY_IS_FCLASS1(info)) isdn_tty_fax_command()
197 return (isdn_tty_fax_command1(info, c)); isdn_tty_fax_command()
201 f->r_code, info->line); isdn_tty_fax_command()
205 info->faxonline = 1; isdn_tty_fax_command()
206 isdn_tty_fax_modem_result(2, info); /* +FCON */ isdn_tty_fax_command()
209 info->faxonline = 16; isdn_tty_fax_command()
210 isdn_tty_fax_modem_result(2, info); /* +FCON */ isdn_tty_fax_command()
213 if (info->faxonline & 1) isdn_tty_fax_command()
214 isdn_tty_fax_modem_result(3, info); /* +FCSI */ isdn_tty_fax_command()
215 if (info->faxonline & 16) isdn_tty_fax_command()
216 isdn_tty_fax_modem_result(8, info); /* +FTSI */ isdn_tty_fax_command()
219 isdn_tty_fax_modem_result(4, info); /* +FDIS */ isdn_tty_fax_command()
225 isdn_tty_at_cout(rs, info); isdn_tty_fax_command()
228 isdn_tty_at_cout(rs, info); isdn_tty_fax_command()
230 info->faxonline &= ~2; /* leave data mode */ isdn_tty_fax_command()
231 info->online = 1; isdn_tty_fax_command()
234 isdn_tty_fax_modem_result(5, info); /* +FHNG */ isdn_tty_fax_command()
235 isdn_tty_fax_modem_result(0, info); /* OK */ isdn_tty_fax_command()
238 isdn_tty_fax_modem_result(6, info); /* +FDCS */ isdn_tty_fax_command()
239 isdn_tty_fax_modem_result(7, info); /* CONNECT */ isdn_tty_fax_command()
243 isdn_tty_fax_modem_result(6, info); /* +FDCS */ isdn_tty_fax_command()
244 isdn_tty_fax_modem_result(0, info); /* OK */ isdn_tty_fax_command()
247 isdn_tty_fax_modem_result(0, info); /* OK */ isdn_tty_fax_command()
250 isdn_tty_fax_modem_result(9, info); /* +FCFR */ isdn_tty_fax_command()
254 isdn_tty_at_cout(rs, info); isdn_tty_fax_command()
255 isdn_tty_fax_modem_result(10, info); /* +FPTS */ isdn_tty_fax_command()
256 isdn_tty_fax_modem_result(11, info); /* +FET */ isdn_tty_fax_command()
257 isdn_tty_fax_modem_result(0, info); /* OK */ isdn_tty_fax_command()
258 info->faxonline &= ~2; /* leave data mode */ isdn_tty_fax_command()
259 info->online = 1; isdn_tty_fax_command()
263 isdn_tty_fax_modem_result(10, info); /* +FPTS */ isdn_tty_fax_command()
268 isdn_tty_fax_modem_result(0, info); /* OK */ isdn_tty_fax_command()
272 info->faxonline &= ~2; /* leave data mode */ isdn_tty_fax_command()
273 info->online = 1; isdn_tty_fax_command()
283 isdn_tty_fax_bitorder(modem_info *info, struct sk_buff *skb) isdn_tty_fax_bitorder() argument
291 if (!info->fax->bor) { isdn_tty_fax_bitorder()
320 isdn_tty_cmd_FCLASS1(char **p, modem_info *info) isdn_tty_cmd_FCLASS1() argument
368 if (info->isdn_driver < 0) { isdn_tty_cmd_FCLASS1()
381 info->isdn_driver = dev->drvmap[i]; isdn_tty_cmd_FCLASS1()
382 info->isdn_channel = dev->chanmap[i]; isdn_tty_cmd_FCLASS1()
383 info->drv_index = i; isdn_tty_cmd_FCLASS1()
384 dev->m_idx[i] = info->line; isdn_tty_cmd_FCLASS1()
386 c.driver = info->isdn_driver; isdn_tty_cmd_FCLASS1()
387 c.arg = info->isdn_channel; isdn_tty_cmd_FCLASS1()
390 isdn_free_channel(info->isdn_driver, info->isdn_channel, isdn_tty_cmd_FCLASS1()
392 info->isdn_driver = -1; isdn_tty_cmd_FCLASS1()
393 info->isdn_channel = -1; isdn_tty_cmd_FCLASS1()
394 if (info->drv_index >= 0) { isdn_tty_cmd_FCLASS1()
395 dev->m_idx[info->drv_index] = -1; isdn_tty_cmd_FCLASS1()
396 info->drv_index = -1; isdn_tty_cmd_FCLASS1()
400 c.driver = info->isdn_driver; isdn_tty_cmd_FCLASS1()
401 c.arg = info->isdn_channel; isdn_tty_cmd_FCLASS1()
412 isdn_tty_cmd_FCLASS2(char **p, modem_info *info) isdn_tty_cmd_FCLASS2() argument
414 atemu *m = &info->emu; isdn_tty_cmd_FCLASS2()
415 T30_s *f = info->fax; isdn_tty_cmd_FCLASS2()
430 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
450 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
457 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
480 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
487 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
510 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
517 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
540 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
547 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
571 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
582 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
589 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
619 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
626 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
649 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
656 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
679 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
686 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
717 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
722 isdn_tty_at_cout("\r\n(0,1),(0-5),(0-2),(0-2),(0-3),(0-2),(0),(0-7)", info); isdn_tty_cmd_FCLASS2()
763 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
768 isdn_tty_at_cout("\r\n(0,1),(0-5),(0-2),(0-2),(0-3),(0-2),(0),(0-7)", info); isdn_tty_cmd_FCLASS2()
797 if ((info->faxonline & 16) && /* incoming connection */ isdn_tty_cmd_FCLASS2()
803 cmd.driver = info->isdn_driver; isdn_tty_cmd_FCLASS2()
804 cmd.arg = info->isdn_channel; isdn_tty_cmd_FCLASS2()
813 isdn_tty_fax_modem_result(7, info); /* CONNECT */ isdn_tty_cmd_FCLASS2()
837 if (!(info->faxonline & 1)) /* not outgoing connection */ isdn_tty_cmd_FCLASS2()
858 cmd.driver = info->isdn_driver; isdn_tty_cmd_FCLASS2()
859 cmd.arg = info->isdn_channel; isdn_tty_cmd_FCLASS2()
864 isdn_tty_fax_modem_result(7, info); /* CONNECT */ isdn_tty_cmd_FCLASS2()
878 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
885 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
907 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
910 (!(info->faxonline & 1))) isdn_tty_cmd_FCLASS2()
917 cmd.driver = info->isdn_driver; isdn_tty_cmd_FCLASS2()
918 cmd.arg = info->isdn_channel; isdn_tty_cmd_FCLASS2()
933 isdn_tty_modem_hup(info, 1); isdn_tty_cmd_FCLASS2()
944 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
951 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
981 isdn_tty_at_cout("\r\nisdn4linux", info); isdn_tty_cmd_FCLASS2()
990 isdn_tty_at_cout("\r\nisdn4linux", info); isdn_tty_cmd_FCLASS2()
1000 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1007 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1030 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1037 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1061 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1068 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1092 isdn_tty_at_cout(rs, info); isdn_tty_cmd_FCLASS2()
1116 isdn_tty_cmd_PLUSF_FAX(char **p, modem_info *info) isdn_tty_cmd_PLUSF_FAX() argument
1118 if (TTY_IS_FCLASS2(info)) isdn_tty_cmd_PLUSF_FAX()
1119 return (isdn_tty_cmd_FCLASS2(p, info)); isdn_tty_cmd_PLUSF_FAX()
1120 else if (TTY_IS_FCLASS1(info)) isdn_tty_cmd_PLUSF_FAX()
1121 return (isdn_tty_cmd_FCLASS1(p, info)); isdn_tty_cmd_PLUSF_FAX()
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/bios/
H A Dpll.c223 nvbios_pll_parse(struct nvkm_bios *bios, u32 type, struct nvbios_pll *info) nvbios_pll_parse() argument
239 memset(info, 0, sizeof(*info)); nvbios_pll_parse()
240 info->type = type; nvbios_pll_parse()
241 info->reg = reg; nvbios_pll_parse()
248 info->vco1.min_freq = nv_ro32(bios, data + 0); nvbios_pll_parse()
249 info->vco1.max_freq = nv_ro32(bios, data + 4); nvbios_pll_parse()
250 info->vco2.min_freq = nv_ro32(bios, data + 8); nvbios_pll_parse()
251 info->vco2.max_freq = nv_ro32(bios, data + 12); nvbios_pll_parse()
252 info->vco1.min_inputfreq = nv_ro32(bios, data + 16); nvbios_pll_parse()
253 info->vco2.min_inputfreq = nv_ro32(bios, data + 20); nvbios_pll_parse()
254 info->vco1.max_inputfreq = INT_MAX; nvbios_pll_parse()
255 info->vco2.max_inputfreq = INT_MAX; nvbios_pll_parse()
257 info->max_p = 0x7; nvbios_pll_parse()
258 info->max_p_usable = 0x6; nvbios_pll_parse()
263 info->vco1.min_n = 0x5; nvbios_pll_parse()
266 info->vco1.min_n = 0x1; nvbios_pll_parse()
269 info->vco1.max_n = 0xff; nvbios_pll_parse()
270 info->vco1.min_m = 0x1; nvbios_pll_parse()
271 info->vco1.max_m = 0xd; nvbios_pll_parse()
279 info->vco2.min_n = 0x4; nvbios_pll_parse()
283 info->vco2.max_n = 0x1f; nvbios_pll_parse()
286 info->vco2.max_n = 0x28; nvbios_pll_parse()
289 info->vco2.min_m = 0x1; nvbios_pll_parse()
290 info->vco2.max_m = 0x4; nvbios_pll_parse()
294 info->vco1.min_freq = nv_ro16(bios, data + 4) * 1000; nvbios_pll_parse()
295 info->vco1.max_freq = nv_ro16(bios, data + 6) * 1000; nvbios_pll_parse()
296 info->vco2.min_freq = nv_ro16(bios, data + 8) * 1000; nvbios_pll_parse()
297 info->vco2.max_freq = nv_ro16(bios, data + 10) * 1000; nvbios_pll_parse()
298 info->vco1.min_inputfreq = nv_ro16(bios, data + 12) * 1000; nvbios_pll_parse()
299 info->vco2.min_inputfreq = nv_ro16(bios, data + 14) * 1000; nvbios_pll_parse()
300 info->vco1.max_inputfreq = nv_ro16(bios, data + 16) * 1000; nvbios_pll_parse()
301 info->vco2.max_inputfreq = nv_ro16(bios, data + 18) * 1000; nvbios_pll_parse()
302 info->vco1.min_n = nv_ro08(bios, data + 20); nvbios_pll_parse()
303 info->vco1.max_n = nv_ro08(bios, data + 21); nvbios_pll_parse()
304 info->vco1.min_m = nv_ro08(bios, data + 22); nvbios_pll_parse()
305 info->vco1.max_m = nv_ro08(bios, data + 23); nvbios_pll_parse()
306 info->vco2.min_n = nv_ro08(bios, data + 24); nvbios_pll_parse()
307 info->vco2.max_n = nv_ro08(bios, data + 25); nvbios_pll_parse()
308 info->vco2.min_m = nv_ro08(bios, data + 26); nvbios_pll_parse()
309 info->vco2.max_m = nv_ro08(bios, data + 27); nvbios_pll_parse()
311 info->max_p = nv_ro08(bios, data + 29); nvbios_pll_parse()
312 info->max_p_usable = info->max_p; nvbios_pll_parse()
314 info->max_p_usable = 0x6; nvbios_pll_parse()
315 info->bias_p = nv_ro08(bios, data + 30); nvbios_pll_parse()
318 info->refclk = nv_ro32(bios, data + 31); nvbios_pll_parse()
323 info->vco1.min_freq = nv_ro16(bios, data + 0) * 1000; nvbios_pll_parse()
324 info->vco1.max_freq = nv_ro16(bios, data + 2) * 1000; nvbios_pll_parse()
325 info->vco2.min_freq = nv_ro16(bios, data + 4) * 1000; nvbios_pll_parse()
326 info->vco2.max_freq = nv_ro16(bios, data + 6) * 1000; nvbios_pll_parse()
327 info->vco1.min_inputfreq = nv_ro16(bios, data + 8) * 1000; nvbios_pll_parse()
328 info->vco2.min_inputfreq = nv_ro16(bios, data + 10) * 1000; nvbios_pll_parse()
329 info->vco1.max_inputfreq = nv_ro16(bios, data + 12) * 1000; nvbios_pll_parse()
330 info->vco2.max_inputfreq = nv_ro16(bios, data + 14) * 1000; nvbios_pll_parse()
331 info->vco1.min_n = nv_ro08(bios, data + 16); nvbios_pll_parse()
332 info->vco1.max_n = nv_ro08(bios, data + 17); nvbios_pll_parse()
333 info->vco1.min_m = nv_ro08(bios, data + 18); nvbios_pll_parse()
334 info->vco1.max_m = nv_ro08(bios, data + 19); nvbios_pll_parse()
335 info->vco2.min_n = nv_ro08(bios, data + 20); nvbios_pll_parse()
336 info->vco2.max_n = nv_ro08(bios, data + 21); nvbios_pll_parse()
337 info->vco2.min_m = nv_ro08(bios, data + 22); nvbios_pll_parse()
338 info->vco2.max_m = nv_ro08(bios, data + 23); nvbios_pll_parse()
339 info->max_p_usable = info->max_p = nv_ro08(bios, data + 25); nvbios_pll_parse()
340 info->bias_p = nv_ro08(bios, data + 27); nvbios_pll_parse()
341 info->refclk = nv_ro32(bios, data + 28); nvbios_pll_parse()
344 info->refclk = nv_ro16(bios, data + 9) * 1000; nvbios_pll_parse()
347 info->vco1.min_freq = nv_ro16(bios, data + 0) * 1000; nvbios_pll_parse()
348 info->vco1.max_freq = nv_ro16(bios, data + 2) * 1000; nvbios_pll_parse()
349 info->vco1.min_inputfreq = nv_ro16(bios, data + 4) * 1000; nvbios_pll_parse()
350 info->vco1.max_inputfreq = nv_ro16(bios, data + 6) * 1000; nvbios_pll_parse()
351 info->vco1.min_m = nv_ro08(bios, data + 8); nvbios_pll_parse()
352 info->vco1.max_m = nv_ro08(bios, data + 9); nvbios_pll_parse()
353 info->vco1.min_n = nv_ro08(bios, data + 10); nvbios_pll_parse()
354 info->vco1.max_n = nv_ro08(bios, data + 11); nvbios_pll_parse()
355 info->min_p = nv_ro08(bios, data + 12); nvbios_pll_parse()
356 info->max_p = nv_ro08(bios, data + 13); nvbios_pll_parse()
363 if (!info->refclk) { nvbios_pll_parse()
364 info->refclk = nv_device(bios)->crystal; nvbios_pll_parse()
367 if ((info->reg == 0x680508 && sel_clk & 0x20) || nvbios_pll_parse()
368 (info->reg == 0x680520 && sel_clk & 0x80)) { nvbios_pll_parse()
370 info->refclk = 200000; nvbios_pll_parse()
372 info->refclk = 25000; nvbios_pll_parse()
382 if (!info->vco1.max_freq) { nvbios_pll_parse()
383 info->vco1.max_freq = nv_ro32(bios, bios->bmp_offset + 67); nvbios_pll_parse()
384 info->vco1.min_freq = nv_ro32(bios, bios->bmp_offset + 71); nvbios_pll_parse()
386 info->vco1.max_freq = 256000; nvbios_pll_parse()
387 info->vco1.min_freq = 128000; nvbios_pll_parse()
390 info->vco1.min_inputfreq = 0; nvbios_pll_parse()
391 info->vco1.max_inputfreq = INT_MAX; nvbios_pll_parse()
392 info->vco1.min_n = 0x1; nvbios_pll_parse()
393 info->vco1.max_n = 0xff; nvbios_pll_parse()
394 info->vco1.min_m = 0x1; nvbios_pll_parse()
399 info->vco1.min_m = 0x7; nvbios_pll_parse()
400 info->vco1.max_m = 0xd; nvbios_pll_parse()
403 info->vco1.min_m = 0x8; nvbios_pll_parse()
404 info->vco1.max_m = 0xe; nvbios_pll_parse()
410 info->max_p = 4; nvbios_pll_parse()
412 info->max_p = 5; nvbios_pll_parse()
413 info->max_p_usable = info->max_p; nvbios_pll_parse()
H A Di2c.c71 dcb_i2c_parse(struct nvkm_bios *bios, u8 idx, struct dcb_i2c_entry *info) dcb_i2c_parse() argument
82 info->type = DCB_I2C_UNUSED; dcb_i2c_parse()
84 info->type = DCB_I2C_PMGR; dcb_i2c_parse()
87 info->type = nv_ro08(bios, ent + 0x03); dcb_i2c_parse()
89 info->type = nv_ro08(bios, ent + 0x03) & 0x07; dcb_i2c_parse()
90 if (info->type == 0x07) dcb_i2c_parse()
91 info->type = DCB_I2C_UNUSED; dcb_i2c_parse()
94 info->drive = DCB_I2C_UNUSED; dcb_i2c_parse()
95 info->sense = DCB_I2C_UNUSED; dcb_i2c_parse()
96 info->share = DCB_I2C_UNUSED; dcb_i2c_parse()
97 info->auxch = DCB_I2C_UNUSED; dcb_i2c_parse()
99 switch (info->type) { dcb_i2c_parse()
101 info->drive = nv_ro08(bios, ent + 0); dcb_i2c_parse()
102 info->sense = nv_ro08(bios, ent + 1); dcb_i2c_parse()
105 info->drive = nv_ro08(bios, ent + 1); dcb_i2c_parse()
108 info->drive = nv_ro08(bios, ent + 0) & 0x0f; dcb_i2c_parse()
110 info->share = nv_ro08(bios, ent + 1) >> 1; dcb_i2c_parse()
113 info->auxch = nv_ro08(bios, ent + 0) & 0x0f; dcb_i2c_parse()
115 info->share = info->auxch; dcb_i2c_parse()
118 info->drive = (nv_ro16(bios, ent + 0) & 0x01f) >> 0; dcb_i2c_parse()
119 if (info->drive == 0x1f) dcb_i2c_parse()
120 info->drive = DCB_I2C_UNUSED; dcb_i2c_parse()
121 info->auxch = (nv_ro16(bios, ent + 0) & 0x3e0) >> 5; dcb_i2c_parse()
122 if (info->auxch == 0x1f) dcb_i2c_parse()
123 info->auxch = DCB_I2C_UNUSED; dcb_i2c_parse()
124 info->share = info->auxch; dcb_i2c_parse()
129 nv_warn(bios, "unknown i2c type %d\n", info->type); dcb_i2c_parse()
130 info->type = DCB_I2C_UNUSED; dcb_i2c_parse()
136 /* BMP (from v4.0 has i2c info in the structure, it's in a dcb_i2c_parse()
145 info->drive = nv_ro08(bios, ent + 4); dcb_i2c_parse()
146 if (!info->drive) info->drive = 0x3f; dcb_i2c_parse()
147 info->sense = nv_ro08(bios, ent + 5); dcb_i2c_parse()
148 if (!info->sense) info->sense = 0x3e; dcb_i2c_parse()
151 info->drive = nv_ro08(bios, ent + 6); dcb_i2c_parse()
152 if (!info->drive) info->drive = 0x37; dcb_i2c_parse()
153 info->sense = nv_ro08(bios, ent + 7); dcb_i2c_parse()
154 if (!info->sense) info->sense = 0x36; dcb_i2c_parse()
157 info->type = DCB_I2C_NV04_BIT; dcb_i2c_parse()
158 info->share = DCB_I2C_UNUSED; dcb_i2c_parse()
H A Dvmap.c58 struct nvbios_vmap *info) nvbios_vmap_parse()
61 memset(info, 0x00, sizeof(*info)); nvbios_vmap_parse()
84 struct nvbios_vmap_entry *info) nvbios_vmap_entry_parse()
87 memset(info, 0x00, sizeof(*info)); nvbios_vmap_entry_parse()
90 info->link = 0xff; nvbios_vmap_entry_parse()
91 info->min = nv_ro32(bios, vmap + 0x00); nvbios_vmap_entry_parse()
92 info->max = nv_ro32(bios, vmap + 0x04); nvbios_vmap_entry_parse()
93 info->arg[0] = nv_ro32(bios, vmap + 0x08); nvbios_vmap_entry_parse()
94 info->arg[1] = nv_ro32(bios, vmap + 0x0c); nvbios_vmap_entry_parse()
95 info->arg[2] = nv_ro32(bios, vmap + 0x10); nvbios_vmap_entry_parse()
98 info->unk0 = nv_ro08(bios, vmap + 0x00); nvbios_vmap_entry_parse()
99 info->link = nv_ro08(bios, vmap + 0x01); nvbios_vmap_entry_parse()
100 info->min = nv_ro32(bios, vmap + 0x02); nvbios_vmap_entry_parse()
101 info->max = nv_ro32(bios, vmap + 0x06); nvbios_vmap_entry_parse()
102 info->arg[0] = nv_ro32(bios, vmap + 0x0a); nvbios_vmap_entry_parse()
103 info->arg[1] = nv_ro32(bios, vmap + 0x0e); nvbios_vmap_entry_parse()
104 info->arg[2] = nv_ro32(bios, vmap + 0x12); nvbios_vmap_entry_parse()
105 info->arg[3] = nv_ro32(bios, vmap + 0x16); nvbios_vmap_entry_parse()
106 info->arg[4] = nv_ro32(bios, vmap + 0x1a); nvbios_vmap_entry_parse()
107 info->arg[5] = nv_ro32(bios, vmap + 0x1e); nvbios_vmap_entry_parse()
57 nvbios_vmap_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_vmap *info) nvbios_vmap_parse() argument
83 nvbios_vmap_entry_parse(struct nvkm_bios *bios, int idx, u8 *ver, u8 *len, struct nvbios_vmap_entry *info) nvbios_vmap_entry_parse() argument
H A Dpmu.c66 struct nvbios_pmuT *info) nvbios_pmuTp()
69 memset(info, 0x00, sizeof(*info)); nvbios_pmuTp()
92 struct nvbios_pmuE *info) nvbios_pmuEp()
95 memset(info, 0x00, sizeof(*info)); nvbios_pmuEp()
98 info->type = nv_ro08(bios, data + 0x00); nvbios_pmuEp()
99 info->data = nv_ro32(bios, data + 0x02); nvbios_pmuEp()
106 nvbios_pmuRm(struct nvkm_bios *bios, u8 type, struct nvbios_pmuR *info) nvbios_pmuRm() argument
111 memset(info, 0x00, sizeof(*info)); nvbios_pmuRm()
115 info->init_addr_pmu = nv_ro32(bios, data + 0x08); nvbios_pmuRm()
116 info->args_addr_pmu = nv_ro32(bios, data + 0x0c); nvbios_pmuRm()
117 info->boot_addr = data + 0x30; nvbios_pmuRm()
118 info->boot_addr_pmu = nv_ro32(bios, data + 0x10) + nvbios_pmuRm()
120 info->boot_size = nv_ro32(bios, data + 0x1c) - nvbios_pmuRm()
122 info->code_addr = info->boot_addr + info->boot_size; nvbios_pmuRm()
123 info->code_addr_pmu = info->boot_addr_pmu + nvbios_pmuRm()
124 info->boot_size; nvbios_pmuRm()
125 info->code_size = nv_ro32(bios, data + 0x20); nvbios_pmuRm()
126 info->data_addr = data + 0x30 + nvbios_pmuRm()
128 info->data_addr_pmu = nv_ro32(bios, data + 0x28); nvbios_pmuRm()
129 info->data_size = nv_ro32(bios, data + 0x2c); nvbios_pmuRm()
65 nvbios_pmuTp(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, struct nvbios_pmuT *info) nvbios_pmuTp() argument
91 nvbios_pmuEp(struct nvkm_bios *bios, int idx, u8 *ver, u8 *hdr, struct nvbios_pmuE *info) nvbios_pmuEp() argument
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/clk/
H A Dpllgt215.c30 gt215_pll_calc(struct nvkm_subdev *subdev, struct nvbios_pll *info, gt215_pll_calc() argument
36 *P = info->vco1.max_freq / freq; gt215_pll_calc()
37 if (*P > info->max_p) gt215_pll_calc()
38 *P = info->max_p; gt215_pll_calc()
39 if (*P < info->min_p) gt215_pll_calc()
40 *P = info->min_p; gt215_pll_calc()
42 lM = (info->refclk + info->vco1.max_inputfreq) / info->vco1.max_inputfreq; gt215_pll_calc()
43 lM = max(lM, (int)info->vco1.min_m); gt215_pll_calc()
44 hM = (info->refclk + info->vco1.min_inputfreq) / info->vco1.min_inputfreq; gt215_pll_calc()
45 hM = min(hM, (int)info->vco1.max_m); gt215_pll_calc()
50 N = tmp / info->refclk; gt215_pll_calc()
51 fN = tmp % info->refclk; gt215_pll_calc()
54 if (fN >= info->refclk / 2) gt215_pll_calc()
57 if (fN < info->refclk / 2) gt215_pll_calc()
59 fN = tmp - (N * info->refclk); gt215_pll_calc()
62 if (N < info->vco1.min_n) gt215_pll_calc()
64 if (N > info->vco1.max_n) gt215_pll_calc()
67 err = abs(freq - (info->refclk * N / M / *P)); gt215_pll_calc()
75 *pfN = ((fN << 13) + info->refclk / 2) / info->refclk; gt215_pll_calc()
86 return info->refclk * *pN / *pM / *P; gt215_pll_calc()
/linux-4.1.27/sound/soc/cirrus/
H A Dep93xx-i2s.c84 static inline void ep93xx_i2s_write_reg(struct ep93xx_i2s_info *info, ep93xx_i2s_write_reg() argument
87 __raw_writel(val, info->regs + reg); ep93xx_i2s_write_reg()
90 static inline unsigned ep93xx_i2s_read_reg(struct ep93xx_i2s_info *info, ep93xx_i2s_read_reg() argument
93 return __raw_readl(info->regs + reg); ep93xx_i2s_read_reg()
96 static void ep93xx_i2s_enable(struct ep93xx_i2s_info *info, int stream) ep93xx_i2s_enable() argument
101 if ((ep93xx_i2s_read_reg(info, EP93XX_I2S_TX0EN) & 0x1) == 0 && ep93xx_i2s_enable()
102 (ep93xx_i2s_read_reg(info, EP93XX_I2S_RX0EN) & 0x1) == 0) { ep93xx_i2s_enable()
104 clk_enable(info->mclk); ep93xx_i2s_enable()
105 clk_enable(info->sclk); ep93xx_i2s_enable()
106 clk_enable(info->lrclk); ep93xx_i2s_enable()
109 ep93xx_i2s_write_reg(info, EP93XX_I2S_GLCTRL, 1); ep93xx_i2s_enable()
118 ep93xx_i2s_write_reg(info, base_reg + (i * 4), 1); ep93xx_i2s_enable()
121 static void ep93xx_i2s_disable(struct ep93xx_i2s_info *info, int stream) ep93xx_i2s_disable() argument
132 ep93xx_i2s_write_reg(info, base_reg + (i * 4), 0); ep93xx_i2s_disable()
134 if ((ep93xx_i2s_read_reg(info, EP93XX_I2S_TX0EN) & 0x1) == 0 && ep93xx_i2s_disable()
135 (ep93xx_i2s_read_reg(info, EP93XX_I2S_RX0EN) & 0x1) == 0) { ep93xx_i2s_disable()
137 ep93xx_i2s_write_reg(info, EP93XX_I2S_GLCTRL, 0); ep93xx_i2s_disable()
140 clk_disable(info->lrclk); ep93xx_i2s_disable()
141 clk_disable(info->sclk); ep93xx_i2s_disable()
142 clk_disable(info->mclk); ep93xx_i2s_disable()
148 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_i2s_dai_probe() local
150 info->dma_params_tx.filter_data = ep93xx_i2s_dai_probe()
152 info->dma_params_rx.filter_data = ep93xx_i2s_dai_probe()
155 dai->playback_dma_data = &info->dma_params_tx; ep93xx_i2s_dai_probe()
156 dai->capture_dma_data = &info->dma_params_rx; ep93xx_i2s_dai_probe()
164 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_i2s_shutdown() local
166 ep93xx_i2s_disable(info, substream->stream); ep93xx_i2s_shutdown()
172 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai); ep93xx_i2s_set_dai_fmt() local
175 clk_cfg = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXCLKCFG); ep93xx_i2s_set_dai_fmt()
176 lin_ctrl = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXLINCTRLDATA); ep93xx_i2s_set_dai_fmt()
238 ep93xx_i2s_write_reg(info, EP93XX_I2S_RXCLKCFG, clk_cfg); ep93xx_i2s_set_dai_fmt()
239 ep93xx_i2s_write_reg(info, EP93XX_I2S_TXCLKCFG, clk_cfg); ep93xx_i2s_set_dai_fmt()
240 ep93xx_i2s_write_reg(info, EP93XX_I2S_RXLINCTRLDATA, lin_ctrl); ep93xx_i2s_set_dai_fmt()
241 ep93xx_i2s_write_reg(info, EP93XX_I2S_TXLINCTRLDATA, lin_ctrl); ep93xx_i2s_set_dai_fmt()
249 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_i2s_hw_params() local
271 ep93xx_i2s_write_reg(info, EP93XX_I2S_TXWRDLEN, word_len); ep93xx_i2s_hw_params()
273 ep93xx_i2s_write_reg(info, EP93XX_I2S_RXWRDLEN, word_len); ep93xx_i2s_hw_params()
283 div = clk_get_rate(info->mclk) / params_rate(params); ep93xx_i2s_hw_params()
293 err = clk_set_rate(info->sclk, clk_get_rate(info->mclk) / sdiv); ep93xx_i2s_hw_params()
297 err = clk_set_rate(info->lrclk, clk_get_rate(info->sclk) / lrdiv); ep93xx_i2s_hw_params()
301 ep93xx_i2s_enable(info, substream->stream); ep93xx_i2s_hw_params()
308 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai); ep93xx_i2s_set_sysclk() local
313 return clk_set_rate(info->mclk, freq); ep93xx_i2s_set_sysclk()
319 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_i2s_suspend() local
324 ep93xx_i2s_disable(info, SNDRV_PCM_STREAM_PLAYBACK); ep93xx_i2s_suspend()
325 ep93xx_i2s_disable(info, SNDRV_PCM_STREAM_CAPTURE); ep93xx_i2s_suspend()
332 struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_i2s_resume() local
337 ep93xx_i2s_enable(info, SNDRV_PCM_STREAM_PLAYBACK); ep93xx_i2s_resume()
338 ep93xx_i2s_enable(info, SNDRV_PCM_STREAM_CAPTURE); ep93xx_i2s_resume()
382 struct ep93xx_i2s_info *info; ep93xx_i2s_probe() local
386 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); ep93xx_i2s_probe()
387 if (!info) ep93xx_i2s_probe()
391 info->regs = devm_ioremap_resource(&pdev->dev, res); ep93xx_i2s_probe()
392 if (IS_ERR(info->regs)) ep93xx_i2s_probe()
393 return PTR_ERR(info->regs); ep93xx_i2s_probe()
395 info->mclk = clk_get(&pdev->dev, "mclk"); ep93xx_i2s_probe()
396 if (IS_ERR(info->mclk)) { ep93xx_i2s_probe()
397 err = PTR_ERR(info->mclk); ep93xx_i2s_probe()
401 info->sclk = clk_get(&pdev->dev, "sclk"); ep93xx_i2s_probe()
402 if (IS_ERR(info->sclk)) { ep93xx_i2s_probe()
403 err = PTR_ERR(info->sclk); ep93xx_i2s_probe()
407 info->lrclk = clk_get(&pdev->dev, "lrclk"); ep93xx_i2s_probe()
408 if (IS_ERR(info->lrclk)) { ep93xx_i2s_probe()
409 err = PTR_ERR(info->lrclk); ep93xx_i2s_probe()
413 dev_set_drvdata(&pdev->dev, info); ep93xx_i2s_probe()
429 clk_put(info->lrclk); ep93xx_i2s_probe()
431 clk_put(info->sclk); ep93xx_i2s_probe()
433 clk_put(info->mclk); ep93xx_i2s_probe()
440 struct ep93xx_i2s_info *info = dev_get_drvdata(&pdev->dev); ep93xx_i2s_remove() local
443 clk_put(info->lrclk); ep93xx_i2s_remove()
444 clk_put(info->sclk); ep93xx_i2s_remove()
445 clk_put(info->mclk); ep93xx_i2s_remove()
H A Dep93xx-ac97.c90 * struct ep93xx_ac97_info - EP93xx AC97 controller info structure
120 static inline unsigned ep93xx_ac97_read_reg(struct ep93xx_ac97_info *info, ep93xx_ac97_read_reg() argument
123 return __raw_readl(info->regs + reg); ep93xx_ac97_read_reg()
126 static inline void ep93xx_ac97_write_reg(struct ep93xx_ac97_info *info, ep93xx_ac97_write_reg() argument
129 __raw_writel(val, info->regs + reg); ep93xx_ac97_write_reg()
135 struct ep93xx_ac97_info *info = ep93xx_ac97_info; ep93xx_ac97_read() local
138 mutex_lock(&info->lock); ep93xx_ac97_read()
140 ep93xx_ac97_write_reg(info, AC97S1DATA, reg); ep93xx_ac97_read()
141 ep93xx_ac97_write_reg(info, AC97IM, AC97_SLOT2RXVALID); ep93xx_ac97_read()
142 if (!wait_for_completion_timeout(&info->done, AC97_TIMEOUT)) { ep93xx_ac97_read()
143 dev_warn(info->dev, "timeout reading register %x\n", reg); ep93xx_ac97_read()
144 mutex_unlock(&info->lock); ep93xx_ac97_read()
147 val = (unsigned short)ep93xx_ac97_read_reg(info, AC97S2DATA); ep93xx_ac97_read()
149 mutex_unlock(&info->lock); ep93xx_ac97_read()
157 struct ep93xx_ac97_info *info = ep93xx_ac97_info; ep93xx_ac97_write() local
159 mutex_lock(&info->lock); ep93xx_ac97_write()
165 ep93xx_ac97_write_reg(info, AC97S2DATA, val); ep93xx_ac97_write()
166 ep93xx_ac97_write_reg(info, AC97S1DATA, reg); ep93xx_ac97_write()
168 ep93xx_ac97_write_reg(info, AC97IM, AC97_SLOT2TXCOMPLETE); ep93xx_ac97_write()
169 if (!wait_for_completion_timeout(&info->done, AC97_TIMEOUT)) ep93xx_ac97_write()
170 dev_warn(info->dev, "timeout writing register %x\n", reg); ep93xx_ac97_write()
172 mutex_unlock(&info->lock); ep93xx_ac97_write()
177 struct ep93xx_ac97_info *info = ep93xx_ac97_info; ep93xx_ac97_warm_reset() local
179 mutex_lock(&info->lock); ep93xx_ac97_warm_reset()
187 ep93xx_ac97_write_reg(info, AC97SYNC, AC97SYNC_TIMEDSYNC); ep93xx_ac97_warm_reset()
188 ep93xx_ac97_write_reg(info, AC97IM, AC97_CODECREADY); ep93xx_ac97_warm_reset()
189 if (!wait_for_completion_timeout(&info->done, AC97_TIMEOUT)) ep93xx_ac97_warm_reset()
190 dev_warn(info->dev, "codec warm reset timeout\n"); ep93xx_ac97_warm_reset()
192 mutex_unlock(&info->lock); ep93xx_ac97_warm_reset()
197 struct ep93xx_ac97_info *info = ep93xx_ac97_info; ep93xx_ac97_cold_reset() local
199 mutex_lock(&info->lock); ep93xx_ac97_cold_reset()
205 ep93xx_ac97_write_reg(info, AC97GCR, 0); ep93xx_ac97_cold_reset()
206 ep93xx_ac97_write_reg(info, AC97EOI, AC97EOI_CODECREADY | AC97EOI_WINT); ep93xx_ac97_cold_reset()
207 ep93xx_ac97_write_reg(info, AC97GCR, AC97GCR_AC97IFE); ep93xx_ac97_cold_reset()
212 ep93xx_ac97_write_reg(info, AC97RESET, AC97RESET_TIMEDRESET); ep93xx_ac97_cold_reset()
213 ep93xx_ac97_write_reg(info, AC97IM, AC97_CODECREADY); ep93xx_ac97_cold_reset()
214 if (!wait_for_completion_timeout(&info->done, AC97_TIMEOUT)) ep93xx_ac97_cold_reset()
215 dev_warn(info->dev, "codec cold reset timeout\n"); ep93xx_ac97_cold_reset()
223 mutex_unlock(&info->lock); ep93xx_ac97_cold_reset()
228 struct ep93xx_ac97_info *info = dev_id; ep93xx_ac97_interrupt() local
236 status = ep93xx_ac97_read_reg(info, AC97GIS); ep93xx_ac97_interrupt()
237 mask = ep93xx_ac97_read_reg(info, AC97IM); ep93xx_ac97_interrupt()
239 ep93xx_ac97_write_reg(info, AC97IM, mask); ep93xx_ac97_interrupt()
241 complete(&info->done); ep93xx_ac97_interrupt()
255 struct ep93xx_ac97_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_ac97_trigger() local
270 ep93xx_ac97_write_reg(info, AC97TXCR(1), v); ep93xx_ac97_trigger()
279 ep93xx_ac97_write_reg(info, AC97RXCR(1), v); ep93xx_ac97_trigger()
298 v = ep93xx_ac97_read_reg(info, AC97SR(1)); ep93xx_ac97_trigger()
300 dev_warn(info->dev, "TX timeout\n"); ep93xx_ac97_trigger()
306 ep93xx_ac97_write_reg(info, AC97TXCR(1), 0); ep93xx_ac97_trigger()
309 ep93xx_ac97_write_reg(info, AC97RXCR(1), 0); ep93xx_ac97_trigger()
314 dev_warn(info->dev, "unknown command %d\n", cmd); ep93xx_ac97_trigger()
323 struct ep93xx_ac97_info *info = snd_soc_dai_get_drvdata(dai); ep93xx_ac97_dai_probe() local
325 info->dma_params_tx.filter_data = &ep93xx_ac97_pcm_out; ep93xx_ac97_dai_probe()
326 info->dma_params_rx.filter_data = &ep93xx_ac97_pcm_in; ep93xx_ac97_dai_probe()
328 dai->playback_dma_data = &info->dma_params_tx; ep93xx_ac97_dai_probe()
329 dai->capture_dma_data = &info->dma_params_rx; ep93xx_ac97_dai_probe()
366 struct ep93xx_ac97_info *info; ep93xx_ac97_probe() local
371 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); ep93xx_ac97_probe()
372 if (!info) ep93xx_ac97_probe()
376 info->regs = devm_ioremap_resource(&pdev->dev, res); ep93xx_ac97_probe()
377 if (IS_ERR(info->regs)) ep93xx_ac97_probe()
378 return PTR_ERR(info->regs); ep93xx_ac97_probe()
385 IRQF_TRIGGER_HIGH, pdev->name, info); ep93xx_ac97_probe()
389 dev_set_drvdata(&pdev->dev, info); ep93xx_ac97_probe()
391 mutex_init(&info->lock); ep93xx_ac97_probe()
392 init_completion(&info->done); ep93xx_ac97_probe()
393 info->dev = &pdev->dev; ep93xx_ac97_probe()
395 ep93xx_ac97_info = info; ep93xx_ac97_probe()
396 platform_set_drvdata(pdev, info); ep93xx_ac97_probe()
423 struct ep93xx_ac97_info *info = platform_get_drvdata(pdev); ep93xx_ac97_remove() local
428 ep93xx_ac97_write_reg(info, AC97GCR, 0); ep93xx_ac97_remove()
/linux-4.1.27/drivers/char/pcmcia/
H A Dsynclink_cs.c321 #define write_reg(info, reg, val) outb((val),(info)->io_base + (reg))
322 #define read_reg(info, reg) inb((info)->io_base + (reg))
324 #define read_reg16(info, reg) inw((info)->io_base + (reg))
325 #define write_reg16(info, reg, val) outw((val), (info)->io_base + (reg))
327 #define set_reg_bits(info, reg, mask) \
328 write_reg(info, (reg), \
329 (unsigned char) (read_reg(info, (reg)) | (mask)))
330 #define clear_reg_bits(info, reg, mask) \
331 write_reg(info, (reg), \
332 (unsigned char) (read_reg(info, (reg)) & ~(mask)))
336 static void irq_disable(MGSLPC_INFO *info, unsigned char channel, unsigned short mask) irq_disable() argument
339 info->imra_value |= mask; irq_disable()
340 write_reg16(info, CHA + IMR, info->imra_value); irq_disable()
342 info->imrb_value |= mask; irq_disable()
343 write_reg16(info, CHB + IMR, info->imrb_value); irq_disable()
346 static void irq_enable(MGSLPC_INFO *info, unsigned char channel, unsigned short mask) irq_enable() argument
349 info->imra_value &= ~mask; irq_enable()
350 write_reg16(info, CHA + IMR, info->imra_value); irq_enable()
352 info->imrb_value &= ~mask; irq_enable()
353 write_reg16(info, CHB + IMR, info->imrb_value); irq_enable()
357 #define port_irq_disable(info, mask) \
358 { info->pim_value |= (mask); write_reg(info, PIM, info->pim_value); }
360 #define port_irq_enable(info, mask) \
361 { info->pim_value &= ~(mask); write_reg(info, PIM, info->pim_value); }
363 static void rx_start(MGSLPC_INFO *info);
364 static void rx_stop(MGSLPC_INFO *info);
366 static void tx_start(MGSLPC_INFO *info, struct tty_struct *tty);
367 static void tx_stop(MGSLPC_INFO *info);
368 static void tx_set_idle(MGSLPC_INFO *info);
370 static void get_signals(MGSLPC_INFO *info);
371 static void set_signals(MGSLPC_INFO *info);
373 static void reset_device(MGSLPC_INFO *info);
375 static void hdlc_mode(MGSLPC_INFO *info);
376 static void async_mode(MGSLPC_INFO *info);
385 static void hdlcdev_tx_done(MGSLPC_INFO *info);
386 static void hdlcdev_rx(MGSLPC_INFO *info, char *buf, int size);
387 static int hdlcdev_init(MGSLPC_INFO *info);
388 static void hdlcdev_exit(MGSLPC_INFO *info);
391 static void trace_block(MGSLPC_INFO *info,const char* data, int count, int xmit);
393 static bool register_test(MGSLPC_INFO *info);
394 static bool irq_test(MGSLPC_INFO *info);
395 static int adapter_test(MGSLPC_INFO *info);
397 static int claim_resources(MGSLPC_INFO *info);
398 static void release_resources(MGSLPC_INFO *info);
399 static int mgslpc_add_device(MGSLPC_INFO *info);
400 static void mgslpc_remove_device(MGSLPC_INFO *info);
402 static bool rx_get_frame(MGSLPC_INFO *info, struct tty_struct *tty);
403 static void rx_reset_buffers(MGSLPC_INFO *info);
404 static int rx_alloc_buffers(MGSLPC_INFO *info);
405 static void rx_free_buffers(MGSLPC_INFO *info);
413 static void bh_transmit(MGSLPC_INFO *info, struct tty_struct *tty);
414 static void bh_status(MGSLPC_INFO *info);
422 static int get_stats(MGSLPC_INFO *info, struct mgsl_icount __user *user_icount);
423 static int get_params(MGSLPC_INFO *info, MGSL_PARAMS __user *user_params);
424 static int set_params(MGSLPC_INFO *info, MGSL_PARAMS __user *new_params, struct tty_struct *tty);
425 static int get_txidle(MGSLPC_INFO *info, int __user *idle_mode);
426 static int set_txidle(MGSLPC_INFO *info, int idle_mode);
427 static int set_txenable(MGSLPC_INFO *info, int enable, struct tty_struct *tty);
428 static int tx_abort(MGSLPC_INFO *info);
429 static int set_rxenable(MGSLPC_INFO *info, int enable);
430 static int wait_events(MGSLPC_INFO *info, int __user *mask);
466 static void mgslpc_change_params(MGSLPC_INFO *info, struct tty_struct *tty);
516 MGSLPC_INFO *info; mgslpc_probe() local
522 info = kzalloc(sizeof(MGSLPC_INFO), GFP_KERNEL); mgslpc_probe()
523 if (!info) { mgslpc_probe()
528 info->magic = MGSLPC_MAGIC; mgslpc_probe()
529 tty_port_init(&info->port); mgslpc_probe()
530 info->port.ops = &mgslpc_port_ops; mgslpc_probe()
531 INIT_WORK(&info->task, bh_handler); mgslpc_probe()
532 info->max_frame_size = 4096; mgslpc_probe()
533 info->port.close_delay = 5*HZ/10; mgslpc_probe()
534 info->port.closing_wait = 30*HZ; mgslpc_probe()
535 init_waitqueue_head(&info->status_event_wait_q); mgslpc_probe()
536 init_waitqueue_head(&info->event_wait_q); mgslpc_probe()
537 spin_lock_init(&info->lock); mgslpc_probe()
538 spin_lock_init(&info->netlock); mgslpc_probe()
539 memcpy(&info->params,&default_params,sizeof(MGSL_PARAMS)); mgslpc_probe()
540 info->idle_mode = HDLC_TXIDLE_FLAGS; mgslpc_probe()
541 info->imra_value = 0xffff; mgslpc_probe()
542 info->imrb_value = 0xffff; mgslpc_probe()
543 info->pim_value = 0xff; mgslpc_probe()
545 info->p_dev = link; mgslpc_probe()
546 link->priv = info; mgslpc_probe()
554 ret = mgslpc_add_device(info); mgslpc_probe()
563 tty_port_destroy(&info->port); mgslpc_probe()
564 kfree(info); mgslpc_probe()
578 MGSLPC_INFO *info = link->priv; mgslpc_config() local
600 info->io_base = link->resource[0]->start; mgslpc_config()
601 info->irq_level = link->irq; mgslpc_config()
636 MGSLPC_INFO *info = link->priv; mgslpc_suspend() local
638 info->stop = 1; mgslpc_suspend()
645 MGSLPC_INFO *info = link->priv; mgslpc_resume() local
647 info->stop = 0; mgslpc_resume()
653 static inline bool mgslpc_paranoia_check(MGSLPC_INFO *info, mgslpc_paranoia_check() argument
662 if (!info) { mgslpc_paranoia_check()
666 if (info->magic != MGSLPC_MAGIC) { mgslpc_paranoia_check()
671 if (!info) mgslpc_paranoia_check()
686 static bool wait_command_complete(MGSLPC_INFO *info, unsigned char channel) wait_command_complete() argument
690 while (read_reg(info, (unsigned char)(channel+STAR)) & BIT2) { wait_command_complete()
698 static void issue_command(MGSLPC_INFO *info, unsigned char channel, unsigned char cmd) issue_command() argument
700 wait_command_complete(info, channel); issue_command()
701 write_reg(info, (unsigned char) (channel + CMDR), cmd); issue_command()
706 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; tx_pause() local
709 if (mgslpc_paranoia_check(info, tty->name, "tx_pause")) tx_pause()
712 printk("tx_pause(%s)\n", info->device_name); tx_pause()
714 spin_lock_irqsave(&info->lock, flags); tx_pause()
715 if (info->tx_enabled) tx_pause()
716 tx_stop(info); tx_pause()
717 spin_unlock_irqrestore(&info->lock, flags); tx_pause()
722 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; tx_release() local
725 if (mgslpc_paranoia_check(info, tty->name, "tx_release")) tx_release()
728 printk("tx_release(%s)\n", info->device_name); tx_release()
730 spin_lock_irqsave(&info->lock, flags); tx_release()
731 if (!info->tx_enabled) tx_release()
732 tx_start(info, tty); tx_release()
733 spin_unlock_irqrestore(&info->lock, flags); tx_release()
739 static int bh_action(MGSLPC_INFO *info) bh_action() argument
744 spin_lock_irqsave(&info->lock, flags); bh_action()
746 if (info->pending_bh & BH_RECEIVE) { bh_action()
747 info->pending_bh &= ~BH_RECEIVE; bh_action()
749 } else if (info->pending_bh & BH_TRANSMIT) { bh_action()
750 info->pending_bh &= ~BH_TRANSMIT; bh_action()
752 } else if (info->pending_bh & BH_STATUS) { bh_action()
753 info->pending_bh &= ~BH_STATUS; bh_action()
759 info->bh_running = false; bh_action()
760 info->bh_requested = false; bh_action()
763 spin_unlock_irqrestore(&info->lock, flags); bh_action()
770 MGSLPC_INFO *info = container_of(work, MGSLPC_INFO, task); bh_handler() local
776 __FILE__,__LINE__,info->device_name); bh_handler()
778 info->bh_running = true; bh_handler()
779 tty = tty_port_tty_get(&info->port); bh_handler()
781 while((action = bh_action(info)) != 0) { bh_handler()
791 while(rx_get_frame(info, tty)); bh_handler()
794 bh_transmit(info, tty); bh_handler()
797 bh_status(info); bh_handler()
809 __FILE__,__LINE__,info->device_name); bh_handler()
812 static void bh_transmit(MGSLPC_INFO *info, struct tty_struct *tty) bh_transmit() argument
815 printk("bh_transmit() entry on %s\n", info->device_name); bh_transmit()
821 static void bh_status(MGSLPC_INFO *info) bh_status() argument
823 info->ri_chkcount = 0; bh_status()
824 info->dsr_chkcount = 0; bh_status()
825 info->dcd_chkcount = 0; bh_status()
826 info->cts_chkcount = 0; bh_status()
830 static void rx_ready_hdlc(MGSLPC_INFO *info, int eom) rx_ready_hdlc() argument
834 RXBUF *buf = (RXBUF*)(info->rx_buf + (info->rx_put * info->rx_buf_size)); rx_ready_hdlc()
839 if (!info->rx_enabled) rx_ready_hdlc()
842 if (info->rx_frame_count >= info->rx_buf_count) { rx_ready_hdlc()
844 issue_command(info, CHA, CMD_RXRESET); rx_ready_hdlc()
845 info->pending_bh |= BH_RECEIVE; rx_ready_hdlc()
846 info->rx_overflow = true; rx_ready_hdlc()
847 info->icount.buf_overrun++; rx_ready_hdlc()
853 fifo_count = (unsigned char)(read_reg(info, CHA+RBCL) & 0x1f); rx_ready_hdlc()
862 data[0] = read_reg(info, CHA + RXFIFO); rx_ready_hdlc()
865 *((unsigned short *) data) = read_reg16(info, CHA + RXFIFO); rx_ready_hdlc()
872 if (buf->count >= info->max_frame_size) { rx_ready_hdlc()
874 issue_command(info, CHA, CMD_RXRESET); rx_ready_hdlc()
884 info->pending_bh |= BH_RECEIVE; rx_ready_hdlc()
885 info->rx_frame_count++; rx_ready_hdlc()
886 info->rx_put++; rx_ready_hdlc()
887 if (info->rx_put >= info->rx_buf_count) rx_ready_hdlc()
888 info->rx_put = 0; rx_ready_hdlc()
890 issue_command(info, CHA, CMD_RXFIFO); rx_ready_hdlc()
893 static void rx_ready_async(MGSLPC_INFO *info, int tcd) rx_ready_async() argument
895 struct tty_port *port = &info->port; rx_ready_async()
899 struct mgsl_icount *icount = &info->icount; rx_ready_async()
903 fifo_count = (unsigned char)(read_reg(info, CHA+RBCL) & 0x1f); rx_ready_async()
908 if (!fifo_count && (read_reg(info,CHA+STAR) & BIT5)) rx_ready_async()
916 data = read_reg(info, CHA + RXFIFO); rx_ready_async()
917 status = read_reg(info, CHA + RXFIFO); rx_ready_async()
934 if (status & info->ignore_status_mask) rx_ready_async()
937 status &= info->read_status_mask; rx_ready_async()
946 issue_command(info, CHA, CMD_RXFIFO); rx_ready_async()
961 static void tx_done(MGSLPC_INFO *info, struct tty_struct *tty) tx_done() argument
963 if (!info->tx_active) tx_done()
966 info->tx_active = false; tx_done()
967 info->tx_aborting = false; tx_done()
969 if (info->params.mode == MGSL_MODE_ASYNC) tx_done()
972 info->tx_count = info->tx_put = info->tx_get = 0; tx_done()
973 del_timer(&info->tx_timer); tx_done()
975 if (info->drop_rts_on_tx_done) { tx_done()
976 get_signals(info); tx_done()
977 if (info->serial_signals & SerialSignal_RTS) { tx_done()
978 info->serial_signals &= ~SerialSignal_RTS; tx_done()
979 set_signals(info); tx_done()
981 info->drop_rts_on_tx_done = false; tx_done()
985 if (info->netcount) tx_done()
986 hdlcdev_tx_done(info); tx_done()
991 tx_stop(info); tx_done()
994 info->pending_bh |= BH_TRANSMIT; tx_done()
998 static void tx_ready(MGSLPC_INFO *info, struct tty_struct *tty) tx_ready() argument
1004 printk("%s(%d):tx_ready(%s)\n", __FILE__, __LINE__, info->device_name); tx_ready()
1006 if (info->params.mode == MGSL_MODE_HDLC) { tx_ready()
1007 if (!info->tx_active) tx_ready()
1011 tx_stop(info); tx_ready()
1014 if (!info->tx_count) tx_ready()
1015 info->tx_active = false; tx_ready()
1018 if (!info->tx_count) tx_ready()
1021 while (info->tx_count && fifo_count) { tx_ready()
1022 c = min(2, min_t(int, fifo_count, min(info->tx_count, TXBUFSIZE - info->tx_get))); tx_ready()
1025 write_reg(info, CHA + TXFIFO, *(info->tx_buf + info->tx_get)); tx_ready()
1027 write_reg16(info, CHA + TXFIFO, tx_ready()
1028 *((unsigned short*)(info->tx_buf + info->tx_get))); tx_ready()
1030 info->tx_count -= c; tx_ready()
1031 info->tx_get = (info->tx_get + c) & (TXBUFSIZE - 1); tx_ready()
1035 if (info->params.mode == MGSL_MODE_ASYNC) { tx_ready()
1036 if (info->tx_count < WAKEUP_CHARS) tx_ready()
1037 info->pending_bh |= BH_TRANSMIT; tx_ready()
1038 issue_command(info, CHA, CMD_TXFIFO); tx_ready()
1040 if (info->tx_count) tx_ready()
1041 issue_command(info, CHA, CMD_TXFIFO); tx_ready()
1043 issue_command(info, CHA, CMD_TXFIFO + CMD_TXEOM); tx_ready()
1047 static void cts_change(MGSLPC_INFO *info, struct tty_struct *tty) cts_change() argument
1049 get_signals(info); cts_change()
1050 if ((info->cts_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) cts_change()
1051 irq_disable(info, CHB, IRQ_CTS); cts_change()
1052 info->icount.cts++; cts_change()
1053 if (info->serial_signals & SerialSignal_CTS) cts_change()
1054 info->input_signal_events.cts_up++; cts_change()
1056 info->input_signal_events.cts_down++; cts_change()
1057 wake_up_interruptible(&info->status_event_wait_q); cts_change()
1058 wake_up_interruptible(&info->event_wait_q); cts_change()
1060 if (tty && tty_port_cts_enabled(&info->port)) { cts_change()
1062 if (info->serial_signals & SerialSignal_CTS) { cts_change()
1066 tx_start(info, tty); cts_change()
1067 info->pending_bh |= BH_TRANSMIT; cts_change()
1071 if (!(info->serial_signals & SerialSignal_CTS)) { cts_change()
1075 tx_stop(info); cts_change()
1079 info->pending_bh |= BH_STATUS; cts_change()
1082 static void dcd_change(MGSLPC_INFO *info, struct tty_struct *tty) dcd_change() argument
1084 get_signals(info); dcd_change()
1085 if ((info->dcd_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) dcd_change()
1086 irq_disable(info, CHB, IRQ_DCD); dcd_change()
1087 info->icount.dcd++; dcd_change()
1088 if (info->serial_signals & SerialSignal_DCD) { dcd_change()
1089 info->input_signal_events.dcd_up++; dcd_change()
1092 info->input_signal_events.dcd_down++; dcd_change()
1094 if (info->netcount) { dcd_change()
1095 if (info->serial_signals & SerialSignal_DCD) dcd_change()
1096 netif_carrier_on(info->netdev); dcd_change()
1098 netif_carrier_off(info->netdev); dcd_change()
1101 wake_up_interruptible(&info->status_event_wait_q); dcd_change()
1102 wake_up_interruptible(&info->event_wait_q); dcd_change()
1104 if (info->port.flags & ASYNC_CHECK_CD) { dcd_change()
1106 printk("%s CD now %s...", info->device_name, dcd_change()
1107 (info->serial_signals & SerialSignal_DCD) ? "on" : "off"); dcd_change()
1108 if (info->serial_signals & SerialSignal_DCD) dcd_change()
1109 wake_up_interruptible(&info->port.open_wait); dcd_change()
1117 info->pending_bh |= BH_STATUS; dcd_change()
1120 static void dsr_change(MGSLPC_INFO *info) dsr_change() argument
1122 get_signals(info); dsr_change()
1123 if ((info->dsr_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) dsr_change()
1124 port_irq_disable(info, PVR_DSR); dsr_change()
1125 info->icount.dsr++; dsr_change()
1126 if (info->serial_signals & SerialSignal_DSR) dsr_change()
1127 info->input_signal_events.dsr_up++; dsr_change()
1129 info->input_signal_events.dsr_down++; dsr_change()
1130 wake_up_interruptible(&info->status_event_wait_q); dsr_change()
1131 wake_up_interruptible(&info->event_wait_q); dsr_change()
1132 info->pending_bh |= BH_STATUS; dsr_change()
1135 static void ri_change(MGSLPC_INFO *info) ri_change() argument
1137 get_signals(info); ri_change()
1138 if ((info->ri_chkcount)++ >= IO_PIN_SHUTDOWN_LIMIT) ri_change()
1139 port_irq_disable(info, PVR_RI); ri_change()
1140 info->icount.rng++; ri_change()
1141 if (info->serial_signals & SerialSignal_RI) ri_change()
1142 info->input_signal_events.ri_up++; ri_change()
1144 info->input_signal_events.ri_down++; ri_change()
1145 wake_up_interruptible(&info->status_event_wait_q); ri_change()
1146 wake_up_interruptible(&info->event_wait_q); ri_change()
1147 info->pending_bh |= BH_STATUS; ri_change()
1159 MGSLPC_INFO *info = dev_id; mgslpc_isr() local
1166 printk("mgslpc_isr(%d) entry.\n", info->irq_level); mgslpc_isr()
1168 if (!(info->p_dev->_locked)) mgslpc_isr()
1171 tty = tty_port_tty_get(&info->port); mgslpc_isr()
1173 spin_lock(&info->lock); mgslpc_isr()
1175 while ((gis = read_reg(info, CHA + GIS))) { mgslpc_isr()
1177 printk("mgslpc_isr %s gis=%04X\n", info->device_name,gis); mgslpc_isr()
1186 isr = read_reg16(info, CHB + ISR); mgslpc_isr()
1188 dcd_change(info, tty); mgslpc_isr()
1190 cts_change(info, tty); mgslpc_isr()
1194 isr = read_reg16(info, CHA + ISR); mgslpc_isr()
1196 info->irq_occurred = true; mgslpc_isr()
1197 irq_disable(info, CHA, IRQ_TIMER); mgslpc_isr()
1202 info->icount.exithunt++; mgslpc_isr()
1203 wake_up_interruptible(&info->event_wait_q); mgslpc_isr()
1206 info->icount.brk++; mgslpc_isr()
1207 if (info->port.flags & ASYNC_SAK) mgslpc_isr()
1211 issue_command(info, CHA, CMD_RXFIFO_READ); mgslpc_isr()
1214 if (info->params.mode == MGSL_MODE_HDLC) mgslpc_isr()
1215 rx_ready_hdlc(info, isr & IRQ_RXEOM); mgslpc_isr()
1217 rx_ready_async(info, isr & IRQ_RXEOM); mgslpc_isr()
1222 if (info->tx_aborting) mgslpc_isr()
1223 info->icount.txabort++; mgslpc_isr()
1225 info->icount.txunder++; mgslpc_isr()
1226 tx_done(info, tty); mgslpc_isr()
1229 info->icount.txok++; mgslpc_isr()
1230 tx_done(info, tty); mgslpc_isr()
1233 tx_ready(info, tty); mgslpc_isr()
1236 pis = read_reg(info, CHA + PIS); mgslpc_isr()
1238 dsr_change(info); mgslpc_isr()
1240 ri_change(info); mgslpc_isr()
1248 if (info->pending_bh && !info->bh_running && !info->bh_requested) { mgslpc_isr()
1251 __FILE__,__LINE__,info->device_name); mgslpc_isr()
1252 schedule_work(&info->task); mgslpc_isr()
1253 info->bh_requested = true; mgslpc_isr()
1256 spin_unlock(&info->lock); mgslpc_isr()
1261 __FILE__, __LINE__, info->irq_level); mgslpc_isr()
1268 static int startup(MGSLPC_INFO * info, struct tty_struct *tty) startup() argument
1273 printk("%s(%d):startup(%s)\n", __FILE__, __LINE__, info->device_name); startup()
1275 if (info->port.flags & ASYNC_INITIALIZED) startup()
1278 if (!info->tx_buf) { startup()
1280 info->tx_buf = (unsigned char *)get_zeroed_page(GFP_KERNEL); startup()
1281 if (!info->tx_buf) { startup()
1283 __FILE__, __LINE__, info->device_name); startup()
1288 info->pending_bh = 0; startup()
1290 memset(&info->icount, 0, sizeof(info->icount)); startup()
1292 setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info); startup()
1295 retval = claim_resources(info); startup()
1299 retval = adapter_test(info); startup()
1304 release_resources(info); startup()
1309 mgslpc_change_params(info, tty); startup()
1314 info->port.flags |= ASYNC_INITIALIZED; startup()
1321 static void shutdown(MGSLPC_INFO * info, struct tty_struct *tty) shutdown() argument
1325 if (!(info->port.flags & ASYNC_INITIALIZED)) shutdown()
1330 __FILE__, __LINE__, info->device_name); shutdown()
1334 wake_up_interruptible(&info->status_event_wait_q); shutdown()
1335 wake_up_interruptible(&info->event_wait_q); shutdown()
1337 del_timer_sync(&info->tx_timer); shutdown()
1339 if (info->tx_buf) { shutdown()
1340 free_page((unsigned long) info->tx_buf); shutdown()
1341 info->tx_buf = NULL; shutdown()
1344 spin_lock_irqsave(&info->lock, flags); shutdown()
1346 rx_stop(info); shutdown()
1347 tx_stop(info); shutdown()
1350 reset_device(info); shutdown()
1353 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); shutdown()
1354 set_signals(info); shutdown()
1357 spin_unlock_irqrestore(&info->lock, flags); shutdown()
1359 release_resources(info); shutdown()
1364 info->port.flags &= ~ASYNC_INITIALIZED; shutdown()
1367 static void mgslpc_program_hw(MGSLPC_INFO *info, struct tty_struct *tty) mgslpc_program_hw() argument
1371 spin_lock_irqsave(&info->lock, flags); mgslpc_program_hw()
1373 rx_stop(info); mgslpc_program_hw()
1374 tx_stop(info); mgslpc_program_hw()
1375 info->tx_count = info->tx_put = info->tx_get = 0; mgslpc_program_hw()
1377 if (info->params.mode == MGSL_MODE_HDLC || info->netcount) mgslpc_program_hw()
1378 hdlc_mode(info); mgslpc_program_hw()
1380 async_mode(info); mgslpc_program_hw()
1382 set_signals(info); mgslpc_program_hw()
1384 info->dcd_chkcount = 0; mgslpc_program_hw()
1385 info->cts_chkcount = 0; mgslpc_program_hw()
1386 info->ri_chkcount = 0; mgslpc_program_hw()
1387 info->dsr_chkcount = 0; mgslpc_program_hw()
1389 irq_enable(info, CHB, IRQ_DCD | IRQ_CTS); mgslpc_program_hw()
1390 port_irq_enable(info, (unsigned char) PVR_DSR | PVR_RI); mgslpc_program_hw()
1391 get_signals(info); mgslpc_program_hw()
1393 if (info->netcount || (tty && (tty->termios.c_cflag & CREAD))) mgslpc_program_hw()
1394 rx_start(info); mgslpc_program_hw()
1396 spin_unlock_irqrestore(&info->lock, flags); mgslpc_program_hw()
1401 static void mgslpc_change_params(MGSLPC_INFO *info, struct tty_struct *tty) mgslpc_change_params() argument
1411 __FILE__, __LINE__, info->device_name); mgslpc_change_params()
1418 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; mgslpc_change_params()
1420 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); mgslpc_change_params()
1425 case CS5: info->params.data_bits = 5; break; mgslpc_change_params()
1426 case CS6: info->params.data_bits = 6; break; mgslpc_change_params()
1427 case CS7: info->params.data_bits = 7; break; mgslpc_change_params()
1428 case CS8: info->params.data_bits = 8; break; mgslpc_change_params()
1429 default: info->params.data_bits = 7; break; mgslpc_change_params()
1433 info->params.stop_bits = 2; mgslpc_change_params()
1435 info->params.stop_bits = 1; mgslpc_change_params()
1437 info->params.parity = ASYNC_PARITY_NONE; mgslpc_change_params()
1440 info->params.parity = ASYNC_PARITY_ODD; mgslpc_change_params()
1442 info->params.parity = ASYNC_PARITY_EVEN; mgslpc_change_params()
1445 info->params.parity = ASYNC_PARITY_SPACE; mgslpc_change_params()
1452 bits_per_char = info->params.data_bits + mgslpc_change_params()
1453 info->params.stop_bits + 1; mgslpc_change_params()
1459 if (info->params.data_rate <= 460800) { mgslpc_change_params()
1460 info->params.data_rate = tty_get_baud_rate(tty); mgslpc_change_params()
1463 if (info->params.data_rate) { mgslpc_change_params()
1464 info->timeout = (32*HZ*bits_per_char) / mgslpc_change_params()
1465 info->params.data_rate; mgslpc_change_params()
1467 info->timeout += HZ/50; /* Add .02 seconds of slop */ mgslpc_change_params()
1470 info->port.flags |= ASYNC_CTS_FLOW; mgslpc_change_params()
1472 info->port.flags &= ~ASYNC_CTS_FLOW; mgslpc_change_params()
1475 info->port.flags &= ~ASYNC_CHECK_CD; mgslpc_change_params()
1477 info->port.flags |= ASYNC_CHECK_CD; mgslpc_change_params()
1481 info->read_status_mask = 0; mgslpc_change_params()
1483 info->read_status_mask |= BIT7 | BIT6; mgslpc_change_params()
1485 info->ignore_status_mask |= BIT7 | BIT6; mgslpc_change_params()
1487 mgslpc_program_hw(info, tty); mgslpc_change_params()
1494 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_put_char() local
1499 __FILE__, __LINE__, ch, info->device_name); mgslpc_put_char()
1502 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_put_char")) mgslpc_put_char()
1505 if (!info->tx_buf) mgslpc_put_char()
1508 spin_lock_irqsave(&info->lock, flags); mgslpc_put_char()
1510 if (info->params.mode == MGSL_MODE_ASYNC || !info->tx_active) { mgslpc_put_char()
1511 if (info->tx_count < TXBUFSIZE - 1) { mgslpc_put_char()
1512 info->tx_buf[info->tx_put++] = ch; mgslpc_put_char()
1513 info->tx_put &= TXBUFSIZE-1; mgslpc_put_char()
1514 info->tx_count++; mgslpc_put_char()
1518 spin_unlock_irqrestore(&info->lock, flags); mgslpc_put_char()
1527 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_flush_chars() local
1532 __FILE__, __LINE__, info->device_name, info->tx_count); mgslpc_flush_chars()
1534 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_flush_chars")) mgslpc_flush_chars()
1537 if (info->tx_count <= 0 || tty->stopped || mgslpc_flush_chars()
1538 tty->hw_stopped || !info->tx_buf) mgslpc_flush_chars()
1543 __FILE__, __LINE__, info->device_name); mgslpc_flush_chars()
1545 spin_lock_irqsave(&info->lock, flags); mgslpc_flush_chars()
1546 if (!info->tx_active) mgslpc_flush_chars()
1547 tx_start(info, tty); mgslpc_flush_chars()
1548 spin_unlock_irqrestore(&info->lock, flags); mgslpc_flush_chars()
1565 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_write() local
1570 __FILE__, __LINE__, info->device_name, count); mgslpc_write()
1572 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_write") || mgslpc_write()
1573 !info->tx_buf) mgslpc_write()
1576 if (info->params.mode == MGSL_MODE_HDLC) { mgslpc_write()
1581 if (info->tx_active) mgslpc_write()
1583 else if (info->tx_count) mgslpc_write()
1589 min(TXBUFSIZE - info->tx_count - 1, mgslpc_write()
1590 TXBUFSIZE - info->tx_put)); mgslpc_write()
1594 memcpy(info->tx_buf + info->tx_put, buf, c); mgslpc_write()
1596 spin_lock_irqsave(&info->lock, flags); mgslpc_write()
1597 info->tx_put = (info->tx_put + c) & (TXBUFSIZE-1); mgslpc_write()
1598 info->tx_count += c; mgslpc_write()
1599 spin_unlock_irqrestore(&info->lock, flags); mgslpc_write()
1606 if (info->tx_count && !tty->stopped && !tty->hw_stopped) { mgslpc_write()
1607 spin_lock_irqsave(&info->lock, flags); mgslpc_write()
1608 if (!info->tx_active) mgslpc_write()
1609 tx_start(info, tty); mgslpc_write()
1610 spin_unlock_irqrestore(&info->lock, flags); mgslpc_write()
1615 __FILE__, __LINE__, info->device_name, ret); mgslpc_write()
1623 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_write_room() local
1626 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_write_room")) mgslpc_write_room()
1629 if (info->params.mode == MGSL_MODE_HDLC) { mgslpc_write_room()
1631 if (info->tx_active) mgslpc_write_room()
1636 ret = TXBUFSIZE - info->tx_count - 1; mgslpc_write_room()
1643 __FILE__, __LINE__, info->device_name, ret); mgslpc_write_room()
1651 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_chars_in_buffer() local
1656 __FILE__, __LINE__, info->device_name); mgslpc_chars_in_buffer()
1658 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_chars_in_buffer")) mgslpc_chars_in_buffer()
1661 if (info->params.mode == MGSL_MODE_HDLC) mgslpc_chars_in_buffer()
1662 rc = info->tx_active ? info->max_frame_size : 0; mgslpc_chars_in_buffer()
1664 rc = info->tx_count; mgslpc_chars_in_buffer()
1668 __FILE__, __LINE__, info->device_name, rc); mgslpc_chars_in_buffer()
1677 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_flush_buffer() local
1682 __FILE__, __LINE__, info->device_name); mgslpc_flush_buffer()
1684 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_flush_buffer")) mgslpc_flush_buffer()
1687 spin_lock_irqsave(&info->lock, flags); mgslpc_flush_buffer()
1688 info->tx_count = info->tx_put = info->tx_get = 0; mgslpc_flush_buffer()
1689 del_timer(&info->tx_timer); mgslpc_flush_buffer()
1690 spin_unlock_irqrestore(&info->lock, flags); mgslpc_flush_buffer()
1700 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_send_xchar() local
1705 __FILE__, __LINE__, info->device_name, ch); mgslpc_send_xchar()
1707 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_send_xchar")) mgslpc_send_xchar()
1710 info->x_char = ch; mgslpc_send_xchar()
1712 spin_lock_irqsave(&info->lock, flags); mgslpc_send_xchar()
1713 if (!info->tx_enabled) mgslpc_send_xchar()
1714 tx_start(info, tty); mgslpc_send_xchar()
1715 spin_unlock_irqrestore(&info->lock, flags); mgslpc_send_xchar()
1723 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_throttle() local
1728 __FILE__, __LINE__, info->device_name); mgslpc_throttle()
1730 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_throttle")) mgslpc_throttle()
1737 spin_lock_irqsave(&info->lock, flags); mgslpc_throttle()
1738 info->serial_signals &= ~SerialSignal_RTS; mgslpc_throttle()
1739 set_signals(info); mgslpc_throttle()
1740 spin_unlock_irqrestore(&info->lock, flags); mgslpc_throttle()
1748 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_unthrottle() local
1753 __FILE__, __LINE__, info->device_name); mgslpc_unthrottle()
1755 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_unthrottle")) mgslpc_unthrottle()
1759 if (info->x_char) mgslpc_unthrottle()
1760 info->x_char = 0; mgslpc_unthrottle()
1766 spin_lock_irqsave(&info->lock, flags); mgslpc_unthrottle()
1767 info->serial_signals |= SerialSignal_RTS; mgslpc_unthrottle()
1768 set_signals(info); mgslpc_unthrottle()
1769 spin_unlock_irqrestore(&info->lock, flags); mgslpc_unthrottle()
1775 static int get_stats(MGSLPC_INFO * info, struct mgsl_icount __user *user_icount) get_stats() argument
1779 printk("get_params(%s)\n", info->device_name); get_stats()
1781 memset(&info->icount, 0, sizeof(info->icount)); get_stats()
1783 COPY_TO_USER(err, user_icount, &info->icount, sizeof(struct mgsl_icount)); get_stats()
1792 static int get_params(MGSLPC_INFO * info, MGSL_PARAMS __user *user_params) get_params() argument
1796 printk("get_params(%s)\n", info->device_name); get_params()
1797 COPY_TO_USER(err,user_params, &info->params, sizeof(MGSL_PARAMS)); get_params()
1807 * info pointer to device instance data
1812 static int set_params(MGSLPC_INFO * info, MGSL_PARAMS __user *new_params, struct tty_struct *tty) set_params() argument
1820 info->device_name); set_params()
1825 __FILE__, __LINE__, info->device_name); set_params()
1829 spin_lock_irqsave(&info->lock, flags); set_params()
1830 memcpy(&info->params,&tmp_params,sizeof(MGSL_PARAMS)); set_params()
1831 spin_unlock_irqrestore(&info->lock, flags); set_params()
1833 mgslpc_change_params(info, tty); set_params()
1838 static int get_txidle(MGSLPC_INFO * info, int __user *idle_mode) get_txidle() argument
1842 printk("get_txidle(%s)=%d\n", info->device_name, info->idle_mode); get_txidle()
1843 COPY_TO_USER(err,idle_mode, &info->idle_mode, sizeof(int)); get_txidle()
1849 static int set_txidle(MGSLPC_INFO * info, int idle_mode) set_txidle() argument
1853 printk("set_txidle(%s,%d)\n", info->device_name, idle_mode); set_txidle()
1854 spin_lock_irqsave(&info->lock, flags); set_txidle()
1855 info->idle_mode = idle_mode; set_txidle()
1856 tx_set_idle(info); set_txidle()
1857 spin_unlock_irqrestore(&info->lock, flags); set_txidle()
1861 static int get_interface(MGSLPC_INFO * info, int __user *if_mode) get_interface() argument
1865 printk("get_interface(%s)=%d\n", info->device_name, info->if_mode); get_interface()
1866 COPY_TO_USER(err,if_mode, &info->if_mode, sizeof(int)); get_interface()
1872 static int set_interface(MGSLPC_INFO * info, int if_mode) set_interface() argument
1877 printk("set_interface(%s,%d)\n", info->device_name, if_mode); set_interface()
1878 spin_lock_irqsave(&info->lock, flags); set_interface()
1879 info->if_mode = if_mode; set_interface()
1881 val = read_reg(info, PVR) & 0x0f; set_interface()
1882 switch (info->if_mode) set_interface()
1888 write_reg(info, PVR, val); set_interface()
1890 spin_unlock_irqrestore(&info->lock, flags); set_interface()
1894 static int set_txenable(MGSLPC_INFO * info, int enable, struct tty_struct *tty) set_txenable() argument
1899 printk("set_txenable(%s,%d)\n", info->device_name, enable); set_txenable()
1901 spin_lock_irqsave(&info->lock, flags); set_txenable()
1903 if (!info->tx_enabled) set_txenable()
1904 tx_start(info, tty); set_txenable()
1906 if (info->tx_enabled) set_txenable()
1907 tx_stop(info); set_txenable()
1909 spin_unlock_irqrestore(&info->lock, flags); set_txenable()
1913 static int tx_abort(MGSLPC_INFO * info) tx_abort() argument
1918 printk("tx_abort(%s)\n", info->device_name); tx_abort()
1920 spin_lock_irqsave(&info->lock, flags); tx_abort()
1921 if (info->tx_active && info->tx_count && tx_abort()
1922 info->params.mode == MGSL_MODE_HDLC) { tx_abort()
1926 info->tx_count = info->tx_put = info->tx_get = 0; tx_abort()
1927 info->tx_aborting = true; tx_abort()
1929 spin_unlock_irqrestore(&info->lock, flags); tx_abort()
1933 static int set_rxenable(MGSLPC_INFO * info, int enable) set_rxenable() argument
1938 printk("set_rxenable(%s,%d)\n", info->device_name, enable); set_rxenable()
1940 spin_lock_irqsave(&info->lock, flags); set_rxenable()
1942 if (!info->rx_enabled) set_rxenable()
1943 rx_start(info); set_rxenable()
1945 if (info->rx_enabled) set_rxenable()
1946 rx_stop(info); set_rxenable()
1948 spin_unlock_irqrestore(&info->lock, flags); set_rxenable()
1954 * Arguments: info pointer to device instance data
1960 static int wait_events(MGSLPC_INFO * info, int __user *mask_ptr) wait_events() argument
1976 printk("wait_events(%s,%d)\n", info->device_name, mask); wait_events()
1978 spin_lock_irqsave(&info->lock, flags); wait_events()
1981 get_signals(info); wait_events()
1982 s = info->serial_signals; wait_events()
1989 spin_unlock_irqrestore(&info->lock, flags); wait_events()
1994 cprev = info->icount; wait_events()
1995 oldsigs = info->input_signal_events; wait_events()
1997 if ((info->params.mode == MGSL_MODE_HDLC) && wait_events()
1999 irq_enable(info, CHA, IRQ_EXITHUNT); wait_events()
2002 add_wait_queue(&info->event_wait_q, &wait); wait_events()
2004 spin_unlock_irqrestore(&info->lock, flags); wait_events()
2015 spin_lock_irqsave(&info->lock, flags); wait_events()
2016 cnow = info->icount; wait_events()
2017 newsigs = info->input_signal_events; wait_events()
2019 spin_unlock_irqrestore(&info->lock, flags); wait_events()
2054 remove_wait_queue(&info->event_wait_q, &wait); wait_events()
2058 spin_lock_irqsave(&info->lock, flags); wait_events()
2059 if (!waitqueue_active(&info->event_wait_q)) wait_events()
2060 irq_disable(info, CHA, IRQ_EXITHUNT); wait_events()
2061 spin_unlock_irqrestore(&info->lock, flags); wait_events()
2069 static int modem_input_wait(MGSLPC_INFO *info,int arg) modem_input_wait() argument
2077 spin_lock_irqsave(&info->lock, flags); modem_input_wait()
2078 cprev = info->icount; modem_input_wait()
2079 add_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
2081 spin_unlock_irqrestore(&info->lock, flags); modem_input_wait()
2091 spin_lock_irqsave(&info->lock, flags); modem_input_wait()
2092 cnow = info->icount; modem_input_wait()
2094 spin_unlock_irqrestore(&info->lock, flags); modem_input_wait()
2114 remove_wait_queue(&info->status_event_wait_q, &wait); modem_input_wait()
2123 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; tiocmget() local
2127 spin_lock_irqsave(&info->lock, flags); tiocmget()
2128 get_signals(info); tiocmget()
2129 spin_unlock_irqrestore(&info->lock, flags); tiocmget()
2131 result = ((info->serial_signals & SerialSignal_RTS) ? TIOCM_RTS:0) + tiocmget()
2132 ((info->serial_signals & SerialSignal_DTR) ? TIOCM_DTR:0) + tiocmget()
2133 ((info->serial_signals & SerialSignal_DCD) ? TIOCM_CAR:0) + tiocmget()
2134 ((info->serial_signals & SerialSignal_RI) ? TIOCM_RNG:0) + tiocmget()
2135 ((info->serial_signals & SerialSignal_DSR) ? TIOCM_DSR:0) + tiocmget()
2136 ((info->serial_signals & SerialSignal_CTS) ? TIOCM_CTS:0); tiocmget()
2140 __FILE__, __LINE__, info->device_name, result); tiocmget()
2149 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; tiocmset() local
2154 __FILE__, __LINE__, info->device_name, set, clear); tiocmset()
2157 info->serial_signals |= SerialSignal_RTS; tiocmset()
2159 info->serial_signals |= SerialSignal_DTR; tiocmset()
2161 info->serial_signals &= ~SerialSignal_RTS; tiocmset()
2163 info->serial_signals &= ~SerialSignal_DTR; tiocmset()
2165 spin_lock_irqsave(&info->lock, flags); tiocmset()
2166 set_signals(info); tiocmset()
2167 spin_unlock_irqrestore(&info->lock, flags); tiocmset()
2179 MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data; mgslpc_break() local
2184 __FILE__, __LINE__, info->device_name, break_state); mgslpc_break()
2186 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_break")) mgslpc_break()
2189 spin_lock_irqsave(&info->lock, flags); mgslpc_break()
2191 set_reg_bits(info, CHA+DAFO, BIT6); mgslpc_break()
2193 clear_reg_bits(info, CHA+DAFO, BIT6); mgslpc_break()
2194 spin_unlock_irqrestore(&info->lock, flags); mgslpc_break()
2201 MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data; mgslpc_get_icount() local
2205 spin_lock_irqsave(&info->lock, flags); mgslpc_get_icount()
2206 cnow = info->icount; mgslpc_get_icount()
2207 spin_unlock_irqrestore(&info->lock, flags); mgslpc_get_icount()
2237 MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data; mgslpc_ioctl() local
2242 info->device_name, cmd); mgslpc_ioctl()
2244 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_ioctl")) mgslpc_ioctl()
2255 return get_params(info, argp); mgslpc_ioctl()
2257 return set_params(info, argp, tty); mgslpc_ioctl()
2259 return get_txidle(info, argp); mgslpc_ioctl()
2261 return set_txidle(info, (int)arg); mgslpc_ioctl()
2263 return get_interface(info, argp); mgslpc_ioctl()
2265 return set_interface(info,(int)arg); mgslpc_ioctl()
2267 return set_txenable(info,(int)arg, tty); mgslpc_ioctl()
2269 return set_rxenable(info,(int)arg); mgslpc_ioctl()
2271 return tx_abort(info); mgslpc_ioctl()
2273 return get_stats(info, argp); mgslpc_ioctl()
2275 return wait_events(info, argp); mgslpc_ioctl()
2277 return modem_input_wait(info,(int)arg); mgslpc_ioctl()
2293 MGSLPC_INFO *info = (MGSLPC_INFO *)tty->driver_data; mgslpc_set_termios() local
2306 mgslpc_change_params(info, tty); mgslpc_set_termios()
2311 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); mgslpc_set_termios()
2312 spin_lock_irqsave(&info->lock, flags); mgslpc_set_termios()
2313 set_signals(info); mgslpc_set_termios()
2314 spin_unlock_irqrestore(&info->lock, flags); mgslpc_set_termios()
2320 info->serial_signals |= SerialSignal_DTR; mgslpc_set_termios()
2323 info->serial_signals |= SerialSignal_RTS; mgslpc_set_termios()
2325 spin_lock_irqsave(&info->lock, flags); mgslpc_set_termios()
2326 set_signals(info); mgslpc_set_termios()
2327 spin_unlock_irqrestore(&info->lock, flags); mgslpc_set_termios()
2340 MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data; mgslpc_close() local
2341 struct tty_port *port = &info->port; mgslpc_close()
2343 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_close")) mgslpc_close()
2348 __FILE__, __LINE__, info->device_name, port->count); mgslpc_close()
2354 mgslpc_wait_until_sent(tty, info->timeout); mgslpc_close()
2359 shutdown(info, tty); mgslpc_close()
2373 MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data; mgslpc_wait_until_sent() local
2376 if (!info) mgslpc_wait_until_sent()
2381 __FILE__, __LINE__, info->device_name); mgslpc_wait_until_sent()
2383 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_wait_until_sent")) mgslpc_wait_until_sent()
2386 if (!(info->port.flags & ASYNC_INITIALIZED)) mgslpc_wait_until_sent()
2397 if (info->params.data_rate) { mgslpc_wait_until_sent()
2398 char_time = info->timeout/(32 * 5); mgslpc_wait_until_sent()
2407 if (info->params.mode == MGSL_MODE_HDLC) { mgslpc_wait_until_sent()
2408 while (info->tx_active) { mgslpc_wait_until_sent()
2416 while ((info->tx_count || info->tx_active) && mgslpc_wait_until_sent()
2417 info->tx_enabled) { mgslpc_wait_until_sent()
2429 __FILE__, __LINE__, info->device_name); mgslpc_wait_until_sent()
2437 MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data; mgslpc_hangup() local
2441 __FILE__, __LINE__, info->device_name); mgslpc_hangup()
2443 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_hangup")) mgslpc_hangup()
2447 shutdown(info, tty); mgslpc_hangup()
2448 tty_port_hangup(&info->port); mgslpc_hangup()
2453 MGSLPC_INFO *info = container_of(port, MGSLPC_INFO, port); carrier_raised() local
2456 spin_lock_irqsave(&info->lock, flags); carrier_raised()
2457 get_signals(info); carrier_raised()
2458 spin_unlock_irqrestore(&info->lock, flags); carrier_raised()
2460 if (info->serial_signals & SerialSignal_DCD) carrier_raised()
2467 MGSLPC_INFO *info = container_of(port, MGSLPC_INFO, port); dtr_rts() local
2470 spin_lock_irqsave(&info->lock, flags); dtr_rts()
2472 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; dtr_rts()
2474 info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR); dtr_rts()
2475 set_signals(info); dtr_rts()
2476 spin_unlock_irqrestore(&info->lock, flags); dtr_rts()
2482 MGSLPC_INFO *info; mgslpc_open() local
2495 /* find the info structure for the specified line */ mgslpc_open()
2496 info = mgslpc_device_list; mgslpc_open()
2497 while(info && info->line != line) mgslpc_open()
2498 info = info->next_device; mgslpc_open()
2499 if (mgslpc_paranoia_check(info, tty->name, "mgslpc_open")) mgslpc_open()
2502 port = &info->port; mgslpc_open()
2503 tty->driver_data = info; mgslpc_open()
2521 spin_lock_irqsave(&info->netlock, flags); mgslpc_open()
2522 if (info->netcount) { mgslpc_open()
2524 spin_unlock_irqrestore(&info->netlock, flags); mgslpc_open()
2530 spin_unlock_irqrestore(&info->netlock, flags); mgslpc_open()
2534 retval = startup(info, tty); mgslpc_open()
2539 retval = tty_port_block_til_ready(&info->port, tty, filp); mgslpc_open()
2543 __FILE__, __LINE__, info->device_name, retval); mgslpc_open()
2549 __FILE__, __LINE__, info->device_name); mgslpc_open()
2560 static inline void line_info(struct seq_file *m, MGSLPC_INFO *info) line_info() argument
2566 info->device_name, info->io_base, info->irq_level); line_info()
2569 spin_lock_irqsave(&info->lock, flags); line_info()
2570 get_signals(info); line_info()
2571 spin_unlock_irqrestore(&info->lock, flags); line_info()
2575 if (info->serial_signals & SerialSignal_RTS) line_info()
2577 if (info->serial_signals & SerialSignal_CTS) line_info()
2579 if (info->serial_signals & SerialSignal_DTR) line_info()
2581 if (info->serial_signals & SerialSignal_DSR) line_info()
2583 if (info->serial_signals & SerialSignal_DCD) line_info()
2585 if (info->serial_signals & SerialSignal_RI) line_info()
2588 if (info->params.mode == MGSL_MODE_HDLC) { line_info()
2590 info->icount.txok, info->icount.rxok); line_info()
2591 if (info->icount.txunder) line_info()
2592 seq_printf(m, " txunder:%d", info->icount.txunder); line_info()
2593 if (info->icount.txabort) line_info()
2594 seq_printf(m, " txabort:%d", info->icount.txabort); line_info()
2595 if (info->icount.rxshort) line_info()
2596 seq_printf(m, " rxshort:%d", info->icount.rxshort); line_info()
2597 if (info->icount.rxlong) line_info()
2598 seq_printf(m, " rxlong:%d", info->icount.rxlong); line_info()
2599 if (info->icount.rxover) line_info()
2600 seq_printf(m, " rxover:%d", info->icount.rxover); line_info()
2601 if (info->icount.rxcrc) line_info()
2602 seq_printf(m, " rxcrc:%d", info->icount.rxcrc); line_info()
2605 info->icount.tx, info->icount.rx); line_info()
2606 if (info->icount.frame) line_info()
2607 seq_printf(m, " fe:%d", info->icount.frame); line_info()
2608 if (info->icount.parity) line_info()
2609 seq_printf(m, " pe:%d", info->icount.parity); line_info()
2610 if (info->icount.brk) line_info()
2611 seq_printf(m, " brk:%d", info->icount.brk); line_info()
2612 if (info->icount.overrun) line_info()
2613 seq_printf(m, " oe:%d", info->icount.overrun); line_info()
2620 info->tx_active,info->bh_requested,info->bh_running, line_info()
2621 info->pending_bh); line_info()
2628 MGSLPC_INFO *info; mgslpc_proc_show() local
2632 info = mgslpc_device_list; mgslpc_proc_show()
2633 while (info) { mgslpc_proc_show()
2634 line_info(m, info); mgslpc_proc_show()
2635 info = info->next_device; mgslpc_proc_show()
2653 static int rx_alloc_buffers(MGSLPC_INFO *info) rx_alloc_buffers() argument
2656 info->rx_buf_size = sizeof(RXBUF) + info->max_frame_size; rx_alloc_buffers()
2659 info->rx_buf_total_size = info->rx_buf_size * 8; rx_alloc_buffers()
2662 if (info->rx_buf_total_size > 0x10000) rx_alloc_buffers()
2663 info->rx_buf_total_size = 0x10000; rx_alloc_buffers()
2666 info->rx_buf_count = info->rx_buf_total_size / info->rx_buf_size; rx_alloc_buffers()
2668 info->rx_buf = kmalloc(info->rx_buf_total_size, GFP_KERNEL); rx_alloc_buffers()
2669 if (info->rx_buf == NULL) rx_alloc_buffers()
2673 info->flag_buf = kzalloc(info->max_frame_size, GFP_KERNEL); rx_alloc_buffers()
2674 if (!info->flag_buf) { rx_alloc_buffers()
2675 kfree(info->rx_buf); rx_alloc_buffers()
2676 info->rx_buf = NULL; rx_alloc_buffers()
2680 rx_reset_buffers(info); rx_alloc_buffers()
2684 static void rx_free_buffers(MGSLPC_INFO *info) rx_free_buffers() argument
2686 kfree(info->rx_buf); rx_free_buffers()
2687 info->rx_buf = NULL; rx_free_buffers()
2688 kfree(info->flag_buf); rx_free_buffers()
2689 info->flag_buf = NULL; rx_free_buffers()
2692 static int claim_resources(MGSLPC_INFO *info) claim_resources() argument
2694 if (rx_alloc_buffers(info) < 0) { claim_resources()
2695 printk("Can't allocate rx buffer %s\n", info->device_name); claim_resources()
2696 release_resources(info); claim_resources()
2702 static void release_resources(MGSLPC_INFO *info) release_resources() argument
2705 printk("release_resources(%s)\n", info->device_name); release_resources()
2706 rx_free_buffers(info); release_resources()
2712 * Arguments: info pointer to device instance data
2714 static int mgslpc_add_device(MGSLPC_INFO *info) mgslpc_add_device() argument
2720 info->next_device = NULL; mgslpc_add_device()
2721 info->line = mgslpc_device_count; mgslpc_add_device()
2722 sprintf(info->device_name,"ttySLP%d",info->line); mgslpc_add_device()
2724 if (info->line < MAX_DEVICE_COUNT) { mgslpc_add_device()
2725 if (maxframe[info->line]) mgslpc_add_device()
2726 info->max_frame_size = maxframe[info->line]; mgslpc_add_device()
2732 mgslpc_device_list = info; mgslpc_add_device()
2737 current_dev->next_device = info; mgslpc_add_device()
2740 if (info->max_frame_size < 4096) mgslpc_add_device()
2741 info->max_frame_size = 4096; mgslpc_add_device()
2742 else if (info->max_frame_size > 65535) mgslpc_add_device()
2743 info->max_frame_size = 65535; mgslpc_add_device()
2746 info->device_name, info->io_base, info->irq_level); mgslpc_add_device()
2749 ret = hdlcdev_init(info); mgslpc_add_device()
2754 tty_dev = tty_port_register_device(&info->port, serial_driver, info->line, mgslpc_add_device()
2755 &info->p_dev->dev); mgslpc_add_device()
2759 hdlcdev_exit(info); mgslpc_add_device()
2777 MGSLPC_INFO *info = mgslpc_device_list; mgslpc_remove_device() local
2780 while(info) { mgslpc_remove_device()
2781 if (info == remove_info) { mgslpc_remove_device()
2783 last->next_device = info->next_device; mgslpc_remove_device()
2785 mgslpc_device_list = info->next_device; mgslpc_remove_device()
2786 tty_unregister_device(serial_driver, info->line); mgslpc_remove_device()
2788 hdlcdev_exit(info); mgslpc_remove_device()
2790 release_resources(info); mgslpc_remove_device()
2791 tty_port_destroy(&info->port); mgslpc_remove_device()
2792 kfree(info); mgslpc_remove_device()
2796 last = info; mgslpc_remove_device()
2797 info = info->next_device; mgslpc_remove_device()
2904 static void mgslpc_set_rate(MGSLPC_INFO *info, unsigned char channel, unsigned int rate) mgslpc_set_rate() argument
2930 write_reg(info, (unsigned char) (channel + BGR), mgslpc_set_rate()
2932 val = read_reg(info, (unsigned char) (channel + CCR2)) & 0x3f; mgslpc_set_rate()
2934 write_reg(info, (unsigned char) (channel + CCR2), val); mgslpc_set_rate()
2940 static void enable_auxclk(MGSLPC_INFO *info) enable_auxclk() argument
2959 if (info->params.mode == MGSL_MODE_HDLC && info->params.clock_speed) enable_auxclk()
2961 write_reg(info, CHB + MODE, val); enable_auxclk()
2973 write_reg(info, CHB + CCR0, 0xc0); enable_auxclk()
2986 write_reg(info, CHB + CCR1, 0x17); enable_auxclk()
3000 if (info->params.mode == MGSL_MODE_HDLC && info->params.clock_speed) enable_auxclk()
3001 write_reg(info, CHB + CCR2, 0x38); enable_auxclk()
3003 write_reg(info, CHB + CCR2, 0x30); enable_auxclk()
3016 write_reg(info, CHB + CCR4, 0x50); enable_auxclk()
3021 if (info->params.mode == MGSL_MODE_HDLC && info->params.clock_speed) enable_auxclk()
3022 mgslpc_set_rate(info, CHB, info->params.clock_speed); enable_auxclk()
3024 mgslpc_set_rate(info, CHB, 921600); enable_auxclk()
3027 static void loopback_enable(MGSLPC_INFO *info) loopback_enable() argument
3032 val = read_reg(info, CHA + CCR1) | (BIT2 | BIT1 | BIT0); loopback_enable()
3033 write_reg(info, CHA + CCR1, val); loopback_enable()
3036 val = read_reg(info, CHA + CCR2) | (BIT4 | BIT5); loopback_enable()
3037 write_reg(info, CHA + CCR2, val); loopback_enable()
3040 if (info->params.clock_speed) loopback_enable()
3041 mgslpc_set_rate(info, CHA, info->params.clock_speed); loopback_enable()
3043 mgslpc_set_rate(info, CHA, 1843200); loopback_enable()
3046 val = read_reg(info, CHA + MODE) | BIT0; loopback_enable()
3047 write_reg(info, CHA + MODE, val); loopback_enable()
3050 static void hdlc_mode(MGSLPC_INFO *info) hdlc_mode() argument
3056 irq_disable(info, CHA, 0xffff); hdlc_mode()
3057 irq_disable(info, CHB, 0xffff); hdlc_mode()
3058 port_irq_disable(info, 0xff); hdlc_mode()
3062 if (info->params.flags & HDLC_FLAG_RXC_DPLL hdlc_mode()
3063 && info->params.flags & HDLC_FLAG_TXC_DPLL) { hdlc_mode()
3066 } else if (info->params.flags & HDLC_FLAG_RXC_BRG hdlc_mode()
3067 && info->params.flags & HDLC_FLAG_TXC_BRG) { hdlc_mode()
3071 } else if (info->params.flags & HDLC_FLAG_RXC_DPLL) { hdlc_mode()
3072 if (info->params.flags & HDLC_FLAG_TXC_BRG) { hdlc_mode()
3080 } else if (info->params.flags & HDLC_FLAG_TXC_BRG) { hdlc_mode()
3098 if (info->params.loopback) hdlc_mode()
3102 if (info->serial_signals & SerialSignal_RTS) hdlc_mode()
3104 write_reg(info, CHA + MODE, val); hdlc_mode()
3117 switch (info->params.encoding) hdlc_mode()
3132 write_reg(info, CHA + CCR0, val); hdlc_mode()
3146 write_reg(info, CHA + CCR1, val); hdlc_mode()
3166 if (info->params.crc_type == HDLC_CRC_32_CCITT) hdlc_mode()
3168 if (info->params.encoding == HDLC_ENCODING_NRZB) hdlc_mode()
3170 write_reg(info, CHA + CCR2, val); hdlc_mode()
3185 if (info->params.crc_type == HDLC_CRC_NONE) hdlc_mode()
3187 if (info->params.preamble != HDLC_PREAMBLE_PATTERN_NONE) hdlc_mode()
3189 switch (info->params.preamble_length) hdlc_mode()
3201 write_reg(info, CHA + CCR3, val); hdlc_mode()
3205 switch (info->params.preamble) hdlc_mode()
3212 write_reg(info, CHA + PRE, val); hdlc_mode()
3226 write_reg(info, CHA + CCR4, val); hdlc_mode()
3227 if (info->params.flags & HDLC_FLAG_RXC_DPLL) hdlc_mode()
3228 mgslpc_set_rate(info, CHA, info->params.clock_speed * 16); hdlc_mode()
3230 mgslpc_set_rate(info, CHA, info->params.clock_speed); hdlc_mode()
3237 write_reg(info, CHA + RLCR, 0); hdlc_mode()
3250 if (info->params.flags & HDLC_FLAG_AUTO_DCD) hdlc_mode()
3252 write_reg(info, CHA + XBCH, val); hdlc_mode()
3253 enable_auxclk(info); hdlc_mode()
3254 if (info->params.loopback || info->testing_irq) hdlc_mode()
3255 loopback_enable(info); hdlc_mode()
3256 if (info->params.flags & HDLC_FLAG_AUTO_CTS) hdlc_mode()
3258 irq_enable(info, CHB, IRQ_CTS); hdlc_mode()
3260 set_reg_bits(info, CHA + PVR, BIT3); hdlc_mode()
3262 clear_reg_bits(info, CHA + PVR, BIT3); hdlc_mode()
3264 irq_enable(info, CHA, hdlc_mode()
3267 issue_command(info, CHA, CMD_TXRESET + CMD_RXRESET); hdlc_mode()
3268 wait_command_complete(info, CHA); hdlc_mode()
3269 read_reg16(info, CHA + ISR); /* clear pending IRQs */ hdlc_mode()
3281 if (!info->testing_irq) hdlc_mode()
3282 clear_reg_bits(info, CHA + CCR0, BIT6); hdlc_mode()
3284 tx_set_idle(info); hdlc_mode()
3286 tx_stop(info); hdlc_mode()
3287 rx_stop(info); hdlc_mode()
3290 static void rx_stop(MGSLPC_INFO *info) rx_stop() argument
3294 __FILE__, __LINE__, info->device_name); rx_stop()
3297 clear_reg_bits(info, CHA + MODE, BIT3); rx_stop()
3299 info->rx_enabled = false; rx_stop()
3300 info->rx_overflow = false; rx_stop()
3303 static void rx_start(MGSLPC_INFO *info) rx_start() argument
3307 __FILE__, __LINE__, info->device_name); rx_start()
3309 rx_reset_buffers(info); rx_start()
3310 info->rx_enabled = false; rx_start()
3311 info->rx_overflow = false; rx_start()
3314 set_reg_bits(info, CHA + MODE, BIT3); rx_start()
3316 info->rx_enabled = true; rx_start()
3319 static void tx_start(MGSLPC_INFO *info, struct tty_struct *tty) tx_start() argument
3323 __FILE__, __LINE__, info->device_name); tx_start()
3325 if (info->tx_count) { tx_start()
3329 info->drop_rts_on_tx_done = false; tx_start()
3331 if (info->params.flags & HDLC_FLAG_AUTO_RTS) { tx_start()
3332 get_signals(info); tx_start()
3333 if (!(info->serial_signals & SerialSignal_RTS)) { tx_start()
3334 info->serial_signals |= SerialSignal_RTS; tx_start()
3335 set_signals(info); tx_start()
3336 info->drop_rts_on_tx_done = true; tx_start()
3340 if (info->params.mode == MGSL_MODE_ASYNC) { tx_start()
3341 if (!info->tx_active) { tx_start()
3342 info->tx_active = true; tx_start()
3343 tx_ready(info, tty); tx_start()
3346 info->tx_active = true; tx_start()
3347 tx_ready(info, tty); tx_start()
3348 mod_timer(&info->tx_timer, jiffies + tx_start()
3353 if (!info->tx_enabled) tx_start()
3354 info->tx_enabled = true; tx_start()
3357 static void tx_stop(MGSLPC_INFO *info) tx_stop() argument
3361 __FILE__, __LINE__, info->device_name); tx_stop()
3363 del_timer(&info->tx_timer); tx_stop()
3365 info->tx_enabled = false; tx_stop()
3366 info->tx_active = false; tx_stop()
3371 static void reset_device(MGSLPC_INFO *info) reset_device() argument
3374 write_reg(info, CHA + CCR0, 0x80); reset_device()
3375 write_reg(info, CHB + CCR0, 0x80); reset_device()
3376 write_reg(info, CHA + MODE, 0); reset_device()
3377 write_reg(info, CHB + MODE, 0); reset_device()
3380 irq_disable(info, CHA, 0xffff); reset_device()
3381 irq_disable(info, CHB, 0xffff); reset_device()
3382 port_irq_disable(info, 0xff); reset_device()
3394 write_reg(info, PCR, 0x06); reset_device()
3406 // write_reg(info, PVR, PVR_DTR); reset_device()
3418 write_reg(info, IPC, 0x05); reset_device()
3421 static void async_mode(MGSLPC_INFO *info) async_mode() argument
3426 irq_disable(info, CHA, 0xffff); async_mode()
3427 irq_disable(info, CHB, 0xffff); async_mode()
3428 port_irq_disable(info, 0xff); async_mode()
3444 if (info->params.loopback) async_mode()
3448 if (!(info->serial_signals & SerialSignal_RTS)) async_mode()
3450 write_reg(info, CHA + MODE, val); async_mode()
3462 write_reg(info, CHA + CCR0, 0x83); async_mode()
3473 write_reg(info, CHA + CCR1, 0x1f); async_mode()
3487 write_reg(info, CHA + CCR2, 0x10); async_mode()
3496 write_reg(info, CHA + CCR3, 0); async_mode()
3508 write_reg(info, CHA + CCR4, 0x50); async_mode()
3509 mgslpc_set_rate(info, CHA, info->params.data_rate * 16); async_mode()
3522 if (info->params.data_bits != 8) async_mode()
3524 if (info->params.stop_bits != 1) async_mode()
3526 if (info->params.parity != ASYNC_PARITY_NONE) async_mode()
3529 if (info->params.parity == ASYNC_PARITY_ODD) async_mode()
3534 write_reg(info, CHA + DAFO, val); async_mode()
3548 write_reg(info, CHA + RFC, 0x5c); async_mode()
3554 write_reg(info, CHA + RLCR, 0); async_mode()
3567 if (info->params.flags & HDLC_FLAG_AUTO_DCD) async_mode()
3569 write_reg(info, CHA + XBCH, val); async_mode()
3570 if (info->params.flags & HDLC_FLAG_AUTO_CTS) async_mode()
3571 irq_enable(info, CHA, IRQ_CTS); async_mode()
3574 set_reg_bits(info, CHA + MODE, BIT3); async_mode()
3575 enable_auxclk(info); async_mode()
3576 if (info->params.flags & HDLC_FLAG_AUTO_CTS) { async_mode()
3577 irq_enable(info, CHB, IRQ_CTS); async_mode()
3579 set_reg_bits(info, CHA + PVR, BIT3); async_mode()
3581 clear_reg_bits(info, CHA + PVR, BIT3); async_mode()
3582 irq_enable(info, CHA, async_mode()
3585 issue_command(info, CHA, CMD_TXRESET + CMD_RXRESET); async_mode()
3586 wait_command_complete(info, CHA); async_mode()
3587 read_reg16(info, CHA + ISR); /* clear pending IRQs */ async_mode()
3592 static void tx_set_idle(MGSLPC_INFO *info) tx_set_idle() argument
3595 if (info->idle_mode == HDLC_TXIDLE_FLAGS) tx_set_idle()
3596 set_reg_bits(info, CHA + CCR1, BIT3); tx_set_idle()
3598 clear_reg_bits(info, CHA + CCR1, BIT3); tx_set_idle()
3603 static void get_signals(MGSLPC_INFO *info) get_signals() argument
3608 info->serial_signals &= SerialSignal_RTS | SerialSignal_DTR; get_signals()
3610 if (read_reg(info, CHB + VSTR) & BIT7) get_signals()
3611 info->serial_signals |= SerialSignal_DCD; get_signals()
3612 if (read_reg(info, CHB + STAR) & BIT1) get_signals()
3613 info->serial_signals |= SerialSignal_CTS; get_signals()
3615 status = read_reg(info, CHA + PVR); get_signals()
3617 info->serial_signals |= SerialSignal_RI; get_signals()
3619 info->serial_signals |= SerialSignal_DSR; get_signals()
3625 static void set_signals(MGSLPC_INFO *info) set_signals() argument
3629 val = read_reg(info, CHA + MODE); set_signals()
3630 if (info->params.mode == MGSL_MODE_ASYNC) { set_signals()
3631 if (info->serial_signals & SerialSignal_RTS) set_signals()
3636 if (info->serial_signals & SerialSignal_RTS) set_signals()
3641 write_reg(info, CHA + MODE, val); set_signals()
3643 if (info->serial_signals & SerialSignal_DTR) set_signals()
3644 clear_reg_bits(info, CHA + PVR, PVR_DTR); set_signals()
3646 set_reg_bits(info, CHA + PVR, PVR_DTR); set_signals()
3649 static void rx_reset_buffers(MGSLPC_INFO *info) rx_reset_buffers() argument
3654 info->rx_put = 0; rx_reset_buffers()
3655 info->rx_get = 0; rx_reset_buffers()
3656 info->rx_frame_count = 0; rx_reset_buffers()
3657 for (i=0 ; i < info->rx_buf_count ; i++) { rx_reset_buffers()
3658 buf = (RXBUF*)(info->rx_buf + (i * info->rx_buf_size)); rx_reset_buffers()
3668 static bool rx_get_frame(MGSLPC_INFO *info, struct tty_struct *tty) rx_get_frame() argument
3676 if (info->rx_frame_count == 0) rx_get_frame()
3679 buf = (RXBUF*)(info->rx_buf + (info->rx_get * info->rx_buf_size)); rx_get_frame()
3690 info->icount.rxabort++; rx_get_frame()
3692 info->icount.rxover++; rx_get_frame()
3694 info->icount.rxcrc++; rx_get_frame()
3695 if (info->params.crc_type & HDLC_CRC_RETURN_EX) rx_get_frame()
3701 info->netdev->stats.rx_errors++; rx_get_frame()
3702 info->netdev->stats.rx_frame_errors++; rx_get_frame()
3713 __FILE__, __LINE__, info->device_name, status, framesize); rx_get_frame()
3716 trace_block(info, buf->data, framesize, 0); rx_get_frame()
3719 if ((info->params.crc_type & HDLC_CRC_RETURN_EX && rx_get_frame()
3720 framesize+1 > info->max_frame_size) || rx_get_frame()
3721 framesize > info->max_frame_size) rx_get_frame()
3722 info->icount.rxlong++; rx_get_frame()
3725 info->icount.rxok++; rx_get_frame()
3727 if (info->params.crc_type & HDLC_CRC_RETURN_EX) { rx_get_frame()
3733 if (info->netcount) rx_get_frame()
3734 hdlcdev_rx(info, buf->data, framesize); rx_get_frame()
3737 ldisc_receive_buf(tty, buf->data, info->flag_buf, framesize); rx_get_frame()
3741 spin_lock_irqsave(&info->lock, flags); rx_get_frame()
3743 info->rx_frame_count--; rx_get_frame()
3744 info->rx_get++; rx_get_frame()
3745 if (info->rx_get >= info->rx_buf_count) rx_get_frame()
3746 info->rx_get = 0; rx_get_frame()
3747 spin_unlock_irqrestore(&info->lock, flags); rx_get_frame()
3752 static bool register_test(MGSLPC_INFO *info) register_test() argument
3761 spin_lock_irqsave(&info->lock, flags); register_test()
3762 reset_device(info); register_test()
3765 write_reg(info, XAD1, patterns[i]); register_test()
3766 write_reg(info, XAD2, patterns[(i + 1) % count]); register_test()
3767 if ((read_reg(info, XAD1) != patterns[i]) || register_test()
3768 (read_reg(info, XAD2) != patterns[(i + 1) % count])) { register_test()
3774 spin_unlock_irqrestore(&info->lock, flags); register_test()
3778 static bool irq_test(MGSLPC_INFO *info) irq_test() argument
3783 spin_lock_irqsave(&info->lock, flags); irq_test()
3784 reset_device(info); irq_test()
3786 info->testing_irq = true; irq_test()
3787 hdlc_mode(info); irq_test()
3789 info->irq_occurred = false; irq_test()
3793 irq_enable(info, CHA, IRQ_TIMER); irq_test()
3794 write_reg(info, CHA + TIMR, 0); /* 512 cycles */ irq_test()
3795 issue_command(info, CHA, CMD_START_TIMER); irq_test()
3797 spin_unlock_irqrestore(&info->lock, flags); irq_test()
3800 while(end_time-- && !info->irq_occurred) { irq_test()
3804 info->testing_irq = false; irq_test()
3806 spin_lock_irqsave(&info->lock, flags); irq_test()
3807 reset_device(info); irq_test()
3808 spin_unlock_irqrestore(&info->lock, flags); irq_test()
3810 return info->irq_occurred; irq_test()
3813 static int adapter_test(MGSLPC_INFO *info) adapter_test() argument
3815 if (!register_test(info)) { adapter_test()
3816 info->init_error = DiagStatus_AddressFailure; adapter_test()
3818 __FILE__, __LINE__, info->device_name, (unsigned short)(info->io_base)); adapter_test()
3822 if (!irq_test(info)) { adapter_test()
3823 info->init_error = DiagStatus_IrqFailure; adapter_test()
3825 __FILE__, __LINE__, info->device_name, (unsigned short)(info->irq_level)); adapter_test()
3831 __FILE__, __LINE__, info->device_name); adapter_test()
3835 static void trace_block(MGSLPC_INFO *info,const char* data, int count, int xmit) trace_block() argument
3840 printk("%s tx data:\n", info->device_name); trace_block()
3842 printk("%s rx data:\n", info->device_name); trace_block()
3872 MGSLPC_INFO *info = (MGSLPC_INFO*)context; tx_timeout() local
3877 __FILE__, __LINE__, info->device_name); tx_timeout()
3878 if (info->tx_active && tx_timeout()
3879 info->params.mode == MGSL_MODE_HDLC) { tx_timeout()
3880 info->icount.txtimeout++; tx_timeout()
3882 spin_lock_irqsave(&info->lock, flags); tx_timeout()
3883 info->tx_active = false; tx_timeout()
3884 info->tx_count = info->tx_put = info->tx_get = 0; tx_timeout()
3886 spin_unlock_irqrestore(&info->lock, flags); tx_timeout()
3889 if (info->netcount) tx_timeout()
3890 hdlcdev_tx_done(info); tx_timeout()
3894 struct tty_struct *tty = tty_port_tty_get(&info->port); tx_timeout()
3895 bh_transmit(info, tty); tx_timeout()
3915 MGSLPC_INFO *info = dev_to_port(dev); hdlcdev_attach() local
3921 if (info->port.count) hdlcdev_attach()
3942 info->params.encoding = new_encoding; hdlcdev_attach()
3943 info->params.crc_type = new_crctype; hdlcdev_attach()
3946 if (info->netcount) { hdlcdev_attach()
3947 tty = tty_port_tty_get(&info->port); hdlcdev_attach()
3948 mgslpc_program_hw(info, tty); hdlcdev_attach()
3964 MGSLPC_INFO *info = dev_to_port(dev); hdlcdev_xmit() local
3974 skb_copy_from_linear_data(skb, info->tx_buf, skb->len); hdlcdev_xmit()
3975 info->tx_get = 0; hdlcdev_xmit()
3976 info->tx_put = info->tx_count = skb->len; hdlcdev_xmit()
3989 spin_lock_irqsave(&info->lock, flags); hdlcdev_xmit()
3990 if (!info->tx_active) { hdlcdev_xmit()
3991 struct tty_struct *tty = tty_port_tty_get(&info->port); hdlcdev_xmit()
3992 tx_start(info, tty); hdlcdev_xmit()
3995 spin_unlock_irqrestore(&info->lock, flags); hdlcdev_xmit()
4010 MGSLPC_INFO *info = dev_to_port(dev); hdlcdev_open() local
4024 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
4025 if (info->port.count != 0 || info->netcount != 0) { hdlcdev_open()
4027 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
4030 info->netcount=1; hdlcdev_open()
4031 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
4033 tty = tty_port_tty_get(&info->port); hdlcdev_open()
4035 rc = startup(info, tty); hdlcdev_open()
4038 spin_lock_irqsave(&info->netlock, flags); hdlcdev_open()
4039 info->netcount=0; hdlcdev_open()
4040 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_open()
4044 info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR; hdlcdev_open()
4045 mgslpc_program_hw(info, tty); hdlcdev_open()
4053 spin_lock_irqsave(&info->lock, flags); hdlcdev_open()
4054 get_signals(info); hdlcdev_open()
4055 spin_unlock_irqrestore(&info->lock, flags); hdlcdev_open()
4056 if (info->serial_signals & SerialSignal_DCD) hdlcdev_open()
4073 MGSLPC_INFO *info = dev_to_port(dev); hdlcdev_close() local
4074 struct tty_struct *tty = tty_port_tty_get(&info->port); hdlcdev_close()
4083 shutdown(info, tty); hdlcdev_close()
4087 spin_lock_irqsave(&info->netlock, flags); hdlcdev_close()
4088 info->netcount=0; hdlcdev_close()
4089 spin_unlock_irqrestore(&info->netlock, flags); hdlcdev_close()
4108 MGSLPC_INFO *info = dev_to_port(dev); hdlcdev_ioctl() local
4115 if (info->port.count) hdlcdev_ioctl()
4132 flags = info->params.flags & (HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
4145 new_line.clock_rate = info->params.clock_speed; hdlcdev_ioctl()
4146 new_line.loopback = info->params.loopback ? 1:0; hdlcdev_ioctl()
4165 case CLOCK_DEFAULT: flags = info->params.flags & hdlcdev_ioctl()
4176 info->params.flags &= ~(HDLC_FLAG_RXC_RXCPIN | HDLC_FLAG_RXC_DPLL | hdlcdev_ioctl()
4180 info->params.flags |= flags; hdlcdev_ioctl()
4182 info->params.loopback = new_line.loopback; hdlcdev_ioctl()
4185 info->params.clock_speed = new_line.clock_rate; hdlcdev_ioctl()
4187 info->params.clock_speed = 0; hdlcdev_ioctl()
4190 if (info->netcount) { hdlcdev_ioctl()
4191 struct tty_struct *tty = tty_port_tty_get(&info->port); hdlcdev_ioctl()
4192 mgslpc_program_hw(info, tty); hdlcdev_ioctl()
4209 MGSLPC_INFO *info = dev_to_port(dev); hdlcdev_tx_timeout() local
4218 spin_lock_irqsave(&info->lock, flags); hdlcdev_tx_timeout()
4219 tx_stop(info); hdlcdev_tx_timeout()
4220 spin_unlock_irqrestore(&info->lock, flags); hdlcdev_tx_timeout()
4229 * info pointer to device instance information
4231 static void hdlcdev_tx_done(MGSLPC_INFO *info) hdlcdev_tx_done() argument
4233 if (netif_queue_stopped(info->netdev)) hdlcdev_tx_done()
4234 netif_wake_queue(info->netdev); hdlcdev_tx_done()
4241 * info pointer to device instance information
4245 static void hdlcdev_rx(MGSLPC_INFO *info, char *buf, int size) hdlcdev_rx() argument
4248 struct net_device *dev = info->netdev; hdlcdev_rx()
4282 * info pointer to device instance information
4286 static int hdlcdev_init(MGSLPC_INFO *info) hdlcdev_init() argument
4294 dev = alloc_hdlcdev(info); hdlcdev_init()
4301 dev->base_addr = info->io_base; hdlcdev_init()
4302 dev->irq = info->irq_level; hdlcdev_init()
4322 info->netdev = dev; hdlcdev_init()
4330 * info pointer to device instance information
4332 static void hdlcdev_exit(MGSLPC_INFO *info) hdlcdev_exit() argument
4334 unregister_hdlc_device(info->netdev); hdlcdev_exit()
4335 free_netdev(info->netdev); hdlcdev_exit()
4336 info->netdev = NULL; hdlcdev_exit()
/linux-4.1.27/arch/arm/mach-omap1/include/mach/
H A Dcamera.h8 static inline void omap1_set_camera_info(struct omap1_cam_platform_data *info) omap1_set_camera_info() argument
10 omap1_camera_init(info); omap1_set_camera_info()
/linux-4.1.27/arch/x86/pci/
H A Dbus_numa.c11 struct pci_root_info *info; x86_find_pci_root_info() local
13 list_for_each_entry(info, &pci_root_infos, list) x86_find_pci_root_info()
14 if (info->busn.start == bus) x86_find_pci_root_info()
15 return info; x86_find_pci_root_info()
22 struct pci_root_info *info = x86_find_pci_root_info(bus); x86_pci_root_bus_node() local
24 if (!info) x86_pci_root_bus_node()
27 return info->node; x86_pci_root_bus_node()
32 struct pci_root_info *info = x86_find_pci_root_info(bus); x86_pci_root_bus_resources() local
37 if (!info) x86_pci_root_bus_resources()
51 pci_add_resource(resources, &info->busn);
53 list_for_each_entry(root_res, &info->resources, list) {
81 struct pci_root_info *info; alloc_pci_root_info() local
83 info = kzalloc(sizeof(*info), GFP_KERNEL); alloc_pci_root_info()
85 if (!info) alloc_pci_root_info()
86 return info; alloc_pci_root_info()
88 sprintf(info->name, "PCI Bus #%02x", bus_min); alloc_pci_root_info()
90 INIT_LIST_HEAD(&info->resources); alloc_pci_root_info()
91 info->busn.name = info->name; alloc_pci_root_info()
92 info->busn.start = bus_min; alloc_pci_root_info()
93 info->busn.end = bus_max; alloc_pci_root_info()
94 info->busn.flags = IORESOURCE_BUS; alloc_pci_root_info()
95 info->node = node; alloc_pci_root_info()
96 info->link = link; alloc_pci_root_info()
98 list_add_tail(&info->list, &pci_root_infos); alloc_pci_root_info()
100 return info; alloc_pci_root_info()
103 void update_res(struct pci_root_info *info, resource_size_t start, update_res() argument
119 list_for_each_entry(root_res, &info->resources, list) { update_res()
148 res->name = info->name; update_res()
153 list_add_tail(&root_res->list, &info->resources); update_res()
/linux-4.1.27/drivers/video/fbdev/geode/
H A Dgx1fb_core.c100 static int gx1fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) gx1fb_check_var() argument
102 struct geodefb_par *par = info->par; gx1fb_check_var()
126 if (gx1_line_delta(var->xres, var->bits_per_pixel) * var->yres > info->fix.smem_len) gx1fb_check_var()
134 static int gx1fb_set_par(struct fb_info *info) gx1fb_set_par() argument
136 struct geodefb_par *par = info->par; gx1fb_set_par()
138 if (info->var.bits_per_pixel == 16) gx1fb_set_par()
139 info->fix.visual = FB_VISUAL_TRUECOLOR; gx1fb_set_par()
141 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; gx1fb_set_par()
143 info->fix.line_length = gx1_line_delta(info->var.xres, info->var.bits_per_pixel); gx1fb_set_par()
145 par->dc_ops->set_mode(info); gx1fb_set_par()
159 struct fb_info *info) gx1fb_setcolreg()
161 struct geodefb_par *par = info->par; gx1fb_setcolreg()
163 if (info->var.grayscale) { gx1fb_setcolreg()
169 if (info->fix.visual == FB_VISUAL_TRUECOLOR) { gx1fb_setcolreg()
170 u32 *pal = info->pseudo_palette; gx1fb_setcolreg()
176 v = chan_to_field(red, &info->var.red); gx1fb_setcolreg()
177 v |= chan_to_field(green, &info->var.green); gx1fb_setcolreg()
178 v |= chan_to_field(blue, &info->var.blue); gx1fb_setcolreg()
185 par->dc_ops->set_palette_reg(info, regno, red, green, blue); gx1fb_setcolreg()
191 static int gx1fb_blank(int blank_mode, struct fb_info *info) gx1fb_blank() argument
193 struct geodefb_par *par = info->par; gx1fb_blank()
195 return par->vid_ops->blank_display(info, blank_mode); gx1fb_blank()
198 static int gx1fb_map_video_memory(struct fb_info *info, struct pci_dev *dev) gx1fb_map_video_memory() argument
200 struct geodefb_par *par = info->par; gx1fb_map_video_memory()
228 info->fix.smem_start = gx_base + 0x800000; gx1fb_map_video_memory()
229 info->fix.smem_len = fb_len; gx1fb_map_video_memory()
230 info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len); gx1fb_map_video_memory()
231 if (!info->screen_base) gx1fb_map_video_memory()
235 info->fix.smem_len / 1024, info->fix.smem_start); gx1fb_map_video_memory()
240 static int parse_panel_option(struct fb_info *info) parse_panel_option() argument
242 struct geodefb_par *par = info->par; parse_panel_option()
274 struct fb_info *info; gx1fb_init_fbinfo() local
277 info = framebuffer_alloc(sizeof(struct geodefb_par) + sizeof(u32) * 16, dev); gx1fb_init_fbinfo()
278 if (!info) gx1fb_init_fbinfo()
281 par = info->par; gx1fb_init_fbinfo()
283 strcpy(info->fix.id, "GX1"); gx1fb_init_fbinfo()
285 info->fix.type = FB_TYPE_PACKED_PIXELS; gx1fb_init_fbinfo()
286 info->fix.type_aux = 0; gx1fb_init_fbinfo()
287 info->fix.xpanstep = 0; gx1fb_init_fbinfo()
288 info->fix.ypanstep = 0; gx1fb_init_fbinfo()
289 info->fix.ywrapstep = 0; gx1fb_init_fbinfo()
290 info->fix.accel = FB_ACCEL_NONE; gx1fb_init_fbinfo()
292 info->var.nonstd = 0; gx1fb_init_fbinfo()
293 info->var.activate = FB_ACTIVATE_NOW; gx1fb_init_fbinfo()
294 info->var.height = -1; gx1fb_init_fbinfo()
295 info->var.width = -1; gx1fb_init_fbinfo()
296 info->var.accel_flags = 0; gx1fb_init_fbinfo()
297 info->var.vmode = FB_VMODE_NONINTERLACED; gx1fb_init_fbinfo()
299 info->fbops = &gx1fb_ops; gx1fb_init_fbinfo()
300 info->flags = FBINFO_DEFAULT; gx1fb_init_fbinfo()
301 info->node = -1; gx1fb_init_fbinfo()
303 info->pseudo_palette = (void *)par + sizeof(struct geodefb_par); gx1fb_init_fbinfo()
305 info->var.grayscale = 0; gx1fb_init_fbinfo()
309 if (parse_panel_option(info) < 0) gx1fb_init_fbinfo()
314 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { gx1fb_init_fbinfo()
315 framebuffer_release(info); gx1fb_init_fbinfo()
318 return info; gx1fb_init_fbinfo()
324 struct fb_info *info; gx1fb_probe() local
327 info = gx1fb_init_fbinfo(&pdev->dev); gx1fb_probe()
328 if (!info) gx1fb_probe()
330 par = info->par; gx1fb_probe()
336 if ((ret = gx1fb_map_video_memory(info, pdev)) < 0) { gx1fb_probe()
341 ret = fb_find_mode(&info->var, info, mode_option, gx1fb_probe()
350 memset_io(info->screen_base, 0, info->fix.smem_len); gx1fb_probe()
352 gx1fb_check_var(&info->var, info); gx1fb_probe()
353 gx1fb_set_par(info); gx1fb_probe()
355 if (register_framebuffer(info) < 0) { gx1fb_probe()
359 pci_set_drvdata(pdev, info); gx1fb_probe()
360 fb_info(info, "%s frame buffer device\n", info->fix.id); gx1fb_probe()
364 if (info->screen_base) { gx1fb_probe()
365 iounmap(info->screen_base); gx1fb_probe()
377 fb_dealloc_cmap(&info->cmap); gx1fb_probe()
378 framebuffer_release(info); gx1fb_probe()
385 struct fb_info *info = pci_get_drvdata(pdev); gx1fb_remove() local
386 struct geodefb_par *par = info->par; gx1fb_remove()
388 unregister_framebuffer(info); gx1fb_remove()
390 iounmap((void __iomem *)info->screen_base); gx1fb_remove()
399 fb_dealloc_cmap(&info->cmap); gx1fb_remove()
401 framebuffer_release(info); gx1fb_remove()
157 gx1fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) gx1fb_setcolreg() argument
H A Dgxfb_core.c139 static int gxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) gxfb_check_var() argument
163 if (gx_line_delta(var->xres, var->bits_per_pixel) * var->yres > info->fix.smem_len) gxfb_check_var()
171 static int gxfb_set_par(struct fb_info *info) gxfb_set_par() argument
173 if (info->var.bits_per_pixel > 8) gxfb_set_par()
174 info->fix.visual = FB_VISUAL_TRUECOLOR; gxfb_set_par()
176 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; gxfb_set_par()
178 info->fix.line_length = gx_line_delta(info->var.xres, info->var.bits_per_pixel); gxfb_set_par()
180 gx_set_mode(info); gxfb_set_par()
194 struct fb_info *info) gxfb_setcolreg()
196 if (info->var.grayscale) { gxfb_setcolreg()
202 if (info->fix.visual == FB_VISUAL_TRUECOLOR) { gxfb_setcolreg()
203 u32 *pal = info->pseudo_palette; gxfb_setcolreg()
209 v = chan_to_field(red, &info->var.red); gxfb_setcolreg()
210 v |= chan_to_field(green, &info->var.green); gxfb_setcolreg()
211 v |= chan_to_field(blue, &info->var.blue); gxfb_setcolreg()
218 gx_set_hw_palette_reg(info, regno, red, green, blue); gxfb_setcolreg()
224 static int gxfb_blank(int blank_mode, struct fb_info *info) gxfb_blank() argument
226 return gx_blank_display(info, blank_mode); gxfb_blank()
229 static int gxfb_map_video_memory(struct fb_info *info, struct pci_dev *dev) gxfb_map_video_memory() argument
231 struct gxfb_par *par = info->par; gxfb_map_video_memory()
264 info->fix.smem_start = pci_resource_start(dev, 0); gxfb_map_video_memory()
265 info->fix.smem_len = vram ? vram : gx_frame_buffer_size(); gxfb_map_video_memory()
266 info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len); gxfb_map_video_memory()
267 if (!info->screen_base) gxfb_map_video_memory()
273 write_dc(par, DC_GLIU0_MEM_OFFSET, info->fix.smem_start & 0xFF000000); gxfb_map_video_memory()
276 info->fix.smem_len / 1024, info->fix.smem_start); gxfb_map_video_memory()
296 struct fb_info *info; gxfb_init_fbinfo() local
299 info = framebuffer_alloc(sizeof(struct gxfb_par) + sizeof(u32) * 16, gxfb_init_fbinfo()
301 if (!info) gxfb_init_fbinfo()
304 par = info->par; gxfb_init_fbinfo()
306 strcpy(info->fix.id, "Geode GX"); gxfb_init_fbinfo()
308 info->fix.type = FB_TYPE_PACKED_PIXELS; gxfb_init_fbinfo()
309 info->fix.type_aux = 0; gxfb_init_fbinfo()
310 info->fix.xpanstep = 0; gxfb_init_fbinfo()
311 info->fix.ypanstep = 0; gxfb_init_fbinfo()
312 info->fix.ywrapstep = 0; gxfb_init_fbinfo()
313 info->fix.accel = FB_ACCEL_NONE; gxfb_init_fbinfo()
315 info->var.nonstd = 0; gxfb_init_fbinfo()
316 info->var.activate = FB_ACTIVATE_NOW; gxfb_init_fbinfo()
317 info->var.height = -1; gxfb_init_fbinfo()
318 info->var.width = -1; gxfb_init_fbinfo()
319 info->var.accel_flags = 0; gxfb_init_fbinfo()
320 info->var.vmode = FB_VMODE_NONINTERLACED; gxfb_init_fbinfo()
322 info->fbops = &gxfb_ops; gxfb_init_fbinfo()
323 info->flags = FBINFO_DEFAULT; gxfb_init_fbinfo()
324 info->node = -1; gxfb_init_fbinfo()
326 info->pseudo_palette = (void *)par + sizeof(struct gxfb_par); gxfb_init_fbinfo()
328 info->var.grayscale = 0; gxfb_init_fbinfo()
330 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { gxfb_init_fbinfo()
331 framebuffer_release(info); gxfb_init_fbinfo()
335 return info; gxfb_init_fbinfo()
341 struct fb_info *info = pci_get_drvdata(pdev); gxfb_suspend() local
345 gx_powerdown(info); gxfb_suspend()
346 fb_set_suspend(info, 1); gxfb_suspend()
358 struct fb_info *info = pci_get_drvdata(pdev); gxfb_resume() local
362 ret = gx_powerup(info); gxfb_resume()
368 fb_set_suspend(info, 0); gxfb_resume()
377 struct fb_info *info; gxfb_probe() local
384 info = gxfb_init_fbinfo(&pdev->dev); gxfb_probe()
385 if (!info) gxfb_probe()
387 par = info->par; gxfb_probe()
389 if ((ret = gxfb_map_video_memory(info, pdev)) < 0) { gxfb_probe()
404 ret = fb_find_mode(&info->var, info, mode_option, gxfb_probe()
414 memset_io(info->screen_base, 0, info->fix.smem_len); gxfb_probe()
416 gxfb_check_var(&info->var, info); gxfb_probe()
417 gxfb_set_par(info); gxfb_probe()
421 if (register_framebuffer(info) < 0) { gxfb_probe()
425 pci_set_drvdata(pdev, info); gxfb_probe()
426 fb_info(info, "%s frame buffer device\n", info->fix.id); gxfb_probe()
430 if (info->screen_base) { gxfb_probe()
431 iounmap(info->screen_base); gxfb_probe()
447 fb_dealloc_cmap(&info->cmap); gxfb_probe()
448 framebuffer_release(info); gxfb_probe()
454 struct fb_info *info = pci_get_drvdata(pdev); gxfb_remove() local
455 struct gxfb_par *par = info->par; gxfb_remove()
457 unregister_framebuffer(info); gxfb_remove()
459 iounmap((void __iomem *)info->screen_base); gxfb_remove()
471 fb_dealloc_cmap(&info->cmap); gxfb_remove()
473 framebuffer_release(info); gxfb_remove()
192 gxfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) gxfb_setcolreg() argument
H A Dlxfb_core.c248 static int lxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) lxfb_check_var() argument
272 > info->fix.smem_len) lxfb_check_var()
278 static int lxfb_set_par(struct fb_info *info) lxfb_set_par() argument
280 if (info->var.bits_per_pixel > 8) lxfb_set_par()
281 info->fix.visual = FB_VISUAL_TRUECOLOR; lxfb_set_par()
283 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; lxfb_set_par()
285 info->fix.line_length = lx_get_pitch(info->var.xres, lxfb_set_par()
286 info->var.bits_per_pixel); lxfb_set_par()
288 lx_set_mode(info); lxfb_set_par()
301 struct fb_info *info) lxfb_setcolreg()
303 if (info->var.grayscale) { lxfb_setcolreg()
309 if (info->fix.visual == FB_VISUAL_TRUECOLOR) { lxfb_setcolreg()
310 u32 *pal = info->pseudo_palette; lxfb_setcolreg()
316 v = chan_to_field(red, &info->var.red); lxfb_setcolreg()
317 v |= chan_to_field(green, &info->var.green); lxfb_setcolreg()
318 v |= chan_to_field(blue, &info->var.blue); lxfb_setcolreg()
325 lx_set_palette_reg(info, regno, red, green, blue); lxfb_setcolreg()
331 static int lxfb_blank(int blank_mode, struct fb_info *info) lxfb_blank() argument
333 return lx_blank_display(info, blank_mode); lxfb_blank()
337 static int lxfb_map_video_memory(struct fb_info *info, struct pci_dev *dev) lxfb_map_video_memory() argument
339 struct lxfb_par *par = info->par; lxfb_map_video_memory()
367 info->fix.smem_start = pci_resource_start(dev, 0); lxfb_map_video_memory()
368 info->fix.smem_len = vram ? vram : lx_framebuffer_size(); lxfb_map_video_memory()
370 info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len); lxfb_map_video_memory()
374 if (info->screen_base == NULL) lxfb_map_video_memory()
393 write_dc(par, DC_GLIU0_MEM_OFFSET, info->fix.smem_start & 0xFF000000); lxfb_map_video_memory()
397 info->fix.smem_len / 1024, info->fix.smem_start); lxfb_map_video_memory()
417 struct fb_info *info; lxfb_init_fbinfo() local
420 info = framebuffer_alloc(sizeof(struct lxfb_par) + sizeof(u32) * 16, lxfb_init_fbinfo()
422 if (!info) lxfb_init_fbinfo()
425 par = info->par; lxfb_init_fbinfo()
427 strcpy(info->fix.id, "Geode LX"); lxfb_init_fbinfo()
429 info->fix.type = FB_TYPE_PACKED_PIXELS; lxfb_init_fbinfo()
430 info->fix.type_aux = 0; lxfb_init_fbinfo()
431 info->fix.xpanstep = 0; lxfb_init_fbinfo()
432 info->fix.ypanstep = 0; lxfb_init_fbinfo()
433 info->fix.ywrapstep = 0; lxfb_init_fbinfo()
434 info->fix.accel = FB_ACCEL_NONE; lxfb_init_fbinfo()
436 info->var.nonstd = 0; lxfb_init_fbinfo()
437 info->var.activate = FB_ACTIVATE_NOW; lxfb_init_fbinfo()
438 info->var.height = -1; lxfb_init_fbinfo()
439 info->var.width = -1; lxfb_init_fbinfo()
440 info->var.accel_flags = 0; lxfb_init_fbinfo()
441 info->var.vmode = FB_VMODE_NONINTERLACED; lxfb_init_fbinfo()
443 info->fbops = &lxfb_ops; lxfb_init_fbinfo()
444 info->flags = FBINFO_DEFAULT; lxfb_init_fbinfo()
445 info->node = -1; lxfb_init_fbinfo()
447 info->pseudo_palette = (void *)par + sizeof(struct lxfb_par); lxfb_init_fbinfo()
449 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { lxfb_init_fbinfo()
450 framebuffer_release(info); lxfb_init_fbinfo()
454 info->var.grayscale = 0; lxfb_init_fbinfo()
456 return info; lxfb_init_fbinfo()
462 struct fb_info *info = pci_get_drvdata(pdev); lxfb_suspend() local
466 lx_powerdown(info); lxfb_suspend()
467 fb_set_suspend(info, 1); lxfb_suspend()
479 struct fb_info *info = pci_get_drvdata(pdev); lxfb_resume() local
483 ret = lx_powerup(info); lxfb_resume()
489 fb_set_suspend(info, 0); lxfb_resume()
501 struct fb_info *info; lxfb_probe() local
507 info = lxfb_init_fbinfo(&pdev->dev); lxfb_probe()
509 if (info == NULL) lxfb_probe()
512 par = info->par; lxfb_probe()
514 ret = lxfb_map_video_memory(info, pdev); lxfb_probe()
531 ret = fb_find_mode(&info->var, info, mode_option, lxfb_probe()
544 memset_io(info->screen_base, 0, info->fix.smem_len); lxfb_probe()
548 lxfb_check_var(&info->var, info); lxfb_probe()
549 lxfb_set_par(info); lxfb_probe()
553 if (register_framebuffer(info) < 0) { lxfb_probe()
557 pci_set_drvdata(pdev, info); lxfb_probe()
558 fb_info(info, "%s frame buffer device\n", info->fix.id); lxfb_probe()
563 if (info->screen_base) { lxfb_probe()
564 iounmap(info->screen_base); lxfb_probe()
580 fb_dealloc_cmap(&info->cmap); lxfb_probe()
581 framebuffer_release(info); lxfb_probe()
588 struct fb_info *info = pci_get_drvdata(pdev); lxfb_remove() local
589 struct lxfb_par *par = info->par; lxfb_remove()
591 unregister_framebuffer(info); lxfb_remove()
593 iounmap(info->screen_base); lxfb_remove()
605 fb_dealloc_cmap(&info->cmap); lxfb_remove()
606 framebuffer_release(info); lxfb_remove()
299 lxfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) lxfb_setcolreg() argument
/linux-4.1.27/drivers/iio/adc/
H A Dexynos_adc.c121 void (*init_hw)(struct exynos_adc *info);
122 void (*exit_hw)(struct exynos_adc *info);
123 void (*clear_irq)(struct exynos_adc *info);
124 void (*start_conv)(struct exynos_adc *info, unsigned long addr);
127 static void exynos_adc_unprepare_clk(struct exynos_adc *info) exynos_adc_unprepare_clk() argument
129 if (info->data->needs_sclk) exynos_adc_unprepare_clk()
130 clk_unprepare(info->sclk); exynos_adc_unprepare_clk()
131 clk_unprepare(info->clk); exynos_adc_unprepare_clk()
134 static int exynos_adc_prepare_clk(struct exynos_adc *info) exynos_adc_prepare_clk() argument
138 ret = clk_prepare(info->clk); exynos_adc_prepare_clk()
140 dev_err(info->dev, "failed preparing adc clock: %d\n", ret); exynos_adc_prepare_clk()
144 if (info->data->needs_sclk) { exynos_adc_prepare_clk()
145 ret = clk_prepare(info->sclk); exynos_adc_prepare_clk()
147 clk_unprepare(info->clk); exynos_adc_prepare_clk()
148 dev_err(info->dev, exynos_adc_prepare_clk()
157 static void exynos_adc_disable_clk(struct exynos_adc *info) exynos_adc_disable_clk() argument
159 if (info->data->needs_sclk) exynos_adc_disable_clk()
160 clk_disable(info->sclk); exynos_adc_disable_clk()
161 clk_disable(info->clk); exynos_adc_disable_clk()
164 static int exynos_adc_enable_clk(struct exynos_adc *info) exynos_adc_enable_clk() argument
168 ret = clk_enable(info->clk); exynos_adc_enable_clk()
170 dev_err(info->dev, "failed enabling adc clock: %d\n", ret); exynos_adc_enable_clk()
174 if (info->data->needs_sclk) { exynos_adc_enable_clk()
175 ret = clk_enable(info->sclk); exynos_adc_enable_clk()
177 clk_disable(info->clk); exynos_adc_enable_clk()
178 dev_err(info->dev, exynos_adc_enable_clk()
187 static void exynos_adc_v1_init_hw(struct exynos_adc *info) exynos_adc_v1_init_hw() argument
191 if (info->data->needs_adc_phy) exynos_adc_v1_init_hw()
192 regmap_write(info->pmu_map, info->data->phy_offset, 1); exynos_adc_v1_init_hw()
199 writel(con1, ADC_V1_CON(info->regs)); exynos_adc_v1_init_hw()
202 static void exynos_adc_v1_exit_hw(struct exynos_adc *info) exynos_adc_v1_exit_hw() argument
206 if (info->data->needs_adc_phy) exynos_adc_v1_exit_hw()
207 regmap_write(info->pmu_map, info->data->phy_offset, 0); exynos_adc_v1_exit_hw()
209 con = readl(ADC_V1_CON(info->regs)); exynos_adc_v1_exit_hw()
211 writel(con, ADC_V1_CON(info->regs)); exynos_adc_v1_exit_hw()
214 static void exynos_adc_v1_clear_irq(struct exynos_adc *info) exynos_adc_v1_clear_irq() argument
216 writel(1, ADC_V1_INTCLR(info->regs)); exynos_adc_v1_clear_irq()
219 static void exynos_adc_v1_start_conv(struct exynos_adc *info, exynos_adc_v1_start_conv() argument
224 writel(addr, ADC_V1_MUX(info->regs)); exynos_adc_v1_start_conv()
226 con1 = readl(ADC_V1_CON(info->regs)); exynos_adc_v1_start_conv()
227 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); exynos_adc_v1_start_conv()
242 static void exynos_adc_s3c2416_start_conv(struct exynos_adc *info, exynos_adc_s3c2416_start_conv() argument
248 con1 = readl(ADC_V1_CON(info->regs)); exynos_adc_s3c2416_start_conv()
250 writel(con1, ADC_V1_CON(info->regs)); exynos_adc_s3c2416_start_conv()
253 writel(addr, ADC_S3C2410_MUX(info->regs)); exynos_adc_s3c2416_start_conv()
255 con1 = readl(ADC_V1_CON(info->regs)); exynos_adc_s3c2416_start_conv()
256 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); exynos_adc_s3c2416_start_conv()
268 static void exynos_adc_s3c2443_start_conv(struct exynos_adc *info, exynos_adc_s3c2443_start_conv() argument
274 writel(addr, ADC_S3C2410_MUX(info->regs)); exynos_adc_s3c2443_start_conv()
276 con1 = readl(ADC_V1_CON(info->regs)); exynos_adc_s3c2443_start_conv()
277 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); exynos_adc_s3c2443_start_conv()
289 static void exynos_adc_s3c64xx_start_conv(struct exynos_adc *info, exynos_adc_s3c64xx_start_conv() argument
294 con1 = readl(ADC_V1_CON(info->regs)); exynos_adc_s3c64xx_start_conv()
297 writel(con1 | ADC_CON_EN_START, ADC_V1_CON(info->regs)); exynos_adc_s3c64xx_start_conv()
319 static void exynos_adc_v2_init_hw(struct exynos_adc *info) exynos_adc_v2_init_hw() argument
323 if (info->data->needs_adc_phy) exynos_adc_v2_init_hw()
324 regmap_write(info->pmu_map, info->data->phy_offset, 1); exynos_adc_v2_init_hw()
327 writel(con1, ADC_V2_CON1(info->regs)); exynos_adc_v2_init_hw()
331 writel(con2, ADC_V2_CON2(info->regs)); exynos_adc_v2_init_hw()
334 writel(1, ADC_V2_INT_EN(info->regs)); exynos_adc_v2_init_hw()
337 static void exynos_adc_v2_exit_hw(struct exynos_adc *info) exynos_adc_v2_exit_hw() argument
341 if (info->data->needs_adc_phy) exynos_adc_v2_exit_hw()
342 regmap_write(info->pmu_map, info->data->phy_offset, 0); exynos_adc_v2_exit_hw()
344 con = readl(ADC_V2_CON1(info->regs)); exynos_adc_v2_exit_hw()
346 writel(con, ADC_V2_CON1(info->regs)); exynos_adc_v2_exit_hw()
349 static void exynos_adc_v2_clear_irq(struct exynos_adc *info) exynos_adc_v2_clear_irq() argument
351 writel(1, ADC_V2_INT_ST(info->regs)); exynos_adc_v2_clear_irq()
354 static void exynos_adc_v2_start_conv(struct exynos_adc *info, exynos_adc_v2_start_conv() argument
359 con2 = readl(ADC_V2_CON2(info->regs)); exynos_adc_v2_start_conv()
362 writel(con2, ADC_V2_CON2(info->regs)); exynos_adc_v2_start_conv()
364 con1 = readl(ADC_V2_CON1(info->regs)); exynos_adc_v2_start_conv()
365 writel(con1 | ADC_CON_EN_START, ADC_V2_CON1(info->regs)); exynos_adc_v2_start_conv()
393 static void exynos_adc_exynos7_init_hw(struct exynos_adc *info) exynos_adc_exynos7_init_hw() argument
397 if (info->data->needs_adc_phy) exynos_adc_exynos7_init_hw()
398 regmap_write(info->pmu_map, info->data->phy_offset, 1); exynos_adc_exynos7_init_hw()
401 writel(con1, ADC_V2_CON1(info->regs)); exynos_adc_exynos7_init_hw()
403 con2 = readl(ADC_V2_CON2(info->regs)); exynos_adc_exynos7_init_hw()
406 writel(con2, ADC_V2_CON2(info->regs)); exynos_adc_exynos7_init_hw()
409 writel(1, ADC_V2_INT_EN(info->regs)); exynos_adc_exynos7_init_hw()
469 struct exynos_adc *info = iio_priv(indio_dev); exynos_read_raw() local
477 reinit_completion(&info->completion); exynos_read_raw()
480 if (info->data->start_conv) exynos_read_raw()
481 info->data->start_conv(info, chan->address); exynos_read_raw()
484 (&info->completion, EXYNOS_ADC_TIMEOUT); exynos_read_raw()
487 if (info->data->init_hw) exynos_read_raw()
488 info->data->init_hw(info); exynos_read_raw()
491 *val = info->value; exynos_read_raw()
503 struct exynos_adc *info = (struct exynos_adc *)dev_id; exynos_adc_isr() local
504 u32 mask = info->data->mask; exynos_adc_isr()
507 info->value = readl(ADC_V1_DATX(info->regs)) & mask; exynos_adc_isr()
510 if (info->data->clear_irq) exynos_adc_isr()
511 info->data->clear_irq(info); exynos_adc_isr()
513 complete(&info->completion); exynos_adc_isr()
522 struct exynos_adc *info = iio_priv(indio_dev); exynos_adc_reg_access() local
527 *readval = readl(info->regs + reg); exynos_adc_reg_access()
571 struct exynos_adc *info = NULL; exynos_adc_probe() local
587 info = iio_priv(indio_dev); exynos_adc_probe()
589 info->data = exynos_adc_get_data(pdev); exynos_adc_probe()
590 if (!info->data) { exynos_adc_probe()
596 info->regs = devm_ioremap_resource(&pdev->dev, mem); exynos_adc_probe()
597 if (IS_ERR(info->regs)) exynos_adc_probe()
598 return PTR_ERR(info->regs); exynos_adc_probe()
601 if (info->data->needs_adc_phy) { exynos_adc_probe()
602 info->pmu_map = syscon_regmap_lookup_by_phandle( exynos_adc_probe()
605 if (IS_ERR(info->pmu_map)) { exynos_adc_probe()
607 return PTR_ERR(info->pmu_map); exynos_adc_probe()
617 info->irq = irq; exynos_adc_probe()
618 info->dev = &pdev->dev; exynos_adc_probe()
620 init_completion(&info->completion); exynos_adc_probe()
622 info->clk = devm_clk_get(&pdev->dev, "adc"); exynos_adc_probe()
623 if (IS_ERR(info->clk)) { exynos_adc_probe()
625 PTR_ERR(info->clk)); exynos_adc_probe()
626 return PTR_ERR(info->clk); exynos_adc_probe()
629 if (info->data->needs_sclk) { exynos_adc_probe()
630 info->sclk = devm_clk_get(&pdev->dev, "sclk"); exynos_adc_probe()
631 if (IS_ERR(info->sclk)) { exynos_adc_probe()
634 PTR_ERR(info->sclk)); exynos_adc_probe()
635 return PTR_ERR(info->sclk); exynos_adc_probe()
639 info->vdd = devm_regulator_get(&pdev->dev, "vdd"); exynos_adc_probe()
640 if (IS_ERR(info->vdd)) { exynos_adc_probe()
642 PTR_ERR(info->vdd)); exynos_adc_probe()
643 return PTR_ERR(info->vdd); exynos_adc_probe()
646 ret = regulator_enable(info->vdd); exynos_adc_probe()
650 ret = exynos_adc_prepare_clk(info); exynos_adc_probe()
654 ret = exynos_adc_enable_clk(info); exynos_adc_probe()
663 indio_dev->info = &exynos_adc_iio_info; exynos_adc_probe()
666 indio_dev->num_channels = info->data->num_channels; exynos_adc_probe()
668 ret = request_irq(info->irq, exynos_adc_isr, exynos_adc_probe()
669 0, dev_name(&pdev->dev), info); exynos_adc_probe()
672 info->irq); exynos_adc_probe()
680 if (info->data->init_hw) exynos_adc_probe()
681 info->data->init_hw(info); exynos_adc_probe()
696 free_irq(info->irq, info); exynos_adc_probe()
698 if (info->data->exit_hw) exynos_adc_probe()
699 info->data->exit_hw(info); exynos_adc_probe()
700 exynos_adc_disable_clk(info); exynos_adc_probe()
702 exynos_adc_unprepare_clk(info); exynos_adc_probe()
704 regulator_disable(info->vdd); exynos_adc_probe()
711 struct exynos_adc *info = iio_priv(indio_dev); exynos_adc_remove() local
716 free_irq(info->irq, info); exynos_adc_remove()
717 if (info->data->exit_hw) exynos_adc_remove()
718 info->data->exit_hw(info); exynos_adc_remove()
719 exynos_adc_disable_clk(info); exynos_adc_remove()
720 exynos_adc_unprepare_clk(info); exynos_adc_remove()
721 regulator_disable(info->vdd); exynos_adc_remove()
730 struct exynos_adc *info = iio_priv(indio_dev); exynos_adc_suspend() local
732 if (info->data->exit_hw) exynos_adc_suspend()
733 info->data->exit_hw(info); exynos_adc_suspend()
734 exynos_adc_disable_clk(info); exynos_adc_suspend()
735 regulator_disable(info->vdd); exynos_adc_suspend()
743 struct exynos_adc *info = iio_priv(indio_dev); exynos_adc_resume() local
746 ret = regulator_enable(info->vdd); exynos_adc_resume()
750 ret = exynos_adc_enable_clk(info); exynos_adc_resume()
754 if (info->data->init_hw) exynos_adc_resume()
755 info->data->init_hw(info); exynos_adc_resume()
H A Dvf610_adc.c187 static inline void vf610_adc_calculate_rates(struct vf610_adc *info) vf610_adc_calculate_rates() argument
189 unsigned long adck_rate, ipg_rate = clk_get_rate(info->clk); vf610_adc_calculate_rates()
203 adck_rate = ipg_rate / info->adc_feature.clk_div; vf610_adc_calculate_rates()
205 info->sample_freq_avail[i] = vf610_adc_calculate_rates()
209 static inline void vf610_adc_cfg_init(struct vf610_adc *info) vf610_adc_cfg_init() argument
211 struct vf610_adc_feature *adc_feature = &info->adc_feature; vf610_adc_cfg_init()
227 vf610_adc_calculate_rates(info); vf610_adc_cfg_init()
230 static void vf610_adc_cfg_post_set(struct vf610_adc *info) vf610_adc_cfg_post_set() argument
232 struct vf610_adc_feature *adc_feature = &info->adc_feature; vf610_adc_cfg_post_set()
264 dev_err(info->dev, "error voltage reference\n"); vf610_adc_cfg_post_set()
271 writel(cfg_data, info->regs + VF610_REG_ADC_CFG); vf610_adc_cfg_post_set()
272 writel(gc_data, info->regs + VF610_REG_ADC_GC); vf610_adc_cfg_post_set()
275 static void vf610_adc_calibration(struct vf610_adc *info) vf610_adc_calibration() argument
279 if (!info->adc_feature.calibration) vf610_adc_calibration()
284 writel(hc_cfg, info->regs + VF610_REG_ADC_HC0); vf610_adc_calibration()
286 adc_gc = readl(info->regs + VF610_REG_ADC_GC); vf610_adc_calibration()
287 writel(adc_gc | VF610_ADC_CAL, info->regs + VF610_REG_ADC_GC); vf610_adc_calibration()
289 if (!wait_for_completion_timeout(&info->completion, VF610_ADC_TIMEOUT)) vf610_adc_calibration()
290 dev_err(info->dev, "Timeout for adc calibration\n"); vf610_adc_calibration()
292 adc_gc = readl(info->regs + VF610_REG_ADC_GS); vf610_adc_calibration()
294 dev_err(info->dev, "ADC calibration failed\n"); vf610_adc_calibration()
296 info->adc_feature.calibration = false; vf610_adc_calibration()
299 static void vf610_adc_cfg_set(struct vf610_adc *info) vf610_adc_cfg_set() argument
301 struct vf610_adc_feature *adc_feature = &(info->adc_feature); vf610_adc_cfg_set()
304 cfg_data = readl(info->regs + VF610_REG_ADC_CFG); vf610_adc_cfg_set()
312 writel(cfg_data, info->regs + VF610_REG_ADC_CFG); vf610_adc_cfg_set()
315 static void vf610_adc_sample_set(struct vf610_adc *info) vf610_adc_sample_set() argument
317 struct vf610_adc_feature *adc_feature = &(info->adc_feature); vf610_adc_sample_set()
320 cfg_data = readl(info->regs + VF610_REG_ADC_CFG); vf610_adc_sample_set()
321 gc_data = readl(info->regs + VF610_REG_ADC_GC); vf610_adc_sample_set()
336 dev_err(info->dev, "error resolution mode\n"); vf610_adc_sample_set()
360 dev_err(info->dev, "error clk divider\n"); vf610_adc_sample_set()
391 dev_err(info->dev, vf610_adc_sample_set()
395 writel(cfg_data, info->regs + VF610_REG_ADC_CFG); vf610_adc_sample_set()
396 writel(gc_data, info->regs + VF610_REG_ADC_GC); vf610_adc_sample_set()
399 static void vf610_adc_hw_init(struct vf610_adc *info) vf610_adc_hw_init() argument
402 vf610_adc_cfg_post_set(info); vf610_adc_hw_init()
403 vf610_adc_sample_set(info); vf610_adc_hw_init()
406 vf610_adc_calibration(info); vf610_adc_hw_init()
409 vf610_adc_cfg_set(info); vf610_adc_hw_init()
412 static int vf610_adc_read_data(struct vf610_adc *info) vf610_adc_read_data() argument
416 result = readl(info->regs + VF610_REG_ADC_R0); vf610_adc_read_data()
418 switch (info->adc_feature.res_mode) { vf610_adc_read_data()
437 struct vf610_adc *info = (struct vf610_adc *)dev_id; vf610_adc_isr() local
440 coco = readl(info->regs + VF610_REG_ADC_HS); vf610_adc_isr()
442 info->value = vf610_adc_read_data(info); vf610_adc_isr()
443 complete(&info->completion); vf610_adc_isr()
452 struct vf610_adc *info = iio_priv(dev_to_iio_dev(dev)); vf610_show_samp_freq_avail() local
456 for (i = 0; i < ARRAY_SIZE(info->sample_freq_avail); i++) vf610_show_samp_freq_avail()
458 "%u ", info->sample_freq_avail[i]); vf610_show_samp_freq_avail()
483 struct vf610_adc *info = iio_priv(indio_dev); vf610_read_raw() local
491 reinit_completion(&info->completion); vf610_read_raw()
495 writel(hc_cfg, info->regs + VF610_REG_ADC_HC0); vf610_read_raw()
497 (&info->completion, VF610_ADC_TIMEOUT); vf610_read_raw()
509 *val = info->value; vf610_read_raw()
517 *val = 25000 - ((int)info->value - 864) * 1000000 / 1840; vf610_read_raw()
528 *val = info->vref_uv / 1000; vf610_read_raw()
529 *val2 = info->adc_feature.res_mode; vf610_read_raw()
533 *val = info->sample_freq_avail[info->adc_feature.sample_rate]; vf610_read_raw()
550 struct vf610_adc *info = iio_priv(indio_dev); vf610_write_raw() local
556 i < ARRAY_SIZE(info->sample_freq_avail); vf610_write_raw()
558 if (val == info->sample_freq_avail[i]) { vf610_write_raw()
559 info->adc_feature.sample_rate = i; vf610_write_raw()
560 vf610_adc_sample_set(info); vf610_write_raw()
576 struct vf610_adc *info = iio_priv(indio_dev); vf610_adc_reg_access() local
582 *readval = readl(info->regs + reg); vf610_adc_reg_access()
603 struct vf610_adc *info; vf610_adc_probe() local
615 info = iio_priv(indio_dev); vf610_adc_probe()
616 info->dev = &pdev->dev; vf610_adc_probe()
619 info->regs = devm_ioremap_resource(&pdev->dev, mem); vf610_adc_probe()
620 if (IS_ERR(info->regs)) vf610_adc_probe()
621 return PTR_ERR(info->regs); vf610_adc_probe()
629 ret = devm_request_irq(info->dev, irq, vf610_adc_probe()
631 dev_name(&pdev->dev), info); vf610_adc_probe()
637 info->clk = devm_clk_get(&pdev->dev, "adc"); vf610_adc_probe()
638 if (IS_ERR(info->clk)) { vf610_adc_probe()
640 PTR_ERR(info->clk)); vf610_adc_probe()
641 return PTR_ERR(info->clk); vf610_adc_probe()
644 info->vref = devm_regulator_get(&pdev->dev, "vref"); vf610_adc_probe()
645 if (IS_ERR(info->vref)) vf610_adc_probe()
646 return PTR_ERR(info->vref); vf610_adc_probe()
648 ret = regulator_enable(info->vref); vf610_adc_probe()
652 info->vref_uv = regulator_get_voltage(info->vref); vf610_adc_probe()
656 init_completion(&info->completion); vf610_adc_probe()
661 indio_dev->info = &vf610_adc_iio_info; vf610_adc_probe()
666 ret = clk_prepare_enable(info->clk); vf610_adc_probe()
673 vf610_adc_cfg_init(info); vf610_adc_probe()
674 vf610_adc_hw_init(info); vf610_adc_probe()
686 clk_disable_unprepare(info->clk); vf610_adc_probe()
688 regulator_disable(info->vref); vf610_adc_probe()
696 struct vf610_adc *info = iio_priv(indio_dev); vf610_adc_remove() local
699 regulator_disable(info->vref); vf610_adc_remove()
700 clk_disable_unprepare(info->clk); vf610_adc_remove()
709 struct vf610_adc *info = iio_priv(indio_dev); vf610_adc_suspend() local
713 hc_cfg = readl(info->regs + VF610_REG_ADC_HC0); vf610_adc_suspend()
715 writel(hc_cfg, info->regs + VF610_REG_ADC_HC0); vf610_adc_suspend()
717 clk_disable_unprepare(info->clk); vf610_adc_suspend()
718 regulator_disable(info->vref); vf610_adc_suspend()
726 struct vf610_adc *info = iio_priv(indio_dev); vf610_adc_resume() local
729 ret = regulator_enable(info->vref); vf610_adc_resume()
733 ret = clk_prepare_enable(info->clk); vf610_adc_resume()
737 vf610_adc_hw_init(info); vf610_adc_resume()
742 regulator_disable(info->vref); vf610_adc_resume()
H A Drockchip_saradc.c64 struct rockchip_saradc *info = iio_priv(indio_dev); rockchip_saradc_read_raw() local
71 reinit_completion(&info->completion); rockchip_saradc_read_raw()
74 writel_relaxed(8, info->regs + SARADC_DLY_PU_SOC); rockchip_saradc_read_raw()
80 info->regs + SARADC_CTRL); rockchip_saradc_read_raw()
82 if (!wait_for_completion_timeout(&info->completion, rockchip_saradc_read_raw()
84 writel_relaxed(0, info->regs + SARADC_CTRL); rockchip_saradc_read_raw()
89 *val = info->last_val; rockchip_saradc_read_raw()
93 ret = regulator_get_voltage(info->vref); rockchip_saradc_read_raw()
100 *val2 = info->data->num_bits; rockchip_saradc_read_raw()
109 struct rockchip_saradc *info = (struct rockchip_saradc *)dev_id; rockchip_saradc_isr() local
112 info->last_val = readl_relaxed(info->regs + SARADC_DATA); rockchip_saradc_isr()
113 info->last_val &= GENMASK(info->data->num_bits - 1, 0); rockchip_saradc_isr()
116 writel_relaxed(0, info->regs + SARADC_CTRL); rockchip_saradc_isr()
118 complete(&info->completion); rockchip_saradc_isr()
176 struct rockchip_saradc *info = NULL; rockchip_saradc_probe() local
187 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); rockchip_saradc_probe()
192 info = iio_priv(indio_dev); rockchip_saradc_probe()
195 info->data = match->data; rockchip_saradc_probe()
198 info->regs = devm_ioremap_resource(&pdev->dev, mem); rockchip_saradc_probe()
199 if (IS_ERR(info->regs)) rockchip_saradc_probe()
200 return PTR_ERR(info->regs); rockchip_saradc_probe()
202 init_completion(&info->completion); rockchip_saradc_probe()
211 0, dev_name(&pdev->dev), info); rockchip_saradc_probe()
217 info->pclk = devm_clk_get(&pdev->dev, "apb_pclk"); rockchip_saradc_probe()
218 if (IS_ERR(info->pclk)) { rockchip_saradc_probe()
220 return PTR_ERR(info->pclk); rockchip_saradc_probe()
223 info->clk = devm_clk_get(&pdev->dev, "saradc"); rockchip_saradc_probe()
224 if (IS_ERR(info->clk)) { rockchip_saradc_probe()
226 return PTR_ERR(info->clk); rockchip_saradc_probe()
229 info->vref = devm_regulator_get(&pdev->dev, "vref"); rockchip_saradc_probe()
230 if (IS_ERR(info->vref)) { rockchip_saradc_probe()
232 PTR_ERR(info->vref)); rockchip_saradc_probe()
233 return PTR_ERR(info->vref); rockchip_saradc_probe()
240 ret = clk_set_rate(info->clk, info->data->clk_rate); rockchip_saradc_probe()
246 ret = regulator_enable(info->vref); rockchip_saradc_probe()
252 ret = clk_prepare_enable(info->pclk); rockchip_saradc_probe()
258 ret = clk_prepare_enable(info->clk); rockchip_saradc_probe()
269 indio_dev->info = &rockchip_saradc_iio_info; rockchip_saradc_probe()
272 indio_dev->channels = info->data->channels; rockchip_saradc_probe()
273 indio_dev->num_channels = info->data->num_channels; rockchip_saradc_probe()
282 clk_disable_unprepare(info->clk); rockchip_saradc_probe()
284 clk_disable_unprepare(info->pclk); rockchip_saradc_probe()
286 regulator_disable(info->vref); rockchip_saradc_probe()
293 struct rockchip_saradc *info = iio_priv(indio_dev); rockchip_saradc_remove() local
296 clk_disable_unprepare(info->clk); rockchip_saradc_remove()
297 clk_disable_unprepare(info->pclk); rockchip_saradc_remove()
298 regulator_disable(info->vref); rockchip_saradc_remove()
307 struct rockchip_saradc *info = iio_priv(indio_dev); rockchip_saradc_suspend() local
309 clk_disable_unprepare(info->clk); rockchip_saradc_suspend()
310 clk_disable_unprepare(info->pclk); rockchip_saradc_suspend()
311 regulator_disable(info->vref); rockchip_saradc_suspend()
319 struct rockchip_saradc *info = iio_priv(indio_dev); rockchip_saradc_resume() local
322 ret = regulator_enable(info->vref); rockchip_saradc_resume()
326 ret = clk_prepare_enable(info->pclk); rockchip_saradc_resume()
330 ret = clk_prepare_enable(info->clk); rockchip_saradc_resume()
/linux-4.1.27/drivers/extcon/
H A Dextcon-arizona.c137 static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info);
139 static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info, arizona_extcon_hp_clamp() argument
142 struct arizona *arizona = info->arizona; arizona_extcon_hp_clamp()
205 static void arizona_extcon_set_mode(struct arizona_extcon_info *info, int mode) arizona_extcon_set_mode() argument
207 struct arizona *arizona = info->arizona; arizona_extcon_set_mode()
209 mode %= info->micd_num_modes; arizona_extcon_set_mode()
213 info->micd_modes[mode].gpio); arizona_extcon_set_mode()
216 info->micd_modes[mode].bias << arizona_extcon_set_mode()
219 ARIZONA_ACCDET_SRC, info->micd_modes[mode].src); arizona_extcon_set_mode()
221 info->micd_mode = mode; arizona_extcon_set_mode()
226 static const char *arizona_extcon_get_micbias(struct arizona_extcon_info *info) arizona_extcon_get_micbias() argument
228 switch (info->micd_modes[0].bias) { arizona_extcon_get_micbias()
240 static void arizona_extcon_pulse_micbias(struct arizona_extcon_info *info) arizona_extcon_pulse_micbias() argument
242 struct arizona *arizona = info->arizona; arizona_extcon_pulse_micbias()
243 const char *widget = arizona_extcon_get_micbias(info); arizona_extcon_pulse_micbias()
264 static void arizona_start_mic(struct arizona_extcon_info *info) arizona_start_mic() argument
266 struct arizona *arizona = info->arizona; arizona_start_mic()
271 pm_runtime_get(info->dev); arizona_start_mic()
273 if (info->detecting) { arizona_start_mic()
274 ret = regulator_allow_bypass(info->micvdd, false); arizona_start_mic()
282 ret = regulator_enable(info->micvdd); arizona_start_mic()
288 if (info->micd_reva) { arizona_start_mic()
298 arizona_extcon_pulse_micbias(info); arizona_start_mic()
304 regulator_disable(info->micvdd); arizona_start_mic()
305 pm_runtime_put_autosuspend(info->dev); arizona_start_mic()
309 static void arizona_stop_mic(struct arizona_extcon_info *info) arizona_stop_mic() argument
311 struct arizona *arizona = info->arizona; arizona_stop_mic()
312 const char *widget = arizona_extcon_get_micbias(info); arizona_stop_mic()
329 if (info->micd_reva) { arizona_stop_mic()
335 ret = regulator_allow_bypass(info->micvdd, true); arizona_stop_mic()
342 regulator_disable(info->micvdd); arizona_stop_mic()
343 pm_runtime_mark_last_busy(info->dev); arizona_stop_mic()
344 pm_runtime_put_autosuspend(info->dev); arizona_stop_mic()
370 static int arizona_hpdet_read(struct arizona_extcon_info *info) arizona_hpdet_read() argument
372 struct arizona *arizona = info->arizona; arizona_hpdet_read()
383 switch (info->hpdet_ip) { arizona_hpdet_read()
444 info->hpdet_ip); arizona_hpdet_read()
487 static int arizona_hpdet_do_id(struct arizona_extcon_info *info, int *reading, arizona_hpdet_do_id() argument
490 struct arizona *arizona = info->arizona; arizona_hpdet_do_id()
498 info->hpdet_res[info->num_hpdet_res++] = *reading; arizona_hpdet_do_id()
501 if (id_gpio && info->num_hpdet_res == 1) { arizona_hpdet_do_id()
509 info->micd_modes[0].src); arizona_hpdet_do_id()
521 info->hpdet_res[0], info->hpdet_res[1]); arizona_hpdet_do_id()
524 *reading = info->hpdet_res[0]; arizona_hpdet_do_id()
527 if (*reading >= ARIZONA_HPDET_MAX && !info->hpdet_retried) { arizona_hpdet_do_id()
529 info->num_hpdet_res = 0; arizona_hpdet_do_id()
530 info->hpdet_retried = true; arizona_hpdet_do_id()
531 arizona_start_hpdet_acc_id(info); arizona_hpdet_do_id()
532 pm_runtime_put(info->dev); arizona_hpdet_do_id()
539 if (!id_gpio || info->hpdet_res[1] > 50) { arizona_hpdet_do_id()
542 info->detecting = true; arizona_hpdet_do_id()
551 info->micd_modes[0].src); arizona_hpdet_do_id()
559 struct arizona_extcon_info *info = data; arizona_hpdet_irq() local
560 struct arizona *arizona = info->arizona; arizona_hpdet_irq()
566 mutex_lock(&info->lock); arizona_hpdet_irq()
569 if (!info->hpdet_active) { arizona_hpdet_irq()
571 mutex_unlock(&info->lock); arizona_hpdet_irq()
576 ret = extcon_get_cable_state_(info->edev, ARIZONA_CABLE_MECHANICAL); arizona_hpdet_irq()
586 ret = arizona_hpdet_read(info); arizona_hpdet_irq()
599 ret = arizona_hpdet_do_id(info, &reading, &mic); arizona_hpdet_irq()
611 ret = extcon_set_cable_state_(info->edev, report, true); arizona_hpdet_irq()
623 arizona_extcon_hp_clamp(info, false); arizona_hpdet_irq()
634 if (mic || info->mic) arizona_hpdet_irq()
635 arizona_start_mic(info); arizona_hpdet_irq()
637 if (info->hpdet_active) { arizona_hpdet_irq()
638 pm_runtime_put_autosuspend(info->dev); arizona_hpdet_irq()
639 info->hpdet_active = false; arizona_hpdet_irq()
642 info->hpdet_done = true; arizona_hpdet_irq()
645 mutex_unlock(&info->lock); arizona_hpdet_irq()
650 static void arizona_identify_headphone(struct arizona_extcon_info *info) arizona_identify_headphone() argument
652 struct arizona *arizona = info->arizona; arizona_identify_headphone()
655 if (info->hpdet_done) arizona_identify_headphone()
661 pm_runtime_get(info->dev); arizona_identify_headphone()
663 info->hpdet_active = true; arizona_identify_headphone()
665 if (info->mic) arizona_identify_headphone()
666 arizona_stop_mic(info); arizona_identify_headphone()
668 arizona_extcon_hp_clamp(info, true); arizona_identify_headphone()
694 ret = extcon_set_cable_state_(info->edev, arizona_identify_headphone()
699 if (info->mic) arizona_identify_headphone()
700 arizona_start_mic(info); arizona_identify_headphone()
702 info->hpdet_active = false; arizona_identify_headphone()
705 static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info) arizona_start_hpdet_acc_id() argument
707 struct arizona *arizona = info->arizona; arizona_start_hpdet_acc_id()
715 pm_runtime_get_sync(info->dev); arizona_start_hpdet_acc_id()
717 info->hpdet_active = true; arizona_start_hpdet_acc_id()
719 arizona_extcon_hp_clamp(info, true); arizona_start_hpdet_acc_id()
724 info->micd_modes[0].src | arizona_start_hpdet_acc_id()
742 arizona_hpdet_do_id(info, &hp_reading, &mic); arizona_start_hpdet_acc_id()
752 ret = extcon_set_cable_state_(info->edev, arizona_start_hpdet_acc_id()
757 info->hpdet_active = false; arizona_start_hpdet_acc_id()
762 struct arizona_extcon_info *info = container_of(work, arizona_micd_timeout_work() local
766 mutex_lock(&info->lock); arizona_micd_timeout_work()
768 dev_dbg(info->arizona->dev, "MICD timed out, reporting HP\n"); arizona_micd_timeout_work()
769 arizona_identify_headphone(info); arizona_micd_timeout_work()
771 info->detecting = false; arizona_micd_timeout_work()
773 arizona_stop_mic(info); arizona_micd_timeout_work()
775 mutex_unlock(&info->lock); arizona_micd_timeout_work()
780 struct arizona_extcon_info *info = container_of(work, arizona_micd_detect() local
783 struct arizona *arizona = info->arizona; arizona_micd_detect()
787 cancel_delayed_work_sync(&info->micd_timeout_work); arizona_micd_detect()
789 mutex_lock(&info->lock); arizona_micd_detect()
792 ret = extcon_get_cable_state_(info->edev, ARIZONA_CABLE_MECHANICAL); arizona_micd_detect()
796 mutex_unlock(&info->lock); arizona_micd_detect()
800 mutex_unlock(&info->lock); arizona_micd_detect()
809 mutex_unlock(&info->lock); arizona_micd_detect()
818 mutex_unlock(&info->lock); arizona_micd_detect()
825 mutex_unlock(&info->lock); arizona_micd_detect()
832 info->detecting = false; arizona_micd_detect()
837 if (info->detecting && (val & ARIZONA_MICD_LVL_8)) { arizona_micd_detect()
838 arizona_identify_headphone(info); arizona_micd_detect()
840 ret = extcon_set_cable_state_(info->edev, arizona_micd_detect()
848 ret = regulator_allow_bypass(info->micvdd, true); arizona_micd_detect()
854 info->mic = true; arizona_micd_detect()
855 info->detecting = false; arizona_micd_detect()
865 if (info->detecting && (val & MICD_LVL_1_TO_7)) { arizona_micd_detect()
866 if (info->jack_flips >= info->micd_num_modes * 10) { arizona_micd_detect()
868 arizona_identify_headphone(info); arizona_micd_detect()
870 info->detecting = false; arizona_micd_detect()
872 arizona_stop_mic(info); arizona_micd_detect()
874 info->micd_mode++; arizona_micd_detect()
875 if (info->micd_mode == info->micd_num_modes) arizona_micd_detect()
876 info->micd_mode = 0; arizona_micd_detect()
877 arizona_extcon_set_mode(info, info->micd_mode); arizona_micd_detect()
879 info->jack_flips++; arizona_micd_detect()
890 if (info->mic) { arizona_micd_detect()
896 for (i = 0; i < info->num_micd_ranges; i++) arizona_micd_detect()
897 input_report_key(info->input, arizona_micd_detect()
898 info->micd_ranges[i].key, 0); arizona_micd_detect()
901 WARN_ON(ffs(lvl) - 1 >= info->num_micd_ranges); arizona_micd_detect()
902 if (lvl && ffs(lvl) - 1 < info->num_micd_ranges) { arizona_micd_detect()
903 key = info->micd_ranges[ffs(lvl) - 1].key; arizona_micd_detect()
904 input_report_key(info->input, key, 1); arizona_micd_detect()
905 input_sync(info->input); arizona_micd_detect()
908 } else if (info->detecting) { arizona_micd_detect()
910 info->detecting = false; arizona_micd_detect()
911 arizona_stop_mic(info); arizona_micd_detect()
913 arizona_identify_headphone(info); arizona_micd_detect()
920 for (i = 0; i < info->num_micd_ranges; i++) arizona_micd_detect()
921 input_report_key(info->input, arizona_micd_detect()
922 info->micd_ranges[i].key, 0); arizona_micd_detect()
923 input_sync(info->input); arizona_micd_detect()
924 arizona_extcon_pulse_micbias(info); arizona_micd_detect()
928 if (info->detecting) arizona_micd_detect()
930 &info->micd_timeout_work, arizona_micd_detect()
931 msecs_to_jiffies(info->micd_timeout)); arizona_micd_detect()
933 pm_runtime_mark_last_busy(info->dev); arizona_micd_detect()
934 mutex_unlock(&info->lock); arizona_micd_detect()
939 struct arizona_extcon_info *info = data; arizona_micdet() local
940 struct arizona *arizona = info->arizona; arizona_micdet()
943 cancel_delayed_work_sync(&info->micd_detect_work); arizona_micdet()
944 cancel_delayed_work_sync(&info->micd_timeout_work); arizona_micdet()
946 mutex_lock(&info->lock); arizona_micdet()
947 if (!info->detecting) arizona_micdet()
949 mutex_unlock(&info->lock); arizona_micdet()
953 &info->micd_detect_work, arizona_micdet()
956 arizona_micd_detect(&info->micd_detect_work.work); arizona_micdet()
963 struct arizona_extcon_info *info = container_of(work, arizona_hpdet_work() local
967 mutex_lock(&info->lock); arizona_hpdet_work()
968 arizona_start_hpdet_acc_id(info); arizona_hpdet_work()
969 mutex_unlock(&info->lock); arizona_hpdet_work()
974 struct arizona_extcon_info *info = data; arizona_jackdet() local
975 struct arizona *arizona = info->arizona; arizona_jackdet()
980 cancelled_hp = cancel_delayed_work_sync(&info->hpdet_work); arizona_jackdet()
981 cancelled_mic = cancel_delayed_work_sync(&info->micd_timeout_work); arizona_jackdet()
983 pm_runtime_get_sync(info->dev); arizona_jackdet()
985 mutex_lock(&info->lock); arizona_jackdet()
1005 mutex_unlock(&info->lock); arizona_jackdet()
1006 pm_runtime_put_autosuspend(info->dev); arizona_jackdet()
1011 if (val == info->last_jackdet) { arizona_jackdet()
1015 &info->hpdet_work, arizona_jackdet()
1019 int micd_timeout = info->micd_timeout; arizona_jackdet()
1022 &info->micd_timeout_work, arizona_jackdet()
1028 info->last_jackdet = val; arizona_jackdet()
1030 if (info->last_jackdet == present) { arizona_jackdet()
1032 ret = extcon_set_cable_state_(info->edev, arizona_jackdet()
1040 info->detecting = true; arizona_jackdet()
1041 info->mic = false; arizona_jackdet()
1042 info->jack_flips = 0; arizona_jackdet()
1044 arizona_start_mic(info); arizona_jackdet()
1047 &info->hpdet_work, arizona_jackdet()
1057 arizona_stop_mic(info); arizona_jackdet()
1059 info->num_hpdet_res = 0; arizona_jackdet()
1060 for (i = 0; i < ARRAY_SIZE(info->hpdet_res); i++) arizona_jackdet()
1061 info->hpdet_res[i] = 0; arizona_jackdet()
1062 info->mic = false; arizona_jackdet()
1063 info->hpdet_done = false; arizona_jackdet()
1064 info->hpdet_retried = false; arizona_jackdet()
1066 for (i = 0; i < info->num_micd_ranges; i++) arizona_jackdet()
1067 input_report_key(info->input, arizona_jackdet()
1068 info->micd_ranges[i].key, 0); arizona_jackdet()
1069 input_sync(info->input); arizona_jackdet()
1071 ret = extcon_update_state(info->edev, 0xffffffff, 0); arizona_jackdet()
1083 info->micd_timeout = arizona->pdata.micd_timeout; arizona_jackdet()
1085 info->micd_timeout = DEFAULT_MICD_TIMEOUT; arizona_jackdet()
1095 mutex_unlock(&info->lock); arizona_jackdet()
1097 pm_runtime_mark_last_busy(info->dev); arizona_jackdet()
1098 pm_runtime_put_autosuspend(info->dev); arizona_jackdet()
1127 struct arizona_extcon_info *info; arizona_extcon_probe() local
1136 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); arizona_extcon_probe()
1137 if (!info) arizona_extcon_probe()
1140 info->micvdd = devm_regulator_get(&pdev->dev, "MICVDD"); arizona_extcon_probe()
1141 if (IS_ERR(info->micvdd)) { arizona_extcon_probe()
1142 ret = PTR_ERR(info->micvdd); arizona_extcon_probe()
1147 mutex_init(&info->lock); arizona_extcon_probe()
1148 info->arizona = arizona; arizona_extcon_probe()
1149 info->dev = &pdev->dev; arizona_extcon_probe()
1150 info->last_jackdet = ~(ARIZONA_MICD_CLAMP_STS | ARIZONA_JD1_STS); arizona_extcon_probe()
1151 INIT_DELAYED_WORK(&info->hpdet_work, arizona_hpdet_work); arizona_extcon_probe()
1152 INIT_DELAYED_WORK(&info->micd_detect_work, arizona_micd_detect); arizona_extcon_probe()
1153 INIT_DELAYED_WORK(&info->micd_timeout_work, arizona_micd_timeout_work); arizona_extcon_probe()
1154 platform_set_drvdata(pdev, info); arizona_extcon_probe()
1160 info->micd_reva = true; arizona_extcon_probe()
1163 info->micd_clamp = true; arizona_extcon_probe()
1164 info->hpdet_ip = 1; arizona_extcon_probe()
1174 info->micd_clamp = true; arizona_extcon_probe()
1175 info->hpdet_ip = 2; arizona_extcon_probe()
1183 info->edev = devm_extcon_dev_allocate(&pdev->dev, arizona_cable); arizona_extcon_probe()
1184 if (IS_ERR(info->edev)) { arizona_extcon_probe()
1188 info->edev->name = "Headset Jack"; arizona_extcon_probe()
1190 ret = devm_extcon_dev_register(&pdev->dev, info->edev); arizona_extcon_probe()
1197 info->input = devm_input_allocate_device(&pdev->dev); arizona_extcon_probe()
1198 if (!info->input) { arizona_extcon_probe()
1204 info->input->name = "Headset"; arizona_extcon_probe()
1205 info->input->phys = "arizona/extcon"; arizona_extcon_probe()
1208 info->micd_modes = pdata->micd_configs; arizona_extcon_probe()
1209 info->micd_num_modes = pdata->num_micd_configs; arizona_extcon_probe()
1211 info->micd_modes = micd_default_modes; arizona_extcon_probe()
1212 info->micd_num_modes = ARRAY_SIZE(micd_default_modes); arizona_extcon_probe()
1216 if (info->micd_modes[0].gpio) arizona_extcon_probe()
1265 info->micd_ranges = pdata->micd_ranges; arizona_extcon_probe()
1266 info->num_micd_ranges = pdata->num_micd_ranges; arizona_extcon_probe()
1268 info->micd_ranges = micd_default_ranges; arizona_extcon_probe()
1269 info->num_micd_ranges = ARRAY_SIZE(micd_default_ranges); arizona_extcon_probe()
1277 if (info->num_micd_ranges > 1) { arizona_extcon_probe()
1278 for (i = 1; i < info->num_micd_ranges; i++) { arizona_extcon_probe()
1279 if (info->micd_ranges[i - 1].max > arizona_extcon_probe()
1280 info->micd_ranges[i].max) { arizona_extcon_probe()
1294 for (i = 0; i < info->num_micd_ranges; i++) { arizona_extcon_probe()
1296 if (arizona_micd_levels[j] >= info->micd_ranges[i].max) arizona_extcon_probe()
1301 info->micd_ranges[i].max); arizona_extcon_probe()
1310 input_set_capability(info->input, EV_KEY, arizona_extcon_probe()
1311 info->micd_ranges[i].key); arizona_extcon_probe()
1326 if (info->micd_clamp) { arizona_extcon_probe()
1357 arizona_extcon_set_mode(info, 0); arizona_extcon_probe()
1372 "JACKDET rise", arizona_jackdet, info); arizona_extcon_probe()
1387 "JACKDET fall", arizona_jackdet, info); arizona_extcon_probe()
1401 "MICDET", arizona_micdet, info); arizona_extcon_probe()
1408 "HPDET", arizona_hpdet_irq, info); arizona_extcon_probe()
1420 ret = regulator_allow_bypass(info->micvdd, true); arizona_extcon_probe()
1427 ret = input_register_device(info->input); arizona_extcon_probe()
1436 arizona_free_irq(arizona, ARIZONA_IRQ_HPDET, info); arizona_extcon_probe()
1438 arizona_free_irq(arizona, ARIZONA_IRQ_MICDET, info); arizona_extcon_probe()
1442 arizona_free_irq(arizona, jack_irq_fall, info); arizona_extcon_probe()
1446 arizona_free_irq(arizona, jack_irq_rise, info); arizona_extcon_probe()
1455 struct arizona_extcon_info *info = platform_get_drvdata(pdev); arizona_extcon_remove() local
1456 struct arizona *arizona = info->arizona; arizona_extcon_remove()
1475 arizona_free_irq(arizona, ARIZONA_IRQ_HPDET, info); arizona_extcon_remove()
1476 arizona_free_irq(arizona, ARIZONA_IRQ_MICDET, info); arizona_extcon_remove()
1477 arizona_free_irq(arizona, jack_irq_rise, info); arizona_extcon_remove()
1478 arizona_free_irq(arizona, jack_irq_fall, info); arizona_extcon_remove()
1479 cancel_delayed_work_sync(&info->hpdet_work); arizona_extcon_remove()
H A Dextcon-rt8973a.c238 static int rt8973a_muic_set_path(struct rt8973a_muic_info *info, rt8973a_muic_set_path() argument
247 if (info->auto_config) rt8973a_muic_set_path()
257 ret = regmap_update_bits(info->regmap, RT8973A_REG_MANUAL_SW1, rt8973a_muic_set_path()
262 dev_err(info->dev, rt8973a_muic_set_path()
268 dev_err(info->dev, "Unknown DM_CON/DP_CON switch type (%d)\n", rt8973a_muic_set_path()
276 static int rt8973a_muic_get_cable_type(struct rt8973a_muic_info *info) rt8973a_muic_get_cable_type() argument
282 ret = regmap_read(info->regmap, RT8973A_REG_ADC, &adc); rt8973a_muic_get_cable_type()
284 dev_err(info->dev, "failed to read ADC register\n"); rt8973a_muic_get_cable_type()
290 ret = regmap_read(info->regmap, RT8973A_REG_DEV1, &dev1); rt8973a_muic_get_cable_type()
292 dev_err(info->dev, "failed to read DEV1 register\n"); rt8973a_muic_get_cable_type()
312 static int rt8973a_muic_cable_handler(struct rt8973a_muic_info *info, rt8973a_muic_cable_handler() argument
316 const char **cable_names = info->edev->supported_cable; rt8973a_muic_cable_handler()
326 cable_type = rt8973a_muic_get_cable_type(info); rt8973a_muic_cable_handler()
335 dev_warn(info->dev, rt8973a_muic_cable_handler()
342 dev_err(info->dev, rt8973a_muic_cable_handler()
384 dev_warn(info->dev, rt8973a_muic_cable_handler()
401 dev_warn(info->dev, rt8973a_muic_cable_handler()
412 dev_err(info->dev, rt8973a_muic_cable_handler()
419 ret = rt8973a_muic_set_path(info, con_sw, attached); rt8973a_muic_cable_handler()
424 extcon_set_cable_state(info->edev, cable_names[idx], attached); rt8973a_muic_cable_handler()
431 struct rt8973a_muic_info *info = container_of(work, rt8973a_muic_irq_work() local
435 if (!info->edev) rt8973a_muic_irq_work()
438 mutex_lock(&info->mutex); rt8973a_muic_irq_work()
441 if (info->irq_attach) { rt8973a_muic_irq_work()
442 ret = rt8973a_muic_cable_handler(info, RT8973A_EVENT_ATTACH); rt8973a_muic_irq_work()
443 info->irq_attach = false; rt8973a_muic_irq_work()
446 if (info->irq_detach) { rt8973a_muic_irq_work()
447 ret = rt8973a_muic_cable_handler(info, RT8973A_EVENT_DETACH); rt8973a_muic_irq_work()
448 info->irq_detach = false; rt8973a_muic_irq_work()
451 if (info->irq_ovp) { rt8973a_muic_irq_work()
452 ret = rt8973a_muic_cable_handler(info, RT8973A_EVENT_OVP); rt8973a_muic_irq_work()
453 info->irq_ovp = false; rt8973a_muic_irq_work()
456 if (info->irq_otp) { rt8973a_muic_irq_work()
457 ret = rt8973a_muic_cable_handler(info, RT8973A_EVENT_OTP); rt8973a_muic_irq_work()
458 info->irq_otp = false; rt8973a_muic_irq_work()
462 dev_err(info->dev, "failed to handle MUIC interrupt\n"); rt8973a_muic_irq_work()
464 mutex_unlock(&info->mutex); rt8973a_muic_irq_work()
469 struct rt8973a_muic_info *info = data; rt8973a_muic_irq_handler() local
472 for (i = 0; i < info->num_muic_irqs; i++) rt8973a_muic_irq_handler()
473 if (irq == info->muic_irqs[i].virq) rt8973a_muic_irq_handler()
474 irq_type = info->muic_irqs[i].irq; rt8973a_muic_irq_handler()
478 info->irq_attach = true; rt8973a_muic_irq_handler()
481 info->irq_detach = true; rt8973a_muic_irq_handler()
484 info->irq_ovp = true; rt8973a_muic_irq_handler()
487 info->irq_otp = true; rt8973a_muic_irq_handler()
501 dev_dbg(info->dev, rt8973a_muic_irq_handler()
506 schedule_work(&info->irq_work); rt8973a_muic_irq_handler()
513 struct rt8973a_muic_info *info = container_of(to_delayed_work(work), rt8973a_muic_detect_cable_wq() local
518 ret = rt8973a_muic_cable_handler(info, RT8973A_EVENT_ATTACH); rt8973a_muic_detect_cable_wq()
520 dev_warn(info->dev, "failed to detect cable state\n"); rt8973a_muic_detect_cable_wq()
523 static void rt8973a_init_dev_type(struct rt8973a_muic_info *info) rt8973a_init_dev_type() argument
529 ret = regmap_read(info->regmap, RT8973A_REG_DEVICE_ID, &data); rt8973a_init_dev_type()
531 dev_err(info->dev, rt8973a_init_dev_type()
541 dev_info(info->dev, "Device type: version: 0x%x, vendor: 0x%x\n", rt8973a_init_dev_type()
545 for (i = 0; i < info->num_reg_data; i++) { rt8973a_init_dev_type()
546 u8 reg = info->reg_data[i].reg; rt8973a_init_dev_type()
547 u8 mask = info->reg_data[i].mask; rt8973a_init_dev_type()
550 if (info->reg_data[i].invert) rt8973a_init_dev_type()
551 val = ~info->reg_data[i].val; rt8973a_init_dev_type()
553 val = info->reg_data[i].val; rt8973a_init_dev_type()
555 regmap_update_bits(info->regmap, reg, mask, val); rt8973a_init_dev_type()
559 ret = regmap_read(info->regmap, RT8973A_REG_CONTROL1, &data); rt8973a_init_dev_type()
561 dev_err(info->dev, rt8973a_init_dev_type()
568 info->auto_config = true; rt8973a_init_dev_type()
569 dev_info(info->dev, rt8973a_init_dev_type()
578 struct rt8973a_muic_info *info; rt8973a_muic_i2c_probe() local
584 info = devm_kzalloc(&i2c->dev, sizeof(*info), GFP_KERNEL); rt8973a_muic_i2c_probe()
585 if (!info) rt8973a_muic_i2c_probe()
587 i2c_set_clientdata(i2c, info); rt8973a_muic_i2c_probe()
589 info->dev = &i2c->dev; rt8973a_muic_i2c_probe()
590 info->i2c = i2c; rt8973a_muic_i2c_probe()
591 info->irq = i2c->irq; rt8973a_muic_i2c_probe()
592 info->muic_irqs = rt8973a_muic_irqs; rt8973a_muic_i2c_probe()
593 info->num_muic_irqs = ARRAY_SIZE(rt8973a_muic_irqs); rt8973a_muic_i2c_probe()
594 info->reg_data = rt8973a_reg_data; rt8973a_muic_i2c_probe()
595 info->num_reg_data = ARRAY_SIZE(rt8973a_reg_data); rt8973a_muic_i2c_probe()
597 mutex_init(&info->mutex); rt8973a_muic_i2c_probe()
599 INIT_WORK(&info->irq_work, rt8973a_muic_irq_work); rt8973a_muic_i2c_probe()
601 info->regmap = devm_regmap_init_i2c(i2c, &rt8973a_muic_regmap_config); rt8973a_muic_i2c_probe()
602 if (IS_ERR(info->regmap)) { rt8973a_muic_i2c_probe()
603 ret = PTR_ERR(info->regmap); rt8973a_muic_i2c_probe()
604 dev_err(info->dev, "failed to allocate register map: %d\n", rt8973a_muic_i2c_probe()
611 ret = regmap_add_irq_chip(info->regmap, info->irq, irq_flags, 0, rt8973a_muic_i2c_probe()
612 &rt8973a_muic_irq_chip, &info->irq_data); rt8973a_muic_i2c_probe()
614 dev_err(info->dev, "failed to add irq_chip (irq:%d, err:%d)\n", rt8973a_muic_i2c_probe()
615 info->irq, ret); rt8973a_muic_i2c_probe()
619 for (i = 0; i < info->num_muic_irqs; i++) { rt8973a_muic_i2c_probe()
620 struct muic_irq *muic_irq = &info->muic_irqs[i]; rt8973a_muic_i2c_probe()
623 virq = regmap_irq_get_virq(info->irq_data, muic_irq->irq); rt8973a_muic_i2c_probe()
628 ret = devm_request_threaded_irq(info->dev, virq, NULL, rt8973a_muic_i2c_probe()
631 muic_irq->name, info); rt8973a_muic_i2c_probe()
633 dev_err(info->dev, rt8973a_muic_i2c_probe()
641 info->edev = devm_extcon_dev_allocate(info->dev, rt8973a_extcon_cable); rt8973a_muic_i2c_probe()
642 if (IS_ERR(info->edev)) { rt8973a_muic_i2c_probe()
643 dev_err(info->dev, "failed to allocate memory for extcon\n"); rt8973a_muic_i2c_probe()
646 info->edev->name = np->name; rt8973a_muic_i2c_probe()
649 ret = devm_extcon_dev_register(info->dev, info->edev); rt8973a_muic_i2c_probe()
651 dev_err(info->dev, "failed to register extcon device\n"); rt8973a_muic_i2c_probe()
663 INIT_DELAYED_WORK(&info->wq_detcable, rt8973a_muic_detect_cable_wq); rt8973a_muic_i2c_probe()
664 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, rt8973a_muic_i2c_probe()
668 rt8973a_init_dev_type(info); rt8973a_muic_i2c_probe()
675 struct rt8973a_muic_info *info = i2c_get_clientdata(i2c); rt8973a_muic_i2c_remove() local
677 regmap_del_irq_chip(info->irq, info->irq_data); rt8973a_muic_i2c_remove()
691 struct rt8973a_muic_info *info = i2c_get_clientdata(i2c); rt8973a_muic_suspend() local
693 enable_irq_wake(info->irq); rt8973a_muic_suspend()
701 struct rt8973a_muic_info *info = i2c_get_clientdata(i2c); rt8973a_muic_resume() local
703 disable_irq_wake(info->irq); rt8973a_muic_resume()
H A Dextcon-usb-gpio.c58 struct usb_extcon_info *info = container_of(to_delayed_work(work), usb_extcon_detect_cable() local
63 id = gpiod_get_value_cansleep(info->id_gpiod); usb_extcon_detect_cable()
70 extcon_set_cable_state(info->edev, usb_extcon_detect_cable()
73 extcon_set_cable_state(info->edev, usb_extcon_detect_cable()
82 extcon_set_cable_state(info->edev, usb_extcon_detect_cable()
85 extcon_set_cable_state(info->edev, usb_extcon_detect_cable()
93 struct usb_extcon_info *info = dev_id; usb_irq_handler() local
95 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, usb_irq_handler()
96 info->debounce_jiffies); usb_irq_handler()
105 struct usb_extcon_info *info; usb_extcon_probe() local
111 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); usb_extcon_probe()
112 if (!info) usb_extcon_probe()
115 info->dev = dev; usb_extcon_probe()
116 info->id_gpiod = devm_gpiod_get(&pdev->dev, "id"); usb_extcon_probe()
117 if (IS_ERR(info->id_gpiod)) { usb_extcon_probe()
119 return PTR_ERR(info->id_gpiod); usb_extcon_probe()
122 info->edev = devm_extcon_dev_allocate(dev, usb_extcon_cable); usb_extcon_probe()
123 if (IS_ERR(info->edev)) { usb_extcon_probe()
128 ret = devm_extcon_dev_register(dev, info->edev); usb_extcon_probe()
134 ret = gpiod_set_debounce(info->id_gpiod, usb_extcon_probe()
137 info->debounce_jiffies = msecs_to_jiffies(USB_GPIO_DEBOUNCE_MS); usb_extcon_probe()
139 INIT_DELAYED_WORK(&info->wq_detcable, usb_extcon_detect_cable); usb_extcon_probe()
141 info->id_irq = gpiod_to_irq(info->id_gpiod); usb_extcon_probe()
142 if (info->id_irq < 0) { usb_extcon_probe()
144 return info->id_irq; usb_extcon_probe()
147 ret = devm_request_threaded_irq(dev, info->id_irq, NULL, usb_extcon_probe()
151 pdev->name, info); usb_extcon_probe()
157 platform_set_drvdata(pdev, info); usb_extcon_probe()
161 usb_extcon_detect_cable(&info->wq_detcable.work); usb_extcon_probe()
168 struct usb_extcon_info *info = platform_get_drvdata(pdev); usb_extcon_remove() local
170 cancel_delayed_work_sync(&info->wq_detcable); usb_extcon_remove()
178 struct usb_extcon_info *info = dev_get_drvdata(dev); usb_extcon_suspend() local
182 ret = enable_irq_wake(info->id_irq); usb_extcon_suspend()
192 disable_irq(info->id_irq); usb_extcon_suspend()
199 struct usb_extcon_info *info = dev_get_drvdata(dev); usb_extcon_resume() local
203 ret = disable_irq_wake(info->id_irq); usb_extcon_resume()
208 enable_irq(info->id_irq); usb_extcon_resume()
H A Dextcon-sm5502.c227 static int sm5502_muic_set_path(struct sm5502_muic_info *info, sm5502_muic_set_path() argument
243 ret = regmap_update_bits(info->regmap, SM5502_REG_MANUAL_SW1, sm5502_muic_set_path()
248 dev_err(info->dev, sm5502_muic_set_path()
254 dev_err(info->dev, "Unknown DM_CON/DP_CON switch type (%d)\n", sm5502_muic_set_path()
264 ret = regmap_update_bits(info->regmap, SM5502_REG_MANUAL_SW1, sm5502_muic_set_path()
268 dev_err(info->dev, sm5502_muic_set_path()
274 dev_err(info->dev, "Unknown VBUS switch type (%d)\n", vbus_sw); sm5502_muic_set_path()
282 static unsigned int sm5502_muic_get_cable_type(struct sm5502_muic_info *info) sm5502_muic_get_cable_type() argument
288 ret = regmap_read(info->regmap, SM5502_REG_ADC, &adc); sm5502_muic_get_cable_type()
290 dev_err(info->dev, "failed to read ADC register\n"); sm5502_muic_get_cable_type()
343 ret = regmap_read(info->regmap, SM5502_REG_DEV_TYPE1, sm5502_muic_get_cable_type()
346 dev_err(info->dev, "failed to read DEV_TYPE1 reg\n"); sm5502_muic_get_cable_type()
361 dev_dbg(info->dev, sm5502_muic_get_cable_type()
368 dev_err(info->dev, sm5502_muic_get_cable_type()
376 static int sm5502_muic_cable_handler(struct sm5502_muic_info *info, sm5502_muic_cable_handler() argument
380 const char **cable_names = info->edev->supported_cable; sm5502_muic_cable_handler()
392 cable_type = sm5502_muic_get_cable_type(info); sm5502_muic_cable_handler()
414 dev_dbg(info->dev, sm5502_muic_cable_handler()
420 ret = sm5502_muic_set_path(info, con_sw, vbus_sw, attached); sm5502_muic_cable_handler()
425 extcon_set_cable_state(info->edev, cable_names[idx], attached); sm5502_muic_cable_handler()
432 struct sm5502_muic_info *info = container_of(work, sm5502_muic_irq_work() local
436 if (!info->edev) sm5502_muic_irq_work()
439 mutex_lock(&info->mutex); sm5502_muic_irq_work()
442 if (info->irq_attach) { sm5502_muic_irq_work()
443 ret = sm5502_muic_cable_handler(info, true); sm5502_muic_irq_work()
444 info->irq_attach = false; sm5502_muic_irq_work()
446 if (info->irq_detach) { sm5502_muic_irq_work()
447 ret = sm5502_muic_cable_handler(info, false); sm5502_muic_irq_work()
448 info->irq_detach = false; sm5502_muic_irq_work()
452 dev_err(info->dev, "failed to handle MUIC interrupt\n"); sm5502_muic_irq_work()
454 mutex_unlock(&info->mutex); sm5502_muic_irq_work()
461 static int sm5502_parse_irq(struct sm5502_muic_info *info, int irq_type) sm5502_parse_irq() argument
465 info->irq_attach = true; sm5502_parse_irq()
468 info->irq_detach = true; sm5502_parse_irq()
491 struct sm5502_muic_info *info = data; sm5502_muic_irq_handler() local
494 for (i = 0; i < info->num_muic_irqs; i++) sm5502_muic_irq_handler()
495 if (irq == info->muic_irqs[i].virq) sm5502_muic_irq_handler()
496 irq_type = info->muic_irqs[i].irq; sm5502_muic_irq_handler()
498 ret = sm5502_parse_irq(info, irq_type); sm5502_muic_irq_handler()
500 dev_warn(info->dev, "cannot handle is interrupt:%d\n", sm5502_muic_irq_handler()
504 schedule_work(&info->irq_work); sm5502_muic_irq_handler()
511 struct sm5502_muic_info *info = container_of(to_delayed_work(work), sm5502_muic_detect_cable_wq() local
516 ret = sm5502_muic_cable_handler(info, true); sm5502_muic_detect_cable_wq()
518 dev_warn(info->dev, "failed to detect cable state\n"); sm5502_muic_detect_cable_wq()
521 static void sm5502_init_dev_type(struct sm5502_muic_info *info) sm5502_init_dev_type() argument
527 ret = regmap_read(info->regmap, SM5502_REG_DEVICE_ID, &reg_data); sm5502_init_dev_type()
529 dev_err(info->dev, sm5502_init_dev_type()
539 dev_info(info->dev, "Device type: version: 0x%x, vendor: 0x%x\n", sm5502_init_dev_type()
543 for (i = 0; i < info->num_reg_data; i++) { sm5502_init_dev_type()
546 if (!info->reg_data[i].invert) sm5502_init_dev_type()
547 val |= ~info->reg_data[i].val; sm5502_init_dev_type()
549 val = info->reg_data[i].val; sm5502_init_dev_type()
550 regmap_write(info->regmap, info->reg_data[i].reg, val); sm5502_init_dev_type()
558 struct sm5502_muic_info *info; sm5022_muic_i2c_probe() local
564 info = devm_kzalloc(&i2c->dev, sizeof(*info), GFP_KERNEL); sm5022_muic_i2c_probe()
565 if (!info) sm5022_muic_i2c_probe()
567 i2c_set_clientdata(i2c, info); sm5022_muic_i2c_probe()
569 info->dev = &i2c->dev; sm5022_muic_i2c_probe()
570 info->i2c = i2c; sm5022_muic_i2c_probe()
571 info->irq = i2c->irq; sm5022_muic_i2c_probe()
572 info->muic_irqs = sm5502_muic_irqs; sm5022_muic_i2c_probe()
573 info->num_muic_irqs = ARRAY_SIZE(sm5502_muic_irqs); sm5022_muic_i2c_probe()
574 info->reg_data = sm5502_reg_data; sm5022_muic_i2c_probe()
575 info->num_reg_data = ARRAY_SIZE(sm5502_reg_data); sm5022_muic_i2c_probe()
577 mutex_init(&info->mutex); sm5022_muic_i2c_probe()
579 INIT_WORK(&info->irq_work, sm5502_muic_irq_work); sm5022_muic_i2c_probe()
581 info->regmap = devm_regmap_init_i2c(i2c, &sm5502_muic_regmap_config); sm5022_muic_i2c_probe()
582 if (IS_ERR(info->regmap)) { sm5022_muic_i2c_probe()
583 ret = PTR_ERR(info->regmap); sm5022_muic_i2c_probe()
584 dev_err(info->dev, "failed to allocate register map: %d\n", sm5022_muic_i2c_probe()
591 ret = regmap_add_irq_chip(info->regmap, info->irq, irq_flags, 0, sm5022_muic_i2c_probe()
592 &sm5502_muic_irq_chip, &info->irq_data); sm5022_muic_i2c_probe()
594 dev_err(info->dev, "failed to request IRQ %d: %d\n", sm5022_muic_i2c_probe()
595 info->irq, ret); sm5022_muic_i2c_probe()
599 for (i = 0; i < info->num_muic_irqs; i++) { sm5022_muic_i2c_probe()
600 struct muic_irq *muic_irq = &info->muic_irqs[i]; sm5022_muic_i2c_probe()
603 virq = regmap_irq_get_virq(info->irq_data, muic_irq->irq); sm5022_muic_i2c_probe()
608 ret = devm_request_threaded_irq(info->dev, virq, NULL, sm5022_muic_i2c_probe()
611 muic_irq->name, info); sm5022_muic_i2c_probe()
613 dev_err(info->dev, sm5022_muic_i2c_probe()
621 info->edev = devm_extcon_dev_allocate(info->dev, sm5502_extcon_cable); sm5022_muic_i2c_probe()
622 if (IS_ERR(info->edev)) { sm5022_muic_i2c_probe()
623 dev_err(info->dev, "failed to allocate memory for extcon\n"); sm5022_muic_i2c_probe()
626 info->edev->name = np->name; sm5022_muic_i2c_probe()
629 ret = devm_extcon_dev_register(info->dev, info->edev); sm5022_muic_i2c_probe()
631 dev_err(info->dev, "failed to register extcon device\n"); sm5022_muic_i2c_probe()
643 INIT_DELAYED_WORK(&info->wq_detcable, sm5502_muic_detect_cable_wq); sm5022_muic_i2c_probe()
644 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, sm5022_muic_i2c_probe()
648 sm5502_init_dev_type(info); sm5022_muic_i2c_probe()
655 struct sm5502_muic_info *info = i2c_get_clientdata(i2c); sm5502_muic_i2c_remove() local
657 regmap_del_irq_chip(info->irq, info->irq_data); sm5502_muic_i2c_remove()
671 struct sm5502_muic_info *info = i2c_get_clientdata(i2c); sm5502_muic_suspend() local
673 enable_irq_wake(info->irq); sm5502_muic_suspend()
681 struct sm5502_muic_info *info = i2c_get_clientdata(i2c); sm5502_muic_resume() local
683 disable_irq_wake(info->irq); sm5502_muic_resume()
H A Dextcon-max14577.c182 * @info: the instance including private data of max14577 MUIC
185 static int max14577_muic_set_debounce_time(struct max14577_muic_info *info, max14577_muic_set_debounce_time() argument
195 ret = max14577_update_reg(info->max14577->regmap, max14577_muic_set_debounce_time()
200 dev_err(info->dev, "failed to set ADC debounce time\n"); max14577_muic_set_debounce_time()
205 dev_err(info->dev, "invalid ADC debounce time\n"); max14577_muic_set_debounce_time()
214 * @info: the instance including private data of max14577 MUIC
222 static int max14577_muic_set_path(struct max14577_muic_info *info, max14577_muic_set_path() argument
229 ret = max14577_update_reg(info->max14577->regmap, max14577_muic_set_path()
233 dev_err(info->dev, "failed to update MUIC register\n"); max14577_muic_set_path()
242 ret = max14577_update_reg(info->max14577->regmap, max14577_muic_set_path()
246 dev_err(info->dev, "failed to update MUIC register\n"); max14577_muic_set_path()
255 ret = max14577_update_reg(info->max14577->regmap, max14577_muic_set_path()
259 dev_err(info->dev, "failed to update MUIC register\n"); max14577_muic_set_path()
263 dev_dbg(info->dev, max14577_muic_set_path()
272 * @info: the instance including private data of max14577 MUIC
281 static int max14577_muic_get_cable_type(struct max14577_muic_info *info, max14577_muic_get_cable_type() argument
294 adc = info->status[MAX14577_MUIC_STATUS1] & STATUS1_ADC_MASK; max14577_muic_get_cable_type()
299 * (info->prev_cable_type) for handling cable when cable is max14577_muic_get_cable_type()
305 cable_type = info->prev_cable_type; max14577_muic_get_cable_type()
306 info->prev_cable_type = MAX14577_MUIC_ADC_OPEN; max14577_muic_get_cable_type()
310 cable_type = info->prev_cable_type = adc; max14577_muic_get_cable_type()
318 chg_type = info->status[MAX14577_MUIC_STATUS2] & max14577_muic_get_cable_type()
325 cable_type = info->prev_chg_type; max14577_muic_get_cable_type()
326 info->prev_chg_type = MAX14577_CHARGER_TYPE_NONE; max14577_muic_get_cable_type()
332 * type(info->prev_chg_type) for handling cable when max14577_muic_get_cable_type()
335 cable_type = info->prev_chg_type = chg_type; max14577_muic_get_cable_type()
340 dev_err(info->dev, "Unknown cable group (%d)\n", group); max14577_muic_get_cable_type()
348 static int max14577_muic_jig_handler(struct max14577_muic_info *info, max14577_muic_jig_handler() argument
355 dev_dbg(info->dev, max14577_muic_jig_handler()
376 dev_err(info->dev, "failed to detect %s jig cable\n", max14577_muic_jig_handler()
381 ret = max14577_muic_set_path(info, path, attached); max14577_muic_jig_handler()
385 extcon_set_cable_state(info->edev, cable_name, attached); max14577_muic_jig_handler()
390 static int max14577_muic_adc_handler(struct max14577_muic_info *info) max14577_muic_adc_handler() argument
397 cable_type = max14577_muic_get_cable_type(info, max14577_muic_adc_handler()
400 dev_dbg(info->dev, max14577_muic_adc_handler()
403 info->prev_cable_type); max14577_muic_adc_handler()
410 ret = max14577_muic_jig_handler(info, cable_type, attached); max14577_muic_adc_handler()
447 dev_info(info->dev, max14577_muic_adc_handler()
452 dev_err(info->dev, max14577_muic_adc_handler()
461 static int max14577_muic_chg_handler(struct max14577_muic_info *info) max14577_muic_chg_handler() argument
467 chg_type = max14577_muic_get_cable_type(info, max14577_muic_chg_handler()
470 dev_dbg(info->dev, max14577_muic_chg_handler()
473 chg_type, info->prev_chg_type); max14577_muic_chg_handler()
478 ret = max14577_muic_set_path(info, info->path_usb, attached); max14577_muic_chg_handler()
482 extcon_set_cable_state(info->edev, "USB", attached); max14577_muic_chg_handler()
485 extcon_set_cable_state(info->edev, "TA", attached); max14577_muic_chg_handler()
488 extcon_set_cable_state(info->edev, max14577_muic_chg_handler()
492 extcon_set_cable_state(info->edev, "Slow-charger", attached); max14577_muic_chg_handler()
495 extcon_set_cable_state(info->edev, "Fast-charger", attached); max14577_muic_chg_handler()
501 dev_err(info->dev, max14577_muic_chg_handler()
512 struct max14577_muic_info *info = container_of(work, max14577_muic_irq_work() local
516 if (!info->edev) max14577_muic_irq_work()
519 mutex_lock(&info->mutex); max14577_muic_irq_work()
521 ret = max14577_bulk_read(info->max14577->regmap, max14577_muic_irq_work()
522 MAX14577_MUIC_REG_STATUS1, info->status, 2); max14577_muic_irq_work()
524 dev_err(info->dev, "failed to read MUIC register\n"); max14577_muic_irq_work()
525 mutex_unlock(&info->mutex); max14577_muic_irq_work()
529 if (info->irq_adc) { max14577_muic_irq_work()
530 ret = max14577_muic_adc_handler(info); max14577_muic_irq_work()
531 info->irq_adc = false; max14577_muic_irq_work()
533 if (info->irq_chg) { max14577_muic_irq_work()
534 ret = max14577_muic_chg_handler(info); max14577_muic_irq_work()
535 info->irq_chg = false; max14577_muic_irq_work()
539 dev_err(info->dev, "failed to handle MUIC interrupt\n"); max14577_muic_irq_work()
541 mutex_unlock(&info->mutex); max14577_muic_irq_work()
548 static int max14577_parse_irq(struct max14577_muic_info *info, int irq_type) max14577_parse_irq() argument
556 info->irq_adc = true; max14577_parse_irq()
564 info->irq_chg = true; max14577_parse_irq()
575 static int max77836_parse_irq(struct max14577_muic_info *info, int irq_type) max77836_parse_irq() argument
578 if (max14577_parse_irq(info, irq_type)) max77836_parse_irq()
583 info->irq_adc = true; max77836_parse_irq()
587 info->irq_chg = true; max77836_parse_irq()
596 struct max14577_muic_info *info = data; max14577_muic_irq_handler() local
606 for (i = 0; i < info->muic_irqs_num; i++) max14577_muic_irq_handler()
607 if (irq == info->muic_irqs[i].virq) max14577_muic_irq_handler()
608 irq_type = info->muic_irqs[i].irq; max14577_muic_irq_handler()
610 switch (info->max14577->dev_type) { max14577_muic_irq_handler()
612 irq_parsed = max77836_parse_irq(info, irq_type); max14577_muic_irq_handler()
616 irq_parsed = max14577_parse_irq(info, irq_type); max14577_muic_irq_handler()
621 dev_err(info->dev, "muic interrupt: irq %d occurred, skipped\n", max14577_muic_irq_handler()
625 schedule_work(&info->irq_work); max14577_muic_irq_handler()
630 static int max14577_muic_detect_accessory(struct max14577_muic_info *info) max14577_muic_detect_accessory() argument
637 mutex_lock(&info->mutex); max14577_muic_detect_accessory()
640 ret = max14577_bulk_read(info->max14577->regmap, max14577_muic_detect_accessory()
641 MAX14577_MUIC_REG_STATUS1, info->status, 2); max14577_muic_detect_accessory()
643 dev_err(info->dev, "failed to read MUIC register\n"); max14577_muic_detect_accessory()
644 mutex_unlock(&info->mutex); max14577_muic_detect_accessory()
648 adc = max14577_muic_get_cable_type(info, MAX14577_CABLE_GROUP_ADC, max14577_muic_detect_accessory()
651 ret = max14577_muic_adc_handler(info); max14577_muic_detect_accessory()
653 dev_err(info->dev, "Cannot detect accessory\n"); max14577_muic_detect_accessory()
654 mutex_unlock(&info->mutex); max14577_muic_detect_accessory()
659 chg_type = max14577_muic_get_cable_type(info, MAX14577_CABLE_GROUP_CHG, max14577_muic_detect_accessory()
662 ret = max14577_muic_chg_handler(info); max14577_muic_detect_accessory()
664 dev_err(info->dev, "Cannot detect charger accessory\n"); max14577_muic_detect_accessory()
665 mutex_unlock(&info->mutex); max14577_muic_detect_accessory()
670 mutex_unlock(&info->mutex); max14577_muic_detect_accessory()
677 struct max14577_muic_info *info = container_of(to_delayed_work(work), max14577_muic_detect_cable_wq() local
680 max14577_muic_detect_accessory(info); max14577_muic_detect_cable_wq()
686 struct max14577_muic_info *info; max14577_muic_probe() local
692 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); max14577_muic_probe()
693 if (!info) max14577_muic_probe()
696 info->dev = &pdev->dev; max14577_muic_probe()
697 info->max14577 = max14577; max14577_muic_probe()
699 platform_set_drvdata(pdev, info); max14577_muic_probe()
700 mutex_init(&info->mutex); max14577_muic_probe()
702 INIT_WORK(&info->irq_work, max14577_muic_irq_work); max14577_muic_probe()
706 info->muic_irqs = max77836_muic_irqs; max14577_muic_probe()
707 info->muic_irqs_num = ARRAY_SIZE(max77836_muic_irqs); max14577_muic_probe()
711 info->muic_irqs = max14577_muic_irqs; max14577_muic_probe()
712 info->muic_irqs_num = ARRAY_SIZE(max14577_muic_irqs); max14577_muic_probe()
716 for (i = 0; i < info->muic_irqs_num; i++) { max14577_muic_probe()
717 struct max14577_muic_irq *muic_irq = &info->muic_irqs[i]; max14577_muic_probe()
728 muic_irq->name, info); max14577_muic_probe()
738 info->edev = devm_extcon_dev_allocate(&pdev->dev, max14577_muic_probe()
740 if (IS_ERR(info->edev)) { max14577_muic_probe()
745 info->edev->name = dev_name(&pdev->dev); max14577_muic_probe()
747 ret = devm_extcon_dev_register(&pdev->dev, info->edev); max14577_muic_probe()
754 info->path_usb = CTRL1_SW_USB; max14577_muic_probe()
755 info->path_uart = CTRL1_SW_UART; max14577_muic_probe()
759 max14577_muic_set_path(info, info->path_uart, true); max14577_muic_probe()
762 ret = max14577_read_reg(info->max14577->regmap, max14577_muic_probe()
768 dev_info(info->dev, "device ID : 0x%x\n", id); max14577_muic_probe()
771 max14577_muic_set_debounce_time(info, ADC_DEBOUNCE_TIME_25MS); max14577_muic_probe()
781 INIT_DELAYED_WORK(&info->wq_detcable, max14577_muic_detect_cable_wq); max14577_muic_probe()
782 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, max14577_muic_probe()
790 struct max14577_muic_info *info = platform_get_drvdata(pdev); max14577_muic_remove() local
792 cancel_work_sync(&info->irq_work); max14577_muic_remove()
H A Dextcon-max8997.c180 * @info: the instance including private data of max8997 MUIC
183 static int max8997_muic_set_debounce_time(struct max8997_muic_info *info, max8997_muic_set_debounce_time() argument
193 ret = max8997_update_reg(info->muic, max8997_muic_set_debounce_time()
198 dev_err(info->dev, "failed to set ADC debounce time\n"); max8997_muic_set_debounce_time()
203 dev_err(info->dev, "invalid ADC debounce time\n"); max8997_muic_set_debounce_time()
212 * @info: the instance including private data of max8997 MUIC
220 static int max8997_muic_set_path(struct max8997_muic_info *info, max8997_muic_set_path() argument
231 ret = max8997_update_reg(info->muic, max8997_muic_set_path()
234 dev_err(info->dev, "failed to update MUIC register\n"); max8997_muic_set_path()
243 ret = max8997_update_reg(info->muic, max8997_muic_set_path()
247 dev_err(info->dev, "failed to update MUIC register\n"); max8997_muic_set_path()
251 dev_info(info->dev, max8997_muic_set_path()
260 * @info: the instance including private data of max8997 MUIC
269 static int max8997_muic_get_cable_type(struct max8997_muic_info *info, max8997_muic_get_cable_type() argument
282 adc = info->status[0] & STATUS1_ADC_MASK; max8997_muic_get_cable_type()
287 * (info->prev_cable_type) for handling cable when cable is max8997_muic_get_cable_type()
293 cable_type = info->prev_cable_type; max8997_muic_get_cable_type()
294 info->prev_cable_type = MAX8997_MUIC_ADC_OPEN; max8997_muic_get_cable_type()
298 cable_type = info->prev_cable_type = adc; max8997_muic_get_cable_type()
306 chg_type = info->status[1] & STATUS2_CHGTYP_MASK; max8997_muic_get_cable_type()
312 cable_type = info->prev_chg_type; max8997_muic_get_cable_type()
313 info->prev_chg_type = MAX8997_CHARGER_TYPE_NONE; max8997_muic_get_cable_type()
319 * type(info->prev_chg_type) for handling cable when max8997_muic_get_cable_type()
322 cable_type = info->prev_chg_type = chg_type; max8997_muic_get_cable_type()
327 dev_err(info->dev, "Unknown cable group (%d)\n", group); max8997_muic_get_cable_type()
335 static int max8997_muic_handle_usb(struct max8997_muic_info *info, max8997_muic_handle_usb() argument
341 ret = max8997_muic_set_path(info, info->path_usb, attached); max8997_muic_handle_usb()
343 dev_err(info->dev, "failed to update muic register\n"); max8997_muic_handle_usb()
350 extcon_set_cable_state(info->edev, "USB-Host", attached); max8997_muic_handle_usb()
353 extcon_set_cable_state(info->edev, "USB", attached); max8997_muic_handle_usb()
356 dev_err(info->dev, "failed to detect %s usb cable\n", max8997_muic_handle_usb()
364 static int max8997_muic_handle_dock(struct max8997_muic_info *info, max8997_muic_handle_dock() argument
369 ret = max8997_muic_set_path(info, CONTROL1_SW_AUDIO, attached); max8997_muic_handle_dock()
371 dev_err(info->dev, "failed to update muic register\n"); max8997_muic_handle_dock()
377 extcon_set_cable_state(info->edev, "Dock-desk", attached); max8997_muic_handle_dock()
380 extcon_set_cable_state(info->edev, "Dock-card", attached); max8997_muic_handle_dock()
383 dev_err(info->dev, "failed to detect %s dock device\n", max8997_muic_handle_dock()
391 static int max8997_muic_handle_jig_uart(struct max8997_muic_info *info, max8997_muic_handle_jig_uart() argument
397 ret = max8997_muic_set_path(info, info->path_uart, attached); max8997_muic_handle_jig_uart()
399 dev_err(info->dev, "failed to update muic register\n"); max8997_muic_handle_jig_uart()
403 extcon_set_cable_state(info->edev, "JIG", attached); max8997_muic_handle_jig_uart()
408 static int max8997_muic_adc_handler(struct max8997_muic_info *info) max8997_muic_adc_handler() argument
415 cable_type = max8997_muic_get_cable_type(info, max8997_muic_adc_handler()
420 ret = max8997_muic_handle_usb(info, MAX8997_USB_HOST, attached); max8997_muic_adc_handler()
425 extcon_set_cable_state(info->edev, "MHL", attached); max8997_muic_adc_handler()
429 ret = max8997_muic_handle_usb(info, max8997_muic_adc_handler()
436 ret = max8997_muic_handle_dock(info, cable_type, attached); max8997_muic_adc_handler()
441 ret = max8997_muic_handle_jig_uart(info, attached); max8997_muic_adc_handler()
472 dev_info(info->dev, max8997_muic_adc_handler()
477 dev_err(info->dev, max8997_muic_adc_handler()
486 static int max8997_muic_chg_handler(struct max8997_muic_info *info) max8997_muic_chg_handler() argument
492 chg_type = max8997_muic_get_cable_type(info, max8997_muic_chg_handler()
499 adc = info->status[0] & STATUS1_ADC_MASK; max8997_muic_chg_handler()
503 max8997_muic_handle_usb(info, max8997_muic_chg_handler()
508 extcon_set_cable_state(info->edev, max8997_muic_chg_handler()
512 extcon_set_cable_state(info->edev, "TA", attached); max8997_muic_chg_handler()
515 extcon_set_cable_state(info->edev, "Slow-charger", attached); max8997_muic_chg_handler()
518 extcon_set_cable_state(info->edev, "Fast-charger", attached); max8997_muic_chg_handler()
521 dev_err(info->dev, max8997_muic_chg_handler()
532 struct max8997_muic_info *info = container_of(work, max8997_muic_irq_work() local
537 if (!info->edev) max8997_muic_irq_work()
540 mutex_lock(&info->mutex); max8997_muic_irq_work()
543 if (info->irq == muic_irqs[i].virq) max8997_muic_irq_work()
546 ret = max8997_bulk_read(info->muic, MAX8997_MUIC_REG_STATUS1, max8997_muic_irq_work()
547 2, info->status); max8997_muic_irq_work()
549 dev_err(info->dev, "failed to read muic register\n"); max8997_muic_irq_work()
550 mutex_unlock(&info->mutex); max8997_muic_irq_work()
559 ret = max8997_muic_adc_handler(info); max8997_muic_irq_work()
567 ret = max8997_muic_chg_handler(info); max8997_muic_irq_work()
572 dev_info(info->dev, "misc interrupt: irq %d occurred\n", max8997_muic_irq_work()
574 mutex_unlock(&info->mutex); max8997_muic_irq_work()
579 dev_err(info->dev, "failed to handle MUIC interrupt\n"); max8997_muic_irq_work()
581 mutex_unlock(&info->mutex); max8997_muic_irq_work()
586 struct max8997_muic_info *info = data; max8997_muic_irq_handler() local
588 dev_dbg(info->dev, "irq:%d\n", irq); max8997_muic_irq_handler()
589 info->irq = irq; max8997_muic_irq_handler()
591 schedule_work(&info->irq_work); max8997_muic_irq_handler()
596 static int max8997_muic_detect_dev(struct max8997_muic_info *info) max8997_muic_detect_dev() argument
603 mutex_lock(&info->mutex); max8997_muic_detect_dev()
606 ret = max8997_bulk_read(info->muic, max8997_muic_detect_dev()
607 MAX8997_MUIC_REG_STATUS1, 2, info->status); max8997_muic_detect_dev()
609 dev_err(info->dev, "failed to read MUIC register\n"); max8997_muic_detect_dev()
610 mutex_unlock(&info->mutex); max8997_muic_detect_dev()
614 adc = max8997_muic_get_cable_type(info, MAX8997_CABLE_GROUP_ADC, max8997_muic_detect_dev()
617 ret = max8997_muic_adc_handler(info); max8997_muic_detect_dev()
619 dev_err(info->dev, "Cannot detect ADC cable\n"); max8997_muic_detect_dev()
620 mutex_unlock(&info->mutex); max8997_muic_detect_dev()
625 chg_type = max8997_muic_get_cable_type(info, MAX8997_CABLE_GROUP_CHG, max8997_muic_detect_dev()
628 ret = max8997_muic_chg_handler(info); max8997_muic_detect_dev()
630 dev_err(info->dev, "Cannot detect charger cable\n"); max8997_muic_detect_dev()
631 mutex_unlock(&info->mutex); max8997_muic_detect_dev()
636 mutex_unlock(&info->mutex); max8997_muic_detect_dev()
643 struct max8997_muic_info *info = container_of(to_delayed_work(work), max8997_muic_detect_cable_wq() local
647 ret = max8997_muic_detect_dev(info); max8997_muic_detect_cable_wq()
649 dev_err(info->dev, "failed to detect cable type\n"); max8997_muic_detect_cable_wq()
656 struct max8997_muic_info *info; max8997_muic_probe() local
660 info = devm_kzalloc(&pdev->dev, sizeof(struct max8997_muic_info), max8997_muic_probe()
662 if (!info) max8997_muic_probe()
665 info->dev = &pdev->dev; max8997_muic_probe()
666 info->muic = max8997->muic; max8997_muic_probe()
668 platform_set_drvdata(pdev, info); max8997_muic_probe()
669 mutex_init(&info->mutex); max8997_muic_probe()
671 INIT_WORK(&info->irq_work, max8997_muic_irq_work); max8997_muic_probe()
687 muic_irq->name, info); max8997_muic_probe()
697 info->edev = devm_extcon_dev_allocate(&pdev->dev, max8997_extcon_cable); max8997_muic_probe()
698 if (IS_ERR(info->edev)) { max8997_muic_probe()
703 info->edev->name = DEV_NAME; max8997_muic_probe()
705 ret = devm_extcon_dev_register(&pdev->dev, info->edev); max8997_muic_probe()
717 max8997_write_reg(info->muic, max8997_muic_probe()
727 info->path_uart = muic_pdata->path_uart; max8997_muic_probe()
729 info->path_uart = CONTROL1_SW_UART; max8997_muic_probe()
732 info->path_usb = muic_pdata->path_usb; max8997_muic_probe()
734 info->path_usb = CONTROL1_SW_USB; max8997_muic_probe()
746 info->path_uart = CONTROL1_SW_UART; max8997_muic_probe()
747 info->path_usb = CONTROL1_SW_USB; max8997_muic_probe()
752 max8997_muic_set_path(info, info->path_uart, true); max8997_muic_probe()
755 max8997_muic_set_debounce_time(info, ADC_DEBOUNCE_TIME_25MS); max8997_muic_probe()
765 INIT_DELAYED_WORK(&info->wq_detcable, max8997_muic_detect_cable_wq); max8997_muic_probe()
766 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, max8997_muic_probe()
773 free_irq(muic_irqs[i].virq, info); max8997_muic_probe()
779 struct max8997_muic_info *info = platform_get_drvdata(pdev); max8997_muic_remove() local
783 free_irq(muic_irqs[i].virq, info); max8997_muic_remove()
784 cancel_work_sync(&info->irq_work); max8997_muic_remove()
H A Dextcon-max77843.c218 static int max77843_muic_set_path(struct max77843_muic_info *info, max77843_muic_set_path() argument
221 struct max77843 *max77843 = info->max77843; max77843_muic_set_path()
234 dev_err(info->dev, "Cannot switch MUIC port\n"); max77843_muic_set_path()
248 dev_err(info->dev, "Cannot update lowpower mode\n"); max77843_muic_set_path()
252 dev_dbg(info->dev, max77843_muic_set_path()
259 static int max77843_muic_get_cable_type(struct max77843_muic_info *info, max77843_muic_get_cable_type() argument
264 adc = info->status[MAX77843_MUIC_STATUS1] & max77843_muic_get_cable_type()
272 cable_type = info->prev_cable_type; max77843_muic_get_cable_type()
273 info->prev_cable_type = MAX77843_MUIC_ADC_OPEN; max77843_muic_get_cable_type()
276 cable_type = info->prev_cable_type = adc; max77843_muic_get_cable_type()
280 chg_type = info->status[MAX77843_MUIC_STATUS2] & max77843_muic_get_cable_type()
290 cable_type = info->prev_chg_type; max77843_muic_get_cable_type()
291 info->prev_chg_type = MAX77843_MUIC_CHG_NONE; max77843_muic_get_cable_type()
298 info->prev_chg_type = MAX77843_MUIC_CHG_GND; max77843_muic_get_cable_type()
305 cable_type = info->prev_chg_type; max77843_muic_get_cable_type()
306 info->prev_chg_type = MAX77843_MUIC_CHG_NONE; max77843_muic_get_cable_type()
309 cable_type = info->prev_chg_type = chg_type; max77843_muic_get_cable_type()
315 cable_type = info->prev_gnd_type; max77843_muic_get_cable_type()
316 info->prev_gnd_type = MAX77843_MUIC_ADC_OPEN; max77843_muic_get_cable_type()
326 gnd_type = (info->status[MAX77843_MUIC_STATUS1] & max77843_muic_get_cable_type()
330 gnd_type |= (info->status[MAX77843_MUIC_STATUS2] & max77843_muic_get_cable_type()
336 cable_type = info->prev_gnd_type = gnd_type; max77843_muic_get_cable_type()
340 dev_err(info->dev, "Unknown cable group (%d)\n", group); max77843_muic_get_cable_type()
348 static int max77843_muic_adc_gnd_handler(struct max77843_muic_info *info) max77843_muic_adc_gnd_handler() argument
353 gnd_cable_type = max77843_muic_get_cable_type(info, max77843_muic_adc_gnd_handler()
355 dev_dbg(info->dev, "external connector is %s (gnd:0x%02x)\n", max77843_muic_adc_gnd_handler()
361 ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); max77843_muic_adc_gnd_handler()
365 extcon_set_cable_state(info->edev, "USB-HOST", attached); max77843_muic_adc_gnd_handler()
369 ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_adc_gnd_handler()
373 extcon_set_cable_state(info->edev, "MHL", attached); max77843_muic_adc_gnd_handler()
376 dev_err(info->dev, "failed to detect %s accessory(gnd:0x%x)\n", max77843_muic_adc_gnd_handler()
384 static int max77843_muic_jig_handler(struct max77843_muic_info *info, max77843_muic_jig_handler() argument
389 dev_dbg(info->dev, "external connector is %s (adc:0x%02x)\n", max77843_muic_jig_handler()
394 ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); max77843_muic_jig_handler()
397 extcon_set_cable_state(info->edev, "JIG-USB-OFF", attached); max77843_muic_jig_handler()
400 ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); max77843_muic_jig_handler()
403 extcon_set_cable_state(info->edev, "JIG-USB-ON", attached); max77843_muic_jig_handler()
406 ret = max77843_muic_set_path(info, CONTROL1_SW_UART, attached); max77843_muic_jig_handler()
409 extcon_set_cable_state(info->edev, "JIG-UART-OFF", attached); max77843_muic_jig_handler()
412 ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_jig_handler()
421 static int max77843_muic_adc_handler(struct max77843_muic_info *info) max77843_muic_adc_handler() argument
426 cable_type = max77843_muic_get_cable_type(info, max77843_muic_adc_handler()
429 dev_dbg(info->dev, max77843_muic_adc_handler()
432 info->prev_cable_type); max77843_muic_adc_handler()
436 ret = max77843_muic_adc_gnd_handler(info); max77843_muic_adc_handler()
443 ret = max77843_muic_jig_handler(info, cable_type, attached); max77843_muic_adc_handler()
475 dev_err(info->dev, max77843_muic_adc_handler()
480 dev_err(info->dev, max77843_muic_adc_handler()
489 static int max77843_muic_chg_handler(struct max77843_muic_info *info) max77843_muic_chg_handler() argument
494 chg_type = max77843_muic_get_cable_type(info, max77843_muic_chg_handler()
497 dev_dbg(info->dev, max77843_muic_chg_handler()
500 chg_type, info->prev_chg_type); max77843_muic_chg_handler()
504 ret = max77843_muic_set_path(info, CONTROL1_SW_USB, attached); max77843_muic_chg_handler()
508 extcon_set_cable_state(info->edev, "USB", attached); max77843_muic_chg_handler()
511 ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_chg_handler()
515 extcon_set_cable_state(info->edev, max77843_muic_chg_handler()
519 ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_chg_handler()
523 extcon_set_cable_state(info->edev, "TA", attached); max77843_muic_chg_handler()
526 ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_chg_handler()
530 extcon_set_cable_state(info->edev, "SLOW-CHAREGER", attached); max77843_muic_chg_handler()
533 ret = max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_chg_handler()
537 extcon_set_cable_state(info->edev, "FAST-CHARGER", attached); max77843_muic_chg_handler()
540 gnd_type = max77843_muic_get_cable_type(info, max77843_muic_chg_handler()
545 extcon_set_cable_state(info->edev, "MHL-TA", true); max77843_muic_chg_handler()
547 extcon_set_cable_state(info->edev, "MHL-TA", false); max77843_muic_chg_handler()
552 dev_err(info->dev, max77843_muic_chg_handler()
556 max77843_muic_set_path(info, CONTROL1_SW_OPEN, attached); max77843_muic_chg_handler()
565 struct max77843_muic_info *info = container_of(work, max77843_muic_irq_work() local
567 struct max77843 *max77843 = info->max77843; max77843_muic_irq_work()
570 mutex_lock(&info->mutex); max77843_muic_irq_work()
573 MAX77843_MUIC_REG_STATUS1, info->status, max77843_muic_irq_work()
576 dev_err(info->dev, "Cannot read STATUS registers\n"); max77843_muic_irq_work()
577 mutex_unlock(&info->mutex); max77843_muic_irq_work()
581 if (info->irq_adc) { max77843_muic_irq_work()
582 ret = max77843_muic_adc_handler(info); max77843_muic_irq_work()
584 dev_err(info->dev, "Unknown cable type\n"); max77843_muic_irq_work()
585 info->irq_adc = false; max77843_muic_irq_work()
588 if (info->irq_chg) { max77843_muic_irq_work()
589 ret = max77843_muic_chg_handler(info); max77843_muic_irq_work()
591 dev_err(info->dev, "Unknown charger type\n"); max77843_muic_irq_work()
592 info->irq_chg = false; max77843_muic_irq_work()
595 mutex_unlock(&info->mutex); max77843_muic_irq_work()
600 struct max77843_muic_info *info = data; max77843_muic_irq_handler() local
611 info->irq_adc = true; max77843_muic_irq_handler()
618 info->irq_chg = true; max77843_muic_irq_handler()
630 dev_err(info->dev, "Cannot recognize IRQ(%d)\n", irq_type); max77843_muic_irq_handler()
634 schedule_work(&info->irq_work); max77843_muic_irq_handler()
641 struct max77843_muic_info *info = container_of(to_delayed_work(work), max77843_muic_detect_cable_wq() local
643 struct max77843 *max77843 = info->max77843; max77843_muic_detect_cable_wq()
647 mutex_lock(&info->mutex); max77843_muic_detect_cable_wq()
650 MAX77843_MUIC_REG_STATUS1, info->status, max77843_muic_detect_cable_wq()
653 dev_err(info->dev, "Cannot read STATUS registers\n"); max77843_muic_detect_cable_wq()
657 adc = max77843_muic_get_cable_type(info, max77843_muic_detect_cable_wq()
660 ret = max77843_muic_adc_handler(info); max77843_muic_detect_cable_wq()
662 dev_err(info->dev, "Cannot detect accessory\n"); max77843_muic_detect_cable_wq()
667 chg_type = max77843_muic_get_cable_type(info, max77843_muic_detect_cable_wq()
670 ret = max77843_muic_chg_handler(info); max77843_muic_detect_cable_wq()
672 dev_err(info->dev, "Cannot detect charger accessory\n"); max77843_muic_detect_cable_wq()
678 mutex_unlock(&info->mutex); max77843_muic_detect_cable_wq()
681 static int max77843_muic_set_debounce_time(struct max77843_muic_info *info, max77843_muic_set_debounce_time() argument
684 struct max77843 *max77843 = info->max77843; max77843_muic_set_debounce_time()
697 dev_err(info->dev, "Cannot write MUIC regmap\n"); max77843_muic_set_debounce_time()
702 dev_err(info->dev, "Invalid ADC debounce time\n"); max77843_muic_set_debounce_time()
749 struct max77843_muic_info *info; max77843_muic_probe() local
753 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); max77843_muic_probe()
754 if (!info) max77843_muic_probe()
757 info->dev = &pdev->dev; max77843_muic_probe()
758 info->max77843 = max77843; max77843_muic_probe()
760 platform_set_drvdata(pdev, info); max77843_muic_probe()
761 mutex_init(&info->mutex); max77843_muic_probe()
778 info->edev = devm_extcon_dev_allocate(&pdev->dev, max77843_muic_probe()
780 if (IS_ERR(info->edev)) { max77843_muic_probe()
786 ret = devm_extcon_dev_register(&pdev->dev, info->edev); max77843_muic_probe()
793 max77843_muic_set_debounce_time(info, MAX77843_DEBOUNCE_TIME_25MS); max77843_muic_probe()
796 max77843_muic_set_path(info, CONTROL1_SW_UART, true); max77843_muic_probe()
804 dev_info(info->dev, "MUIC device ID : 0x%x\n", id); max77843_muic_probe()
807 INIT_WORK(&info->irq_work, max77843_muic_irq_work); max77843_muic_probe()
823 muic_irq->name, info); max77843_muic_probe()
833 INIT_DELAYED_WORK(&info->wq_detcable, max77843_muic_detect_cable_wq); max77843_muic_probe()
835 &info->wq_detcable, msecs_to_jiffies(DELAY_MS_DEFAULT)); max77843_muic_probe()
848 struct max77843_muic_info *info = platform_get_drvdata(pdev); max77843_muic_remove() local
849 struct max77843 *max77843 = info->max77843; max77843_muic_remove()
851 cancel_work_sync(&info->irq_work); max77843_muic_remove()
H A Dextcon-max77693.c245 * @info: the instance including private data of max77693 MUIC
248 static int max77693_muic_set_debounce_time(struct max77693_muic_info *info, max77693_muic_set_debounce_time() argument
263 ret = regmap_write(info->max77693->regmap_muic, max77693_muic_set_debounce_time()
267 dev_err(info->dev, "failed to set ADC debounce time\n"); max77693_muic_set_debounce_time()
272 dev_err(info->dev, "invalid ADC debounce time\n"); max77693_muic_set_debounce_time()
281 * @info: the instance including private data of max77693 MUIC
289 static int max77693_muic_set_path(struct max77693_muic_info *info, max77693_muic_set_path() argument
300 ret = regmap_update_bits(info->max77693->regmap_muic, max77693_muic_set_path()
303 dev_err(info->dev, "failed to update MUIC register\n"); max77693_muic_set_path()
312 ret = regmap_update_bits(info->max77693->regmap_muic, max77693_muic_set_path()
316 dev_err(info->dev, "failed to update MUIC register\n"); max77693_muic_set_path()
320 dev_info(info->dev, max77693_muic_set_path()
329 * @info: the instance including private data of max77693 MUIC
340 static int max77693_muic_get_cable_type(struct max77693_muic_info *info, max77693_muic_get_cable_type() argument
356 adc = info->status[0] & STATUS1_ADC_MASK; max77693_muic_get_cable_type()
361 * (info->prev_cable_type) for handling cable when cable is max77693_muic_get_cable_type()
367 cable_type = info->prev_cable_type; max77693_muic_get_cable_type()
368 info->prev_cable_type = MAX77693_MUIC_ADC_OPEN; max77693_muic_get_cable_type()
372 cable_type = info->prev_cable_type = adc; max77693_muic_get_cable_type()
380 adc = info->status[0] & STATUS1_ADC_MASK; max77693_muic_get_cable_type()
385 * (info->prev_cable_type/_gnd) for handling cable when cable max77693_muic_get_cable_type()
391 cable_type = info->prev_cable_type_gnd; max77693_muic_get_cable_type()
392 info->prev_cable_type_gnd = MAX77693_MUIC_ADC_OPEN; max77693_muic_get_cable_type()
396 adclow = info->status[0] & STATUS1_ADCLOW_MASK; max77693_muic_get_cable_type()
398 adc1k = info->status[0] & STATUS1_ADC1K_MASK; max77693_muic_get_cable_type()
401 vbvolt = info->status[1] & STATUS2_VBVOLT_MASK; max77693_muic_get_cable_type()
417 info->prev_cable_type = adc; max77693_muic_get_cable_type()
418 info->prev_cable_type_gnd = cable_type; max77693_muic_get_cable_type()
427 chg_type = info->status[1] & STATUS2_CHGTYP_MASK; max77693_muic_get_cable_type()
433 cable_type = info->prev_chg_type; max77693_muic_get_cable_type()
434 info->prev_chg_type = MAX77693_CHARGER_TYPE_NONE; max77693_muic_get_cable_type()
440 * type(info->prev_chg_type) for handling cable when max77693_muic_get_cable_type()
443 cable_type = info->prev_chg_type = chg_type; max77693_muic_get_cable_type()
452 adc = info->status[0] & STATUS1_ADC_MASK; max77693_muic_get_cable_type()
454 chg_type = info->status[1] & STATUS2_CHGTYP_MASK; max77693_muic_get_cable_type()
467 vbvolt = info->status[1] & STATUS2_VBVOLT_MASK; max77693_muic_get_cable_type()
473 dev_err(info->dev, "Unknown cable group (%d)\n", group); max77693_muic_get_cable_type()
481 static int max77693_muic_dock_handler(struct max77693_muic_info *info, max77693_muic_dock_handler() argument
489 dev_info(info->dev, max77693_muic_dock_handler()
501 vbvolt = max77693_muic_get_cable_type(info, max77693_muic_dock_handler()
504 dev_warn(info->dev, max77693_muic_dock_handler()
528 ret = max77693_muic_set_path(info, info->path_usb, attached); max77693_muic_dock_handler()
532 extcon_set_cable_state(info->edev, "Dock-Smart", attached); max77693_muic_dock_handler()
533 extcon_set_cable_state(info->edev, "MHL", attached); max77693_muic_dock_handler()
541 extcon_set_cable_state(info->edev, "USB", false); max77693_muic_dock_handler()
544 dev_err(info->dev, "failed to detect %s dock device\n", max77693_muic_dock_handler()
550 ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached); max77693_muic_dock_handler()
553 extcon_set_cable_state(info->edev, dock_name, attached); max77693_muic_dock_handler()
559 static int max77693_muic_dock_button_handler(struct max77693_muic_info *info, max77693_muic_dock_button_handler() argument
562 struct input_dev *dock = info->dock; max77693_muic_dock_button_handler()
590 dev_err(info->dev, max77693_muic_dock_button_handler()
602 static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info) max77693_muic_adc_ground_handler() argument
608 cable_type_gnd = max77693_muic_get_cable_type(info, max77693_muic_adc_ground_handler()
615 ret = max77693_muic_set_path(info, CONTROL1_SW_USB, attached); max77693_muic_adc_ground_handler()
618 extcon_set_cable_state(info->edev, "USB-Host", attached); max77693_muic_adc_ground_handler()
622 ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached); max77693_muic_adc_ground_handler()
625 extcon_set_cable_state(info->edev, max77693_muic_adc_ground_handler()
631 extcon_set_cable_state(info->edev, "MHL", attached); max77693_muic_adc_ground_handler()
634 dev_err(info->dev, "failed to detect %s cable of gnd type\n", max77693_muic_adc_ground_handler()
642 static int max77693_muic_jig_handler(struct max77693_muic_info *info, max77693_muic_jig_handler() argument
649 dev_info(info->dev, max77693_muic_jig_handler()
675 dev_err(info->dev, "failed to detect %s jig cable\n", max77693_muic_jig_handler()
680 ret = max77693_muic_set_path(info, path, attached); max77693_muic_jig_handler()
684 extcon_set_cable_state(info->edev, cable_name, attached); max77693_muic_jig_handler()
689 static int max77693_muic_adc_handler(struct max77693_muic_info *info) max77693_muic_adc_handler() argument
697 cable_type = max77693_muic_get_cable_type(info, max77693_muic_adc_handler()
700 dev_info(info->dev, max77693_muic_adc_handler()
703 info->prev_cable_type); max77693_muic_adc_handler()
708 max77693_muic_adc_ground_handler(info); max77693_muic_adc_handler()
715 ret = max77693_muic_jig_handler(info, cable_type, attached); max77693_muic_adc_handler()
731 ret = max77693_muic_dock_handler(info, cable_type, attached); max77693_muic_adc_handler()
751 button_type = info->prev_button_type = cable_type; max77693_muic_adc_handler()
753 button_type = info->prev_button_type; max77693_muic_adc_handler()
755 ret = max77693_muic_dock_button_handler(info, button_type, max77693_muic_adc_handler()
783 dev_info(info->dev, max77693_muic_adc_handler()
788 dev_err(info->dev, max77693_muic_adc_handler()
797 static int max77693_muic_chg_handler(struct max77693_muic_info *info) max77693_muic_chg_handler() argument
806 chg_type = max77693_muic_get_cable_type(info, max77693_muic_chg_handler()
809 dev_info(info->dev, max77693_muic_chg_handler()
812 chg_type, info->prev_chg_type); max77693_muic_chg_handler()
819 cable_type_gnd = max77693_muic_get_cable_type(info, max77693_muic_chg_handler()
838 extcon_set_cable_state(info->edev, "MHL-TA", attached); max77693_muic_chg_handler()
840 extcon_set_cable_state(info->edev, max77693_muic_chg_handler()
846 cable_type = max77693_muic_get_cable_type(info, max77693_muic_chg_handler()
864 extcon_set_cable_state(info->edev, "USB", attached); max77693_muic_chg_handler()
867 extcon_set_cable_state(info->edev, "Dock-Audio", max77693_muic_chg_handler()
891 ret = max77693_muic_set_path(info, info->path_usb, max77693_muic_chg_handler()
896 extcon_set_cable_state(info->edev, "Dock-Smart", max77693_muic_chg_handler()
898 extcon_set_cable_state(info->edev, "MHL", attached); max77693_muic_chg_handler()
927 ret = max77693_muic_set_path(info, info->path_usb, max77693_muic_chg_handler()
932 extcon_set_cable_state(info->edev, "USB", attached); max77693_muic_chg_handler()
936 extcon_set_cable_state(info->edev, "TA", attached); max77693_muic_chg_handler()
941 extcon_set_cable_state(info->edev, max77693_muic_chg_handler()
945 extcon_set_cable_state(info->edev, "Slow-charger", attached); max77693_muic_chg_handler()
948 extcon_set_cable_state(info->edev, "Fast-charger", attached); max77693_muic_chg_handler()
953 dev_err(info->dev, max77693_muic_chg_handler()
964 struct max77693_muic_info *info = container_of(work, max77693_muic_irq_work() local
969 if (!info->edev) max77693_muic_irq_work()
972 mutex_lock(&info->mutex); max77693_muic_irq_work()
975 if (info->irq == muic_irqs[i].virq) max77693_muic_irq_work()
978 ret = regmap_bulk_read(info->max77693->regmap_muic, max77693_muic_irq_work()
979 MAX77693_MUIC_REG_STATUS1, info->status, 2); max77693_muic_irq_work()
981 dev_err(info->dev, "failed to read MUIC register\n"); max77693_muic_irq_work()
982 mutex_unlock(&info->mutex); max77693_muic_irq_work()
993 ret = max77693_muic_adc_handler(info); max77693_muic_irq_work()
1002 ret = max77693_muic_chg_handler(info); max77693_muic_irq_work()
1012 dev_err(info->dev, "muic interrupt: irq %d occurred\n", max77693_muic_irq_work()
1014 mutex_unlock(&info->mutex); max77693_muic_irq_work()
1019 dev_err(info->dev, "failed to handle MUIC interrupt\n"); max77693_muic_irq_work()
1021 mutex_unlock(&info->mutex); max77693_muic_irq_work()
1026 struct max77693_muic_info *info = data; max77693_muic_irq_handler() local
1028 info->irq = irq; max77693_muic_irq_handler()
1029 schedule_work(&info->irq_work); max77693_muic_irq_handler()
1039 static int max77693_muic_detect_accessory(struct max77693_muic_info *info) max77693_muic_detect_accessory() argument
1046 mutex_lock(&info->mutex); max77693_muic_detect_accessory()
1049 ret = regmap_bulk_read(info->max77693->regmap_muic, max77693_muic_detect_accessory()
1050 MAX77693_MUIC_REG_STATUS1, info->status, 2); max77693_muic_detect_accessory()
1052 dev_err(info->dev, "failed to read MUIC register\n"); max77693_muic_detect_accessory()
1053 mutex_unlock(&info->mutex); max77693_muic_detect_accessory()
1057 adc = max77693_muic_get_cable_type(info, MAX77693_CABLE_GROUP_ADC, max77693_muic_detect_accessory()
1060 ret = max77693_muic_adc_handler(info); max77693_muic_detect_accessory()
1062 dev_err(info->dev, "Cannot detect accessory\n"); max77693_muic_detect_accessory()
1063 mutex_unlock(&info->mutex); max77693_muic_detect_accessory()
1068 chg_type = max77693_muic_get_cable_type(info, MAX77693_CABLE_GROUP_CHG, max77693_muic_detect_accessory()
1071 ret = max77693_muic_chg_handler(info); max77693_muic_detect_accessory()
1073 dev_err(info->dev, "Cannot detect charger accessory\n"); max77693_muic_detect_accessory()
1074 mutex_unlock(&info->mutex); max77693_muic_detect_accessory()
1079 mutex_unlock(&info->mutex); max77693_muic_detect_accessory()
1086 struct max77693_muic_info *info = container_of(to_delayed_work(work), max77693_muic_detect_cable_wq() local
1089 max77693_muic_detect_accessory(info); max77693_muic_detect_cable_wq()
1096 struct max77693_muic_info *info; max77693_muic_probe() local
1104 info = devm_kzalloc(&pdev->dev, sizeof(struct max77693_muic_info), max77693_muic_probe()
1106 if (!info) max77693_muic_probe()
1109 info->dev = &pdev->dev; max77693_muic_probe()
1110 info->max77693 = max77693; max77693_muic_probe()
1111 if (info->max77693->regmap_muic) { max77693_muic_probe()
1114 info->max77693->regmap_muic = devm_regmap_init_i2c( max77693_muic_probe()
1115 info->max77693->muic, max77693_muic_probe()
1117 if (IS_ERR(info->max77693->regmap_muic)) { max77693_muic_probe()
1118 ret = PTR_ERR(info->max77693->regmap_muic); max77693_muic_probe()
1126 info->dock = devm_input_allocate_device(&pdev->dev); max77693_muic_probe()
1127 if (!info->dock) { max77693_muic_probe()
1131 info->dock->name = "max77693-muic/dock"; max77693_muic_probe()
1132 info->dock->phys = "max77693-muic/extcon"; max77693_muic_probe()
1133 info->dock->dev.parent = &pdev->dev; max77693_muic_probe()
1135 __set_bit(EV_REP, info->dock->evbit); max77693_muic_probe()
1137 input_set_capability(info->dock, EV_KEY, KEY_VOLUMEUP); max77693_muic_probe()
1138 input_set_capability(info->dock, EV_KEY, KEY_VOLUMEDOWN); max77693_muic_probe()
1139 input_set_capability(info->dock, EV_KEY, KEY_PLAYPAUSE); max77693_muic_probe()
1140 input_set_capability(info->dock, EV_KEY, KEY_PREVIOUSSONG); max77693_muic_probe()
1141 input_set_capability(info->dock, EV_KEY, KEY_NEXTSONG); max77693_muic_probe()
1143 ret = input_register_device(info->dock); max77693_muic_probe()
1150 platform_set_drvdata(pdev, info); max77693_muic_probe()
1151 mutex_init(&info->mutex); max77693_muic_probe()
1153 INIT_WORK(&info->irq_work, max77693_muic_irq_work); max77693_muic_probe()
1169 muic_irq->name, info); max77693_muic_probe()
1179 info->edev = devm_extcon_dev_allocate(&pdev->dev, max77693_muic_probe()
1181 if (IS_ERR(info->edev)) { max77693_muic_probe()
1185 info->edev->name = DEV_NAME; max77693_muic_probe()
1187 ret = devm_extcon_dev_register(&pdev->dev, info->edev); max77693_muic_probe()
1206 regmap_write(info->max77693->regmap_muic, max77693_muic_probe()
1223 info->max77693->irq_masks_cur[irq_src] max77693_muic_probe()
1236 info->path_uart = muic_pdata->path_uart; max77693_muic_probe()
1238 info->path_uart = CONTROL1_SW_UART; max77693_muic_probe()
1241 info->path_usb = muic_pdata->path_usb; max77693_muic_probe()
1243 info->path_usb = CONTROL1_SW_USB; max77693_muic_probe()
1255 info->path_usb = CONTROL1_SW_USB; max77693_muic_probe()
1256 info->path_uart = CONTROL1_SW_UART; max77693_muic_probe()
1261 max77693_muic_set_path(info, info->path_uart, true); max77693_muic_probe()
1264 ret = regmap_read(info->max77693->regmap_muic, max77693_muic_probe()
1270 dev_info(info->dev, "device ID : 0x%x\n", id); max77693_muic_probe()
1273 max77693_muic_set_debounce_time(info, ADC_DEBOUNCE_TIME_25MS); max77693_muic_probe()
1283 INIT_DELAYED_WORK(&info->wq_detcable, max77693_muic_detect_cable_wq); max77693_muic_probe()
1284 queue_delayed_work(system_power_efficient_wq, &info->wq_detcable, max77693_muic_probe()
1292 struct max77693_muic_info *info = platform_get_drvdata(pdev); max77693_muic_remove() local
1294 cancel_work_sync(&info->irq_work); max77693_muic_remove()
1295 input_unregister_device(info->dock); max77693_muic_remove()
/linux-4.1.27/drivers/regulator/
H A Dab8500-ext.c62 struct ab8500_ext_regulator_info *info = rdev_get_drvdata(rdev); ab8500_ext_regulator_enable() local
65 if (info == NULL) { ab8500_ext_regulator_enable()
66 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); ab8500_ext_regulator_enable()
74 if (info->cfg && info->cfg->hwreq) ab8500_ext_regulator_enable()
75 regval = info->update_val_hp; ab8500_ext_regulator_enable()
77 regval = info->update_val; ab8500_ext_regulator_enable()
79 ret = abx500_mask_and_set_register_interruptible(info->dev, ab8500_ext_regulator_enable()
80 info->update_bank, info->update_reg, ab8500_ext_regulator_enable()
81 info->update_mask, regval); ab8500_ext_regulator_enable()
83 dev_err(rdev_get_dev(info->rdev), ab8500_ext_regulator_enable()
90 info->desc.name, info->update_bank, info->update_reg, ab8500_ext_regulator_enable()
91 info->update_mask, regval); ab8500_ext_regulator_enable()
99 struct ab8500_ext_regulator_info *info = rdev_get_drvdata(rdev); ab8500_ext_regulator_disable() local
102 if (info == NULL) { ab8500_ext_regulator_disable()
103 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); ab8500_ext_regulator_disable()
110 if (info->cfg && info->cfg->hwreq) ab8500_ext_regulator_disable()
111 regval = info->update_val_hw; ab8500_ext_regulator_disable()
115 ret = abx500_mask_and_set_register_interruptible(info->dev, ab8500_ext_regulator_disable()
116 info->update_bank, info->update_reg, ab8500_ext_regulator_disable()
117 info->update_mask, regval); ab8500_ext_regulator_disable()
119 dev_err(rdev_get_dev(info->rdev), ab8500_ext_regulator_disable()
126 info->desc.name, info->update_bank, info->update_reg, ab8500_ext_regulator_disable()
127 info->update_mask, regval); ab8500_ext_regulator_disable()
135 struct ab8500_ext_regulator_info *info = rdev_get_drvdata(rdev); ab8500_ext_regulator_is_enabled() local
138 if (info == NULL) { ab8500_ext_regulator_is_enabled()
139 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); ab8500_ext_regulator_is_enabled()
143 ret = abx500_get_register_interruptible(info->dev, ab8500_ext_regulator_is_enabled()
144 info->update_bank, info->update_reg, &regval); ab8500_ext_regulator_is_enabled()
147 "couldn't read 0x%x register\n", info->update_reg); ab8500_ext_regulator_is_enabled()
153 info->desc.name, info->update_bank, info->update_reg, ab8500_ext_regulator_is_enabled()
154 info->update_mask, regval); ab8500_ext_regulator_is_enabled()
156 if (((regval & info->update_mask) == info->update_val_lp) || ab8500_ext_regulator_is_enabled()
157 ((regval & info->update_mask) == info->update_val_hp)) ab8500_ext_regulator_is_enabled()
167 struct ab8500_ext_regulator_info *info = rdev_get_drvdata(rdev); ab8500_ext_regulator_set_mode() local
170 if (info == NULL) { ab8500_ext_regulator_set_mode()
171 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); ab8500_ext_regulator_set_mode()
177 regval = info->update_val_hp; ab8500_ext_regulator_set_mode()
180 regval = info->update_val_lp; ab8500_ext_regulator_set_mode()
187 /* If regulator is enabled and info->cfg->hwreq is set, the regulator ab8500_ext_regulator_set_mode()
192 !(info->cfg && info->cfg->hwreq)) { ab8500_ext_regulator_set_mode()
193 ret = abx500_mask_and_set_register_interruptible(info->dev, ab8500_ext_regulator_set_mode()
194 info->update_bank, info->update_reg, ab8500_ext_regulator_set_mode()
195 info->update_mask, regval); ab8500_ext_regulator_set_mode()
205 info->desc.name, info->update_bank, info->update_reg, ab8500_ext_regulator_set_mode()
206 info->update_mask, regval); ab8500_ext_regulator_set_mode()
209 info->update_val = regval; ab8500_ext_regulator_set_mode()
216 struct ab8500_ext_regulator_info *info = rdev_get_drvdata(rdev); ab8500_ext_regulator_get_mode() local
219 if (info == NULL) { ab8500_ext_regulator_get_mode()
220 dev_err(rdev_get_dev(rdev), "regulator info null pointer\n"); ab8500_ext_regulator_get_mode()
224 if (info->update_val == info->update_val_hp) ab8500_ext_regulator_get_mode()
226 else if (info->update_val == info->update_val_lp) ab8500_ext_regulator_get_mode()
389 struct ab8500_ext_regulator_info *info; ab8500_ext_regulator_probe() local
392 info = &ab8500_ext_regulator_info[AB8500_EXT_SUPPLY3]; ab8500_ext_regulator_probe()
393 info->update_val = 0x30; ab8500_ext_regulator_probe()
394 info->update_val_hp = 0x30; ab8500_ext_regulator_probe()
395 info->update_val_lp = 0x10; ab8500_ext_regulator_probe()
400 struct ab8500_ext_regulator_info *info = NULL; ab8500_ext_regulator_probe() local
403 info = &ab8500_ext_regulator_info[i]; ab8500_ext_regulator_probe()
404 info->dev = &pdev->dev; ab8500_ext_regulator_probe()
405 info->cfg = (struct ab8500_ext_regulator_cfg *) ab8500_ext_regulator_probe()
409 config.driver_data = info; ab8500_ext_regulator_probe()
416 info->rdev = devm_regulator_register(&pdev->dev, &info->desc, ab8500_ext_regulator_probe()
418 if (IS_ERR(info->rdev)) { ab8500_ext_regulator_probe()
419 err = PTR_ERR(info->rdev); ab8500_ext_regulator_probe()
421 info->desc.name); ab8500_ext_regulator_probe()
425 dev_dbg(rdev_get_dev(info->rdev), ab8500_ext_regulator_probe()
426 "%s-probed\n", info->desc.name); ab8500_ext_regulator_probe()
H A Dmax8649.c64 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); max8649_enable_time() local
69 ret = regmap_read(info->regmap, rdev->desc->vsel_reg, &val); max8649_enable_time()
76 ret = regmap_read(info->regmap, MAX8649_RAMP, &val); max8649_enable_time()
87 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); max8649_set_mode() local
91 regmap_update_bits(info->regmap, rdev->desc->vsel_reg, max8649_set_mode()
95 regmap_update_bits(info->regmap, rdev->desc->vsel_reg, max8649_set_mode()
106 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); max8649_get_mode() local
110 ret = regmap_read(info->regmap, rdev->desc->vsel_reg, &val); max8649_get_mode()
155 struct max8649_regulator_info *info = NULL; max8649_regulator_probe() local
162 info = devm_kzalloc(&client->dev, sizeof(struct max8649_regulator_info), max8649_regulator_probe()
164 if (!info) max8649_regulator_probe()
167 info->regmap = devm_regmap_init_i2c(client, &max8649_regmap_config); max8649_regulator_probe()
168 if (IS_ERR(info->regmap)) { max8649_regulator_probe()
169 ret = PTR_ERR(info->regmap); max8649_regulator_probe()
174 info->dev = &client->dev; max8649_regulator_probe()
175 i2c_set_clientdata(client, info); max8649_regulator_probe()
177 info->mode = pdata->mode; max8649_regulator_probe()
178 switch (info->mode) { max8649_regulator_probe()
195 ret = regmap_read(info->regmap, MAX8649_CHIP_ID1, &val); max8649_regulator_probe()
197 dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n", max8649_regulator_probe()
201 dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", val); max8649_regulator_probe()
204 regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_VID_MASK, 0); max8649_regulator_probe()
207 info->extclk = pdata->extclk; max8649_regulator_probe()
208 data = (info->extclk) ? MAX8649_SYNC_EXTCLK : 0; max8649_regulator_probe()
209 regmap_update_bits(info->regmap, dcdc_desc.vsel_reg, max8649_regulator_probe()
211 if (info->extclk) { max8649_regulator_probe()
213 info->extclk_freq = pdata->extclk_freq; max8649_regulator_probe()
214 regmap_update_bits(info->regmap, MAX8649_SYNC, MAX8649_EXT_MASK, max8649_regulator_probe()
215 info->extclk_freq << 6); max8649_regulator_probe()
219 info->ramp_timing = pdata->ramp_timing; max8649_regulator_probe()
220 regmap_update_bits(info->regmap, MAX8649_RAMP, MAX8649_RAMP_MASK, max8649_regulator_probe()
221 info->ramp_timing << 5); max8649_regulator_probe()
224 info->ramp_down = pdata->ramp_down; max8649_regulator_probe()
225 if (info->ramp_down) { max8649_regulator_probe()
226 regmap_update_bits(info->regmap, MAX8649_RAMP, MAX8649_RAMP_DOWN, max8649_regulator_probe()
232 config.driver_data = info; max8649_regulator_probe()
233 config.regmap = info->regmap; max8649_regulator_probe()
238 dev_err(info->dev, "failed to register regulator %s\n", max8649_regulator_probe()
/linux-4.1.27/drivers/bluetooth/
H A Dbluecard_cs.c160 struct bluecard_info *info = (struct bluecard_info *)arg; bluecard_activity_led_timeout() local
161 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_activity_led_timeout()
163 if (!test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) bluecard_activity_led_timeout()
166 if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) { bluecard_activity_led_timeout()
176 static void bluecard_enable_activity_led(struct bluecard_info *info) bluecard_enable_activity_led() argument
178 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_enable_activity_led()
180 if (!test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) bluecard_enable_activity_led()
183 if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) { bluecard_enable_activity_led()
188 mod_timer(&(info->timer), jiffies + HZ / 4); bluecard_enable_activity_led()
194 mod_timer(&(info->timer), jiffies + HZ / 2); bluecard_enable_activity_led()
218 static void bluecard_write_wakeup(struct bluecard_info *info) bluecard_write_wakeup() argument
220 if (!info) { bluecard_write_wakeup()
225 if (!test_bit(XMIT_SENDING_READY, &(info->tx_state))) bluecard_write_wakeup()
228 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) { bluecard_write_wakeup()
229 set_bit(XMIT_WAKEUP, &(info->tx_state)); bluecard_write_wakeup()
234 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_write_wakeup()
241 clear_bit(XMIT_WAKEUP, &(info->tx_state)); bluecard_write_wakeup()
243 if (!pcmcia_dev_present(info->p_dev)) bluecard_write_wakeup()
246 if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) { bluecard_write_wakeup()
247 if (!test_bit(XMIT_BUF_TWO_READY, &(info->tx_state))) bluecard_write_wakeup()
253 if (!test_bit(XMIT_BUF_ONE_READY, &(info->tx_state))) bluecard_write_wakeup()
260 skb = skb_dequeue(&(info->txq)); bluecard_write_wakeup()
266 info->ctrl_reg |= REG_CONTROL_RTS; bluecard_write_wakeup()
267 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_write_wakeup()
271 bluecard_enable_activity_led(info); bluecard_write_wakeup()
280 clear_bit(ready_bit, &(info->tx_state)); bluecard_write_wakeup()
311 info->ctrl_reg &= ~0x03; bluecard_write_wakeup()
312 info->ctrl_reg |= baud_reg; bluecard_write_wakeup()
313 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_write_wakeup()
316 info->ctrl_reg &= ~REG_CONTROL_RTS; bluecard_write_wakeup()
317 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_write_wakeup()
329 skb_queue_head(&(info->txq), skb); bluecard_write_wakeup()
332 info->hdev->stat.byte_tx += len; bluecard_write_wakeup()
335 change_bit(XMIT_BUFFER_NUMBER, &(info->tx_state)); bluecard_write_wakeup()
337 } while (test_bit(XMIT_WAKEUP, &(info->tx_state))); bluecard_write_wakeup()
339 clear_bit(XMIT_SENDING, &(info->tx_state)); bluecard_write_wakeup()
371 static void bluecard_receive(struct bluecard_info *info, bluecard_receive() argument
378 if (!info) { bluecard_receive()
383 iobase = info->p_dev->resource[0]->start; bluecard_receive()
385 if (test_bit(XMIT_SENDING_READY, &(info->tx_state))) bluecard_receive()
386 bluecard_enable_activity_led(info); bluecard_receive()
393 if (info->rx_skb == NULL) { bluecard_receive()
394 info->rx_state = RECV_WAIT_PACKET_TYPE; bluecard_receive()
395 info->rx_count = 0; bluecard_receive()
396 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); bluecard_receive()
397 if (!info->rx_skb) { bluecard_receive()
403 if (info->rx_state == RECV_WAIT_PACKET_TYPE) { bluecard_receive()
405 bt_cb(info->rx_skb)->pkt_type = buf[i]; bluecard_receive()
407 switch (bt_cb(info->rx_skb)->pkt_type) { bluecard_receive()
412 set_bit(XMIT_BUF_ONE_READY, &(info->tx_state)); bluecard_receive()
413 set_bit(XMIT_BUF_TWO_READY, &(info->tx_state)); bluecard_receive()
414 set_bit(XMIT_SENDING_READY, &(info->tx_state)); bluecard_receive()
415 bluecard_write_wakeup(info); bluecard_receive()
418 kfree_skb(info->rx_skb); bluecard_receive()
419 info->rx_skb = NULL; bluecard_receive()
423 info->rx_state = RECV_WAIT_EVENT_HEADER; bluecard_receive()
424 info->rx_count = HCI_EVENT_HDR_SIZE; bluecard_receive()
428 info->rx_state = RECV_WAIT_ACL_HEADER; bluecard_receive()
429 info->rx_count = HCI_ACL_HDR_SIZE; bluecard_receive()
433 info->rx_state = RECV_WAIT_SCO_HEADER; bluecard_receive()
434 info->rx_count = HCI_SCO_HDR_SIZE; bluecard_receive()
439 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); bluecard_receive()
440 info->hdev->stat.err_rx++; bluecard_receive()
442 kfree_skb(info->rx_skb); bluecard_receive()
443 info->rx_skb = NULL; bluecard_receive()
450 *skb_put(info->rx_skb, 1) = buf[i]; bluecard_receive()
451 info->rx_count--; bluecard_receive()
453 if (info->rx_count == 0) { bluecard_receive()
460 switch (info->rx_state) { bluecard_receive()
463 eh = hci_event_hdr(info->rx_skb); bluecard_receive()
464 info->rx_state = RECV_WAIT_DATA; bluecard_receive()
465 info->rx_count = eh->plen; bluecard_receive()
469 ah = hci_acl_hdr(info->rx_skb); bluecard_receive()
471 info->rx_state = RECV_WAIT_DATA; bluecard_receive()
472 info->rx_count = dlen; bluecard_receive()
476 sh = hci_sco_hdr(info->rx_skb); bluecard_receive()
477 info->rx_state = RECV_WAIT_DATA; bluecard_receive()
478 info->rx_count = sh->dlen; bluecard_receive()
482 hci_recv_frame(info->hdev, info->rx_skb); bluecard_receive()
483 info->rx_skb = NULL; bluecard_receive()
495 info->hdev->stat.byte_rx += len; bluecard_receive()
501 struct bluecard_info *info = dev_inst; bluecard_interrupt() local
505 if (!info || !info->hdev) bluecard_interrupt()
509 if (!test_bit(CARD_READY, &(info->hw_state))) bluecard_interrupt()
512 iobase = info->p_dev->resource[0]->start; bluecard_interrupt()
514 spin_lock(&(info->lock)); bluecard_interrupt()
517 info->ctrl_reg &= ~REG_CONTROL_INTERRUPT; bluecard_interrupt()
518 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_interrupt()
525 bluecard_receive(info, 0x00); bluecard_interrupt()
531 bluecard_receive(info, 0x10); bluecard_interrupt()
537 set_bit(XMIT_BUF_ONE_READY, &(info->tx_state)); bluecard_interrupt()
539 bluecard_write_wakeup(info); bluecard_interrupt()
543 set_bit(XMIT_BUF_TWO_READY, &(info->tx_state)); bluecard_interrupt()
545 bluecard_write_wakeup(info); bluecard_interrupt()
551 info->ctrl_reg |= REG_CONTROL_INTERRUPT; bluecard_interrupt()
552 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_interrupt()
554 spin_unlock(&(info->lock)); bluecard_interrupt()
566 struct bluecard_info *info = hci_get_drvdata(hdev); bluecard_hci_set_baud_rate() local
601 skb_queue_tail(&(info->txq), skb); bluecard_hci_set_baud_rate()
603 bluecard_write_wakeup(info); bluecard_hci_set_baud_rate()
615 struct bluecard_info *info = hci_get_drvdata(hdev); bluecard_hci_flush() local
618 skb_queue_purge(&(info->txq)); bluecard_hci_flush()
626 struct bluecard_info *info = hci_get_drvdata(hdev); bluecard_hci_open() local
628 if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) bluecard_hci_open()
634 if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) { bluecard_hci_open()
635 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_hci_open()
647 struct bluecard_info *info = hci_get_drvdata(hdev); bluecard_hci_close() local
654 if (test_bit(CARD_HAS_PCCARD_ID, &(info->hw_state))) { bluecard_hci_close()
655 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_hci_close()
667 struct bluecard_info *info = hci_get_drvdata(hdev); bluecard_hci_send_frame() local
683 skb_queue_tail(&(info->txq), skb); bluecard_hci_send_frame()
685 bluecard_write_wakeup(info); bluecard_hci_send_frame()
695 static int bluecard_open(struct bluecard_info *info) bluecard_open() argument
697 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_open()
701 spin_lock_init(&(info->lock)); bluecard_open()
703 init_timer(&(info->timer)); bluecard_open()
704 info->timer.function = &bluecard_activity_led_timeout; bluecard_open()
705 info->timer.data = (u_long)info; bluecard_open()
707 skb_queue_head_init(&(info->txq)); bluecard_open()
709 info->rx_state = RECV_WAIT_PACKET_TYPE; bluecard_open()
710 info->rx_count = 0; bluecard_open()
711 info->rx_skb = NULL; bluecard_open()
720 info->hdev = hdev; bluecard_open()
723 hci_set_drvdata(hdev, info); bluecard_open()
724 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); bluecard_open()
734 set_bit(CARD_HAS_PCCARD_ID, &(info->hw_state)); bluecard_open()
737 set_bit(CARD_HAS_POWER_LED, &(info->hw_state)); bluecard_open()
740 set_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state)); bluecard_open()
743 info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET; bluecard_open()
744 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_open()
756 info->ctrl_reg = REG_CONTROL_BT_ON | REG_CONTROL_BT_RES_PU; bluecard_open()
757 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_open()
761 info->ctrl_reg |= REG_CONTROL_INTERRUPT; bluecard_open()
762 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_open()
766 info->ctrl_reg |= REG_CONTROL_RTS; bluecard_open()
767 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_open()
770 info->ctrl_reg |= 0x03; bluecard_open()
771 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_open()
774 info->ctrl_reg &= ~REG_CONTROL_RTS; bluecard_open()
775 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_open()
777 set_bit(XMIT_BUF_ONE_READY, &(info->tx_state)); bluecard_open()
778 set_bit(XMIT_BUF_TWO_READY, &(info->tx_state)); bluecard_open()
779 set_bit(XMIT_SENDING_READY, &(info->tx_state)); bluecard_open()
787 set_bit(CARD_READY, &(info->hw_state)); bluecard_open()
790 skb_queue_purge(&(info->txq)); bluecard_open()
801 info->hdev = NULL; bluecard_open()
810 static int bluecard_close(struct bluecard_info *info) bluecard_close() argument
812 unsigned int iobase = info->p_dev->resource[0]->start; bluecard_close()
813 struct hci_dev *hdev = info->hdev; bluecard_close()
820 clear_bit(CARD_READY, &(info->hw_state)); bluecard_close()
823 info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET; bluecard_close()
824 outb(info->ctrl_reg, iobase + REG_CONTROL); bluecard_close()
837 struct bluecard_info *info; bluecard_probe() local
839 /* Create new info device */ bluecard_probe()
840 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); bluecard_probe()
841 if (!info) bluecard_probe()
844 info->p_dev = link; bluecard_probe()
845 link->priv = info; bluecard_probe()
861 struct bluecard_info *info = link->priv; bluecard_config() local
888 if (bluecard_open(info) != 0) bluecard_config()
901 struct bluecard_info *info = link->priv; bluecard_release() local
903 bluecard_close(info); bluecard_release()
905 del_timer_sync(&(info->timer)); bluecard_release()
H A Dbtuart_cs.c130 static void btuart_write_wakeup(struct btuart_info *info) btuart_write_wakeup() argument
132 if (!info) { btuart_write_wakeup()
137 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) { btuart_write_wakeup()
138 set_bit(XMIT_WAKEUP, &(info->tx_state)); btuart_write_wakeup()
143 unsigned int iobase = info->p_dev->resource[0]->start; btuart_write_wakeup()
147 clear_bit(XMIT_WAKEUP, &(info->tx_state)); btuart_write_wakeup()
149 if (!pcmcia_dev_present(info->p_dev)) btuart_write_wakeup()
152 skb = skb_dequeue(&(info->txq)); btuart_write_wakeup()
158 set_bit(XMIT_WAKEUP, &(info->tx_state)); btuart_write_wakeup()
164 skb_queue_head(&(info->txq), skb); btuart_write_wakeup()
167 info->hdev->stat.byte_tx += len; btuart_write_wakeup()
169 } while (test_bit(XMIT_WAKEUP, &(info->tx_state))); btuart_write_wakeup()
171 clear_bit(XMIT_SENDING, &(info->tx_state)); btuart_write_wakeup()
175 static void btuart_receive(struct btuart_info *info) btuart_receive() argument
180 if (!info) { btuart_receive()
185 iobase = info->p_dev->resource[0]->start; btuart_receive()
188 info->hdev->stat.byte_rx++; btuart_receive()
191 if (info->rx_skb == NULL) { btuart_receive()
192 info->rx_state = RECV_WAIT_PACKET_TYPE; btuart_receive()
193 info->rx_count = 0; btuart_receive()
194 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); btuart_receive()
195 if (!info->rx_skb) { btuart_receive()
201 if (info->rx_state == RECV_WAIT_PACKET_TYPE) { btuart_receive()
203 bt_cb(info->rx_skb)->pkt_type = inb(iobase + UART_RX); btuart_receive()
205 switch (bt_cb(info->rx_skb)->pkt_type) { btuart_receive()
208 info->rx_state = RECV_WAIT_EVENT_HEADER; btuart_receive()
209 info->rx_count = HCI_EVENT_HDR_SIZE; btuart_receive()
213 info->rx_state = RECV_WAIT_ACL_HEADER; btuart_receive()
214 info->rx_count = HCI_ACL_HDR_SIZE; btuart_receive()
218 info->rx_state = RECV_WAIT_SCO_HEADER; btuart_receive()
219 info->rx_count = HCI_SCO_HDR_SIZE; btuart_receive()
224 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); btuart_receive()
225 info->hdev->stat.err_rx++; btuart_receive()
226 clear_bit(HCI_RUNNING, &(info->hdev->flags)); btuart_receive()
228 kfree_skb(info->rx_skb); btuart_receive()
229 info->rx_skb = NULL; btuart_receive()
236 *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX); btuart_receive()
237 info->rx_count--; btuart_receive()
239 if (info->rx_count == 0) { btuart_receive()
247 switch (info->rx_state) { btuart_receive()
250 eh = hci_event_hdr(info->rx_skb); btuart_receive()
251 info->rx_state = RECV_WAIT_DATA; btuart_receive()
252 info->rx_count = eh->plen; btuart_receive()
256 ah = hci_acl_hdr(info->rx_skb); btuart_receive()
258 info->rx_state = RECV_WAIT_DATA; btuart_receive()
259 info->rx_count = dlen; btuart_receive()
263 sh = hci_sco_hdr(info->rx_skb); btuart_receive()
264 info->rx_state = RECV_WAIT_DATA; btuart_receive()
265 info->rx_count = sh->dlen; btuart_receive()
269 hci_recv_frame(info->hdev, info->rx_skb); btuart_receive()
270 info->rx_skb = NULL; btuart_receive()
289 struct btuart_info *info = dev_inst; btuart_interrupt() local
295 if (!info || !info->hdev) btuart_interrupt()
299 iobase = info->p_dev->resource[0]->start; btuart_interrupt()
301 spin_lock(&(info->lock)); btuart_interrupt()
316 btuart_receive(info); btuart_interrupt()
321 btuart_write_wakeup(info); btuart_interrupt()
337 spin_unlock(&(info->lock)); btuart_interrupt()
343 static void btuart_change_speed(struct btuart_info *info, btuart_change_speed() argument
352 if (!info) { btuart_change_speed()
357 iobase = info->p_dev->resource[0]->start; btuart_change_speed()
359 spin_lock_irqsave(&(info->lock), flags); btuart_change_speed()
391 spin_unlock_irqrestore(&(info->lock), flags); btuart_change_speed()
401 struct btuart_info *info = hci_get_drvdata(hdev); btuart_hci_flush() local
404 skb_queue_purge(&(info->txq)); btuart_hci_flush()
431 struct btuart_info *info = hci_get_drvdata(hdev); btuart_hci_send_frame() local
447 skb_queue_tail(&(info->txq), skb); btuart_hci_send_frame()
449 btuart_write_wakeup(info); btuart_hci_send_frame()
459 static int btuart_open(struct btuart_info *info) btuart_open() argument
462 unsigned int iobase = info->p_dev->resource[0]->start; btuart_open()
465 spin_lock_init(&(info->lock)); btuart_open()
467 skb_queue_head_init(&(info->txq)); btuart_open()
469 info->rx_state = RECV_WAIT_PACKET_TYPE; btuart_open()
470 info->rx_count = 0; btuart_open()
471 info->rx_skb = NULL; btuart_open()
480 info->hdev = hdev; btuart_open()
483 hci_set_drvdata(hdev, info); btuart_open()
484 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); btuart_open()
491 spin_lock_irqsave(&(info->lock), flags); btuart_open()
506 spin_unlock_irqrestore(&(info->lock), flags); btuart_open()
508 btuart_change_speed(info, DEFAULT_BAUD_RATE); btuart_open()
516 info->hdev = NULL; btuart_open()
525 static int btuart_close(struct btuart_info *info) btuart_close() argument
528 unsigned int iobase = info->p_dev->resource[0]->start; btuart_close()
529 struct hci_dev *hdev = info->hdev; btuart_close()
536 spin_lock_irqsave(&(info->lock), flags); btuart_close()
544 spin_unlock_irqrestore(&(info->lock), flags); btuart_close()
554 struct btuart_info *info; btuart_probe() local
556 /* Create new info device */ btuart_probe()
557 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); btuart_probe()
558 if (!info) btuart_probe()
561 info->p_dev = link; btuart_probe()
562 link->priv = info; btuart_probe()
617 struct btuart_info *info = link->priv; btuart_config() local
645 if (btuart_open(info) != 0) btuart_config()
658 struct btuart_info *info = link->priv; btuart_release() local
660 btuart_close(info); btuart_release()
H A Ddtl1_cs.c129 static void dtl1_write_wakeup(struct dtl1_info *info) dtl1_write_wakeup() argument
131 if (!info) { dtl1_write_wakeup()
136 if (test_bit(XMIT_WAITING, &(info->tx_state))) { dtl1_write_wakeup()
137 set_bit(XMIT_WAKEUP, &(info->tx_state)); dtl1_write_wakeup()
141 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) { dtl1_write_wakeup()
142 set_bit(XMIT_WAKEUP, &(info->tx_state)); dtl1_write_wakeup()
147 unsigned int iobase = info->p_dev->resource[0]->start; dtl1_write_wakeup()
151 clear_bit(XMIT_WAKEUP, &(info->tx_state)); dtl1_write_wakeup()
153 if (!pcmcia_dev_present(info->p_dev)) dtl1_write_wakeup()
156 skb = skb_dequeue(&(info->txq)); dtl1_write_wakeup()
164 set_bit(XMIT_WAITING, &(info->tx_state)); dtl1_write_wakeup()
168 skb_queue_head(&(info->txq), skb); dtl1_write_wakeup()
171 info->hdev->stat.byte_tx += len; dtl1_write_wakeup()
173 } while (test_bit(XMIT_WAKEUP, &(info->tx_state))); dtl1_write_wakeup()
175 clear_bit(XMIT_SENDING, &(info->tx_state)); dtl1_write_wakeup()
179 static void dtl1_control(struct dtl1_info *info, struct sk_buff *skb) dtl1_control() argument
191 if (((info->flowmask & 0x07) == 0) && ((flowmask & 0x07) != 0)) { dtl1_control()
192 clear_bit(XMIT_WAITING, &(info->tx_state)); dtl1_control()
193 dtl1_write_wakeup(info); dtl1_control()
196 info->flowmask = flowmask; dtl1_control()
202 static void dtl1_receive(struct dtl1_info *info) dtl1_receive() argument
208 if (!info) { dtl1_receive()
213 iobase = info->p_dev->resource[0]->start; dtl1_receive()
216 info->hdev->stat.byte_rx++; dtl1_receive()
219 if (info->rx_skb == NULL) { dtl1_receive()
220 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); dtl1_receive()
221 if (!info->rx_skb) { dtl1_receive()
223 info->rx_state = RECV_WAIT_NSH; dtl1_receive()
224 info->rx_count = NSHL; dtl1_receive()
229 *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX); dtl1_receive()
230 nsh = (struct nsh *)info->rx_skb->data; dtl1_receive()
232 info->rx_count--; dtl1_receive()
234 if (info->rx_count == 0) { dtl1_receive()
236 switch (info->rx_state) { dtl1_receive()
238 info->rx_state = RECV_WAIT_DATA; dtl1_receive()
239 info->rx_count = nsh->len + (nsh->len & 0x0001); dtl1_receive()
242 bt_cb(info->rx_skb)->pkt_type = nsh->type; dtl1_receive()
246 info->rx_skb->tail--; dtl1_receive()
247 info->rx_skb->len--; dtl1_receive()
251 skb_pull(info->rx_skb, NSHL); dtl1_receive()
253 switch (bt_cb(info->rx_skb)->pkt_type) { dtl1_receive()
256 dtl1_control(info, info->rx_skb); dtl1_receive()
262 bt_cb(info->rx_skb)->pkt_type &= 0x0f; dtl1_receive()
263 hci_recv_frame(info->hdev, info->rx_skb); dtl1_receive()
267 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); dtl1_receive()
268 kfree_skb(info->rx_skb); dtl1_receive()
272 info->rx_state = RECV_WAIT_NSH; dtl1_receive()
273 info->rx_count = NSHL; dtl1_receive()
274 info->rx_skb = NULL; dtl1_receive()
290 struct dtl1_info *info = dev_inst; dtl1_interrupt() local
297 if (!info || !info->hdev) dtl1_interrupt()
301 iobase = info->p_dev->resource[0]->start; dtl1_interrupt()
303 spin_lock(&(info->lock)); dtl1_interrupt()
318 dtl1_receive(info); dtl1_interrupt()
323 dtl1_write_wakeup(info); dtl1_interrupt()
341 if (info->ri_latch ^ (msr & UART_MSR_RI)) { dtl1_interrupt()
342 info->ri_latch = msr & UART_MSR_RI; dtl1_interrupt()
343 clear_bit(XMIT_WAITING, &(info->tx_state)); dtl1_interrupt()
344 dtl1_write_wakeup(info); dtl1_interrupt()
348 spin_unlock(&(info->lock)); dtl1_interrupt()
368 struct dtl1_info *info = hci_get_drvdata(hdev); dtl1_hci_flush() local
371 skb_queue_purge(&(info->txq)); dtl1_hci_flush()
390 struct dtl1_info *info = hci_get_drvdata(hdev); dtl1_hci_send_frame() local
425 skb_queue_tail(&(info->txq), s); dtl1_hci_send_frame()
427 dtl1_write_wakeup(info); dtl1_hci_send_frame()
439 static int dtl1_open(struct dtl1_info *info) dtl1_open() argument
442 unsigned int iobase = info->p_dev->resource[0]->start; dtl1_open()
445 spin_lock_init(&(info->lock)); dtl1_open()
447 skb_queue_head_init(&(info->txq)); dtl1_open()
449 info->rx_state = RECV_WAIT_NSH; dtl1_open()
450 info->rx_count = NSHL; dtl1_open()
451 info->rx_skb = NULL; dtl1_open()
453 set_bit(XMIT_WAITING, &(info->tx_state)); dtl1_open()
462 info->hdev = hdev; dtl1_open()
465 hci_set_drvdata(hdev, info); dtl1_open()
466 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); dtl1_open()
473 spin_lock_irqsave(&(info->lock), flags); dtl1_open()
485 info->ri_latch = inb(info->p_dev->resource[0]->start + UART_MSR) dtl1_open()
491 spin_unlock_irqrestore(&(info->lock), flags); dtl1_open()
499 info->hdev = NULL; dtl1_open()
508 static int dtl1_close(struct dtl1_info *info) dtl1_close() argument
511 unsigned int iobase = info->p_dev->resource[0]->start; dtl1_close()
512 struct hci_dev *hdev = info->hdev; dtl1_close()
519 spin_lock_irqsave(&(info->lock), flags); dtl1_close()
527 spin_unlock_irqrestore(&(info->lock), flags); dtl1_close()
537 struct dtl1_info *info; dtl1_probe() local
539 /* Create new info device */ dtl1_probe()
540 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); dtl1_probe()
541 if (!info) dtl1_probe()
544 info->p_dev = link; dtl1_probe()
545 link->priv = info; dtl1_probe()
555 struct dtl1_info *info = link->priv; dtl1_detach() local
557 dtl1_close(info); dtl1_detach()
574 struct dtl1_info *info = link->priv; dtl1_config() local
591 ret = dtl1_open(info); dtl1_config()
H A Dbt3c_cs.c178 static void bt3c_write_wakeup(struct bt3c_info *info) bt3c_write_wakeup() argument
180 if (!info) { bt3c_write_wakeup()
185 if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) bt3c_write_wakeup()
189 unsigned int iobase = info->p_dev->resource[0]->start; bt3c_write_wakeup()
193 if (!pcmcia_dev_present(info->p_dev)) bt3c_write_wakeup()
196 skb = skb_dequeue(&(info->txq)); bt3c_write_wakeup()
198 clear_bit(XMIT_SENDING, &(info->tx_state)); bt3c_write_wakeup()
211 info->hdev->stat.byte_tx += len; bt3c_write_wakeup()
217 static void bt3c_receive(struct bt3c_info *info) bt3c_receive() argument
222 if (!info) { bt3c_receive()
227 iobase = info->p_dev->resource[0]->start; bt3c_receive()
234 info->hdev->stat.byte_rx++; bt3c_receive()
237 if (info->rx_skb == NULL) { bt3c_receive()
238 info->rx_state = RECV_WAIT_PACKET_TYPE; bt3c_receive()
239 info->rx_count = 0; bt3c_receive()
240 info->rx_skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); bt3c_receive()
241 if (!info->rx_skb) { bt3c_receive()
248 if (info->rx_state == RECV_WAIT_PACKET_TYPE) { bt3c_receive()
250 bt_cb(info->rx_skb)->pkt_type = inb(iobase + DATA_L); bt3c_receive()
253 switch (bt_cb(info->rx_skb)->pkt_type) { bt3c_receive()
256 info->rx_state = RECV_WAIT_EVENT_HEADER; bt3c_receive()
257 info->rx_count = HCI_EVENT_HDR_SIZE; bt3c_receive()
261 info->rx_state = RECV_WAIT_ACL_HEADER; bt3c_receive()
262 info->rx_count = HCI_ACL_HDR_SIZE; bt3c_receive()
266 info->rx_state = RECV_WAIT_SCO_HEADER; bt3c_receive()
267 info->rx_count = HCI_SCO_HDR_SIZE; bt3c_receive()
272 BT_ERR("Unknown HCI packet with type 0x%02x received", bt_cb(info->rx_skb)->pkt_type); bt3c_receive()
273 info->hdev->stat.err_rx++; bt3c_receive()
274 clear_bit(HCI_RUNNING, &(info->hdev->flags)); bt3c_receive()
276 kfree_skb(info->rx_skb); bt3c_receive()
277 info->rx_skb = NULL; bt3c_receive()
286 *skb_put(info->rx_skb, 1) = x; bt3c_receive()
288 info->rx_count--; bt3c_receive()
290 if (info->rx_count == 0) { bt3c_receive()
297 switch (info->rx_state) { bt3c_receive()
300 eh = hci_event_hdr(info->rx_skb); bt3c_receive()
301 info->rx_state = RECV_WAIT_DATA; bt3c_receive()
302 info->rx_count = eh->plen; bt3c_receive()
306 ah = hci_acl_hdr(info->rx_skb); bt3c_receive()
308 info->rx_state = RECV_WAIT_DATA; bt3c_receive()
309 info->rx_count = dlen; bt3c_receive()
313 sh = hci_sco_hdr(info->rx_skb); bt3c_receive()
314 info->rx_state = RECV_WAIT_DATA; bt3c_receive()
315 info->rx_count = sh->dlen; bt3c_receive()
319 hci_recv_frame(info->hdev, info->rx_skb); bt3c_receive()
320 info->rx_skb = NULL; bt3c_receive()
337 struct bt3c_info *info = dev_inst; bt3c_interrupt() local
342 if (!info || !info->hdev) bt3c_interrupt()
346 iobase = info->p_dev->resource[0]->start; bt3c_interrupt()
348 spin_lock(&(info->lock)); bt3c_interrupt()
359 BT_INFO("%s: Antenna %s", info->hdev->name, bt3c_interrupt()
363 bt3c_receive(info); bt3c_interrupt()
365 clear_bit(XMIT_SENDING, &(info->tx_state)); bt3c_interrupt()
366 bt3c_write_wakeup(info); bt3c_interrupt()
376 spin_unlock(&(info->lock)); bt3c_interrupt()
388 struct bt3c_info *info = hci_get_drvdata(hdev); bt3c_hci_flush() local
391 skb_queue_purge(&(info->txq)); bt3c_hci_flush()
418 struct bt3c_info *info = hci_get_drvdata(hdev); bt3c_hci_send_frame() local
435 skb_queue_tail(&(info->txq), skb); bt3c_hci_send_frame()
437 spin_lock_irqsave(&(info->lock), flags); bt3c_hci_send_frame()
439 bt3c_write_wakeup(info); bt3c_hci_send_frame()
441 spin_unlock_irqrestore(&(info->lock), flags); bt3c_hci_send_frame()
451 static int bt3c_load_firmware(struct bt3c_info *info, bt3c_load_firmware() argument
460 iobase = info->p_dev->resource[0]->start; bt3c_load_firmware()
537 static int bt3c_open(struct bt3c_info *info) bt3c_open() argument
543 spin_lock_init(&(info->lock)); bt3c_open()
545 skb_queue_head_init(&(info->txq)); bt3c_open()
547 info->rx_state = RECV_WAIT_PACKET_TYPE; bt3c_open()
548 info->rx_count = 0; bt3c_open()
549 info->rx_skb = NULL; bt3c_open()
558 info->hdev = hdev; bt3c_open()
561 hci_set_drvdata(hdev, info); bt3c_open()
562 SET_HCIDEV_DEV(hdev, &info->p_dev->dev); bt3c_open()
570 err = request_firmware(&firmware, "BT3CPCC.bin", &info->p_dev->dev); bt3c_open()
576 err = bt3c_load_firmware(info, firmware->data, firmware->size); bt3c_open()
598 info->hdev = NULL; bt3c_open()
604 static int bt3c_close(struct bt3c_info *info) bt3c_close() argument
606 struct hci_dev *hdev = info->hdev; bt3c_close()
621 struct bt3c_info *info; bt3c_probe() local
623 /* Create new info device */ bt3c_probe()
624 info = devm_kzalloc(&link->dev, sizeof(*info), GFP_KERNEL); bt3c_probe()
625 if (!info) bt3c_probe()
628 info->p_dev = link; bt3c_probe()
629 link->priv = info; bt3c_probe()
684 struct bt3c_info *info = link->priv; bt3c_config() local
712 if (bt3c_open(info) != 0) bt3c_config()
725 struct bt3c_info *info = link->priv; bt3c_release() local
727 bt3c_close(info); bt3c_release()
/linux-4.1.27/drivers/mtd/onenand/
H A Dgeneric.c39 struct onenand_info *info; generic_onenand_probe() local
45 info = kzalloc(sizeof(struct onenand_info), GFP_KERNEL); generic_onenand_probe()
46 if (!info) generic_onenand_probe()
54 info->onenand.base = ioremap(res->start, size); generic_onenand_probe()
55 if (!info->onenand.base) { generic_onenand_probe()
60 info->onenand.mmcontrol = pdata ? pdata->mmcontrol : NULL; generic_onenand_probe()
61 info->onenand.irq = platform_get_irq(pdev, 0); generic_onenand_probe()
63 info->mtd.name = dev_name(&pdev->dev); generic_onenand_probe()
64 info->mtd.priv = &info->onenand; generic_onenand_probe()
65 info->mtd.owner = THIS_MODULE; generic_onenand_probe()
67 if (onenand_scan(&info->mtd, 1)) { generic_onenand_probe()
72 err = mtd_device_parse_register(&info->mtd, NULL, NULL, generic_onenand_probe()
76 platform_set_drvdata(pdev, info); generic_onenand_probe()
81 iounmap(info->onenand.base); generic_onenand_probe()
85 kfree(info); generic_onenand_probe()
92 struct onenand_info *info = platform_get_drvdata(pdev); generic_onenand_remove() local
96 if (info) { generic_onenand_remove()
97 onenand_release(&info->mtd); generic_onenand_remove()
99 iounmap(info->onenand.base); generic_onenand_remove()
100 kfree(info); generic_onenand_remove()
/linux-4.1.27/drivers/video/fbdev/core/
H A Dfb_sys_fops.c16 ssize_t fb_sys_read(struct fb_info *info, char __user *buf, size_t count, fb_sys_read() argument
24 if (info->state != FBINFO_STATE_RUNNING) fb_sys_read()
27 total_size = info->screen_size; fb_sys_read()
30 total_size = info->fix.smem_len; fb_sys_read()
41 src = (void __force *)(info->screen_base + p); fb_sys_read()
43 if (info->fbops->fb_sync) fb_sys_read()
44 info->fbops->fb_sync(info); fb_sys_read()
56 ssize_t fb_sys_write(struct fb_info *info, const char __user *buf, fb_sys_write() argument
64 if (info->state != FBINFO_STATE_RUNNING) fb_sys_write()
67 total_size = info->screen_size; fb_sys_write()
70 total_size = info->fix.smem_len; fb_sys_write()
87 dst = (void __force *) (info->screen_base + p); fb_sys_write()
89 if (info->fbops->fb_sync) fb_sys_write()
90 info->fbops->fb_sync(info); fb_sys_write()
H A Dfbmem.c77 int lock_fb_info(struct fb_info *info) lock_fb_info() argument
79 mutex_lock(&info->lock); lock_fb_info()
80 if (!info->fbops) { lock_fb_info()
81 mutex_unlock(&info->lock); lock_fb_info()
158 char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size) fb_get_buffer_offset() argument
167 if (info->fbops->fb_sync && (buf->flags & FB_PIXMAP_SYNC)) fb_get_buffer_offset()
168 info->fbops->fb_sync(info); fb_get_buffer_offset()
180 if (info->fbops->fb_sync && (buf->flags & FB_PIXMAP_SYNC)) fb_get_buffer_offset()
181 info->fbops->fb_sync(info); fb_get_buffer_offset()
198 static void fb_set_logocmap(struct fb_info *info, fb_set_logocmap() argument
228 fb_set_cmap(&palette_cmap, info); fb_set_logocmap()
232 static void fb_set_logo_truepalette(struct fb_info *info, fb_set_logo_truepalette() argument
247 redmask = mask[info->var.red.length < 8 ? info->var.red.length : 8]; fb_set_logo_truepalette()
248 greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8]; fb_set_logo_truepalette()
249 bluemask = mask[info->var.blue.length < 8 ? info->var.blue.length : 8]; fb_set_logo_truepalette()
250 redshift = info->var.red.offset - (8 - info->var.red.length); fb_set_logo_truepalette()
251 greenshift = info->var.green.offset - (8 - info->var.green.length); fb_set_logo_truepalette()
252 blueshift = info->var.blue.offset - (8 - info->var.blue.length); fb_set_logo_truepalette()
262 static void fb_set_logo_directpalette(struct fb_info *info, fb_set_logo_directpalette() argument
269 redshift = info->var.red.offset; fb_set_logo_directpalette()
270 greenshift = info->var.green.offset; fb_set_logo_directpalette()
271 blueshift = info->var.blue.offset; fb_set_logo_directpalette()
277 static void fb_set_logo(struct fb_info *info, fb_set_logo() argument
283 u8 xor = (info->fix.visual == FB_VISUAL_MONO01) ? 0xff : 0; fb_set_logo()
286 switch (fb_get_color_depth(&info->var, &info->fix)) { fb_set_logo()
298 if (info->fix.visual == FB_VISUAL_MONO01 || fb_set_logo()
299 info->fix.visual == FB_VISUAL_MONO10) fb_set_logo()
300 fg = ~((u8) (0xfff << info->var.green.length)); fb_set_logo()
338 * For visuals that require color info from the pseudo_palette, we also construct
390 static void fb_rotate_logo(struct fb_info *info, u8 *dst, fb_rotate_logo() argument
398 image->dx = info->var.xres - image->width - image->dx; fb_rotate_logo()
399 image->dy = info->var.yres - image->height - image->dy; fb_rotate_logo()
408 image->dx = info->var.xres - image->width - tmp; fb_rotate_logo()
417 image->dy = info->var.yres - image->height - tmp; fb_rotate_logo()
423 static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, fb_do_show_logo() argument
430 x < num && image->dx + image->width <= info->var.xres; fb_do_show_logo()
432 info->fbops->fb_imageblit(info, image); fb_do_show_logo()
437 info->fbops->fb_imageblit(info, image); fb_do_show_logo()
442 x < num && image->dy + image->height <= info->var.yres; fb_do_show_logo()
444 info->fbops->fb_imageblit(info, image); fb_do_show_logo()
449 info->fbops->fb_imageblit(info, image); fb_do_show_logo()
455 static int fb_show_logo_line(struct fb_info *info, int rotate, fb_show_logo_line() argument
464 if (logo == NULL || info->state != FBINFO_STATE_RUNNING || fb_show_logo_line()
465 info->flags & FBINFO_MODULE) fb_show_logo_line()
472 fb_set_logocmap(info, logo); fb_show_logo_line()
481 fb_set_logo_truepalette(info, logo, palette); fb_show_logo_line()
483 fb_set_logo_directpalette(info, logo, palette); fb_show_logo_line()
485 saved_pseudo_palette = info->pseudo_palette; fb_show_logo_line()
486 info->pseudo_palette = palette; fb_show_logo_line()
494 info->pseudo_palette = saved_pseudo_palette; fb_show_logo_line()
498 fb_set_logo(info, logo, logo_new, fb_logo.depth); fb_show_logo_line()
510 fb_rotate_logo(info, logo_rotate, &image, rotate); fb_show_logo_line()
513 fb_do_show_logo(info, &image, rotate, n); fb_show_logo_line()
517 info->pseudo_palette = saved_pseudo_palette; fb_show_logo_line()
543 static int fb_prepare_extra_logos(struct fb_info *info, unsigned int height, fb_prepare_extra_logos() argument
549 if (info->fix.visual != FB_VISUAL_TRUECOLOR) fb_prepare_extra_logos()
567 static int fb_show_extra_logos(struct fb_info *info, int y, int rotate) fb_show_extra_logos() argument
572 y += fb_show_logo_line(info, rotate, fb_show_extra_logos()
580 static inline int fb_prepare_extra_logos(struct fb_info *info, fb_prepare_extra_logos() argument
587 static inline int fb_show_extra_logos(struct fb_info *info, int y, int rotate) fb_show_extra_logos() argument
595 int fb_prepare_logo(struct fb_info *info, int rotate) fb_prepare_logo() argument
597 int depth = fb_get_color_depth(&info->var, &info->fix); fb_prepare_logo()
602 if (info->flags & FBINFO_MISC_TILEBLITTING || fb_prepare_logo()
603 info->flags & FBINFO_MODULE) fb_prepare_logo()
606 if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { fb_prepare_logo()
607 depth = info->var.blue.length; fb_prepare_logo()
608 if (info->var.red.length < depth) fb_prepare_logo()
609 depth = info->var.red.length; fb_prepare_logo()
610 if (info->var.green.length < depth) fb_prepare_logo()
611 depth = info->var.green.length; fb_prepare_logo()
614 if (info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR && depth > 4) { fb_prepare_logo()
627 yres = info->var.yres; fb_prepare_logo()
629 yres = info->var.xres; fb_prepare_logo()
646 switch (info->fix.visual) { fb_prepare_logo()
660 return fb_prepare_extra_logos(info, fb_logo.logo->height, yres); fb_prepare_logo()
663 int fb_show_logo(struct fb_info *info, int rotate) fb_show_logo() argument
667 y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, fb_show_logo()
669 y = fb_show_extra_logos(info, y, rotate); fb_show_logo()
674 int fb_prepare_logo(struct fb_info *info, int rotate) { return 0; } fb_show_logo() argument
675 int fb_show_logo(struct fb_info *info, int rotate) { return 0; } fb_show_logo() argument
739 struct fb_info *info = registered_fb[fbidx]; file_fb_info() local
741 if (info != file->private_data) file_fb_info()
742 info = NULL; file_fb_info()
743 return info; file_fb_info()
750 struct fb_info *info = file_fb_info(file); fb_read() local
756 if (!info || ! info->screen_base) fb_read()
759 if (info->state != FBINFO_STATE_RUNNING) fb_read()
762 if (info->fbops->fb_read) fb_read()
763 return info->fbops->fb_read(info, buf, count, ppos); fb_read()
765 total_size = info->screen_size; fb_read()
768 total_size = info->fix.smem_len; fb_read()
784 src = (u8 __iomem *) (info->screen_base + p); fb_read()
786 if (info->fbops->fb_sync) fb_read()
787 info->fbops->fb_sync(info); fb_read()
815 struct fb_info *info = file_fb_info(file); fb_write() local
821 if (!info || !info->screen_base) fb_write()
824 if (info->state != FBINFO_STATE_RUNNING) fb_write()
827 if (info->fbops->fb_write) fb_write()
828 return info->fbops->fb_write(info, buf, count, ppos); fb_write()
830 total_size = info->screen_size; fb_write()
833 total_size = info->fix.smem_len; fb_write()
855 dst = (u8 __iomem *) (info->screen_base + p); fb_write()
857 if (info->fbops->fb_sync) fb_write()
858 info->fbops->fb_sync(info); fb_write()
884 fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var) fb_pan_display() argument
886 struct fb_fix_screeninfo *fix = &info->fix; fb_pan_display()
887 unsigned int yres = info->var.yres; fb_pan_display()
904 if (err || !info->fbops->fb_pan_display || fb_pan_display()
905 var->yoffset > info->var.yres_virtual - yres || fb_pan_display()
906 var->xoffset > info->var.xres_virtual - info->var.xres) fb_pan_display()
909 if ((err = info->fbops->fb_pan_display(var, info))) fb_pan_display()
911 info->var.xoffset = var->xoffset; fb_pan_display()
912 info->var.yoffset = var->yoffset; fb_pan_display()
914 info->var.vmode |= FB_VMODE_YWRAP; fb_pan_display()
916 info->var.vmode &= ~FB_VMODE_YWRAP; fb_pan_display()
921 static int fb_check_caps(struct fb_info *info, struct fb_var_screeninfo *var, fb_check_caps() argument
931 event.info = info; fb_check_caps()
934 info->fbops->fb_get_caps(info, &fbcaps, var); fb_check_caps()
945 fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var) fb_set_var() argument
947 int flags = info->flags; fb_set_var()
954 fb_var_to_videomode(&mode2, &info->var); fb_set_var()
961 event.info = info; fb_set_var()
967 fb_delete_videomode(&mode1, &info->modelist); fb_set_var()
975 memcmp(&info->var, var, sizeof(struct fb_var_screeninfo))) { fb_set_var()
981 if ((info->fix.capabilities & FB_CAP_FOURCC) && fb_set_var()
992 if (!info->fbops->fb_check_var) { fb_set_var()
993 *var = info->var; fb_set_var()
997 ret = info->fbops->fb_check_var(var, info); fb_set_var()
1006 if (info->fbops->fb_get_caps) { fb_set_var()
1007 ret = fb_check_caps(info, var, activate); fb_set_var()
1013 old_var = info->var; fb_set_var()
1014 info->var = *var; fb_set_var()
1016 if (info->fbops->fb_set_par) { fb_set_var()
1017 ret = info->fbops->fb_set_par(info); fb_set_var()
1020 info->var = old_var; fb_set_var()
1028 fb_pan_display(info, &info->var); fb_set_var()
1029 fb_set_cmap(&info->cmap, info); fb_set_var()
1030 fb_var_to_videomode(&mode, &info->var); fb_set_var()
1032 if (info->modelist.prev && info->modelist.next && fb_set_var()
1033 !list_empty(&info->modelist)) fb_set_var()
1034 ret = fb_add_videomode(&mode, &info->modelist); fb_set_var()
1042 info->flags &= ~FBINFO_MISC_USEREVENT; fb_set_var()
1043 event.info = info; fb_set_var()
1056 fb_blank(struct fb_info *info, int blank) fb_blank() argument
1064 event.info = info; fb_blank()
1069 if (info->fbops->fb_blank) fb_blank()
1070 ret = info->fbops->fb_blank(blank, info); fb_blank()
1087 static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, do_fb_ioctl() argument
1102 if (!lock_fb_info(info)) do_fb_ioctl()
1104 var = info->var; do_fb_ioctl()
1105 unlock_fb_info(info); do_fb_ioctl()
1113 if (!lock_fb_info(info)) { do_fb_ioctl()
1117 info->flags |= FBINFO_MISC_USEREVENT; do_fb_ioctl()
1118 ret = fb_set_var(info, &var); do_fb_ioctl()
1119 info->flags &= ~FBINFO_MISC_USEREVENT; do_fb_ioctl()
1120 unlock_fb_info(info); do_fb_ioctl()
1126 if (!lock_fb_info(info)) do_fb_ioctl()
1128 fix = info->fix; do_fb_ioctl()
1129 unlock_fb_info(info); do_fb_ioctl()
1136 ret = fb_set_user_cmap(&cmap, info); do_fb_ioctl()
1141 if (!lock_fb_info(info)) do_fb_ioctl()
1143 cmap_from = info->cmap; do_fb_ioctl()
1144 unlock_fb_info(info); do_fb_ioctl()
1151 if (!lock_fb_info(info)) { do_fb_ioctl()
1155 ret = fb_pan_display(info, &var); do_fb_ioctl()
1156 unlock_fb_info(info); do_fb_ioctl()
1171 if (!lock_fb_info(info)) do_fb_ioctl()
1173 event.info = info; do_fb_ioctl()
1175 unlock_fb_info(info); do_fb_ioctl()
1193 if (!lock_fb_info(info)) { do_fb_ioctl()
1197 event.info = info; do_fb_ioctl()
1199 unlock_fb_info(info); do_fb_ioctl()
1204 if (!lock_fb_info(info)) { do_fb_ioctl()
1208 info->flags |= FBINFO_MISC_USEREVENT; do_fb_ioctl()
1209 ret = fb_blank(info, arg); do_fb_ioctl()
1210 info->flags &= ~FBINFO_MISC_USEREVENT; do_fb_ioctl()
1211 unlock_fb_info(info); do_fb_ioctl()
1215 if (!lock_fb_info(info)) do_fb_ioctl()
1217 fb = info->fbops; do_fb_ioctl()
1219 ret = fb->fb_ioctl(info, cmd, arg); do_fb_ioctl()
1222 unlock_fb_info(info); do_fb_ioctl()
1229 struct fb_info *info = file_fb_info(file); fb_ioctl() local
1231 if (!info) fb_ioctl()
1233 return do_fb_ioctl(info, cmd, arg); fb_ioctl()
1263 static int fb_getput_cmap(struct fb_info *info, unsigned int cmd, fb_getput_cmap() argument
1287 err = do_fb_ioctl(info, cmd, (unsigned long) cmap); fb_getput_cmap()
1331 static int fb_get_fscreeninfo(struct fb_info *info, unsigned int cmd, fb_get_fscreeninfo() argument
1343 err = do_fb_ioctl(info, cmd, (unsigned long) &fix); fb_get_fscreeninfo()
1355 struct fb_info *info = file_fb_info(file); fb_compat_ioctl() local
1359 if (!info) fb_compat_ioctl()
1361 fb = info->fbops; fb_compat_ioctl()
1370 ret = do_fb_ioctl(info, cmd, arg); fb_compat_ioctl()
1374 ret = fb_get_fscreeninfo(info, cmd, arg); fb_compat_ioctl()
1379 ret = fb_getput_cmap(info, cmd, arg); fb_compat_ioctl()
1384 ret = fb->fb_compat_ioctl(info, cmd, arg); fb_compat_ioctl()
1394 struct fb_info *info = file_fb_info(file); fb_mmap() local
1400 if (!info) fb_mmap()
1402 fb = info->fbops; fb_mmap()
1405 mutex_lock(&info->mm_lock); fb_mmap()
1408 res = fb->fb_mmap(info, vma); fb_mmap()
1409 mutex_unlock(&info->mm_lock); fb_mmap()
1417 start = info->fix.smem_start; fb_mmap()
1418 len = info->fix.smem_len; fb_mmap()
1421 if (info->var.accel_flags) { fb_mmap()
1422 mutex_unlock(&info->mm_lock); fb_mmap()
1427 start = info->fix.mmio_start; fb_mmap()
1428 len = info->fix.mmio_len; fb_mmap()
1430 mutex_unlock(&info->mm_lock); fb_mmap()
1440 __acquires(&info->lock)
1441 __releases(&info->lock)
1444 struct fb_info *info; variable in typeref:struct:fb_info
1447 info = get_fb_info(fbidx);
1448 if (!info) {
1450 info = get_fb_info(fbidx);
1451 if (!info)
1454 if (IS_ERR(info))
1455 return PTR_ERR(info);
1457 mutex_lock(&info->lock);
1458 if (!try_module_get(info->fbops->owner)) {
1462 file->private_data = info;
1463 if (info->fbops->fb_open) {
1464 res = info->fbops->fb_open(info,1);
1466 module_put(info->fbops->owner);
1469 if (info->fbdefio)
1470 fb_deferred_io_open(info, inode, file);
1473 mutex_unlock(&info->lock);
1475 put_fb_info(info); variable
1481 __acquires(&info->lock)
1482 __releases(&info->lock)
1484 struct fb_info * const info = file->private_data; variable
1486 mutex_lock(&info->lock);
1487 if (info->fbops->fb_release)
1488 info->fbops->fb_release(info,1);
1489 module_put(info->fbops->owner);
1490 mutex_unlock(&info->lock);
1491 put_fb_info(info); variable
1677 event.info = fb_info; do_register_framebuffer()
1705 event.info = fb_info; do_unregister_framebuffer()
1723 event.info = fb_info; do_unregister_framebuffer()
1728 /* this may free fb info */ do_unregister_framebuffer()
1764 * @fb_info: frame buffer info structure
1786 * @fb_info: frame buffer info structure
1815 * @info: framebuffer affected
1822 void fb_set_suspend(struct fb_info *info, int state) fb_set_suspend() argument
1826 event.info = info; fb_set_suspend()
1829 info->state = FBINFO_STATE_SUSPENDED; fb_set_suspend()
1831 info->state = FBINFO_STATE_RUNNING; fb_set_suspend()
1879 int fb_new_modelist(struct fb_info *info) fb_new_modelist() argument
1882 struct fb_var_screeninfo var = info->var; fb_new_modelist()
1888 list_for_each_safe(pos, n, &info->modelist) { fb_new_modelist()
1893 err = fb_set_var(info, &var); fb_new_modelist()
1903 if (!list_empty(&info->modelist)) { fb_new_modelist()
1904 event.info = info; fb_new_modelist()
/linux-4.1.27/arch/um/os-Linux/
H A Dtty.c21 struct grantpt_info *info = arg; grantpt_cb() local
23 info->res = grantpt(info->fd); grantpt_cb()
24 info->err = errno; grantpt_cb()
29 struct grantpt_info info; get_pty() local
40 info.fd = fd; get_pty()
41 initial_thread_cb(grantpt_cb, &info); get_pty()
43 if (info.res < 0) { get_pty()
44 err = -info.err; get_pty()
46 "errno = %d\n", -info.err); get_pty()
/linux-4.1.27/drivers/media/i2c/m5mols/
H A Dm5mols_controls.c133 int m5mols_do_scenemode(struct m5mols_info *info, u8 mode) m5mols_do_scenemode() argument
135 struct v4l2_subdev *sd = &info->sd; m5mols_do_scenemode()
142 ret = v4l2_ctrl_s_ctrl(info->lock_3a, 0); m5mols_do_scenemode()
163 if (!ret && is_available_af(info)) m5mols_do_scenemode()
165 if (!ret && is_available_af(info)) m5mols_do_scenemode()
172 ret = m5mols_set_mode(info, REG_CAPTURE); m5mols_do_scenemode()
184 ret = m5mols_set_mode(info, REG_MONITOR); m5mols_do_scenemode()
189 static int m5mols_3a_lock(struct m5mols_info *info, struct v4l2_ctrl *ctrl) m5mols_3a_lock() argument
197 ret = m5mols_write(&info->sd, AE_LOCK, ae_lock ? m5mols_3a_lock()
204 && info->auto_wb->val) { m5mols_3a_lock()
207 ret = m5mols_write(&info->sd, AWB_LOCK, awb_lock ? m5mols_3a_lock()
213 if (!info->ver.af || !af_lock) m5mols_3a_lock()
217 ret = m5mols_write(&info->sd, AF_EXECUTE, REG_AF_STOP); m5mols_3a_lock()
222 static int m5mols_set_metering_mode(struct m5mols_info *info, int mode) m5mols_set_metering_mode() argument
238 return m5mols_write(&info->sd, AE_MODE, metering); m5mols_set_metering_mode()
241 static int m5mols_set_exposure(struct m5mols_info *info, int exposure) m5mols_set_exposure() argument
243 struct v4l2_subdev *sd = &info->sd; m5mols_set_exposure()
248 info->lock_3a->val &= ~V4L2_LOCK_EXPOSURE; m5mols_set_exposure()
249 m5mols_3a_lock(info, info->lock_3a); m5mols_set_exposure()
251 ret = m5mols_set_metering_mode(info, info->metering->val); m5mols_set_exposure()
257 __func__, info->exposure_bias->val, m5mols_set_exposure()
258 info->metering->val); m5mols_set_exposure()
260 return m5mols_write(sd, AE_INDEX, info->exposure_bias->val); m5mols_set_exposure()
267 info->exposure->val); m5mols_set_exposure()
270 info->exposure->val); m5mols_set_exposure()
273 __func__, info->exposure->val); m5mols_set_exposure()
279 static int m5mols_set_white_balance(struct m5mols_info *info, int val) m5mols_set_white_balance() argument
293 struct v4l2_subdev *sd = &info->sd; m5mols_set_white_balance()
317 static int m5mols_set_saturation(struct m5mols_info *info, int val) m5mols_set_saturation() argument
319 int ret = m5mols_write(&info->sd, MON_CHROMA_LVL, val); m5mols_set_saturation()
323 return m5mols_write(&info->sd, MON_CHROMA_EN, REG_CHROMA_ON); m5mols_set_saturation()
326 static int m5mols_set_color_effect(struct m5mols_info *info, int val) m5mols_set_color_effect() argument
331 struct v4l2_subdev *sd = &info->sd; m5mols_set_color_effect()
368 static int m5mols_set_iso(struct m5mols_info *info, int auto_iso) m5mols_set_iso() argument
370 u32 iso = auto_iso ? 0 : info->iso->val + 1; m5mols_set_iso()
372 return m5mols_write(&info->sd, AE_ISO, iso); m5mols_set_iso()
375 static int m5mols_set_wdr(struct m5mols_info *info, int wdr) m5mols_set_wdr() argument
379 ret = m5mols_write(&info->sd, MON_TONE_CTL, wdr ? 9 : 5); m5mols_set_wdr()
383 ret = m5mols_set_mode(info, REG_CAPTURE); m5mols_set_wdr()
387 return m5mols_write(&info->sd, CAPP_WDR_EN, wdr); m5mols_set_wdr()
390 static int m5mols_set_stabilization(struct m5mols_info *info, int val) m5mols_set_stabilization() argument
392 struct v4l2_subdev *sd = &info->sd; m5mols_set_stabilization()
406 struct m5mols_info *info = to_m5mols(sd); m5mols_g_volatile_ctrl() local
411 __func__, ctrl->name, info->isp_ready); m5mols_g_volatile_ctrl()
413 if (!info->isp_ready) m5mols_g_volatile_ctrl()
422 info->iso->val = status - 1; m5mols_g_volatile_ctrl()
432 info->lock_3a->val |= V4L2_LOCK_EXPOSURE; m5mols_g_volatile_ctrl()
438 info->lock_3a->val |= V4L2_LOCK_EXPOSURE; m5mols_g_volatile_ctrl()
442 info->lock_3a->val |= V4L2_LOCK_EXPOSURE; m5mols_g_volatile_ctrl()
453 struct m5mols_info *info = to_m5mols(sd); m5mols_s_ctrl() local
454 int last_mode = info->mode; m5mols_s_ctrl()
461 if (!info->isp_ready) { m5mols_s_ctrl()
462 info->ctrl_sync = 0; m5mols_s_ctrl()
469 if (ctrl_mode && ctrl_mode != info->mode) { m5mols_s_ctrl()
470 ret = m5mols_set_mode(info, ctrl_mode); m5mols_s_ctrl()
477 ret = m5mols_3a_lock(info, ctrl); m5mols_s_ctrl()
485 ret = m5mols_set_exposure(info, ctrl->val); m5mols_s_ctrl()
489 ret = m5mols_set_iso(info, ctrl->val); m5mols_s_ctrl()
493 ret = m5mols_set_white_balance(info, ctrl->val); m5mols_s_ctrl()
497 ret = m5mols_set_saturation(info, ctrl->val); m5mols_s_ctrl()
501 ret = m5mols_set_color_effect(info, ctrl->val); m5mols_s_ctrl()
505 ret = m5mols_set_wdr(info, ctrl->val); m5mols_s_ctrl()
509 ret = m5mols_set_stabilization(info, ctrl->val); m5mols_s_ctrl()
517 if (ret == 0 && info->mode != last_mode) m5mols_s_ctrl()
518 ret = m5mols_set_mode(info, last_mode); m5mols_s_ctrl()
542 struct m5mols_info *info = to_m5mols(sd); m5mols_init_controls() local
552 zoom_step = is_manufacturer(info, REG_SAMSUNG_OPTICS) ? 31 : 1; m5mols_init_controls()
553 v4l2_ctrl_handler_init(&info->handle, 20); m5mols_init_controls()
555 info->auto_wb = v4l2_ctrl_new_std_menu(&info->handle, m5mols_init_controls()
560 info->auto_exposure = v4l2_ctrl_new_std_menu(&info->handle, m5mols_init_controls()
564 info->exposure = v4l2_ctrl_new_std(&info->handle, m5mols_init_controls()
568 info->exposure_bias = v4l2_ctrl_new_int_menu(&info->handle, m5mols_init_controls()
574 info->metering = v4l2_ctrl_new_std_menu(&info->handle, m5mols_init_controls()
579 info->auto_iso = v4l2_ctrl_new_std_menu(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
582 info->iso = v4l2_ctrl_new_int_menu(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
586 info->saturation = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
589 info->zoom = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
592 info->colorfx = v4l2_ctrl_new_std_menu(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
595 info->wdr = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
598 info->stabilization = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
601 info->jpeg_quality = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
604 info->lock_3a = v4l2_ctrl_new_std(&info->handle, &m5mols_ctrl_ops, m5mols_init_controls()
607 if (info->handle.error) { m5mols_init_controls()
608 int ret = info->handle.error; m5mols_init_controls()
610 v4l2_ctrl_handler_free(&info->handle); m5mols_init_controls()
614 v4l2_ctrl_auto_cluster(4, &info->auto_exposure, 1, false); m5mols_init_controls()
615 info->auto_iso->flags |= V4L2_CTRL_FLAG_VOLATILE | m5mols_init_controls()
617 v4l2_ctrl_auto_cluster(2, &info->auto_iso, 0, false); m5mols_init_controls()
619 info->lock_3a->flags |= V4L2_CTRL_FLAG_VOLATILE; m5mols_init_controls()
621 m5mols_set_ctrl_mode(info->auto_exposure, REG_PARAMETER); m5mols_init_controls()
622 m5mols_set_ctrl_mode(info->auto_wb, REG_PARAMETER); m5mols_init_controls()
623 m5mols_set_ctrl_mode(info->colorfx, REG_MONITOR); m5mols_init_controls()
625 sd->ctrl_handler = &info->handle; m5mols_init_controls()
/linux-4.1.27/drivers/tty/serial/
H A Dcrisv10.c159 static void change_speed(struct e100_serial *info);
168 static int get_lsr_info(struct e100_serial *info, unsigned int *value);
196 /* Values for info->errorcode */
201 #define FORCE_EOP(info) *R_SET_EOP = 1U << info->iseteop;
933 #define E100_RTS_GET(info) ((info)->rx_ctrl & E100_RTS_MASK)
935 #define E100_CTS_GET(info) ((info)->ioport[REG_STATUS] & E100_CTS_MASK)
939 #define E100_DTR_GET(info) ((*e100_modem_pins[(info)->line].dtr_shadow) & e100_modem_pins[(info)->line].dtr_mask)
942 #define E100_RI_GET(info) ((*e100_modem_pins[(info)->line].ri_port) & e100_modem_pins[(info)->line].ri_mask)
943 #define E100_CD_GET(info) ((*e100_modem_pins[(info)->line].cd_port) & e100_modem_pins[(info)->line].cd_mask)
946 #define E100_DSR_GET(info) ((*e100_modem_pins[(info)->line].dsr_port) & e100_modem_pins[(info)->line].dsr_mask)
949 static void update_char_time(struct e100_serial * info) update_char_time() argument
951 tcflag_t cflags = info->port.tty->termios.c_cflag; update_char_time()
968 info->char_time_usec = ((bits * 1000000) / info->baud) + 1; update_char_time()
969 info->flush_time_usec = 4*info->char_time_usec; update_char_time()
970 if (info->flush_time_usec < MIN_FLUSH_TIME_USEC) update_char_time()
971 info->flush_time_usec = MIN_FLUSH_TIME_USEC; update_char_time()
1034 e100_dtr(struct e100_serial *info, int set) e100_dtr() argument
1036 unsigned char mask = e100_modem_pins[info->line].dtr_mask; e100_dtr()
1039 printk("ser%i dtr %i mask: 0x%02X\n", info->line, set, mask); e100_dtr()
1041 info->line, *e100_modem_pins[info->line].dtr_shadow, e100_dtr()
1042 E100_DTR_GET(info)); e100_dtr()
1049 *e100_modem_pins[info->line].dtr_shadow &= ~mask; e100_dtr()
1050 *e100_modem_pins[info->line].dtr_shadow |= (set ? 0 : mask); e100_dtr()
1051 *e100_modem_pins[info->line].dtr_port = *e100_modem_pins[info->line].dtr_shadow; e100_dtr()
1057 info->line, *e100_modem_pins[info->line].dtr_shadow, e100_dtr()
1058 E100_DTR_GET(info)); e100_dtr()
1066 e100_rts(struct e100_serial *info, int set) e100_rts() argument
1070 info->rx_ctrl &= ~E100_RTS_MASK; e100_rts()
1071 info->rx_ctrl |= (set ? 0 : E100_RTS_MASK); /* RTS is active low */ e100_rts()
1072 info->ioport[REG_REC_CTRL] = info->rx_ctrl; e100_rts()
1075 printk("ser%i rts %i\n", info->line, set); e100_rts()
1082 e100_ri_out(struct e100_serial *info, int set) e100_ri_out() argument
1086 unsigned char mask = e100_modem_pins[info->line].ri_mask; e100_ri_out()
1090 *e100_modem_pins[info->line].ri_shadow &= ~mask; e100_ri_out()
1091 *e100_modem_pins[info->line].ri_shadow |= (set ? 0 : mask); e100_ri_out()
1092 *e100_modem_pins[info->line].ri_port = *e100_modem_pins[info->line].ri_shadow; e100_ri_out()
1097 e100_cd_out(struct e100_serial *info, int set) e100_cd_out() argument
1101 unsigned char mask = e100_modem_pins[info->line].cd_mask; e100_cd_out()
1105 *e100_modem_pins[info->line].cd_shadow &= ~mask; e100_cd_out()
1106 *e100_modem_pins[info->line].cd_shadow |= (set ? 0 : mask); e100_cd_out()
1107 *e100_modem_pins[info->line].cd_port = *e100_modem_pins[info->line].cd_shadow; e100_cd_out()
1113 e100_disable_rx(struct e100_serial *info) e100_disable_rx() argument
1116 info->ioport[REG_REC_CTRL] = e100_disable_rx()
1117 (info->rx_ctrl &= ~IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); e100_disable_rx()
1121 e100_enable_rx(struct e100_serial *info) e100_enable_rx() argument
1124 info->ioport[REG_REC_CTRL] = e100_enable_rx()
1125 (info->rx_ctrl |= IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); e100_enable_rx()
1131 e100_disable_rxdma_irq(struct e100_serial *info) e100_disable_rxdma_irq() argument
1134 printk("rxdma_irq(%d): 0\n",info->line); e100_disable_rxdma_irq()
1136 DINTR1(DEBUG_LOG(info->line,"IRQ disable_rxdma_irq %i\n", info->line)); e100_disable_rxdma_irq()
1137 *R_IRQ_MASK2_CLR = (info->irq << 2) | (info->irq << 3); e100_disable_rxdma_irq()
1141 e100_enable_rxdma_irq(struct e100_serial *info) e100_enable_rxdma_irq() argument
1144 printk("rxdma_irq(%d): 1\n",info->line); e100_enable_rxdma_irq()
1146 DINTR1(DEBUG_LOG(info->line,"IRQ enable_rxdma_irq %i\n", info->line)); e100_enable_rxdma_irq()
1147 *R_IRQ_MASK2_SET = (info->irq << 2) | (info->irq << 3); e100_enable_rxdma_irq()
1152 static void e100_disable_txdma_irq(struct e100_serial *info) e100_disable_txdma_irq() argument
1155 printk("txdma_irq(%d): 0\n",info->line); e100_disable_txdma_irq()
1157 DINTR1(DEBUG_LOG(info->line,"IRQ disable_txdma_irq %i\n", info->line)); e100_disable_txdma_irq()
1158 *R_IRQ_MASK2_CLR = info->irq; e100_disable_txdma_irq()
1161 static void e100_enable_txdma_irq(struct e100_serial *info) e100_enable_txdma_irq() argument
1164 printk("txdma_irq(%d): 1\n",info->line); e100_enable_txdma_irq()
1166 DINTR1(DEBUG_LOG(info->line,"IRQ enable_txdma_irq %i\n", info->line)); e100_enable_txdma_irq()
1167 *R_IRQ_MASK2_SET = info->irq; e100_enable_txdma_irq()
1170 static void e100_disable_txdma_channel(struct e100_serial *info) e100_disable_txdma_channel() argument
1178 DFLOW(DEBUG_LOG(info->line, "disable_txdma_channel %i\n", info->line)); e100_disable_txdma_channel()
1179 if (info->line == 0) { e100_disable_txdma_channel()
1185 } else if (info->line == 1) { e100_disable_txdma_channel()
1191 } else if (info->line == 2) { e100_disable_txdma_channel()
1197 } else if (info->line == 3) { e100_disable_txdma_channel()
1209 static void e100_enable_txdma_channel(struct e100_serial *info) e100_enable_txdma_channel() argument
1214 DFLOW(DEBUG_LOG(info->line, "enable_txdma_channel %i\n", info->line)); e100_enable_txdma_channel()
1216 if (info->line == 0) { e100_enable_txdma_channel()
1219 } else if (info->line == 1) { e100_enable_txdma_channel()
1222 } else if (info->line == 2) { e100_enable_txdma_channel()
1225 } else if (info->line == 3) { e100_enable_txdma_channel()
1233 static void e100_disable_rxdma_channel(struct e100_serial *info) e100_disable_rxdma_channel() argument
1241 if (info->line == 0) { e100_disable_rxdma_channel()
1247 } else if (info->line == 1) { e100_disable_rxdma_channel()
1253 } else if (info->line == 2) { e100_disable_rxdma_channel()
1259 } else if (info->line == 3) { e100_disable_rxdma_channel()
1271 static void e100_enable_rxdma_channel(struct e100_serial *info) e100_enable_rxdma_channel() argument
1277 if (info->line == 0) { e100_enable_rxdma_channel()
1280 } else if (info->line == 1) { e100_enable_rxdma_channel()
1283 } else if (info->line == 2) { e100_enable_rxdma_channel()
1286 } else if (info->line == 3) { e100_enable_rxdma_channel()
1299 e100_disable_serial_data_irq(struct e100_serial *info) e100_disable_serial_data_irq() argument
1302 printk("ser_irq(%d): 0\n",info->line); e100_disable_serial_data_irq()
1304 DINTR1(DEBUG_LOG(info->line,"IRQ disable data_irq %i\n", info->line)); e100_disable_serial_data_irq()
1305 *R_IRQ_MASK1_CLR = (1U << (8+2*info->line)); e100_disable_serial_data_irq()
1309 e100_enable_serial_data_irq(struct e100_serial *info) e100_enable_serial_data_irq() argument
1312 printk("ser_irq(%d): 1\n",info->line); e100_enable_serial_data_irq()
1314 (8+2*info->line), e100_enable_serial_data_irq()
1315 (1U << (8+2*info->line))); e100_enable_serial_data_irq()
1317 DINTR1(DEBUG_LOG(info->line,"IRQ enable data_irq %i\n", info->line)); e100_enable_serial_data_irq()
1318 *R_IRQ_MASK1_SET = (1U << (8+2*info->line)); e100_enable_serial_data_irq()
1323 e100_disable_serial_tx_ready_irq(struct e100_serial *info) e100_disable_serial_tx_ready_irq() argument
1326 printk("ser_tx_irq(%d): 0\n",info->line); e100_disable_serial_tx_ready_irq()
1328 DINTR1(DEBUG_LOG(info->line,"IRQ disable ready_irq %i\n", info->line)); e100_disable_serial_tx_ready_irq()
1329 *R_IRQ_MASK1_CLR = (1U << (8+1+2*info->line)); e100_disable_serial_tx_ready_irq()
1333 e100_enable_serial_tx_ready_irq(struct e100_serial *info) e100_enable_serial_tx_ready_irq() argument
1336 printk("ser_tx_irq(%d): 1\n",info->line); e100_enable_serial_tx_ready_irq()
1338 (8+1+2*info->line), e100_enable_serial_tx_ready_irq()
1339 (1U << (8+1+2*info->line))); e100_enable_serial_tx_ready_irq()
1341 DINTR2(DEBUG_LOG(info->line,"IRQ enable ready_irq %i\n", info->line)); e100_enable_serial_tx_ready_irq()
1342 *R_IRQ_MASK1_SET = (1U << (8+1+2*info->line)); e100_enable_serial_tx_ready_irq()
1345 static inline void e100_enable_rx_irq(struct e100_serial *info) e100_enable_rx_irq() argument
1347 if (info->uses_dma_in) e100_enable_rx_irq()
1348 e100_enable_rxdma_irq(info); e100_enable_rx_irq()
1350 e100_enable_serial_data_irq(info); e100_enable_rx_irq()
1352 static inline void e100_disable_rx_irq(struct e100_serial *info) e100_disable_rx_irq() argument
1354 if (info->uses_dma_in) e100_disable_rx_irq()
1355 e100_disable_rxdma_irq(info); e100_disable_rx_irq()
1357 e100_disable_serial_data_irq(info); e100_disable_rx_irq()
1365 struct e100_serial * info = (struct e100_serial *)tty->driver_data; e100_enable_rs485() local
1381 info->rs485 = *r; e100_enable_rs485()
1384 if (info->rs485.delay_rts_before_send >= 1000) e100_enable_rs485()
1385 info->rs485.delay_rts_before_send = 1000; e100_enable_rs485()
1388 info->rs485.rts_on_send, e100_enable_rs485()
1389 info->rs485.rts_after_sent, e100_enable_rs485()
1390 info->rs485.enabled e100_enable_rs485()
1400 struct e100_serial * info = (struct e100_serial *)tty->driver_data; e100_write_rs485() local
1401 int old_value = (info->rs485.flags) & SER_RS485_ENABLED; e100_write_rs485()
1408 info->rs485.flags |= SER_RS485_ENABLED; e100_write_rs485()
1412 info->rs485.flags &= ~(SER_RS485_ENABLED); e100_write_rs485()
1420 struct e100_serial *info = (struct e100_serial *)data; rs485_toggle_rts_timer_function() local
1422 fast_timers_rs485[info->line].function = NULL; rs485_toggle_rts_timer_function()
1423 e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND)); rs485_toggle_rts_timer_function()
1425 e100_enable_rx(info); rs485_toggle_rts_timer_function()
1426 e100_enable_rx_irq(info); rs485_toggle_rts_timer_function()
1444 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_stop() local
1445 if (info) { rs_stop()
1450 DFLOW(DEBUG_LOG(info->line, "XOFF rs_stop xmit %i\n", rs_stop()
1451 CIRC_CNT(info->xmit.head, rs_stop()
1452 info->xmit.tail,SERIAL_XMIT_SIZE))); rs_stop()
1455 STOP_CHAR(info->port.tty)); rs_stop()
1461 *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; rs_stop()
1469 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_start() local
1470 if (info) { rs_start()
1475 DFLOW(DEBUG_LOG(info->line, "XOFF rs_start xmit %i\n", rs_start()
1476 CIRC_CNT(info->xmit.head, rs_start()
1477 info->xmit.tail,SERIAL_XMIT_SIZE))); rs_start()
1484 *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; rs_start()
1485 if (!info->uses_dma_out && rs_start()
1486 info->xmit.head != info->xmit.tail && info->xmit.buf) rs_start()
1487 e100_enable_serial_tx_ready_irq(info); rs_start()
1518 static void rs_sched_event(struct e100_serial *info, int event) rs_sched_event() argument
1520 if (info->event & (1 << event)) rs_sched_event()
1522 info->event |= 1 << event; rs_sched_event()
1523 schedule_work(&info->work); rs_sched_event()
1528 * We don't pay attention to info->x_char, which means if the TTY wants to
1529 * use XON/XOFF it will set info->x_char but we won't send any X char!
1538 transmit_chars_dma(struct e100_serial *info) transmit_chars_dma() argument
1544 *info->oclrintradr = transmit_chars_dma()
1549 if (info->line == SERIAL_DEBUG_LINE) transmit_chars_dma()
1552 if (!info->tr_running) { transmit_chars_dma()
1558 descr = &info->tr_descr; transmit_chars_dma()
1570 DFLOW(DEBUG_LOG(info->line, "TX %i done\n", sentl)); transmit_chars_dma()
1573 info->icount.tx += sentl; transmit_chars_dma()
1576 info->xmit.tail = (info->xmit.tail + sentl) & (SERIAL_XMIT_SIZE - 1); transmit_chars_dma()
1580 if (CIRC_CNT(info->xmit.head, transmit_chars_dma()
1581 info->xmit.tail, transmit_chars_dma()
1583 rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); transmit_chars_dma()
1587 c = CIRC_CNT_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); transmit_chars_dma()
1598 info->tr_running = 0; transmit_chars_dma()
1601 if (info->rs485.flags & SER_RS485_ENABLED) { transmit_chars_dma()
1603 start_one_shot_timer(&fast_timers_rs485[info->line], transmit_chars_dma()
1605 (unsigned long)info, transmit_chars_dma()
1606 info->char_time_usec*2, transmit_chars_dma()
1613 /* ok we can schedule a dma send of c chars starting at info->xmit.tail */ transmit_chars_dma()
1615 DFLOW(DEBUG_LOG(info->line, "TX %i\n", c)); transmit_chars_dma()
1618 descr->buf = virt_to_phys(info->xmit.buf + info->xmit.tail); transmit_chars_dma()
1621 *info->ofirstadr = virt_to_phys(descr); /* write to R_DMAx_FIRST */ transmit_chars_dma()
1622 *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start); transmit_chars_dma()
1628 start_transmit(struct e100_serial *info) start_transmit() argument
1631 if (info->line == SERIAL_DEBUG_LINE) start_transmit()
1635 info->tr_descr.sw_len = 0; start_transmit()
1636 info->tr_descr.hw_len = 0; start_transmit()
1637 info->tr_descr.status = 0; start_transmit()
1638 info->tr_running = 1; start_transmit()
1639 if (info->uses_dma_out) start_transmit()
1640 transmit_chars_dma(info); start_transmit()
1642 e100_enable_serial_tx_ready_irq(info); start_transmit()
1649 #define START_FLUSH_FAST_TIMER_TIME(info, string, usec) {\
1652 if (fast_timers[info->line].function == NULL) { \
1654 TIMERD(DEBUG_LOG(info->line, "start_timer %i ", info->line)); \
1655 TIMERD(DEBUG_LOG(info->line, "num started: %i\n", serial_fast_timer_started)); \
1656 start_one_shot_timer(&fast_timers[info->line], \
1658 (unsigned long)info, \
1663 TIMERD(DEBUG_LOG(info->line, "timer %i already running\n", info->line)); \
1667 #define START_FLUSH_FAST_TIMER(info, string) START_FLUSH_FAST_TIMER_TIME(info, string, info->flush_time_usec)
1670 #define START_FLUSH_FAST_TIMER_TIME(info, string, usec)
1671 #define START_FLUSH_FAST_TIMER(info, string)
1690 append_recv_buffer(struct e100_serial *info, struct etrax_recv_buffer *buffer) append_recv_buffer() argument
1696 if (!info->first_recv_buffer) append_recv_buffer()
1697 info->first_recv_buffer = buffer; append_recv_buffer()
1699 info->last_recv_buffer->next = buffer; append_recv_buffer()
1701 info->last_recv_buffer = buffer; append_recv_buffer()
1703 info->recv_cnt += buffer->length; append_recv_buffer()
1704 if (info->recv_cnt > info->max_recv_cnt) append_recv_buffer()
1705 info->max_recv_cnt = info->recv_cnt; append_recv_buffer()
1711 add_char_and_flag(struct e100_serial *info, unsigned char data, unsigned char flag) add_char_and_flag() argument
1714 if (info->uses_dma_in) { add_char_and_flag()
1722 append_recv_buffer(info, buffer); add_char_and_flag()
1724 info->icount.rx++; add_char_and_flag()
1726 tty_insert_flip_char(&info->port, data, flag); add_char_and_flag()
1727 info->icount.rx++; add_char_and_flag()
1733 static unsigned int handle_descr_data(struct e100_serial *info, handle_descr_data() argument
1739 if (info->recv_cnt + recvl > 65536) { handle_descr_data()
1747 if (info->errorcode == ERRCODE_SET_BREAK) handle_descr_data()
1749 info->errorcode = 0; handle_descr_data()
1751 append_recv_buffer(info, buffer); handle_descr_data()
1761 static unsigned int handle_all_descr_data(struct e100_serial *info) handle_all_descr_data() argument
1769 descr = &info->rec_descr[info->cur_rec_descr]; handle_all_descr_data()
1771 if (descr == phys_to_virt(*info->idescradr)) handle_all_descr_data()
1774 if (++info->cur_rec_descr == SERIAL_RECV_DESCRIPTORS) handle_all_descr_data()
1775 info->cur_rec_descr = 0; handle_all_descr_data()
1790 DFLOW( DEBUG_LOG(info->line, "RX %lu\n", recvl); handle_all_descr_data()
1791 if (info->port.tty->stopped) { handle_all_descr_data()
1793 DEBUG_LOG(info->line, "rx 0x%02X\n", buf[0]); handle_all_descr_data()
1794 DEBUG_LOG(info->line, "rx 0x%02X\n", buf[1]); handle_all_descr_data()
1795 DEBUG_LOG(info->line, "rx 0x%02X\n", buf[2]); handle_all_descr_data()
1800 info->icount.rx += recvl; handle_all_descr_data()
1802 ret += handle_descr_data(info, descr, recvl); handle_all_descr_data()
1808 static void receive_chars_dma(struct e100_serial *info) receive_chars_dma() argument
1814 *info->iclrintradr = receive_chars_dma()
1818 tty = info->port.tty; receive_chars_dma()
1823 if (info->uses_dma_in) receive_chars_dma()
1824 e100_enable_serial_data_irq(info); receive_chars_dma()
1827 if (info->errorcode == ERRCODE_INSERT_BREAK) receive_chars_dma()
1828 add_char_and_flag(info, '\0', TTY_BREAK); receive_chars_dma()
1830 handle_all_descr_data(info); receive_chars_dma()
1833 rstat = info->ioport[REG_STATUS]; receive_chars_dma()
1835 DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat)); receive_chars_dma()
1842 unsigned char data = info->ioport[REG_DATA]; receive_chars_dma()
1844 PROCSTAT(ser_stat[info->line].errors_cnt++); receive_chars_dma()
1845 DEBUG_LOG(info->line, "#dERR: s d 0x%04X\n", receive_chars_dma()
1849 add_char_and_flag(info, data, TTY_PARITY); receive_chars_dma()
1851 add_char_and_flag(info, data, TTY_OVERRUN); receive_chars_dma()
1853 add_char_and_flag(info, data, TTY_FRAME); receive_chars_dma()
1856 START_FLUSH_FAST_TIMER(info, "receive_chars"); receive_chars_dma()
1859 *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart); receive_chars_dma()
1862 static int start_recv_dma(struct e100_serial *info) start_recv_dma() argument
1864 struct etrax_dma_descr *descr = info->rec_descr; start_recv_dma()
1885 info->cur_rec_descr = 0; start_recv_dma()
1888 *info->ifirstadr = virt_to_phys(&descr[info->cur_rec_descr]); start_recv_dma()
1889 *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start); start_recv_dma()
1896 start_receive(struct e100_serial *info) start_receive() argument
1898 if (info->uses_dma_in) { start_receive()
1901 *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); start_receive()
1902 while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) == start_receive()
1905 start_recv_dma(info); start_receive()
1913 info->irq is the bit number for the DMAO_DESCR so to check the others we
1914 shift info->irq to the left.
1925 struct e100_serial *info; tr_interrupt() local
1935 info = rs_table + i; tr_interrupt()
1936 if (!info->enabled || !info->uses_dma_out) tr_interrupt()
1939 if (ireg & info->irq) { tr_interrupt()
1942 DINTR2(DEBUG_LOG(info->line, "tr_interrupt %i\n", i)); tr_interrupt()
1946 PROCSTAT(ser_stat[info->line].tx_dma_ints++); tr_interrupt()
1947 info->last_tx_active_usec = GET_JIFFIES_USEC(); tr_interrupt()
1948 info->last_tx_active = jiffies; tr_interrupt()
1949 transmit_chars_dma(info); tr_interrupt()
1953 status lines and if so call status_handle(info) */ tr_interrupt()
1963 struct e100_serial *info; rec_interrupt() local
1973 info = rs_table + i; rec_interrupt()
1974 if (!info->enabled || !info->uses_dma_in) rec_interrupt()
1977 if (ireg & ((info->irq << 2) | (info->irq << 3))) { rec_interrupt()
1980 receive_chars_dma(info); rec_interrupt()
1984 status lines and if so call status_handle(info) */ rec_interrupt()
1989 static int force_eop_if_needed(struct e100_serial *info) force_eop_if_needed() argument
1994 unsigned char rstat = info->ioport[REG_STATUS]; force_eop_if_needed()
2003 DEBUG_LOG(info->line, "timeout err: rstat 0x%03X\n", force_eop_if_needed()
2004 rstat | (info->line << 8)); force_eop_if_needed()
2010 TIMERD(DEBUG_LOG(info->line, "timeout: rstat 0x%03X\n", force_eop_if_needed()
2011 rstat | (info->line << 8))); force_eop_if_needed()
2013 (void)info->ioport[REG_DATA]; force_eop_if_needed()
2015 info->forced_eop = 0; force_eop_if_needed()
2016 START_FLUSH_FAST_TIMER(info, "magic"); force_eop_if_needed()
2023 if (!info->forced_eop) { force_eop_if_needed()
2024 info->forced_eop = 1; force_eop_if_needed()
2025 PROCSTAT(ser_stat[info->line].timeout_flush_cnt++); force_eop_if_needed()
2026 TIMERD(DEBUG_LOG(info->line, "timeout EOP %i\n", info->line)); force_eop_if_needed()
2027 FORCE_EOP(info); force_eop_if_needed()
2033 static void flush_to_flip_buffer(struct e100_serial *info) flush_to_flip_buffer() argument
2040 while ((buffer = info->first_recv_buffer) != NULL) { flush_to_flip_buffer()
2043 tty_insert_flip_string(&info->port, buffer->buffer, count); flush_to_flip_buffer()
2044 info->recv_cnt -= count; flush_to_flip_buffer()
2047 info->first_recv_buffer = buffer->next; flush_to_flip_buffer()
2056 if (!info->first_recv_buffer) flush_to_flip_buffer()
2057 info->last_recv_buffer = NULL; flush_to_flip_buffer()
2062 tty_flip_buffer_push(&info->port); flush_to_flip_buffer()
2065 static void check_flush_timeout(struct e100_serial *info) check_flush_timeout() argument
2068 flush_to_flip_buffer(info); check_flush_timeout()
2072 if (info->first_recv_buffer) check_flush_timeout()
2073 START_FLUSH_FAST_TIMER_TIME(info, "flip", 2000); check_flush_timeout()
2079 force_eop_if_needed(info); check_flush_timeout()
2085 struct e100_serial *info = (struct e100_serial *)data; flush_timeout_function() local
2087 fast_timers[info->line].function = NULL; flush_timeout_function()
2089 TIMERD(DEBUG_LOG(info->line, "flush_timeout %i ", info->line)); flush_timeout_function()
2090 TIMERD(DEBUG_LOG(info->line, "num expired: %i\n", serial_fast_timer_expired)); flush_timeout_function()
2091 check_flush_timeout(info); flush_timeout_function()
2106 struct e100_serial *info; timed_flush_handler() local
2110 info = rs_table + i; timed_flush_handler()
2111 if (info->uses_dma_in) timed_flush_handler()
2112 check_flush_timeout(info); timed_flush_handler()
2150 we set info->errorcode = ERRCODE_INSERT_BREAK, but we can't really
2170 we set info->errorcode = ERRCODE_SET_BREAK so the receive interrupt
2173 and we set info->errorcode = ERRCODE_INSERT_BREAK.
2179 info->errorcode = ERRCODE_SET_BREAK.
2190 static void handle_ser_rx_interrupt_no_dma(struct e100_serial *info) handle_ser_rx_interrupt_no_dma() argument
2195 data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]); handle_ser_rx_interrupt_no_dma()
2198 DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); handle_ser_rx_interrupt_no_dma()
2200 DINTR2(DEBUG_LOG(info->line, "ser_rx %c\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read))); handle_ser_rx_interrupt_no_dma()
2206 info->last_rx_active_usec = GET_JIFFIES_USEC(); handle_ser_rx_interrupt_no_dma()
2207 info->last_rx_active = jiffies; handle_ser_rx_interrupt_no_dma()
2208 DINTR1(DEBUG_LOG(info->line, "ser_rx err stat_data %04X\n", data_read)); handle_ser_rx_interrupt_no_dma()
2223 if (!info->break_detected_cnt) { handle_ser_rx_interrupt_no_dma()
2224 DEBUG_LOG(info->line, "#BRK start\n", 0); handle_ser_rx_interrupt_no_dma()
2234 DEBUG_LOG(info->line, "# BL BRK\n", 0); handle_ser_rx_interrupt_no_dma()
2235 info->errorcode = ERRCODE_INSERT_BREAK; handle_ser_rx_interrupt_no_dma()
2237 info->break_detected_cnt++; handle_ser_rx_interrupt_no_dma()
2242 if (info->break_detected_cnt) { handle_ser_rx_interrupt_no_dma()
2243 DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt); handle_ser_rx_interrupt_no_dma()
2244 info->errorcode = ERRCODE_INSERT_BREAK; handle_ser_rx_interrupt_no_dma()
2249 if (info->errorcode == ERRCODE_INSERT_BREAK) { handle_ser_rx_interrupt_no_dma()
2250 tty_insert_flip_char(&info->port, 0, flag); handle_ser_rx_interrupt_no_dma()
2251 info->icount.rx++; handle_ser_rx_interrupt_no_dma()
2255 info->icount.parity++; handle_ser_rx_interrupt_no_dma()
2258 info->icount.overrun++; handle_ser_rx_interrupt_no_dma()
2261 info->icount.frame++; handle_ser_rx_interrupt_no_dma()
2264 tty_insert_flip_char(&info->port, data, flag); handle_ser_rx_interrupt_no_dma()
2265 info->errorcode = 0; handle_ser_rx_interrupt_no_dma()
2267 info->break_detected_cnt = 0; handle_ser_rx_interrupt_no_dma()
2280 tty_insert_flip_char(&info->port, handle_ser_rx_interrupt_no_dma()
2284 DEBUG_LOG(info->line, "ser_rx int but no data_avail %08lX\n", data_read); handle_ser_rx_interrupt_no_dma()
2288 info->icount.rx++; handle_ser_rx_interrupt_no_dma()
2289 data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]); handle_ser_rx_interrupt_no_dma()
2291 DEBUG_LOG(info->line, "ser_rx %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read)); handle_ser_rx_interrupt_no_dma()
2295 tty_flip_buffer_push(&info->port); handle_ser_rx_interrupt_no_dma()
2298 static void handle_ser_rx_interrupt(struct e100_serial *info) handle_ser_rx_interrupt() argument
2305 /* DEBUG_LOG(info->line, "ser_interrupt stat %03X\n", rstat | (i << 8)); */ handle_ser_rx_interrupt()
2306 if (!info->uses_dma_in) { handle_ser_rx_interrupt()
2307 handle_ser_rx_interrupt_no_dma(info); handle_ser_rx_interrupt()
2311 rstat = info->ioport[REG_STATUS]; handle_ser_rx_interrupt()
2313 DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); handle_ser_rx_interrupt()
2319 info->last_rx_active_usec = GET_JIFFIES_USEC(); handle_ser_rx_interrupt()
2320 info->last_rx_active = jiffies; handle_ser_rx_interrupt()
2324 data = info->ioport[REG_DATA]; handle_ser_rx_interrupt()
2325 DINTR1(DEBUG_LOG(info->line, "ser_rx! %c\n", data)); handle_ser_rx_interrupt()
2326 DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat)); handle_ser_rx_interrupt()
2332 if (!info->break_detected_cnt) { handle_ser_rx_interrupt()
2333 DEBUG_LOG(info->line, "#BRK start\n", 0); handle_ser_rx_interrupt()
2343 DEBUG_LOG(info->line, "# BL BRK\n", 0); handle_ser_rx_interrupt()
2344 info->errorcode = ERRCODE_INSERT_BREAK; handle_ser_rx_interrupt()
2346 info->break_detected_cnt++; handle_ser_rx_interrupt()
2351 if (info->break_detected_cnt) { handle_ser_rx_interrupt()
2352 DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt); handle_ser_rx_interrupt()
2353 info->errorcode = ERRCODE_INSERT_BREAK; handle_ser_rx_interrupt()
2355 if (info->errorcode == ERRCODE_INSERT_BREAK) { handle_ser_rx_interrupt()
2356 info->icount.brk++; handle_ser_rx_interrupt()
2357 add_char_and_flag(info, '\0', TTY_BREAK); handle_ser_rx_interrupt()
2361 info->icount.parity++; handle_ser_rx_interrupt()
2362 add_char_and_flag(info, data, TTY_PARITY); handle_ser_rx_interrupt()
2364 info->icount.overrun++; handle_ser_rx_interrupt()
2365 add_char_and_flag(info, data, TTY_OVERRUN); handle_ser_rx_interrupt()
2367 info->icount.frame++; handle_ser_rx_interrupt()
2368 add_char_and_flag(info, data, TTY_FRAME); handle_ser_rx_interrupt()
2371 info->errorcode = 0; handle_ser_rx_interrupt()
2373 info->break_detected_cnt = 0; handle_ser_rx_interrupt()
2374 DEBUG_LOG(info->line, "#iERR s d %04X\n", handle_ser_rx_interrupt()
2377 PROCSTAT(ser_stat[info->line].early_errors_cnt++); handle_ser_rx_interrupt()
2382 if (info->break_detected_cnt) { handle_ser_rx_interrupt()
2389 (curr_time - info->last_rx_active) * (1000000/HZ) + handle_ser_rx_interrupt()
2390 curr_time_u - info->last_rx_active_usec; handle_ser_rx_interrupt()
2391 if (elapsed_usec < 2*info->char_time_usec) { handle_ser_rx_interrupt()
2392 DEBUG_LOG(info->line, "FBRK %i\n", info->line); handle_ser_rx_interrupt()
2396 info->errorcode = ERRCODE_SET_BREAK; handle_ser_rx_interrupt()
2398 DEBUG_LOG(info->line, "Not end of BRK (V)%i\n", info->line); handle_ser_rx_interrupt()
2400 DEBUG_LOG(info->line, "num brk %i\n", info->break_detected_cnt); handle_ser_rx_interrupt()
2406 e100_disable_serial_data_irq(info); handle_ser_rx_interrupt()
2407 DINTR2(DEBUG_LOG(info->line, "ser_rx OK %d\n", info->line)); handle_ser_rx_interrupt()
2408 info->break_detected_cnt = 0; handle_ser_rx_interrupt()
2410 PROCSTAT(ser_stat[info->line].ser_ints_ok_cnt++); handle_ser_rx_interrupt()
2413 *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart); handle_ser_rx_interrupt()
2414 START_FLUSH_FAST_TIMER(info, "ser_int"); handle_ser_rx_interrupt()
2417 static void handle_ser_tx_interrupt(struct e100_serial *info) handle_ser_tx_interrupt() argument
2421 if (info->x_char) { handle_ser_tx_interrupt()
2423 DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char)); handle_ser_tx_interrupt()
2425 rstat = info->ioport[REG_STATUS]; handle_ser_tx_interrupt()
2426 DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); handle_ser_tx_interrupt()
2428 info->ioport[REG_TR_DATA] = info->x_char; handle_ser_tx_interrupt()
2429 info->icount.tx++; handle_ser_tx_interrupt()
2430 info->x_char = 0; handle_ser_tx_interrupt()
2432 e100_enable_serial_tx_ready_irq(info); handle_ser_tx_interrupt()
2436 if (info->uses_dma_out) { handle_ser_tx_interrupt()
2440 DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0)); handle_ser_tx_interrupt()
2442 rstat = info->ioport[REG_STATUS]; handle_ser_tx_interrupt()
2443 DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); handle_ser_tx_interrupt()
2444 e100_disable_serial_tx_ready_irq(info); handle_ser_tx_interrupt()
2445 if (info->port.tty->stopped) handle_ser_tx_interrupt()
2446 rs_stop(info->port.tty); handle_ser_tx_interrupt()
2448 e100_enable_txdma_channel(info); handle_ser_tx_interrupt()
2453 *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, continue); handle_ser_tx_interrupt()
2458 if (info->xmit.head == info->xmit.tail handle_ser_tx_interrupt()
2459 || info->port.tty->stopped) { handle_ser_tx_interrupt()
2460 DFLOW(DEBUG_LOG(info->line, "tx_int: stopped %i\n", handle_ser_tx_interrupt()
2461 info->port.tty->stopped)); handle_ser_tx_interrupt()
2462 e100_disable_serial_tx_ready_irq(info); handle_ser_tx_interrupt()
2463 info->tr_running = 0; handle_ser_tx_interrupt()
2466 DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail])); handle_ser_tx_interrupt()
2469 info->ioport[REG_TR_DATA] = info->xmit.buf[info->xmit.tail]; handle_ser_tx_interrupt()
2470 info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1); handle_ser_tx_interrupt()
2471 info->icount.tx++; handle_ser_tx_interrupt()
2472 if (info->xmit.head == info->xmit.tail) { handle_ser_tx_interrupt()
2474 if (info->rs485.flags & SER_RS485_ENABLED) { handle_ser_tx_interrupt()
2476 start_one_shot_timer(&fast_timers_rs485[info->line], handle_ser_tx_interrupt()
2478 (unsigned long)info, handle_ser_tx_interrupt()
2479 info->char_time_usec*2, handle_ser_tx_interrupt()
2483 info->last_tx_active_usec = GET_JIFFIES_USEC(); handle_ser_tx_interrupt()
2484 info->last_tx_active = jiffies; handle_ser_tx_interrupt()
2485 e100_disable_serial_tx_ready_irq(info); handle_ser_tx_interrupt()
2486 info->tr_running = 0; handle_ser_tx_interrupt()
2487 DFLOW(DEBUG_LOG(info->line, "tx_int: stop2\n", 0)); handle_ser_tx_interrupt()
2490 e100_enable_serial_tx_ready_irq(info); handle_ser_tx_interrupt()
2494 if (CIRC_CNT(info->xmit.head, handle_ser_tx_interrupt()
2495 info->xmit.tail, handle_ser_tx_interrupt()
2497 rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); handle_ser_tx_interrupt()
2509 struct e100_serial *info; ser_interrupt() local
2520 info = rs_table; ser_interrupt()
2526 handle_ser_rx_interrupt(info); ser_interrupt()
2528 info += 1; ser_interrupt()
2564 info = rs_table; ser_interrupt()
2569 handle_ser_tx_interrupt(info); ser_interrupt()
2571 info += 1; ser_interrupt()
2618 struct e100_serial *info; do_softint() local
2621 info = container_of(work, struct e100_serial, work); do_softint()
2623 tty = info->port.tty; do_softint()
2627 if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) do_softint()
2632 startup(struct e100_serial * info) startup() argument
2646 if (info->port.flags & ASYNC_INITIALIZED) { startup()
2652 if (info->xmit.buf) startup()
2655 info->xmit.buf = (unsigned char *) xmit_page; startup()
2658 printk("starting up ttyS%d (xmit_buf 0x%p)...\n", info->line, info->xmit.buf); startup()
2670 if (info->dma_in_enabled) { startup()
2671 info->uses_dma_in = 1; startup()
2672 e100_enable_rxdma_channel(info); startup()
2674 *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); startup()
2677 while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) == startup()
2681 *info->iclrintradr = startup()
2685 e100_disable_rxdma_channel(info); startup()
2688 if (info->dma_out_enabled) { startup()
2689 info->uses_dma_out = 1; startup()
2690 e100_enable_txdma_channel(info); startup()
2691 *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); startup()
2693 while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) == startup()
2697 *info->oclrintradr = startup()
2701 e100_disable_txdma_channel(info); startup()
2704 if (info->port.tty) startup()
2705 clear_bit(TTY_IO_ERROR, &info->port.tty->flags); startup()
2707 info->xmit.head = info->xmit.tail = 0; startup()
2708 info->first_recv_buffer = info->last_recv_buffer = NULL; startup()
2709 info->recv_cnt = info->max_recv_cnt = 0; startup()
2712 info->rec_descr[i].buf = 0; startup()
2719 e100_enable_serial_data_irq(info); startup()
2721 change_speed(info); startup()
2725 (void)info->ioport[REG_DATA]; startup()
2728 if (info->uses_dma_out) startup()
2729 e100_enable_txdma_irq(info); startup()
2731 e100_enable_rx_irq(info); startup()
2733 info->tr_running = 0; /* to be sure we don't lock up the transmitter */ startup()
2737 start_receive(info); startup()
2741 info->tr_descr.sw_len = 0; startup()
2742 info->tr_descr.hw_len = 0; startup()
2743 info->tr_descr.status = 0; startup()
2747 e100_rts(info, 1); startup()
2748 e100_dtr(info, 1); startup()
2750 info->port.flags |= ASYNC_INITIALIZED; startup()
2761 shutdown(struct e100_serial * info) shutdown() argument
2764 struct etrax_dma_descr *descr = info->rec_descr; shutdown()
2769 DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line)); shutdown()
2770 e100_disable_rx(info); shutdown()
2771 info->ioport[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40); shutdown()
2774 if (info->uses_dma_in) { shutdown()
2775 e100_disable_rxdma_irq(info); shutdown()
2776 *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); shutdown()
2777 info->uses_dma_in = 0; shutdown()
2779 e100_disable_serial_data_irq(info); shutdown()
2782 if (info->uses_dma_out) { shutdown()
2783 e100_disable_txdma_irq(info); shutdown()
2784 info->tr_running = 0; shutdown()
2785 *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); shutdown()
2786 info->uses_dma_out = 0; shutdown()
2788 e100_disable_serial_tx_ready_irq(info); shutdown()
2789 info->tr_running = 0; shutdown()
2792 if (!(info->port.flags & ASYNC_INITIALIZED)) shutdown()
2796 printk("Shutting down serial port %d (irq %d)....\n", info->line, shutdown()
2797 info->irq); shutdown()
2802 if (info->xmit.buf) { shutdown()
2803 free_page((unsigned long)info->xmit.buf); shutdown()
2804 info->xmit.buf = NULL; shutdown()
2814 if (!info->port.tty || (info->port.tty->termios.c_cflag & HUPCL)) { shutdown()
2816 e100_dtr(info, 0); shutdown()
2817 e100_rts(info, 0); /* could check CRTSCTS before doing this */ shutdown()
2820 if (info->port.tty) shutdown()
2821 set_bit(TTY_IO_ERROR, &info->port.tty->flags); shutdown()
2823 info->port.flags &= ~ASYNC_INITIALIZED; shutdown()
2831 change_speed(struct e100_serial *info) change_speed() argument
2838 if (!info->port.tty) change_speed()
2840 if (!info->ioport) change_speed()
2843 cflag = info->port.tty->termios.c_cflag; change_speed()
2848 if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) { change_speed()
2850 u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */ change_speed()
2856 (unsigned long)info->baud_base, info->custom_divisor)); change_speed()
2857 if (info->baud_base == SERIAL_PRESCALE_BASE) { change_speed()
2859 u16 divisor = info->custom_divisor; change_speed()
2868 info->baud = SERIAL_PRESCALE_BASE/divisor; change_speed()
2871 else if ((info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8 && change_speed()
2872 info->custom_divisor == 1) || change_speed()
2873 (info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ && change_speed()
2874 info->custom_divisor == 8)) { change_speed()
2880 info->baud = CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8; change_speed()
2889 (unsigned long)info->baud_base, info->custom_divisor); change_speed()
2892 r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8)); change_speed()
2897 u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */ change_speed()
2902 r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8)); change_speed()
2905 info->baud = cflag_to_baud(cflag); change_speed()
2906 info->ioport[REG_BAUD] = cflag_to_etrax_baud(cflag); change_speed()
2912 info->rx_ctrl &= ~(IO_MASK(R_SERIAL0_REC_CTRL, rec_bitnr) | change_speed()
2917 info->tx_ctrl &= ~(IO_MASK(R_SERIAL0_TR_CTRL, tr_bitnr) | change_speed()
2925 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_bitnr, tr_7bit); change_speed()
2926 info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_bitnr, rec_7bit); change_speed()
2931 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, stop_bits, two_bits); change_speed()
2936 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par_en, enable); change_speed()
2937 info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par_en, enable); change_speed()
2942 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_stick_par, stick); change_speed()
2943 info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_stick_par, stick); change_speed()
2947 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par, odd); change_speed()
2948 info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par, odd); change_speed()
2953 DFLOW(DEBUG_LOG(info->line, "FLOW auto_cts enabled\n", 0)); change_speed()
2954 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, auto_cts, active); change_speed()
2959 info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_enable, enable); change_speed()
2960 info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_enable, enable); change_speed()
2964 info->ioport[REG_TR_CTRL] = info->tx_ctrl; change_speed()
2965 info->ioport[REG_REC_CTRL] = info->rx_ctrl; change_speed()
2966 xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty)); change_speed()
2968 if (info->port.tty->termios.c_iflag & IXON ) { change_speed()
2969 DFLOW(DEBUG_LOG(info->line, "FLOW XOFF enabled 0x%02X\n", change_speed()
2970 STOP_CHAR(info->port.tty))); change_speed()
2974 *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; change_speed()
2977 update_char_time(info); change_speed()
2986 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_flush_chars() local
2989 if (info->tr_running || rs_flush_chars()
2990 info->xmit.head == info->xmit.tail || rs_flush_chars()
2992 !info->xmit.buf) rs_flush_chars()
3002 start_transmit(info); rs_flush_chars()
3010 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_raw_write() local
3015 if (!info->xmit.buf) rs_raw_write()
3019 if (info->line == SERIAL_DEBUG_LINE) rs_raw_write()
3021 count, info->ioport[REG_STATUS]); rs_raw_write()
3025 DFLOW(DEBUG_LOG(info->line, "write count %i ", count)); rs_raw_write()
3026 DFLOW(DEBUG_LOG(info->line, "ldisc %i\n", tty->ldisc.chars_in_buffer(tty))); rs_raw_write()
3030 * because the DMA interrupt handler moves the info->xmit values. rs_raw_write()
3038 c = CIRC_SPACE_TO_END(info->xmit.head, rs_raw_write()
3039 info->xmit.tail, rs_raw_write()
3047 memcpy(info->xmit.buf + info->xmit.head, buf, c); rs_raw_write()
3048 info->xmit.head = (info->xmit.head + c) & rs_raw_write()
3060 DFLOW(DEBUG_LOG(info->line, "write ret %i\n", ret)); rs_raw_write()
3062 if (info->xmit.head != info->xmit.tail && rs_raw_write()
3064 !info->tr_running) { rs_raw_write()
3065 start_transmit(info); rs_raw_write()
3076 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_write() local
3078 if (info->rs485.flags & SER_RS485_ENABLED) rs_write()
3085 fast_timers_rs485[info->line].function = NULL; rs_write()
3086 del_fast_timer(&fast_timers_rs485[info->line]); rs_write()
3088 e100_rts(info, (info->rs485.flags & SER_RS485_RTS_ON_SEND)); rs_write()
3090 e100_disable_rx(info); rs_write()
3091 e100_enable_rx_irq(info); rs_write()
3093 if (info->rs485.delay_rts_before_send > 0) rs_write()
3094 msleep(info->rs485.delay_rts_before_send); rs_write()
3101 if (info->rs485.flags & SER_RS485_ENABLED) rs_write()
3115 schedule_usleep(info->char_time_usec * 2); rs_write()
3119 get_lsr_info(info, &val); rs_write()
3122 e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND)); rs_write()
3125 e100_enable_rx(info); rs_write()
3126 e100_enable_rxdma_irq(info); rs_write()
3140 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_write_room() local
3142 return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_write_room()
3153 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_chars_in_buffer() local
3155 return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_chars_in_buffer()
3163 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_flush_buffer() local
3167 info->xmit.head = info->xmit.tail = 0; rs_flush_buffer()
3177 * Since we use DMA we don't check for info->x_char in transmit_chars_dma(),
3184 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_send_xchar() local
3187 if (info->uses_dma_out) { rs_send_xchar()
3189 *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, hold); rs_send_xchar()
3190 while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) != rs_send_xchar()
3192 e100_disable_txdma_channel(info); rs_send_xchar()
3200 DFLOW(DEBUG_LOG(info->line, "rs_send_xchar 0x%02X\n", ch)); rs_send_xchar()
3201 info->x_char = ch; rs_send_xchar()
3202 e100_enable_serial_tx_ready_irq(info); rs_send_xchar()
3217 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_throttle() local
3224 DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty))); rs_throttle()
3229 e100_rts(info, 0); rs_throttle()
3239 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_unthrottle() local
3246 DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty))); rs_unthrottle()
3247 DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count)); rs_unthrottle()
3251 e100_rts(info, 1); rs_unthrottle()
3255 if (info->x_char) rs_unthrottle()
3256 info->x_char = 0; rs_unthrottle()
3270 get_serial_info(struct e100_serial * info, get_serial_info() argument
3283 tmp.type = info->type; get_serial_info()
3284 tmp.line = info->line; get_serial_info()
3285 tmp.port = (int)info->ioport; get_serial_info()
3286 tmp.irq = info->irq; get_serial_info()
3287 tmp.flags = info->port.flags; get_serial_info()
3288 tmp.baud_base = info->baud_base; get_serial_info()
3289 tmp.close_delay = info->port.close_delay; get_serial_info()
3290 tmp.closing_wait = info->port.closing_wait; get_serial_info()
3291 tmp.custom_divisor = info->custom_divisor; get_serial_info()
3298 set_serial_info(struct e100_serial *info, set_serial_info() argument
3308 old_info = *info; set_serial_info()
3311 if ((new_serial.type != info->type) || set_serial_info()
3312 (new_serial.close_delay != info->port.close_delay) || set_serial_info()
3314 (info->port.flags & ~ASYNC_USR_MASK))) set_serial_info()
3316 info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) | set_serial_info()
3321 if (info->port.count > 1) set_serial_info()
3329 info->baud_base = new_serial.baud_base; set_serial_info()
3330 info->port.flags = ((info->port.flags & ~ASYNC_FLAGS) | set_serial_info()
3332 info->custom_divisor = new_serial.custom_divisor; set_serial_info()
3333 info->type = new_serial.type; set_serial_info()
3334 info->port.close_delay = new_serial.close_delay; set_serial_info()
3335 info->port.closing_wait = new_serial.closing_wait; set_serial_info()
3336 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; set_serial_info()
3339 if (info->port.flags & ASYNC_INITIALIZED) { set_serial_info()
3340 change_speed(info); set_serial_info()
3342 retval = startup(info); set_serial_info()
3347 * get_lsr_info - get line status register info
3349 * Purpose: Let user call ioctl() to get info when the UART physically
3357 get_lsr_info(struct e100_serial * info, unsigned int *value) get_lsr_info() argument
3363 (curr_time - info->last_tx_active) * 1000000/HZ + get_lsr_info()
3364 curr_time_usec - info->last_tx_active_usec; get_lsr_info()
3366 if (info->xmit.head != info->xmit.tail || get_lsr_info()
3367 elapsed_usec < 2*info->char_time_usec) { get_lsr_info()
3416 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_break() local
3419 if (!info->ioport) rs_break()
3426 info->tx_ctrl &= 0x3F; rs_break()
3429 info->tx_ctrl |= (0x80 | 0x40); rs_break()
3431 info->ioport[REG_TR_CTRL] = info->tx_ctrl; rs_break()
3439 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_tiocmset() local
3445 e100_rts(info, 0); rs_tiocmset()
3447 e100_dtr(info, 0); rs_tiocmset()
3450 e100_ri_out(info, 0); rs_tiocmset()
3452 e100_cd_out(info, 0); rs_tiocmset()
3455 e100_rts(info, 1); rs_tiocmset()
3457 e100_dtr(info, 1); rs_tiocmset()
3460 e100_ri_out(info, 1); rs_tiocmset()
3462 e100_cd_out(info, 1); rs_tiocmset()
3471 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_tiocmget() local
3478 (!E100_RTS_GET(info) ? TIOCM_RTS : 0) rs_tiocmget()
3479 | (!E100_DTR_GET(info) ? TIOCM_DTR : 0) rs_tiocmget()
3480 | (!E100_RI_GET(info) ? TIOCM_RNG : 0) rs_tiocmget()
3481 | (!E100_DSR_GET(info) ? TIOCM_DSR : 0) rs_tiocmget()
3482 | (!E100_CD_GET(info) ? TIOCM_CAR : 0) rs_tiocmget()
3483 | (!E100_CTS_GET(info) ? TIOCM_CTS : 0); rs_tiocmget()
3489 info->line, result, result); rs_tiocmget()
3506 struct e100_serial * info = (struct e100_serial *)tty->driver_data; rs_ioctl() local
3517 return get_serial_info(info, rs_ioctl()
3520 return set_serial_info(info, rs_ioctl()
3523 return get_lsr_info(info, (unsigned int *) arg); rs_ioctl()
3527 info, sizeof(struct e100_serial))) rs_ioctl()
3612 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_set_termios() local
3614 change_speed(info); rs_set_termios()
3636 struct e100_serial * info = (struct e100_serial *)tty->driver_data; rs_close() local
3639 if (!info) rs_close()
3653 info->line, info->count); rs_close()
3655 if ((tty->count == 1) && (info->port.count != 1)) { rs_close()
3665 "info->count is %d\n", info->port.count); rs_close()
3666 info->port.count = 1; rs_close()
3668 if (--info->port.count < 0) { rs_close()
3670 info->line, info->port.count); rs_close()
3671 info->port.count = 0; rs_close()
3673 if (info->port.count) { rs_close()
3677 info->port.flags |= ASYNC_CLOSING; rs_close()
3683 if (info->port.closing_wait != ASYNC_CLOSING_WAIT_NONE) rs_close()
3684 tty_wait_until_sent(tty, info->port.closing_wait); rs_close()
3690 e100_disable_serial_data_irq(info); rs_close()
3693 e100_disable_rx(info); rs_close()
3694 e100_disable_rx_irq(info); rs_close()
3696 if (info->port.flags & ASYNC_INITIALIZED) { rs_close()
3705 shutdown(info); rs_close()
3709 info->event = 0; rs_close()
3710 info->port.tty = NULL; rs_close()
3711 if (info->port.blocked_open) { rs_close()
3712 if (info->port.close_delay) rs_close()
3713 schedule_timeout_interruptible(info->port.close_delay); rs_close()
3714 wake_up_interruptible(&info->port.open_wait); rs_close()
3716 info->port.flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); rs_close()
3717 wake_up_interruptible(&info->port.close_wait); rs_close()
3723 if (info->rs485.flags & SER_RS485_ENABLED) { rs_close()
3724 info->rs485.flags &= ~(SER_RS485_ENABLED); rs_close()
3744 if (info->dma_in_enabled) { rs_close()
3745 free_irq(info->dma_in_irq_nbr, info); rs_close()
3746 cris_free_dma(info->dma_in_nbr, info->dma_in_irq_description); rs_close()
3747 info->uses_dma_in = 0; rs_close()
3750 info->dma_in_irq_description); rs_close()
3753 if (info->dma_out_enabled) { rs_close()
3754 free_irq(info->dma_out_irq_nbr, info); rs_close()
3755 cris_free_dma(info->dma_out_nbr, info->dma_out_irq_description); rs_close()
3756 info->uses_dma_out = 0; rs_close()
3759 info->dma_out_irq_description); rs_close()
3770 struct e100_serial *info = (struct e100_serial *)tty->driver_data; rs_wait_until_sent() local
3774 (curr_time - info->last_tx_active) * (1000000/HZ) + rs_wait_until_sent()
3775 curr_time_usec - info->last_tx_active_usec; rs_wait_until_sent()
3782 while (info->xmit.head != info->xmit.tail || /* More in send queue */ rs_wait_until_sent()
3783 (*info->ostatusadr & 0x007f) || /* more in FIFO */ rs_wait_until_sent()
3784 (elapsed_usec < 2*info->char_time_usec)) { rs_wait_until_sent()
3793 (curr_time - info->last_tx_active) * (1000000/HZ) + rs_wait_until_sent()
3794 curr_time_usec - info->last_tx_active_usec; rs_wait_until_sent()
3805 struct e100_serial * info = (struct e100_serial *)tty->driver_data; rs_hangup() local
3808 shutdown(info); rs_hangup()
3809 info->event = 0; rs_hangup()
3810 info->port.count = 0; rs_hangup()
3811 info->port.flags &= ~ASYNC_NORMAL_ACTIVE; rs_hangup()
3812 info->port.tty = NULL; rs_hangup()
3813 wake_up_interruptible(&info->port.open_wait); rs_hangup()
3823 struct e100_serial *info) block_til_ready()
3834 if (info->port.flags & ASYNC_CLOSING) { block_til_ready()
3835 wait_event_interruptible_tty(tty, info->port.close_wait, block_til_ready()
3836 !(info->port.flags & ASYNC_CLOSING)); block_til_ready()
3838 if (info->port.flags & ASYNC_HUP_NOTIFY) block_til_ready()
3853 info->port.flags |= ASYNC_NORMAL_ACTIVE; block_til_ready()
3864 * this loop, info->port.count is dropped by one, so that block_til_ready()
3869 add_wait_queue(&info->port.open_wait, &wait); block_til_ready()
3872 info->line, info->port.count); block_til_ready()
3875 info->port.count--; block_til_ready()
3877 info->port.blocked_open++; block_til_ready()
3881 e100_rts(info, 1); block_til_ready()
3882 e100_dtr(info, 1); block_til_ready()
3886 !(info->port.flags & ASYNC_INITIALIZED)) { block_til_ready()
3888 if (info->port.flags & ASYNC_HUP_NOTIFY) block_til_ready()
3897 if (!(info->port.flags & ASYNC_CLOSING) && do_clocal) block_til_ready()
3906 info->line, info->port.count); block_til_ready()
3913 remove_wait_queue(&info->port.open_wait, &wait); block_til_ready()
3915 info->port.count++; block_til_ready()
3916 info->port.blocked_open--; block_til_ready()
3919 info->line, info->port.count); block_til_ready()
3923 info->port.flags |= ASYNC_NORMAL_ACTIVE; block_til_ready()
3928 deinit_port(struct e100_serial *info) deinit_port() argument
3930 if (info->dma_out_enabled) { deinit_port()
3931 cris_free_dma(info->dma_out_nbr, info->dma_out_irq_description); deinit_port()
3932 free_irq(info->dma_out_irq_nbr, info); deinit_port()
3934 if (info->dma_in_enabled) { deinit_port()
3935 cris_free_dma(info->dma_in_nbr, info->dma_in_irq_description); deinit_port()
3936 free_irq(info->dma_in_irq_nbr, info); deinit_port()
3947 struct e100_serial *info; rs_open() local
3951 info = rs_table + tty->index; rs_open()
3952 if (!info->enabled) rs_open()
3957 info->port.count); rs_open()
3960 info->port.count++; rs_open()
3961 tty->driver_data = info; rs_open()
3962 info->port.tty = tty; rs_open()
3964 info->port.low_latency = !!(info->port.flags & ASYNC_LOW_LATENCY); rs_open()
3969 if (info->port.flags & ASYNC_CLOSING) { rs_open()
3970 wait_event_interruptible_tty(tty, info->port.close_wait, rs_open()
3971 !(info->port.flags & ASYNC_CLOSING)); rs_open()
3973 return ((info->port.flags & ASYNC_HUP_NOTIFY) ? rs_open()
3983 if (info->port.count == 1) { rs_open()
3985 if (info->dma_in_enabled) { rs_open()
3986 if (request_irq(info->dma_in_irq_nbr, rs_open()
3988 info->dma_in_irq_flags, rs_open()
3989 info->dma_in_irq_description, rs_open()
3990 info)) { rs_open()
3993 info->dma_in_irq_description); rs_open()
3996 info->dma_in_enabled = 0; rs_open()
3997 } else if (cris_request_dma(info->dma_in_nbr, rs_open()
3998 info->dma_in_irq_description, rs_open()
4000 info->dma_owner)) { rs_open()
4001 free_irq(info->dma_in_irq_nbr, info); rs_open()
4004 info->dma_in_irq_description); rs_open()
4007 info->dma_in_enabled = 0; rs_open()
4012 info->dma_in_irq_description); rs_open()
4015 if (info->dma_out_enabled) { rs_open()
4016 if (request_irq(info->dma_out_irq_nbr, rs_open()
4018 info->dma_out_irq_flags, rs_open()
4019 info->dma_out_irq_description, rs_open()
4020 info)) { rs_open()
4023 info->dma_out_irq_description); rs_open()
4026 info->dma_out_enabled = 0; rs_open()
4027 } else if (cris_request_dma(info->dma_out_nbr, rs_open()
4028 info->dma_out_irq_description, rs_open()
4030 info->dma_owner)) { rs_open()
4031 free_irq(info->dma_out_irq_nbr, info); rs_open()
4034 info->dma_out_irq_description); rs_open()
4037 info->dma_out_enabled = 0; rs_open()
4042 info->dma_out_irq_description); rs_open()
4051 retval = startup(info); rs_open()
4054 deinit_port(info); rs_open()
4056 /* FIXME Decrease count info->port.count here too? */ rs_open()
4061 retval = block_til_ready(tty, filp, info); rs_open()
4068 deinit_port(info); rs_open()
4074 printk("rs_open ttyS%d successful...\n", info->line); rs_open()
4078 DFLIP( if (info->line == SERIAL_DEBUG_LINE) { rs_open()
4079 info->icount.rx = 0; rs_open()
4090 static void seq_line_info(struct seq_file *m, struct e100_serial *info) seq_line_info() argument
4095 info->line, (unsigned long)info->ioport, info->irq); seq_line_info()
4097 if (!info->ioport || (info->type == PORT_UNKNOWN)) { seq_line_info()
4102 seq_printf(m, " baud:%d", info->baud); seq_line_info()
4104 (unsigned long)info->icount.tx, seq_line_info()
4105 (unsigned long)info->icount.rx); seq_line_info()
4106 tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); seq_line_info()
4113 (unsigned long)info->recv_cnt, seq_line_info()
4114 (unsigned long)info->max_recv_cnt); seq_line_info()
4117 if (info->port.tty) { seq_line_info()
4118 if (info->port.tty->stopped) seq_line_info()
4120 (int)info->port.tty->stopped); seq_line_info()
4124 unsigned char rstat = info->ioport[REG_STATUS]; seq_line_info()
4131 if (info->icount.frame) seq_line_info()
4132 seq_printf(m, " fe:%lu", (unsigned long)info->icount.frame); seq_line_info()
4134 if (info->icount.parity) seq_line_info()
4135 seq_printf(m, " pe:%lu", (unsigned long)info->icount.parity); seq_line_info()
4137 if (info->icount.brk) seq_line_info()
4138 seq_printf(m, " brk:%lu", (unsigned long)info->icount.brk); seq_line_info()
4140 if (info->icount.overrun) seq_line_info()
4141 seq_printf(m, " oe:%lu", (unsigned long)info->icount.overrun); seq_line_info()
4146 if (!E100_RTS_GET(info)) seq_line_info()
4148 if (!E100_CTS_GET(info)) seq_line_info()
4150 if (!E100_DTR_GET(info)) seq_line_info()
4152 if (!E100_DSR_GET(info)) seq_line_info()
4154 if (!E100_CD_GET(info)) seq_line_info()
4156 if (!E100_RI_GET(info)) seq_line_info()
4241 struct e100_serial *info; rs_init() local
4296 for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) { rs_init()
4297 if (info->enabled) { rs_init()
4298 if (cris_request_io_interface(info->io_if, rs_init()
4299 info->io_if_description)) { rs_init()
4303 info->io_if_description, i); rs_init()
4304 info->enabled = 0; rs_init()
4307 tty_port_init(&info->port); rs_init()
4308 info->uses_dma_in = 0; rs_init()
4309 info->uses_dma_out = 0; rs_init()
4310 info->line = i; rs_init()
4311 info->port.tty = NULL; rs_init()
4312 info->type = PORT_ETRAX; rs_init()
4313 info->tr_running = 0; rs_init()
4314 info->forced_eop = 0; rs_init()
4315 info->baud_base = DEF_BAUD_BASE; rs_init()
4316 info->custom_divisor = 0; rs_init()
4317 info->x_char = 0; rs_init()
4318 info->event = 0; rs_init()
4319 info->xmit.buf = NULL; rs_init()
4320 info->xmit.tail = info->xmit.head = 0; rs_init()
4321 info->first_recv_buffer = info->last_recv_buffer = NULL; rs_init()
4322 info->recv_cnt = info->max_recv_cnt = 0; rs_init()
4323 info->last_tx_active_usec = 0; rs_init()
4324 info->last_tx_active = 0; rs_init()
4328 info->rs485.flags &= ~(SER_RS485_RTS_ON_SEND); rs_init()
4329 info->rs485.flags |= SER_RS485_RTS_AFTER_SEND; rs_init()
4330 info->rs485.delay_rts_before_send = 0; rs_init()
4331 info->rs485.flags &= ~(SER_RS485_ENABLED); rs_init()
4333 INIT_WORK(&info->work, do_softint); rs_init()
4335 if (info->enabled) { rs_init()
4337 serial_driver->name, info->line, info->ioport); rs_init()
4339 tty_port_link_device(&info->port, driver, i); rs_init()
3822 block_til_ready(struct tty_struct *tty, struct file * filp, struct e100_serial *info) block_til_ready() argument
H A D68328serial.c141 static void change_speed(struct m68k_serial *info, struct tty_struct *tty);
165 static inline int serial_paranoia_check(struct m68k_serial *info, serial_paranoia_check() argument
174 if (!info) { serial_paranoia_check()
178 if (info->magic != SERIAL_MAGIC) { serial_paranoia_check()
214 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_stop() local
215 m68328_uart *uart = &uart_addr[info->line]; rs_stop()
218 if (serial_paranoia_check(info, tty->name, "rs_stop")) rs_stop()
246 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_start() local
247 m68328_uart *uart = &uart_addr[info->line]; rs_start()
250 if (serial_paranoia_check(info, tty->name, "rs_start")) rs_start()
254 if (info->xmit_cnt && info->xmit_buf && !(uart->ustcnt & USTCNT_TXEN)) { rs_start()
264 static void receive_chars(struct m68k_serial *info, unsigned short rx) receive_chars() argument
266 m68328_uart *uart = &uart_addr[info->line]; receive_chars()
277 if(info->is_cons) { receive_chars()
303 tty_insert_flip_char(&info->tport, ch, flag); receive_chars()
308 tty_schedule_flip(&info->tport); receive_chars()
311 static void transmit_chars(struct m68k_serial *info, struct tty_struct *tty) transmit_chars() argument
313 m68328_uart *uart = &uart_addr[info->line]; transmit_chars()
315 if (info->x_char) { transmit_chars()
317 uart->utx.b.txdata = info->x_char; transmit_chars()
318 info->x_char = 0; transmit_chars()
322 if ((info->xmit_cnt <= 0) || !tty || tty->stopped) { transmit_chars()
329 uart->utx.b.txdata = info->xmit_buf[info->xmit_tail++]; transmit_chars()
330 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1); transmit_chars()
331 info->xmit_cnt--; transmit_chars()
333 if(info->xmit_cnt <= 0) { transmit_chars()
349 struct m68k_serial *info = dev_id; rs_interrupt() local
350 struct tty_struct *tty = tty_port_tty_get(&info->tport); rs_interrupt()
355 uart = &uart_addr[info->line]; rs_interrupt()
362 receive_chars(info, rx); rs_interrupt()
364 transmit_chars(info, tty); rs_interrupt()
366 receive_chars(info, rx); rs_interrupt()
373 static int startup(struct m68k_serial *info, struct tty_struct *tty) startup() argument
375 m68328_uart *uart = &uart_addr[info->line]; startup()
378 if (info->tport.flags & ASYNC_INITIALIZED) startup()
381 if (!info->xmit_buf) { startup()
382 info->xmit_buf = (unsigned char *) __get_free_page(GFP_KERNEL); startup()
383 if (!info->xmit_buf) startup()
410 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; startup()
416 change_speed(info, tty); startup()
418 info->tport.flags |= ASYNC_INITIALIZED; startup()
427 static void shutdown(struct m68k_serial *info, struct tty_struct *tty) shutdown() argument
429 m68328_uart *uart = &uart_addr[info->line]; shutdown()
433 if (!(info->tport.flags & ASYNC_INITIALIZED)) shutdown()
438 if (info->xmit_buf) { shutdown()
439 free_page((unsigned long) info->xmit_buf); shutdown()
440 info->xmit_buf = 0; shutdown()
446 info->tport.flags &= ~ASYNC_INITIALIZED; shutdown()
502 static void change_speed(struct m68k_serial *info, struct tty_struct *tty) change_speed() argument
504 m68328_uart *uart = &uart_addr[info->line]; change_speed()
511 if (!(port = info->port)) change_speed()
559 struct m68k_serial *info = &m68k_soft[0]; rs_fair_output() local
562 if (info == 0) return; rs_fair_output()
563 if (info->xmit_buf == 0) return; rs_fair_output()
566 left = info->xmit_cnt; rs_fair_output()
568 c = info->xmit_buf[info->xmit_tail]; rs_fair_output()
569 info->xmit_tail = (info->xmit_tail+1) & (SERIAL_XMIT_SIZE-1); rs_fair_output()
570 info->xmit_cnt--; rs_fair_output()
576 left = min(info->xmit_cnt, left-1); rs_fair_output()
607 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_set_ldisc() local
609 if (serial_paranoia_check(info, tty->name, "rs_set_ldisc")) rs_set_ldisc()
612 info->is_cons = (tty->termios.c_line == N_TTY); rs_set_ldisc()
614 printk("ttyS%d console mode %s\n", info->line, info->is_cons ? "on" : "off"); rs_set_ldisc()
619 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; local
620 m68328_uart *uart = &uart_addr[info->line];
623 if (serial_paranoia_check(info, tty->name, "rs_flush_chars"))
632 if (info->xmit_cnt <= 0 || tty->stopped || !info->xmit_buf) {
649 uart->utx.b.txdata = info->xmit_buf[info->xmit_tail++];
650 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1);
651 info->xmit_cnt--;
667 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_write() local
668 m68328_uart *uart = &uart_addr[info->line]; rs_write()
671 if (serial_paranoia_check(info, tty->name, "rs_write")) rs_write()
674 if (!tty || !info->xmit_buf) rs_write()
680 c = min_t(int, count, min(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, rs_write()
681 SERIAL_XMIT_SIZE - info->xmit_head)); rs_write()
687 memcpy(info->xmit_buf + info->xmit_head, buf, c); rs_write()
690 info->xmit_head = (info->xmit_head + c) & (SERIAL_XMIT_SIZE-1); rs_write()
691 info->xmit_cnt += c; rs_write()
698 if (info->xmit_cnt && !tty->stopped) { rs_write()
702 while(info->xmit_cnt) { rs_write()
712 uart->utx.b.txdata = info->xmit_buf[info->xmit_tail++]; rs_write()
713 info->xmit_tail = info->xmit_tail & (SERIAL_XMIT_SIZE-1); rs_write()
714 info->xmit_cnt--; rs_write()
728 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_write_room() local
731 if (serial_paranoia_check(info, tty->name, "rs_write_room")) rs_write_room()
733 ret = SERIAL_XMIT_SIZE - info->xmit_cnt - 1; rs_write_room()
741 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_chars_in_buffer() local
743 if (serial_paranoia_check(info, tty->name, "rs_chars_in_buffer")) rs_chars_in_buffer()
745 return info->xmit_cnt; rs_chars_in_buffer()
750 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_flush_buffer() local
753 if (serial_paranoia_check(info, tty->name, "rs_flush_buffer")) rs_flush_buffer()
756 info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; rs_flush_buffer()
771 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_throttle() local
773 if (serial_paranoia_check(info, tty->name, "rs_throttle")) rs_throttle()
777 info->x_char = STOP_CHAR(tty); rs_throttle()
784 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_unthrottle() local
786 if (serial_paranoia_check(info, tty->name, "rs_unthrottle")) rs_unthrottle()
790 if (info->x_char) rs_unthrottle()
791 info->x_char = 0; rs_unthrottle()
793 info->x_char = START_CHAR(tty); rs_unthrottle()
805 static int get_serial_info(struct m68k_serial * info, get_serial_info() argument
813 tmp.type = info->type; get_serial_info()
814 tmp.line = info->line; get_serial_info()
815 tmp.port = info->port; get_serial_info()
816 tmp.irq = info->irq; get_serial_info()
817 tmp.flags = info->tport.flags; get_serial_info()
818 tmp.baud_base = info->baud_base; get_serial_info()
819 tmp.close_delay = info->tport.close_delay; get_serial_info()
820 tmp.closing_wait = info->tport.closing_wait; get_serial_info()
821 tmp.custom_divisor = info->custom_divisor; get_serial_info()
828 static int set_serial_info(struct m68k_serial *info, struct tty_struct *tty, set_serial_info() argument
831 struct tty_port *port = &info->tport; set_serial_info()
840 old_info = *info; set_serial_info()
843 if ((new_serial.baud_base != info->baud_base) || set_serial_info()
844 (new_serial.type != info->type) || set_serial_info()
851 info->custom_divisor = new_serial.custom_divisor; set_serial_info()
863 info->baud_base = new_serial.baud_base; set_serial_info()
866 info->type = new_serial.type; set_serial_info()
871 retval = startup(info, tty); set_serial_info()
876 * get_lsr_info - get line status register info
878 * Purpose: Let user call ioctl() to get info when the UART physically
885 static int get_lsr_info(struct m68k_serial * info, unsigned int *value) get_lsr_info() argument
888 m68328_uart *uart = &uart_addr[info->line]; get_lsr_info()
906 static void send_break(struct m68k_serial * info, unsigned int duration) send_break() argument
908 m68328_uart *uart = &uart_addr[info->line]; send_break()
910 if (!info->port) send_break()
924 struct m68k_serial * info = (struct m68k_serial *)tty->driver_data; rs_ioctl() local
927 if (serial_paranoia_check(info, tty->name, "rs_ioctl")) rs_ioctl()
944 send_break(info, 250); /* 1/4 second */ rs_ioctl()
951 send_break(info, arg ? arg*(100) : 250); rs_ioctl()
954 return get_serial_info(info, rs_ioctl()
957 return set_serial_info(info, tty, rs_ioctl()
960 return get_lsr_info(info, (unsigned int *) arg); rs_ioctl()
963 info, sizeof(struct m68k_serial))) rs_ioctl()
974 struct m68k_serial *info = (struct m68k_serial *)tty->driver_data; rs_set_termios() local
976 change_speed(info, tty); rs_set_termios()
996 struct m68k_serial * info = (struct m68k_serial *)tty->driver_data; rs_close() local
997 struct tty_port *port = &info->tport; rs_close()
998 m68328_uart *uart = &uart_addr[info->line]; rs_close()
1001 if (serial_paranoia_check(info, tty->name, "rs_close")) rs_close()
1025 info->line, port->count); rs_close()
1050 shutdown(info, tty); rs_close()
1055 tty_port_tty_set(&info->tport, NULL); rs_close()
1082 struct m68k_serial * info = (struct m68k_serial *)tty->driver_data; rs_hangup() local
1084 if (serial_paranoia_check(info, tty->name, "rs_hangup")) rs_hangup()
1088 shutdown(info, tty); rs_hangup()
1089 info->tport.count = 0; rs_hangup()
1090 info->tport.flags &= ~ASYNC_NORMAL_ACTIVE; rs_hangup()
1091 tty_port_tty_set(&info->tport, NULL); rs_hangup()
1092 wake_up_interruptible(&info->tport.open_wait); rs_hangup()
1103 struct m68k_serial *info; rs_open() local
1106 info = &m68k_soft[tty->index]; rs_open()
1108 if (serial_paranoia_check(info, tty->name, "rs_open")) rs_open()
1111 info->tport.count++; rs_open()
1112 tty->driver_data = info; rs_open()
1113 tty_port_tty_set(&info->tport, tty); rs_open()
1118 retval = startup(info, tty); rs_open()
1122 return tty_port_block_til_ready(&info->tport, tty, filp); rs_open()
1159 struct m68k_serial *info; rs68328_init() local
1185 info = &m68k_soft[i]; rs68328_init()
1186 tty_port_init(&info->tport); rs68328_init()
1187 info->tport.ops = &rs_port_ops; rs68328_init()
1188 info->magic = SERIAL_MAGIC; rs68328_init()
1189 info->port = (int) &uart_addr[i]; rs68328_init()
1190 info->irq = uart_irqs[i]; rs68328_init()
1191 info->custom_divisor = 16; rs68328_init()
1192 info->x_char = 0; rs68328_init()
1193 info->line = i; rs68328_init()
1194 info->is_cons = 1; /* Means shortcuts work */ rs68328_init()
1196 printk("%s%d at 0x%08x (irq = %d)", serial_driver->name, info->line, rs68328_init()
1197 info->port, info->irq); rs68328_init()
1208 "M68328_UART", info)) rs68328_init()
1211 tty_port_link_device(&info->tport, serial_driver, i); rs68328_init()
H A Dmsm_smd_tty.c56 struct smd_tty_info *info = priv; smd_tty_notify() local
62 tty = tty_port_tty_get(&info->port); smd_tty_notify()
69 avail = smd_read_avail(info->ch); smd_tty_notify()
73 avail = tty_prepare_flip_string(&info->port, &ptr, avail); smd_tty_notify()
75 if (smd_read(info->ch, ptr, avail) != avail) { smd_tty_notify()
83 tty_flip_buffer_push(&info->port); smd_tty_notify()
93 struct smd_tty_info *info = container_of(tport, struct smd_tty_info, smd_tty_port_activate() local
107 if (info->ch) smd_tty_port_activate()
108 smd_kick(info->ch); smd_tty_port_activate()
110 res = smd_open(name, &info->ch, info, smd_tty_notify); smd_tty_port_activate()
113 tty->driver_data = info; smd_tty_port_activate()
120 struct smd_tty_info *info = container_of(tport, struct smd_tty_info, smd_tty_port_shutdown() local
123 if (info->ch) { smd_tty_port_shutdown()
124 smd_close(info->ch); smd_tty_port_shutdown()
125 info->ch = 0; smd_tty_port_shutdown()
131 struct smd_tty_info *info = smd_tty + tty->index; smd_tty_open() local
133 return tty_port_open(&info->port, tty, f); smd_tty_open()
138 struct smd_tty_info *info = tty->driver_data; smd_tty_close() local
140 tty_port_close(&info->port, tty, f); smd_tty_close()
146 struct smd_tty_info *info = tty->driver_data; smd_tty_write() local
153 avail = smd_write_avail(info->ch); smd_tty_write()
157 return smd_write(info->ch, buf, len); smd_tty_write()
162 struct smd_tty_info *info = tty->driver_data; smd_tty_write_room() local
163 return smd_write_avail(info->ch); smd_tty_write_room()
168 struct smd_tty_info *info = tty->driver_data; smd_tty_chars_in_buffer() local
169 return smd_read_avail(info->ch); smd_tty_chars_in_buffer()
174 struct smd_tty_info *info = tty->driver_data; smd_tty_unthrottle() local
175 smd_kick(info->ch); smd_tty_unthrottle()
H A Dof_serial.c59 struct of_serial_info *info) of_platform_serial_setup()
70 info->clk = clk_get(&ofdev->dev, NULL); of_platform_serial_setup()
71 if (IS_ERR(info->clk)) { of_platform_serial_setup()
74 return PTR_ERR(info->clk); of_platform_serial_setup()
77 clk_prepare_enable(info->clk); of_platform_serial_setup()
78 clk = clk_get_rate(info->clk); of_platform_serial_setup()
152 if (info->clk) of_platform_serial_setup()
153 clk_disable_unprepare(info->clk); of_platform_serial_setup()
164 struct of_serial_info *info; of_platform_serial_probe() local
176 info = kzalloc(sizeof(*info), GFP_KERNEL); of_platform_serial_probe()
177 if (info == NULL) of_platform_serial_probe()
181 ret = of_platform_serial_setup(ofdev, port_type, &port, info); of_platform_serial_probe()
220 info->type = port_type; of_platform_serial_probe()
221 info->line = ret; of_platform_serial_probe()
222 platform_set_drvdata(ofdev, info); of_platform_serial_probe()
225 kfree(info); of_platform_serial_probe()
235 struct of_serial_info *info = platform_get_drvdata(ofdev); of_platform_serial_remove() local
236 switch (info->type) { of_platform_serial_remove()
239 serial8250_unregister_port(info->line); of_platform_serial_remove()
244 nwpserial_unregister_port(info->line); of_platform_serial_remove()
252 if (info->clk) of_platform_serial_remove()
253 clk_disable_unprepare(info->clk); of_platform_serial_remove()
254 kfree(info); of_platform_serial_remove()
260 static void of_serial_suspend_8250(struct of_serial_info *info) of_serial_suspend_8250() argument
262 struct uart_8250_port *port8250 = serial8250_get_port(info->line); of_serial_suspend_8250()
265 serial8250_suspend_port(info->line); of_serial_suspend_8250()
266 if (info->clk && (!uart_console(port) || console_suspend_enabled)) of_serial_suspend_8250()
267 clk_disable_unprepare(info->clk); of_serial_suspend_8250()
270 static void of_serial_resume_8250(struct of_serial_info *info) of_serial_resume_8250() argument
272 struct uart_8250_port *port8250 = serial8250_get_port(info->line); of_serial_resume_8250()
275 if (info->clk && (!uart_console(port) || console_suspend_enabled)) of_serial_resume_8250()
276 clk_prepare_enable(info->clk); of_serial_resume_8250()
278 serial8250_resume_port(info->line); of_serial_resume_8250()
281 static inline void of_serial_suspend_8250(struct of_serial_info *info) of_serial_suspend_8250() argument
285 static inline void of_serial_resume_8250(struct of_serial_info *info) of_serial_resume_8250() argument
292 struct of_serial_info *info = dev_get_drvdata(dev); of_serial_suspend() local
294 switch (info->type) { of_serial_suspend()
296 of_serial_suspend_8250(info); of_serial_suspend()
307 struct of_serial_info *info = dev_get_drvdata(dev); of_serial_resume() local
309 switch (info->type) { of_serial_resume()
311 of_serial_resume_8250(info); of_serial_resume()
57 of_platform_serial_setup(struct platform_device *ofdev, int type, struct uart_port *port, struct of_serial_info *info) of_platform_serial_setup() argument
/linux-4.1.27/drivers/hwmon/pmbus/
H A Dadm1275.c59 struct pmbus_driver_info info; member in struct:adm1275_data
62 #define to_adm1275_data(x) container_of(x, struct adm1275_data, info)
66 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); adm1275_read_word_data() local
67 const struct adm1275_data *data = to_adm1275_data(info); adm1275_read_word_data()
177 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); adm1275_read_byte_data() local
178 const struct adm1275_data *data = to_adm1275_data(info); adm1275_read_byte_data()
234 struct pmbus_driver_info *info; adm1275_probe() local
287 info = &data->info; adm1275_probe()
289 info->pages = 1; adm1275_probe()
290 info->format[PSC_VOLTAGE_IN] = direct; adm1275_probe()
291 info->format[PSC_VOLTAGE_OUT] = direct; adm1275_probe()
292 info->format[PSC_CURRENT_OUT] = direct; adm1275_probe()
293 info->m[PSC_CURRENT_OUT] = 807; adm1275_probe()
294 info->b[PSC_CURRENT_OUT] = 20475; adm1275_probe()
295 info->R[PSC_CURRENT_OUT] = -1; adm1275_probe()
296 info->func[0] = PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT; adm1275_probe()
298 info->read_word_data = adm1275_read_word_data; adm1275_probe()
299 info->read_byte_data = adm1275_read_byte_data; adm1275_probe()
300 info->write_word_data = adm1275_write_word_data; adm1275_probe()
303 info->m[PSC_VOLTAGE_IN] = 27169; adm1275_probe()
304 info->b[PSC_VOLTAGE_IN] = 0; adm1275_probe()
305 info->R[PSC_VOLTAGE_IN] = -1; adm1275_probe()
306 info->m[PSC_VOLTAGE_OUT] = 27169; adm1275_probe()
307 info->b[PSC_VOLTAGE_OUT] = 0; adm1275_probe()
308 info->R[PSC_VOLTAGE_OUT] = -1; adm1275_probe()
310 info->m[PSC_VOLTAGE_IN] = 19199; adm1275_probe()
311 info->b[PSC_VOLTAGE_IN] = 0; adm1275_probe()
312 info->R[PSC_VOLTAGE_IN] = -2; adm1275_probe()
313 info->m[PSC_VOLTAGE_OUT] = 19199; adm1275_probe()
314 info->b[PSC_VOLTAGE_OUT] = 0; adm1275_probe()
315 info->R[PSC_VOLTAGE_OUT] = -2; adm1275_probe()
317 info->m[PSC_VOLTAGE_IN] = 6720; adm1275_probe()
318 info->b[PSC_VOLTAGE_IN] = 0; adm1275_probe()
319 info->R[PSC_VOLTAGE_IN] = -1; adm1275_probe()
320 info->m[PSC_VOLTAGE_OUT] = 6720; adm1275_probe()
321 info->b[PSC_VOLTAGE_OUT] = 0; adm1275_probe()
322 info->R[PSC_VOLTAGE_OUT] = -1; adm1275_probe()
330 info->format[PSC_POWER] = direct; adm1275_probe()
331 info->b[PSC_POWER] = 0; adm1275_probe()
332 info->R[PSC_POWER] = -1; adm1275_probe()
335 info->m[PSC_POWER] = 8549; adm1275_probe()
336 info->m[PSC_CURRENT_OUT] = 806; adm1275_probe()
339 info->m[PSC_POWER] = 4279; adm1275_probe()
340 info->m[PSC_CURRENT_OUT] = 404; adm1275_probe()
344 info->m[PSC_POWER] = 0; adm1275_probe()
345 info->m[PSC_CURRENT_OUT] = 0; adm1275_probe()
348 info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_PIN adm1275_probe()
351 info->func[0] |= adm1275_probe()
356 info->func[0] |= adm1275_probe()
359 info->func[0] |= adm1275_probe()
363 info->format[PSC_POWER] = direct; adm1275_probe()
364 info->func[0] |= PMBUS_HAVE_VIN | PMBUS_HAVE_PIN adm1275_probe()
367 info->func[0] |= adm1275_probe()
370 info->m[PSC_POWER] = 6043; adm1275_probe()
371 info->b[PSC_POWER] = 0; adm1275_probe()
372 info->R[PSC_POWER] = -2; adm1275_probe()
374 info->m[PSC_POWER] = 2115; adm1275_probe()
375 info->b[PSC_POWER] = 0; adm1275_probe()
376 info->R[PSC_POWER] = -1; adm1275_probe()
381 return pmbus_do_probe(client, id, info); adm1275_probe()
H A Dpmbus.c34 struct pmbus_driver_info *info) pmbus_find_sensor_groups()
40 info->func[0] |= PMBUS_HAVE_VIN; pmbus_find_sensor_groups()
42 info->func[0] |= PMBUS_HAVE_VCAP; pmbus_find_sensor_groups()
44 info->func[0] |= PMBUS_HAVE_IIN; pmbus_find_sensor_groups()
46 info->func[0] |= PMBUS_HAVE_PIN; pmbus_find_sensor_groups()
47 if (info->func[0] pmbus_find_sensor_groups()
49 info->func[0] |= PMBUS_HAVE_STATUS_INPUT; pmbus_find_sensor_groups()
52 info->func[0] |= PMBUS_HAVE_FAN12; pmbus_find_sensor_groups()
54 info->func[0] |= PMBUS_HAVE_STATUS_FAN12; pmbus_find_sensor_groups()
58 info->func[0] |= PMBUS_HAVE_FAN34; pmbus_find_sensor_groups()
60 info->func[0] |= PMBUS_HAVE_STATUS_FAN34; pmbus_find_sensor_groups()
63 info->func[0] |= PMBUS_HAVE_TEMP; pmbus_find_sensor_groups()
65 info->func[0] |= PMBUS_HAVE_TEMP2; pmbus_find_sensor_groups()
67 info->func[0] |= PMBUS_HAVE_TEMP3; pmbus_find_sensor_groups()
68 if (info->func[0] & (PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2 pmbus_find_sensor_groups()
72 info->func[0] |= PMBUS_HAVE_STATUS_TEMP; pmbus_find_sensor_groups()
75 for (page = 0; page < info->pages; page++) { pmbus_find_sensor_groups()
77 info->func[page] |= PMBUS_HAVE_VOUT; pmbus_find_sensor_groups()
80 info->func[page] |= PMBUS_HAVE_STATUS_VOUT; pmbus_find_sensor_groups()
83 info->func[page] |= PMBUS_HAVE_IOUT; pmbus_find_sensor_groups()
86 info->func[page] |= PMBUS_HAVE_STATUS_IOUT; pmbus_find_sensor_groups()
89 info->func[page] |= PMBUS_HAVE_POUT; pmbus_find_sensor_groups()
97 struct pmbus_driver_info *info) pmbus_identify()
101 if (!info->pages) { pmbus_identify()
116 info->pages = page; pmbus_identify()
118 info->pages = 1; pmbus_identify()
131 info->format[PSC_VOLTAGE_OUT] = vid; pmbus_identify()
134 info->format[PSC_VOLTAGE_OUT] = direct; pmbus_identify()
154 if (info->format[PSC_VOLTAGE_OUT] == direct) { pmbus_identify()
160 pmbus_find_sensor_groups(client, info); pmbus_identify()
168 struct pmbus_driver_info *info; pmbus_probe() local
170 info = devm_kzalloc(&client->dev, sizeof(struct pmbus_driver_info), pmbus_probe()
172 if (!info) pmbus_probe()
175 info->pages = id->driver_data; pmbus_probe()
176 info->identify = pmbus_identify; pmbus_probe()
178 return pmbus_do_probe(client, id, info); pmbus_probe()
33 pmbus_find_sensor_groups(struct i2c_client *client, struct pmbus_driver_info *info) pmbus_find_sensor_groups() argument
96 pmbus_identify(struct i2c_client *client, struct pmbus_driver_info *info) pmbus_identify() argument
H A Dlm25066.c217 struct pmbus_driver_info info; member in struct:lm25066_data
220 #define to_lm25066_data(x) container_of(x, struct lm25066_data, info)
224 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); lm25066_read_word_data() local
225 const struct lm25066_data *data = to_lm25066_data(info); lm25066_read_word_data()
369 const struct pmbus_driver_info *info = pmbus_get_driver_info(client); lm25066_write_word_data() local
370 const struct lm25066_data *data = to_lm25066_data(info); lm25066_write_word_data()
433 struct pmbus_driver_info *info; lm25066_probe() local
450 info = &data->info; lm25066_probe()
452 info->pages = 1; lm25066_probe()
453 info->format[PSC_VOLTAGE_IN] = direct; lm25066_probe()
454 info->format[PSC_VOLTAGE_OUT] = direct; lm25066_probe()
455 info->format[PSC_CURRENT_IN] = direct; lm25066_probe()
456 info->format[PSC_TEMPERATURE] = direct; lm25066_probe()
457 info->format[PSC_POWER] = direct; lm25066_probe()
459 info->func[0] = PMBUS_HAVE_VIN | PMBUS_HAVE_VMON lm25066_probe()
464 info->func[0] |= PMBUS_HAVE_STATUS_VMON; lm25066_probe()
465 info->read_word_data = lm25056_read_word_data; lm25066_probe()
466 info->read_byte_data = lm25056_read_byte_data; lm25066_probe()
469 info->func[0] |= PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT lm25066_probe()
471 info->read_word_data = lm25063_read_word_data; lm25066_probe()
474 info->func[0] |= PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT; lm25066_probe()
475 info->read_word_data = lm25066_read_word_data; lm25066_probe()
478 info->write_word_data = lm25066_write_word_data; lm25066_probe()
481 info->m[PSC_TEMPERATURE] = coeff[PSC_TEMPERATURE].m; lm25066_probe()
482 info->b[PSC_TEMPERATURE] = coeff[PSC_TEMPERATURE].b; lm25066_probe()
483 info->R[PSC_TEMPERATURE] = coeff[PSC_TEMPERATURE].R; lm25066_probe()
484 info->m[PSC_VOLTAGE_IN] = coeff[PSC_VOLTAGE_IN].m; lm25066_probe()
485 info->b[PSC_VOLTAGE_IN] = coeff[PSC_VOLTAGE_IN].b; lm25066_probe()
486 info->R[PSC_VOLTAGE_IN] = coeff[PSC_VOLTAGE_IN].R; lm25066_probe()
487 info->m[PSC_VOLTAGE_OUT] = coeff[PSC_VOLTAGE_OUT].m; lm25066_probe()
488 info->b[PSC_VOLTAGE_OUT] = coeff[PSC_VOLTAGE_OUT].b; lm25066_probe()
489 info->R[PSC_VOLTAGE_OUT] = coeff[PSC_VOLTAGE_OUT].R; lm25066_probe()
490 info->b[PSC_CURRENT_IN] = coeff[PSC_CURRENT_IN].b; lm25066_probe()
491 info->R[PSC_CURRENT_IN] = coeff[PSC_CURRENT_IN].R; lm25066_probe()
492 info->b[PSC_POWER] = coeff[PSC_POWER].b; lm25066_probe()
493 info->R[PSC_POWER] = coeff[PSC_POWER].R; lm25066_probe()
495 info->m[PSC_CURRENT_IN] = coeff[PSC_CURRENT_IN_L].m; lm25066_probe()
496 info->m[PSC_POWER] = coeff[PSC_POWER_L].m; lm25066_probe()
498 info->m[PSC_CURRENT_IN] = coeff[PSC_CURRENT_IN].m; lm25066_probe()
499 info->m[PSC_POWER] = coeff[PSC_POWER].m; lm25066_probe()
502 return pmbus_do_probe(client, id, info); lm25066_probe()
/linux-4.1.27/drivers/char/agp/
H A Dparisc-agp.c83 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_configure() local
85 agp_bridge->gart_bus_addr = info->gart_base; parisc_agp_configure()
86 agp_bridge->capndx = info->lba_cap_offset; parisc_agp_configure()
87 agp_bridge->mode = readl(info->lba_regs+info->lba_cap_offset+PCI_AGP_STATUS); parisc_agp_configure()
95 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_tlbflush() local
97 writeq(info->gart_base | ilog2(info->gart_size), info->ioc_regs+IOC_PCOM); parisc_agp_tlbflush()
98 readq(info->ioc_regs+IOC_PCOM); /* flush */ parisc_agp_tlbflush()
104 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_create_gatt_table() local
107 for (i = 0; i < info->gatt_entries; i++) { parisc_agp_create_gatt_table()
108 info->gatt[i] = (unsigned long)agp_bridge->scratch_page; parisc_agp_create_gatt_table()
117 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_free_gatt_table() local
119 info->gatt[0] = SBA_AGPGART_COOKIE; parisc_agp_free_gatt_table()
127 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_insert_memory() local
137 io_pg_start = info->io_pages_per_kpage * pg_start; parisc_agp_insert_memory()
138 io_pg_count = info->io_pages_per_kpage * mem->page_count; parisc_agp_insert_memory()
139 if ((io_pg_start + io_pg_count) > info->gatt_entries) { parisc_agp_insert_memory()
145 if (info->gatt[j]) parisc_agp_insert_memory()
160 k < info->io_pages_per_kpage; parisc_agp_insert_memory()
161 k++, j++, paddr += info->io_page_size) { parisc_agp_insert_memory()
162 info->gatt[j] = parisc_agp_insert_memory()
176 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_remove_memory() local
184 io_pg_start = info->io_pages_per_kpage * pg_start; parisc_agp_remove_memory()
185 io_pg_count = info->io_pages_per_kpage * mem->page_count; parisc_agp_remove_memory()
187 info->gatt[i] = agp_bridge->scratch_page; parisc_agp_remove_memory()
204 struct _parisc_agp_info *info = &parisc_agp_info; parisc_agp_enable() local
207 command = readl(info->lba_regs + info->lba_cap_offset + PCI_AGP_STATUS); parisc_agp_enable()
212 writel(command, info->lba_regs + info->lba_cap_offset + PCI_AGP_COMMAND); parisc_agp_enable()
244 struct _parisc_agp_info *info = &parisc_agp_info; agp_ioc_init() local
250 info->ioc_regs = ioc_regs; agp_ioc_init()
252 io_tlb_ps = readq(info->ioc_regs+IOC_TCNFG); agp_ioc_init()
261 info->gatt = NULL; agp_ioc_init()
262 info->gatt_entries = 0; agp_ioc_init()
265 info->io_page_size = 1 << io_tlb_shift; agp_ioc_init()
266 info->io_pages_per_kpage = PAGE_SIZE / info->io_page_size; agp_ioc_init()
268 iova_base = readq(info->ioc_regs+IOC_IBASE) & ~0x1; agp_ioc_init()
269 info->gart_base = iova_base + PLUTO_IOVA_SIZE - PLUTO_GART_SIZE; agp_ioc_init()
271 info->gart_size = PLUTO_GART_SIZE; agp_ioc_init()
272 info->gatt_entries = info->gart_size / info->io_page_size; agp_ioc_init()
274 io_pdir = phys_to_virt(readq(info->ioc_regs+IOC_PDIR_BASE)); agp_ioc_init()
275 info->gatt = &io_pdir[(PLUTO_IOVA_SIZE/2) >> PAGE_SHIFT]; agp_ioc_init()
277 if (info->gatt[0] != SBA_AGPGART_COOKIE) { agp_ioc_init()
278 info->gatt = NULL; agp_ioc_init()
279 info->gatt_entries = 0; agp_ioc_init()
291 struct _parisc_agp_info *info = &parisc_agp_info; lba_find_capability() local
296 status = readw(info->lba_regs + PCI_STATUS); lba_find_capability()
299 pos = readb(info->lba_regs + PCI_CAPABILITY_LIST); lba_find_capability()
302 id = readb(info->lba_regs + pos + PCI_CAP_LIST_ID); lba_find_capability()
307 pos = readb(info->lba_regs + pos + PCI_CAP_LIST_NEXT); lba_find_capability()
315 struct _parisc_agp_info *info = &parisc_agp_info; agp_lba_init() local
318 info->lba_regs = lba_hpa; agp_lba_init()
319 info->lba_cap_offset = lba_find_capability(PCI_CAP_ID_AGP); agp_lba_init()
321 cap = readl(lba_hpa + info->lba_cap_offset) & 0xff; agp_lba_init()
324 cap, info->lba_cap_offset); agp_lba_init()
/linux-4.1.27/drivers/gpu/drm/vmwgfx/
H A Dvmwgfx_fb.c70 struct fb_info *info) vmw_fb_setcolreg()
72 struct vmw_fb_par *par = info->par; vmw_fb_setcolreg()
96 struct fb_info *info) vmw_fb_check_var()
99 struct vmw_fb_par *par = info->par; vmw_fb_check_var()
159 static int vmw_fb_set_par(struct fb_info *info) vmw_fb_set_par() argument
161 struct vmw_fb_par *par = info->par; vmw_fb_set_par()
165 info->fix.line_length = info->var.xres * info->var.bits_per_pixel/8; vmw_fb_set_par()
167 ret = vmw_kms_write_svga(vmw_priv, info->var.xres, info->var.yres, vmw_fb_set_par()
168 info->fix.line_length, vmw_fb_set_par()
178 vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_X, info->var.xoffset); vmw_fb_set_par()
179 vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, info->var.yoffset); vmw_fb_set_par()
180 vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, info->var.xres); vmw_fb_set_par()
181 vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, info->var.yres); vmw_fb_set_par()
194 struct fb_info *info) vmw_fb_pan_display()
199 static int vmw_fb_blank(int blank, struct fb_info *info) vmw_fb_blank() argument
211 struct fb_info *info = vmw_priv->fb_info; vmw_fb_dirty_flush() local
212 int stride = (info->fix.line_length / 4); vmw_fb_dirty_flush()
213 int *src = (int *)info->screen_base; vmw_fb_dirty_flush()
233 w = min(par->dirty.x2, info->var.xres) - x; vmw_fb_dirty_flush()
234 h = min(par->dirty.y2, info->var.yres) - y; vmw_fb_dirty_flush()
239 for (i = y * stride; i < info->fix.smem_len / 4; i += stride) { vmw_fb_dirty_flush()
240 for (k = i+x; k < i+x+w && k < info->fix.smem_len / 4; k++) vmw_fb_dirty_flush()
266 struct fb_info *info = par->vmw_priv->fb_info; vmw_fb_dirty_mark() local
280 schedule_delayed_work(&info->deferred_work, VMW_DIRTY_DELAY); vmw_fb_dirty_mark()
294 static void vmw_deferred_io(struct fb_info *info, vmw_deferred_io() argument
297 struct vmw_fb_par *par = info->par; vmw_deferred_io()
313 y1 = min / info->fix.line_length;
314 y2 = (max / info->fix.line_length) + 1;
319 par->dirty.x2 = info->var.xres;
336 static void vmw_fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) vmw_fb_fillrect() argument
338 cfb_fillrect(info, rect); vmw_fb_fillrect()
339 vmw_fb_dirty_mark(info->par, rect->dx, rect->dy, vmw_fb_fillrect()
343 static void vmw_fb_copyarea(struct fb_info *info, const struct fb_copyarea *region) vmw_fb_copyarea() argument
345 cfb_copyarea(info, region); vmw_fb_copyarea()
346 vmw_fb_dirty_mark(info->par, region->dx, region->dy, vmw_fb_copyarea()
350 static void vmw_fb_imageblit(struct fb_info *info, const struct fb_image *image) vmw_fb_imageblit() argument
352 cfb_imageblit(info, image); vmw_fb_imageblit()
353 vmw_fb_dirty_mark(info->par, image->dx, image->dy, vmw_fb_imageblit()
418 struct fb_info *info; vmw_fb_init() local
438 info = framebuffer_alloc(sizeof(*par), device); vmw_fb_init()
439 if (!info) vmw_fb_init()
445 vmw_priv->fb_info = info; vmw_fb_init()
446 par = info->par; vmw_fb_init()
479 strcpy(info->fix.id, "svgadrmfb"); vmw_fb_init()
480 info->fix.type = FB_TYPE_PACKED_PIXELS; vmw_fb_init()
481 info->fix.visual = FB_VISUAL_TRUECOLOR; vmw_fb_init()
482 info->fix.type_aux = 0; vmw_fb_init()
483 info->fix.xpanstep = 1; /* doing it in hw */ vmw_fb_init()
484 info->fix.ypanstep = 1; /* doing it in hw */ vmw_fb_init()
485 info->fix.ywrapstep = 0; vmw_fb_init()
486 info->fix.accel = FB_ACCEL_NONE; vmw_fb_init()
487 info->fix.line_length = fb_pitch; vmw_fb_init()
489 info->fix.smem_start = 0; vmw_fb_init()
490 info->fix.smem_len = fb_size; vmw_fb_init()
492 info->pseudo_palette = par->pseudo_palette; vmw_fb_init()
493 info->screen_base = par->vmalloc; vmw_fb_init()
494 info->screen_size = fb_size; vmw_fb_init()
496 info->flags = FBINFO_DEFAULT; vmw_fb_init()
497 info->fbops = &vmw_fb_ops; vmw_fb_init()
500 info->var.red.offset = 16; vmw_fb_init()
501 info->var.green.offset = 8; vmw_fb_init()
502 info->var.blue.offset = 0; vmw_fb_init()
503 info->var.red.length = 8; vmw_fb_init()
504 info->var.green.length = 8; vmw_fb_init()
505 info->var.blue.length = 8; vmw_fb_init()
506 info->var.transp.offset = 0; vmw_fb_init()
507 info->var.transp.length = 0; vmw_fb_init()
509 info->var.xres_virtual = fb_width; vmw_fb_init()
510 info->var.yres_virtual = fb_height; vmw_fb_init()
511 info->var.bits_per_pixel = par->bpp; vmw_fb_init()
512 info->var.xoffset = 0; vmw_fb_init()
513 info->var.yoffset = 0; vmw_fb_init()
514 info->var.activate = FB_ACTIVATE_NOW; vmw_fb_init()
515 info->var.height = -1; vmw_fb_init()
516 info->var.width = -1; vmw_fb_init()
518 info->var.xres = initial_width; vmw_fb_init()
519 info->var.yres = initial_height; vmw_fb_init()
521 /* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */ vmw_fb_init()
523 info->apertures = alloc_apertures(1); vmw_fb_init()
524 if (!info->apertures) { vmw_fb_init()
528 info->apertures->ranges[0].base = vmw_priv->vram_start; vmw_fb_init()
529 info->apertures->ranges[0].size = vmw_priv->vram_size; vmw_fb_init()
538 info->fbdefio = &vmw_defio; vmw_fb_init()
539 fb_deferred_io_init(info); vmw_fb_init()
541 ret = register_framebuffer(info); vmw_fb_init()
548 fb_deferred_io_cleanup(info); vmw_fb_init()
555 framebuffer_release(info); vmw_fb_init()
563 struct fb_info *info; vmw_fb_close() local
570 info = vmw_priv->fb_info; vmw_fb_close()
571 par = info->par; vmw_fb_close()
576 fb_deferred_io_cleanup(info); vmw_fb_close()
577 unregister_framebuffer(info); vmw_fb_close()
583 framebuffer_release(info); vmw_fb_close()
590 struct fb_info *info; vmw_fb_off() local
597 info = vmw_priv->fb_info; vmw_fb_off()
598 par = info->par; vmw_fb_off()
604 flush_delayed_work(&info->deferred_work); vmw_fb_off()
616 struct fb_info *info; vmw_fb_on() local
625 info = vmw_priv->fb_info; vmw_fb_on()
626 par = info->par; vmw_fb_on()
653 vmw_fb_set_par(info); vmw_fb_on()
655 vmw_fb_dirty_mark(par, 0, 0, info->var.xres, info->var.yres); vmw_fb_on()
659 schedule_delayed_work(&info->deferred_work, 0); vmw_fb_on()
68 vmw_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) vmw_fb_setcolreg() argument
95 vmw_fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) vmw_fb_check_var() argument
193 vmw_fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) vmw_fb_pan_display() argument
/linux-4.1.27/drivers/tty/hvc/
H A Dhvc_xen.c204 struct xencons_info *info; xen_hvm_console_init() local
209 info = vtermno_to_xencons(HVC_COOKIE); xen_hvm_console_init()
210 if (!info) { xen_hvm_console_init()
211 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); xen_hvm_console_init()
212 if (!info) xen_hvm_console_init()
214 } else if (info->intf != NULL) { xen_hvm_console_init()
227 info->evtchn = v; xen_hvm_console_init()
233 info->intf = xen_remap(mfn << PAGE_SHIFT, PAGE_SIZE); xen_hvm_console_init()
234 if (info->intf == NULL) xen_hvm_console_init()
236 info->vtermno = HVC_COOKIE; xen_hvm_console_init()
239 list_add_tail(&info->list, &xenconsoles); xen_hvm_console_init()
244 kfree(info); xen_hvm_console_init()
250 struct xencons_info *info; xen_pv_console_init() local
258 info = vtermno_to_xencons(HVC_COOKIE); xen_pv_console_init()
259 if (!info) { xen_pv_console_init()
260 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); xen_pv_console_init()
261 if (!info) xen_pv_console_init()
263 } else if (info->intf != NULL) { xen_pv_console_init()
267 info->evtchn = xen_start_info->console.domU.evtchn; xen_pv_console_init()
268 info->intf = mfn_to_virt(xen_start_info->console.domU.mfn); xen_pv_console_init()
269 info->vtermno = HVC_COOKIE; xen_pv_console_init()
272 list_add_tail(&info->list, &xenconsoles); xen_pv_console_init()
280 struct xencons_info *info; xen_initial_domain_console_init() local
285 info = vtermno_to_xencons(HVC_COOKIE); xen_initial_domain_console_init()
286 if (!info) { xen_initial_domain_console_init()
287 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); xen_initial_domain_console_init()
288 if (!info) xen_initial_domain_console_init()
292 info->irq = bind_virq_to_irq(VIRQ_CONSOLE, 0, false); xen_initial_domain_console_init()
293 info->vtermno = HVC_COOKIE; xen_initial_domain_console_init()
296 list_add_tail(&info->list, &xenconsoles); xen_initial_domain_console_init()
302 static void xen_console_update_evtchn(struct xencons_info *info) xen_console_update_evtchn() argument
310 info->evtchn = v; xen_console_update_evtchn()
312 info->evtchn = xen_start_info->console.domU.evtchn; xen_console_update_evtchn()
317 struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE); xen_console_resume() local
318 if (info != NULL && info->irq) { xen_console_resume()
320 xen_console_update_evtchn(info); xen_console_resume()
321 rebind_evtchn_irq(info->evtchn, info->irq); xen_console_resume()
325 static void xencons_disconnect_backend(struct xencons_info *info) xencons_disconnect_backend() argument
327 if (info->irq > 0) xencons_disconnect_backend()
328 unbind_from_irqhandler(info->irq, NULL); xencons_disconnect_backend()
329 info->irq = 0; xencons_disconnect_backend()
330 if (info->evtchn > 0) xencons_disconnect_backend()
331 xenbus_free_evtchn(info->xbdev, info->evtchn); xencons_disconnect_backend()
332 info->evtchn = 0; xencons_disconnect_backend()
333 if (info->gntref > 0) xencons_disconnect_backend()
334 gnttab_free_grant_references(info->gntref); xencons_disconnect_backend()
335 info->gntref = 0; xencons_disconnect_backend()
336 if (info->hvc != NULL) xencons_disconnect_backend()
337 hvc_remove(info->hvc); xencons_disconnect_backend()
338 info->hvc = NULL; xencons_disconnect_backend()
341 static void xencons_free(struct xencons_info *info) xencons_free() argument
343 free_page((unsigned long)info->intf); xencons_free()
344 info->intf = NULL; xencons_free()
345 info->vtermno = 0; xencons_free()
346 kfree(info); xencons_free()
349 static int xen_console_remove(struct xencons_info *info) xen_console_remove() argument
351 xencons_disconnect_backend(info); xen_console_remove()
353 list_del(&info->list); xen_console_remove()
355 if (info->xbdev != NULL) xen_console_remove()
356 xencons_free(info); xen_console_remove()
359 iounmap(info->intf); xen_console_remove()
360 kfree(info); xen_console_remove()
372 struct xencons_info *info) xencons_connect_backend()
382 info->evtchn = evtchn; xencons_connect_backend()
386 info->irq = irq; xencons_connect_backend()
388 info->hvc = hvc_alloc(xenbus_devid_to_vtermno(devid), xencons_connect_backend()
390 if (IS_ERR(info->hvc)) xencons_connect_backend()
391 return PTR_ERR(info->hvc); xencons_connect_backend()
393 mfn = virt_to_mfn(info->intf); xencons_connect_backend()
395 mfn = __pa(info->intf) >> PAGE_SHIFT; xencons_connect_backend()
399 info->gntref = gref_head; xencons_connect_backend()
403 gnttab_grant_foreign_access_ref(ref, info->xbdev->otherend_id, xencons_connect_backend()
440 struct xencons_info *info; xencons_probe() local
446 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); xencons_probe()
447 if (!info) xencons_probe()
449 dev_set_drvdata(&dev->dev, info); xencons_probe()
450 info->xbdev = dev; xencons_probe()
451 info->vtermno = xenbus_devid_to_vtermno(devid); xencons_probe()
452 info->intf = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO); xencons_probe()
453 if (!info->intf) xencons_probe()
456 ret = xencons_connect_backend(dev, info); xencons_probe()
460 list_add_tail(&info->list, &xenconsoles); xencons_probe()
469 xencons_disconnect_backend(info); xencons_probe()
470 xencons_free(info); xencons_probe()
476 struct xencons_info *info = dev_get_drvdata(&dev->dev); xencons_resume() local
478 xencons_disconnect_backend(info); xencons_resume()
479 memset(info->intf, 0, PAGE_SIZE); xencons_resume()
480 return xencons_connect_backend(dev, info); xencons_resume()
529 struct xencons_info *info; xen_hvc_init() local
540 info = vtermno_to_xencons(HVC_COOKIE); xen_hvc_init()
550 info = vtermno_to_xencons(HVC_COOKIE); xen_hvc_init()
551 info->irq = bind_evtchn_to_irq(info->evtchn); xen_hvc_init()
553 if (info->irq < 0) xen_hvc_init()
554 info->irq = 0; /* NO_IRQ */ xen_hvc_init()
556 irq_set_noprobe(info->irq); xen_hvc_init()
558 info->hvc = hvc_alloc(HVC_COOKIE, info->irq, ops, 256); xen_hvc_init()
559 if (IS_ERR(info->hvc)) { xen_hvc_init()
560 r = PTR_ERR(info->hvc); xen_hvc_init()
562 list_del(&info->list); xen_hvc_init()
564 if (info->irq) xen_hvc_init()
565 unbind_from_irqhandler(info->irq, NULL); xen_hvc_init()
566 kfree(info); xen_hvc_init()
371 xencons_connect_backend(struct xenbus_device *dev, struct xencons_info *info) xencons_connect_backend() argument
/linux-4.1.27/fs/quota/
H A Dquota_tree.c25 static int get_index(struct qtree_mem_dqinfo *info, struct kqid qid, int depth) get_index() argument
27 unsigned int epb = info->dqi_usable_bs >> 2; get_index()
30 depth = info->dqi_qtree_depth - depth - 1; get_index()
37 static int qtree_dqstr_in_blk(struct qtree_mem_dqinfo *info) qtree_dqstr_in_blk() argument
39 return (info->dqi_usable_bs - sizeof(struct qt_disk_dqdbheader)) qtree_dqstr_in_blk()
40 / info->dqi_entry_size; qtree_dqstr_in_blk()
52 static ssize_t read_blk(struct qtree_mem_dqinfo *info, uint blk, char *buf) read_blk() argument
54 struct super_block *sb = info->dqi_sb; read_blk()
56 memset(buf, 0, info->dqi_usable_bs); read_blk()
57 return sb->s_op->quota_read(sb, info->dqi_type, buf, read_blk()
58 info->dqi_usable_bs, blk << info->dqi_blocksize_bits); read_blk()
61 static ssize_t write_blk(struct qtree_mem_dqinfo *info, uint blk, char *buf) write_blk() argument
63 struct super_block *sb = info->dqi_sb; write_blk()
66 ret = sb->s_op->quota_write(sb, info->dqi_type, buf, write_blk()
67 info->dqi_usable_bs, blk << info->dqi_blocksize_bits); write_blk()
68 if (ret != info->dqi_usable_bs) { write_blk()
77 static int get_free_dqblk(struct qtree_mem_dqinfo *info) get_free_dqblk() argument
79 char *buf = getdqbuf(info->dqi_usable_bs); get_free_dqblk()
85 if (info->dqi_free_blk) { get_free_dqblk()
86 blk = info->dqi_free_blk; get_free_dqblk()
87 ret = read_blk(info, blk, buf); get_free_dqblk()
90 info->dqi_free_blk = le32_to_cpu(dh->dqdh_next_free); get_free_dqblk()
93 memset(buf, 0, info->dqi_usable_bs); get_free_dqblk()
95 ret = write_blk(info, info->dqi_blocks, buf); get_free_dqblk()
98 blk = info->dqi_blocks++; get_free_dqblk()
100 mark_info_dirty(info->dqi_sb, info->dqi_type); get_free_dqblk()
108 static int put_free_dqblk(struct qtree_mem_dqinfo *info, char *buf, uint blk) put_free_dqblk() argument
113 dh->dqdh_next_free = cpu_to_le32(info->dqi_free_blk); put_free_dqblk()
116 err = write_blk(info, blk, buf); put_free_dqblk()
119 info->dqi_free_blk = blk; put_free_dqblk()
120 mark_info_dirty(info->dqi_sb, info->dqi_type); put_free_dqblk()
125 static int remove_free_dqentry(struct qtree_mem_dqinfo *info, char *buf, remove_free_dqentry() argument
128 char *tmpbuf = getdqbuf(info->dqi_usable_bs); remove_free_dqentry()
137 err = read_blk(info, nextblk, tmpbuf); remove_free_dqentry()
142 err = write_blk(info, nextblk, tmpbuf); remove_free_dqentry()
147 err = read_blk(info, prevblk, tmpbuf); remove_free_dqentry()
152 err = write_blk(info, prevblk, tmpbuf); remove_free_dqentry()
156 info->dqi_free_entry = nextblk; remove_free_dqentry()
157 mark_info_dirty(info->dqi_sb, info->dqi_type); remove_free_dqentry()
162 if (write_blk(info, blk, buf) < 0) remove_free_dqentry()
163 quota_error(info->dqi_sb, "Can't write block (%u) " remove_free_dqentry()
172 static int insert_free_dqentry(struct qtree_mem_dqinfo *info, char *buf, insert_free_dqentry() argument
175 char *tmpbuf = getdqbuf(info->dqi_usable_bs); insert_free_dqentry()
181 dh->dqdh_next_free = cpu_to_le32(info->dqi_free_entry); insert_free_dqentry()
183 err = write_blk(info, blk, buf); insert_free_dqentry()
186 if (info->dqi_free_entry) { insert_free_dqentry()
187 err = read_blk(info, info->dqi_free_entry, tmpbuf); insert_free_dqentry()
192 err = write_blk(info, info->dqi_free_entry, tmpbuf); insert_free_dqentry()
197 info->dqi_free_entry = blk; insert_free_dqentry()
198 mark_info_dirty(info->dqi_sb, info->dqi_type); insert_free_dqentry()
206 int qtree_entry_unused(struct qtree_mem_dqinfo *info, char *disk) qtree_entry_unused() argument
210 for (i = 0; i < info->dqi_entry_size; i++) qtree_entry_unused()
218 static uint find_free_dqentry(struct qtree_mem_dqinfo *info, find_free_dqentry() argument
223 char *buf = getdqbuf(info->dqi_usable_bs); find_free_dqentry()
232 if (info->dqi_free_entry) { find_free_dqentry()
233 blk = info->dqi_free_entry; find_free_dqentry()
234 *err = read_blk(info, blk, buf); find_free_dqentry()
238 blk = get_free_dqblk(info); find_free_dqentry()
244 memset(buf, 0, info->dqi_usable_bs); find_free_dqentry()
247 info->dqi_free_entry = blk; find_free_dqentry()
251 if (le16_to_cpu(dh->dqdh_entries) + 1 >= qtree_dqstr_in_blk(info)) { find_free_dqentry()
252 *err = remove_free_dqentry(info, buf, blk); find_free_dqentry()
262 for (i = 0; i < qtree_dqstr_in_blk(info); i++) { find_free_dqentry()
263 if (qtree_entry_unused(info, ddquot)) find_free_dqentry()
265 ddquot += info->dqi_entry_size; find_free_dqentry()
268 if (i == qtree_dqstr_in_blk(info)) { find_free_dqentry()
274 *err = write_blk(info, blk, buf); find_free_dqentry()
280 dquot->dq_off = (blk << info->dqi_blocksize_bits) + find_free_dqentry()
282 i * info->dqi_entry_size; find_free_dqentry()
291 static int do_insert_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot, do_insert_tree() argument
294 char *buf = getdqbuf(info->dqi_usable_bs); do_insert_tree()
302 ret = get_free_dqblk(info); do_insert_tree()
306 memset(buf, 0, info->dqi_usable_bs); do_insert_tree()
309 ret = read_blk(info, *treeblk, buf); do_insert_tree()
317 newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]); do_insert_tree()
320 if (depth == info->dqi_qtree_depth - 1) { do_insert_tree()
325 le32_to_cpu(ref[get_index(info, do_insert_tree()
331 newblk = find_free_dqentry(info, dquot, &ret); do_insert_tree()
333 ret = do_insert_tree(info, dquot, &newblk, depth+1); do_insert_tree()
336 ref[get_index(info, dquot->dq_id, depth)] = do_insert_tree()
338 ret = write_blk(info, *treeblk, buf); do_insert_tree()
340 put_free_dqblk(info, buf, *treeblk); do_insert_tree()
348 static inline int dq_insert_tree(struct qtree_mem_dqinfo *info, dq_insert_tree() argument
354 if (info->dqi_blocks <= QT_TREEOFF) { dq_insert_tree()
359 return do_insert_tree(info, dquot, &tmp, 0); dq_insert_tree()
366 int qtree_write_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot) qtree_write_dquot() argument
371 char *ddquot = getdqbuf(info->dqi_entry_size); qtree_write_dquot()
378 ret = dq_insert_tree(info, dquot); qtree_write_dquot()
387 info->dqi_ops->mem2disk_dqblk(ddquot, dquot); qtree_write_dquot()
389 ret = sb->s_op->quota_write(sb, type, ddquot, info->dqi_entry_size, qtree_write_dquot()
391 if (ret != info->dqi_entry_size) { qtree_write_dquot()
406 static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot, free_dqentry() argument
410 char *buf = getdqbuf(info->dqi_usable_bs); free_dqentry()
415 if (dquot->dq_off >> info->dqi_blocksize_bits != blk) { free_dqentry()
418 (uint)(dquot->dq_off >> info->dqi_blocksize_bits)); free_dqentry()
421 ret = read_blk(info, blk, buf); free_dqentry()
430 ret = remove_free_dqentry(info, buf, blk); free_dqentry()
432 ret = put_free_dqblk(info, buf, blk); free_dqentry()
440 (dquot->dq_off & ((1 << info->dqi_blocksize_bits) - 1)), free_dqentry()
441 0, info->dqi_entry_size); free_dqentry()
443 qtree_dqstr_in_blk(info) - 1) { free_dqentry()
445 ret = insert_free_dqentry(info, buf, blk); free_dqentry()
452 ret = write_blk(info, blk, buf); free_dqentry()
467 static int remove_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot, remove_tree() argument
470 char *buf = getdqbuf(info->dqi_usable_bs); remove_tree()
477 ret = read_blk(info, *blk, buf); remove_tree()
483 newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]); remove_tree()
484 if (depth == info->dqi_qtree_depth - 1) { remove_tree()
485 ret = free_dqentry(info, dquot, newblk); remove_tree()
488 ret = remove_tree(info, dquot, &newblk, depth+1); remove_tree()
492 ref[get_index(info, dquot->dq_id, depth)] = cpu_to_le32(0); remove_tree()
494 for (i = 0; i < (info->dqi_usable_bs >> 2) && !ref[i]; i++) remove_tree()
497 if (i == (info->dqi_usable_bs >> 2) remove_tree()
499 put_free_dqblk(info, buf, *blk); remove_tree()
502 ret = write_blk(info, *blk, buf); remove_tree()
515 int qtree_delete_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot) qtree_delete_dquot() argument
521 return remove_tree(info, dquot, &tmp, 0); qtree_delete_dquot()
526 static loff_t find_block_dqentry(struct qtree_mem_dqinfo *info, find_block_dqentry() argument
529 char *buf = getdqbuf(info->dqi_usable_bs); find_block_dqentry()
536 ret = read_blk(info, blk, buf); find_block_dqentry()
543 for (i = 0; i < qtree_dqstr_in_blk(info); i++) { find_block_dqentry()
544 if (info->dqi_ops->is_id(ddquot, dquot)) find_block_dqentry()
546 ddquot += info->dqi_entry_size; find_block_dqentry()
548 if (i == qtree_dqstr_in_blk(info)) { find_block_dqentry()
555 ret = (blk << info->dqi_blocksize_bits) + sizeof(struct find_block_dqentry()
556 qt_disk_dqdbheader) + i * info->dqi_entry_size; find_block_dqentry()
564 static loff_t find_tree_dqentry(struct qtree_mem_dqinfo *info, find_tree_dqentry() argument
567 char *buf = getdqbuf(info->dqi_usable_bs); find_tree_dqentry()
573 ret = read_blk(info, blk, buf); find_tree_dqentry()
580 blk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]); find_tree_dqentry()
583 if (depth < info->dqi_qtree_depth - 1) find_tree_dqentry()
584 ret = find_tree_dqentry(info, dquot, blk, depth+1); find_tree_dqentry()
586 ret = find_block_dqentry(info, dquot, blk); find_tree_dqentry()
593 static inline loff_t find_dqentry(struct qtree_mem_dqinfo *info, find_dqentry() argument
596 return find_tree_dqentry(info, dquot, QT_TREEOFF, 0); find_dqentry()
599 int qtree_read_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot) qtree_read_dquot() argument
616 offset = find_dqentry(info, dquot); qtree_read_dquot()
631 ddquot = getdqbuf(info->dqi_entry_size); qtree_read_dquot()
634 ret = sb->s_op->quota_read(sb, type, ddquot, info->dqi_entry_size, qtree_read_dquot()
636 if (ret != info->dqi_entry_size) { qtree_read_dquot()
647 info->dqi_ops->disk2mem_dqblk(dquot, ddquot); qtree_read_dquot()
663 int qtree_release_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot) qtree_release_dquot() argument
667 return qtree_delete_dquot(info, dquot); qtree_release_dquot()
/linux-4.1.27/drivers/firmware/
H A Dedd.c59 struct edd_info *info; member in struct:edd_device
97 return edev->info; edd_dev_get_info()
107 edev->info = &edd.edd_info[i]; edd_dev_set_info()
132 struct edd_info *info; edd_show_host_bus() local
138 info = edd_dev_get_info(edev); edd_show_host_bus()
139 if (!info || !buf) edd_show_host_bus()
143 if (isprint(info->params.host_bus_type[i])) { edd_show_host_bus()
144 p += scnprintf(p, left, "%c", info->params.host_bus_type[i]); edd_show_host_bus()
150 if (!strncmp(info->params.host_bus_type, "ISA", 3)) { edd_show_host_bus()
152 info->params.interface_path.isa.base_address); edd_show_host_bus()
153 } else if (!strncmp(info->params.host_bus_type, "PCIX", 4) || edd_show_host_bus()
154 !strncmp(info->params.host_bus_type, "PCI", 3) || edd_show_host_bus()
155 !strncmp(info->params.host_bus_type, "XPRS", 4)) { edd_show_host_bus()
158 info->params.interface_path.pci.bus, edd_show_host_bus()
159 info->params.interface_path.pci.slot, edd_show_host_bus()
160 info->params.interface_path.pci.function, edd_show_host_bus()
161 info->params.interface_path.pci.channel); edd_show_host_bus()
162 } else if (!strncmp(info->params.host_bus_type, "IBND", 4) || edd_show_host_bus()
163 !strncmp(info->params.host_bus_type, "HTPT", 4)) { edd_show_host_bus()
166 info->params.interface_path.ibnd.reserved); edd_show_host_bus()
170 info->params.interface_path.unknown.reserved); edd_show_host_bus()
178 struct edd_info *info; edd_show_interface() local
184 info = edd_dev_get_info(edev); edd_show_interface()
185 if (!info || !buf) edd_show_interface()
189 if (isprint(info->params.interface_type[i])) { edd_show_interface()
190 p += scnprintf(p, left, "%c", info->params.interface_type[i]); edd_show_interface()
195 if (!strncmp(info->params.interface_type, "ATAPI", 5)) { edd_show_interface()
197 info->params.device_path.atapi.device, edd_show_interface()
198 info->params.device_path.atapi.lun); edd_show_interface()
199 } else if (!strncmp(info->params.interface_type, "ATA", 3)) { edd_show_interface()
201 info->params.device_path.ata.device); edd_show_interface()
202 } else if (!strncmp(info->params.interface_type, "SCSI", 4)) { edd_show_interface()
204 info->params.device_path.scsi.id, edd_show_interface()
205 info->params.device_path.scsi.lun); edd_show_interface()
206 } else if (!strncmp(info->params.interface_type, "USB", 3)) { edd_show_interface()
208 info->params.device_path.usb.serial_number); edd_show_interface()
209 } else if (!strncmp(info->params.interface_type, "1394", 4)) { edd_show_interface()
211 info->params.device_path.i1394.eui); edd_show_interface()
212 } else if (!strncmp(info->params.interface_type, "FIBRE", 5)) { edd_show_interface()
214 info->params.device_path.fibre.wwid, edd_show_interface()
215 info->params.device_path.fibre.lun); edd_show_interface()
216 } else if (!strncmp(info->params.interface_type, "I2O", 3)) { edd_show_interface()
218 info->params.device_path.i2o.identity_tag); edd_show_interface()
219 } else if (!strncmp(info->params.interface_type, "RAID", 4)) { edd_show_interface()
221 info->params.device_path.raid.array_number); edd_show_interface()
222 } else if (!strncmp(info->params.interface_type, "SATA", 4)) { edd_show_interface()
224 info->params.device_path.sata.device); edd_show_interface()
227 info->params.device_path.unknown.reserved1, edd_show_interface()
228 info->params.device_path.unknown.reserved2); edd_show_interface()
244 struct edd_info *info; edd_show_raw_data() local
245 ssize_t len = sizeof (info->params); edd_show_raw_data()
248 info = edd_dev_get_info(edev); edd_show_raw_data()
249 if (!info || !buf) edd_show_raw_data()
252 if (!(info->params.key == 0xBEDD || info->params.key == 0xDDBE)) edd_show_raw_data()
253 len = info->params.length; edd_show_raw_data()
256 if (len > (sizeof(info->params))) edd_show_raw_data()
257 len = sizeof(info->params); edd_show_raw_data()
259 memcpy(buf, &info->params, len); edd_show_raw_data()
266 struct edd_info *info; edd_show_version() local
270 info = edd_dev_get_info(edev); edd_show_version()
271 if (!info || !buf) edd_show_version()
274 p += scnprintf(p, left, "0x%02x\n", info->version); edd_show_version()
289 struct edd_info *info; edd_show_extensions() local
293 info = edd_dev_get_info(edev); edd_show_extensions()
294 if (!info || !buf) edd_show_extensions()
297 if (info->interface_support & EDD_EXT_FIXED_DISK_ACCESS) { edd_show_extensions()
300 if (info->interface_support & EDD_EXT_DEVICE_LOCKING_AND_EJECTING) { edd_show_extensions()
303 if (info->interface_support & EDD_EXT_ENHANCED_DISK_DRIVE_SUPPORT) { edd_show_extensions()
306 if (info->interface_support & EDD_EXT_64BIT_EXTENSIONS) { edd_show_extensions()
315 struct edd_info *info; edd_show_info_flags() local
319 info = edd_dev_get_info(edev); edd_show_info_flags()
320 if (!info || !buf) edd_show_info_flags()
323 if (info->params.info_flags & EDD_INFO_DMA_BOUNDARY_ERROR_TRANSPARENT) edd_show_info_flags()
325 if (info->params.info_flags & EDD_INFO_GEOMETRY_VALID) edd_show_info_flags()
327 if (info->params.info_flags & EDD_INFO_REMOVABLE) edd_show_info_flags()
329 if (info->params.info_flags & EDD_INFO_WRITE_VERIFY) edd_show_info_flags()
331 if (info->params.info_flags & EDD_INFO_MEDIA_CHANGE_NOTIFICATION) edd_show_info_flags()
333 if (info->params.info_flags & EDD_INFO_LOCKABLE) edd_show_info_flags()
335 if (info->params.info_flags & EDD_INFO_NO_MEDIA_PRESENT) edd_show_info_flags()
337 if (info->params.info_flags & EDD_INFO_USE_INT13_FN50) edd_show_info_flags()
345 struct edd_info *info; edd_show_legacy_max_cylinder() local
349 info = edd_dev_get_info(edev); edd_show_legacy_max_cylinder()
350 if (!info || !buf) edd_show_legacy_max_cylinder()
353 p += snprintf(p, left, "%u\n", info->legacy_max_cylinder); edd_show_legacy_max_cylinder()
360 struct edd_info *info; edd_show_legacy_max_head() local
364 info = edd_dev_get_info(edev); edd_show_legacy_max_head()
365 if (!info || !buf) edd_show_legacy_max_head()
368 p += snprintf(p, left, "%u\n", info->legacy_max_head); edd_show_legacy_max_head()
375 struct edd_info *info; edd_show_legacy_sectors_per_track() local
379 info = edd_dev_get_info(edev); edd_show_legacy_sectors_per_track()
380 if (!info || !buf) edd_show_legacy_sectors_per_track()
383 p += snprintf(p, left, "%u\n", info->legacy_sectors_per_track); edd_show_legacy_sectors_per_track()
390 struct edd_info *info; edd_show_default_cylinders() local
394 info = edd_dev_get_info(edev); edd_show_default_cylinders()
395 if (!info || !buf) edd_show_default_cylinders()
398 p += scnprintf(p, left, "%u\n", info->params.num_default_cylinders); edd_show_default_cylinders()
405 struct edd_info *info; edd_show_default_heads() local
409 info = edd_dev_get_info(edev); edd_show_default_heads()
410 if (!info || !buf) edd_show_default_heads()
413 p += scnprintf(p, left, "%u\n", info->params.num_default_heads); edd_show_default_heads()
420 struct edd_info *info; edd_show_default_sectors_per_track() local
424 info = edd_dev_get_info(edev); edd_show_default_sectors_per_track()
425 if (!info || !buf) edd_show_default_sectors_per_track()
428 p += scnprintf(p, left, "%u\n", info->params.sectors_per_track); edd_show_default_sectors_per_track()
435 struct edd_info *info; edd_show_sectors() local
439 info = edd_dev_get_info(edev); edd_show_sectors()
440 if (!info || !buf) edd_show_sectors()
443 p += scnprintf(p, left, "%llu\n", info->params.number_of_sectors); edd_show_sectors()
461 struct edd_info *info; edd_has_legacy_max_cylinder() local
464 info = edd_dev_get_info(edev); edd_has_legacy_max_cylinder()
465 if (!info) edd_has_legacy_max_cylinder()
467 return info->legacy_max_cylinder > 0; edd_has_legacy_max_cylinder()
473 struct edd_info *info; edd_has_legacy_max_head() local
476 info = edd_dev_get_info(edev); edd_has_legacy_max_head()
477 if (!info) edd_has_legacy_max_head()
479 return info->legacy_max_head > 0; edd_has_legacy_max_head()
485 struct edd_info *info; edd_has_legacy_sectors_per_track() local
488 info = edd_dev_get_info(edev); edd_has_legacy_sectors_per_track()
489 if (!info) edd_has_legacy_sectors_per_track()
491 return info->legacy_sectors_per_track > 0; edd_has_legacy_sectors_per_track()
497 struct edd_info *info; edd_has_default_cylinders() local
500 info = edd_dev_get_info(edev); edd_has_default_cylinders()
501 if (!info) edd_has_default_cylinders()
503 return info->params.num_default_cylinders > 0; edd_has_default_cylinders()
509 struct edd_info *info; edd_has_default_heads() local
512 info = edd_dev_get_info(edev); edd_has_default_heads()
513 if (!info) edd_has_default_heads()
515 return info->params.num_default_heads > 0; edd_has_default_heads()
521 struct edd_info *info; edd_has_default_sectors_per_track() local
524 info = edd_dev_get_info(edev); edd_has_default_sectors_per_track()
525 if (!info) edd_has_default_sectors_per_track()
527 return info->params.sectors_per_track > 0; edd_has_default_sectors_per_track()
533 struct edd_info *info; edd_has_edd30() local
539 info = edd_dev_get_info(edev); edd_has_edd30()
540 if (!info) edd_has_edd30()
543 if (!(info->params.key == 0xBEDD || info->params.key == 0xDDBE)) { edd_has_edd30()
549 if (info->params.device_path_info_length != 44) edd_has_edd30()
552 for (i = 30; i < info->params.device_path_info_length + 30; i++) edd_has_edd30()
553 csum += *(((u8 *)&info->params) + i); edd_has_edd30()
647 struct edd_info *info; edd_dev_is_type() local
650 info = edd_dev_get_info(edev); edd_dev_is_type()
652 if (type && info) { edd_dev_is_type()
653 if (!strncmp(info->params.host_bus_type, type, strlen(type)) || edd_dev_is_type()
654 !strncmp(info->params.interface_type, type, strlen(type))) edd_dev_is_type()
669 struct edd_info *info = edd_dev_get_info(edev); edd_get_pci_dev() local
672 return pci_get_bus_and_slot(info->params.interface_path.pci.bus, edd_get_pci_dev()
673 PCI_DEVFN(info->params.interface_path.pci.slot, edd_get_pci_dev()
674 info->params.interface_path.pci. edd_get_pci_dev()
/linux-4.1.27/arch/parisc/kernel/
H A Dunwind.c170 /* Called from setup_arch to import the kernel unwind info */ unwind_init()
208 static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size) unwind_special() argument
214 struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN); unwind_special()
216 info->prev_sp = regs->gr[30]; unwind_special()
217 info->prev_ip = regs->iaoq[0]; unwind_special()
225 static void unwind_frame_regs(struct unwind_frame_info *info) unwind_frame_regs() argument
233 e = find_unwind_entry(info->ip); unwind_frame_regs()
237 dbg("Cannot find unwind entry for 0x%lx; forced unwinding\n", info->ip); unwind_frame_regs()
245 kallsyms_lookup(info->ip, NULL, NULL, &modname, unwind_frame_regs()
248 dbg("info->ip = 0x%lx, name = %s\n", info->ip, symname); unwind_frame_regs()
251 info->prev_sp = info->sp - CALLEE_SAVE_FRAME_SIZE; unwind_frame_regs()
252 info->prev_ip = *(unsigned long *)(info->prev_sp - RP_OFFSET); unwind_frame_regs()
255 info->ip, info->prev_sp, unwind_frame_regs()
256 info->prev_ip); unwind_frame_regs()
260 info->prev_ip = info->prev_sp = 0; unwind_frame_regs()
273 sp = info->sp & ~63; unwind_frame_regs()
277 info->prev_sp = sp - 64; unwind_frame_regs()
278 info->prev_ip = 0; unwind_frame_regs()
279 if (get_user(tmp, (unsigned long *)(info->prev_sp - RP_OFFSET))) unwind_frame_regs()
281 info->prev_ip = tmp; unwind_frame_regs()
282 sp = info->prev_sp; unwind_frame_regs()
283 } while (!kernel_text_address(info->prev_ip)); unwind_frame_regs()
285 info->rp = 0; unwind_frame_regs()
287 dbg("analyzing func @ %lx with no unwind info, setting " unwind_frame_regs()
288 "prev_sp=%lx prev_ip=%lx\n", info->ip, unwind_frame_regs()
289 info->prev_sp, info->prev_ip); unwind_frame_regs()
301 npc < info->ip; unwind_frame_regs()
312 "%lx, frame_size = %ld\n", info->ip, unwind_frame_regs()
319 "%lx, frame_size = %ld\n", info->ip, unwind_frame_regs()
326 "-20(sp) @ %lx\n", info->ip, npc); unwind_frame_regs()
332 "-16(sp) @ %lx\n", info->ip, npc); unwind_frame_regs()
336 if (!unwind_special(info, e->region_start, frame_size)) { unwind_frame_regs()
337 info->prev_sp = info->sp - frame_size; unwind_frame_regs()
339 info->rp = info->r31; unwind_frame_regs()
341 info->rp = *(unsigned long *)(info->prev_sp - rpoffset); unwind_frame_regs()
342 info->prev_ip = info->rp; unwind_frame_regs()
343 info->rp = 0; unwind_frame_regs()
347 "prev_ip=%lx npc=%lx\n", info->ip, info->prev_sp, unwind_frame_regs()
348 info->prev_ip, npc); unwind_frame_regs()
352 void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, unwind_frame_init() argument
355 memset(info, 0, sizeof(struct unwind_frame_info)); unwind_frame_init()
356 info->t = t; unwind_frame_init()
357 info->sp = regs->gr[30]; unwind_frame_init()
358 info->ip = regs->iaoq[0]; unwind_frame_init()
359 info->rp = regs->gr[2]; unwind_frame_init()
360 info->r31 = regs->gr[31]; unwind_frame_init()
363 t ? (int)t->pid : -1, info->sp, info->ip); unwind_frame_init()
366 void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t) unwind_frame_init_from_blocked_task() argument
377 unwind_frame_init(info, t, r2); unwind_frame_init_from_blocked_task()
381 void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *regs) unwind_frame_init_running() argument
383 unwind_frame_init(info, current, regs); unwind_frame_init_running()
406 int unwind_to_user(struct unwind_frame_info *info) unwind_to_user() argument
411 ret = unwind_once(info); unwind_to_user()
412 } while (!ret && !(info->ip & 3)); unwind_to_user()
419 struct unwind_frame_info info; return_address() local
423 /* initialize unwind info */ return_address()
429 unwind_frame_init(&info, current, &r); return_address()
434 if (unwind_once(&info) < 0 || info.ip == 0) return_address()
436 if (!kernel_text_address(info.ip)) return_address()
438 } while (info.ip && level--); return_address()
440 return info.ip; return_address()
/linux-4.1.27/arch/x86/um/os-Linux/
H A Dtls.c28 user_desc_t info; check_host_supports_tls() local
29 info.entry_number = val[i]; check_host_supports_tls()
31 if (syscall(__NR_get_thread_area, &info) == 0) { check_host_supports_tls()
47 int os_set_thread_area(user_desc_t *info, int pid) os_set_thread_area() argument
51 ret = ptrace(PTRACE_SET_THREAD_AREA, pid, info->entry_number, os_set_thread_area()
52 (unsigned long) info); os_set_thread_area()
58 int os_get_thread_area(user_desc_t *info, int pid) os_get_thread_area() argument
62 ret = ptrace(PTRACE_GET_THREAD_AREA, pid, info->entry_number, os_get_thread_area()
63 (unsigned long) info); os_get_thread_area()
/linux-4.1.27/net/l2tp/
H A Dl2tp_netlink.c58 static struct l2tp_session *l2tp_nl_session_find(struct genl_info *info) l2tp_nl_session_find() argument
65 struct net *net = genl_info_net(info); l2tp_nl_session_find()
67 if (info->attrs[L2TP_ATTR_IFNAME]) { l2tp_nl_session_find()
68 ifname = nla_data(info->attrs[L2TP_ATTR_IFNAME]); l2tp_nl_session_find()
70 } else if ((info->attrs[L2TP_ATTR_SESSION_ID]) && l2tp_nl_session_find()
71 (info->attrs[L2TP_ATTR_CONN_ID])) { l2tp_nl_session_find()
72 tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_CONN_ID]); l2tp_nl_session_find()
73 session_id = nla_get_u32(info->attrs[L2TP_ATTR_SESSION_ID]); l2tp_nl_session_find()
82 static int l2tp_nl_cmd_noop(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_noop() argument
94 hdr = genlmsg_put(msg, info->snd_portid, info->snd_seq, l2tp_nl_cmd_noop()
103 return genlmsg_unicast(genl_info_net(info), msg, info->snd_portid); l2tp_nl_cmd_noop()
113 struct genl_info *info, l2tp_tunnel_notify()
124 ret = l2tp_nl_tunnel_send(msg, info->snd_portid, info->snd_seq, l2tp_tunnel_notify()
141 struct genl_info *info, l2tp_session_notify()
152 ret = l2tp_nl_session_send(msg, info->snd_portid, info->snd_seq, l2tp_session_notify()
168 static int l2tp_nl_cmd_tunnel_create(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_tunnel_create() argument
177 struct net *net = genl_info_net(info); l2tp_nl_cmd_tunnel_create()
179 if (!info->attrs[L2TP_ATTR_CONN_ID]) { l2tp_nl_cmd_tunnel_create()
183 tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_CONN_ID]); l2tp_nl_cmd_tunnel_create()
185 if (!info->attrs[L2TP_ATTR_PEER_CONN_ID]) { l2tp_nl_cmd_tunnel_create()
189 peer_tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_PEER_CONN_ID]); l2tp_nl_cmd_tunnel_create()
191 if (!info->attrs[L2TP_ATTR_PROTO_VERSION]) { l2tp_nl_cmd_tunnel_create()
195 proto_version = nla_get_u8(info->attrs[L2TP_ATTR_PROTO_VERSION]); l2tp_nl_cmd_tunnel_create()
197 if (!info->attrs[L2TP_ATTR_ENCAP_TYPE]) { l2tp_nl_cmd_tunnel_create()
201 cfg.encap = nla_get_u16(info->attrs[L2TP_ATTR_ENCAP_TYPE]); l2tp_nl_cmd_tunnel_create()
204 if (info->attrs[L2TP_ATTR_FD]) { l2tp_nl_cmd_tunnel_create()
205 fd = nla_get_u32(info->attrs[L2TP_ATTR_FD]); l2tp_nl_cmd_tunnel_create()
208 if (info->attrs[L2TP_ATTR_IP6_SADDR] && l2tp_nl_cmd_tunnel_create()
209 info->attrs[L2TP_ATTR_IP6_DADDR]) { l2tp_nl_cmd_tunnel_create()
211 info->attrs[L2TP_ATTR_IP6_SADDR]); l2tp_nl_cmd_tunnel_create()
213 info->attrs[L2TP_ATTR_IP6_DADDR]); l2tp_nl_cmd_tunnel_create()
216 if (info->attrs[L2TP_ATTR_IP_SADDR] && l2tp_nl_cmd_tunnel_create()
217 info->attrs[L2TP_ATTR_IP_DADDR]) { l2tp_nl_cmd_tunnel_create()
219 info->attrs[L2TP_ATTR_IP_SADDR]); l2tp_nl_cmd_tunnel_create()
221 info->attrs[L2TP_ATTR_IP_DADDR]); l2tp_nl_cmd_tunnel_create()
226 if (info->attrs[L2TP_ATTR_UDP_SPORT]) l2tp_nl_cmd_tunnel_create()
227 cfg.local_udp_port = nla_get_u16(info->attrs[L2TP_ATTR_UDP_SPORT]); l2tp_nl_cmd_tunnel_create()
228 if (info->attrs[L2TP_ATTR_UDP_DPORT]) l2tp_nl_cmd_tunnel_create()
229 cfg.peer_udp_port = nla_get_u16(info->attrs[L2TP_ATTR_UDP_DPORT]); l2tp_nl_cmd_tunnel_create()
230 if (info->attrs[L2TP_ATTR_UDP_CSUM]) l2tp_nl_cmd_tunnel_create()
231 cfg.use_udp_checksums = nla_get_flag(info->attrs[L2TP_ATTR_UDP_CSUM]); l2tp_nl_cmd_tunnel_create()
234 if (info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_TX]) l2tp_nl_cmd_tunnel_create()
235 cfg.udp6_zero_tx_checksums = nla_get_flag(info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_TX]); l2tp_nl_cmd_tunnel_create()
236 if (info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_RX]) l2tp_nl_cmd_tunnel_create()
237 cfg.udp6_zero_rx_checksums = nla_get_flag(info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_RX]); l2tp_nl_cmd_tunnel_create()
241 if (info->attrs[L2TP_ATTR_DEBUG]) l2tp_nl_cmd_tunnel_create()
242 cfg.debug = nla_get_u32(info->attrs[L2TP_ATTR_DEBUG]); l2tp_nl_cmd_tunnel_create()
260 ret = l2tp_tunnel_notify(&l2tp_nl_family, info, l2tp_nl_cmd_tunnel_create()
266 static int l2tp_nl_cmd_tunnel_delete(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_tunnel_delete() argument
271 struct net *net = genl_info_net(info); l2tp_nl_cmd_tunnel_delete()
273 if (!info->attrs[L2TP_ATTR_CONN_ID]) { l2tp_nl_cmd_tunnel_delete()
277 tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_CONN_ID]); l2tp_nl_cmd_tunnel_delete()
285 l2tp_tunnel_notify(&l2tp_nl_family, info, l2tp_nl_cmd_tunnel_delete()
294 static int l2tp_nl_cmd_tunnel_modify(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_tunnel_modify() argument
299 struct net *net = genl_info_net(info); l2tp_nl_cmd_tunnel_modify()
301 if (!info->attrs[L2TP_ATTR_CONN_ID]) { l2tp_nl_cmd_tunnel_modify()
305 tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_CONN_ID]); l2tp_nl_cmd_tunnel_modify()
313 if (info->attrs[L2TP_ATTR_DEBUG]) l2tp_nl_cmd_tunnel_modify()
314 tunnel->debug = nla_get_u32(info->attrs[L2TP_ATTR_DEBUG]); l2tp_nl_cmd_tunnel_modify()
316 ret = l2tp_tunnel_notify(&l2tp_nl_family, info, l2tp_nl_cmd_tunnel_modify()
413 static int l2tp_nl_cmd_tunnel_get(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_tunnel_get() argument
419 struct net *net = genl_info_net(info); l2tp_nl_cmd_tunnel_get()
421 if (!info->attrs[L2TP_ATTR_CONN_ID]) { l2tp_nl_cmd_tunnel_get()
426 tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_CONN_ID]); l2tp_nl_cmd_tunnel_get()
440 ret = l2tp_nl_tunnel_send(msg, info->snd_portid, info->snd_seq, l2tp_nl_cmd_tunnel_get()
445 return genlmsg_unicast(net, msg, info->snd_portid); l2tp_nl_cmd_tunnel_get()
479 static int l2tp_nl_cmd_session_create(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_session_create() argument
488 struct net *net = genl_info_net(info); l2tp_nl_cmd_session_create()
490 if (!info->attrs[L2TP_ATTR_CONN_ID]) { l2tp_nl_cmd_session_create()
494 tunnel_id = nla_get_u32(info->attrs[L2TP_ATTR_CONN_ID]); l2tp_nl_cmd_session_create()
501 if (!info->attrs[L2TP_ATTR_SESSION_ID]) { l2tp_nl_cmd_session_create()
505 session_id = nla_get_u32(info->attrs[L2TP_ATTR_SESSION_ID]); l2tp_nl_cmd_session_create()
512 if (!info->attrs[L2TP_ATTR_PEER_SESSION_ID]) { l2tp_nl_cmd_session_create()
516 peer_session_id = nla_get_u32(info->attrs[L2TP_ATTR_PEER_SESSION_ID]); l2tp_nl_cmd_session_create()
518 if (!info->attrs[L2TP_ATTR_PW_TYPE]) { l2tp_nl_cmd_session_create()
522 cfg.pw_type = nla_get_u16(info->attrs[L2TP_ATTR_PW_TYPE]); l2tp_nl_cmd_session_create()
529 if (info->attrs[L2TP_ATTR_OFFSET]) l2tp_nl_cmd_session_create()
530 cfg.offset = nla_get_u16(info->attrs[L2TP_ATTR_OFFSET]); l2tp_nl_cmd_session_create()
532 if (info->attrs[L2TP_ATTR_DATA_SEQ]) l2tp_nl_cmd_session_create()
533 cfg.data_seq = nla_get_u8(info->attrs[L2TP_ATTR_DATA_SEQ]); l2tp_nl_cmd_session_create()
536 if (info->attrs[L2TP_ATTR_L2SPEC_TYPE]) l2tp_nl_cmd_session_create()
537 cfg.l2specific_type = nla_get_u8(info->attrs[L2TP_ATTR_L2SPEC_TYPE]); l2tp_nl_cmd_session_create()
540 if (info->attrs[L2TP_ATTR_L2SPEC_LEN]) l2tp_nl_cmd_session_create()
541 cfg.l2specific_len = nla_get_u8(info->attrs[L2TP_ATTR_L2SPEC_LEN]); l2tp_nl_cmd_session_create()
543 if (info->attrs[L2TP_ATTR_COOKIE]) { l2tp_nl_cmd_session_create()
544 u16 len = nla_len(info->attrs[L2TP_ATTR_COOKIE]); l2tp_nl_cmd_session_create()
550 memcpy(&cfg.cookie[0], nla_data(info->attrs[L2TP_ATTR_COOKIE]), len); l2tp_nl_cmd_session_create()
552 if (info->attrs[L2TP_ATTR_PEER_COOKIE]) { l2tp_nl_cmd_session_create()
553 u16 len = nla_len(info->attrs[L2TP_ATTR_PEER_COOKIE]); l2tp_nl_cmd_session_create()
559 memcpy(&cfg.peer_cookie[0], nla_data(info->attrs[L2TP_ATTR_PEER_COOKIE]), len); l2tp_nl_cmd_session_create()
561 if (info->attrs[L2TP_ATTR_IFNAME]) l2tp_nl_cmd_session_create()
562 cfg.ifname = nla_data(info->attrs[L2TP_ATTR_IFNAME]); l2tp_nl_cmd_session_create()
564 if (info->attrs[L2TP_ATTR_VLAN_ID]) l2tp_nl_cmd_session_create()
565 cfg.vlan_id = nla_get_u16(info->attrs[L2TP_ATTR_VLAN_ID]); l2tp_nl_cmd_session_create()
568 if (info->attrs[L2TP_ATTR_DEBUG]) l2tp_nl_cmd_session_create()
569 cfg.debug = nla_get_u32(info->attrs[L2TP_ATTR_DEBUG]); l2tp_nl_cmd_session_create()
571 if (info->attrs[L2TP_ATTR_RECV_SEQ]) l2tp_nl_cmd_session_create()
572 cfg.recv_seq = nla_get_u8(info->attrs[L2TP_ATTR_RECV_SEQ]); l2tp_nl_cmd_session_create()
574 if (info->attrs[L2TP_ATTR_SEND_SEQ]) l2tp_nl_cmd_session_create()
575 cfg.send_seq = nla_get_u8(info->attrs[L2TP_ATTR_SEND_SEQ]); l2tp_nl_cmd_session_create()
577 if (info->attrs[L2TP_ATTR_LNS_MODE]) l2tp_nl_cmd_session_create()
578 cfg.lns_mode = nla_get_u8(info->attrs[L2TP_ATTR_LNS_MODE]); l2tp_nl_cmd_session_create()
580 if (info->attrs[L2TP_ATTR_RECV_TIMEOUT]) l2tp_nl_cmd_session_create()
581 cfg.reorder_timeout = nla_get_msecs(info->attrs[L2TP_ATTR_RECV_TIMEOUT]); l2tp_nl_cmd_session_create()
583 if (info->attrs[L2TP_ATTR_MTU]) l2tp_nl_cmd_session_create()
584 cfg.mtu = nla_get_u16(info->attrs[L2TP_ATTR_MTU]); l2tp_nl_cmd_session_create()
586 if (info->attrs[L2TP_ATTR_MRU]) l2tp_nl_cmd_session_create()
587 cfg.mru = nla_get_u16(info->attrs[L2TP_ATTR_MRU]); l2tp_nl_cmd_session_create()
600 if (!info->attrs[L2TP_ATTR_VLAN_ID]) { l2tp_nl_cmd_session_create()
624 ret = l2tp_session_notify(&l2tp_nl_family, info, session, l2tp_nl_cmd_session_create()
632 static int l2tp_nl_cmd_session_delete(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_session_delete() argument
638 session = l2tp_nl_session_find(info); l2tp_nl_cmd_session_delete()
644 l2tp_session_notify(&l2tp_nl_family, info, l2tp_nl_cmd_session_delete()
656 static int l2tp_nl_cmd_session_modify(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_session_modify() argument
661 session = l2tp_nl_session_find(info); l2tp_nl_cmd_session_modify()
667 if (info->attrs[L2TP_ATTR_DEBUG]) l2tp_nl_cmd_session_modify()
668 session->debug = nla_get_u32(info->attrs[L2TP_ATTR_DEBUG]); l2tp_nl_cmd_session_modify()
670 if (info->attrs[L2TP_ATTR_DATA_SEQ]) l2tp_nl_cmd_session_modify()
671 session->data_seq = nla_get_u8(info->attrs[L2TP_ATTR_DATA_SEQ]); l2tp_nl_cmd_session_modify()
673 if (info->attrs[L2TP_ATTR_RECV_SEQ]) l2tp_nl_cmd_session_modify()
674 session->recv_seq = nla_get_u8(info->attrs[L2TP_ATTR_RECV_SEQ]); l2tp_nl_cmd_session_modify()
676 if (info->attrs[L2TP_ATTR_SEND_SEQ]) { l2tp_nl_cmd_session_modify()
677 session->send_seq = nla_get_u8(info->attrs[L2TP_ATTR_SEND_SEQ]); l2tp_nl_cmd_session_modify()
681 if (info->attrs[L2TP_ATTR_LNS_MODE]) l2tp_nl_cmd_session_modify()
682 session->lns_mode = nla_get_u8(info->attrs[L2TP_ATTR_LNS_MODE]); l2tp_nl_cmd_session_modify()
684 if (info->attrs[L2TP_ATTR_RECV_TIMEOUT]) l2tp_nl_cmd_session_modify()
685 session->reorder_timeout = nla_get_msecs(info->attrs[L2TP_ATTR_RECV_TIMEOUT]); l2tp_nl_cmd_session_modify()
687 if (info->attrs[L2TP_ATTR_MTU]) l2tp_nl_cmd_session_modify()
688 session->mtu = nla_get_u16(info->attrs[L2TP_ATTR_MTU]); l2tp_nl_cmd_session_modify()
690 if (info->attrs[L2TP_ATTR_MRU]) l2tp_nl_cmd_session_modify()
691 session->mru = nla_get_u16(info->attrs[L2TP_ATTR_MRU]); l2tp_nl_cmd_session_modify()
693 ret = l2tp_session_notify(&l2tp_nl_family, info, l2tp_nl_cmd_session_modify()
776 static int l2tp_nl_cmd_session_get(struct sk_buff *skb, struct genl_info *info) l2tp_nl_cmd_session_get() argument
782 session = l2tp_nl_session_find(info); l2tp_nl_cmd_session_get()
794 ret = l2tp_nl_session_send(msg, info->snd_portid, info->snd_seq, l2tp_nl_cmd_session_get()
799 return genlmsg_unicast(genl_info_net(info), msg, info->snd_portid); l2tp_nl_cmd_session_get()
112 l2tp_tunnel_notify(struct genl_family *family, struct genl_info *info, struct l2tp_tunnel *tunnel, u8 cmd) l2tp_tunnel_notify() argument
140 l2tp_session_notify(struct genl_family *family, struct genl_info *info, struct l2tp_session *session, u8 cmd) l2tp_session_notify() argument
/linux-4.1.27/drivers/ata/
H A Dpata_at32.c92 struct at32_ide_info *info, pata_at32_setup_timing()
95 struct smc_config *smc = &info->smc; pata_at32_setup_timing()
144 return smc_set_configuration(info->cs, smc); pata_at32_setup_timing()
153 struct at32_ide_info *info = ap->host->private_data; pata_at32_set_piomode() local
165 ret = pata_at32_setup_timing(ap->dev, info, &timing); pata_at32_set_piomode()
183 struct at32_ide_info *info) pata_at32_init_one()
211 ap->ioaddr.altstatus_addr = info->alt_addr + (0x06 << 1); pata_at32_init_one()
212 ap->ioaddr.ctl_addr = info->alt_addr + (0x06 << 1); pata_at32_init_one()
214 ap->ioaddr.data_addr = info->ide_addr + (ATA_REG_DATA << 1); pata_at32_init_one()
215 ap->ioaddr.error_addr = info->ide_addr + (ATA_REG_ERR << 1); pata_at32_init_one()
216 ap->ioaddr.feature_addr = info->ide_addr + (ATA_REG_FEATURE << 1); pata_at32_init_one()
217 ap->ioaddr.nsect_addr = info->ide_addr + (ATA_REG_NSECT << 1); pata_at32_init_one()
218 ap->ioaddr.lbal_addr = info->ide_addr + (ATA_REG_LBAL << 1); pata_at32_init_one()
219 ap->ioaddr.lbam_addr = info->ide_addr + (ATA_REG_LBAM << 1); pata_at32_init_one()
220 ap->ioaddr.lbah_addr = info->ide_addr + (ATA_REG_LBAH << 1); pata_at32_init_one()
221 ap->ioaddr.device_addr = info->ide_addr + (ATA_REG_DEVICE << 1); pata_at32_init_one()
222 ap->ioaddr.status_addr = info->ide_addr + (ATA_REG_STATUS << 1); pata_at32_init_one()
223 ap->ioaddr.command_addr = info->ide_addr + (ATA_REG_CMD << 1); pata_at32_init_one()
225 /* Set info as private data of ATA host */ pata_at32_init_one()
226 host->private_data = info; pata_at32_init_one()
229 return ata_host_activate(host, info->irq, ata_sff_interrupt, pata_at32_init_one()
241 struct at32_ide_info *info) pata_at32_debug_bus()
249 iowrite8(d1, info->alt_addr + (0x06 << 1)); pata_at32_debug_bus()
250 iowrite8(d2, info->alt_addr + (0x06 << 1)); pata_at32_debug_bus()
253 iowrite8(d1, info->ide_addr + (i << 1)); pata_at32_debug_bus()
254 iowrite8(d2, info->ide_addr + (i << 1)); pata_at32_debug_bus()
258 iowrite16(d1, info->ide_addr); pata_at32_debug_bus()
259 iowrite16(d1 << 8, info->ide_addr); pata_at32_debug_bus()
261 iowrite16(d1, info->ide_addr); pata_at32_debug_bus()
262 iowrite16(d1 << 8, info->ide_addr); pata_at32_debug_bus()
273 struct at32_ide_info *info; pata_at32_probe() local
293 info = kzalloc(sizeof(struct at32_ide_info), GFP_KERNEL); pata_at32_probe()
294 if (!info) pata_at32_probe()
297 info->irq = irq; pata_at32_probe()
298 info->cs = board->cs; pata_at32_probe()
301 info->res_ide.start = res->start + CF_IDE_OFFSET; pata_at32_probe()
302 info->res_ide.end = info->res_ide.start + CF_RES_SIZE - 1; pata_at32_probe()
303 info->res_ide.name = "ide"; pata_at32_probe()
304 info->res_ide.flags = IORESOURCE_MEM; pata_at32_probe()
306 ret = request_resource(res, &info->res_ide); pata_at32_probe()
310 info->res_alt.start = res->start + CF_ALT_IDE_OFFSET; pata_at32_probe()
311 info->res_alt.end = info->res_alt.start + CF_RES_SIZE - 1; pata_at32_probe()
312 info->res_alt.name = "alt"; pata_at32_probe()
313 info->res_alt.flags = IORESOURCE_MEM; pata_at32_probe()
315 ret = request_resource(res, &info->res_alt); pata_at32_probe()
320 info->smc.bus_width = 2; /* 16 bit data bus */ pata_at32_probe()
321 info->smc.nrd_controlled = 1; /* Sample data on rising edge of NRD */ pata_at32_probe()
322 info->smc.nwe_controlled = 0; /* Drive data on falling edge of NCS */ pata_at32_probe()
323 info->smc.nwait_mode = 3; /* NWAIT is in READY mode */ pata_at32_probe()
324 info->smc.byte_write = 0; /* Byte select access type */ pata_at32_probe()
325 info->smc.tdf_mode = 0; /* TDF optimization disabled */ pata_at32_probe()
326 info->smc.tdf_cycles = 0; /* No TDF wait cycles */ pata_at32_probe()
329 ret = pata_at32_setup_timing(dev, info, &initial_timing); pata_at32_probe()
335 info->ide_addr = devm_ioremap(dev, info->res_ide.start, 16); pata_at32_probe()
336 info->alt_addr = devm_ioremap(dev, info->res_alt.start, 16); pata_at32_probe()
337 if (!info->ide_addr || !info->alt_addr) pata_at32_probe()
341 pata_at32_debug_bus(dev, info); pata_at32_probe()
345 ret = pata_at32_init_one(dev, info); pata_at32_probe()
354 release_resource(&info->res_alt); pata_at32_probe()
356 release_resource(&info->res_ide); pata_at32_probe()
358 kfree(info); pata_at32_probe()
366 struct at32_ide_info *info; pata_at32_remove() local
371 info = host->private_data; pata_at32_remove()
374 if (!info) pata_at32_remove()
377 release_resource(&info->res_ide); pata_at32_remove()
378 release_resource(&info->res_alt); pata_at32_remove()
380 kfree(info); pata_at32_remove()
91 pata_at32_setup_timing(struct device *dev, struct at32_ide_info *info, const struct ata_timing *ata) pata_at32_setup_timing() argument
182 pata_at32_init_one(struct device *dev, struct at32_ide_info *info) pata_at32_init_one() argument
240 pata_at32_debug_bus(struct device *dev, struct at32_ide_info *info) pata_at32_debug_bus() argument
/linux-4.1.27/drivers/media/platform/blackfin/
H A Dppi.c51 const struct ppi_info *info = ppi->info; ppi_irq_err() local
53 switch (info->type) { ppi_irq_err()
56 struct bfin_ppi_regs *reg = info->base; ppi_irq_err()
70 struct bfin_eppi_regs *reg = info->base; ppi_irq_err()
81 struct bfin_eppi3_regs *reg = info->base; ppi_irq_err()
99 const struct ppi_info *info = ppi->info; ppi_attach_irq() local
102 ret = request_dma(info->dma_ch, "PPI_DMA"); ppi_attach_irq()
108 set_dma_callback(info->dma_ch, handler, ppi); ppi_attach_irq()
111 ret = request_irq(info->irq_err, ppi_irq_err, 0, "PPI ERROR", ppi); ppi_attach_irq()
114 free_dma(info->dma_ch); ppi_attach_irq()
122 const struct ppi_info *info = ppi->info; ppi_detach_irq() local
125 free_irq(info->irq_err, ppi); ppi_detach_irq()
126 free_dma(info->dma_ch); ppi_detach_irq()
131 const struct ppi_info *info = ppi->info; ppi_start() local
134 enable_dma(info->dma_ch); ppi_start()
138 switch (info->type) { ppi_start()
141 struct bfin_ppi_regs *reg = info->base; ppi_start()
147 struct bfin_eppi_regs *reg = info->base; ppi_start()
153 struct bfin_eppi3_regs *reg = info->base; ppi_start()
167 const struct ppi_info *info = ppi->info; ppi_stop() local
171 switch (info->type) { ppi_stop()
174 struct bfin_ppi_regs *reg = info->base; ppi_stop()
180 struct bfin_eppi_regs *reg = info->base; ppi_stop()
186 struct bfin_eppi3_regs *reg = info->base; ppi_stop()
195 clear_dma_irqstat(info->dma_ch); ppi_stop()
196 disable_dma(info->dma_ch); ppi_stop()
204 const struct ppi_info *info = ppi->info; ppi_set_params() local
237 switch (info->type) { ppi_set_params()
240 struct bfin_ppi_regs *reg = info->base; ppi_set_params()
252 struct bfin_eppi_regs *reg = info->base; ppi_set_params()
269 struct bfin_eppi3_regs *reg = info->base; ppi_set_params()
304 set_dma_x_count(info->dma_ch, bytes_per_line >> 2); ppi_set_params()
305 set_dma_x_modify(info->dma_ch, 4); ppi_set_params()
306 set_dma_y_modify(info->dma_ch, 4); ppi_set_params()
309 set_dma_x_count(info->dma_ch, bytes_per_line >> 1); ppi_set_params()
310 set_dma_x_modify(info->dma_ch, 2); ppi_set_params()
311 set_dma_y_modify(info->dma_ch, 2); ppi_set_params()
313 set_dma_y_count(info->dma_ch, params->height); ppi_set_params()
314 set_dma_config(info->dma_ch, dma_config); ppi_set_params()
322 set_dma_start_addr(ppi->info->dma_ch, addr); ppi_update_addr()
326 const struct ppi_info *info) ppi_create_instance()
330 if (!info || !info->pin_req) ppi_create_instance()
334 if (peripheral_request_list(info->pin_req, KBUILD_MODNAME)) { ppi_create_instance()
342 peripheral_free_list(info->pin_req); ppi_create_instance()
347 ppi->info = info; ppi_create_instance()
357 peripheral_free_list(ppi->info->pin_req); ppi_delete_instance()
325 ppi_create_instance(struct platform_device *pdev, const struct ppi_info *info) ppi_create_instance() argument
/linux-4.1.27/drivers/video/fbdev/nvidia/
H A Dnv_accel.c72 static inline void nvidiafb_safe_mode(struct fb_info *info) nvidiafb_safe_mode() argument
74 struct nvidia_par *par = info->par; nvidiafb_safe_mode()
77 info->pixmap.scan_align = 1; nvidiafb_safe_mode()
81 static inline void NVFlush(struct fb_info *info) NVFlush() argument
83 struct nvidia_par *par = info->par; NVFlush()
90 nvidiafb_safe_mode(info); NVFlush()
94 static inline void NVSync(struct fb_info *info) NVSync() argument
96 struct nvidia_par *par = info->par; NVSync()
103 nvidiafb_safe_mode(info); NVSync()
115 static void NVDmaWait(struct fb_info *info, int size) NVDmaWait() argument
117 struct nvidia_par *par = info->par; NVDmaWait()
151 nvidiafb_safe_mode(info); NVDmaWait()
155 static void NVSetPattern(struct fb_info *info, u32 clr0, u32 clr1, NVSetPattern() argument
158 struct nvidia_par *par = info->par; NVSetPattern()
160 NVDmaStart(info, par, PATTERN_COLOR_0, 4); NVSetPattern()
167 static void NVSetRopSolid(struct fb_info *info, u32 rop, u32 planemask) NVSetRopSolid() argument
169 struct nvidia_par *par = info->par; NVSetRopSolid()
172 NVSetPattern(info, 0, planemask, ~0, ~0); NVSetRopSolid()
174 NVDmaStart(info, par, ROP_SET, 1); NVSetRopSolid()
180 NVSetPattern(info, ~0, ~0, ~0, ~0); NVSetRopSolid()
181 NVDmaStart(info, par, ROP_SET, 1); NVSetRopSolid()
187 static void NVSetClippingRectangle(struct fb_info *info, int x1, int y1, NVSetClippingRectangle() argument
190 struct nvidia_par *par = info->par; NVSetClippingRectangle()
194 NVDmaStart(info, par, CLIP_POINT, 2); NVSetClippingRectangle()
199 void NVResetGraphics(struct fb_info *info) NVResetGraphics() argument
201 struct nvidia_par *par = info->par; NVResetGraphics()
205 pitch = info->fix.line_length; NVResetGraphics()
234 switch (info->var.bits_per_pixel) { NVResetGraphics()
256 NVDmaStart(info, par, SURFACE_FORMAT, 4); NVResetGraphics()
262 NVDmaStart(info, par, PATTERN_FORMAT, 1); NVResetGraphics()
265 NVDmaStart(info, par, RECT_FORMAT, 1); NVResetGraphics()
268 NVDmaStart(info, par, LINE_FORMAT, 1); NVResetGraphics()
272 NVSetRopSolid(info, ROP_COPY, ~0); NVResetGraphics()
274 NVSetClippingRectangle(info, 0, 0, info->var.xres_virtual, NVResetGraphics()
275 info->var.yres_virtual); NVResetGraphics()
280 int nvidiafb_sync(struct fb_info *info) nvidiafb_sync() argument
282 struct nvidia_par *par = info->par; nvidiafb_sync()
284 if (info->state != FBINFO_STATE_RUNNING) nvidiafb_sync()
288 NVFlush(info); nvidiafb_sync()
291 NVSync(info); nvidiafb_sync()
296 void nvidiafb_copyarea(struct fb_info *info, const struct fb_copyarea *region) nvidiafb_copyarea() argument
298 struct nvidia_par *par = info->par; nvidiafb_copyarea()
300 if (info->state != FBINFO_STATE_RUNNING) nvidiafb_copyarea()
304 cfb_copyarea(info, region); nvidiafb_copyarea()
308 NVDmaStart(info, par, BLIT_POINT_SRC, 3); nvidiafb_copyarea()
316 void nvidiafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) nvidiafb_fillrect() argument
318 struct nvidia_par *par = info->par; nvidiafb_fillrect()
321 if (info->state != FBINFO_STATE_RUNNING) nvidiafb_fillrect()
325 cfb_fillrect(info, rect); nvidiafb_fillrect()
329 if (info->var.bits_per_pixel == 8) nvidiafb_fillrect()
332 color = ((u32 *) info->pseudo_palette)[rect->color]; nvidiafb_fillrect()
335 NVSetRopSolid(info, rect->rop, ~0); nvidiafb_fillrect()
337 NVDmaStart(info, par, RECT_SOLID_COLOR, 1); nvidiafb_fillrect()
340 NVDmaStart(info, par, RECT_SOLID_RECTS(0), 2); nvidiafb_fillrect()
347 NVSetRopSolid(info, ROP_COPY, ~0); nvidiafb_fillrect()
350 static void nvidiafb_mono_color_expand(struct fb_info *info, nvidiafb_mono_color_expand() argument
353 struct nvidia_par *par = info->par; nvidiafb_mono_color_expand()
354 u32 fg, bg, mask = ~(~0 >> (32 - info->var.bits_per_pixel)); nvidiafb_mono_color_expand()
361 if (info->var.bits_per_pixel == 8) { nvidiafb_mono_color_expand()
365 fg = ((u32 *) info->pseudo_palette)[image->fg_color] | mask; nvidiafb_mono_color_expand()
366 bg = ((u32 *) info->pseudo_palette)[image->bg_color] | mask; nvidiafb_mono_color_expand()
369 NVDmaStart(info, par, RECT_EXPAND_TWO_COLOR_CLIP, 7); nvidiafb_mono_color_expand()
380 NVDmaStart(info, par, RECT_EXPAND_TWO_COLOR_DATA(0), nvidiafb_mono_color_expand()
393 NVDmaStart(info, par, RECT_EXPAND_TWO_COLOR_DATA(0), dsize); nvidiafb_mono_color_expand()
405 void nvidiafb_imageblit(struct fb_info *info, const struct fb_image *image) nvidiafb_imageblit() argument
407 struct nvidia_par *par = info->par; nvidiafb_imageblit()
409 if (info->state != FBINFO_STATE_RUNNING) nvidiafb_imageblit()
413 nvidiafb_mono_color_expand(info, image); nvidiafb_imageblit()
415 cfb_imageblit(info, image); nvidiafb_imageblit()
H A Dnvidia.c302 static int nvidia_calc_regs(struct fb_info *info) nvidia_calc_regs() argument
304 struct nvidia_par *par = info->par; nvidia_calc_regs()
306 int i, depth = fb_get_color_depth(&info->var, &info->fix); nvidia_calc_regs()
307 int h_display = info->var.xres / 8 - 1; nvidia_calc_regs()
308 int h_start = (info->var.xres + info->var.right_margin) / 8 - 1; nvidia_calc_regs()
309 int h_end = (info->var.xres + info->var.right_margin + nvidia_calc_regs()
310 info->var.hsync_len) / 8 - 1; nvidia_calc_regs()
311 int h_total = (info->var.xres + info->var.right_margin + nvidia_calc_regs()
312 info->var.hsync_len + info->var.left_margin) / 8 - 5; nvidia_calc_regs()
315 int v_display = info->var.yres - 1; nvidia_calc_regs()
316 int v_start = info->var.yres + info->var.lower_margin - 1; nvidia_calc_regs()
317 int v_end = (info->var.yres + info->var.lower_margin + nvidia_calc_regs()
318 info->var.vsync_len) - 1; nvidia_calc_regs()
319 int v_total = (info->var.yres + info->var.lower_margin + nvidia_calc_regs()
320 info->var.vsync_len + info->var.upper_margin) - 2; nvidia_calc_regs()
328 if (info->var.vmode & FB_VMODE_INTERLACED) nvidia_calc_regs()
359 | ((info->var.vmode & FB_VMODE_DOUBLE) ? 0x80 : 0x00); nvidia_calc_regs()
363 state->crtc[0x13] = ((info->var.xres_virtual / 8) * nvidia_calc_regs()
364 (info->var.bits_per_pixel / 8)); nvidia_calc_regs()
389 if (info->var.vmode & FB_VMODE_INTERLACED) { nvidia_calc_regs()
407 par->CURSOR = (volatile u32 __iomem *)(info->screen_base + nvidia_calc_regs()
410 if (info->var.sync & FB_SYNC_HOR_HIGH_ACT) nvidia_calc_regs()
414 if (info->var.sync & FB_SYNC_VERT_HIGH_ACT) nvidia_calc_regs()
419 NVCalcStateExt(par, state, i, info->var.xres_virtual, nvidia_calc_regs()
420 info->var.xres, info->var.yres_virtual, nvidia_calc_regs()
421 1000000000 / info->var.pixclock, info->var.vmode); nvidia_calc_regs()
427 if (!par->fpScaler || (par->fpWidth <= info->var.xres) nvidia_calc_regs()
428 || (par->fpHeight <= info->var.yres)) { nvidia_calc_regs()
467 if (info->var.vmode & FB_VMODE_DOUBLE) nvidia_calc_regs()
494 state->displayV = info->var.xres; nvidia_calc_regs()
499 static void nvidia_init_vga(struct fb_info *info) nvidia_init_vga() argument
501 struct nvidia_par *par = info->par; nvidia_init_vga()
534 static int nvidiafb_cursor(struct fb_info *info, struct fb_cursor *cursor) nvidiafb_cursor() argument
536 struct nvidia_par *par = info->par; nvidiafb_cursor()
557 yy = cursor->image.dy - info->var.yoffset; nvidiafb_cursor()
558 xx = cursor->image.dx - info->var.xoffset; nvidiafb_cursor()
592 bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) | nvidiafb_cursor()
593 ((info->cmap.green[bg_idx] & 0xf8) << 2) | nvidiafb_cursor()
594 ((info->cmap.blue[bg_idx] & 0xf8) >> 3) | 1 << 15; nvidiafb_cursor()
596 fg = ((info->cmap.red[fg_idx] & 0xf8) << 7) | nvidiafb_cursor()
597 ((info->cmap.green[fg_idx] & 0xf8) << 2) | nvidiafb_cursor()
598 ((info->cmap.blue[fg_idx] & 0xf8) >> 3) | 1 << 15; nvidiafb_cursor()
615 static int nvidiafb_set_par(struct fb_info *info) nvidiafb_set_par() argument
617 struct nvidia_par *par = info->par; nvidiafb_set_par()
635 info->fix.visual = (info->var.bits_per_pixel == 8) ? nvidiafb_set_par()
638 nvidia_init_vga(info); nvidiafb_set_par()
639 nvidia_calc_regs(info); nvidiafb_set_par()
665 info->fix.line_length = (info->var.xres_virtual * nvidiafb_set_par()
666 info->var.bits_per_pixel) >> 3; nvidiafb_set_par()
667 if (info->var.accel_flags) { nvidiafb_set_par()
668 info->fbops->fb_imageblit = nvidiafb_imageblit; nvidiafb_set_par()
669 info->fbops->fb_fillrect = nvidiafb_fillrect; nvidiafb_set_par()
670 info->fbops->fb_copyarea = nvidiafb_copyarea; nvidiafb_set_par()
671 info->fbops->fb_sync = nvidiafb_sync; nvidiafb_set_par()
672 info->pixmap.scan_align = 4; nvidiafb_set_par()
673 info->flags &= ~FBINFO_HWACCEL_DISABLED; nvidiafb_set_par()
674 info->flags |= FBINFO_READS_FAST; nvidiafb_set_par()
675 NVResetGraphics(info); nvidiafb_set_par()
677 info->fbops->fb_imageblit = cfb_imageblit; nvidiafb_set_par()
678 info->fbops->fb_fillrect = cfb_fillrect; nvidiafb_set_par()
679 info->fbops->fb_copyarea = cfb_copyarea; nvidiafb_set_par()
680 info->fbops->fb_sync = NULL; nvidiafb_set_par()
681 info->pixmap.scan_align = 1; nvidiafb_set_par()
682 info->flags |= FBINFO_HWACCEL_DISABLED; nvidiafb_set_par()
683 info->flags &= ~FBINFO_READS_FAST; nvidiafb_set_par()
692 btext_update_display(info->fix.smem_start, nvidiafb_set_par()
693 info->var.xres, info->var.yres, nvidiafb_set_par()
694 info->var.bits_per_pixel, info->fix.line_length); nvidiafb_set_par()
704 struct fb_info *info) nvidiafb_setcolreg()
706 struct nvidia_par *par = info->par; nvidiafb_setcolreg()
710 if (regno >= (1 << info->var.green.length)) nvidiafb_setcolreg()
713 if (info->var.grayscale) { nvidiafb_setcolreg()
718 if (regno < 16 && info->fix.visual == FB_VISUAL_DIRECTCOLOR) { nvidiafb_setcolreg()
719 ((u32 *) info->pseudo_palette)[regno] = nvidiafb_setcolreg()
720 (regno << info->var.red.offset) | nvidiafb_setcolreg()
721 (regno << info->var.green.offset) | nvidiafb_setcolreg()
722 (regno << info->var.blue.offset); nvidiafb_setcolreg()
725 switch (info->var.bits_per_pixel) { nvidiafb_setcolreg()
731 if (info->var.green.length == 5) { nvidiafb_setcolreg()
767 struct fb_info *info) nvidiafb_check_var()
769 struct nvidia_par *par = info->par; nvidiafb_check_var()
825 if (!info->monspecs.hfmax || !info->monspecs.vfmax || nvidiafb_check_var()
826 !info->monspecs.dclkmax || !fb_validate_mode(var, info)) nvidiafb_check_var()
830 if (!mode_valid && info->monspecs.gtf) { nvidiafb_check_var()
831 if (!fb_get_mode(FB_MAXTIMINGS, 0, var, info)) nvidiafb_check_var()
838 mode = fb_find_best_mode(var, &info->modelist); nvidiafb_check_var()
845 if (!mode_valid && info->monspecs.modedb_len) nvidiafb_check_var()
860 mode = fb_find_best_mode(var, &info->modelist); nvidiafb_check_var()
878 vramlen = info->screen_size; nvidiafb_check_var()
920 struct fb_info *info) nvidiafb_pan_display()
922 struct nvidia_par *par = info->par; nvidiafb_pan_display()
925 total = var->yoffset * info->fix.line_length + var->xoffset; nvidiafb_pan_display()
932 static int nvidiafb_blank(int blank, struct fb_info *info) nvidiafb_blank() argument
934 struct nvidia_par *par = info->par; nvidiafb_blank()
999 static int nvidiafb_open(struct fb_info *info, int user) nvidiafb_open() argument
1001 struct nvidia_par *par = info->par; nvidiafb_open()
1012 static int nvidiafb_release(struct fb_info *info, int user) nvidiafb_release() argument
1014 struct nvidia_par *par = info->par; nvidiafb_release()
1051 struct fb_info *info = pci_get_drvdata(dev); nvidiafb_suspend() local
1052 struct nvidia_par *par = info->par; nvidiafb_suspend()
1060 fb_set_suspend(info, 1); nvidiafb_suspend()
1061 nvidiafb_blank(FB_BLANK_POWERDOWN, info); nvidiafb_suspend()
1075 struct fb_info *info = pci_get_drvdata(dev); nvidiafb_resume() local
1076 struct nvidia_par *par = info->par; nvidiafb_resume()
1091 nvidiafb_set_par(info); nvidiafb_resume()
1092 fb_set_suspend (info, 0); nvidiafb_resume()
1093 nvidiafb_blank(FB_BLANK_UNBLANK, info); nvidiafb_resume()
1104 static int nvidia_set_fbinfo(struct fb_info *info) nvidia_set_fbinfo() argument
1106 struct fb_monspecs *specs = &info->monspecs; nvidia_set_fbinfo()
1108 struct nvidia_par *par = info->par; nvidia_set_fbinfo()
1112 info->flags = FBINFO_DEFAULT nvidia_set_fbinfo()
1118 fb_videomode_to_modelist(info->monspecs.modedb, nvidia_set_fbinfo()
1119 info->monspecs.modedb_len, &info->modelist); nvidia_set_fbinfo()
1137 mode = fb_find_best_display(specs, &info->modelist); nvidia_set_fbinfo()
1145 fb_find_mode(&nvidiafb_default_var, info, buf, specs->modedb, nvidia_set_fbinfo()
1150 fb_find_mode(&nvidiafb_default_var, info, mode_option, nvidia_set_fbinfo()
1153 info->var = nvidiafb_default_var; nvidia_set_fbinfo()
1154 info->fix.visual = (info->var.bits_per_pixel == 8) ? nvidia_set_fbinfo()
1156 info->pseudo_palette = par->pseudo_palette; nvidia_set_fbinfo()
1157 fb_alloc_cmap(&info->cmap, 256, 0); nvidia_set_fbinfo()
1158 fb_destroy_modedb(info->monspecs.modedb); nvidia_set_fbinfo()
1159 info->monspecs.modedb = NULL; nvidia_set_fbinfo()
1162 lpitch = info->var.xres_virtual * nvidia_set_fbinfo()
1163 ((info->var.bits_per_pixel + 7) >> 3); nvidia_set_fbinfo()
1164 info->var.yres_virtual = info->screen_size / lpitch; nvidia_set_fbinfo()
1166 info->pixmap.scan_align = 4; nvidia_set_fbinfo()
1167 info->pixmap.buf_align = 4; nvidia_set_fbinfo()
1168 info->pixmap.access_align = 32; nvidia_set_fbinfo()
1169 info->pixmap.size = 8 * 1024; nvidia_set_fbinfo()
1170 info->pixmap.flags = FB_PIXMAP_SYSTEM; nvidia_set_fbinfo()
1173 info->fbops->fb_cursor = NULL; nvidia_set_fbinfo()
1175 info->var.accel_flags = (!noaccel); nvidia_set_fbinfo()
1179 info->fix.accel = FB_ACCEL_NV4; nvidia_set_fbinfo()
1182 info->fix.accel = FB_ACCEL_NV_10; nvidia_set_fbinfo()
1185 info->fix.accel = FB_ACCEL_NV_20; nvidia_set_fbinfo()
1188 info->fix.accel = FB_ACCEL_NV_30; nvidia_set_fbinfo()
1191 info->fix.accel = FB_ACCEL_NV_40; nvidia_set_fbinfo()
1197 return nvidiafb_check_var(&info->var, info); nvidia_set_fbinfo()
1200 static u32 nvidia_get_chipset(struct fb_info *info) nvidia_get_chipset() argument
1202 struct nvidia_par *par = info->par; nvidia_get_chipset()
1223 static u32 nvidia_get_arch(struct fb_info *info) nvidia_get_arch() argument
1225 struct nvidia_par *par = info->par; nvidia_get_arch()
1278 struct fb_info *info; nvidiafb_probe() local
1285 info = framebuffer_alloc(sizeof(struct nvidia_par), &pd->dev); nvidiafb_probe()
1287 if (!info) nvidiafb_probe()
1290 par = info->par; nvidiafb_probe()
1292 info->pixmap.addr = kzalloc(8 * 1024, GFP_KERNEL); nvidiafb_probe()
1294 if (info->pixmap.addr == NULL) nvidiafb_probe()
1333 par->Chipset = nvidia_get_chipset(info); nvidiafb_probe()
1334 par->Architecture = nvidia_get_arch(info); nvidiafb_probe()
1343 if (NVCommonSetup(info)) nvidiafb_probe()
1364 info->screen_base = ioremap(nvidiafb_fix.smem_start, par->FbMapSize); nvidiafb_probe()
1365 info->screen_size = par->FbUsableSize; nvidiafb_probe()
1368 if (!info->screen_base) { nvidiafb_probe()
1373 par->FbStart = info->screen_base; nvidiafb_probe()
1390 info->fbops = &nvidia_fb_ops; nvidiafb_probe()
1391 info->fix = nvidiafb_fix; nvidiafb_probe()
1393 if (nvidia_set_fbinfo(info) < 0) { nvidiafb_probe()
1400 pci_set_drvdata(pd, info); nvidiafb_probe()
1405 if (register_framebuffer(info) < 0) { nvidiafb_probe()
1413 info->fix.id, nvidiafb_probe()
1414 par->FbMapSize / (1024 * 1024), info->fix.smem_start); nvidiafb_probe()
1420 iounmap(info->screen_base); nvidiafb_probe()
1422 fb_destroy_modedb(info->monspecs.modedb); nvidiafb_probe()
1429 kfree(info->pixmap.addr); nvidiafb_probe()
1431 framebuffer_release(info); nvidiafb_probe()
1438 struct fb_info *info = pci_get_drvdata(pd); nvidiafb_remove() local
1439 struct nvidia_par *par = info->par; nvidiafb_remove()
1443 unregister_framebuffer(info); nvidiafb_remove()
1449 mtrr_del(par->mtrr.vram, info->fix.smem_start, nvidiafb_remove()
1450 info->fix.smem_len); nvidiafb_remove()
1453 iounmap(info->screen_base); nvidiafb_remove()
1454 fb_destroy_modedb(info->monspecs.modedb); nvidiafb_remove()
1458 kfree(info->pixmap.addr); nvidiafb_remove()
1459 framebuffer_release(info); nvidiafb_remove()
702 nvidiafb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) nvidiafb_setcolreg() argument
766 nvidiafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) nvidiafb_check_var() argument
919 nvidiafb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) nvidiafb_pan_display() argument
/linux-4.1.27/drivers/block/
H A Dxen-blkfront.c168 static int blkfront_setup_indirect(struct blkfront_info *info);
170 static int get_id_from_freelist(struct blkfront_info *info) get_id_from_freelist() argument
172 unsigned long free = info->shadow_free; get_id_from_freelist()
174 info->shadow_free = info->shadow[free].req.u.rw.id; get_id_from_freelist()
175 info->shadow[free].req.u.rw.id = 0x0fffffee; /* debug */ get_id_from_freelist()
179 static int add_id_to_freelist(struct blkfront_info *info, add_id_to_freelist() argument
182 if (info->shadow[id].req.u.rw.id != id) add_id_to_freelist()
184 if (info->shadow[id].request == NULL) add_id_to_freelist()
186 info->shadow[id].req.u.rw.id = info->shadow_free; add_id_to_freelist()
187 info->shadow[id].request = NULL; add_id_to_freelist()
188 info->shadow_free = id; add_id_to_freelist()
192 static int fill_grant_buffer(struct blkfront_info *info, int num) fill_grant_buffer() argument
203 if (info->feature_persistent) { fill_grant_buffer()
213 list_add(&gnt_list_entry->node, &info->grants); fill_grant_buffer()
221 &info->grants, node) { fill_grant_buffer()
223 if (info->feature_persistent) fill_grant_buffer()
234 struct blkfront_info *info) get_grant()
239 BUG_ON(list_empty(&info->grants)); get_grant()
240 gnt_list_entry = list_first_entry(&info->grants, struct grant, get_grant()
245 info->persistent_gnts_c--; get_grant()
252 if (!info->feature_persistent) { get_grant()
258 info->xbdev->otherend_id, get_grant()
329 struct blkfront_info *info = (struct blkfront_info *)arg; blkif_restart_queue_callback() local
330 schedule_work(&info->work); blkif_restart_queue_callback()
335 /* We don't have real geometry info, but let's at least return blkif_getgeo()
352 struct blkfront_info *info = bdev->bd_disk->private_data; blkif_ioctl() local
355 dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n", blkif_ioctl()
360 dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n"); blkif_ioctl()
367 struct gendisk *gd = info->gd; blkif_ioctl()
390 struct blkfront_info *info = req->rq_disk->private_data; blkif_queue_request() local
408 if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) blkif_queue_request()
420 if (info->persistent_gnts_c < max_grefs) { blkif_queue_request()
423 max_grefs - info->persistent_gnts_c, blkif_queue_request()
426 &info->callback, blkif_queue_request()
428 info, blkif_queue_request()
436 ring_req = RING_GET_REQUEST(&info->ring, info->ring.req_prod_pvt); blkif_queue_request()
437 id = get_id_from_freelist(info); blkif_queue_request()
438 info->shadow[id].request = req; blkif_queue_request()
445 if ((req->cmd_flags & REQ_SECURE) && info->feature_secdiscard) blkif_queue_request()
450 BUG_ON(info->max_indirect_segments == 0 && blkif_queue_request()
452 BUG_ON(info->max_indirect_segments && blkif_queue_request()
453 req->nr_phys_segments > info->max_indirect_segments); blkif_queue_request()
454 nseg = blk_rq_map_sg(req->q, req, info->shadow[id].sg); blkif_queue_request()
466 ring_req->u.indirect.handle = info->handle; blkif_queue_request()
470 ring_req->u.rw.handle = info->handle; blkif_queue_request()
481 switch (info->feature_flush & blkif_queue_request()
497 for_each_sg(info->shadow[id].sg, sg, nseg, i) { blkif_queue_request()
509 if (!info->feature_persistent) { blkif_queue_request()
513 BUG_ON(list_empty(&info->indirect_pages)); blkif_queue_request()
514 indirect_page = list_first_entry(&info->indirect_pages, blkif_queue_request()
519 gnt_list_entry = get_grant(&gref_head, pfn, info); blkif_queue_request()
520 info->shadow[id].indirect_grants[n] = gnt_list_entry; blkif_queue_request()
525 gnt_list_entry = get_grant(&gref_head, page_to_pfn(sg_page(sg)), info); blkif_queue_request()
528 info->shadow[id].grants_used[i] = gnt_list_entry; blkif_queue_request()
530 if (rq_data_dir(req) && info->feature_persistent) { blkif_queue_request()
574 info->ring.req_prod_pvt++; blkif_queue_request()
577 info->shadow[id].req = *ring_req; blkif_queue_request()
586 static inline void flush_requests(struct blkfront_info *info) flush_requests() argument
590 RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&info->ring, notify); flush_requests()
593 notify_remote_via_irq(info->irq); flush_requests()
597 struct blkfront_info *info) blkif_request_flush_invalid()
601 !(info->feature_flush & REQ_FLUSH)) || blkif_request_flush_invalid()
603 !(info->feature_flush & REQ_FUA))); blkif_request_flush_invalid()
612 struct blkfront_info *info = NULL; do_blkif_request() local
621 info = req->rq_disk->private_data; do_blkif_request()
623 if (RING_FULL(&info->ring)) do_blkif_request()
628 if (blkif_request_flush_invalid(req, info)) { do_blkif_request()
651 flush_requests(info); do_blkif_request()
659 struct blkfront_info *info = gd->private_data; xlvbd_init_blk_queue() local
661 rq = blk_init_queue(do_blkif_request, &info->io_lock); xlvbd_init_blk_queue()
667 if (info->feature_discard) { xlvbd_init_blk_queue()
670 rq->limits.discard_granularity = info->discard_granularity; xlvbd_init_blk_queue()
671 rq->limits.discard_alignment = info->discard_alignment; xlvbd_init_blk_queue()
672 if (info->feature_secdiscard) xlvbd_init_blk_queue()
711 static void xlvbd_flush(struct blkfront_info *info) xlvbd_flush() argument
713 blk_queue_flush(info->rq, info->feature_flush); xlvbd_flush()
715 info->gd->disk_name, flush_info(info->feature_flush), xlvbd_flush()
716 "persistent grants:", info->feature_persistent ? xlvbd_flush()
718 info->max_indirect_segments ? "enabled;" : "disabled;"); xlvbd_flush()
790 struct blkfront_info *info, xlvbd_alloc_gendisk()
802 BUG_ON(info->gd != NULL); xlvbd_alloc_gendisk()
803 BUG_ON(info->rq != NULL); xlvbd_alloc_gendisk()
805 if ((info->vdevice>>EXT_SHIFT) > 1) { xlvbd_alloc_gendisk()
807 printk(KERN_WARNING "blkfront: vdevice 0x%x is above the extended range; ignoring\n", info->vdevice); xlvbd_alloc_gendisk()
811 if (!VDEV_IS_EXTENDED(info->vdevice)) { xlvbd_alloc_gendisk()
812 err = xen_translate_vdev(info->vdevice, &minor, &offset); xlvbd_alloc_gendisk()
817 minor = BLKIF_MINOR_EXT(info->vdevice); xlvbd_alloc_gendisk()
823 "from xvde on\n", info->vdevice); xlvbd_alloc_gendisk()
827 info->vdevice, minor); xlvbd_alloc_gendisk()
855 gd->private_data = info; xlvbd_alloc_gendisk()
856 gd->driverfs_dev = &(info->xbdev->dev); xlvbd_alloc_gendisk()
860 info->max_indirect_segments ? : xlvbd_alloc_gendisk()
866 info->rq = gd->queue; xlvbd_alloc_gendisk()
867 info->gd = gd; xlvbd_alloc_gendisk()
869 xlvbd_flush(info); xlvbd_alloc_gendisk()
888 static void xlvbd_release_gendisk(struct blkfront_info *info) xlvbd_release_gendisk() argument
893 if (info->rq == NULL) xlvbd_release_gendisk()
896 spin_lock_irqsave(&info->io_lock, flags); xlvbd_release_gendisk()
899 blk_stop_queue(info->rq); xlvbd_release_gendisk()
902 gnttab_cancel_free_callback(&info->callback); xlvbd_release_gendisk()
903 spin_unlock_irqrestore(&info->io_lock, flags); xlvbd_release_gendisk()
906 flush_work(&info->work); xlvbd_release_gendisk()
908 del_gendisk(info->gd); xlvbd_release_gendisk()
910 minor = info->gd->first_minor; xlvbd_release_gendisk()
911 nr_minors = info->gd->minors; xlvbd_release_gendisk()
914 blk_cleanup_queue(info->rq); xlvbd_release_gendisk()
915 info->rq = NULL; xlvbd_release_gendisk()
917 put_disk(info->gd); xlvbd_release_gendisk()
918 info->gd = NULL; xlvbd_release_gendisk()
921 static void kick_pending_request_queues(struct blkfront_info *info) kick_pending_request_queues() argument
923 if (!RING_FULL(&info->ring)) { kick_pending_request_queues()
925 blk_start_queue(info->rq); kick_pending_request_queues()
927 do_blkif_request(info->rq); kick_pending_request_queues()
933 struct blkfront_info *info = container_of(work, struct blkfront_info, work); blkif_restart_queue() local
935 spin_lock_irq(&info->io_lock); blkif_restart_queue()
936 if (info->connected == BLKIF_STATE_CONNECTED) blkif_restart_queue()
937 kick_pending_request_queues(info); blkif_restart_queue()
938 spin_unlock_irq(&info->io_lock); blkif_restart_queue()
941 static void blkif_free(struct blkfront_info *info, int suspend) blkif_free() argument
948 spin_lock_irq(&info->io_lock); blkif_free()
949 info->connected = suspend ? blkif_free()
952 if (info->rq) blkif_free()
953 blk_stop_queue(info->rq); blkif_free()
956 if (!list_empty(&info->grants)) { blkif_free()
958 &info->grants, node) { blkif_free()
963 info->persistent_gnts_c--; blkif_free()
965 if (info->feature_persistent) blkif_free()
970 BUG_ON(info->persistent_gnts_c != 0); blkif_free()
976 if (!list_empty(&info->indirect_pages)) { blkif_free()
979 BUG_ON(info->feature_persistent); blkif_free()
980 list_for_each_entry_safe(indirect_page, n, &info->indirect_pages, lru) { blkif_free()
991 if (!info->shadow[i].request) blkif_free()
994 segs = info->shadow[i].req.operation == BLKIF_OP_INDIRECT ? blkif_free()
995 info->shadow[i].req.u.indirect.nr_segments : blkif_free()
996 info->shadow[i].req.u.rw.nr_segments; blkif_free()
998 persistent_gnt = info->shadow[i].grants_used[j]; blkif_free()
1000 if (info->feature_persistent) blkif_free()
1005 if (info->shadow[i].req.operation != BLKIF_OP_INDIRECT) blkif_free()
1013 persistent_gnt = info->shadow[i].indirect_grants[j]; blkif_free()
1020 kfree(info->shadow[i].grants_used); blkif_free()
1021 info->shadow[i].grants_used = NULL; blkif_free()
1022 kfree(info->shadow[i].indirect_grants); blkif_free()
1023 info->shadow[i].indirect_grants = NULL; blkif_free()
1024 kfree(info->shadow[i].sg); blkif_free()
1025 info->shadow[i].sg = NULL; blkif_free()
1029 gnttab_cancel_free_callback(&info->callback); blkif_free()
1030 spin_unlock_irq(&info->io_lock); blkif_free()
1033 flush_work(&info->work); blkif_free()
1036 if (info->ring_ref != GRANT_INVALID_REF) { blkif_free()
1037 gnttab_end_foreign_access(info->ring_ref, 0, blkif_free()
1038 (unsigned long)info->ring.sring); blkif_free()
1039 info->ring_ref = GRANT_INVALID_REF; blkif_free()
1040 info->ring.sring = NULL; blkif_free()
1042 if (info->irq) blkif_free()
1043 unbind_from_irqhandler(info->irq, info); blkif_free()
1044 info->evtchn = info->irq = 0; blkif_free()
1048 static void blkif_completion(struct blk_shadow *s, struct blkfront_info *info, blkif_completion() argument
1060 if (bret->operation == BLKIF_OP_READ && info->feature_persistent) { blkif_completion()
1088 if (!info->feature_persistent) blkif_completion()
1091 list_add(&s->grants_used[i]->node, &info->grants); blkif_completion()
1092 info->persistent_gnts_c++; blkif_completion()
1102 list_add_tail(&s->grants_used[i]->node, &info->grants); blkif_completion()
1108 if (!info->feature_persistent) blkif_completion()
1111 list_add(&s->indirect_grants[i]->node, &info->grants); blkif_completion()
1112 info->persistent_gnts_c++; blkif_completion()
1121 if (!info->feature_persistent) { blkif_completion()
1123 list_add(&indirect_page->lru, &info->indirect_pages); blkif_completion()
1126 list_add_tail(&s->indirect_grants[i]->node, &info->grants); blkif_completion()
1138 struct blkfront_info *info = (struct blkfront_info *)dev_id; blkif_interrupt() local
1141 spin_lock_irqsave(&info->io_lock, flags); blkif_interrupt()
1143 if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) { blkif_interrupt()
1144 spin_unlock_irqrestore(&info->io_lock, flags); blkif_interrupt()
1149 rp = info->ring.sring->rsp_prod; blkif_interrupt()
1152 for (i = info->ring.rsp_cons; i != rp; i++) { blkif_interrupt()
1155 bret = RING_GET_RESPONSE(&info->ring, i); blkif_interrupt()
1164 info->gd->disk_name, op_name(bret->operation), id); blkif_interrupt()
1169 req = info->shadow[id].request; blkif_interrupt()
1172 blkif_completion(&info->shadow[id], info, bret); blkif_interrupt()
1174 if (add_id_to_freelist(info, id)) { blkif_interrupt()
1176 info->gd->disk_name, op_name(bret->operation), id); blkif_interrupt()
1184 struct request_queue *rq = info->rq; blkif_interrupt()
1186 info->gd->disk_name, op_name(bret->operation)); blkif_interrupt()
1188 info->feature_discard = 0; blkif_interrupt()
1189 info->feature_secdiscard = 0; blkif_interrupt()
1199 info->gd->disk_name, op_name(bret->operation)); blkif_interrupt()
1203 info->shadow[id].req.u.rw.nr_segments == 0)) { blkif_interrupt()
1205 info->gd->disk_name, op_name(bret->operation)); blkif_interrupt()
1211 info->feature_flush = 0; blkif_interrupt()
1212 xlvbd_flush(info); blkif_interrupt()
1218 dev_dbg(&info->xbdev->dev, "Bad return from blkdev data " blkif_interrupt()
1228 info->ring.rsp_cons = i; blkif_interrupt()
1230 if (i != info->ring.req_prod_pvt) { blkif_interrupt()
1232 RING_FINAL_CHECK_FOR_RESPONSES(&info->ring, more_to_do); blkif_interrupt()
1236 info->ring.sring->rsp_event = i + 1; blkif_interrupt()
1238 kick_pending_request_queues(info); blkif_interrupt()
1240 spin_unlock_irqrestore(&info->io_lock, flags); blkif_interrupt()
1247 struct blkfront_info *info) setup_blkring()
1253 info->ring_ref = GRANT_INVALID_REF; setup_blkring()
1261 FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); setup_blkring()
1263 err = xenbus_grant_ring(dev, info->ring.sring, 1, &gref); setup_blkring()
1266 info->ring.sring = NULL; setup_blkring()
1269 info->ring_ref = gref; setup_blkring()
1271 err = xenbus_alloc_evtchn(dev, &info->evtchn); setup_blkring()
1275 err = bind_evtchn_to_irqhandler(info->evtchn, blkif_interrupt, 0, setup_blkring()
1276 "blkif", info); setup_blkring()
1282 info->irq = err; setup_blkring()
1286 blkif_free(info, 0); setup_blkring()
1293 struct blkfront_info *info) talk_to_blkback()
1300 err = setup_blkring(dev, info); talk_to_blkback()
1312 "ring-ref", "%u", info->ring_ref); talk_to_blkback()
1318 "event-channel", "%u", info->evtchn); talk_to_blkback()
1352 blkif_free(info, 0); talk_to_blkback()
1367 struct blkfront_info *info; blkfront_probe() local
1411 info = kzalloc(sizeof(*info), GFP_KERNEL); blkfront_probe()
1412 if (!info) { blkfront_probe()
1413 xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure"); blkfront_probe()
1417 mutex_init(&info->mutex); blkfront_probe()
1418 spin_lock_init(&info->io_lock); blkfront_probe()
1419 info->xbdev = dev; blkfront_probe()
1420 info->vdevice = vdevice; blkfront_probe()
1421 INIT_LIST_HEAD(&info->grants); blkfront_probe()
1422 INIT_LIST_HEAD(&info->indirect_pages); blkfront_probe()
1423 info->persistent_gnts_c = 0; blkfront_probe()
1424 info->connected = BLKIF_STATE_DISCONNECTED; blkfront_probe()
1425 INIT_WORK(&info->work, blkif_restart_queue); blkfront_probe()
1428 info->shadow[i].req.u.rw.id = i+1; blkfront_probe()
1429 info->shadow[BLK_RING_SIZE-1].req.u.rw.id = 0x0fffffff; blkfront_probe()
1432 info->handle = simple_strtoul(strrchr(dev->nodename, '/')+1, NULL, 0); blkfront_probe()
1433 dev_set_drvdata(&dev->dev, info); blkfront_probe()
1435 err = talk_to_blkback(dev, info); blkfront_probe()
1437 kfree(info); blkfront_probe()
1460 static int blkif_recover(struct blkfront_info *info) blkif_recover() argument
1474 copy = kmemdup(info->shadow, sizeof(info->shadow), blkif_recover()
1480 memset(&info->shadow, 0, sizeof(info->shadow)); blkif_recover()
1482 info->shadow[i].req.u.rw.id = i+1; blkif_recover()
1483 info->shadow_free = info->ring.req_prod_pvt; blkif_recover()
1484 info->shadow[BLK_RING_SIZE-1].req.u.rw.id = 0x0fffffff; blkif_recover()
1486 rc = blkfront_setup_indirect(info); blkif_recover()
1492 segs = info->max_indirect_segments ? : BLKIF_MAX_SEGMENTS_PER_REQUEST; blkif_recover()
1493 blk_queue_max_segments(info->rq, segs); blkif_recover()
1527 spin_lock_irq(&info->io_lock); blkif_recover()
1528 while ((req = blk_fetch_request(info->rq)) != NULL) { blkif_recover()
1542 spin_unlock_irq(&info->io_lock); blkif_recover()
1544 xenbus_switch_state(info->xbdev, XenbusStateConnected); blkif_recover()
1546 spin_lock_irq(&info->io_lock); blkif_recover()
1549 info->connected = BLKIF_STATE_CONNECTED; blkif_recover()
1552 kick_pending_request_queues(info); blkif_recover()
1558 blk_requeue_request(info->rq, req); blkif_recover()
1560 spin_unlock_irq(&info->io_lock); blkif_recover()
1606 struct blkfront_info *info = dev_get_drvdata(&dev->dev); blkfront_resume() local
1611 blkif_free(info, info->connected == BLKIF_STATE_CONNECTED); blkfront_resume()
1613 err = talk_to_blkback(dev, info); blkfront_resume()
1625 blkfront_closing(struct blkfront_info *info) blkfront_closing() argument
1627 struct xenbus_device *xbdev = info->xbdev; blkfront_closing()
1630 mutex_lock(&info->mutex); blkfront_closing()
1633 mutex_unlock(&info->mutex); blkfront_closing()
1637 if (info->gd) blkfront_closing()
1638 bdev = bdget_disk(info->gd, 0); blkfront_closing()
1640 mutex_unlock(&info->mutex); blkfront_closing()
1654 xlvbd_release_gendisk(info); blkfront_closing()
1662 static void blkfront_setup_discard(struct blkfront_info *info) blkfront_setup_discard() argument
1669 info->feature_discard = 1; blkfront_setup_discard()
1670 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_setup_discard()
1675 info->discard_granularity = discard_granularity; blkfront_setup_discard()
1676 info->discard_alignment = discard_alignment; blkfront_setup_discard()
1678 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_setup_discard()
1682 info->feature_secdiscard = !!discard_secure; blkfront_setup_discard()
1685 static int blkfront_setup_indirect(struct blkfront_info *info) blkfront_setup_indirect() argument
1690 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_setup_indirect()
1694 info->max_indirect_segments = 0; blkfront_setup_indirect()
1697 info->max_indirect_segments = min(indirect_segments, blkfront_setup_indirect()
1699 segs = info->max_indirect_segments; blkfront_setup_indirect()
1702 err = fill_grant_buffer(info, (segs + INDIRECT_GREFS(segs)) * BLK_RING_SIZE); blkfront_setup_indirect()
1706 if (!info->feature_persistent && info->max_indirect_segments) { blkfront_setup_indirect()
1714 BUG_ON(!list_empty(&info->indirect_pages)); blkfront_setup_indirect()
1719 list_add(&indirect_page->lru, &info->indirect_pages); blkfront_setup_indirect()
1724 info->shadow[i].grants_used = kzalloc( blkfront_setup_indirect()
1725 sizeof(info->shadow[i].grants_used[0]) * segs, blkfront_setup_indirect()
1727 info->shadow[i].sg = kzalloc(sizeof(info->shadow[i].sg[0]) * segs, GFP_NOIO); blkfront_setup_indirect()
1728 if (info->max_indirect_segments) blkfront_setup_indirect()
1729 info->shadow[i].indirect_grants = kzalloc( blkfront_setup_indirect()
1730 sizeof(info->shadow[i].indirect_grants[0]) * blkfront_setup_indirect()
1733 if ((info->shadow[i].grants_used == NULL) || blkfront_setup_indirect()
1734 (info->shadow[i].sg == NULL) || blkfront_setup_indirect()
1735 (info->max_indirect_segments && blkfront_setup_indirect()
1736 (info->shadow[i].indirect_grants == NULL))) blkfront_setup_indirect()
1738 sg_init_table(info->shadow[i].sg, segs); blkfront_setup_indirect()
1746 kfree(info->shadow[i].grants_used); blkfront_setup_indirect()
1747 info->shadow[i].grants_used = NULL; blkfront_setup_indirect()
1748 kfree(info->shadow[i].sg); blkfront_setup_indirect()
1749 info->shadow[i].sg = NULL; blkfront_setup_indirect()
1750 kfree(info->shadow[i].indirect_grants); blkfront_setup_indirect()
1751 info->shadow[i].indirect_grants = NULL; blkfront_setup_indirect()
1753 if (!list_empty(&info->indirect_pages)) { blkfront_setup_indirect()
1755 list_for_each_entry_safe(indirect_page, n, &info->indirect_pages, lru) { blkfront_setup_indirect()
1767 static void blkfront_connect(struct blkfront_info *info) blkfront_connect() argument
1776 switch (info->connected) { blkfront_connect()
1782 err = xenbus_scanf(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1788 set_capacity(info->gd, sectors); blkfront_connect()
1789 revalidate_disk(info->gd); blkfront_connect()
1799 blkif_recover(info); blkfront_connect()
1806 dev_dbg(&info->xbdev->dev, "%s:%s.\n", blkfront_connect()
1807 __func__, info->xbdev->otherend); blkfront_connect()
1809 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1811 "info", "%u", &binfo, blkfront_connect()
1815 xenbus_dev_fatal(info->xbdev, err, blkfront_connect()
1817 info->xbdev->otherend); blkfront_connect()
1826 err = xenbus_scanf(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1831 info->feature_flush = 0; blkfront_connect()
1833 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1845 info->feature_flush = REQ_FLUSH | REQ_FUA; blkfront_connect()
1850 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1855 info->feature_flush = REQ_FLUSH; blkfront_connect()
1857 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1862 blkfront_setup_discard(info); blkfront_connect()
1864 err = xenbus_gather(XBT_NIL, info->xbdev->otherend, blkfront_connect()
1868 info->feature_persistent = 0; blkfront_connect()
1870 info->feature_persistent = persistent; blkfront_connect()
1872 err = blkfront_setup_indirect(info); blkfront_connect()
1874 xenbus_dev_fatal(info->xbdev, err, "setup_indirect at %s", blkfront_connect()
1875 info->xbdev->otherend); blkfront_connect()
1879 err = xlvbd_alloc_gendisk(sectors, info, binfo, sector_size, blkfront_connect()
1882 xenbus_dev_fatal(info->xbdev, err, "xlvbd_add at %s", blkfront_connect()
1883 info->xbdev->otherend); blkfront_connect()
1887 xenbus_switch_state(info->xbdev, XenbusStateConnected); blkfront_connect()
1890 spin_lock_irq(&info->io_lock); blkfront_connect()
1891 info->connected = BLKIF_STATE_CONNECTED; blkfront_connect()
1892 kick_pending_request_queues(info); blkfront_connect()
1893 spin_unlock_irq(&info->io_lock); blkfront_connect()
1895 add_disk(info->gd); blkfront_connect()
1897 info->is_ready = 1; blkfront_connect()
1906 struct blkfront_info *info = dev_get_drvdata(&dev->dev); blkback_changed() local
1920 blkfront_connect(info); blkback_changed()
1928 if (info) blkback_changed()
1929 blkfront_closing(info); blkback_changed()
1936 struct blkfront_info *info = dev_get_drvdata(&xbdev->dev); blkfront_remove() local
1942 blkif_free(info, 0); blkfront_remove()
1944 mutex_lock(&info->mutex); blkfront_remove()
1946 disk = info->gd; blkfront_remove()
1950 info->xbdev = NULL; blkfront_remove()
1951 mutex_unlock(&info->mutex); blkfront_remove()
1954 kfree(info); blkfront_remove()
1965 info = disk->private_data; blkfront_remove()
1971 if (info && !bdev->bd_openers) { blkfront_remove()
1972 xlvbd_release_gendisk(info); blkfront_remove()
1974 kfree(info); blkfront_remove()
1985 struct blkfront_info *info = dev_get_drvdata(&dev->dev); blkfront_is_ready() local
1987 return info->is_ready && info->xbdev; blkfront_is_ready()
1993 struct blkfront_info *info; blkif_open() local
1998 info = disk->private_data; blkif_open()
1999 if (!info) { blkif_open()
2005 mutex_lock(&info->mutex); blkif_open()
2007 if (!info->gd) blkif_open()
2011 mutex_unlock(&info->mutex); blkif_open()
2020 struct blkfront_info *info = disk->private_data; blkif_release() local
2040 mutex_lock(&info->mutex); blkif_release()
2041 xbdev = info->xbdev; blkif_release()
2046 xlvbd_release_gendisk(info); blkif_release()
2047 xenbus_frontend_closed(info->xbdev); blkif_release()
2050 mutex_unlock(&info->mutex); blkif_release()
2055 xlvbd_release_gendisk(info); blkif_release()
2057 kfree(info); blkif_release()
232 get_grant(grant_ref_t *gref_head, unsigned long pfn, struct blkfront_info *info) get_grant() argument
596 blkif_request_flush_invalid(struct request *req, struct blkfront_info *info) blkif_request_flush_invalid() argument
789 xlvbd_alloc_gendisk(blkif_sector_t capacity, struct blkfront_info *info, u16 vdisk_info, u16 sector_size, unsigned int physical_sector_size) xlvbd_alloc_gendisk() argument
1246 setup_blkring(struct xenbus_device *dev, struct blkfront_info *info) setup_blkring() argument
1292 talk_to_blkback(struct xenbus_device *dev, struct blkfront_info *info) talk_to_blkback() argument
/linux-4.1.27/drivers/pinctrl/
H A Dpinctrl-lantiq.c23 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_get_group_count() local
24 return info->num_grps; ltq_get_group_count()
30 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_get_group_name() local
31 if (selector >= info->num_grps) ltq_get_group_name()
33 return info->grps[selector].name; ltq_get_group_name()
41 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_get_group_pins() local
42 if (selector >= info->num_grps) ltq_get_group_pins()
44 *pins = info->grps[selector].pins; ltq_get_group_pins()
45 *num_pins = info->grps[selector].npins; ltq_get_group_pins()
72 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctldev); ltq_pinctrl_dt_subnode_to_map() local
105 for (i = 0; i < info->num_params; i++) { ltq_pinctrl_dt_subnode_to_map()
108 info->params[i].property, &val); ltq_pinctrl_dt_subnode_to_map()
111 LTQ_PINCONF_PACK(info->params[i].param, ltq_pinctrl_dt_subnode_to_map()
184 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_pmx_func_count() local
186 return info->num_funcs; ltq_pmx_func_count()
192 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_pmx_func_name() local
194 if (selector >= info->num_funcs) ltq_pmx_func_name()
197 return info->funcs[selector].name; ltq_pmx_func_name()
205 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_pmx_get_groups() local
207 *groups = info->funcs[func].groups; ltq_pmx_get_groups()
208 *num_groups = info->funcs[func].num_groups; ltq_pmx_get_groups()
227 static int match_mfp(const struct ltq_pinmux_info *info, int pin) match_mfp() argument
230 for (i = 0; i < info->num_mfp; i++) { match_mfp()
231 if (info->mfp[i].pin == pin) match_mfp()
239 const struct ltq_pinmux_info *info, match_group_mux()
244 pin = match_mfp(info, grp->pins[i]); match_group_mux()
246 dev_err(info->dev, "could not find mfp for pin %d\n", match_group_mux()
250 ret = match_mux(&info->mfp[pin], mux); match_group_mux()
252 dev_err(info->dev, "Can't find mux %d on pin%d\n", match_group_mux()
264 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_pmx_set() local
265 const struct ltq_pin_group *pin_grp = &info->grps[group]; ltq_pmx_set()
269 (match_group_mux(pin_grp, info, pin_grp->mux) < 0)) { ltq_pmx_set()
270 dev_err(info->dev, "Failed to set the pin group: %s\n", ltq_pmx_set()
271 info->grps[group].name); ltq_pmx_set()
275 pin = match_mfp(info, pin_grp->pins[i]); ltq_pmx_set()
277 dev_err(info->dev, "could not find mfp for pin %d\n", ltq_pmx_set()
281 pin_func = match_mux(&info->mfp[pin], pin_grp->mux); ltq_pmx_set()
282 ret = info->apply_mux(pctrldev, pin, pin_func); ltq_pmx_set()
284 dev_err(info->dev, ltq_pmx_set()
297 struct ltq_pinmux_info *info = pinctrl_dev_get_drvdata(pctrldev); ltq_pmx_gpio_request_enable() local
298 int mfp = match_mfp(info, pin); ltq_pmx_gpio_request_enable()
302 dev_err(info->dev, "could not find mfp for pin %d\n", pin); ltq_pmx_gpio_request_enable()
306 pin_func = match_mux(&info->mfp[mfp], 0); ltq_pmx_gpio_request_enable()
308 dev_err(info->dev, "No GPIO function on pin%d\n", mfp); ltq_pmx_gpio_request_enable()
312 return info->apply_mux(pctrldev, mfp, pin_func); ltq_pmx_gpio_request_enable()
328 struct ltq_pinmux_info *info) ltq_pinctrl_register()
332 if (!info) ltq_pinctrl_register()
334 desc = info->desc; ltq_pinctrl_register()
337 info->dev = &pdev->dev; ltq_pinctrl_register()
339 info->pctrl = pinctrl_register(desc, &pdev->dev, info); ltq_pinctrl_register()
340 if (!info->pctrl) { ltq_pinctrl_register()
344 platform_set_drvdata(pdev, info); ltq_pinctrl_register()
238 match_group_mux(const struct ltq_pin_group *grp, const struct ltq_pinmux_info *info, unsigned mux) match_group_mux() argument
327 ltq_pinctrl_register(struct platform_device *pdev, struct ltq_pinmux_info *info) ltq_pinctrl_register() argument
/linux-4.1.27/net/ieee802154/
H A Dnl-mac.c149 static struct net_device *ieee802154_nl_get_dev(struct genl_info *info) ieee802154_nl_get_dev() argument
153 if (info->attrs[IEEE802154_ATTR_DEV_NAME]) { ieee802154_nl_get_dev()
156 nla_strlcpy(name, info->attrs[IEEE802154_ATTR_DEV_NAME], ieee802154_nl_get_dev()
159 } else if (info->attrs[IEEE802154_ATTR_DEV_INDEX]) { ieee802154_nl_get_dev()
161 nla_get_u32(info->attrs[IEEE802154_ATTR_DEV_INDEX])); ieee802154_nl_get_dev()
180 int ieee802154_associate_req(struct sk_buff *skb, struct genl_info *info) ieee802154_associate_req() argument
187 if (!info->attrs[IEEE802154_ATTR_CHANNEL] || ieee802154_associate_req()
188 !info->attrs[IEEE802154_ATTR_COORD_PAN_ID] || ieee802154_associate_req()
189 (!info->attrs[IEEE802154_ATTR_COORD_HW_ADDR] && ieee802154_associate_req()
190 !info->attrs[IEEE802154_ATTR_COORD_SHORT_ADDR]) || ieee802154_associate_req()
191 !info->attrs[IEEE802154_ATTR_CAPABILITY]) ieee802154_associate_req()
194 dev = ieee802154_nl_get_dev(info); ieee802154_associate_req()
200 if (info->attrs[IEEE802154_ATTR_COORD_HW_ADDR]) { ieee802154_associate_req()
203 info->attrs[IEEE802154_ATTR_COORD_HW_ADDR]); ieee802154_associate_req()
207 info->attrs[IEEE802154_ATTR_COORD_SHORT_ADDR]); ieee802154_associate_req()
210 info->attrs[IEEE802154_ATTR_COORD_PAN_ID]); ieee802154_associate_req()
212 if (info->attrs[IEEE802154_ATTR_PAGE]) ieee802154_associate_req()
213 page = nla_get_u8(info->attrs[IEEE802154_ATTR_PAGE]); ieee802154_associate_req()
218 nla_get_u8(info->attrs[IEEE802154_ATTR_CHANNEL]), ieee802154_associate_req()
220 nla_get_u8(info->attrs[IEEE802154_ATTR_CAPABILITY])); ieee802154_associate_req()
227 int ieee802154_associate_resp(struct sk_buff *skb, struct genl_info *info) ieee802154_associate_resp() argument
233 if (!info->attrs[IEEE802154_ATTR_STATUS] || ieee802154_associate_resp()
234 !info->attrs[IEEE802154_ATTR_DEST_HW_ADDR] || ieee802154_associate_resp()
235 !info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR]) ieee802154_associate_resp()
238 dev = ieee802154_nl_get_dev(info); ieee802154_associate_resp()
246 info->attrs[IEEE802154_ATTR_DEST_HW_ADDR]); ieee802154_associate_resp()
250 nla_get_shortaddr(info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR]), ieee802154_associate_resp()
251 nla_get_u8(info->attrs[IEEE802154_ATTR_STATUS])); ieee802154_associate_resp()
258 int ieee802154_disassociate_req(struct sk_buff *skb, struct genl_info *info) ieee802154_disassociate_req() argument
264 if ((!info->attrs[IEEE802154_ATTR_DEST_HW_ADDR] && ieee802154_disassociate_req()
265 !info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR]) || ieee802154_disassociate_req()
266 !info->attrs[IEEE802154_ATTR_REASON]) ieee802154_disassociate_req()
269 dev = ieee802154_nl_get_dev(info); ieee802154_disassociate_req()
275 if (info->attrs[IEEE802154_ATTR_DEST_HW_ADDR]) { ieee802154_disassociate_req()
278 info->attrs[IEEE802154_ATTR_DEST_HW_ADDR]); ieee802154_disassociate_req()
282 info->attrs[IEEE802154_ATTR_DEST_SHORT_ADDR]); ieee802154_disassociate_req()
287 nla_get_u8(info->attrs[IEEE802154_ATTR_REASON])); ieee802154_disassociate_req()
298 int ieee802154_start_req(struct sk_buff *skb, struct genl_info *info) ieee802154_start_req() argument
308 if (!info->attrs[IEEE802154_ATTR_COORD_PAN_ID] || ieee802154_start_req()
309 !info->attrs[IEEE802154_ATTR_COORD_SHORT_ADDR] || ieee802154_start_req()
310 !info->attrs[IEEE802154_ATTR_CHANNEL] || ieee802154_start_req()
311 !info->attrs[IEEE802154_ATTR_BCN_ORD] || ieee802154_start_req()
312 !info->attrs[IEEE802154_ATTR_SF_ORD] || ieee802154_start_req()
313 !info->attrs[IEEE802154_ATTR_PAN_COORD] || ieee802154_start_req()
314 !info->attrs[IEEE802154_ATTR_BAT_EXT] || ieee802154_start_req()
315 !info->attrs[IEEE802154_ATTR_COORD_REALIGN] ieee802154_start_req()
319 dev = ieee802154_nl_get_dev(info); ieee802154_start_req()
333 info->attrs[IEEE802154_ATTR_COORD_SHORT_ADDR]); ieee802154_start_req()
335 info->attrs[IEEE802154_ATTR_COORD_PAN_ID]); ieee802154_start_req()
337 channel = nla_get_u8(info->attrs[IEEE802154_ATTR_CHANNEL]); ieee802154_start_req()
338 bcn_ord = nla_get_u8(info->attrs[IEEE802154_ATTR_BCN_ORD]); ieee802154_start_req()
339 sf_ord = nla_get_u8(info->attrs[IEEE802154_ATTR_SF_ORD]); ieee802154_start_req()
340 pan_coord = nla_get_u8(info->attrs[IEEE802154_ATTR_PAN_COORD]); ieee802154_start_req()
341 blx = nla_get_u8(info->attrs[IEEE802154_ATTR_BAT_EXT]); ieee802154_start_req()
342 coord_realign = nla_get_u8(info->attrs[IEEE802154_ATTR_COORD_REALIGN]); ieee802154_start_req()
344 if (info->attrs[IEEE802154_ATTR_PAGE]) ieee802154_start_req()
345 page = nla_get_u8(info->attrs[IEEE802154_ATTR_PAGE]); ieee802154_start_req()
370 int ieee802154_scan_req(struct sk_buff *skb, struct genl_info *info) ieee802154_scan_req() argument
379 if (!info->attrs[IEEE802154_ATTR_SCAN_TYPE] || ieee802154_scan_req()
380 !info->attrs[IEEE802154_ATTR_CHANNELS] || ieee802154_scan_req()
381 !info->attrs[IEEE802154_ATTR_DURATION]) ieee802154_scan_req()
384 dev = ieee802154_nl_get_dev(info); ieee802154_scan_req()
390 type = nla_get_u8(info->attrs[IEEE802154_ATTR_SCAN_TYPE]); ieee802154_scan_req()
391 channels = nla_get_u32(info->attrs[IEEE802154_ATTR_CHANNELS]); ieee802154_scan_req()
392 duration = nla_get_u8(info->attrs[IEEE802154_ATTR_DURATION]); ieee802154_scan_req()
394 if (info->attrs[IEEE802154_ATTR_PAGE]) ieee802154_scan_req()
395 page = nla_get_u8(info->attrs[IEEE802154_ATTR_PAGE]); ieee802154_scan_req()
407 int ieee802154_list_iface(struct sk_buff *skb, struct genl_info *info) ieee802154_list_iface() argument
418 dev = ieee802154_nl_get_dev(info); ieee802154_list_iface()
426 rc = ieee802154_nl_fill_iface(msg, info->snd_portid, info->snd_seq, ieee802154_list_iface()
433 return genlmsg_reply(msg, info); ieee802154_list_iface()
471 int ieee802154_set_macparams(struct sk_buff *skb, struct genl_info *info) ieee802154_set_macparams() argument
481 dev = ieee802154_nl_get_dev(info); ieee802154_set_macparams()
497 if (!info->attrs[IEEE802154_ATTR_LBT_ENABLED] && ieee802154_set_macparams()
498 !info->attrs[IEEE802154_ATTR_CCA_MODE] && ieee802154_set_macparams()
499 !info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL] && ieee802154_set_macparams()
500 !info->attrs[IEEE802154_ATTR_CSMA_RETRIES] && ieee802154_set_macparams()
501 !info->attrs[IEEE802154_ATTR_CSMA_MIN_BE] && ieee802154_set_macparams()
502 !info->attrs[IEEE802154_ATTR_CSMA_MAX_BE] && ieee802154_set_macparams()
503 !info->attrs[IEEE802154_ATTR_FRAME_RETRIES]) ieee802154_set_macparams()
512 if (info->attrs[IEEE802154_ATTR_TXPOWER]) ieee802154_set_macparams()
513 params.transmit_power = nla_get_s8(info->attrs[IEEE802154_ATTR_TXPOWER]); ieee802154_set_macparams()
515 if (info->attrs[IEEE802154_ATTR_LBT_ENABLED]) ieee802154_set_macparams()
516 params.lbt = nla_get_u8(info->attrs[IEEE802154_ATTR_LBT_ENABLED]); ieee802154_set_macparams()
518 if (info->attrs[IEEE802154_ATTR_CCA_MODE]) ieee802154_set_macparams()
519 params.cca.mode = nla_get_u8(info->attrs[IEEE802154_ATTR_CCA_MODE]); ieee802154_set_macparams()
521 if (info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL]) ieee802154_set_macparams()
522 params.cca_ed_level = nla_get_s32(info->attrs[IEEE802154_ATTR_CCA_ED_LEVEL]); ieee802154_set_macparams()
524 if (info->attrs[IEEE802154_ATTR_CSMA_RETRIES]) ieee802154_set_macparams()
525 params.csma_retries = nla_get_u8(info->attrs[IEEE802154_ATTR_CSMA_RETRIES]); ieee802154_set_macparams()
527 if (info->attrs[IEEE802154_ATTR_CSMA_MIN_BE]) ieee802154_set_macparams()
528 params.min_be = nla_get_u8(info->attrs[IEEE802154_ATTR_CSMA_MIN_BE]); ieee802154_set_macparams()
530 if (info->attrs[IEEE802154_ATTR_CSMA_MAX_BE]) ieee802154_set_macparams()
531 params.max_be = nla_get_u8(info->attrs[IEEE802154_ATTR_CSMA_MAX_BE]); ieee802154_set_macparams()
533 if (info->attrs[IEEE802154_ATTR_FRAME_RETRIES]) ieee802154_set_macparams()
534 params.frame_retries = nla_get_s8(info->attrs[IEEE802154_ATTR_FRAME_RETRIES]); ieee802154_set_macparams()
550 ieee802154_llsec_parse_key_id(struct genl_info *info, ieee802154_llsec_parse_key_id() argument
555 if (!info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE]) ieee802154_llsec_parse_key_id()
558 desc->mode = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE]); ieee802154_llsec_parse_key_id()
561 if (!info->attrs[IEEE802154_ATTR_PAN_ID] && ieee802154_llsec_parse_key_id()
562 !(info->attrs[IEEE802154_ATTR_SHORT_ADDR] || ieee802154_llsec_parse_key_id()
563 info->attrs[IEEE802154_ATTR_HW_ADDR])) ieee802154_llsec_parse_key_id()
566 desc->device_addr.pan_id = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_PAN_ID]); ieee802154_llsec_parse_key_id()
568 if (info->attrs[IEEE802154_ATTR_SHORT_ADDR]) { ieee802154_llsec_parse_key_id()
570 desc->device_addr.short_addr = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_SHORT_ADDR]); ieee802154_llsec_parse_key_id()
573 desc->device_addr.extended_addr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]); ieee802154_llsec_parse_key_id()
578 !info->attrs[IEEE802154_ATTR_LLSEC_KEY_ID]) ieee802154_llsec_parse_key_id()
582 !info->attrs[IEEE802154_ATTR_LLSEC_KEY_SOURCE_SHORT]) ieee802154_llsec_parse_key_id()
586 !info->attrs[IEEE802154_ATTR_LLSEC_KEY_SOURCE_EXTENDED]) ieee802154_llsec_parse_key_id()
590 desc->id = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_KEY_ID]); ieee802154_llsec_parse_key_id()
595 u32 source = nla_get_u32(info->attrs[IEEE802154_ATTR_LLSEC_KEY_SOURCE_SHORT]); ieee802154_llsec_parse_key_id()
601 desc->extended_source = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_LLSEC_KEY_SOURCE_EXTENDED]); ieee802154_llsec_parse_key_id()
648 int ieee802154_llsec_getparams(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_getparams() argument
659 dev = ieee802154_nl_get_dev(info); ieee802154_llsec_getparams()
673 hdr = genlmsg_put(msg, 0, info->snd_seq, &nl802154_family, 0, ieee802154_llsec_getparams()
693 return ieee802154_nl_reply(msg, info); ieee802154_llsec_getparams()
701 int ieee802154_llsec_setparams(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_setparams() argument
711 dev = ieee802154_nl_get_dev(info); ieee802154_llsec_setparams()
715 if (!info->attrs[IEEE802154_ATTR_LLSEC_ENABLED] && ieee802154_llsec_setparams()
716 !info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE] && ieee802154_llsec_setparams()
717 !info->attrs[IEEE802154_ATTR_LLSEC_SECLEVEL]) ieee802154_llsec_setparams()
726 if (info->attrs[IEEE802154_ATTR_LLSEC_SECLEVEL] && ieee802154_llsec_setparams()
727 nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_SECLEVEL]) > 7) ieee802154_llsec_setparams()
730 if (info->attrs[IEEE802154_ATTR_LLSEC_ENABLED]) { ieee802154_llsec_setparams()
731 params.enabled = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_ENABLED]); ieee802154_llsec_setparams()
735 if (info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE]) { ieee802154_llsec_setparams()
736 if (ieee802154_llsec_parse_key_id(info, &params.out_key)) ieee802154_llsec_setparams()
742 if (info->attrs[IEEE802154_ATTR_LLSEC_SECLEVEL]) { ieee802154_llsec_setparams()
743 params.out_level = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_SECLEVEL]); ieee802154_llsec_setparams()
747 if (info->attrs[IEEE802154_ATTR_LLSEC_FRAME_COUNTER]) { ieee802154_llsec_setparams()
748 u32 fc = nla_get_u32(info->attrs[IEEE802154_ATTR_LLSEC_FRAME_COUNTER]); ieee802154_llsec_setparams()
821 ieee802154_nl_llsec_change(struct sk_buff *skb, struct genl_info *info, ieee802154_nl_llsec_change() argument
827 dev = ieee802154_nl_get_dev(info); ieee802154_nl_llsec_change()
834 rc = fn(dev, info); ieee802154_nl_llsec_change()
841 ieee802154_llsec_parse_key(struct genl_info *info, ieee802154_llsec_parse_key() argument
849 if (!info->attrs[IEEE802154_ATTR_LLSEC_KEY_USAGE_FRAME_TYPES] || ieee802154_llsec_parse_key()
850 !info->attrs[IEEE802154_ATTR_LLSEC_KEY_BYTES]) ieee802154_llsec_parse_key()
853 frames = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_KEY_USAGE_FRAME_TYPES]); ieee802154_llsec_parse_key()
855 !info->attrs[IEEE802154_ATTR_LLSEC_KEY_USAGE_COMMANDS]) ieee802154_llsec_parse_key()
858 if (info->attrs[IEEE802154_ATTR_LLSEC_KEY_USAGE_COMMANDS]) { ieee802154_llsec_parse_key()
860 info->attrs[IEEE802154_ATTR_LLSEC_KEY_USAGE_COMMANDS], ieee802154_llsec_parse_key()
873 nla_memcpy(key->key, info->attrs[IEEE802154_ATTR_LLSEC_KEY_BYTES], ieee802154_llsec_parse_key()
879 static int llsec_add_key(struct net_device *dev, struct genl_info *info) llsec_add_key() argument
885 if (ieee802154_llsec_parse_key(info, &key) || llsec_add_key()
886 ieee802154_llsec_parse_key_id(info, &id)) llsec_add_key()
892 int ieee802154_llsec_add_key(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_add_key() argument
894 if ((info->nlhdr->nlmsg_flags & (NLM_F_CREATE | NLM_F_EXCL)) != ieee802154_llsec_add_key()
898 return ieee802154_nl_llsec_change(skb, info, llsec_add_key); ieee802154_llsec_add_key()
901 static int llsec_remove_key(struct net_device *dev, struct genl_info *info) llsec_remove_key() argument
906 if (ieee802154_llsec_parse_key_id(info, &id)) llsec_remove_key()
912 int ieee802154_llsec_del_key(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_del_key() argument
914 return ieee802154_nl_llsec_change(skb, info, llsec_remove_key); ieee802154_llsec_del_key()
985 llsec_parse_dev(struct genl_info *info, llsec_parse_dev() argument
990 if (!info->attrs[IEEE802154_ATTR_LLSEC_FRAME_COUNTER] || llsec_parse_dev()
991 !info->attrs[IEEE802154_ATTR_HW_ADDR] || llsec_parse_dev()
992 !info->attrs[IEEE802154_ATTR_LLSEC_DEV_OVERRIDE] || llsec_parse_dev()
993 !info->attrs[IEEE802154_ATTR_LLSEC_DEV_KEY_MODE] || llsec_parse_dev()
994 (!!info->attrs[IEEE802154_ATTR_PAN_ID] != llsec_parse_dev()
995 !!info->attrs[IEEE802154_ATTR_SHORT_ADDR])) llsec_parse_dev()
998 if (info->attrs[IEEE802154_ATTR_PAN_ID]) { llsec_parse_dev()
999 dev->pan_id = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_PAN_ID]); llsec_parse_dev()
1000 dev->short_addr = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_SHORT_ADDR]); llsec_parse_dev()
1005 dev->hwaddr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]); llsec_parse_dev()
1006 dev->frame_counter = nla_get_u32(info->attrs[IEEE802154_ATTR_LLSEC_FRAME_COUNTER]); llsec_parse_dev()
1007 dev->seclevel_exempt = !!nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_DEV_OVERRIDE]); llsec_parse_dev()
1008 dev->key_mode = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_DEV_KEY_MODE]); llsec_parse_dev()
1016 static int llsec_add_dev(struct net_device *dev, struct genl_info *info) llsec_add_dev() argument
1021 if (llsec_parse_dev(info, &desc)) llsec_add_dev()
1027 int ieee802154_llsec_add_dev(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_add_dev() argument
1029 if ((info->nlhdr->nlmsg_flags & (NLM_F_CREATE | NLM_F_EXCL)) != ieee802154_llsec_add_dev()
1033 return ieee802154_nl_llsec_change(skb, info, llsec_add_dev); ieee802154_llsec_add_dev()
1036 static int llsec_del_dev(struct net_device *dev, struct genl_info *info) llsec_del_dev() argument
1041 if (!info->attrs[IEEE802154_ATTR_HW_ADDR]) llsec_del_dev()
1044 devaddr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]); llsec_del_dev()
1049 int ieee802154_llsec_del_dev(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_del_dev() argument
1051 return ieee802154_nl_llsec_change(skb, info, llsec_del_dev); ieee802154_llsec_del_dev()
1114 static int llsec_add_devkey(struct net_device *dev, struct genl_info *info) llsec_add_devkey() argument
1120 if (!info->attrs[IEEE802154_ATTR_LLSEC_FRAME_COUNTER] || llsec_add_devkey()
1121 !info->attrs[IEEE802154_ATTR_HW_ADDR] || llsec_add_devkey()
1122 ieee802154_llsec_parse_key_id(info, &key.key_id)) llsec_add_devkey()
1125 devaddr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]); llsec_add_devkey()
1126 key.frame_counter = nla_get_u32(info->attrs[IEEE802154_ATTR_LLSEC_FRAME_COUNTER]); llsec_add_devkey()
1131 int ieee802154_llsec_add_devkey(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_add_devkey() argument
1133 if ((info->nlhdr->nlmsg_flags & (NLM_F_CREATE | NLM_F_EXCL)) != ieee802154_llsec_add_devkey()
1137 return ieee802154_nl_llsec_change(skb, info, llsec_add_devkey); ieee802154_llsec_add_devkey()
1140 static int llsec_del_devkey(struct net_device *dev, struct genl_info *info) llsec_del_devkey() argument
1146 if (!info->attrs[IEEE802154_ATTR_HW_ADDR] || llsec_del_devkey()
1147 ieee802154_llsec_parse_key_id(info, &key.key_id)) llsec_del_devkey()
1150 devaddr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]); llsec_del_devkey()
1155 int ieee802154_llsec_del_devkey(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_del_devkey() argument
1157 return ieee802154_nl_llsec_change(skb, info, llsec_del_devkey); ieee802154_llsec_del_devkey()
1229 llsec_parse_seclevel(struct genl_info *info, llsec_parse_seclevel() argument
1234 if (!info->attrs[IEEE802154_ATTR_LLSEC_FRAME_TYPE] || llsec_parse_seclevel()
1235 !info->attrs[IEEE802154_ATTR_LLSEC_SECLEVELS] || llsec_parse_seclevel()
1236 !info->attrs[IEEE802154_ATTR_LLSEC_DEV_OVERRIDE]) llsec_parse_seclevel()
1239 sl->frame_type = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_FRAME_TYPE]); llsec_parse_seclevel()
1241 if (!info->attrs[IEEE802154_ATTR_LLSEC_CMD_FRAME_ID]) llsec_parse_seclevel()
1244 sl->cmd_frame_id = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_CMD_FRAME_ID]); llsec_parse_seclevel()
1247 sl->sec_levels = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_SECLEVELS]); llsec_parse_seclevel()
1248 sl->device_override = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_DEV_OVERRIDE]); llsec_parse_seclevel()
1253 static int llsec_add_seclevel(struct net_device *dev, struct genl_info *info) llsec_add_seclevel() argument
1258 if (llsec_parse_seclevel(info, &sl)) llsec_add_seclevel()
1264 int ieee802154_llsec_add_seclevel(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_add_seclevel() argument
1266 if ((info->nlhdr->nlmsg_flags & (NLM_F_CREATE | NLM_F_EXCL)) != ieee802154_llsec_add_seclevel()
1270 return ieee802154_nl_llsec_change(skb, info, llsec_add_seclevel); ieee802154_llsec_add_seclevel()
1273 static int llsec_del_seclevel(struct net_device *dev, struct genl_info *info) llsec_del_seclevel() argument
1278 if (llsec_parse_seclevel(info, &sl)) llsec_del_seclevel()
1284 int ieee802154_llsec_del_seclevel(struct sk_buff *skb, struct genl_info *info) ieee802154_llsec_del_seclevel() argument
1286 return ieee802154_nl_llsec_change(skb, info, llsec_del_seclevel); ieee802154_llsec_del_seclevel()
H A Dieee802154.h41 struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info,
43 int ieee802154_nl_reply(struct sk_buff *msg, struct genl_info *info);
48 int ieee802154_list_phy(struct sk_buff *skb, struct genl_info *info);
50 int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info);
51 int ieee802154_del_iface(struct sk_buff *skb, struct genl_info *info);
58 int ieee802154_associate_req(struct sk_buff *skb, struct genl_info *info);
59 int ieee802154_associate_resp(struct sk_buff *skb, struct genl_info *info);
60 int ieee802154_disassociate_req(struct sk_buff *skb, struct genl_info *info);
61 int ieee802154_scan_req(struct sk_buff *skb, struct genl_info *info);
62 int ieee802154_start_req(struct sk_buff *skb, struct genl_info *info);
63 int ieee802154_list_iface(struct sk_buff *skb, struct genl_info *info);
65 int ieee802154_set_macparams(struct sk_buff *skb, struct genl_info *info);
67 int ieee802154_llsec_getparams(struct sk_buff *skb, struct genl_info *info);
68 int ieee802154_llsec_setparams(struct sk_buff *skb, struct genl_info *info);
69 int ieee802154_llsec_add_key(struct sk_buff *skb, struct genl_info *info);
70 int ieee802154_llsec_del_key(struct sk_buff *skb, struct genl_info *info);
73 int ieee802154_llsec_add_dev(struct sk_buff *skb, struct genl_info *info);
74 int ieee802154_llsec_del_dev(struct sk_buff *skb, struct genl_info *info);
77 int ieee802154_llsec_add_devkey(struct sk_buff *skb, struct genl_info *info);
78 int ieee802154_llsec_del_devkey(struct sk_buff *skb, struct genl_info *info);
81 int ieee802154_llsec_add_seclevel(struct sk_buff *skb, struct genl_info *info);
82 int ieee802154_llsec_del_seclevel(struct sk_buff *skb, struct genl_info *info);
/linux-4.1.27/drivers/macintosh/
H A Dapm_emu.c28 static void pmu_apm_get_power_status(struct apm_power_info *info) pmu_apm_get_power_status() argument
40 info->battery_status = APM_BATTERY_STATUS_UNKNOWN; pmu_apm_get_power_status()
41 info->battery_flag = APM_BATTERY_FLAG_UNKNOWN; pmu_apm_get_power_status()
42 info->units = APM_UNITS_MINS; pmu_apm_get_power_status()
45 info->ac_line_status = APM_AC_ONLINE; pmu_apm_get_power_status()
47 info->ac_line_status = APM_AC_OFFLINE; pmu_apm_get_power_status()
68 info->ac_line_status = APM_AC_ONLINE; pmu_apm_get_power_status()
79 info->battery_status = APM_BATTERY_STATUS_CHARGING; pmu_apm_get_power_status()
80 info->battery_flag = APM_BATTERY_FLAG_CHARGING; pmu_apm_get_power_status()
82 info->battery_status = APM_BATTERY_STATUS_CRITICAL; pmu_apm_get_power_status()
83 info->battery_flag = APM_BATTERY_FLAG_CRITICAL; pmu_apm_get_power_status()
85 info->battery_status = APM_BATTERY_STATUS_LOW; pmu_apm_get_power_status()
86 info->battery_flag = APM_BATTERY_FLAG_LOW; pmu_apm_get_power_status()
88 info->battery_status = APM_BATTERY_STATUS_HIGH; pmu_apm_get_power_status()
89 info->battery_flag = APM_BATTERY_FLAG_HIGH; pmu_apm_get_power_status()
93 info->battery_life = percentage; pmu_apm_get_power_status()
94 info->time = time_units; pmu_apm_get_power_status()
/linux-4.1.27/drivers/nfc/st21nfca/
H A Dst21nfca_se.c66 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_se_get_bwi() local
70 td = ST21NFCA_ATR_GET_Y_FROM_TD(info->se_info.atr[i]); st21nfca_se_get_bwi()
75 return info->se_info.atr[i] >> 4; st21nfca_se_get_bwi()
85 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_se_get_atr() local
93 memcpy(info->se_info.atr, skb->data, skb->len); st21nfca_se_get_atr()
94 info->se_info.wt_timeout = st21nfca_se_get_atr()
103 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_hci_control_se() local
114 info->se_info.count_pipes = 0; st21nfca_hci_control_se()
115 info->se_info.expected_pipes = ST21NFCA_SE_COUNT_PIPE_UICC; st21nfca_hci_control_se()
122 info->se_info.count_pipes = 0; st21nfca_hci_control_se()
123 info->se_info.expected_pipes = ST21NFCA_SE_COUNT_PIPE_EMBEDDED; st21nfca_hci_control_se()
133 reinit_completion(&info->se_info.req_completion); st21nfca_hci_control_se()
139 mod_timer(&info->se_info.se_active_timer, jiffies + st21nfca_hci_control_se()
141 info->se_info.se_active = true; st21nfca_hci_control_se()
144 wait_for_completion_interruptible(&info->se_info.req_completion); st21nfca_hci_control_se()
165 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_hci_discover_se() local
168 if (info->se_status->is_uicc_present) { st21nfca_hci_discover_se()
173 if (info->se_status->is_ese_present) { st21nfca_hci_discover_se()
188 * info->se_status->is_uicc_enable is true should never happen. st21nfca_hci_enable_se()
218 * info->se_status->is_uicc_enable is true should never happen st21nfca_hci_disable_se()
233 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_hci_se_io() local
239 info->se_info.cb = cb; st21nfca_hci_se_io()
240 info->se_info.cb_context = cb_context; st21nfca_hci_se_io()
241 mod_timer(&info->se_info.bwi_timer, jiffies + st21nfca_hci_se_io()
242 msecs_to_jiffies(info->se_info.wt_timeout)); st21nfca_hci_se_io()
243 info->se_info.bwi_active = true; st21nfca_hci_se_io()
266 struct st21nfca_hci_info *info = (struct st21nfca_hci_info *) data; st21nfca_se_wt_timeout() local
270 info->se_info.bwi_active = false; st21nfca_se_wt_timeout()
272 if (!info->se_info.xch_error) { st21nfca_se_wt_timeout()
273 info->se_info.xch_error = true; st21nfca_se_wt_timeout()
274 nfc_hci_send_event(info->hdev, ST21NFCA_APDU_READER_GATE, st21nfca_se_wt_timeout()
277 info->se_info.xch_error = false; st21nfca_se_wt_timeout()
278 nfc_hci_send_event(info->hdev, ST21NFCA_DEVICE_MGNT_GATE, st21nfca_se_wt_timeout()
281 info->se_info.cb(info->se_info.cb_context, NULL, 0, -ETIME); st21nfca_se_wt_timeout()
286 struct st21nfca_hci_info *info = (struct st21nfca_hci_info *) data; st21nfca_se_activation_timeout() local
290 info->se_info.se_active = false; st21nfca_se_activation_timeout()
292 complete(&info->se_info.req_completion); st21nfca_se_activation_timeout()
354 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_apdu_reader_event_received() local
360 del_timer_sync(&info->se_info.bwi_timer); st21nfca_apdu_reader_event_received()
361 info->se_info.bwi_active = false; st21nfca_apdu_reader_event_received()
367 info->se_info.cb(info->se_info.cb_context, st21nfca_apdu_reader_event_received()
371 mod_timer(&info->se_info.bwi_timer, jiffies + st21nfca_apdu_reader_event_received()
372 msecs_to_jiffies(info->se_info.wt_timeout)); st21nfca_apdu_reader_event_received()
384 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_se_init() local
386 init_completion(&info->se_info.req_completion); st21nfca_se_init()
388 init_timer(&info->se_info.bwi_timer); st21nfca_se_init()
389 info->se_info.bwi_timer.data = (unsigned long)info; st21nfca_se_init()
390 info->se_info.bwi_timer.function = st21nfca_se_wt_timeout; st21nfca_se_init()
391 info->se_info.bwi_active = false; st21nfca_se_init()
393 init_timer(&info->se_info.se_active_timer); st21nfca_se_init()
394 info->se_info.se_active_timer.data = (unsigned long)info; st21nfca_se_init()
395 info->se_info.se_active_timer.function = st21nfca_se_activation_timeout; st21nfca_se_init()
396 info->se_info.se_active = false; st21nfca_se_init()
398 info->se_info.count_pipes = 0; st21nfca_se_init()
399 info->se_info.expected_pipes = 0; st21nfca_se_init()
401 info->se_info.xch_error = false; st21nfca_se_init()
403 info->se_info.wt_timeout = st21nfca_se_init()
410 struct st21nfca_hci_info *info = nfc_hci_get_clientdata(hdev); st21nfca_se_deinit() local
412 if (info->se_info.bwi_active) st21nfca_se_deinit()
413 del_timer_sync(&info->se_info.bwi_timer); st21nfca_se_deinit()
414 if (info->se_info.se_active) st21nfca_se_deinit()
415 del_timer_sync(&info->se_info.se_active_timer); st21nfca_se_deinit()
417 info->se_info.bwi_active = false; st21nfca_se_deinit()
418 info->se_info.se_active = false; st21nfca_se_deinit()
/linux-4.1.27/drivers/devfreq/event/
H A Dexynos-ppmu.c101 struct exynos_ppmu *info = devfreq_event_get_drvdata(edev); exynos_ppmu_disable() local
110 info->ppmu.base + PPMU_CNTENC); exynos_ppmu_disable()
113 pmnc = __raw_readl(info->ppmu.base + PPMU_PMNC); exynos_ppmu_disable()
115 __raw_writel(pmnc, info->ppmu.base + PPMU_PMNC); exynos_ppmu_disable()
122 struct exynos_ppmu *info = devfreq_event_get_drvdata(edev); exynos_ppmu_set_event() local
130 cntens = __raw_readl(info->ppmu.base + PPMU_CNTENS); exynos_ppmu_set_event()
132 __raw_writel(cntens, info->ppmu.base + PPMU_CNTENS); exynos_ppmu_set_event()
136 info->ppmu.base + PPMU_BEVTxSEL(id)); exynos_ppmu_set_event()
139 pmnc = __raw_readl(info->ppmu.base + PPMU_PMNC); exynos_ppmu_set_event()
146 __raw_writel(pmnc, info->ppmu.base + PPMU_PMNC); exynos_ppmu_set_event()
154 struct exynos_ppmu *info = devfreq_event_get_drvdata(edev); exynos_ppmu_get_event() local
162 pmnc = __raw_readl(info->ppmu.base + PPMU_PMNC); exynos_ppmu_get_event()
164 __raw_writel(pmnc, info->ppmu.base + PPMU_PMNC); exynos_ppmu_get_event()
167 edata->total_count = __raw_readl(info->ppmu.base + PPMU_CCNT); exynos_ppmu_get_event()
175 = __raw_readl(info->ppmu.base + PPMU_PMNCT(id)); exynos_ppmu_get_event()
179 ((__raw_readl(info->ppmu.base + PPMU_PMCNT3_HIGH) << 8) exynos_ppmu_get_event()
180 | __raw_readl(info->ppmu.base + PPMU_PMCNT3_LOW)); exynos_ppmu_get_event()
187 cntenc = __raw_readl(info->ppmu.base + PPMU_CNTENC); exynos_ppmu_get_event()
189 __raw_writel(cntenc, info->ppmu.base + PPMU_CNTENC); exynos_ppmu_get_event()
204 struct exynos_ppmu *info) of_get_devfreq_events()
207 struct device *dev = info->dev; of_get_devfreq_events()
222 info->num_events = count; of_get_devfreq_events()
242 desc[j].driver_data = info; for_each_child_of_node()
250 info->desc = desc;
257 static int exynos_ppmu_parse_dt(struct exynos_ppmu *info) exynos_ppmu_parse_dt() argument
259 struct device *dev = info->dev; exynos_ppmu_parse_dt()
269 info->ppmu.base = of_iomap(np, 0); exynos_ppmu_parse_dt()
270 if (IS_ERR_OR_NULL(info->ppmu.base)) { exynos_ppmu_parse_dt()
275 info->ppmu.clk = devm_clk_get(dev, "ppmu"); exynos_ppmu_parse_dt()
276 if (IS_ERR(info->ppmu.clk)) { exynos_ppmu_parse_dt()
277 info->ppmu.clk = NULL; exynos_ppmu_parse_dt()
281 ret = of_get_devfreq_events(np, info); exynos_ppmu_parse_dt()
290 iounmap(info->ppmu.base); exynos_ppmu_parse_dt()
297 struct exynos_ppmu *info; exynos_ppmu_probe() local
302 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); exynos_ppmu_probe()
303 if (!info) exynos_ppmu_probe()
306 mutex_init(&info->lock); exynos_ppmu_probe()
307 info->dev = &pdev->dev; exynos_ppmu_probe()
310 ret = exynos_ppmu_parse_dt(info); exynos_ppmu_probe()
316 desc = info->desc; exynos_ppmu_probe()
318 size = sizeof(struct devfreq_event_dev *) * info->num_events; exynos_ppmu_probe()
319 info->edev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); exynos_ppmu_probe()
320 if (!info->edev) { exynos_ppmu_probe()
325 edev = info->edev; exynos_ppmu_probe()
326 platform_set_drvdata(pdev, info); exynos_ppmu_probe()
328 for (i = 0; i < info->num_events; i++) { exynos_ppmu_probe()
338 clk_prepare_enable(info->ppmu.clk); exynos_ppmu_probe()
342 iounmap(info->ppmu.base); exynos_ppmu_probe()
349 struct exynos_ppmu *info = platform_get_drvdata(pdev); exynos_ppmu_remove() local
351 clk_disable_unprepare(info->ppmu.clk); exynos_ppmu_remove()
352 iounmap(info->ppmu.base); exynos_ppmu_remove()
203 of_get_devfreq_events(struct device_node *np, struct exynos_ppmu *info) of_get_devfreq_events() argument
/linux-4.1.27/drivers/pwm/
H A Dpwm-tipwmss.c38 struct pwmss_info *info = dev_get_drvdata(dev); pwmss_submodule_state_change() local
41 mutex_lock(&info->pwmss_lock); pwmss_submodule_state_change()
42 val = readw(info->mmio_base + PWMSS_CLKCONFIG); pwmss_submodule_state_change()
44 writew(val , info->mmio_base + PWMSS_CLKCONFIG); pwmss_submodule_state_change()
45 mutex_unlock(&info->pwmss_lock); pwmss_submodule_state_change()
47 return readw(info->mmio_base + PWMSS_CLKSTATUS); pwmss_submodule_state_change()
61 struct pwmss_info *info; pwmss_probe() local
64 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); pwmss_probe()
65 if (!info) pwmss_probe()
68 mutex_init(&info->pwmss_lock); pwmss_probe()
71 info->mmio_base = devm_ioremap_resource(&pdev->dev, r); pwmss_probe()
72 if (IS_ERR(info->mmio_base)) pwmss_probe()
73 return PTR_ERR(info->mmio_base); pwmss_probe()
77 platform_set_drvdata(pdev, info); pwmss_probe()
89 struct pwmss_info *info = platform_get_drvdata(pdev); pwmss_remove() local
93 mutex_destroy(&info->pwmss_lock); pwmss_remove()
100 struct pwmss_info *info = dev_get_drvdata(dev); pwmss_suspend() local
102 info->pwmss_clkconfig = readw(info->mmio_base + PWMSS_CLKCONFIG); pwmss_suspend()
109 struct pwmss_info *info = dev_get_drvdata(dev); pwmss_resume() local
112 writew(info->pwmss_clkconfig, info->mmio_base + PWMSS_CLKCONFIG); pwmss_resume()
/linux-4.1.27/drivers/scsi/
H A Dxen-scsifront.c131 static void scsifront_wake_up(struct vscsifrnt_info *info) scsifront_wake_up() argument
133 info->wait_ring_available = 0; scsifront_wake_up()
134 wake_up(&info->wq_sync); scsifront_wake_up()
137 static int scsifront_get_rqid(struct vscsifrnt_info *info) scsifront_get_rqid() argument
142 spin_lock_irqsave(&info->shadow_lock, flags); scsifront_get_rqid()
144 free = find_first_bit(info->shadow_free_bitmap, VSCSIIF_MAX_REQS); scsifront_get_rqid()
145 __clear_bit(free, info->shadow_free_bitmap); scsifront_get_rqid()
147 spin_unlock_irqrestore(&info->shadow_lock, flags); scsifront_get_rqid()
152 static int _scsifront_put_rqid(struct vscsifrnt_info *info, uint32_t id) _scsifront_put_rqid() argument
154 int empty = bitmap_empty(info->shadow_free_bitmap, VSCSIIF_MAX_REQS); _scsifront_put_rqid()
156 __set_bit(id, info->shadow_free_bitmap); _scsifront_put_rqid()
157 info->shadow[id] = NULL; _scsifront_put_rqid()
159 return empty || info->wait_ring_available; _scsifront_put_rqid()
162 static void scsifront_put_rqid(struct vscsifrnt_info *info, uint32_t id) scsifront_put_rqid() argument
167 spin_lock_irqsave(&info->shadow_lock, flags); scsifront_put_rqid()
168 kick = _scsifront_put_rqid(info, id); scsifront_put_rqid()
169 spin_unlock_irqrestore(&info->shadow_lock, flags); scsifront_put_rqid()
172 scsifront_wake_up(info); scsifront_put_rqid()
175 static struct vscsiif_request *scsifront_pre_req(struct vscsifrnt_info *info) scsifront_pre_req() argument
177 struct vscsiif_front_ring *ring = &(info->ring); scsifront_pre_req()
181 id = scsifront_get_rqid(info); /* use id in response */ scsifront_pre_req()
185 ring_req = RING_GET_REQUEST(&(info->ring), ring->req_prod_pvt); scsifront_pre_req()
194 static void scsifront_do_request(struct vscsifrnt_info *info) scsifront_do_request() argument
196 struct vscsiif_front_ring *ring = &(info->ring); scsifront_do_request()
201 notify_remote_via_irq(info->irq); scsifront_do_request()
204 static void scsifront_gnttab_done(struct vscsifrnt_info *info, uint32_t id) scsifront_gnttab_done() argument
206 struct vscsifrnt_shadow *s = info->shadow[id]; scsifront_gnttab_done()
214 shost_printk(KERN_ALERT, info->host, KBUILD_MODNAME scsifront_gnttab_done()
224 static void scsifront_cdb_cmd_done(struct vscsifrnt_info *info, scsifront_cdb_cmd_done() argument
232 sc = info->shadow[id]->sc; scsifront_cdb_cmd_done()
236 scsifront_gnttab_done(info, id); scsifront_cdb_cmd_done()
237 scsifront_put_rqid(info, id); scsifront_cdb_cmd_done()
251 static void scsifront_sync_cmd_done(struct vscsifrnt_info *info, scsifront_sync_cmd_done() argument
256 struct vscsifrnt_shadow *shadow = info->shadow[id]; scsifront_sync_cmd_done()
259 spin_lock_irqsave(&info->shadow_lock, flags); scsifront_sync_cmd_done()
266 kick = _scsifront_put_rqid(info, id); scsifront_sync_cmd_done()
267 spin_unlock_irqrestore(&info->shadow_lock, flags); scsifront_sync_cmd_done()
270 scsifront_wake_up(info); scsifront_sync_cmd_done()
273 shost_printk(KERN_ERR, info->host, KBUILD_MODNAME scsifront_sync_cmd_done()
278 spin_unlock_irqrestore(&info->shadow_lock, flags); scsifront_sync_cmd_done()
283 static void scsifront_do_response(struct vscsifrnt_info *info, scsifront_do_response() argument
287 test_bit(ring_rsp->rqid, info->shadow_free_bitmap), scsifront_do_response()
291 if (info->shadow[ring_rsp->rqid]->act == VSCSIIF_ACT_SCSI_CDB) scsifront_do_response()
292 scsifront_cdb_cmd_done(info, ring_rsp); scsifront_do_response()
294 scsifront_sync_cmd_done(info, ring_rsp); scsifront_do_response()
297 static int scsifront_ring_drain(struct vscsifrnt_info *info) scsifront_ring_drain() argument
303 rp = info->ring.sring->rsp_prod; scsifront_ring_drain()
305 for (i = info->ring.rsp_cons; i != rp; i++) { scsifront_ring_drain()
306 ring_rsp = RING_GET_RESPONSE(&info->ring, i); scsifront_ring_drain()
307 scsifront_do_response(info, ring_rsp); scsifront_ring_drain()
310 info->ring.rsp_cons = i; scsifront_ring_drain()
312 if (i != info->ring.req_prod_pvt) scsifront_ring_drain()
313 RING_FINAL_CHECK_FOR_RESPONSES(&info->ring, more_to_do); scsifront_ring_drain()
315 info->ring.sring->rsp_event = i + 1; scsifront_ring_drain()
320 static int scsifront_cmd_done(struct vscsifrnt_info *info) scsifront_cmd_done() argument
325 spin_lock_irqsave(info->host->host_lock, flags); scsifront_cmd_done()
327 more_to_do = scsifront_ring_drain(info); scsifront_cmd_done()
329 info->wait_ring_available = 0; scsifront_cmd_done()
331 spin_unlock_irqrestore(info->host->host_lock, flags); scsifront_cmd_done()
333 wake_up(&info->wq_sync); scsifront_cmd_done()
340 struct vscsifrnt_info *info = dev_id; scsifront_irq_fn() local
342 while (scsifront_cmd_done(info)) scsifront_irq_fn()
349 static void scsifront_finish_all(struct vscsifrnt_info *info) scsifront_finish_all() argument
354 scsifront_ring_drain(info); scsifront_finish_all()
357 if (test_bit(i, info->shadow_free_bitmap)) scsifront_finish_all()
363 scsifront_do_response(info, &resp); scsifront_finish_all()
367 static int map_data_for_request(struct vscsifrnt_info *info, map_data_for_request() argument
391 if (data_grants > info->host->sg_tablesize) { map_data_for_request()
392 shost_printk(KERN_ERR, info->host, KBUILD_MODNAME map_data_for_request()
408 shost_printk(KERN_ERR, info->host, KBUILD_MODNAME map_data_for_request()
425 info->dev->otherend_id, mfn, 1); map_data_for_request()
459 info->dev->otherend_id, mfn, grant_ro); scsi_for_each_sg()
485 struct vscsifrnt_info *info, struct scsi_cmnd *sc, scsifront_command2ring()
492 ring_req = scsifront_pre_req(info); scsifront_command2ring()
496 info->shadow[ring_req->rqid] = shadow; scsifront_command2ring()
514 static int scsifront_enter(struct vscsifrnt_info *info) scsifront_enter() argument
516 if (info->pause) scsifront_enter()
518 info->callers++; scsifront_enter()
522 static void scsifront_return(struct vscsifrnt_info *info) scsifront_return() argument
524 info->callers--; scsifront_return()
525 if (info->callers) scsifront_return()
528 if (!info->waiting_pause) scsifront_return()
531 info->waiting_pause = 0; scsifront_return()
532 wake_up(&info->wq_pause); scsifront_return()
538 struct vscsifrnt_info *info = shost_priv(shost); scsifront_queuecommand() local
546 if (scsifront_enter(info)) { scsifront_queuecommand()
550 if (RING_FULL(&info->ring)) scsifront_queuecommand()
553 ring_req = scsifront_command2ring(info, sc, shadow); scsifront_queuecommand()
565 err = map_data_for_request(info, sc, ring_req, shadow); scsifront_queuecommand()
568 scsifront_put_rqid(info, rqid); scsifront_queuecommand()
569 scsifront_return(info); scsifront_queuecommand()
578 scsifront_do_request(info); scsifront_queuecommand()
579 scsifront_return(info); scsifront_queuecommand()
585 scsifront_return(info); scsifront_queuecommand()
599 struct vscsifrnt_info *info = shost_priv(host); scsifront_action_handler() local
611 if (!RING_FULL(&info->ring)) { scsifront_action_handler()
612 ring_req = scsifront_command2ring(info, sc, shadow); scsifront_action_handler()
616 if (err || info->pause) { scsifront_action_handler()
621 info->wait_ring_available = 1; scsifront_action_handler()
623 err = wait_event_interruptible(info->wq_sync, scsifront_action_handler()
624 !info->wait_ring_available); scsifront_action_handler()
628 if (scsifront_enter(info)) { scsifront_action_handler()
642 scsifront_do_request(info); scsifront_action_handler()
650 scsifront_put_rqid(info, shadow->rqid); scsifront_action_handler()
653 spin_lock(&info->shadow_lock); scsifront_action_handler()
655 spin_unlock(&info->shadow_lock); scsifront_action_handler()
659 scsifront_return(info); scsifront_action_handler()
678 struct vscsifrnt_info *info = shost_priv(sdev->host); scsifront_sdev_configure() local
680 if (info && current == info->curr) scsifront_sdev_configure()
681 xenbus_printf(XBT_NIL, info->dev->nodename, scsifront_sdev_configure()
682 info->dev_state_path, "%d", XenbusStateConnected); scsifront_sdev_configure()
689 struct vscsifrnt_info *info = shost_priv(sdev->host); scsifront_sdev_destroy() local
691 if (info && current == info->curr) scsifront_sdev_destroy()
692 xenbus_printf(XBT_NIL, info->dev->nodename, scsifront_sdev_destroy()
693 info->dev_state_path, "%d", XenbusStateClosed); scsifront_sdev_destroy()
713 static int scsifront_alloc_ring(struct vscsifrnt_info *info) scsifront_alloc_ring() argument
715 struct xenbus_device *dev = info->dev; scsifront_alloc_ring()
728 FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE); scsifront_alloc_ring()
737 info->ring_ref = gref; scsifront_alloc_ring()
739 err = xenbus_alloc_evtchn(dev, &info->evtchn); scsifront_alloc_ring()
745 err = bind_evtchn_to_irq(info->evtchn); scsifront_alloc_ring()
751 info->irq = err; scsifront_alloc_ring()
753 err = request_threaded_irq(info->irq, NULL, scsifront_irq_fn, scsifront_alloc_ring()
754 IRQF_ONESHOT, "scsifront", info); scsifront_alloc_ring()
764 unbind_from_irqhandler(info->irq, info); scsifront_alloc_ring()
766 gnttab_end_foreign_access(info->ring_ref, 0, scsifront_alloc_ring()
767 (unsigned long)info->ring.sring); scsifront_alloc_ring()
772 static void scsifront_free_ring(struct vscsifrnt_info *info) scsifront_free_ring() argument
774 unbind_from_irqhandler(info->irq, info); scsifront_free_ring()
775 gnttab_end_foreign_access(info->ring_ref, 0, scsifront_free_ring()
776 (unsigned long)info->ring.sring); scsifront_free_ring()
779 static int scsifront_init_ring(struct vscsifrnt_info *info) scsifront_init_ring() argument
781 struct xenbus_device *dev = info->dev; scsifront_init_ring()
787 err = scsifront_alloc_ring(info); scsifront_init_ring()
790 pr_debug("%s: %u %u\n", __func__, info->ring_ref, info->evtchn); scsifront_init_ring()
798 info->ring_ref); scsifront_init_ring()
805 info->evtchn); scsifront_init_ring()
825 scsifront_free_ring(info); scsifront_init_ring()
834 struct vscsifrnt_info *info; scsifront_probe() local
839 host = scsi_host_alloc(&scsifront_sht, sizeof(*info)); scsifront_probe()
844 info = (struct vscsifrnt_info *)host->hostdata; scsifront_probe()
846 dev_set_drvdata(&dev->dev, info); scsifront_probe()
847 info->dev = dev; scsifront_probe()
849 bitmap_fill(info->shadow_free_bitmap, VSCSIIF_MAX_REQS); scsifront_probe()
851 err = scsifront_init_ring(info); scsifront_probe()
857 init_waitqueue_head(&info->wq_sync); scsifront_probe()
858 init_waitqueue_head(&info->wq_pause); scsifront_probe()
859 spin_lock_init(&info->shadow_lock); scsifront_probe()
874 info->host = host; scsifront_probe()
875 info->host_active = 1; scsifront_probe()
882 scsifront_free_ring(info); scsifront_probe()
889 struct vscsifrnt_info *info = dev_get_drvdata(&dev->dev); scsifront_resume() local
890 struct Scsi_Host *host = info->host; scsifront_resume()
896 scsifront_finish_all(info); scsifront_resume()
901 scsifront_free_ring(info); scsifront_resume()
902 err = scsifront_init_ring(info); scsifront_resume()
916 struct vscsifrnt_info *info = dev_get_drvdata(&dev->dev); scsifront_suspend() local
917 struct Scsi_Host *host = info->host; scsifront_suspend()
922 info->pause = 1; scsifront_suspend()
923 while (info->callers && !err) { scsifront_suspend()
924 info->waiting_pause = 1; scsifront_suspend()
925 info->wait_ring_available = 0; scsifront_suspend()
927 wake_up(&info->wq_sync); scsifront_suspend()
928 err = wait_event_interruptible(info->wq_pause, scsifront_suspend()
929 !info->waiting_pause); scsifront_suspend()
938 struct vscsifrnt_info *info = dev_get_drvdata(&dev->dev); scsifront_remove() local
943 if (info->host_active) { scsifront_remove()
945 scsi_remove_host(info->host); scsifront_remove()
946 info->host_active = 0; scsifront_remove()
950 scsifront_free_ring(info); scsifront_remove()
951 scsi_host_put(info->host); scsifront_remove()
956 static void scsifront_disconnect(struct vscsifrnt_info *info) scsifront_disconnect() argument
958 struct xenbus_device *dev = info->dev; scsifront_disconnect()
959 struct Scsi_Host *host = info->host; scsifront_disconnect()
970 if (info->host_active) { scsifront_disconnect()
972 info->host_active = 0; scsifront_disconnect()
979 static void scsifront_do_lun_hotplug(struct vscsifrnt_info *info, int op) scsifront_do_lun_hotplug() argument
981 struct xenbus_device *dev = info->dev; scsifront_do_lun_hotplug()
995 BUG_ON(info->curr); scsifront_do_lun_hotplug()
996 info->curr = current; scsifront_do_lun_hotplug()
1018 snprintf(info->dev_state_path, sizeof(info->dev_state_path), scsifront_do_lun_hotplug()
1026 if (scsi_add_device(info->host, chn, tgt, lun)) { scsifront_do_lun_hotplug()
1029 info->dev_state_path, scsifront_do_lun_hotplug()
1037 sdev = scsi_device_lookup(info->host, chn, tgt, lun); scsifront_do_lun_hotplug()
1046 info->dev_state_path, scsifront_do_lun_hotplug()
1054 info->curr = NULL; scsifront_do_lun_hotplug()
1060 struct vscsifrnt_info *info) scsifront_read_backend_params()
1064 struct Scsi_Host *host = info->host; scsifront_read_backend_params()
1076 if (!info->pause && sg_grant) scsifront_read_backend_params()
1078 else if (info->pause && nr_segs < host->sg_tablesize) scsifront_read_backend_params()
1090 struct vscsifrnt_info *info = dev_get_drvdata(&dev->dev); scsifront_backend_changed() local
1102 scsifront_read_backend_params(dev, info); scsifront_backend_changed()
1104 if (info->pause) { scsifront_backend_changed()
1105 scsifront_do_lun_hotplug(info, VSCSIFRONT_OP_READD_LUN); scsifront_backend_changed()
1107 info->pause = 0; scsifront_backend_changed()
1113 scsifront_do_lun_hotplug(info, VSCSIFRONT_OP_ADD_LUN); scsifront_backend_changed()
1124 scsifront_disconnect(info); scsifront_backend_changed()
1128 scsifront_do_lun_hotplug(info, VSCSIFRONT_OP_DEL_LUN); scsifront_backend_changed()
1133 scsifront_do_lun_hotplug(info, VSCSIFRONT_OP_ADD_LUN); scsifront_backend_changed()
484 scsifront_command2ring( struct vscsifrnt_info *info, struct scsi_cmnd *sc, struct vscsifrnt_shadow *shadow) scsifront_command2ring() argument
1059 scsifront_read_backend_params(struct xenbus_device *dev, struct vscsifrnt_info *info) scsifront_read_backend_params() argument
/linux-4.1.27/drivers/staging/android/ion/
H A Dion_cma_heap.c50 struct ion_cma_buffer_info *info; ion_cma_allocate() local
60 info = kzalloc(sizeof(struct ion_cma_buffer_info), GFP_KERNEL); ion_cma_allocate()
61 if (!info) ion_cma_allocate()
64 info->cpu_addr = dma_alloc_coherent(dev, len, &(info->handle), ion_cma_allocate()
67 if (!info->cpu_addr) { ion_cma_allocate()
72 info->table = kmalloc(sizeof(struct sg_table), GFP_KERNEL); ion_cma_allocate()
73 if (!info->table) ion_cma_allocate()
77 (dev, info->table, info->cpu_addr, info->handle, len)) ion_cma_allocate()
80 buffer->priv_virt = info; ion_cma_allocate()
85 kfree(info->table); ion_cma_allocate()
87 dma_free_coherent(dev, len, info->cpu_addr, info->handle); ion_cma_allocate()
89 kfree(info); ion_cma_allocate()
97 struct ion_cma_buffer_info *info = buffer->priv_virt; ion_cma_free() local
101 dma_free_coherent(dev, buffer->size, info->cpu_addr, info->handle); ion_cma_free()
103 sg_free_table(info->table); ion_cma_free()
104 kfree(info->table); ion_cma_free()
105 kfree(info); ion_cma_free()
114 struct ion_cma_buffer_info *info = buffer->priv_virt; ion_cma_phys() local
117 &info->handle); ion_cma_phys()
119 *addr = info->handle; ion_cma_phys()
128 struct ion_cma_buffer_info *info = buffer->priv_virt; ion_cma_heap_map_dma() local
130 return info->table; ion_cma_heap_map_dma()
143 struct ion_cma_buffer_info *info = buffer->priv_virt; ion_cma_mmap() local
145 return dma_mmap_coherent(dev, vma, info->cpu_addr, info->handle, ion_cma_mmap()
152 struct ion_cma_buffer_info *info = buffer->priv_virt; ion_cma_map_kernel() local
154 return info->cpu_addr; ion_cma_map_kernel()
/linux-4.1.27/drivers/tty/serial/8250/
H A D8250_acorn.c44 struct serial_card_info *info; serial_card_probe() local
50 info = kzalloc(sizeof(struct serial_card_info), GFP_KERNEL); serial_card_probe()
51 if (!info) serial_card_probe()
54 info->num_ports = type->num_ports; serial_card_probe()
57 info->vaddr = ecardm_iomap(ec, type->type, 0, 0); serial_card_probe()
58 if (!info->vaddr) { serial_card_probe()
59 kfree(info); serial_card_probe()
63 ecard_set_drvdata(ec, info); serial_card_probe()
73 for (i = 0; i < info->num_ports; i ++) { serial_card_probe()
74 uart.port.membase = info->vaddr + type->offset[i]; serial_card_probe()
77 info->ports[i] = serial8250_register_8250_port(&uart); serial_card_probe()
85 struct serial_card_info *info = ecard_get_drvdata(ec); serial_card_remove() local
90 for (i = 0; i < info->num_ports; i++) serial_card_remove()
91 if (info->ports[i] > 0) serial_card_remove()
92 serial8250_unregister_port(info->ports[i]); serial_card_remove()
94 kfree(info); serial_card_remove()
/linux-4.1.27/arch/sh/boards/mach-hp6xx/
H A Dhp6xx_apm.c32 static void hp6x0_apm_get_power_status(struct apm_power_info *info) hp6x0_apm_get_power_status() argument
45 info->battery_life = percentage; hp6x0_apm_get_power_status()
48 info->units = 0; hp6x0_apm_get_power_status()
51 info->time = (2 * battery); hp6x0_apm_get_power_status()
53 info->ac_line_status = (battery > HP680_BATTERY_AC_ON) ? hp6x0_apm_get_power_status()
58 info->battery_status = APM_BATTERY_STATUS_NOT_PRESENT; hp6x0_apm_get_power_status()
59 info->battery_flag = 0x80; hp6x0_apm_get_power_status()
61 info->battery_status = APM_BATTERY_STATUS_CHARGING; hp6x0_apm_get_power_status()
62 info->battery_flag = 0x08; hp6x0_apm_get_power_status()
63 info->ac_line_status = 0x01; hp6x0_apm_get_power_status()
65 info->battery_status = APM_BATTERY_STATUS_CRITICAL; hp6x0_apm_get_power_status()
66 info->battery_flag = 0x04; hp6x0_apm_get_power_status()
68 info->battery_status = APM_BATTERY_STATUS_LOW; hp6x0_apm_get_power_status()
69 info->battery_flag = 0x02; hp6x0_apm_get_power_status()
71 info->battery_status = APM_BATTERY_STATUS_HIGH; hp6x0_apm_get_power_status()
72 info->battery_flag = 0x01; hp6x0_apm_get_power_status()
/linux-4.1.27/drivers/gpu/drm/nouveau/
H A Dnouveau_fbcon.c59 nouveau_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect) nouveau_fbcon_fillrect() argument
61 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_fillrect()
66 if (info->state != FBINFO_STATE_RUNNING) nouveau_fbcon_fillrect()
70 if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && nouveau_fbcon_fillrect()
72 if (device->info.family < NV_DEVICE_INFO_V0_TESLA) nouveau_fbcon_fillrect()
73 ret = nv04_fbcon_fillrect(info, rect); nouveau_fbcon_fillrect()
75 if (device->info.family < NV_DEVICE_INFO_V0_FERMI) nouveau_fbcon_fillrect()
76 ret = nv50_fbcon_fillrect(info, rect); nouveau_fbcon_fillrect()
78 ret = nvc0_fbcon_fillrect(info, rect); nouveau_fbcon_fillrect()
86 nouveau_fbcon_gpu_lockup(info); nouveau_fbcon_fillrect()
87 cfb_fillrect(info, rect); nouveau_fbcon_fillrect()
91 nouveau_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *image) nouveau_fbcon_copyarea() argument
93 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_copyarea()
98 if (info->state != FBINFO_STATE_RUNNING) nouveau_fbcon_copyarea()
102 if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && nouveau_fbcon_copyarea()
104 if (device->info.family < NV_DEVICE_INFO_V0_TESLA) nouveau_fbcon_copyarea()
105 ret = nv04_fbcon_copyarea(info, image); nouveau_fbcon_copyarea()
107 if (device->info.family < NV_DEVICE_INFO_V0_FERMI) nouveau_fbcon_copyarea()
108 ret = nv50_fbcon_copyarea(info, image); nouveau_fbcon_copyarea()
110 ret = nvc0_fbcon_copyarea(info, image); nouveau_fbcon_copyarea()
118 nouveau_fbcon_gpu_lockup(info); nouveau_fbcon_copyarea()
119 cfb_copyarea(info, image); nouveau_fbcon_copyarea()
123 nouveau_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) nouveau_fbcon_imageblit() argument
125 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_imageblit()
130 if (info->state != FBINFO_STATE_RUNNING) nouveau_fbcon_imageblit()
134 if (!in_interrupt() && !(info->flags & FBINFO_HWACCEL_DISABLED) && nouveau_fbcon_imageblit()
136 if (device->info.family < NV_DEVICE_INFO_V0_TESLA) nouveau_fbcon_imageblit()
137 ret = nv04_fbcon_imageblit(info, image); nouveau_fbcon_imageblit()
139 if (device->info.family < NV_DEVICE_INFO_V0_FERMI) nouveau_fbcon_imageblit()
140 ret = nv50_fbcon_imageblit(info, image); nouveau_fbcon_imageblit()
142 ret = nvc0_fbcon_imageblit(info, image); nouveau_fbcon_imageblit()
150 nouveau_fbcon_gpu_lockup(info); nouveau_fbcon_imageblit()
151 cfb_imageblit(info, image); nouveau_fbcon_imageblit()
155 nouveau_fbcon_sync(struct fb_info *info) nouveau_fbcon_sync() argument
157 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_sync()
163 info->state != FBINFO_STATE_RUNNING || nouveau_fbcon_sync()
164 info->flags & FBINFO_HWACCEL_DISABLED) nouveau_fbcon_sync()
173 nouveau_fbcon_gpu_lockup(info); nouveau_fbcon_sync()
182 nouveau_fbcon_open(struct fb_info *info, int user) nouveau_fbcon_open() argument
184 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_open()
193 nouveau_fbcon_release(struct fb_info *info, int user) nouveau_fbcon_release() argument
195 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_release()
278 struct fb_info *info = fbcon->helper.fbdev; nouveau_fbcon_accel_init() local
281 if (drm->device.info.family < NV_DEVICE_INFO_V0_TESLA) nouveau_fbcon_accel_init()
282 ret = nv04_fbcon_accel_init(info); nouveau_fbcon_accel_init()
284 if (drm->device.info.family < NV_DEVICE_INFO_V0_FERMI) nouveau_fbcon_accel_init()
285 ret = nv50_fbcon_accel_init(info); nouveau_fbcon_accel_init()
287 ret = nvc0_fbcon_accel_init(info); nouveau_fbcon_accel_init()
290 info->fbops = &nouveau_fbcon_ops; nouveau_fbcon_accel_init()
316 struct fb_info *info = fbcon->helper.fbdev; nouveau_fbcon_zfill() local
324 rect.width = info->var.xres_virtual; nouveau_fbcon_zfill()
325 rect.height = info->var.yres_virtual; nouveau_fbcon_zfill()
328 info->fbops->fb_fillrect(info, &rect); nouveau_fbcon_zfill()
340 struct fb_info *info; nouveau_fbcon_create() local
381 if (chan && device->info.family >= NV_DEVICE_INFO_V0_TESLA) { nouveau_fbcon_create()
392 info = framebuffer_alloc(0, &pdev->dev); nouveau_fbcon_create()
393 if (!info) { nouveau_fbcon_create()
397 info->skip_vt_switch = 1; nouveau_fbcon_create()
399 ret = fb_alloc_cmap(&info->cmap, 256, 0); nouveau_fbcon_create()
402 framebuffer_release(info); nouveau_fbcon_create()
406 info->par = fbcon; nouveau_fbcon_create()
415 fbcon->helper.fbdev = info; nouveau_fbcon_create()
417 strcpy(info->fix.id, "nouveaufb"); nouveau_fbcon_create()
419 info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_DISABLED; nouveau_fbcon_create()
421 info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA | nouveau_fbcon_create()
424 info->flags |= FBINFO_CAN_FORCE_OUTPUT; nouveau_fbcon_create()
425 info->fbops = &nouveau_fbcon_sw_ops; nouveau_fbcon_create()
426 info->fix.smem_start = nvbo->bo.mem.bus.base + nouveau_fbcon_create()
428 info->fix.smem_len = size; nouveau_fbcon_create()
430 info->screen_base = nvbo_kmap_obj_iovirtual(nouveau_fb->nvbo); nouveau_fbcon_create()
431 info->screen_size = size; nouveau_fbcon_create()
433 drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth); nouveau_fbcon_create()
434 drm_fb_helper_fill_var(info, &fbcon->helper, sizes->fb_width, sizes->fb_height); nouveau_fbcon_create()
436 /* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */ nouveau_fbcon_create()
449 vga_switcheroo_client_fb_set(dev->pdev, info); nouveau_fbcon_create()
477 struct fb_info *info; nouveau_fbcon_destroy() local
480 info = fbcon->helper.fbdev; nouveau_fbcon_destroy()
481 unregister_framebuffer(info); nouveau_fbcon_destroy()
482 if (info->cmap.len) nouveau_fbcon_destroy()
483 fb_dealloc_cmap(&info->cmap); nouveau_fbcon_destroy()
484 framebuffer_release(info); nouveau_fbcon_destroy()
500 void nouveau_fbcon_gpu_lockup(struct fb_info *info) nouveau_fbcon_gpu_lockup() argument
502 struct nouveau_fbdev *fbcon = info->par; nouveau_fbcon_gpu_lockup()
506 info->flags |= FBINFO_HWACCEL_DISABLED; nouveau_fbcon_gpu_lockup()
560 if (drm->device.info.ram_size <= 32 * 1024 * 1024) nouveau_fbcon_init()
563 if (drm->device.info.ram_size <= 64 * 1024 * 1024) nouveau_fbcon_init()
/linux-4.1.27/fs/dlm/
H A Dplock.c28 struct dlm_plock_info info; member in struct:plock_op
40 static inline void set_version(struct dlm_plock_info *info) set_version() argument
42 info->version[0] = DLM_PLOCK_VERSION_MAJOR; set_version()
43 info->version[1] = DLM_PLOCK_VERSION_MINOR; set_version()
44 info->version[2] = DLM_PLOCK_VERSION_PATCH; set_version()
47 static int check_version(struct dlm_plock_info *info) check_version() argument
49 if ((DLM_PLOCK_VERSION_MAJOR != info->version[0]) || check_version()
50 (DLM_PLOCK_VERSION_MINOR < info->version[1])) { check_version()
56 info->version[0], check_version()
57 info->version[1], check_version()
58 info->version[2]); check_version()
66 set_version(&op->info); send_op()
89 op->info.optype = DLM_PLOCK_OP_UNLOCK; do_unlock_close()
90 op->info.pid = fl->fl_pid; do_unlock_close()
91 op->info.fsid = ls->ls_global_id; do_unlock_close()
92 op->info.number = number; do_unlock_close()
93 op->info.start = 0; do_unlock_close()
94 op->info.end = OFFSET_MAX; do_unlock_close()
96 op->info.owner = (__u64) fl->fl_pid; do_unlock_close()
98 op->info.owner = (__u64)(long) fl->fl_owner; do_unlock_close()
100 op->info.flags |= DLM_PLOCK_FL_CLOSE; do_unlock_close()
123 op->info.optype = DLM_PLOCK_OP_LOCK; dlm_posix_lock()
124 op->info.pid = fl->fl_pid; dlm_posix_lock()
125 op->info.ex = (fl->fl_type == F_WRLCK); dlm_posix_lock()
126 op->info.wait = IS_SETLKW(cmd); dlm_posix_lock()
127 op->info.fsid = ls->ls_global_id; dlm_posix_lock()
128 op->info.number = number; dlm_posix_lock()
129 op->info.start = fl->fl_start; dlm_posix_lock()
130 op->info.end = fl->fl_end; dlm_posix_lock()
134 op->info.owner = (__u64) fl->fl_pid; dlm_posix_lock()
141 op->info.owner = (__u64)(long) fl->fl_owner; dlm_posix_lock()
172 rv = op->info.rv; dlm_posix_lock()
200 (unsigned long long)op->info.number); dlm_plock_callback()
211 if (op->info.rv) { dlm_plock_callback()
212 notify(fl, op->info.rv); dlm_plock_callback()
228 (unsigned long long)op->info.number, file, fl); dlm_plock_callback()
275 op->info.optype = DLM_PLOCK_OP_UNLOCK; dlm_posix_unlock()
276 op->info.pid = fl->fl_pid; dlm_posix_unlock()
277 op->info.fsid = ls->ls_global_id; dlm_posix_unlock()
278 op->info.number = number; dlm_posix_unlock()
279 op->info.start = fl->fl_start; dlm_posix_unlock()
280 op->info.end = fl->fl_end; dlm_posix_unlock()
282 op->info.owner = (__u64) fl->fl_pid; dlm_posix_unlock()
284 op->info.owner = (__u64)(long) fl->fl_owner; dlm_posix_unlock()
287 op->info.flags |= DLM_PLOCK_FL_CLOSE; dlm_posix_unlock()
304 rv = op->info.rv; dlm_posix_unlock()
335 op->info.optype = DLM_PLOCK_OP_GET; dlm_posix_get()
336 op->info.pid = fl->fl_pid; dlm_posix_get()
337 op->info.ex = (fl->fl_type == F_WRLCK); dlm_posix_get()
338 op->info.fsid = ls->ls_global_id; dlm_posix_get()
339 op->info.number = number; dlm_posix_get()
340 op->info.start = fl->fl_start; dlm_posix_get()
341 op->info.end = fl->fl_end; dlm_posix_get()
343 op->info.owner = (__u64) fl->fl_pid; dlm_posix_get()
345 op->info.owner = (__u64)(long) fl->fl_owner; dlm_posix_get()
358 /* info.rv from userspace is 1 for conflict, 0 for no-conflict, dlm_posix_get()
361 rv = op->info.rv; dlm_posix_get()
368 fl->fl_type = (op->info.ex) ? F_WRLCK : F_RDLCK; dlm_posix_get()
370 fl->fl_pid = op->info.pid; dlm_posix_get()
371 fl->fl_start = op->info.start; dlm_posix_get()
372 fl->fl_end = op->info.end; dlm_posix_get()
387 struct dlm_plock_info info; dev_read() local
390 if (count < sizeof(info)) dev_read()
396 if (op->info.flags & DLM_PLOCK_FL_CLOSE) dev_read()
400 memcpy(&info, &op->info, sizeof(info)); dev_read()
411 if (op->info.flags & DLM_PLOCK_FL_CLOSE) dev_read()
414 if (copy_to_user(u, &info, sizeof(info))) dev_read()
416 return sizeof(info); dev_read()
424 struct dlm_plock_info info; dev_write() local
428 if (count != sizeof(info)) dev_write()
431 if (copy_from_user(&info, u, sizeof(info))) dev_write()
434 if (check_version(&info)) dev_write()
439 if (op->info.fsid == info.fsid && dev_write()
440 op->info.number == info.number && dev_write()
441 op->info.owner == info.owner) { dev_write()
444 memcpy(&op->info, &info, sizeof(info)); dev_write()
461 log_print("dev_write no op %x %llx", info.fsid, dev_write()
462 (unsigned long long)info.number); dev_write()
/linux-4.1.27/kernel/
H A Dup.c10 int smp_call_function_single(int cpu, void (*func) (void *info), void *info, smp_call_function_single() argument
18 func(info); smp_call_function_single()
30 csd->func(csd->info); smp_call_function_single_async()
36 int on_each_cpu(smp_call_func_t func, void *info, int wait) on_each_cpu() argument
41 func(info); on_each_cpu()
54 smp_call_func_t func, void *info, bool wait) on_each_cpu_mask()
60 func(info); on_each_cpu_mask()
70 void on_each_cpu_cond(bool (*cond_func)(int cpu, void *info), on_each_cpu_cond() argument
71 smp_call_func_t func, void *info, bool wait, on_each_cpu_cond()
77 if (cond_func(0, info)) { on_each_cpu_cond()
79 func(info); on_each_cpu_cond()
53 on_each_cpu_mask(const struct cpumask *mask, smp_call_func_t func, void *info, bool wait) on_each_cpu_mask() argument
/linux-4.1.27/drivers/video/fbdev/aty/
H A Dmach64_cursor.c67 static int atyfb_cursor(struct fb_info *info, struct fb_cursor *cursor) atyfb_cursor() argument
69 struct atyfb_par *par = (struct atyfb_par *) info->par; atyfb_cursor()
90 x = cursor->image.dx - cursor->hot.x - info->var.xoffset; atyfb_cursor()
98 y = cursor->image.dy - cursor->hot.y - info->var.yoffset; atyfb_cursor()
117 aty_st_le32(CUR_OFFSET, (info->fix.smem_len >> 3) + (yoff << 1), par); atyfb_cursor()
130 fg = ((info->cmap.red[fg_idx] & 0xff) << 24) | atyfb_cursor()
131 ((info->cmap.green[fg_idx] & 0xff) << 16) | atyfb_cursor()
132 ((info->cmap.blue[fg_idx] & 0xff) << 8) | 0xff; atyfb_cursor()
134 bg = ((info->cmap.red[bg_idx] & 0xff) << 24) | atyfb_cursor()
135 ((info->cmap.green[bg_idx] & 0xff) << 16) | atyfb_cursor()
136 ((info->cmap.blue[bg_idx] & 0xff) << 8); atyfb_cursor()
146 u8 __iomem *dst = (u8 __iomem *)info->sprite.addr; atyfb_cursor()
149 unsigned int align = info->sprite.scan_align; atyfb_cursor()
196 int aty_init_cursor(struct fb_info *info) aty_init_cursor() argument
200 info->fix.smem_len -= PAGE_SIZE; aty_init_cursor()
203 addr = (unsigned long) info->screen_base - 0x800000 + info->fix.smem_len; aty_init_cursor()
204 info->sprite.addr = (u8 *) addr; aty_init_cursor()
207 addr = info->fix.smem_start - 0x800000 + info->fix.smem_len; aty_init_cursor()
208 info->sprite.addr = (u8 *) ioremap(addr, 1024); aty_init_cursor()
210 addr = (unsigned long) info->screen_base + info->fix.smem_len; aty_init_cursor()
211 info->sprite.addr = (u8 *) addr; aty_init_cursor()
214 if (!info->sprite.addr) aty_init_cursor()
216 info->sprite.size = PAGE_SIZE; aty_init_cursor()
217 info->sprite.scan_align = 16; /* Scratch pad 64 bytes wide */ aty_init_cursor()
218 info->sprite.buf_align = 16; /* and 64 lines tall. */ aty_init_cursor()
219 info->sprite.flags = FB_PIXMAP_IO; aty_init_cursor()
221 info->fbops->fb_cursor = atyfb_cursor; aty_init_cursor()
/linux-4.1.27/arch/powerpc/platforms/cell/
H A Dcpufreq_spudemand.c43 static int calc_freq(struct spu_gov_info_struct *info) calc_freq() argument
48 cpu = info->policy->cpu; calc_freq()
51 CALC_LOAD(info->busy_spus, EXP, busy_spus * FIXED_1); calc_freq()
52 pr_debug("cpu %d: busy_spus=%d, info->busy_spus=%ld\n", calc_freq()
53 cpu, busy_spus, info->busy_spus); calc_freq()
55 return info->policy->max * info->busy_spus / FIXED_1; calc_freq()
60 struct spu_gov_info_struct *info; spu_gov_work() local
64 info = container_of(work, struct spu_gov_info_struct, work.work); spu_gov_work()
66 /* after cancel_delayed_work_sync we unset info->policy */ spu_gov_work()
67 BUG_ON(info->policy == NULL); spu_gov_work()
69 target_freq = calc_freq(info); spu_gov_work()
70 __cpufreq_driver_target(info->policy, target_freq, CPUFREQ_RELATION_H); spu_gov_work()
72 delay = usecs_to_jiffies(info->poll_int); spu_gov_work()
73 schedule_delayed_work_on(info->policy->cpu, &info->work, delay); spu_gov_work()
76 static void spu_gov_init_work(struct spu_gov_info_struct *info) spu_gov_init_work() argument
78 int delay = usecs_to_jiffies(info->poll_int); spu_gov_init_work()
79 INIT_DEFERRABLE_WORK(&info->work, spu_gov_work); spu_gov_init_work()
80 schedule_delayed_work_on(info->policy->cpu, &info->work, delay); spu_gov_init_work()
83 static void spu_gov_cancel_work(struct spu_gov_info_struct *info) spu_gov_cancel_work() argument
85 cancel_delayed_work_sync(&info->work); spu_gov_cancel_work()
91 struct spu_gov_info_struct *info, *affected_info; spu_gov_govern() local
95 info = &per_cpu(spu_gov_info, cpu); spu_gov_govern()
117 info->poll_int = POLL_TIME; spu_gov_govern()
120 spu_gov_init_work(info); spu_gov_govern()
126 spu_gov_cancel_work(info); spu_gov_govern()
130 info = &per_cpu(spu_gov_info, i); spu_gov_govern()
131 info->policy = NULL; spu_gov_govern()
/linux-4.1.27/drivers/video/fbdev/omap2/dss/
H A Doverlay-sysfs.c118 struct omap_overlay_info info; overlay_input_size_show() local
120 ovl->get_overlay_info(ovl, &info); overlay_input_size_show()
123 info.width, info.height); overlay_input_size_show()
128 struct omap_overlay_info info; overlay_screen_width_show() local
130 ovl->get_overlay_info(ovl, &info); overlay_screen_width_show()
132 return snprintf(buf, PAGE_SIZE, "%d\n", info.screen_width); overlay_screen_width_show()
137 struct omap_overlay_info info; overlay_position_show() local
139 ovl->get_overlay_info(ovl, &info); overlay_position_show()
142 info.pos_x, info.pos_y); overlay_position_show()
150 struct omap_overlay_info info; overlay_position_store() local
152 ovl->get_overlay_info(ovl, &info); overlay_position_store()
154 info.pos_x = simple_strtoul(buf, &last, 10); overlay_position_store()
159 info.pos_y = simple_strtoul(last, &last, 10); overlay_position_store()
161 r = ovl->set_overlay_info(ovl, &info); overlay_position_store()
176 struct omap_overlay_info info; overlay_output_size_show() local
178 ovl->get_overlay_info(ovl, &info); overlay_output_size_show()
181 info.out_width, info.out_height); overlay_output_size_show()
189 struct omap_overlay_info info; overlay_output_size_store() local
191 ovl->get_overlay_info(ovl, &info); overlay_output_size_store()
193 info.out_width = simple_strtoul(buf, &last, 10); overlay_output_size_store()
198 info.out_height = simple_strtoul(last, &last, 10); overlay_output_size_store()
200 r = ovl->set_overlay_info(ovl, &info); overlay_output_size_store()
241 struct omap_overlay_info info; overlay_global_alpha_show() local
243 ovl->get_overlay_info(ovl, &info); overlay_global_alpha_show()
246 info.global_alpha); overlay_global_alpha_show()
254 struct omap_overlay_info info; overlay_global_alpha_store() local
263 ovl->get_overlay_info(ovl, &info); overlay_global_alpha_store()
265 info.global_alpha = alpha; overlay_global_alpha_store()
267 r = ovl->set_overlay_info(ovl, &info); overlay_global_alpha_store()
283 struct omap_overlay_info info; overlay_pre_mult_alpha_show() local
285 ovl->get_overlay_info(ovl, &info); overlay_pre_mult_alpha_show()
288 info.pre_mult_alpha); overlay_pre_mult_alpha_show()
296 struct omap_overlay_info info; overlay_pre_mult_alpha_store() local
305 ovl->get_overlay_info(ovl, &info); overlay_pre_mult_alpha_store()
307 info.pre_mult_alpha = alpha; overlay_pre_mult_alpha_store()
309 r = ovl->set_overlay_info(ovl, &info); overlay_pre_mult_alpha_store()
324 struct omap_overlay_info info; overlay_zorder_show() local
326 ovl->get_overlay_info(ovl, &info); overlay_zorder_show()
328 return snprintf(buf, PAGE_SIZE, "%d\n", info.zorder); overlay_zorder_show()
336 struct omap_overlay_info info; overlay_zorder_store() local
345 ovl->get_overlay_info(ovl, &info); overlay_zorder_store()
347 info.zorder = zorder; overlay_zorder_store()
349 r = ovl->set_overlay_info(ovl, &info); overlay_zorder_store()
H A Dmanager-sysfs.c130 struct omap_overlay_manager_info info; manager_default_color_show() local
132 mgr->get_manager_info(mgr, &info); manager_default_color_show()
134 return snprintf(buf, PAGE_SIZE, "%#x\n", info.default_color); manager_default_color_show()
140 struct omap_overlay_manager_info info; manager_default_color_store() local
148 mgr->get_manager_info(mgr, &info); manager_default_color_store()
150 info.default_color = color; manager_default_color_store()
152 r = mgr->set_manager_info(mgr, &info); manager_default_color_store()
172 struct omap_overlay_manager_info info; manager_trans_key_type_show() local
174 mgr->get_manager_info(mgr, &info); manager_trans_key_type_show()
176 key_type = info.trans_key_type; manager_trans_key_type_show()
186 struct omap_overlay_manager_info info; manager_trans_key_type_store() local
198 mgr->get_manager_info(mgr, &info); manager_trans_key_type_store()
200 info.trans_key_type = key_type; manager_trans_key_type_store()
202 r = mgr->set_manager_info(mgr, &info); manager_trans_key_type_store()
216 struct omap_overlay_manager_info info; manager_trans_key_value_show() local
218 mgr->get_manager_info(mgr, &info); manager_trans_key_value_show()
220 return snprintf(buf, PAGE_SIZE, "%#x\n", info.trans_key); manager_trans_key_value_show()
226 struct omap_overlay_manager_info info; manager_trans_key_value_store() local
234 mgr->get_manager_info(mgr, &info); manager_trans_key_value_store()
236 info.trans_key = key_value; manager_trans_key_value_store()
238 r = mgr->set_manager_info(mgr, &info); manager_trans_key_value_store()
252 struct omap_overlay_manager_info info; manager_trans_key_enabled_show() local
254 mgr->get_manager_info(mgr, &info); manager_trans_key_enabled_show()
256 return snprintf(buf, PAGE_SIZE, "%d\n", info.trans_enabled); manager_trans_key_enabled_show()
262 struct omap_overlay_manager_info info; manager_trans_key_enabled_store() local
270 mgr->get_manager_info(mgr, &info); manager_trans_key_enabled_store()
272 info.trans_enabled = enable; manager_trans_key_enabled_store()
274 r = mgr->set_manager_info(mgr, &info); manager_trans_key_enabled_store()
288 struct omap_overlay_manager_info info; manager_alpha_blending_enabled_show() local
293 mgr->get_manager_info(mgr, &info); manager_alpha_blending_enabled_show()
296 info.partial_alpha_enabled); manager_alpha_blending_enabled_show()
303 struct omap_overlay_manager_info info; manager_alpha_blending_enabled_store() local
314 mgr->get_manager_info(mgr, &info); manager_alpha_blending_enabled_store()
316 info.partial_alpha_enabled = enable; manager_alpha_blending_enabled_store()
318 r = mgr->set_manager_info(mgr, &info); manager_alpha_blending_enabled_store()
332 struct omap_overlay_manager_info info; manager_cpr_enable_show() local
334 mgr->get_manager_info(mgr, &info); manager_cpr_enable_show()
336 return snprintf(buf, PAGE_SIZE, "%d\n", info.cpr_enable); manager_cpr_enable_show()
342 struct omap_overlay_manager_info info; manager_cpr_enable_store() local
353 mgr->get_manager_info(mgr, &info); manager_cpr_enable_store()
355 if (info.cpr_enable == enable) manager_cpr_enable_store()
358 info.cpr_enable = enable; manager_cpr_enable_store()
360 r = mgr->set_manager_info(mgr, &info); manager_cpr_enable_store()
374 struct omap_overlay_manager_info info; manager_cpr_coef_show() local
376 mgr->get_manager_info(mgr, &info); manager_cpr_coef_show()
380 info.cpr_coefs.rr, manager_cpr_coef_show()
381 info.cpr_coefs.rg, manager_cpr_coef_show()
382 info.cpr_coefs.rb, manager_cpr_coef_show()
383 info.cpr_coefs.gr, manager_cpr_coef_show()
384 info.cpr_coefs.gg, manager_cpr_coef_show()
385 info.cpr_coefs.gb, manager_cpr_coef_show()
386 info.cpr_coefs.br, manager_cpr_coef_show()
387 info.cpr_coefs.bg, manager_cpr_coef_show()
388 info.cpr_coefs.bb); manager_cpr_coef_show()
394 struct omap_overlay_manager_info info; manager_cpr_coef_store() local
417 mgr->get_manager_info(mgr, &info); manager_cpr_coef_store()
419 info.cpr_coefs = coefs; manager_cpr_coef_store()
421 r = mgr->set_manager_info(mgr, &info); manager_cpr_coef_store()
H A Doverlay.c114 const struct omap_overlay_info *info) dss_ovl_simple_check()
117 if (info->out_width != 0 && info->width != info->out_width) { dss_ovl_simple_check()
123 if (info->out_height != 0 && info->height != info->out_height) { dss_ovl_simple_check()
130 if ((ovl->supported_modes & info->color_mode) == 0) { dss_ovl_simple_check()
132 ovl->id, info->color_mode); dss_ovl_simple_check()
136 if (info->zorder >= omap_dss_get_num_overlays()) { dss_ovl_simple_check()
137 DSSERR("check_overlay: zorder %d too high\n", info->zorder); dss_ovl_simple_check()
141 if (dss_feat_rotation_type_supported(info->rotation_type) == 0) { dss_ovl_simple_check()
143 info->rotation_type); dss_ovl_simple_check()
150 int dss_ovl_check(struct omap_overlay *ovl, struct omap_overlay_info *info, dss_ovl_check() argument
160 outw = info->width; dss_ovl_check()
161 outh = info->height; dss_ovl_check()
163 if (info->out_width == 0) dss_ovl_check()
164 outw = info->width; dss_ovl_check()
166 outw = info->out_width; dss_ovl_check()
168 if (info->out_height == 0) dss_ovl_check()
169 outh = info->height; dss_ovl_check()
171 outh = info->out_height; dss_ovl_check()
174 if (dw < info->pos_x + outw) { dss_ovl_check()
177 ovl->id, info->pos_x, outw, dw); dss_ovl_check()
181 if (dh < info->pos_y + outh) { dss_ovl_check()
184 ovl->id, info->pos_y, outh, dh); dss_ovl_check()
113 dss_ovl_simple_check(struct omap_overlay *ovl, const struct omap_overlay_info *info) dss_ovl_simple_check() argument
/linux-4.1.27/arch/powerpc/lib/
H A Drheap.c45 static int grow(rh_info_t * info, int max_blocks) grow() argument
52 if (max_blocks <= info->max_blocks) grow()
55 new_blocks = max_blocks - info->max_blocks; grow()
61 if (info->max_blocks > 0) { grow()
64 memcpy(block, info->block, grow()
65 sizeof(rh_block_t) * info->max_blocks); grow()
67 delta = (char *)block - (char *)info->block; grow()
70 blks = (unsigned long)info->block; grow()
71 blke = (unsigned long)(info->block + info->max_blocks); grow()
73 for (i = 0, blk = block; i < info->max_blocks; i++, blk++) grow()
76 fixup(blks, blke, delta, &info->empty_list); grow()
77 fixup(blks, blke, delta, &info->free_list); grow()
78 fixup(blks, blke, delta, &info->taken_list); grow()
81 if ((info->flags & RHIF_STATIC_BLOCK) == 0) grow()
82 kfree(info->block); grow()
85 info->block = block; grow()
86 info->empty_slots += new_blocks; grow()
87 info->max_blocks = max_blocks; grow()
88 info->flags &= ~RHIF_STATIC_BLOCK; grow()
91 blk = block + info->max_blocks - new_blocks; grow()
93 list_add(&blk->list, &info->empty_list); grow()
103 static int assure_empty(rh_info_t * info, int slots) assure_empty() argument
112 if (info->empty_slots >= slots) assure_empty()
116 max_blocks = ((info->max_blocks + slots) + 15) & ~15; assure_empty()
118 return grow(info, max_blocks); assure_empty()
121 static rh_block_t *get_slot(rh_info_t * info) get_slot() argument
127 if (info->empty_slots == 0) { get_slot()
133 blk = list_entry(info->empty_list.next, rh_block_t, list); get_slot()
135 info->empty_slots--; get_slot()
145 static inline void release_slot(rh_info_t * info, rh_block_t * blk) release_slot() argument
147 list_add(&blk->list, &info->empty_list); release_slot()
148 info->empty_slots++; release_slot()
151 static void attach_free_block(rh_info_t * info, rh_block_t * blkn) attach_free_block() argument
172 list_for_each(l, &info->free_list) { attach_free_block()
205 list_add(&blkn->list, &info->free_list); attach_free_block()
211 release_slot(info, blkn); attach_free_block()
229 release_slot(info, after); attach_free_block()
232 static void attach_taken_block(rh_info_t * info, rh_block_t * blkn) attach_taken_block() argument
238 list_for_each(l, &info->taken_list) { attach_taken_block()
246 list_add_tail(&blkn->list, &info->taken_list); attach_taken_block()
255 rh_info_t *info; rh_create() local
261 info = kmalloc(sizeof(*info), GFP_ATOMIC); rh_create()
262 if (info == NULL) rh_create()
265 info->alignment = alignment; rh_create()
268 info->block = NULL; rh_create()
269 info->max_blocks = 0; rh_create()
270 info->empty_slots = 0; rh_create()
271 info->flags = 0; rh_create()
273 INIT_LIST_HEAD(&info->empty_list); rh_create()
274 INIT_LIST_HEAD(&info->free_list); rh_create()
275 INIT_LIST_HEAD(&info->taken_list); rh_create()
277 return info; rh_create()
285 void rh_destroy(rh_info_t * info) rh_destroy() argument
287 if ((info->flags & RHIF_STATIC_BLOCK) == 0) rh_destroy()
288 kfree(info->block); rh_destroy()
290 if ((info->flags & RHIF_STATIC_INFO) == 0) rh_destroy()
291 kfree(info); rh_destroy()
296 * Initialize in place a remote heap info block. This is needed to support
300 void rh_init(rh_info_t * info, unsigned int alignment, int max_blocks, rh_init() argument
310 info->alignment = alignment; rh_init()
313 info->block = block; rh_init()
314 info->max_blocks = max_blocks; rh_init()
315 info->empty_slots = max_blocks; rh_init()
316 info->flags = RHIF_STATIC_INFO | RHIF_STATIC_BLOCK; rh_init()
318 INIT_LIST_HEAD(&info->empty_list); rh_init()
319 INIT_LIST_HEAD(&info->free_list); rh_init()
320 INIT_LIST_HEAD(&info->taken_list); rh_init()
324 list_add(&blk->list, &info->empty_list); rh_init()
329 int rh_attach_region(rh_info_t * info, unsigned long start, int size) rh_attach_region() argument
338 m = info->alignment - 1; rh_attach_region()
354 r = assure_empty(info, 1); rh_attach_region()
358 blk = get_slot(info); rh_attach_region()
363 attach_free_block(info, blk); rh_attach_region()
370 unsigned long rh_detach_region(rh_info_t * info, unsigned long start, int size) rh_detach_region() argument
383 m = info->alignment - 1; rh_detach_region()
391 if (assure_empty(info, 1) < 0) rh_detach_region()
395 list_for_each(l, &info->free_list) { rh_detach_region()
412 release_slot(info, blk); rh_detach_region()
427 newblk = get_slot(info); rh_detach_region()
442 unsigned long rh_alloc_align(rh_info_t * info, int size, int alignment, const char *owner) rh_alloc_align() argument
454 size = (size + (info->alignment - 1)) & ~(info->alignment - 1); rh_alloc_align()
456 if (assure_empty(info, 2) < 0) rh_alloc_align()
460 list_for_each(l, &info->free_list) { rh_alloc_align()
485 spblk = get_slot(info); rh_alloc_align()
491 newblk = get_slot(info); rh_alloc_align()
502 release_slot(info, blk); rh_alloc_align()
507 attach_taken_block(info, newblk); rh_alloc_align()
517 unsigned long rh_alloc(rh_info_t * info, int size, const char *owner) rh_alloc() argument
519 return rh_alloc_align(info, size, info->alignment, owner); rh_alloc()
527 unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, const char *owner) rh_alloc_fixed() argument
540 m = info->alignment - 1; rh_alloc_fixed()
548 if (assure_empty(info, 2) < 0) rh_alloc_fixed()
552 list_for_each(l, &info->free_list) { rh_alloc_fixed()
572 attach_taken_block(info, blk); rh_alloc_fixed()
589 newblk2 = get_slot(info); rh_alloc_fixed()
596 newblk1 = get_slot(info); rh_alloc_fixed()
602 attach_taken_block(info, newblk1); rh_alloc_fixed()
612 int rh_free(rh_info_t * info, unsigned long start) rh_free() argument
620 list_for_each(l, &info->taken_list) { rh_free()
635 attach_free_block(info, blk); rh_free()
641 int rh_get_stats(rh_info_t * info, int what, int max_stats, rh_stats_t * stats) rh_get_stats() argument
651 h = &info->free_list; rh_get_stats()
655 h = &info->taken_list; rh_get_stats()
679 int rh_set_owner(rh_info_t * info, unsigned long start, const char *owner) rh_set_owner() argument
687 list_for_each(l, &info->taken_list) { rh_set_owner()
704 void rh_dump(rh_info_t * info) rh_dump() argument
713 "info @0x%p (%d slots empty / %d max)\n", rh_dump()
714 info, info->empty_slots, info->max_blocks); rh_dump()
717 nr = rh_get_stats(info, RHGS_FREE, maxnr, st); rh_dump()
728 nr = rh_get_stats(info, RHGS_TAKEN, maxnr, st); rh_dump()
740 void rh_dump_blk(rh_info_t * info, rh_block_t * blk) rh_dump_blk() argument
/linux-4.1.27/arch/x86/kernel/
H A Dtls.c30 static bool tls_desc_okay(const struct user_desc *info) tls_desc_okay() argument
53 if (LDT_empty(info) || LDT_zero(info)) tls_desc_okay()
60 if (!info->seg_32bit) tls_desc_okay()
64 if (info->contents > 1) tls_desc_okay()
76 if (info->seg_not_present) tls_desc_okay()
83 const struct user_desc *info, int n) set_tls_desc()
95 if (LDT_empty(info) || LDT_zero(info)) set_tls_desc()
98 fill_ldt(desc, info); set_tls_desc()
99 ++info; set_tls_desc()
116 struct user_desc info; do_set_thread_area() local
118 if (copy_from_user(&info, u_info, sizeof(info))) do_set_thread_area()
121 if (!tls_desc_okay(&info)) do_set_thread_area()
125 idx = info.entry_number; do_set_thread_area()
142 set_tls_desc(p, idx, &info, 1); do_set_thread_area()
157 static void fill_user_desc(struct user_desc *info, int idx, fill_user_desc() argument
161 memset(info, 0, sizeof(*info)); fill_user_desc()
162 info->entry_number = idx; fill_user_desc()
163 info->base_addr = get_desc_base(desc); fill_user_desc()
164 info->limit = get_desc_limit(desc); fill_user_desc()
165 info->seg_32bit = desc->d; fill_user_desc()
166 info->contents = desc->type >> 2; fill_user_desc()
167 info->read_exec_only = !(desc->type & 2); fill_user_desc()
168 info->limit_in_pages = desc->g; fill_user_desc()
169 info->seg_not_present = !desc->p; fill_user_desc()
170 info->useable = desc->avl; fill_user_desc()
172 info->lm = desc->l; fill_user_desc()
179 struct user_desc info; do_get_thread_area() local
187 fill_user_desc(&info, idx, do_get_thread_area()
190 if (copy_to_user(u_info, &info, sizeof(info))) do_get_thread_area()
227 struct user_desc *info = kbuf; regset_tls_get() local
229 fill_user_desc(info++, GDT_ENTRY_TLS_MIN + pos++, regset_tls_get()
234 struct user_desc info; regset_tls_get() local
235 fill_user_desc(&info, GDT_ENTRY_TLS_MIN + pos++, tls++); regset_tls_get()
236 if (__copy_to_user(u_info++, &info, sizeof(info))) regset_tls_get()
249 const struct user_desc *info; regset_tls_set() local
258 info = kbuf; regset_tls_set()
262 info = infobuf; regset_tls_set()
265 if (!tls_desc_okay(info + i)) regset_tls_set()
270 info, count / sizeof(struct user_desc)); regset_tls_set()
82 set_tls_desc(struct task_struct *p, int idx, const struct user_desc *info, int n) set_tls_desc() argument
/linux-4.1.27/arch/sh/mm/
H A Dmmap.c39 struct vm_unmapped_area_info info; arch_get_unmapped_area() local
70 info.flags = 0; arch_get_unmapped_area()
71 info.length = len; arch_get_unmapped_area()
72 info.low_limit = TASK_UNMAPPED_BASE; arch_get_unmapped_area()
73 info.high_limit = TASK_SIZE; arch_get_unmapped_area()
74 info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0; arch_get_unmapped_area()
75 info.align_offset = pgoff << PAGE_SHIFT; arch_get_unmapped_area()
76 return vm_unmapped_area(&info); arch_get_unmapped_area()
88 struct vm_unmapped_area_info info; arch_get_unmapped_area_topdown() local
120 info.flags = VM_UNMAPPED_AREA_TOPDOWN; arch_get_unmapped_area_topdown()
121 info.length = len; arch_get_unmapped_area_topdown()
122 info.low_limit = PAGE_SIZE; arch_get_unmapped_area_topdown()
123 info.high_limit = mm->mmap_base; arch_get_unmapped_area_topdown()
124 info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0; arch_get_unmapped_area_topdown()
125 info.align_offset = pgoff << PAGE_SHIFT; arch_get_unmapped_area_topdown()
126 addr = vm_unmapped_area(&info); arch_get_unmapped_area_topdown()
136 info.flags = 0; arch_get_unmapped_area_topdown()
137 info.low_limit = TASK_UNMAPPED_BASE; arch_get_unmapped_area_topdown()
138 info.high_limit = TASK_SIZE; arch_get_unmapped_area_topdown()
139 addr = vm_unmapped_area(&info); arch_get_unmapped_area_topdown()
/linux-4.1.27/drivers/acpi/acpica/
H A Dnseval.c56 struct acpi_evaluate_info *info);
62 * PARAMETERS: info - Evaluation info block, contains:
85 acpi_status acpi_ns_evaluate(struct acpi_evaluate_info *info) acpi_ns_evaluate() argument
91 if (!info) { acpi_ns_evaluate()
95 if (!info->node) { acpi_ns_evaluate()
105 acpi_ns_get_node(info->prefix_node, info->relative_pathname, acpi_ns_evaluate()
106 ACPI_NS_NO_UPSEARCH, &info->node); acpi_ns_evaluate()
116 if (acpi_ns_get_type(info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) { acpi_ns_evaluate()
117 info->node = acpi_ns_evaluate()
119 info->node->object); acpi_ns_evaluate()
122 /* Complete the info block initialization */ acpi_ns_evaluate()
124 info->return_object = NULL; acpi_ns_evaluate()
125 info->node_flags = info->node->flags; acpi_ns_evaluate()
126 info->obj_desc = acpi_ns_get_attached_object(info->node); acpi_ns_evaluate()
129 info->relative_pathname, info->node, acpi_ns_evaluate()
130 acpi_ns_get_attached_object(info->node))); acpi_ns_evaluate()
132 /* Get info if we have a predefined name (_HID, etc.) */ acpi_ns_evaluate()
134 info->predefined = acpi_ns_evaluate()
135 acpi_ut_match_predefined_method(info->node->name.ascii); acpi_ns_evaluate()
139 info->full_pathname = acpi_ns_get_external_pathname(info->node); acpi_ns_evaluate()
140 if (!info->full_pathname) { acpi_ns_evaluate()
146 info->param_count = 0; acpi_ns_evaluate()
147 if (info->parameters) { acpi_ns_evaluate()
148 while (info->parameters[info->param_count]) { acpi_ns_evaluate()
149 info->param_count++; acpi_ns_evaluate()
154 if (info->param_count > ACPI_METHOD_NUM_ARGS) { acpi_ns_evaluate()
155 ACPI_WARN_PREDEFINED((AE_INFO, info->full_pathname, acpi_ns_evaluate()
158 info->param_count, acpi_ns_evaluate()
161 info->param_count = ACPI_METHOD_NUM_ARGS; acpi_ns_evaluate()
169 acpi_ns_check_acpi_compliance(info->full_pathname, info->node, acpi_ns_evaluate()
170 info->predefined); acpi_ns_evaluate()
176 acpi_ns_check_argument_count(info->full_pathname, info->node, acpi_ns_evaluate()
177 info->param_count, info->predefined); acpi_ns_evaluate()
181 acpi_ns_check_argument_types(info); acpi_ns_evaluate()
190 switch (acpi_ns_get_type(info->node)) { acpi_ns_evaluate()
203 info->full_pathname, acpi_ns_evaluate()
204 acpi_ut_get_type_name(info->node->type))); acpi_ns_evaluate()
216 if (!info->obj_desc) { acpi_ns_evaluate()
219 info->full_pathname)); acpi_ns_evaluate()
226 info->full_pathname, acpi_ns_evaluate()
227 info->obj_desc->method.aml_start + 1, acpi_ns_evaluate()
228 info->obj_desc->method.aml_length - 1)); acpi_ns_evaluate()
239 status = acpi_ps_execute_method(info); acpi_ns_evaluate()
268 info->return_object = acpi_ns_evaluate()
269 ACPI_CAST_PTR(union acpi_operand_object, info->node); acpi_ns_evaluate()
274 &info->return_object), NULL); acpi_ns_evaluate()
282 info->return_object, acpi_ns_evaluate()
283 acpi_ut_get_object_type_name(info-> acpi_ns_evaluate()
294 (void)acpi_ns_check_return_value(info->node, info, info->param_count, acpi_ns_evaluate()
295 status, &info->return_object); acpi_ns_evaluate()
303 if (info->flags & ACPI_IGNORE_RETURN_VALUE) { acpi_ns_evaluate()
304 acpi_ut_remove_reference(info->return_object); acpi_ns_evaluate()
305 info->return_object = NULL; acpi_ns_evaluate()
315 info->relative_pathname)); acpi_ns_evaluate()
322 ACPI_FREE(info->full_pathname); acpi_ns_evaluate()
323 info->full_pathname = NULL; acpi_ns_evaluate()
345 struct acpi_evaluate_info *info; acpi_ns_exec_module_code_list() local
359 info = ACPI_ALLOCATE(sizeof(struct acpi_evaluate_info)); acpi_ns_exec_module_code_list()
360 if (!info) { acpi_ns_exec_module_code_list()
373 acpi_ns_exec_module_code(prev, info); acpi_ns_exec_module_code_list()
385 ACPI_FREE(info); acpi_ns_exec_module_code_list()
395 * info - Info block for method evaluation
408 struct acpi_evaluate_info *info) acpi_ns_exec_module_code()
443 ACPI_MEMSET(info, 0, sizeof(struct acpi_evaluate_info)); acpi_ns_exec_module_code()
444 info->prefix_node = parent_node; acpi_ns_exec_module_code()
466 status = acpi_ns_evaluate(info); acpi_ns_exec_module_code()
473 if (info->return_object) { acpi_ns_exec_module_code()
474 acpi_ut_remove_reference(info->return_object); acpi_ns_exec_module_code()
407 acpi_ns_exec_module_code(union acpi_operand_object *method_obj, struct acpi_evaluate_info *info) acpi_ns_exec_module_code() argument
H A Dpsxface.c55 static void acpi_ps_start_trace(struct acpi_evaluate_info *info);
57 static void acpi_ps_stop_trace(struct acpi_evaluate_info *info);
60 acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action);
108 * PARAMETERS: info - Method info struct
116 static void acpi_ps_start_trace(struct acpi_evaluate_info *info) acpi_ps_start_trace() argument
128 (acpi_gbl_trace_method_name != info->node->name.integer)) { acpi_ps_start_trace()
153 * PARAMETERS: info - Method info struct
161 static void acpi_ps_stop_trace(struct acpi_evaluate_info *info) acpi_ps_stop_trace() argument
173 (acpi_gbl_trace_method_name != info->node->name.integer)) { acpi_ps_stop_trace()
196 * PARAMETERS: info - Method info block, contains:
215 acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info) acpi_ps_execute_method() argument
229 if (!info || !info->node) { acpi_ps_execute_method()
236 acpi_ds_begin_method_execution(info->node, info->obj_desc, NULL); acpi_ps_execute_method()
244 acpi_ps_update_parameter_list(info, REF_INCREMENT); acpi_ps_execute_method()
248 acpi_ps_start_trace(info); acpi_ps_execute_method()
255 info->node->name.ascii, info->node, info->obj_desc)); acpi_ps_execute_method()
267 info->pass_number = ACPI_IMODE_EXECUTE; acpi_ps_execute_method()
269 acpi_ds_create_walk_state(info->obj_desc->method.owner_id, NULL, acpi_ps_execute_method()
276 status = acpi_ds_init_aml_walk(walk_state, op, info->node, acpi_ps_execute_method()
277 info->obj_desc->method.aml_start, acpi_ps_execute_method()
278 info->obj_desc->method.aml_length, info, acpi_ps_execute_method()
279 info->pass_number); acpi_ps_execute_method()
285 if (info->obj_desc->method.info_flags & ACPI_METHOD_MODULE_LEVEL) { acpi_ps_execute_method()
291 if (info->obj_desc->method.info_flags & ACPI_METHOD_INTERNAL_ONLY) { acpi_ps_execute_method()
293 info->obj_desc->method.dispatch.implementation(walk_state); acpi_ps_execute_method()
294 info->return_object = walk_state->return_desc; acpi_ps_execute_method()
331 acpi_ps_stop_trace(info); acpi_ps_execute_method()
335 acpi_ps_update_parameter_list(info, REF_DECREMENT); acpi_ps_execute_method()
347 if (info->return_object) { acpi_ps_execute_method()
349 info->return_object)); acpi_ps_execute_method()
350 ACPI_DUMP_STACK_ENTRY(info->return_object); acpi_ps_execute_method()
362 * PARAMETERS: info - See struct acpi_evaluate_info
373 acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action) acpi_ps_update_parameter_list() argument
377 if (info->parameters) { acpi_ps_update_parameter_list()
381 for (i = 0; info->parameters[i]; i++) { acpi_ps_update_parameter_list()
385 (void)acpi_ut_update_object_reference(info-> acpi_ps_update_parameter_list()
/linux-4.1.27/drivers/auxdisplay/
H A Dcfag12864bfb.c67 static int cfag12864bfb_mmap(struct fb_info *info, struct vm_area_struct *vma) cfag12864bfb_mmap() argument
86 struct fb_info *info = framebuffer_alloc(0, &device->dev); cfag12864bfb_probe() local
88 if (!info) cfag12864bfb_probe()
91 info->screen_base = (char __iomem *) cfag12864b_buffer; cfag12864bfb_probe()
92 info->screen_size = CFAG12864B_SIZE; cfag12864bfb_probe()
93 info->fbops = &cfag12864bfb_ops; cfag12864bfb_probe()
94 info->fix = cfag12864bfb_fix; cfag12864bfb_probe()
95 info->var = cfag12864bfb_var; cfag12864bfb_probe()
96 info->pseudo_palette = NULL; cfag12864bfb_probe()
97 info->par = NULL; cfag12864bfb_probe()
98 info->flags = FBINFO_FLAG_DEFAULT; cfag12864bfb_probe()
100 if (register_framebuffer(info) < 0) cfag12864bfb_probe()
103 platform_set_drvdata(device, info); cfag12864bfb_probe()
105 fb_info(info, "%s frame buffer device\n", info->fix.id); cfag12864bfb_probe()
110 framebuffer_release(info); cfag12864bfb_probe()
118 struct fb_info *info = platform_get_drvdata(device); cfag12864bfb_remove() local
120 if (info) { cfag12864bfb_remove()
121 unregister_framebuffer(info); cfag12864bfb_remove()
122 framebuffer_release(info); cfag12864bfb_remove()
/linux-4.1.27/drivers/pinctrl/freescale/
H A Dpinctrl-imx.c42 const struct imx_pinctrl_soc_info *info; member in struct:imx_pinctrl
46 const struct imx_pinctrl_soc_info *info, imx_pinctrl_find_group_by_name()
52 for (i = 0; i < info->ngroups; i++) { imx_pinctrl_find_group_by_name()
53 if (!strcmp(info->groups[i].name, name)) { imx_pinctrl_find_group_by_name()
54 grp = &info->groups[i]; imx_pinctrl_find_group_by_name()
65 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_get_groups_count() local
67 return info->ngroups; imx_get_groups_count()
74 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_get_group_name() local
76 return info->groups[selector].name; imx_get_group_name()
84 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_get_group_pins() local
86 if (selector >= info->ngroups) imx_get_group_pins()
89 *pins = info->groups[selector].pin_ids; imx_get_group_pins()
90 *npins = info->groups[selector].npins; imx_get_group_pins()
106 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_dt_node_to_map() local
117 grp = imx_pinctrl_find_group_by_name(info, np->name); imx_dt_node_to_map()
119 dev_err(info->dev, "unable to find group for node %s\n", imx_dt_node_to_map()
186 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pmx_set() local
196 grp = &info->groups[group]; imx_pmx_set()
200 info->functions[selector].name, grp->name); imx_pmx_set()
205 pin_reg = &info->pin_regs[pin_id]; imx_pmx_set()
209 info->pins[pin_id].name); imx_pmx_set()
213 if (info->flags & SHARE_MUX_CONF_REG) { imx_pmx_set()
270 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pmx_get_funcs_count() local
272 return info->nfunctions; imx_pmx_get_funcs_count()
279 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pmx_get_func_name() local
281 return info->functions[selector].name; imx_pmx_get_func_name()
289 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pmx_get_groups() local
291 *groups = info->functions[selector].groups; imx_pmx_get_groups()
292 *num_groups = info->functions[selector].num_groups; imx_pmx_get_groups()
301 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pmx_gpio_request_enable() local
309 if (!(info->flags & SHARE_MUX_CONF_REG)) imx_pmx_gpio_request_enable()
312 pin_reg = &info->pin_regs[offset]; imx_pmx_gpio_request_enable()
317 for (group = 0; group < info->ngroups; group++) { imx_pmx_gpio_request_enable()
318 grp = &info->groups[group]; imx_pmx_gpio_request_enable()
341 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pmx_gpio_set_direction() local
349 if (!(info->flags & SHARE_MUX_CONF_REG)) imx_pmx_gpio_set_direction()
352 pin_reg = &info->pin_regs[offset]; imx_pmx_gpio_set_direction()
380 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pinconf_get() local
381 const struct imx_pin_reg *pin_reg = &info->pin_regs[pin_id]; imx_pinconf_get()
384 dev_err(info->dev, "Pin(%s) does not support config function\n", imx_pinconf_get()
385 info->pins[pin_id].name); imx_pinconf_get()
391 if (info->flags & SHARE_MUX_CONF_REG) imx_pinconf_get()
402 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pinconf_set() local
403 const struct imx_pin_reg *pin_reg = &info->pin_regs[pin_id]; imx_pinconf_set()
407 dev_err(info->dev, "Pin(%s) does not support config function\n", imx_pinconf_set()
408 info->pins[pin_id].name); imx_pinconf_set()
413 info->pins[pin_id].name); imx_pinconf_set()
416 if (info->flags & SHARE_MUX_CONF_REG) { imx_pinconf_set()
436 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pinconf_dbg_show() local
437 const struct imx_pin_reg *pin_reg = &info->pin_regs[pin_id]; imx_pinconf_dbg_show()
453 const struct imx_pinctrl_soc_info *info = ipctl->info; imx_pinconf_group_dbg_show() local
459 if (group > info->ngroups) imx_pinconf_group_dbg_show()
463 grp = &info->groups[group]; imx_pinconf_group_dbg_show()
497 struct imx_pinctrl_soc_info *info, imx_pinctrl_parse_groups()
505 dev_dbg(info->dev, "group(%d): %s\n", index, np->name); imx_pinctrl_parse_groups()
507 if (info->flags & SHARE_MUX_CONF_REG) imx_pinctrl_parse_groups()
520 dev_err(info->dev, "no fsl,pins property in node %s\n", np->full_name); imx_pinctrl_parse_groups()
526 dev_err(info->dev, "Invalid fsl,pins property in node %s\n", np->full_name); imx_pinctrl_parse_groups()
531 grp->pins = devm_kzalloc(info->dev, grp->npins * sizeof(struct imx_pin), imx_pinctrl_parse_groups()
533 grp->pin_ids = devm_kzalloc(info->dev, grp->npins * sizeof(unsigned int), imx_pinctrl_parse_groups()
545 if (info->flags & SHARE_MUX_CONF_REG) { imx_pinctrl_parse_groups()
554 pin_reg = &info->pin_regs[pin_id]; imx_pinctrl_parse_groups()
569 dev_dbg(info->dev, "%s: 0x%x 0x%08lx", info->pins[pin_id].name, imx_pinctrl_parse_groups()
577 struct imx_pinctrl_soc_info *info, imx_pinctrl_parse_functions()
586 dev_dbg(info->dev, "parse function(%d): %s\n", index, np->name); imx_pinctrl_parse_functions()
588 func = &info->functions[index]; imx_pinctrl_parse_functions()
594 dev_err(info->dev, "no groups defined in %s\n", np->full_name); imx_pinctrl_parse_functions()
597 func->groups = devm_kzalloc(info->dev, imx_pinctrl_parse_functions()
602 grp = &info->groups[grp_index++]; for_each_child_of_node()
603 imx_pinctrl_parse_groups(child, grp, info, i++); for_each_child_of_node()
610 struct imx_pinctrl_soc_info *info) imx_pinctrl_probe_dt()
626 info->nfunctions = nfuncs; imx_pinctrl_probe_dt()
627 info->functions = devm_kzalloc(&pdev->dev, nfuncs * sizeof(struct imx_pmx_func), imx_pinctrl_probe_dt()
629 if (!info->functions) imx_pinctrl_probe_dt()
632 info->ngroups = 0; imx_pinctrl_probe_dt()
634 info->ngroups += of_get_child_count(child); imx_pinctrl_probe_dt()
635 info->groups = devm_kzalloc(&pdev->dev, info->ngroups * sizeof(struct imx_pin_group), imx_pinctrl_probe_dt()
637 if (!info->groups) imx_pinctrl_probe_dt()
641 imx_pinctrl_parse_functions(child, info, i++); imx_pinctrl_probe_dt()
647 struct imx_pinctrl_soc_info *info) imx_pinctrl_probe()
653 if (!info || !info->pins || !info->npins) { imx_pinctrl_probe()
654 dev_err(&pdev->dev, "wrong pinctrl info\n"); imx_pinctrl_probe()
657 info->dev = &pdev->dev; imx_pinctrl_probe()
664 info->pin_regs = devm_kmalloc(&pdev->dev, sizeof(*info->pin_regs) * imx_pinctrl_probe()
665 info->npins, GFP_KERNEL); imx_pinctrl_probe()
666 if (!info->pin_regs) imx_pinctrl_probe()
669 for (i = 0; i < info->npins; i++) { imx_pinctrl_probe()
670 info->pin_regs[i].mux_reg = -1; imx_pinctrl_probe()
671 info->pin_regs[i].conf_reg = -1; imx_pinctrl_probe()
680 imx_pinctrl_desc.pins = info->pins; imx_pinctrl_probe()
681 imx_pinctrl_desc.npins = info->npins; imx_pinctrl_probe()
683 ret = imx_pinctrl_probe_dt(pdev, info); imx_pinctrl_probe()
689 ipctl->info = info; imx_pinctrl_probe()
690 ipctl->dev = info->dev; imx_pinctrl_probe()
45 imx_pinctrl_find_group_by_name( const struct imx_pinctrl_soc_info *info, const char *name) imx_pinctrl_find_group_by_name() argument
495 imx_pinctrl_parse_groups(struct device_node *np, struct imx_pin_group *grp, struct imx_pinctrl_soc_info *info, u32 index) imx_pinctrl_parse_groups() argument
576 imx_pinctrl_parse_functions(struct device_node *np, struct imx_pinctrl_soc_info *info, u32 index) imx_pinctrl_parse_functions() argument
609 imx_pinctrl_probe_dt(struct platform_device *pdev, struct imx_pinctrl_soc_info *info) imx_pinctrl_probe_dt() argument
646 imx_pinctrl_probe(struct platform_device *pdev, struct imx_pinctrl_soc_info *info) imx_pinctrl_probe() argument
/linux-4.1.27/drivers/video/fbdev/kyro/
H A Dfbdev.c81 /* global graphics card info structure (one per card) */
305 static int kyro_dev_video_mode_set(struct fb_info *info) kyro_dev_video_mode_set() argument
307 struct kyrofb_info *par = info->par; kyro_dev_video_mode_set()
317 info->var.bits_per_pixel, kyro_dev_video_mode_set()
318 info->var.xres, info->var.yres, kyro_dev_video_mode_set()
330 deviceInfo.ulNextFreeVidMem = info->var.xres * info->var.yres * kyro_dev_video_mode_set()
331 info->var.bits_per_pixel; kyro_dev_video_mode_set()
398 static int kyrofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) kyrofb_check_var() argument
400 struct kyrofb_info *par = info->par; kyrofb_check_var()
474 static int kyrofb_set_par(struct fb_info *info) kyrofb_set_par() argument
476 struct kyrofb_info *par = info->par; kyrofb_set_par()
481 par->XRES = info->var.xres; kyrofb_set_par()
482 par->YRES = info->var.yres; kyrofb_set_par()
485 par->PIXDEPTH = info->var.bits_per_pixel; kyrofb_set_par()
489 lineclock = (info->var.pixclock * (info->var.xres + kyrofb_set_par()
490 info->var.right_margin + kyrofb_set_par()
491 info->var.hsync_len + kyrofb_set_par()
492 info->var.left_margin)) / 1000; kyrofb_set_par()
496 frameclock = lineclock * (info->var.yres + kyrofb_set_par()
497 info->var.lower_margin + kyrofb_set_par()
498 info->var.vsync_len + kyrofb_set_par()
499 info->var.upper_margin); kyrofb_set_par()
504 par->PIXCLK = ((1000000000 + (info->var.pixclock / 2)) kyrofb_set_par()
505 / info->var.pixclock) * 10; kyrofb_set_par()
508 par->HFP = info->var.right_margin; kyrofb_set_par()
509 par->HST = info->var.hsync_len; kyrofb_set_par()
510 par->HBP = info->var.left_margin; kyrofb_set_par()
514 par->VFP = info->var.lower_margin; kyrofb_set_par()
515 par->VST = info->var.vsync_len; kyrofb_set_par()
516 par->VBP = info->var.upper_margin; kyrofb_set_par()
519 par->HSP = (info->var.sync & FB_SYNC_HOR_HIGH_ACT) ? 1 : 0; kyrofb_set_par()
520 par->VSP = (info->var.sync & FB_SYNC_VERT_HIGH_ACT) ? 1 : 0; kyrofb_set_par()
522 kyro_dev_video_mode_set(info); kyrofb_set_par()
525 info->fix.line_length = get_line_length(par->XRES, par->PIXDEPTH); kyrofb_set_par()
526 info->fix.visual = FB_VISUAL_TRUECOLOR; kyrofb_set_par()
532 u_int blue, u_int transp, struct fb_info *info) kyrofb_setcolreg()
534 struct kyrofb_info *par = info->par; kyrofb_setcolreg()
540 switch (info->var.bits_per_pixel) { kyrofb_setcolreg()
586 static int kyrofb_ioctl(struct fb_info *info, kyrofb_ioctl() argument
671 struct fb_info *info; kyrofb_probe() local
681 info = framebuffer_alloc(sizeof(struct kyrofb_info), &pdev->dev); kyrofb_probe()
682 if (!info) kyrofb_probe()
685 currentpar = info->par; kyrofb_probe()
695 info->screen_base = ioremap_nocache(kyro_fix.smem_start, kyrofb_probe()
709 info->fbops = &kyrofb_ops; kyrofb_probe()
710 info->fix = kyro_fix; kyrofb_probe()
711 info->pseudo_palette = currentpar->palette; kyrofb_probe()
712 info->flags = FBINFO_DEFAULT; kyrofb_probe()
720 if (!fb_find_mode(&info->var, info, mode_option, kyro_modedb, kyrofb_probe()
722 info->var = kyro_var; kyrofb_probe()
724 fb_alloc_cmap(&info->cmap, 256, 0); kyrofb_probe()
726 kyrofb_set_par(info); kyrofb_probe()
727 kyrofb_check_var(&info->var, info); kyrofb_probe()
729 size = get_line_length(info->var.xres_virtual, kyrofb_probe()
730 info->var.bits_per_pixel); kyrofb_probe()
731 size *= info->var.yres_virtual; kyrofb_probe()
733 fb_memset(info->screen_base, 0, size); kyrofb_probe()
735 if (register_framebuffer(info) < 0) kyrofb_probe()
738 fb_info(info, "%s frame buffer device, at %dx%d@%d using %ldk/%ldk of VRAM\n", kyrofb_probe()
739 info->fix.id, kyrofb_probe()
740 info->var.xres, info->var.yres, info->var.bits_per_pixel, kyrofb_probe()
741 size >> 10, (unsigned long)info->fix.smem_len >> 10); kyrofb_probe()
743 pci_set_drvdata(pdev, info); kyrofb_probe()
749 iounmap(info->screen_base); kyrofb_probe()
750 framebuffer_release(info); kyrofb_probe()
757 struct fb_info *info = pci_get_drvdata(pdev); kyrofb_remove() local
758 struct kyrofb_info *par = info->par; kyrofb_remove()
770 iounmap(info->screen_base); kyrofb_remove()
776 info->fix.smem_start, kyrofb_remove()
777 info->fix.smem_len); kyrofb_remove()
780 unregister_framebuffer(info); kyrofb_remove()
781 framebuffer_release(info); kyrofb_remove()
531 kyrofb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) kyrofb_setcolreg() argument
/linux-4.1.27/include/net/
H A Dcfg80211-wext.h24 struct iw_request_info *info,
26 int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
28 int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,
31 struct iw_request_info *info,
34 struct iw_request_info *info,
37 struct iw_request_info *info,
40 struct iw_request_info *info,
43 struct iw_request_info *info,
46 struct iw_request_info *info,
49 struct iw_request_info *info,
52 struct iw_request_info *info,
/linux-4.1.27/ipc/
H A Dmqueue.c91 static void remove_notification(struct mqueue_inode_info *info);
121 static int msg_insert(struct msg_msg *msg, struct mqueue_inode_info *info) msg_insert() argument
126 p = &info->msg_tree.rb_node; msg_insert()
138 if (info->node_cache) { msg_insert()
139 leaf = info->node_cache; msg_insert()
140 info->node_cache = NULL; msg_insert()
149 rb_insert_color(&leaf->rb_node, &info->msg_tree); msg_insert()
151 info->attr.mq_curmsgs++; msg_insert()
152 info->qsize += msg->m_ts; msg_insert()
157 static inline struct msg_msg *msg_get(struct mqueue_inode_info *info) msg_get() argument
164 p = &info->msg_tree.rb_node; msg_get()
175 if (info->attr.mq_curmsgs) { msg_get()
179 info->attr.mq_curmsgs = 0; msg_get()
188 rb_erase(&leaf->rb_node, &info->msg_tree); msg_get()
189 if (info->node_cache) { msg_get()
192 info->node_cache = leaf; msg_get()
200 rb_erase(&leaf->rb_node, &info->msg_tree); msg_get()
201 if (info->node_cache) { msg_get()
204 info->node_cache = leaf; msg_get()
208 info->attr.mq_curmsgs--; msg_get()
209 info->qsize -= msg->m_ts; msg_get()
232 struct mqueue_inode_info *info; mqueue_get_inode() local
237 /* mqueue specific info */ mqueue_get_inode()
238 info = MQUEUE_I(inode); mqueue_get_inode()
239 spin_lock_init(&info->lock); mqueue_get_inode()
240 init_waitqueue_head(&info->wait_q); mqueue_get_inode()
241 INIT_LIST_HEAD(&info->e_wait_q[0].list); mqueue_get_inode()
242 INIT_LIST_HEAD(&info->e_wait_q[1].list); mqueue_get_inode()
243 info->notify_owner = NULL; mqueue_get_inode()
244 info->notify_user_ns = NULL; mqueue_get_inode()
245 info->qsize = 0; mqueue_get_inode()
246 info->user = NULL; /* set when all is ok */ mqueue_get_inode()
247 info->msg_tree = RB_ROOT; mqueue_get_inode()
248 info->node_cache = NULL; mqueue_get_inode()
249 memset(&info->attr, 0, sizeof(info->attr)); mqueue_get_inode()
250 info->attr.mq_maxmsg = min(ipc_ns->mq_msg_max, mqueue_get_inode()
252 info->attr.mq_msgsize = min(ipc_ns->mq_msgsize_max, mqueue_get_inode()
255 info->attr.mq_maxmsg = attr->mq_maxmsg; mqueue_get_inode()
256 info->attr.mq_msgsize = attr->mq_msgsize; mqueue_get_inode()
271 mq_treesize = info->attr.mq_maxmsg * sizeof(struct msg_msg) + mqueue_get_inode()
272 min_t(unsigned int, info->attr.mq_maxmsg, MQ_PRIO_MAX) * mqueue_get_inode()
275 mq_bytes = mq_treesize + (info->attr.mq_maxmsg * mqueue_get_inode()
276 info->attr.mq_msgsize); mqueue_get_inode()
282 /* mqueue_evict_inode() releases info->messages */ mqueue_get_inode()
290 info->user = get_uid(u); mqueue_get_inode()
373 struct mqueue_inode_info *info; mqueue_evict_inode() local
385 info = MQUEUE_I(inode); mqueue_evict_inode()
386 spin_lock(&info->lock); mqueue_evict_inode()
387 while ((msg = msg_get(info)) != NULL) mqueue_evict_inode()
389 kfree(info->node_cache); mqueue_evict_inode()
390 spin_unlock(&info->lock); mqueue_evict_inode()
393 mq_treesize = info->attr.mq_maxmsg * sizeof(struct msg_msg) + mqueue_evict_inode()
394 min_t(unsigned int, info->attr.mq_maxmsg, MQ_PRIO_MAX) * mqueue_evict_inode()
397 mq_bytes = mq_treesize + (info->attr.mq_maxmsg * mqueue_evict_inode()
398 info->attr.mq_msgsize); mqueue_evict_inode()
400 user = info->user; mqueue_evict_inode()
478 * to read only queue size & notification info (the only values
485 struct mqueue_inode_info *info = MQUEUE_I(file_inode(filp)); mqueue_read_file() local
489 spin_lock(&info->lock); mqueue_read_file()
492 info->qsize, mqueue_read_file()
493 info->notify_owner ? info->notify.sigev_notify : 0, mqueue_read_file()
494 (info->notify_owner && mqueue_read_file()
495 info->notify.sigev_notify == SIGEV_SIGNAL) ? mqueue_read_file()
496 info->notify.sigev_signo : 0, mqueue_read_file()
497 pid_vnr(info->notify_owner)); mqueue_read_file()
498 spin_unlock(&info->lock); mqueue_read_file()
512 struct mqueue_inode_info *info = MQUEUE_I(file_inode(filp)); mqueue_flush_file() local
514 spin_lock(&info->lock); mqueue_flush_file()
515 if (task_tgid(current) == info->notify_owner) mqueue_flush_file()
516 remove_notification(info); mqueue_flush_file()
518 spin_unlock(&info->lock); mqueue_flush_file()
524 struct mqueue_inode_info *info = MQUEUE_I(file_inode(filp)); mqueue_poll_file() local
527 poll_wait(filp, &info->wait_q, poll_tab); mqueue_poll_file()
529 spin_lock(&info->lock); mqueue_poll_file()
530 if (info->attr.mq_curmsgs) mqueue_poll_file()
533 if (info->attr.mq_curmsgs < info->attr.mq_maxmsg) mqueue_poll_file()
535 spin_unlock(&info->lock); mqueue_poll_file()
540 /* Adds current to info->e_wait_q[sr] before element with smaller prio */ wq_add()
541 static void wq_add(struct mqueue_inode_info *info, int sr, wq_add() argument
548 list_for_each_entry(walk, &info->e_wait_q[sr].list, list) { wq_add()
554 list_add_tail(&ewp->list, &info->e_wait_q[sr].list); wq_add()
562 static int wq_sleep(struct mqueue_inode_info *info, int sr, wq_sleep() argument
568 wq_add(info, sr, ewp); wq_sleep()
573 spin_unlock(&info->lock); wq_sleep()
584 spin_lock(&info->lock); wq_sleep()
600 spin_unlock(&info->lock); wq_sleep()
609 struct mqueue_inode_info *info, int sr) wq_get_first_waiter()
613 ptr = info->e_wait_q[sr].list.prev; wq_get_first_waiter()
614 if (ptr == &info->e_wait_q[sr].list) wq_get_first_waiter()
628 static void __do_notify(struct mqueue_inode_info *info) __do_notify() argument
635 if (info->notify_owner && __do_notify()
636 info->attr.mq_curmsgs == 1) { __do_notify()
638 switch (info->notify.sigev_notify) { __do_notify()
644 sig_i.si_signo = info->notify.sigev_signo; __do_notify()
647 sig_i.si_value = info->notify.sigev_value; __do_notify()
648 /* map current pid/uid into info->owner's namespaces */ __do_notify()
651 ns_of_pid(info->notify_owner)); __do_notify()
652 sig_i.si_uid = from_kuid_munged(info->notify_user_ns, current_uid()); __do_notify()
655 kill_pid_info(info->notify.sigev_signo, __do_notify()
656 &sig_i, info->notify_owner); __do_notify()
659 set_cookie(info->notify_cookie, NOTIFY_WOKENUP); __do_notify()
660 netlink_sendskb(info->notify_sock, info->notify_cookie); __do_notify()
664 put_pid(info->notify_owner); __do_notify()
665 put_user_ns(info->notify_user_ns); __do_notify()
666 info->notify_owner = NULL; __do_notify()
667 info->notify_user_ns = NULL; __do_notify()
669 wake_up(&info->wait_q); __do_notify()
684 static void remove_notification(struct mqueue_inode_info *info) remove_notification() argument
686 if (info->notify_owner != NULL && remove_notification()
687 info->notify.sigev_notify == SIGEV_THREAD) { remove_notification()
688 set_cookie(info->notify_cookie, NOTIFY_REMOVED); remove_notification()
689 netlink_sendskb(info->notify_sock, info->notify_cookie); remove_notification()
691 put_pid(info->notify_owner); remove_notification()
692 put_user_ns(info->notify_user_ns); remove_notification()
693 info->notify_owner = NULL; remove_notification()
694 info->notify_user_ns = NULL; remove_notification()
919 static inline void pipelined_send(struct mqueue_inode_info *info, pipelined_send() argument
933 static inline void pipelined_receive(struct mqueue_inode_info *info) pipelined_receive() argument
935 struct ext_wait_queue *sender = wq_get_first_waiter(info, SEND); pipelined_receive()
939 wake_up_interruptible(&info->wait_q); pipelined_receive()
942 if (msg_insert(sender->msg, info)) pipelined_receive()
960 struct mqueue_inode_info *info; SYSCALL_DEFINE5() local
989 info = MQUEUE_I(inode); SYSCALL_DEFINE5()
997 if (unlikely(msg_len > info->attr.mq_msgsize)) { SYSCALL_DEFINE5()
1017 if (!info->node_cache) SYSCALL_DEFINE5()
1020 spin_lock(&info->lock); SYSCALL_DEFINE5()
1022 if (!info->node_cache && new_leaf) { SYSCALL_DEFINE5()
1025 info->node_cache = new_leaf; SYSCALL_DEFINE5()
1031 if (info->attr.mq_curmsgs == info->attr.mq_maxmsg) { SYSCALL_DEFINE5()
1038 ret = wq_sleep(info, SEND, timeout, &wait); SYSCALL_DEFINE5()
1040 * wq_sleep must be called with info->lock held, and SYSCALL_DEFINE5()
1046 receiver = wq_get_first_waiter(info, RECV); SYSCALL_DEFINE5()
1048 pipelined_send(info, msg_ptr, receiver); SYSCALL_DEFINE5()
1051 ret = msg_insert(msg_ptr, info); SYSCALL_DEFINE5()
1054 __do_notify(info); SYSCALL_DEFINE5()
1060 spin_unlock(&info->lock); SYSCALL_DEFINE5()
1078 struct mqueue_inode_info *info; SYSCALL_DEFINE5() local
1104 info = MQUEUE_I(inode); SYSCALL_DEFINE5()
1113 if (unlikely(msg_len < info->attr.mq_msgsize)) { SYSCALL_DEFINE5()
1123 if (!info->node_cache) SYSCALL_DEFINE5()
1126 spin_lock(&info->lock); SYSCALL_DEFINE5()
1128 if (!info->node_cache && new_leaf) { SYSCALL_DEFINE5()
1131 info->node_cache = new_leaf; SYSCALL_DEFINE5()
1136 if (info->attr.mq_curmsgs == 0) { SYSCALL_DEFINE5()
1138 spin_unlock(&info->lock); SYSCALL_DEFINE5()
1143 ret = wq_sleep(info, RECV, timeout, &wait); SYSCALL_DEFINE5()
1147 msg_ptr = msg_get(info); SYSCALL_DEFINE5()
1153 pipelined_receive(info); SYSCALL_DEFINE5()
1154 spin_unlock(&info->lock); SYSCALL_DEFINE5()
1185 struct mqueue_inode_info *info; SYSCALL_DEFINE2() local
1263 info = MQUEUE_I(inode); SYSCALL_DEFINE2()
1266 spin_lock(&info->lock); SYSCALL_DEFINE2()
1268 if (info->notify_owner == task_tgid(current)) { SYSCALL_DEFINE2()
1269 remove_notification(info); SYSCALL_DEFINE2()
1272 } else if (info->notify_owner != NULL) { SYSCALL_DEFINE2()
1277 info->notify.sigev_notify = SIGEV_NONE; SYSCALL_DEFINE2()
1280 info->notify_sock = sock; SYSCALL_DEFINE2()
1281 info->notify_cookie = nc; SYSCALL_DEFINE2()
1284 info->notify.sigev_notify = SIGEV_THREAD; SYSCALL_DEFINE2()
1287 info->notify.sigev_signo = notification.sigev_signo; SYSCALL_DEFINE2()
1288 info->notify.sigev_value = notification.sigev_value; SYSCALL_DEFINE2()
1289 info->notify.sigev_notify = SIGEV_SIGNAL; SYSCALL_DEFINE2()
1293 info->notify_owner = get_pid(task_tgid(current)); SYSCALL_DEFINE2()
1294 info->notify_user_ns = get_user_ns(current_user_ns()); SYSCALL_DEFINE2()
1297 spin_unlock(&info->lock); SYSCALL_DEFINE2()
1317 struct mqueue_inode_info *info; SYSCALL_DEFINE3() local
1337 info = MQUEUE_I(inode); SYSCALL_DEFINE3()
1339 spin_lock(&info->lock); SYSCALL_DEFINE3()
1341 omqstat = info->attr; SYSCALL_DEFINE3()
1355 spin_unlock(&info->lock); SYSCALL_DEFINE3()
608 wq_get_first_waiter( struct mqueue_inode_info *info, int sr) wq_get_first_waiter() argument
/linux-4.1.27/net/dccp/
H A Ddiag.c19 static void dccp_get_info(struct sock *sk, struct tcp_info *info) dccp_get_info() argument
24 memset(info, 0, sizeof(*info)); dccp_get_info()
26 info->tcpi_state = sk->sk_state; dccp_get_info()
27 info->tcpi_retransmits = icsk->icsk_retransmits; dccp_get_info()
28 info->tcpi_probes = icsk->icsk_probes_out; dccp_get_info()
29 info->tcpi_backoff = icsk->icsk_backoff; dccp_get_info()
30 info->tcpi_pmtu = icsk->icsk_pmtu_cookie; dccp_get_info()
33 info->tcpi_options |= TCPI_OPT_SACK; dccp_get_info()
36 ccid_hc_rx_get_info(dp->dccps_hc_rx_ccid, sk, info); dccp_get_info()
39 ccid_hc_tx_get_info(dp->dccps_hc_tx_ccid, sk, info); dccp_get_info()
/linux-4.1.27/arch/arm64/kernel/
H A Dcpuinfo.c49 static void cpuinfo_detect_icache_policy(struct cpuinfo_arm64 *info) cpuinfo_detect_icache_policy() argument
52 u32 l1ip = CTR_L1IP(info->reg_ctr); cpuinfo_detect_icache_policy()
82 static void update_mixed_endian_el0_support(struct cpuinfo_arm64 *info) update_mixed_endian_el0_support() argument
84 mixed_endian_el0 &= id_aa64mmfr0_mixed_endian_el0(info->reg_id_aa64mmfr0); update_mixed_endian_el0_support()
87 static void update_cpu_features(struct cpuinfo_arm64 *info) update_cpu_features() argument
89 update_mixed_endian_el0_support(info); update_cpu_features()
202 static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) __cpuinfo_store_cpu() argument
204 info->reg_cntfrq = arch_timer_get_cntfrq(); __cpuinfo_store_cpu()
205 info->reg_ctr = read_cpuid_cachetype(); __cpuinfo_store_cpu()
206 info->reg_dczid = read_cpuid(DCZID_EL0); __cpuinfo_store_cpu()
207 info->reg_midr = read_cpuid_id(); __cpuinfo_store_cpu()
209 info->reg_id_aa64dfr0 = read_cpuid(ID_AA64DFR0_EL1); __cpuinfo_store_cpu()
210 info->reg_id_aa64dfr1 = read_cpuid(ID_AA64DFR1_EL1); __cpuinfo_store_cpu()
211 info->reg_id_aa64isar0 = read_cpuid(ID_AA64ISAR0_EL1); __cpuinfo_store_cpu()
212 info->reg_id_aa64isar1 = read_cpuid(ID_AA64ISAR1_EL1); __cpuinfo_store_cpu()
213 info->reg_id_aa64mmfr0 = read_cpuid(ID_AA64MMFR0_EL1); __cpuinfo_store_cpu()
214 info->reg_id_aa64mmfr1 = read_cpuid(ID_AA64MMFR1_EL1); __cpuinfo_store_cpu()
215 info->reg_id_aa64pfr0 = read_cpuid(ID_AA64PFR0_EL1); __cpuinfo_store_cpu()
216 info->reg_id_aa64pfr1 = read_cpuid(ID_AA64PFR1_EL1); __cpuinfo_store_cpu()
218 info->reg_id_dfr0 = read_cpuid(ID_DFR0_EL1); __cpuinfo_store_cpu()
219 info->reg_id_isar0 = read_cpuid(ID_ISAR0_EL1); __cpuinfo_store_cpu()
220 info->reg_id_isar1 = read_cpuid(ID_ISAR1_EL1); __cpuinfo_store_cpu()
221 info->reg_id_isar2 = read_cpuid(ID_ISAR2_EL1); __cpuinfo_store_cpu()
222 info->reg_id_isar3 = read_cpuid(ID_ISAR3_EL1); __cpuinfo_store_cpu()
223 info->reg_id_isar4 = read_cpuid(ID_ISAR4_EL1); __cpuinfo_store_cpu()
224 info->reg_id_isar5 = read_cpuid(ID_ISAR5_EL1); __cpuinfo_store_cpu()
225 info->reg_id_mmfr0 = read_cpuid(ID_MMFR0_EL1); __cpuinfo_store_cpu()
226 info->reg_id_mmfr1 = read_cpuid(ID_MMFR1_EL1); __cpuinfo_store_cpu()
227 info->reg_id_mmfr2 = read_cpuid(ID_MMFR2_EL1); __cpuinfo_store_cpu()
228 info->reg_id_mmfr3 = read_cpuid(ID_MMFR3_EL1); __cpuinfo_store_cpu()
229 info->reg_id_pfr0 = read_cpuid(ID_PFR0_EL1); __cpuinfo_store_cpu()
230 info->reg_id_pfr1 = read_cpuid(ID_PFR1_EL1); __cpuinfo_store_cpu()
232 info->reg_mvfr0 = read_cpuid(MVFR0_EL1); __cpuinfo_store_cpu()
233 info->reg_mvfr1 = read_cpuid(MVFR1_EL1); __cpuinfo_store_cpu()
234 info->reg_mvfr2 = read_cpuid(MVFR2_EL1); __cpuinfo_store_cpu()
236 cpuinfo_detect_icache_policy(info); __cpuinfo_store_cpu()
240 update_cpu_features(info); __cpuinfo_store_cpu()
245 struct cpuinfo_arm64 *info = this_cpu_ptr(&cpu_data); cpuinfo_store_cpu() local
246 __cpuinfo_store_cpu(info); cpuinfo_store_cpu()
247 cpuinfo_sanity_check(info); cpuinfo_store_cpu()
252 struct cpuinfo_arm64 *info = &per_cpu(cpu_data, 0); cpuinfo_store_boot_cpu() local
253 __cpuinfo_store_cpu(info); cpuinfo_store_boot_cpu()
255 boot_cpu_data = *info; cpuinfo_store_boot_cpu()
/linux-4.1.27/drivers/media/i2c/
H A Dnoon010pc30.c245 static inline int set_i2c_page(struct noon010_info *info, set_i2c_page() argument
251 if (info->i2c_reg_page != page && (reg & 0xFF) != 0x03) { set_i2c_page()
254 info->i2c_reg_page = page; set_i2c_page()
262 struct noon010_info *info = to_noon010(sd); cam_i2c_read() local
263 int ret = set_i2c_page(info, client, reg_addr); cam_i2c_read()
273 struct noon010_info *info = to_noon010(sd); cam_i2c_write() local
274 int ret = set_i2c_page(info, client, reg_addr); cam_i2c_write()
297 struct noon010_info *info = to_noon010(sd); noon010_power_ctrl() local
308 info->i2c_reg_page = -1; noon010_power_ctrl()
327 struct noon010_info *info = to_noon010(sd); noon010_set_flip() local
342 info->hflip = hflip; noon010_set_flip()
343 info->vflip = vflip; noon010_set_flip()
351 struct noon010_info *info = to_noon010(sd); noon010_set_params() local
354 info->curr_win->vid_ctl1); noon010_set_params()
358 info->curr_fmt->ispctl1_reg); noon010_set_params()
390 /* Called with info.lock mutex held */ power_enable()
391 static int power_enable(struct noon010_info *info) power_enable() argument
395 if (info->power) { power_enable()
396 v4l2_info(&info->sd, "%s: sensor is already on\n", __func__); power_enable()
400 if (gpio_is_valid(info->gpio_nstby)) power_enable()
401 gpio_set_value(info->gpio_nstby, 0); power_enable()
403 if (gpio_is_valid(info->gpio_nreset)) power_enable()
404 gpio_set_value(info->gpio_nreset, 0); power_enable()
406 ret = regulator_bulk_enable(NOON010_NUM_SUPPLIES, info->supply); power_enable()
410 if (gpio_is_valid(info->gpio_nreset)) { power_enable()
412 gpio_set_value(info->gpio_nreset, 1); power_enable()
414 if (gpio_is_valid(info->gpio_nstby)) { power_enable()
416 gpio_set_value(info->gpio_nstby, 1); power_enable()
418 if (gpio_is_valid(info->gpio_nreset)) { power_enable()
420 gpio_set_value(info->gpio_nreset, 0); power_enable()
422 gpio_set_value(info->gpio_nreset, 1); power_enable()
425 info->power = 1; power_enable()
427 v4l2_dbg(1, debug, &info->sd, "%s: sensor is on\n", __func__); power_enable()
431 /* Called with info.lock mutex held */ power_disable()
432 static int power_disable(struct noon010_info *info) power_disable() argument
436 if (!info->power) { power_disable()
437 v4l2_info(&info->sd, "%s: sensor is already off\n", __func__); power_disable()
441 ret = regulator_bulk_disable(NOON010_NUM_SUPPLIES, info->supply); power_disable()
445 if (gpio_is_valid(info->gpio_nstby)) power_disable()
446 gpio_set_value(info->gpio_nstby, 0); power_disable()
448 if (gpio_is_valid(info->gpio_nreset)) power_disable()
449 gpio_set_value(info->gpio_nreset, 0); power_disable()
451 info->power = 0; power_disable()
453 v4l2_dbg(1, debug, &info->sd, "%s: sensor is off\n", __func__); power_disable()
461 struct noon010_info *info = to_noon010(sd); noon010_s_ctrl() local
467 mutex_lock(&info->lock); noon010_s_ctrl()
473 if (!info->power) noon010_s_ctrl()
490 mutex_unlock(&info->lock); noon010_s_ctrl()
509 struct noon010_info *info = to_noon010(sd); noon010_get_fmt() local
521 mutex_lock(&info->lock); noon010_get_fmt()
522 mf->width = info->curr_win->width; noon010_get_fmt()
523 mf->height = info->curr_win->height; noon010_get_fmt()
524 mf->code = info->curr_fmt->code; noon010_get_fmt()
525 mf->colorspace = info->curr_fmt->colorspace; noon010_get_fmt()
528 mutex_unlock(&info->lock); noon010_get_fmt()
549 struct noon010_info *info = to_noon010(sd); noon010_set_fmt() local
567 mutex_lock(&info->lock); noon010_set_fmt()
568 if (!info->streaming) { noon010_set_fmt()
569 info->apply_new_cfg = 1; noon010_set_fmt()
570 info->curr_fmt = nf; noon010_set_fmt()
571 info->curr_win = size; noon010_set_fmt()
575 mutex_unlock(&info->lock); noon010_set_fmt()
593 struct noon010_info *info = to_noon010(sd); noon010_s_power() local
596 mutex_lock(&info->lock); noon010_s_power()
598 ret = power_enable(info); noon010_s_power()
603 ret = power_disable(info); noon010_s_power()
605 mutex_unlock(&info->lock); noon010_s_power()
609 ret = v4l2_ctrl_handler_setup(&info->hdl); noon010_s_power()
616 struct noon010_info *info = to_noon010(sd); noon010_s_stream() local
619 mutex_lock(&info->lock); noon010_s_stream()
620 if (!info->streaming != !on) { noon010_s_stream()
623 info->streaming = on; noon010_s_stream()
625 if (!ret && on && info->apply_new_cfg) { noon010_s_stream()
628 info->apply_new_cfg = 0; noon010_s_stream()
630 mutex_unlock(&info->lock); noon010_s_stream()
636 struct noon010_info *info = to_noon010(sd); noon010_log_status() local
638 v4l2_ctrl_handler_log_status(&info->hdl, sd->name); noon010_log_status()
684 static int noon010_detect(struct i2c_client *client, struct noon010_info *info) noon010_detect() argument
688 ret = power_enable(info); noon010_detect()
696 power_disable(info); noon010_detect()
704 struct noon010_info *info; noon010_probe() local
716 info = devm_kzalloc(&client->dev, sizeof(*info), GFP_KERNEL); noon010_probe()
717 if (!info) noon010_probe()
720 mutex_init(&info->lock); noon010_probe()
721 sd = &info->sd; noon010_probe()
728 v4l2_ctrl_handler_init(&info->hdl, 3); noon010_probe()
730 v4l2_ctrl_new_std(&info->hdl, &noon010_ctrl_ops, noon010_probe()
732 v4l2_ctrl_new_std(&info->hdl, &noon010_ctrl_ops, noon010_probe()
734 v4l2_ctrl_new_std(&info->hdl, &noon010_ctrl_ops, noon010_probe()
737 sd->ctrl_handler = &info->hdl; noon010_probe()
739 ret = info->hdl.error; noon010_probe()
743 info->i2c_reg_page = -1; noon010_probe()
744 info->gpio_nreset = -EINVAL; noon010_probe()
745 info->gpio_nstby = -EINVAL; noon010_probe()
746 info->curr_fmt = &noon010_formats[0]; noon010_probe()
747 info->curr_win = &noon010_sizes[0]; noon010_probe()
757 info->gpio_nreset = pdata->gpio_nreset; noon010_probe()
758 gpio_export(info->gpio_nreset, 0); noon010_probe()
769 info->gpio_nstby = pdata->gpio_nstby; noon010_probe()
770 gpio_export(info->gpio_nstby, 0); noon010_probe()
774 info->supply[i].supply = noon010_supply_name[i]; noon010_probe()
777 info->supply); noon010_probe()
781 info->pad.flags = MEDIA_PAD_FL_SOURCE; noon010_probe()
783 ret = media_entity_init(&sd->entity, 1, &info->pad, 0); noon010_probe()
787 ret = noon010_detect(client, info); noon010_probe()
792 v4l2_ctrl_handler_free(&info->hdl); noon010_probe()
800 struct noon010_info *info = to_noon010(sd); noon010_remove() local
803 v4l2_ctrl_handler_free(&info->hdl); noon010_remove()
/linux-4.1.27/arch/sparc/kernel/
H A Dtraps_32.c93 siginfo_t info; do_hw_interrupt() local
104 info.si_signo = SIGILL; do_hw_interrupt()
105 info.si_errno = 0; do_hw_interrupt()
106 info.si_code = ILL_ILLTRP; do_hw_interrupt()
107 info.si_addr = (void __user *)regs->pc; do_hw_interrupt()
108 info.si_trapno = type - 0x80; do_hw_interrupt()
109 force_sig_info(SIGILL, &info, current); do_hw_interrupt()
115 siginfo_t info; do_illegal_instruction() local
124 info.si_signo = SIGILL; do_illegal_instruction()
125 info.si_errno = 0; do_illegal_instruction()
126 info.si_code = ILL_ILLOPC; do_illegal_instruction()
127 info.si_addr = (void __user *)pc; do_illegal_instruction()
128 info.si_trapno = 0; do_illegal_instruction()
129 send_sig_info(SIGILL, &info, current); do_illegal_instruction()
135 siginfo_t info; do_priv_instruction() local
139 info.si_signo = SIGILL; do_priv_instruction()
140 info.si_errno = 0; do_priv_instruction()
141 info.si_code = ILL_PRVOPC; do_priv_instruction()
142 info.si_addr = (void __user *)pc; do_priv_instruction()
143 info.si_trapno = 0; do_priv_instruction()
144 send_sig_info(SIGILL, &info, current); do_priv_instruction()
152 siginfo_t info; do_memaccess_unaligned() local
165 info.si_signo = SIGBUS; do_memaccess_unaligned()
166 info.si_errno = 0; do_memaccess_unaligned()
167 info.si_code = BUS_ADRALN; do_memaccess_unaligned()
168 info.si_addr = /* FIXME: Should dig out mna address */ (void *)0; do_memaccess_unaligned()
169 info.si_trapno = 0; do_memaccess_unaligned()
170 send_sig_info(SIGBUS, &info, current); do_memaccess_unaligned()
226 siginfo_t info; local
303 info.si_signo = SIGFPE;
304 info.si_errno = 0;
305 info.si_addr = (void __user *)pc;
306 info.si_trapno = 0;
307 info.si_code = __SI_FAULT;
310 info.si_code = FPE_FLTINV;
312 info.si_code = FPE_FLTOVF;
314 info.si_code = FPE_FLTUND;
316 info.si_code = FPE_FLTDIV;
318 info.si_code = FPE_FLTRES;
320 send_sig_info(SIGFPE, &info, fpt);
332 siginfo_t info; handle_tag_overflow() local
336 info.si_signo = SIGEMT; handle_tag_overflow()
337 info.si_errno = 0; handle_tag_overflow()
338 info.si_code = EMT_TAGOVF; handle_tag_overflow()
339 info.si_addr = (void __user *)pc; handle_tag_overflow()
340 info.si_trapno = 0; handle_tag_overflow()
341 send_sig_info(SIGEMT, &info, current); handle_tag_overflow()
359 siginfo_t info; handle_reg_access() local
365 info.si_signo = SIGBUS; handle_reg_access()
366 info.si_errno = 0; handle_reg_access()
367 info.si_code = BUS_OBJERR; handle_reg_access()
368 info.si_addr = (void __user *)pc; handle_reg_access()
369 info.si_trapno = 0; handle_reg_access()
370 force_sig_info(SIGBUS, &info, current); handle_reg_access()
376 siginfo_t info; handle_cp_disabled() local
378 info.si_signo = SIGILL; handle_cp_disabled()
379 info.si_errno = 0; handle_cp_disabled()
380 info.si_code = ILL_COPROC; handle_cp_disabled()
381 info.si_addr = (void __user *)pc; handle_cp_disabled()
382 info.si_trapno = 0; handle_cp_disabled()
383 send_sig_info(SIGILL, &info, current); handle_cp_disabled()
389 siginfo_t info; handle_cp_exception() local
395 info.si_signo = SIGILL; handle_cp_exception()
396 info.si_errno = 0; handle_cp_exception()
397 info.si_code = ILL_COPROC; handle_cp_exception()
398 info.si_addr = (void __user *)pc; handle_cp_exception()
399 info.si_trapno = 0; handle_cp_exception()
400 send_sig_info(SIGILL, &info, current); handle_cp_exception()
406 siginfo_t info; handle_hw_divzero() local
408 info.si_signo = SIGFPE; handle_hw_divzero()
409 info.si_errno = 0; handle_hw_divzero()
410 info.si_code = FPE_INTDIV; handle_hw_divzero()
411 info.si_addr = (void __user *)pc; handle_hw_divzero()
412 info.si_trapno = 0; handle_hw_divzero()
413 send_sig_info(SIGFPE, &info, current); handle_hw_divzero()
/linux-4.1.27/drivers/video/console/
H A Dtileblit.c19 static void tile_bmove(struct vc_data *vc, struct fb_info *info, int sy, tile_bmove() argument
31 info->tileops->fb_tilecopy(info, &area); tile_bmove()
34 static void tile_clear(struct vc_data *vc, struct fb_info *info, int sy, tile_clear() argument
43 rect.fg = attr_fgcol_ec(fgshift, vc, info); tile_clear()
44 rect.bg = attr_bgcol_ec(bgshift, vc, info); tile_clear()
51 info->tileops->fb_tilefill(info, &rect); tile_clear()
54 static void tile_putcs(struct vc_data *vc, struct fb_info *info, tile_putcs() argument
69 blit.indices = (u32 *) fb_get_buffer_offset(info, &info->pixmap, size); tile_putcs()
73 info->tileops->fb_tileblit(info, &blit); tile_putcs()
76 static void tile_clear_margins(struct vc_data *vc, struct fb_info *info, tile_clear_margins() argument
82 static void tile_cursor(struct vc_data *vc, struct fb_info *info, int mode, tile_cursor() argument
116 info->tileops->fb_tilecursor(info, &cursor); tile_cursor()
119 static int tile_update_start(struct fb_info *info) tile_update_start() argument
121 struct fbcon_ops *ops = info->fbcon_par; tile_update_start()
124 err = fb_pan_display(info, &ops->var); tile_update_start()
125 ops->var.xoffset = info->var.xoffset; tile_update_start()
126 ops->var.yoffset = info->var.yoffset; tile_update_start()
127 ops->var.vmode = info->var.vmode; tile_update_start()
131 void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info) fbcon_set_tileops() argument
134 struct fbcon_ops *ops = info->fbcon_par; fbcon_set_tileops()
150 info->tileops->fb_settile(info, &map); fbcon_set_tileops()
H A Dfbcon.c185 static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var,
189 static void fbcon_modechanged(struct fb_info *info);
190 static void fbcon_set_all_vcs(struct fb_info *info);
196 static inline void fbcon_set_rotation(struct fb_info *info) fbcon_set_rotation() argument
198 struct fbcon_ops *ops = info->fbcon_par; fbcon_set_rotation()
200 if (!(info->flags & FBINFO_MISC_TILEBLITTING) && fbcon_set_rotation()
207 static void fbcon_rotate(struct fb_info *info, u32 rotate) fbcon_rotate() argument
209 struct fbcon_ops *ops= info->fbcon_par; fbcon_rotate()
217 if (info == fb_info) { fbcon_rotate()
225 fbcon_modechanged(info); fbcon_rotate()
229 static void fbcon_rotate_all(struct fb_info *info, u32 rotate) fbcon_rotate_all() argument
231 struct fbcon_ops *ops = info->fbcon_par; fbcon_rotate_all()
242 registered_fb[con2fb_map[i]] != info) fbcon_rotate_all()
249 fbcon_set_all_vcs(info); fbcon_rotate_all()
252 static inline void fbcon_set_rotation(struct fb_info *info) fbcon_set_rotation() argument
254 struct fbcon_ops *ops = info->fbcon_par; fbcon_set_rotation()
259 static void fbcon_rotate(struct fb_info *info, u32 rotate) fbcon_rotate() argument
264 static void fbcon_rotate_all(struct fb_info *info, u32 rotate) fbcon_rotate_all() argument
270 static int fbcon_get_rotate(struct fb_info *info) fbcon_get_rotate() argument
272 struct fbcon_ops *ops = info->fbcon_par; fbcon_get_rotate()
277 static inline int fbcon_is_inactive(struct vc_data *vc, struct fb_info *info) fbcon_is_inactive() argument
279 struct fbcon_ops *ops = info->fbcon_par; fbcon_is_inactive()
281 return (info->state != FBINFO_STATE_RUNNING || fbcon_is_inactive()
286 static int get_color(struct vc_data *vc, struct fb_info *info, get_color() argument
289 int depth = fb_get_color_depth(&info->var, &info->fix); get_color()
305 int col = mono_col(info); get_color()
307 int fg = (info->fix.visual != FB_VISUAL_MONO01) ? col : 0; get_color()
308 int bg = (info->fix.visual != FB_VISUAL_MONO01) ? 0 : col; get_color()
367 struct fb_info *info = container_of(work, struct fb_info, queue); fb_flashcursor() local
368 struct fbcon_ops *ops = info->fbcon_par; fb_flashcursor()
385 registered_fb[con2fb_map[vc->vc_num]] != info || fb_flashcursor()
394 ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1), fb_flashcursor()
395 get_color(vc, info, c, 0)); fb_flashcursor()
401 struct fb_info *info = (struct fb_info *) dev_addr; cursor_timer_handler() local
402 struct fbcon_ops *ops = info->fbcon_par; cursor_timer_handler()
404 queue_work(system_power_efficient_wq, &info->queue); cursor_timer_handler()
408 static void fbcon_add_cursor_timer(struct fb_info *info) fbcon_add_cursor_timer() argument
410 struct fbcon_ops *ops = info->fbcon_par; fbcon_add_cursor_timer()
412 if ((!info->queue.func || info->queue.func == fb_flashcursor) && fbcon_add_cursor_timer()
415 if (!info->queue.func) fbcon_add_cursor_timer()
416 INIT_WORK(&info->queue, fb_flashcursor); fbcon_add_cursor_timer()
421 ops->cursor_timer.data = (unsigned long ) info; fbcon_add_cursor_timer()
427 static void fbcon_del_cursor_timer(struct fb_info *info) fbcon_del_cursor_timer() argument
429 struct fbcon_ops *ops = info->fbcon_par; fbcon_del_cursor_timer()
431 if (info->queue.func == fb_flashcursor && fbcon_del_cursor_timer()
556 static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, fbcon_prepare_logo() argument
562 static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, fbcon_prepare_logo() argument
566 struct fbcon_ops *ops = info->fbcon_par; fbcon_prepare_logo()
571 if (info->flags & FBINFO_MODULE) { fbcon_prepare_logo()
580 if (fb_get_color_depth(&info->var, &info->fix) == 1) fbcon_prepare_logo()
582 logo_height = fb_prepare_logo(info, ops->rotate); fbcon_prepare_logo()
649 static void set_blitting_type(struct vc_data *vc, struct fb_info *info) set_blitting_type() argument
651 struct fbcon_ops *ops = info->fbcon_par; set_blitting_type()
655 if ((info->flags & FBINFO_MISC_TILEBLITTING)) set_blitting_type()
656 fbcon_set_tileops(vc, info); set_blitting_type()
658 fbcon_set_rotation(info); set_blitting_type()
663 static int fbcon_invalid_charcount(struct fb_info *info, unsigned charcount) fbcon_invalid_charcount() argument
667 if (info->flags & FBINFO_MISC_TILEBLITTING && fbcon_invalid_charcount()
668 info->tileops->fb_get_tilemax(info) < charcount) fbcon_invalid_charcount()
674 static void set_blitting_type(struct vc_data *vc, struct fb_info *info) set_blitting_type() argument
676 struct fbcon_ops *ops = info->fbcon_par; set_blitting_type()
678 info->flags &= ~FBINFO_MISC_TILEBLITTING; set_blitting_type()
680 fbcon_set_rotation(info); set_blitting_type()
684 static int fbcon_invalid_charcount(struct fb_info *info, unsigned charcount) fbcon_invalid_charcount() argument
692 static int con2fb_acquire_newinfo(struct vc_data *vc, struct fb_info *info, con2fb_acquire_newinfo() argument
698 if (!try_module_get(info->fbops->owner)) con2fb_acquire_newinfo()
701 if (!err && info->fbops->fb_open && con2fb_acquire_newinfo()
702 info->fbops->fb_open(info, 0)) con2fb_acquire_newinfo()
712 info->fbcon_par = ops; con2fb_acquire_newinfo()
715 set_blitting_type(vc, info); con2fb_acquire_newinfo()
720 module_put(info->fbops->owner); con2fb_acquire_newinfo()
772 static void con2fb_init_display(struct vc_data *vc, struct fb_info *info, con2fb_init_display() argument
775 struct fbcon_ops *ops = info->fbcon_par; con2fb_init_display()
780 if (info->fbops->fb_set_par && !(ops->flags & FBCON_FLAGS_INIT)) { con2fb_init_display()
781 ret = info->fbops->fb_set_par(info); con2fb_init_display()
791 fbcon_set_disp(info, &info->var, unit); con2fb_init_display()
821 struct fb_info *info = registered_fb[newidx]; set_con2fb_map() local
828 if (!info) set_con2fb_map()
843 err = con2fb_acquire_newinfo(vc, info, unit, oldidx); set_con2fb_map()
851 err = con2fb_release_oldinfo(vc, oldinfo, info, unit, oldidx, set_con2fb_map()
859 fbcon_add_cursor_timer(info); set_con2fb_map()
861 con2fb_init_display(vc, info, unit, show_logo); set_con2fb_map()
876 struct fb_info *info) var_to_display()
891 disp->mode = fb_match_mode(var, &info->modelist); var_to_display()
924 struct fb_info *info = NULL; fbcon_startup() local
938 info = registered_fb[info_idx]; fbcon_startup()
939 if (!info) fbcon_startup()
942 owner = info->fbops->owner; fbcon_startup()
945 if (info->fbops->fb_open && info->fbops->fb_open(info, 0)) { fbcon_startup()
959 info->fbcon_par = ops; fbcon_startup()
961 set_blitting_type(vc, info); fbcon_startup()
963 if (info->fix.type != FB_TYPE_TEXT) { fbcon_startup()
991 font = get_default_font(info->var.xres, fbcon_startup()
992 info->var.yres, fbcon_startup()
993 info->pixmap.blit_x, fbcon_startup()
994 info->pixmap.blit_y); fbcon_startup()
1003 cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); fbcon_startup()
1004 rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); fbcon_startup()
1009 DPRINTK("mode: %s\n", info->fix.id); fbcon_startup()
1010 DPRINTK("visual: %d\n", info->fix.visual); fbcon_startup()
1011 DPRINTK("res: %dx%d-%d\n", info->var.xres, fbcon_startup()
1012 info->var.yres, fbcon_startup()
1013 info->var.bits_per_pixel); fbcon_startup()
1015 fbcon_add_cursor_timer(info); fbcon_startup()
1022 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_init() local
1030 if (info_idx == -1 || info == NULL) fbcon_init()
1033 cap = info->flags; fbcon_init()
1036 (info->fix.type == FB_TYPE_TEXT)) fbcon_init()
1039 if (var_to_display(p, &info->var, info)) fbcon_init()
1042 if (!info->fbcon_par) fbcon_init()
1043 con2fb_acquire_newinfo(vc, info, vc->vc_num, -1); fbcon_init()
1064 font = get_default_font(info->var.xres, fbcon_init()
1065 info->var.yres, fbcon_init()
1066 info->pixmap.blit_x, fbcon_init()
1067 info->pixmap.blit_y); fbcon_init()
1079 vc->vc_panic_force_write = !!(info->flags & FBINFO_CAN_FORCE_OUTPUT); fbcon_init()
1080 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); fbcon_init()
1095 ops = info->fbcon_par; fbcon_init()
1097 set_blitting_type(vc, info); fbcon_init()
1101 new_cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); fbcon_init()
1102 new_rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); fbcon_init()
1114 if (info->fbops->fb_set_par && fbcon_init()
1116 ret = info->fbops->fb_set_par(info); fbcon_init()
1147 fbcon_prepare_logo(vc, info, cols, rows, new_cols, new_rows); fbcon_init()
1152 if (ops->rotate_font && ops->rotate_font(info, vc)) { fbcon_init()
1154 set_blitting_type(vc, info); fbcon_init()
1171 struct fb_info *info; fbcon_deinit() local
1181 info = registered_fb[idx]; fbcon_deinit()
1183 if (!info) fbcon_deinit()
1186 if (info->flags & FBINFO_MISC_FIRMWARE) fbcon_deinit()
1188 ops = info->fbcon_par; fbcon_deinit()
1194 fbcon_del_cursor_timer(info); fbcon_deinit()
1237 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_clear() local
1238 struct fbcon_ops *ops = info->fbcon_par; fbcon_clear()
1243 if (fbcon_is_inactive(vc, info)) fbcon_clear()
1265 ops->clear(vc, info, real_y(p, sy), sx, b, width); fbcon_clear()
1266 ops->clear(vc, info, real_y(p, sy + b), sx, height - b, fbcon_clear()
1269 ops->clear(vc, info, real_y(p, sy), sx, height, width); fbcon_clear()
1275 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_putcs() local
1277 struct fbcon_ops *ops = info->fbcon_par; fbcon_putcs()
1279 if (!fbcon_is_inactive(vc, info)) fbcon_putcs()
1280 ops->putcs(vc, info, s, count, real_y(p, ypos), xpos, fbcon_putcs()
1281 get_color(vc, info, scr_readw(s), 1), fbcon_putcs()
1282 get_color(vc, info, scr_readw(s), 0)); fbcon_putcs()
1295 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_clear_margins() local
1296 struct fbcon_ops *ops = info->fbcon_par; fbcon_clear_margins()
1298 if (!fbcon_is_inactive(vc, info)) fbcon_clear_margins()
1299 ops->clear_margins(vc, info, bottom_only); fbcon_clear_margins()
1304 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_cursor() local
1305 struct fbcon_ops *ops = info->fbcon_par; fbcon_cursor()
1309 if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1) fbcon_cursor()
1313 fbcon_del_cursor_timer(info); fbcon_cursor()
1315 fbcon_add_cursor_timer(info); fbcon_cursor()
1327 ops->cursor(vc, info, mode, y, get_color(vc, info, c, 1), fbcon_cursor()
1328 get_color(vc, info, c, 0)); fbcon_cursor()
1335 static void fbcon_set_disp(struct fb_info *info, struct fb_var_screeninfo *var, fbcon_set_disp() argument
1341 struct fbcon_ops *ops = info->fbcon_par; fbcon_set_disp()
1346 if (var_to_display(p, var, info)) fbcon_set_disp()
1370 info->var.activate = var->activate; fbcon_set_disp()
1371 var->yoffset = info->var.yoffset; fbcon_set_disp()
1372 var->xoffset = info->var.xoffset; fbcon_set_disp()
1373 fb_set_var(info, var); fbcon_set_disp()
1374 ops->var = info->var; fbcon_set_disp()
1375 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); fbcon_set_disp()
1390 cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); fbcon_set_disp()
1391 rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); fbcon_set_disp()
1405 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; ywrap_up() local
1406 struct fbcon_ops *ops = info->fbcon_par; ywrap_up()
1415 ops->update_start(info); ywrap_up()
1424 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; ywrap_down() local
1425 struct fbcon_ops *ops = info->fbcon_par; ywrap_down()
1434 ops->update_start(info); ywrap_down()
1443 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; ypan_up() local
1445 struct fbcon_ops *ops = info->fbcon_par; ypan_up()
1449 ops->bmove(vc, info, p->vrows - vc->vc_rows, ypan_up()
1457 ops->update_start(info); ypan_up()
1467 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; ypan_up_redraw() local
1468 struct fbcon_ops *ops = info->fbcon_par; ypan_up_redraw()
1481 ops->update_start(info); ypan_up_redraw()
1491 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; ypan_down() local
1493 struct fbcon_ops *ops = info->fbcon_par; ypan_down()
1497 ops->bmove(vc, info, 0, 0, p->vrows - vc->vc_rows, ypan_down()
1505 ops->update_start(info); ypan_down()
1515 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; ypan_down_redraw() local
1516 struct fbcon_ops *ops = info->fbcon_par; ypan_down_redraw()
1529 ops->update_start(info); ypan_down_redraw()
1664 static void fbcon_redraw_blit(struct vc_data *vc, struct fb_info *info, fbcon_redraw_blit() argument
1671 struct fbcon_ops *ops = info->fbcon_par; fbcon_redraw_blit()
1684 ops->bmove(vc, info, line + ycount, x, fbcon_redraw_blit()
1700 ops->bmove(vc, info, line + ycount, x, line, x, 1, fbcon_redraw_blit()
1797 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_scroll() local
1799 int scroll_partial = info->flags & FBINFO_PARTIAL_PAN_OK; fbcon_scroll()
1801 if (fbcon_is_inactive(vc, info)) fbcon_scroll()
1822 fbcon_redraw_blit(vc, info, p, t, b - t - count, fbcon_scroll()
1843 } else if (info->flags & FBINFO_READS_FAST) fbcon_scroll()
1884 } else if (info->flags & FBINFO_READS_FAST) fbcon_scroll()
1913 fbcon_redraw_blit(vc, info, p, b - 1, b - t - count, fbcon_scroll()
1934 } else if (info->flags & FBINFO_READS_FAST) fbcon_scroll()
1956 } else if (info->flags & FBINFO_READS_FAST) fbcon_scroll()
2001 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_bmove() local
2004 if (fbcon_is_inactive(vc, info)) fbcon_bmove()
2024 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_bmove_rec() local
2025 struct fbcon_ops *ops = info->fbcon_par; fbcon_bmove_rec()
2059 ops->bmove(vc, info, real_y(p, sy), sx, real_y(p, dy), dx, fbcon_bmove_rec()
2064 struct fb_info *info, updatescrollmode()
2067 struct fbcon_ops *ops = info->fbcon_par; updatescrollmode()
2069 int cap = info->flags; updatescrollmode()
2071 int ypan = FBCON_SWAP(ops->rotate, info->fix.ypanstep, updatescrollmode()
2072 info->fix.xpanstep); updatescrollmode()
2073 int ywrap = FBCON_SWAP(ops->rotate, info->fix.ywrapstep, t); updatescrollmode()
2074 int yres = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); updatescrollmode()
2075 int vyres = FBCON_SWAP(ops->rotate, info->var.yres_virtual, updatescrollmode()
2076 info->var.xres_virtual); updatescrollmode()
2113 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_resize() local
2114 struct fbcon_ops *ops = info->fbcon_par; fbcon_resize()
2116 struct fb_var_screeninfo var = info->var; fbcon_resize()
2127 x_diff = info->var.xres - var.xres; fbcon_resize()
2128 y_diff = info->var.yres - var.yres; fbcon_resize()
2134 mode = fb_find_best_mode(&var, &info->modelist); fbcon_resize()
2147 fb_set_var(info, &var); fbcon_resize()
2149 var_to_display(p, &info->var, info); fbcon_resize()
2150 ops->var = info->var; fbcon_resize()
2152 updatescrollmode(p, info, vc); fbcon_resize()
2158 struct fb_info *info, *old_info = NULL; fbcon_switch() local
2164 info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_switch()
2165 ops = info->fbcon_par; fbcon_switch()
2189 * update all info->currcon. Perhaps, we can place this fbcon_switch()
2193 * info->currcon = vc->vc_num; fbcon_switch()
2210 info->var.activate = var.activate; fbcon_switch()
2211 var.vmode |= info->var.vmode & ~FB_VMODE_MASK; fbcon_switch()
2212 fb_set_var(info, &var); fbcon_switch()
2213 ops->var = info->var; fbcon_switch()
2215 if (old_info != NULL && (old_info != info || fbcon_switch()
2216 info->flags & FBINFO_MISC_ALWAYS_SETPAR)) { fbcon_switch()
2217 if (info->fbops->fb_set_par) { fbcon_switch()
2218 ret = info->fbops->fb_set_par(info); fbcon_switch()
2226 if (old_info != info) fbcon_switch()
2230 if (fbcon_is_inactive(vc, info) || fbcon_switch()
2232 fbcon_del_cursor_timer(info); fbcon_switch()
2234 fbcon_add_cursor_timer(info); fbcon_switch()
2236 set_blitting_type(vc, info); fbcon_switch()
2239 if (ops->rotate_font && ops->rotate_font(info, vc)) { fbcon_switch()
2241 set_blitting_type(vc, info); fbcon_switch()
2244 vc->vc_can_do_color = (fb_get_color_depth(&info->var, &info->fix)!=1); fbcon_switch()
2253 updatescrollmode(p, info, vc); fbcon_switch()
2273 if (!fbcon_is_inactive(vc, info)) { fbcon_switch()
2275 ops->update_start(info); fbcon_switch()
2285 fb_show_logo(info, ops->rotate); fbcon_switch()
2295 static void fbcon_generic_blank(struct vc_data *vc, struct fb_info *info, fbcon_generic_blank() argument
2312 if (!lock_fb_info(info)) fbcon_generic_blank()
2314 event.info = info; fbcon_generic_blank()
2317 unlock_fb_info(info); fbcon_generic_blank()
2322 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_blank() local
2323 struct fbcon_ops *ops = info->fbcon_par; fbcon_blank()
2326 struct fb_var_screeninfo var = info->var; fbcon_blank()
2332 fb_set_var(info, &var); fbcon_blank()
2334 ops->var = info->var; fbcon_blank()
2338 if (!fbcon_is_inactive(vc, info)) { fbcon_blank()
2344 if (!(info->flags & FBINFO_MISC_USEREVENT)) fbcon_blank()
2345 if (fb_blank(info, blank)) fbcon_blank()
2346 fbcon_generic_blank(vc, info, blank); fbcon_blank()
2353 if (mode_switch || fbcon_is_inactive(vc, info) || fbcon_blank()
2355 fbcon_del_cursor_timer(info); fbcon_blank()
2357 fbcon_add_cursor_timer(info); fbcon_blank()
2364 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_debug_enter() local
2365 struct fbcon_ops *ops = info->fbcon_par; fbcon_debug_enter()
2369 if (info->fbops->fb_debug_enter) fbcon_debug_enter()
2370 info->fbops->fb_debug_enter(info); fbcon_debug_enter()
2377 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_debug_leave() local
2378 struct fbcon_ops *ops = info->fbcon_par; fbcon_debug_leave()
2381 if (info->fbops->fb_debug_leave) fbcon_debug_leave()
2382 info->fbops->fb_debug_leave(info); fbcon_debug_leave()
2440 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_do_set_font() local
2441 struct fbcon_ops *ops = info->fbcon_par; fbcon_do_set_font()
2523 cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); fbcon_do_set_font()
2524 rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); fbcon_do_set_font()
2565 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_set_font() local
2580 if (!(info->pixmap.blit_x & (1 << (font->width - 1))) || fbcon_set_font()
2581 !(info->pixmap.blit_y & (1 << (font->height - 1)))) fbcon_set_font()
2585 if (fbcon_invalid_charcount(info, charcount)) fbcon_set_font()
2628 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_set_def_font() local
2632 f = get_default_font(info->var.xres, info->var.yres, fbcon_set_def_font()
2633 info->pixmap.blit_x, info->pixmap.blit_y); fbcon_set_def_font()
2652 struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]]; fbcon_set_palette() local
2656 if (fbcon_is_inactive(vc, info)) fbcon_set_palette()
2662 depth = fb_get_color_depth(&info->var, &info->fix); fbcon_set_palette()
2682 return fb_set_cmap(&palette_cmap, info); fbcon_set_palette()
2765 struct fb_info *info = registered_fb[con2fb_map[fg_console]]; fbcon_scrolldelta() local
2766 struct fbcon_ops *ops = info->fbcon_par; fbcon_scrolldelta()
2822 if (fbcon_is_inactive(vc, info)) fbcon_scrolldelta()
2831 info->var.vmode |= FB_VMODE_YWRAP; fbcon_scrolldelta()
2836 info->var.vmode &= ~FB_VMODE_YWRAP; fbcon_scrolldelta()
2846 ops->update_start(info); fbcon_scrolldelta()
2860 static void fbcon_suspended(struct fb_info *info) fbcon_suspended() argument
2863 struct fbcon_ops *ops = info->fbcon_par; fbcon_suspended()
2873 static void fbcon_resumed(struct fb_info *info) fbcon_resumed() argument
2876 struct fbcon_ops *ops = info->fbcon_par; fbcon_resumed()
2885 static void fbcon_modechanged(struct fb_info *info) fbcon_modechanged() argument
2887 struct fbcon_ops *ops = info->fbcon_par; fbcon_modechanged()
2896 registered_fb[con2fb_map[ops->currcon]] != info) fbcon_modechanged()
2900 set_blitting_type(vc, info); fbcon_modechanged()
2903 var_to_display(p, &info->var, info); fbcon_modechanged()
2904 cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); fbcon_modechanged()
2905 rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); fbcon_modechanged()
2909 updatescrollmode(p, info, vc); fbcon_modechanged()
2913 if (!fbcon_is_inactive(vc, info)) { fbcon_modechanged()
2915 ops->update_start(info); fbcon_modechanged()
2925 static void fbcon_set_all_vcs(struct fb_info *info) fbcon_set_all_vcs() argument
2927 struct fbcon_ops *ops = info->fbcon_par; fbcon_set_all_vcs()
2938 registered_fb[con2fb_map[i]] != info) fbcon_set_all_vcs()
2947 set_blitting_type(vc, info); fbcon_set_all_vcs()
2948 var_to_display(p, &info->var, info); fbcon_set_all_vcs()
2949 cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres); fbcon_set_all_vcs()
2950 rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres); fbcon_set_all_vcs()
2957 fbcon_modechanged(info); fbcon_set_all_vcs()
2960 static int fbcon_mode_deleted(struct fb_info *info, fbcon_mode_deleted() argument
2973 if (fb_info != info) fbcon_mode_deleted()
3028 struct fb_info *info = registered_fb[idx]; fbcon_fb_unbind() local
3041 info, NULL, i, fbcon_fb_unbind()
3057 static int fbcon_fb_unregistered(struct fb_info *info) fbcon_fb_unregistered() argument
3061 idx = info->node; fbcon_fb_unregistered()
3110 static void fbcon_select_primary(struct fb_info *info) fbcon_select_primary() argument
3113 fb_is_primary_device(info)) { fbcon_select_primary()
3117 info->fix.id, info->node); fbcon_select_primary()
3118 primary_device = info->node; fbcon_select_primary()
3125 "fb%i, to tty %i-%i\n", info->node, fbcon_select_primary()
3133 static inline void fbcon_select_primary(struct fb_info *info) fbcon_select_primary() argument
3140 static int fbcon_fb_registered(struct fb_info *info) fbcon_fb_registered() argument
3144 idx = info->node; fbcon_fb_registered()
3145 fbcon_select_primary(info); fbcon_fb_registered()
3167 static void fbcon_fb_blanked(struct fb_info *info, int blank) fbcon_fb_blanked() argument
3169 struct fbcon_ops *ops = info->fbcon_par; fbcon_fb_blanked()
3177 registered_fb[con2fb_map[ops->currcon]] != info) fbcon_fb_blanked()
3189 static void fbcon_new_modelist(struct fb_info *info) fbcon_new_modelist() argument
3197 if (registered_fb[con2fb_map[i]] != info) fbcon_new_modelist()
3204 &info->modelist); fbcon_new_modelist()
3206 fbcon_set_disp(info, &var, vc->vc_num); fbcon_new_modelist()
3210 static void fbcon_get_requirement(struct fb_info *info, fbcon_get_requirement() argument
3222 info->node == con2fb_map[i]) { fbcon_get_requirement()
3236 info->node == con2fb_map[fg_console]) { fbcon_get_requirement()
3250 struct fb_info *info = event->info; fbcon_event_notify() local
3266 fbcon_suspended(info); fbcon_event_notify()
3269 fbcon_resumed(info); fbcon_event_notify()
3272 fbcon_modechanged(info); fbcon_event_notify()
3275 fbcon_set_all_vcs(info); fbcon_event_notify()
3279 ret = fbcon_mode_deleted(info, mode); fbcon_event_notify()
3282 idx = info->node; fbcon_event_notify()
3286 ret = fbcon_fb_registered(info); fbcon_event_notify()
3289 ret = fbcon_fb_unregistered(info); fbcon_event_notify()
3302 fbcon_fb_blanked(info, *(int *)event->data); fbcon_event_notify()
3305 fbcon_new_modelist(info); fbcon_event_notify()
3309 fbcon_get_requirement(info, caps); fbcon_event_notify()
3312 idx = info->node; fbcon_event_notify()
3360 struct fb_info *info; store_rotate() local
3373 info = registered_fb[idx]; store_rotate()
3375 fbcon_rotate(info, rotate); store_rotate()
3385 struct fb_info *info; store_rotate_all() local
3398 info = registered_fb[idx]; store_rotate_all()
3400 fbcon_rotate_all(info, rotate); store_rotate_all()
3409 struct fb_info *info; show_rotate() local
3421 info = registered_fb[idx]; show_rotate()
3422 rotate = fbcon_get_rotate(info); show_rotate()
3431 struct fb_info *info; show_cursor_blink() local
3444 info = registered_fb[idx]; show_cursor_blink()
3445 ops = info->fbcon_par; show_cursor_blink()
3460 struct fb_info *info; store_cursor_blink() local
3473 info = registered_fb[idx]; store_cursor_blink()
3475 if (!info->fbcon_par) store_cursor_blink()
3482 fbcon_add_cursor_timer(info); store_cursor_blink()
3485 fbcon_del_cursor_timer(info); store_cursor_blink()
3545 struct fb_info *info; fbcon_exit() local
3558 info = registered_fb[i]; fbcon_exit()
3560 if (info == NULL) fbcon_exit()
3563 if (info->queue.func) fbcon_exit()
3564 pending = cancel_work_sync(&info->queue); fbcon_exit()
3576 if (info->fbops->fb_release) fbcon_exit()
3577 info->fbops->fb_release(info, 0); fbcon_exit()
3578 module_put(info->fbops->owner); fbcon_exit()
3580 if (info->fbcon_par) { fbcon_exit()
3581 struct fbcon_ops *ops = info->fbcon_par; fbcon_exit()
3583 fbcon_del_cursor_timer(info); fbcon_exit()
3586 kfree(info->fbcon_par); fbcon_exit()
3587 info->fbcon_par = NULL; fbcon_exit()
3590 if (info->queue.func == fb_flashcursor) fbcon_exit()
3591 info->queue.func = NULL; fbcon_exit()
874 var_to_display(struct display *disp, struct fb_var_screeninfo *var, struct fb_info *info) var_to_display() argument
2063 updatescrollmode(struct display *p, struct fb_info *info, struct vc_data *vc) updatescrollmode() argument
H A Dfbcon_cw.c48 static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, cw_bmove() argument
51 struct fbcon_ops *ops = info->fbcon_par; cw_bmove()
53 u32 vxres = GETVXRES(ops->p->scrollmode, info); cw_bmove()
62 info->fbops->fb_copyarea(info, &area); cw_bmove()
65 static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy, cw_clear() argument
68 struct fbcon_ops *ops = info->fbcon_par; cw_clear()
71 u32 vxres = GETVXRES(ops->p->scrollmode, info); cw_clear()
73 region.color = attr_bgcol_ec(bgshift,vc,info); cw_clear()
80 info->fbops->fb_fillrect(info, &region); cw_clear()
83 static inline void cw_putcs_aligned(struct vc_data *vc, struct fb_info *info, cw_putcs_aligned() argument
88 struct fbcon_ops *ops = info->fbcon_par; cw_putcs_aligned()
111 info->fbops->fb_imageblit(info, image); cw_putcs_aligned()
114 static void cw_putcs(struct vc_data *vc, struct fb_info *info, cw_putcs() argument
119 struct fbcon_ops *ops = info->fbcon_par; cw_putcs()
122 u32 maxcnt = info->pixmap.size/cellsize; cw_putcs()
123 u32 scan_align = info->pixmap.scan_align - 1; cw_putcs()
124 u32 buf_align = info->pixmap.buf_align - 1; cw_putcs()
126 u32 attribute = get_attribute(info, scr_readw(s)); cw_putcs()
128 u32 vxres = GETVXRES(ops->p->scrollmode, info); cw_putcs()
157 dst = fb_get_buffer_offset(info, &info->pixmap, size); cw_putcs()
159 cw_putcs_aligned(vc, info, s, attribute, cnt, pitch, cw_putcs()
174 static void cw_clear_margins(struct vc_data *vc, struct fb_info *info, cw_clear_margins() argument
179 unsigned int rw = info->var.yres - (vc->vc_cols*cw); cw_clear_margins()
180 unsigned int bh = info->var.xres - (vc->vc_rows*ch); cw_clear_margins()
181 unsigned int rs = info->var.yres - rw; cw_clear_margins()
189 region.dy = info->var.yoffset + rs; cw_clear_margins()
191 region.width = info->var.xres_virtual; cw_clear_margins()
192 info->fbops->fb_fillrect(info, &region); cw_clear_margins()
196 region.dx = info->var.xoffset; cw_clear_margins()
197 region.dy = info->var.yoffset; cw_clear_margins()
198 region.height = info->var.yres; cw_clear_margins()
200 info->fbops->fb_fillrect(info, &region); cw_clear_margins()
204 static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode, cw_cursor() argument
208 struct fbcon_ops *ops = info->fbcon_par; cw_cursor()
215 u32 vxres = GETVXRES(ops->p->scrollmode, info); cw_cursor()
232 attribute = get_attribute(info, c); cw_cursor()
368 if (info->fbops->fb_cursor) cw_cursor()
369 err = info->fbops->fb_cursor(info, &cursor); cw_cursor()
372 soft_cursor(info, &cursor); cw_cursor()
377 static int cw_update_start(struct fb_info *info) cw_update_start() argument
379 struct fbcon_ops *ops = info->fbcon_par; cw_update_start()
380 u32 vxres = GETVXRES(ops->p->scrollmode, info); cw_update_start()
384 xoffset = vxres - (info->var.xres + ops->var.yoffset); cw_update_start()
387 err = fb_pan_display(info, &ops->var); cw_update_start()
388 ops->var.xoffset = info->var.xoffset; cw_update_start()
389 ops->var.yoffset = info->var.yoffset; cw_update_start()
390 ops->var.vmode = info->var.vmode; cw_update_start()
/linux-4.1.27/arch/ia64/hp/sim/
H A Dsimserial.c95 struct serial_state *info = dev_id; rs_interrupt_single() local
97 receive_chars(&info->port); rs_interrupt_single()
110 struct serial_state *info = tty->driver_data; rs_put_char() local
113 if (!info->xmit.buf) rs_put_char()
117 if (CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) == 0) { rs_put_char()
121 info->xmit.buf[info->xmit.head] = ch; rs_put_char()
122 info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1); rs_put_char()
127 static void transmit_chars(struct tty_struct *tty, struct serial_state *info, transmit_chars() argument
135 if (info->x_char) { transmit_chars()
136 char c = info->x_char; transmit_chars()
140 info->x_char = 0; transmit_chars()
145 if (info->xmit.head == info->xmit.tail || tty->stopped) { transmit_chars()
148 info->xmit.head, info->xmit.tail, tty->stopped); transmit_chars()
160 count = min(CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE), transmit_chars()
161 SERIAL_XMIT_SIZE - info->xmit.tail); transmit_chars()
162 console->write(console, info->xmit.buf+info->xmit.tail, count); transmit_chars()
164 info->xmit.tail = (info->xmit.tail+count) & (SERIAL_XMIT_SIZE-1); transmit_chars()
169 count = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); transmit_chars()
171 console->write(console, info->xmit.buf, count); transmit_chars()
172 info->xmit.tail += count; transmit_chars()
180 struct serial_state *info = tty->driver_data; rs_flush_chars() local
182 if (info->xmit.head == info->xmit.tail || tty->stopped || rs_flush_chars()
183 !info->xmit.buf) rs_flush_chars()
186 transmit_chars(tty, info, NULL); rs_flush_chars()
192 struct serial_state *info = tty->driver_data; rs_write() local
196 if (!info->xmit.buf) rs_write()
201 c = CIRC_SPACE_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_write()
207 memcpy(info->xmit.buf + info->xmit.head, buf, c); rs_write()
208 info->xmit.head = ((info->xmit.head + c) & rs_write()
218 if (CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) && rs_write()
220 transmit_chars(tty, info, NULL); rs_write()
227 struct serial_state *info = tty->driver_data; rs_write_room() local
229 return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_write_room()
234 struct serial_state *info = tty->driver_data; rs_chars_in_buffer() local
236 return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); rs_chars_in_buffer()
241 struct serial_state *info = tty->driver_data; rs_flush_buffer() local
245 info->xmit.head = info->xmit.tail = 0; rs_flush_buffer()
257 struct serial_state *info = tty->driver_data; rs_send_xchar() local
259 info->x_char = ch; rs_send_xchar()
265 transmit_chars(tty, info, NULL); rs_send_xchar()
287 struct serial_state *info = tty->driver_data; rs_unthrottle() local
290 if (info->x_char) rs_unthrottle()
291 info->x_char = 0; rs_unthrottle()
333 struct serial_state *info = container_of(port, struct serial_state, shutdown() local
338 if (info->irq) shutdown()
339 free_irq(info->irq, info); shutdown()
341 if (info->xmit.buf) { shutdown()
342 free_page((unsigned long) info->xmit.buf); shutdown()
343 info->xmit.buf = NULL; shutdown()
350 struct serial_state *info = tty->driver_data; rs_close() local
352 tty_port_close(&info->port, tty, filp); rs_close()
357 struct serial_state *info = tty->driver_data; rs_hangup() local
360 tty_port_hangup(&info->port); rs_hangup()
416 struct serial_state *info = rs_table + tty->index; rs_open() local
417 struct tty_port *port = &info->port; rs_open()
419 tty->driver_data = info; rs_open()
/linux-4.1.27/drivers/hid/
H A Dhid-picolcd_fb.c235 static void picolcd_fb_update(struct fb_info *info) picolcd_fb_update() argument
239 struct picolcd_fb_data *fbdata = info->par; picolcd_fb_update()
242 mutex_lock(&info->lock); picolcd_fb_update()
268 mutex_unlock(&info->lock); picolcd_fb_update()
272 mutex_lock(&info->lock); picolcd_fb_update()
287 mutex_unlock(&info->lock); picolcd_fb_update()
293 mutex_unlock(&info->lock); picolcd_fb_update()
297 static void picolcd_fb_fillrect(struct fb_info *info, picolcd_fb_fillrect() argument
300 if (!info->par) picolcd_fb_fillrect()
302 sys_fillrect(info, rect); picolcd_fb_fillrect()
304 schedule_delayed_work(&info->deferred_work, 0); picolcd_fb_fillrect()
308 static void picolcd_fb_copyarea(struct fb_info *info, picolcd_fb_copyarea() argument
311 if (!info->par) picolcd_fb_copyarea()
313 sys_copyarea(info, area); picolcd_fb_copyarea()
315 schedule_delayed_work(&info->deferred_work, 0); picolcd_fb_copyarea()
319 static void picolcd_fb_imageblit(struct fb_info *info, const struct fb_image *image) picolcd_fb_imageblit() argument
321 if (!info->par) picolcd_fb_imageblit()
323 sys_imageblit(info, image); picolcd_fb_imageblit()
325 schedule_delayed_work(&info->deferred_work, 0); picolcd_fb_imageblit()
332 static ssize_t picolcd_fb_write(struct fb_info *info, const char __user *buf, picolcd_fb_write() argument
336 if (!info->par) picolcd_fb_write()
338 ret = fb_sys_write(info, buf, count, ppos); picolcd_fb_write()
340 schedule_delayed_work(&info->deferred_work, 0); picolcd_fb_write()
344 static int picolcd_fb_blank(int blank, struct fb_info *info) picolcd_fb_blank() argument
350 static void picolcd_fb_destroy(struct fb_info *info) picolcd_fb_destroy() argument
352 struct picolcd_fb_data *fbdata = info->par; picolcd_fb_destroy()
355 fb_deferred_io_cleanup(info); picolcd_fb_destroy()
360 vfree((u8 *)info->fix.smem_start); picolcd_fb_destroy()
361 framebuffer_release(info); picolcd_fb_destroy()
364 static int picolcd_fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) picolcd_fb_check_var() argument
386 static int picolcd_set_par(struct fb_info *info) picolcd_set_par() argument
388 struct picolcd_fb_data *fbdata = info->par; picolcd_set_par()
390 if (info->var.bits_per_pixel == fbdata->bpp) picolcd_set_par()
393 if (info->var.bits_per_pixel != 1 && info->var.bits_per_pixel != 8) picolcd_set_par()
397 tmp_fb = kmalloc(PICOLCDFB_SIZE*info->var.bits_per_pixel, GFP_KERNEL); picolcd_set_par()
402 if (info->var.bits_per_pixel == 1) { picolcd_set_par()
413 info->fix.visual = FB_VISUAL_MONO01; picolcd_set_par()
414 info->fix.line_length = PICOLCDFB_WIDTH / 8; picolcd_set_par()
420 info->fix.visual = FB_VISUAL_DIRECTCOLOR; picolcd_set_par()
421 info->fix.line_length = PICOLCDFB_WIDTH; picolcd_set_par()
425 fbdata->bpp = info->var.bits_per_pixel; picolcd_set_par()
445 static void picolcd_fb_deferred_io(struct fb_info *info, struct list_head *pagelist) picolcd_fb_deferred_io() argument
447 picolcd_fb_update(info); picolcd_fb_deferred_io()
511 struct fb_info *info = NULL; picolcd_init_framebuffer() local
520 info = framebuffer_alloc(256 * sizeof(u32) + picolcd_init_framebuffer()
524 if (info == NULL) { picolcd_init_framebuffer()
529 info->fbdefio = info->par; picolcd_init_framebuffer()
530 *info->fbdefio = picolcd_fb_defio; picolcd_init_framebuffer()
531 info->par += sizeof(struct fb_deferred_io); picolcd_init_framebuffer()
532 palette = info->par; picolcd_init_framebuffer()
533 info->par += 256 * sizeof(u32); picolcd_init_framebuffer()
536 info->pseudo_palette = palette; picolcd_init_framebuffer()
537 info->fbops = &picolcdfb_ops; picolcd_init_framebuffer()
538 info->var = picolcdfb_var; picolcd_init_framebuffer()
539 info->fix = picolcdfb_fix; picolcd_init_framebuffer()
540 info->fix.smem_len = PICOLCDFB_SIZE*8; picolcd_init_framebuffer()
541 info->flags = FBINFO_FLAG_DEFAULT; picolcd_init_framebuffer()
543 fbdata = info->par; picolcd_init_framebuffer()
549 fbdata->vbitmap = info->par + sizeof(struct picolcd_fb_data); picolcd_init_framebuffer()
555 info->screen_base = (char __force __iomem *)fbdata->bitmap; picolcd_init_framebuffer()
556 info->fix.smem_start = (unsigned long)fbdata->bitmap; picolcd_init_framebuffer()
558 data->fb_info = info; picolcd_init_framebuffer()
572 fb_deferred_io_init(info); picolcd_init_framebuffer()
573 error = register_framebuffer(info); picolcd_init_framebuffer()
582 fb_deferred_io_cleanup(info); picolcd_init_framebuffer()
589 framebuffer_release(info); picolcd_init_framebuffer()
595 struct fb_info *info = data->fb_info; picolcd_exit_framebuffer() local
599 if (!info) picolcd_exit_framebuffer()
603 fbdata = info->par; picolcd_exit_framebuffer()
613 flush_delayed_work(&info->deferred_work); picolcd_exit_framebuffer()
616 unregister_framebuffer(info); picolcd_exit_framebuffer()

Completed in 5967 milliseconds

1234567891011>>