/linux-4.1.27/arch/x86/um/asm/ |
H A D | mm_context.h | 37 #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 D | desc.h | 6 #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 D | i915_pciids.h | 38 #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 D | ethtool.c | 6 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 D | lib80211.c | 44 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 D | wext-compat.h | 14 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 D | core.c | 45 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 D | vga.c | 11 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 D | synclinkmp.c | 529 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 D | synclink_gt.c | 42 #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(¶ms, &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, ¶ms, 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 D | synclink.c | 601 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 D | mxser.c | 268 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 D | cyclades.c | 176 * 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 D | amiserial.c | 48 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 D | latch-addr-flash.c | 40 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 D | pxa2xx-flash.c | 52 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 D | rbtx4939-flash.c | 31 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 D | physmap.c | 36 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 D | plat-ram.c | 68 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 D | physmap_of.c | 42 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 D | sysinfo.c | 54 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 D | rtc-s3c.c | 60 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 D | rtc-max8997.c | 119 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 D | rtc-max77686.c | 115 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 D | rtc-max77802.c | 114 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 D | rtc-s5m.c | 163 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 D | rtc-88pm860x.c | 62 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 D | rtc-88pm80x.c | 63 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 D | rtc-tegra.c | 71 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 D | rtc-max8998.c | 113 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 D | xt_rateest.c | 20 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 D | xt_conntrack.c | 44 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 D | xt_set.c | 54 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 D | xt_physdev.c | 28 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 D | xt_iprange.c | 22 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 D | xt_owner.c | 22 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 D | xt_statistic.c | 34 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 D | xt_devgroup.c | 24 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 D | xt_IDLETIMER.c | 119 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 D | xt_dscp.c | 30 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 D | xt_NFQUEUE.c | 41 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 D | xt_HL.c | 32 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 D | xt_SECMARK.c | 36 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 D | xt_HMARK.c | 62 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 D | dma-api.c | 29 struct dma_info *info; get_dma_info() local 35 list_for_each_entry(info, ®istered_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, ®istered_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, ®istered_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, ®istered_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, ®istered_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, ®istered_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, ®istered_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 D | dm-bitset.c | 29 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 D | fas216.c | 18 * 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 D | powertec.c | 60 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 D | eesox.c | 72 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 D | cumana_2.c | 77 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 D | arxescsi.c | 42 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 D | pxa3xx_nand.c | 129 #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 D | omap_elm.c | 95 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 D | s3c2410.c | 103 * @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 D | uio_mf624.c | 46 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 D | uio_cif.c | 46 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 D | uio_sercos3.c | 51 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 D | uio_netx.c | 54 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 D | uio_aec.c | 83 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 D | sram.c | 44 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 D | ebt_limit.c | 37 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 D | ebt_ip.c | 30 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 D | ebt_ip6.c | 39 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 D | ebt_arp.c | 21 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 D | ebt_mark_m.c | 18 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 D | 88pm860x_charger.c | 119 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 D | 88pm860x_battery.c | 157 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 D | ltc2941-battery-gauge.c | 76 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(<c294x_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 D | ds2782_battery.c | 51 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, ¤t_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 D | axp288_fuel_gauge.c | 160 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 D | max8925_power.c | 88 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 D | z2_battery.c | 24 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 D | ep93xx-fb.c | 152 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 D | cobalt_lcdfb.c | 67 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 D | vt8623fb.c | 124 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 D | xen-fbfront.c | 73 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 D | sh7760fb.c | 73 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 D | q40fb.c | 56 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 D | bw2.c | 119 * @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 D | sunxvr2500.c | 16 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 D | p9100.c | 146 * @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 D | tcx.c | 125 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 D | arkfb.c | 132 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 D | sunxvr1000.c | 13 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 D | clps711x-fb.c | 49 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 D | atafb.h | 4 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 D | clps711xfb.c | 51 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 D | wmt_ge_rops.h | 3 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 D | vt8500lcdfb.c | 47 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 D | simplefb.c | 49 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 D | fb-puv3.c | 104 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 D | grvga.c | 84 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 D | pmag-aa-fb.c | 53 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 D | sunxvr500.c | 27 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 D | cg3.c | 130 * @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 D | pmagb-b-fb.c | 100 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 D | wm8505fb.c | 51 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 D | s3fb.c | 258 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 D | hyperv_fb.c | 215 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 D | hecubafb.c | 105 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 D | leo.c | 208 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 D | twl6040-vibra.c | 70 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 D | twl4030-vibra.c | 66 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 D | 88pm80x_onkey.c | 45 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 D | xen-kbdfront.c | 55 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 D | isdn_tty.c | 61 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 D | isdn_ttyfax.c | 25 #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 D | pll.c | 223 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 D | i2c.c | 71 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 D | vmap.c | 58 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 D | pmu.c | 66 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 D | pllgt215.c | 30 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 D | ep93xx-i2s.c | 84 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 D | ep93xx-ac97.c | 90 * 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 D | synclink_cs.c | 321 #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 D | camera.h | 8 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 D | bus_numa.c | 11 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 D | gx1fb_core.c | 100 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 D | gxfb_core.c | 139 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 D | lxfb_core.c | 248 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 D | exynos_adc.c | 121 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 D | vf610_adc.c | 187 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 D | rockchip_saradc.c | 64 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 D | extcon-arizona.c | 137 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 D | extcon-rt8973a.c | 238 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 D | extcon-usb-gpio.c | 58 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 D | extcon-sm5502.c | 227 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, ®_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 D | extcon-max14577.c | 182 * @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 D | extcon-max8997.c | 180 * @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 D | extcon-max77843.c | 218 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 D | extcon-max77693.c | 245 * @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 D | ab8500-ext.c | 62 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, ®val); 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 D | max8649.c | 64 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 D | bluecard_cs.c | 160 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 D | btuart_cs.c | 130 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 D | dtl1_cs.c | 129 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 D | bt3c_cs.c | 178 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 D | generic.c | 39 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 D | fb_sys_fops.c | 16 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 D | fbmem.c | 77 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 D | tty.c | 21 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 D | m5mols_controls.c | 133 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 D | crisv10.c | 159 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 D | 68328serial.c | 141 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 D | msm_smd_tty.c | 56 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 D | of_serial.c | 59 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 D | adm1275.c | 59 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 D | pmbus.c | 34 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 D | lm25066.c | 217 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 D | parisc-agp.c | 83 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 D | vmwgfx_fb.c | 70 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 D | hvc_xen.c | 204 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 D | quota_tree.c | 25 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 D | edd.c | 59 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 D | unwind.c | 170 /* 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 D | tls.c | 28 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 D | l2tp_netlink.c | 58 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 D | pata_at32.c | 92 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 D | ppi.c | 51 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 D | nv_accel.c | 72 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 D | nvidia.c | 302 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 D | xen-blkfront.c | 168 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 D | pinctrl-lantiq.c | 23 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 D | nl-mac.c | 149 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, ¶ms.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 D | ieee802154.h | 41 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 D | apm_emu.c | 28 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 D | st21nfca_se.c | 66 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 D | exynos-ppmu.c | 101 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 D | pwm-tipwmss.c | 38 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 D | xen-scsifront.c | 131 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 D | ion_cma_heap.c | 50 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 D | 8250_acorn.c | 44 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 D | hp6xx_apm.c | 32 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 D | nouveau_fbcon.c | 59 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 D | plock.c | 28 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 D | up.c | 10 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 D | mach64_cursor.c | 67 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 D | cpufreq_spudemand.c | 43 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 D | overlay-sysfs.c | 118 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 D | manager-sysfs.c | 130 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 D | overlay.c | 114 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 D | rheap.c | 45 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 D | tls.c | 30 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 D | mmap.c | 39 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 D | nseval.c | 56 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 D | psxface.c | 55 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 D | cfag12864bfb.c | 67 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 D | pinctrl-imx.c | 42 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 D | fbdev.c | 81 /* 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 D | cfg80211-wext.h | 24 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 D | mqueue.c | 91 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 D | diag.c | 19 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 D | cpuinfo.c | 49 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 D | noon010pc30.c | 245 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 D | traps_32.c | 93 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 D | tileblit.c | 19 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 D | fbcon.c | 185 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 D | fbcon_cw.c | 48 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, ®ion); 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, ®ion); 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, ®ion); 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 D | simserial.c | 95 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 D | hid-picolcd_fb.c | 235 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()
|