caif_dev.c (daab7fc734a53fdeaf844b7c03053118ad1769da) | caif_dev.c (b31fa5bad576cd8180a5ad70c648333b44320d44) |
---|---|
1/* 2 * CAIF Interface registration. 3 * Copyright (C) ST-Ericsson AB 2010 4 * Author: Sjur Brendeland/sjur.brandeland@stericsson.com 5 * License terms: GNU General Public License (GPL) version 2 6 * 7 * Borrowed heavily from file: pn_dev.c. Thanks to 8 * Remi Denis-Courmont <remi.denis-courmont@nokia.com> 9 * and Sakari Ailus <sakari.ailus@nokia.com> 10 */ 11 | 1/* 2 * CAIF Interface registration. 3 * Copyright (C) ST-Ericsson AB 2010 4 * Author: Sjur Brendeland/sjur.brandeland@stericsson.com 5 * License terms: GNU General Public License (GPL) version 2 6 * 7 * Borrowed heavily from file: pn_dev.c. Thanks to 8 * Remi Denis-Courmont <remi.denis-courmont@nokia.com> 9 * and Sakari Ailus <sakari.ailus@nokia.com> 10 */ 11 |
12#define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__ 13 |
|
12#include <linux/version.h> 13#include <linux/module.h> 14#include <linux/kernel.h> 15#include <linux/if_arp.h> 16#include <linux/net.h> 17#include <linux/netdevice.h> 18#include <linux/skbuff.h> 19#include <linux/sched.h> --- 189 unchanged lines hidden (view full) --- 209 int res = -EINVAL; 210 enum cfcnfg_phy_type phy_type; 211 212 if (dev->type != ARPHRD_CAIF) 213 return 0; 214 215 switch (what) { 216 case NETDEV_REGISTER: | 14#include <linux/version.h> 15#include <linux/module.h> 16#include <linux/kernel.h> 17#include <linux/if_arp.h> 18#include <linux/net.h> 19#include <linux/netdevice.h> 20#include <linux/skbuff.h> 21#include <linux/sched.h> --- 189 unchanged lines hidden (view full) --- 211 int res = -EINVAL; 212 enum cfcnfg_phy_type phy_type; 213 214 if (dev->type != ARPHRD_CAIF) 215 return 0; 216 217 switch (what) { 218 case NETDEV_REGISTER: |
217 pr_info("CAIF: %s():register %s\n", __func__, dev->name); | 219 pr_info("register %s\n", dev->name); |
218 caifd = caif_device_alloc(dev); 219 if (caifd == NULL) 220 break; 221 caifdev = netdev_priv(dev); 222 caifdev->flowctrl = dev_flowctrl; 223 atomic_set(&caifd->state, what); 224 res = 0; 225 break; 226 227 case NETDEV_UP: | 220 caifd = caif_device_alloc(dev); 221 if (caifd == NULL) 222 break; 223 caifdev = netdev_priv(dev); 224 caifdev->flowctrl = dev_flowctrl; 225 atomic_set(&caifd->state, what); 226 res = 0; 227 break; 228 229 case NETDEV_UP: |
228 pr_info("CAIF: %s(): up %s\n", __func__, dev->name); | 230 pr_info("up %s\n", dev->name); |
229 caifd = caif_get(dev); 230 if (caifd == NULL) 231 break; 232 caifdev = netdev_priv(dev); 233 if (atomic_read(&caifd->state) == NETDEV_UP) { | 231 caifd = caif_get(dev); 232 if (caifd == NULL) 233 break; 234 caifdev = netdev_priv(dev); 235 if (atomic_read(&caifd->state) == NETDEV_UP) { |
234 pr_info("CAIF: %s():%s already up\n", 235 __func__, dev->name); | 236 pr_info("%s already up\n", dev->name); |
236 break; 237 } 238 atomic_set(&caifd->state, what); 239 caifd->layer.transmit = transmit; 240 caifd->layer.modemcmd = modemcmd; 241 242 if (caifdev->use_frag) 243 phy_type = CFPHYTYPE_FRAG; --- 24 unchanged lines hidden (view full) --- 268 sizeof(caifd->layer.name) - 1); 269 caifd->layer.name[sizeof(caifd->layer.name) - 1] = 0; 270 break; 271 272 case NETDEV_GOING_DOWN: 273 caifd = caif_get(dev); 274 if (caifd == NULL) 275 break; | 237 break; 238 } 239 atomic_set(&caifd->state, what); 240 caifd->layer.transmit = transmit; 241 caifd->layer.modemcmd = modemcmd; 242 243 if (caifdev->use_frag) 244 phy_type = CFPHYTYPE_FRAG; --- 24 unchanged lines hidden (view full) --- 269 sizeof(caifd->layer.name) - 1); 270 caifd->layer.name[sizeof(caifd->layer.name) - 1] = 0; 271 break; 272 273 case NETDEV_GOING_DOWN: 274 caifd = caif_get(dev); 275 if (caifd == NULL) 276 break; |
276 pr_info("CAIF: %s():going down %s\n", __func__, dev->name); | 277 pr_info("going down %s\n", dev->name); |
277 278 if (atomic_read(&caifd->state) == NETDEV_GOING_DOWN || 279 atomic_read(&caifd->state) == NETDEV_DOWN) 280 break; 281 282 atomic_set(&caifd->state, what); 283 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) 284 return -EINVAL; --- 5 unchanged lines hidden (view full) --- 290 atomic_read(&caifd->in_use) == 0, 291 TIMEOUT); 292 break; 293 294 case NETDEV_DOWN: 295 caifd = caif_get(dev); 296 if (caifd == NULL) 297 break; | 278 279 if (atomic_read(&caifd->state) == NETDEV_GOING_DOWN || 280 atomic_read(&caifd->state) == NETDEV_DOWN) 281 break; 282 283 atomic_set(&caifd->state, what); 284 if (!caifd || !caifd->layer.up || !caifd->layer.up->ctrlcmd) 285 return -EINVAL; --- 5 unchanged lines hidden (view full) --- 291 atomic_read(&caifd->in_use) == 0, 292 TIMEOUT); 293 break; 294 295 case NETDEV_DOWN: 296 caifd = caif_get(dev); 297 if (caifd == NULL) 298 break; |
298 pr_info("CAIF: %s(): down %s\n", __func__, dev->name); | 299 pr_info("down %s\n", dev->name); |
299 if (atomic_read(&caifd->in_use)) | 300 if (atomic_read(&caifd->in_use)) |
300 pr_warning("CAIF: %s(): " 301 "Unregistering an active CAIF device: %s\n", 302 __func__, dev->name); | 301 pr_warn("Unregistering an active CAIF device: %s\n", 302 dev->name); |
303 cfcnfg_del_phy_layer(get_caif_conf(), &caifd->layer); 304 dev_put(dev); 305 atomic_set(&caifd->state, what); 306 break; 307 308 case NETDEV_UNREGISTER: 309 caifd = caif_get(dev); | 303 cfcnfg_del_phy_layer(get_caif_conf(), &caifd->layer); 304 dev_put(dev); 305 atomic_set(&caifd->state, what); 306 break; 307 308 case NETDEV_UNREGISTER: 309 caifd = caif_get(dev); |
310 pr_info("CAIF: %s(): unregister %s\n", __func__, dev->name); | 310 pr_info("unregister %s\n", dev->name); |
311 atomic_set(&caifd->state, what); 312 caif_device_destroy(dev); 313 break; 314 } 315 return 0; 316} 317 318static struct notifier_block caif_device_notifier = { --- 67 unchanged lines hidden (view full) --- 386}; 387 388/* Initialize Caif devices list */ 389static int __init caif_device_init(void) 390{ 391 int result; 392 cfg = cfcnfg_create(); 393 if (!cfg) { | 311 atomic_set(&caifd->state, what); 312 caif_device_destroy(dev); 313 break; 314 } 315 return 0; 316} 317 318static struct notifier_block caif_device_notifier = { --- 67 unchanged lines hidden (view full) --- 386}; 387 388/* Initialize Caif devices list */ 389static int __init caif_device_init(void) 390{ 391 int result; 392 cfg = cfcnfg_create(); 393 if (!cfg) { |
394 pr_warning("CAIF: %s(): can't create cfcnfg.\n", __func__); | 394 pr_warn("can't create cfcnfg\n"); |
395 goto err_cfcnfg_create_failed; 396 } 397 result = register_pernet_device(&caif_net_ops); 398 399 if (result) { 400 kfree(cfg); 401 cfg = NULL; 402 return result; --- 19 unchanged lines hidden --- | 395 goto err_cfcnfg_create_failed; 396 } 397 result = register_pernet_device(&caif_net_ops); 398 399 if (result) { 400 kfree(cfg); 401 cfg = NULL; 402 return result; --- 19 unchanged lines hidden --- |