]> Git Repo - J-linux.git/blob - drivers/net/mctp/mctp-i2c.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / drivers / net / mctp / mctp-i2c.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Management Controller Transport Protocol (MCTP)
4  * Implements DMTF specification
5  * "DSP0237 Management Component Transport Protocol (MCTP) SMBus/I2C
6  * Transport Binding"
7  * https://www.dmtf.org/sites/default/files/standards/documents/DSP0237_1.2.0.pdf
8  *
9  * A netdev is created for each I2C bus that handles MCTP. In the case of an I2C
10  * mux topology a single I2C client is attached to the root of the mux topology,
11  * shared between all mux I2C busses underneath. For non-mux cases an I2C client
12  * is attached per netdev.
13  *
14  * mctp-i2c-controller.yml devicetree binding has further details.
15  *
16  * Copyright (c) 2022 Code Construct
17  * Copyright (c) 2022 Google
18  */
19
20 #include <linux/module.h>
21 #include <linux/netdevice.h>
22 #include <linux/i2c.h>
23 #include <linux/i2c-mux.h>
24 #include <linux/if_arp.h>
25 #include <net/mctp.h>
26 #include <net/mctpdevice.h>
27
28 /* byte_count is limited to u8 */
29 #define MCTP_I2C_MAXBLOCK 255
30 /* One byte is taken by source_slave */
31 #define MCTP_I2C_MAXMTU (MCTP_I2C_MAXBLOCK - 1)
32 #define MCTP_I2C_MINMTU (64 + 4)
33 /* Allow space for dest_address, command, byte_count, data, PEC */
34 #define MCTP_I2C_BUFSZ (3 + MCTP_I2C_MAXBLOCK + 1)
35 #define MCTP_I2C_MINLEN 8
36 #define MCTP_I2C_COMMANDCODE 0x0f
37 #define MCTP_I2C_TX_WORK_LEN 100
38 /* Sufficient for 64kB at min mtu */
39 #define MCTP_I2C_TX_QUEUE_LEN 1100
40
41 #define MCTP_I2C_OF_PROP "mctp-controller"
42
43 enum {
44         MCTP_I2C_FLOW_STATE_NEW = 0,
45         MCTP_I2C_FLOW_STATE_ACTIVE,
46         MCTP_I2C_FLOW_STATE_INVALID,
47 };
48
49 /* List of all struct mctp_i2c_client
50  * Lock protects driver_clients and also prevents adding/removing adapters
51  * during mctp_i2c_client probe/remove.
52  */
53 static DEFINE_MUTEX(driver_clients_lock);
54 static LIST_HEAD(driver_clients);
55
56 struct mctp_i2c_client;
57
58 /* The netdev structure. One of these per I2C adapter. */
59 struct mctp_i2c_dev {
60         struct net_device *ndev;
61         struct i2c_adapter *adapter;
62         struct mctp_i2c_client *client;
63         struct list_head list; /* For mctp_i2c_client.devs */
64
65         size_t rx_pos;
66         u8 rx_buffer[MCTP_I2C_BUFSZ];
67         struct completion rx_done;
68
69         struct task_struct *tx_thread;
70         wait_queue_head_t tx_wq;
71         struct sk_buff_head tx_queue;
72         u8 tx_scratch[MCTP_I2C_BUFSZ];
73
74         /* A fake entry in our tx queue to perform an unlock operation */
75         struct sk_buff unlock_marker;
76
77         /* Spinlock protects i2c_lock_count, release_count, allow_rx */
78         spinlock_t lock;
79         int i2c_lock_count;
80         int release_count;
81         /* Indicates that the netif is ready to receive incoming packets */
82         bool allow_rx;
83
84 };
85
86 /* The i2c client structure. One per hardware i2c bus at the top of the
87  * mux tree, shared by multiple netdevs
88  */
89 struct mctp_i2c_client {
90         struct i2c_client *client;
91         u8 lladdr;
92
93         struct mctp_i2c_dev *sel;
94         struct list_head devs;
95         spinlock_t sel_lock; /* Protects sel and devs */
96
97         struct list_head list; /* For driver_clients */
98 };
99
100 /* Header on the wire. */
101 struct mctp_i2c_hdr {
102         u8 dest_slave;
103         u8 command;
104         /* Count of bytes following byte_count, excluding PEC */
105         u8 byte_count;
106         u8 source_slave;
107 };
108
109 static int mctp_i2c_recv(struct mctp_i2c_dev *midev);
110 static int mctp_i2c_slave_cb(struct i2c_client *client,
111                              enum i2c_slave_event event, u8 *val);
112 static void mctp_i2c_ndo_uninit(struct net_device *dev);
113 static int mctp_i2c_ndo_open(struct net_device *dev);
114
115 static struct i2c_adapter *mux_root_adapter(struct i2c_adapter *adap)
116 {
117 #if IS_ENABLED(CONFIG_I2C_MUX)
118         return i2c_root_adapter(&adap->dev);
119 #else
120         /* In non-mux config all i2c adapters are root adapters */
121         return adap;
122 #endif
123 }
124
125 /* Creates a new i2c slave device attached to the root adapter.
126  * Sets up the slave callback.
127  * Must be called with a client on a root adapter.
128  */
129 static struct mctp_i2c_client *mctp_i2c_new_client(struct i2c_client *client)
130 {
131         struct mctp_i2c_client *mcli = NULL;
132         struct i2c_adapter *root = NULL;
133         int rc;
134
135         if (client->flags & I2C_CLIENT_TEN) {
136                 dev_err(&client->dev, "failed, MCTP requires a 7-bit I2C address, addr=0x%x\n",
137                         client->addr);
138                 rc = -EINVAL;
139                 goto err;
140         }
141
142         root = mux_root_adapter(client->adapter);
143         if (!root) {
144                 dev_err(&client->dev, "failed to find root adapter\n");
145                 rc = -ENOENT;
146                 goto err;
147         }
148         if (root != client->adapter) {
149                 dev_err(&client->dev,
150                         "A mctp-i2c-controller client cannot be placed on an I2C mux adapter.\n"
151                         " It should be placed on the mux tree root adapter\n"
152                         " then set mctp-controller property on adapters to attach\n");
153                 rc = -EINVAL;
154                 goto err;
155         }
156
157         mcli = kzalloc(sizeof(*mcli), GFP_KERNEL);
158         if (!mcli) {
159                 rc = -ENOMEM;
160                 goto err;
161         }
162         spin_lock_init(&mcli->sel_lock);
163         INIT_LIST_HEAD(&mcli->devs);
164         INIT_LIST_HEAD(&mcli->list);
165         mcli->lladdr = client->addr & 0xff;
166         mcli->client = client;
167         i2c_set_clientdata(client, mcli);
168
169         rc = i2c_slave_register(mcli->client, mctp_i2c_slave_cb);
170         if (rc < 0) {
171                 dev_err(&client->dev, "i2c register failed %d\n", rc);
172                 mcli->client = NULL;
173                 i2c_set_clientdata(client, NULL);
174                 goto err;
175         }
176
177         return mcli;
178 err:
179         if (mcli) {
180                 if (mcli->client)
181                         i2c_unregister_device(mcli->client);
182                 kfree(mcli);
183         }
184         return ERR_PTR(rc);
185 }
186
187 static void mctp_i2c_free_client(struct mctp_i2c_client *mcli)
188 {
189         int rc;
190
191         WARN_ON(!mutex_is_locked(&driver_clients_lock));
192         WARN_ON(!list_empty(&mcli->devs));
193         WARN_ON(mcli->sel); /* sanity check, no locking */
194
195         rc = i2c_slave_unregister(mcli->client);
196         /* Leak if it fails, we can't propagate errors upwards */
197         if (rc < 0)
198                 dev_err(&mcli->client->dev, "i2c unregister failed %d\n", rc);
199         else
200                 kfree(mcli);
201 }
202
203 /* Switch the mctp i2c device to receive responses.
204  * Call with sel_lock held
205  */
206 static void __mctp_i2c_device_select(struct mctp_i2c_client *mcli,
207                                      struct mctp_i2c_dev *midev)
208 {
209         assert_spin_locked(&mcli->sel_lock);
210         if (midev)
211                 dev_hold(midev->ndev);
212         if (mcli->sel)
213                 dev_put(mcli->sel->ndev);
214         mcli->sel = midev;
215 }
216
217 /* Switch the mctp i2c device to receive responses */
218 static void mctp_i2c_device_select(struct mctp_i2c_client *mcli,
219                                    struct mctp_i2c_dev *midev)
220 {
221         unsigned long flags;
222
223         spin_lock_irqsave(&mcli->sel_lock, flags);
224         __mctp_i2c_device_select(mcli, midev);
225         spin_unlock_irqrestore(&mcli->sel_lock, flags);
226 }
227
228 static int mctp_i2c_slave_cb(struct i2c_client *client,
229                              enum i2c_slave_event event, u8 *val)
230 {
231         struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
232         struct mctp_i2c_dev *midev = NULL;
233         unsigned long flags;
234         int rc = 0;
235
236         spin_lock_irqsave(&mcli->sel_lock, flags);
237         midev = mcli->sel;
238         if (midev)
239                 dev_hold(midev->ndev);
240         spin_unlock_irqrestore(&mcli->sel_lock, flags);
241
242         if (!midev)
243                 return 0;
244
245         switch (event) {
246         case I2C_SLAVE_WRITE_RECEIVED:
247                 if (midev->rx_pos < MCTP_I2C_BUFSZ) {
248                         midev->rx_buffer[midev->rx_pos] = *val;
249                         midev->rx_pos++;
250                 } else {
251                         midev->ndev->stats.rx_over_errors++;
252                 }
253
254                 break;
255         case I2C_SLAVE_WRITE_REQUESTED:
256                 /* dest_slave as first byte */
257                 midev->rx_buffer[0] = mcli->lladdr << 1;
258                 midev->rx_pos = 1;
259                 break;
260         case I2C_SLAVE_STOP:
261                 rc = mctp_i2c_recv(midev);
262                 break;
263         default:
264                 break;
265         }
266
267         dev_put(midev->ndev);
268         return rc;
269 }
270
271 /* Processes incoming data that has been accumulated by the slave cb */
272 static int mctp_i2c_recv(struct mctp_i2c_dev *midev)
273 {
274         struct net_device *ndev = midev->ndev;
275         struct mctp_i2c_hdr *hdr;
276         struct mctp_skb_cb *cb;
277         struct sk_buff *skb;
278         unsigned long flags;
279         u8 pec, calc_pec;
280         size_t recvlen;
281         int status;
282
283         /* + 1 for the PEC */
284         if (midev->rx_pos < MCTP_I2C_MINLEN + 1) {
285                 ndev->stats.rx_length_errors++;
286                 return -EINVAL;
287         }
288         /* recvlen excludes PEC */
289         recvlen = midev->rx_pos - 1;
290
291         hdr = (void *)midev->rx_buffer;
292         if (hdr->command != MCTP_I2C_COMMANDCODE) {
293                 ndev->stats.rx_dropped++;
294                 return -EINVAL;
295         }
296
297         if (hdr->byte_count + offsetof(struct mctp_i2c_hdr, source_slave) != recvlen) {
298                 ndev->stats.rx_length_errors++;
299                 return -EINVAL;
300         }
301
302         pec = midev->rx_buffer[midev->rx_pos - 1];
303         calc_pec = i2c_smbus_pec(0, midev->rx_buffer, recvlen);
304         if (pec != calc_pec) {
305                 ndev->stats.rx_crc_errors++;
306                 return -EINVAL;
307         }
308
309         skb = netdev_alloc_skb(ndev, recvlen);
310         if (!skb) {
311                 ndev->stats.rx_dropped++;
312                 return -ENOMEM;
313         }
314
315         skb->protocol = htons(ETH_P_MCTP);
316         skb_put_data(skb, midev->rx_buffer, recvlen);
317         skb_reset_mac_header(skb);
318         skb_pull(skb, sizeof(struct mctp_i2c_hdr));
319         skb_reset_network_header(skb);
320
321         cb = __mctp_cb(skb);
322         cb->halen = 1;
323         cb->haddr[0] = hdr->source_slave >> 1;
324
325         /* We need to ensure that the netif is not used once netdev
326          * unregister occurs
327          */
328         spin_lock_irqsave(&midev->lock, flags);
329         if (midev->allow_rx) {
330                 reinit_completion(&midev->rx_done);
331                 spin_unlock_irqrestore(&midev->lock, flags);
332
333                 status = netif_rx(skb);
334                 complete(&midev->rx_done);
335         } else {
336                 status = NET_RX_DROP;
337                 spin_unlock_irqrestore(&midev->lock, flags);
338         }
339
340         if (status == NET_RX_SUCCESS) {
341                 ndev->stats.rx_packets++;
342                 ndev->stats.rx_bytes += recvlen;
343         } else {
344                 ndev->stats.rx_dropped++;
345         }
346         return 0;
347 }
348
349 enum mctp_i2c_flow_state {
350         MCTP_I2C_TX_FLOW_INVALID,
351         MCTP_I2C_TX_FLOW_NONE,
352         MCTP_I2C_TX_FLOW_NEW,
353         MCTP_I2C_TX_FLOW_EXISTING,
354 };
355
356 static enum mctp_i2c_flow_state
357 mctp_i2c_get_tx_flow_state(struct mctp_i2c_dev *midev, struct sk_buff *skb)
358 {
359         enum mctp_i2c_flow_state state;
360         struct mctp_sk_key *key;
361         struct mctp_flow *flow;
362         unsigned long flags;
363
364         flow = skb_ext_find(skb, SKB_EXT_MCTP);
365         if (!flow)
366                 return MCTP_I2C_TX_FLOW_NONE;
367
368         key = flow->key;
369         if (!key)
370                 return MCTP_I2C_TX_FLOW_NONE;
371
372         spin_lock_irqsave(&key->lock, flags);
373         /* If the key is present but invalid, we're unlikely to be able
374          * to handle the flow at all; just drop now
375          */
376         if (!key->valid) {
377                 state = MCTP_I2C_TX_FLOW_INVALID;
378         } else {
379                 switch (key->dev_flow_state) {
380                 case MCTP_I2C_FLOW_STATE_NEW:
381                         key->dev_flow_state = MCTP_I2C_FLOW_STATE_ACTIVE;
382                         state = MCTP_I2C_TX_FLOW_NEW;
383                         break;
384                 case MCTP_I2C_FLOW_STATE_ACTIVE:
385                         state = MCTP_I2C_TX_FLOW_EXISTING;
386                         break;
387                 default:
388                         state = MCTP_I2C_TX_FLOW_INVALID;
389                 }
390         }
391
392         spin_unlock_irqrestore(&key->lock, flags);
393
394         return state;
395 }
396
397 /* We're not contending with ourselves here; we only need to exclude other
398  * i2c clients from using the bus. refcounts are simply to prevent
399  * recursive locking.
400  */
401 static void mctp_i2c_lock_nest(struct mctp_i2c_dev *midev)
402 {
403         unsigned long flags;
404         bool lock;
405
406         spin_lock_irqsave(&midev->lock, flags);
407         lock = midev->i2c_lock_count == 0;
408         midev->i2c_lock_count++;
409         spin_unlock_irqrestore(&midev->lock, flags);
410
411         if (lock)
412                 i2c_lock_bus(midev->adapter, I2C_LOCK_SEGMENT);
413 }
414
415 static void mctp_i2c_unlock_nest(struct mctp_i2c_dev *midev)
416 {
417         unsigned long flags;
418         bool unlock;
419
420         spin_lock_irqsave(&midev->lock, flags);
421         if (!WARN_ONCE(midev->i2c_lock_count == 0, "lock count underflow!"))
422                 midev->i2c_lock_count--;
423         unlock = midev->i2c_lock_count == 0;
424         spin_unlock_irqrestore(&midev->lock, flags);
425
426         if (unlock)
427                 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
428 }
429
430 /* Unlocks the bus if was previously locked, used for cleanup */
431 static void mctp_i2c_unlock_reset(struct mctp_i2c_dev *midev)
432 {
433         unsigned long flags;
434         bool unlock;
435
436         spin_lock_irqsave(&midev->lock, flags);
437         unlock = midev->i2c_lock_count > 0;
438         midev->i2c_lock_count = 0;
439         spin_unlock_irqrestore(&midev->lock, flags);
440
441         if (unlock)
442                 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
443 }
444
445 static void mctp_i2c_invalidate_tx_flow(struct mctp_i2c_dev *midev,
446                                         struct sk_buff *skb)
447 {
448         struct mctp_sk_key *key;
449         struct mctp_flow *flow;
450         unsigned long flags;
451         bool release;
452
453         flow = skb_ext_find(skb, SKB_EXT_MCTP);
454         if (!flow)
455                 return;
456
457         key = flow->key;
458         if (!key)
459                 return;
460
461         spin_lock_irqsave(&key->lock, flags);
462         if (key->manual_alloc) {
463                 /* we don't have control over lifetimes for manually-allocated
464                  * keys, so cannot assume we can invalidate all future flows
465                  * that would use this key.
466                  */
467                 release = false;
468         } else {
469                 release = key->dev_flow_state == MCTP_I2C_FLOW_STATE_ACTIVE;
470                 key->dev_flow_state = MCTP_I2C_FLOW_STATE_INVALID;
471         }
472         spin_unlock_irqrestore(&key->lock, flags);
473
474         /* if we have changed state from active, the flow held a reference on
475          * the lock; release that now.
476          */
477         if (release)
478                 mctp_i2c_unlock_nest(midev);
479 }
480
481 static void mctp_i2c_xmit(struct mctp_i2c_dev *midev, struct sk_buff *skb)
482 {
483         struct net_device_stats *stats = &midev->ndev->stats;
484         enum mctp_i2c_flow_state fs;
485         struct mctp_i2c_hdr *hdr;
486         struct i2c_msg msg = {0};
487         u8 *pecp;
488         int rc;
489
490         fs = mctp_i2c_get_tx_flow_state(midev, skb);
491
492         hdr = (void *)skb_mac_header(skb);
493         /* Sanity check that packet contents matches skb length,
494          * and can't exceed MCTP_I2C_BUFSZ
495          */
496         if (skb->len != hdr->byte_count + 3) {
497                 dev_warn_ratelimited(&midev->adapter->dev,
498                                      "Bad tx length %d vs skb %u\n",
499                                      hdr->byte_count + 3, skb->len);
500                 return;
501         }
502
503         if (skb_tailroom(skb) >= 1) {
504                 /* Linear case with space, we can just append the PEC */
505                 skb_put(skb, 1);
506         } else {
507                 /* Otherwise need to copy the buffer */
508                 skb_copy_bits(skb, 0, midev->tx_scratch, skb->len);
509                 hdr = (void *)midev->tx_scratch;
510         }
511
512         pecp = (void *)&hdr->source_slave + hdr->byte_count;
513         *pecp = i2c_smbus_pec(0, (u8 *)hdr, hdr->byte_count + 3);
514         msg.buf = (void *)&hdr->command;
515         /* command, bytecount, data, pec */
516         msg.len = 2 + hdr->byte_count + 1;
517         msg.addr = hdr->dest_slave >> 1;
518
519         switch (fs) {
520         case MCTP_I2C_TX_FLOW_NONE:
521                 /* no flow: full lock & unlock */
522                 mctp_i2c_lock_nest(midev);
523                 mctp_i2c_device_select(midev->client, midev);
524                 rc = __i2c_transfer(midev->adapter, &msg, 1);
525                 mctp_i2c_unlock_nest(midev);
526                 break;
527
528         case MCTP_I2C_TX_FLOW_NEW:
529                 /* new flow: lock, tx, but don't unlock; that will happen
530                  * on flow release
531                  */
532                 mctp_i2c_lock_nest(midev);
533                 mctp_i2c_device_select(midev->client, midev);
534                 fallthrough;
535
536         case MCTP_I2C_TX_FLOW_EXISTING:
537                 /* existing flow: we already have the lock; just tx */
538                 rc = __i2c_transfer(midev->adapter, &msg, 1);
539
540                 /* on tx errors, the flow can no longer be considered valid */
541                 if (rc)
542                         mctp_i2c_invalidate_tx_flow(midev, skb);
543
544                 break;
545
546         case MCTP_I2C_TX_FLOW_INVALID:
547                 return;
548         }
549
550         if (rc < 0) {
551                 dev_warn_ratelimited(&midev->adapter->dev,
552                                      "__i2c_transfer failed %d\n", rc);
553                 stats->tx_errors++;
554         } else {
555                 stats->tx_bytes += skb->len;
556                 stats->tx_packets++;
557         }
558 }
559
560 static void mctp_i2c_flow_release(struct mctp_i2c_dev *midev)
561 {
562         unsigned long flags;
563         bool unlock;
564
565         spin_lock_irqsave(&midev->lock, flags);
566         if (midev->release_count > midev->i2c_lock_count) {
567                 WARN_ONCE(1, "release count overflow");
568                 midev->release_count = midev->i2c_lock_count;
569         }
570
571         midev->i2c_lock_count -= midev->release_count;
572         unlock = midev->i2c_lock_count == 0 && midev->release_count > 0;
573         midev->release_count = 0;
574         spin_unlock_irqrestore(&midev->lock, flags);
575
576         if (unlock)
577                 i2c_unlock_bus(midev->adapter, I2C_LOCK_SEGMENT);
578 }
579
580 static int mctp_i2c_header_create(struct sk_buff *skb, struct net_device *dev,
581                                   unsigned short type, const void *daddr,
582            const void *saddr, unsigned int len)
583 {
584         struct mctp_i2c_hdr *hdr;
585         struct mctp_hdr *mhdr;
586         u8 lldst, llsrc;
587
588         if (len > MCTP_I2C_MAXMTU)
589                 return -EMSGSIZE;
590
591         if (!daddr || !saddr)
592                 return -EINVAL;
593
594         lldst = *((u8 *)daddr);
595         llsrc = *((u8 *)saddr);
596
597         skb_push(skb, sizeof(struct mctp_i2c_hdr));
598         skb_reset_mac_header(skb);
599         hdr = (void *)skb_mac_header(skb);
600         mhdr = mctp_hdr(skb);
601         hdr->dest_slave = (lldst << 1) & 0xff;
602         hdr->command = MCTP_I2C_COMMANDCODE;
603         hdr->byte_count = len + 1;
604         hdr->source_slave = ((llsrc << 1) & 0xff) | 0x01;
605         mhdr->ver = 0x01;
606
607         return sizeof(struct mctp_i2c_hdr);
608 }
609
610 static int mctp_i2c_tx_thread(void *data)
611 {
612         struct mctp_i2c_dev *midev = data;
613         struct sk_buff *skb;
614         unsigned long flags;
615
616         for (;;) {
617                 if (kthread_should_stop())
618                         break;
619
620                 spin_lock_irqsave(&midev->tx_queue.lock, flags);
621                 skb = __skb_dequeue(&midev->tx_queue);
622                 if (netif_queue_stopped(midev->ndev))
623                         netif_wake_queue(midev->ndev);
624                 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
625
626                 if (skb == &midev->unlock_marker) {
627                         mctp_i2c_flow_release(midev);
628
629                 } else if (skb) {
630                         mctp_i2c_xmit(midev, skb);
631                         kfree_skb(skb);
632
633                 } else {
634                         wait_event_idle(midev->tx_wq,
635                                         !skb_queue_empty(&midev->tx_queue) ||
636                                    kthread_should_stop());
637                 }
638         }
639
640         return 0;
641 }
642
643 static netdev_tx_t mctp_i2c_start_xmit(struct sk_buff *skb,
644                                        struct net_device *dev)
645 {
646         struct mctp_i2c_dev *midev = netdev_priv(dev);
647         unsigned long flags;
648
649         spin_lock_irqsave(&midev->tx_queue.lock, flags);
650         if (skb_queue_len(&midev->tx_queue) >= MCTP_I2C_TX_WORK_LEN) {
651                 netif_stop_queue(dev);
652                 spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
653                 netdev_err(dev, "BUG! Tx Ring full when queue awake!\n");
654                 return NETDEV_TX_BUSY;
655         }
656
657         __skb_queue_tail(&midev->tx_queue, skb);
658         if (skb_queue_len(&midev->tx_queue) == MCTP_I2C_TX_WORK_LEN)
659                 netif_stop_queue(dev);
660         spin_unlock_irqrestore(&midev->tx_queue.lock, flags);
661
662         wake_up(&midev->tx_wq);
663         return NETDEV_TX_OK;
664 }
665
666 static void mctp_i2c_release_flow(struct mctp_dev *mdev,
667                                   struct mctp_sk_key *key)
668
669 {
670         struct mctp_i2c_dev *midev = netdev_priv(mdev->dev);
671         bool queue_release = false;
672         unsigned long flags;
673
674         spin_lock_irqsave(&midev->lock, flags);
675         /* if we have seen the flow/key previously, we need to pair the
676          * original lock with a release
677          */
678         if (key->dev_flow_state == MCTP_I2C_FLOW_STATE_ACTIVE) {
679                 midev->release_count++;
680                 queue_release = true;
681         }
682         key->dev_flow_state = MCTP_I2C_FLOW_STATE_INVALID;
683         spin_unlock_irqrestore(&midev->lock, flags);
684
685         if (queue_release) {
686                 /* Ensure we have a release operation queued, through the fake
687                  * marker skb
688                  */
689                 spin_lock(&midev->tx_queue.lock);
690                 if (!midev->unlock_marker.next)
691                         __skb_queue_tail(&midev->tx_queue,
692                                          &midev->unlock_marker);
693                 spin_unlock(&midev->tx_queue.lock);
694                 wake_up(&midev->tx_wq);
695         }
696 }
697
698 static const struct net_device_ops mctp_i2c_ops = {
699         .ndo_start_xmit = mctp_i2c_start_xmit,
700         .ndo_uninit = mctp_i2c_ndo_uninit,
701         .ndo_open = mctp_i2c_ndo_open,
702 };
703
704 static const struct header_ops mctp_i2c_headops = {
705         .create = mctp_i2c_header_create,
706 };
707
708 static const struct mctp_netdev_ops mctp_i2c_mctp_ops = {
709         .release_flow = mctp_i2c_release_flow,
710 };
711
712 static void mctp_i2c_net_setup(struct net_device *dev)
713 {
714         dev->type = ARPHRD_MCTP;
715
716         dev->mtu = MCTP_I2C_MAXMTU;
717         dev->min_mtu = MCTP_I2C_MINMTU;
718         dev->max_mtu = MCTP_I2C_MAXMTU;
719         dev->tx_queue_len = MCTP_I2C_TX_QUEUE_LEN;
720
721         dev->hard_header_len = sizeof(struct mctp_i2c_hdr);
722         dev->addr_len = 1;
723
724         dev->netdev_ops         = &mctp_i2c_ops;
725         dev->header_ops         = &mctp_i2c_headops;
726 }
727
728 /* Populates the mctp_i2c_dev priv struct for a netdev.
729  * Returns an error pointer on failure.
730  */
731 static struct mctp_i2c_dev *mctp_i2c_midev_init(struct net_device *dev,
732                                                 struct mctp_i2c_client *mcli,
733                                                 struct i2c_adapter *adap)
734 {
735         struct mctp_i2c_dev *midev = netdev_priv(dev);
736         unsigned long flags;
737
738         midev->tx_thread = kthread_create(mctp_i2c_tx_thread, midev,
739                                           "%s/tx", dev->name);
740         if (IS_ERR(midev->tx_thread))
741                 return ERR_CAST(midev->tx_thread);
742
743         midev->ndev = dev;
744         get_device(&adap->dev);
745         midev->adapter = adap;
746         get_device(&mcli->client->dev);
747         midev->client = mcli;
748         INIT_LIST_HEAD(&midev->list);
749         spin_lock_init(&midev->lock);
750         midev->i2c_lock_count = 0;
751         midev->release_count = 0;
752         init_completion(&midev->rx_done);
753         complete(&midev->rx_done);
754         init_waitqueue_head(&midev->tx_wq);
755         skb_queue_head_init(&midev->tx_queue);
756
757         /* Add to the parent mcli */
758         spin_lock_irqsave(&mcli->sel_lock, flags);
759         list_add(&midev->list, &mcli->devs);
760         /* Select a device by default */
761         if (!mcli->sel)
762                 __mctp_i2c_device_select(mcli, midev);
763         spin_unlock_irqrestore(&mcli->sel_lock, flags);
764
765         /* Start the worker thread */
766         wake_up_process(midev->tx_thread);
767
768         return midev;
769 }
770
771 /* Counterpart of mctp_i2c_midev_init */
772 static void mctp_i2c_midev_free(struct mctp_i2c_dev *midev)
773 {
774         struct mctp_i2c_client *mcli = midev->client;
775         unsigned long flags;
776
777         if (midev->tx_thread) {
778                 kthread_stop(midev->tx_thread);
779                 midev->tx_thread = NULL;
780         }
781
782         /* Unconditionally unlock on close */
783         mctp_i2c_unlock_reset(midev);
784
785         /* Remove the netdev from the parent i2c client. */
786         spin_lock_irqsave(&mcli->sel_lock, flags);
787         list_del(&midev->list);
788         if (mcli->sel == midev) {
789                 struct mctp_i2c_dev *first;
790
791                 first = list_first_entry_or_null(&mcli->devs, struct mctp_i2c_dev, list);
792                 __mctp_i2c_device_select(mcli, first);
793         }
794         spin_unlock_irqrestore(&mcli->sel_lock, flags);
795
796         skb_queue_purge(&midev->tx_queue);
797         put_device(&midev->adapter->dev);
798         put_device(&mcli->client->dev);
799 }
800
801 /* Stops, unregisters, and frees midev */
802 static void mctp_i2c_unregister(struct mctp_i2c_dev *midev)
803 {
804         unsigned long flags;
805
806         /* Stop tx thread prior to unregister, it uses netif_() functions */
807         kthread_stop(midev->tx_thread);
808         midev->tx_thread = NULL;
809
810         /* Prevent any new rx in mctp_i2c_recv(), let any pending work finish */
811         spin_lock_irqsave(&midev->lock, flags);
812         midev->allow_rx = false;
813         spin_unlock_irqrestore(&midev->lock, flags);
814         wait_for_completion(&midev->rx_done);
815
816         mctp_unregister_netdev(midev->ndev);
817         /* midev has been freed now by mctp_i2c_ndo_uninit callback */
818
819         free_netdev(midev->ndev);
820 }
821
822 static void mctp_i2c_ndo_uninit(struct net_device *dev)
823 {
824         struct mctp_i2c_dev *midev = netdev_priv(dev);
825
826         /* Perform cleanup here to ensure that mcli->sel isn't holding
827          * a reference that would prevent unregister_netdevice()
828          * from completing.
829          */
830         mctp_i2c_midev_free(midev);
831 }
832
833 static int mctp_i2c_ndo_open(struct net_device *dev)
834 {
835         struct mctp_i2c_dev *midev = netdev_priv(dev);
836         unsigned long flags;
837
838         /* i2c rx handler can only pass packets once the netdev is registered */
839         spin_lock_irqsave(&midev->lock, flags);
840         midev->allow_rx = true;
841         spin_unlock_irqrestore(&midev->lock, flags);
842
843         return 0;
844 }
845
846 static int mctp_i2c_add_netdev(struct mctp_i2c_client *mcli,
847                                struct i2c_adapter *adap)
848 {
849         struct mctp_i2c_dev *midev = NULL;
850         struct net_device *ndev = NULL;
851         struct i2c_adapter *root;
852         unsigned long flags;
853         char namebuf[30];
854         int rc;
855
856         root = mux_root_adapter(adap);
857         if (root != mcli->client->adapter) {
858                 dev_err(&mcli->client->dev,
859                         "I2C adapter %s is not a child bus of %s\n",
860                         mcli->client->adapter->name, root->name);
861                 return -EINVAL;
862         }
863
864         WARN_ON(!mutex_is_locked(&driver_clients_lock));
865         snprintf(namebuf, sizeof(namebuf), "mctpi2c%d", adap->nr);
866         ndev = alloc_netdev(sizeof(*midev), namebuf, NET_NAME_ENUM, mctp_i2c_net_setup);
867         if (!ndev) {
868                 dev_err(&mcli->client->dev, "alloc netdev failed\n");
869                 rc = -ENOMEM;
870                 goto err;
871         }
872         dev_net_set(ndev, current->nsproxy->net_ns);
873         SET_NETDEV_DEV(ndev, &adap->dev);
874         dev_addr_set(ndev, &mcli->lladdr);
875
876         midev = mctp_i2c_midev_init(ndev, mcli, adap);
877         if (IS_ERR(midev)) {
878                 rc = PTR_ERR(midev);
879                 midev = NULL;
880                 goto err;
881         }
882
883         rc = mctp_register_netdev(ndev, &mctp_i2c_mctp_ops,
884                                   MCTP_PHYS_BINDING_SMBUS);
885         if (rc < 0) {
886                 dev_err(&mcli->client->dev,
887                         "register netdev \"%s\" failed %d\n",
888                         ndev->name, rc);
889                 goto err;
890         }
891
892         spin_lock_irqsave(&midev->lock, flags);
893         midev->allow_rx = false;
894         spin_unlock_irqrestore(&midev->lock, flags);
895
896         return 0;
897 err:
898         if (midev)
899                 mctp_i2c_midev_free(midev);
900         if (ndev)
901                 free_netdev(ndev);
902         return rc;
903 }
904
905 /* Removes any netdev for adap. mcli is the parent root i2c client */
906 static void mctp_i2c_remove_netdev(struct mctp_i2c_client *mcli,
907                                    struct i2c_adapter *adap)
908 {
909         struct mctp_i2c_dev *midev = NULL, *m = NULL;
910         unsigned long flags;
911
912         WARN_ON(!mutex_is_locked(&driver_clients_lock));
913         spin_lock_irqsave(&mcli->sel_lock, flags);
914         /* List size is limited by number of MCTP netdevs on a single hardware bus */
915         list_for_each_entry(m, &mcli->devs, list)
916                 if (m->adapter == adap) {
917                         midev = m;
918                         break;
919                 }
920         spin_unlock_irqrestore(&mcli->sel_lock, flags);
921
922         if (midev)
923                 mctp_i2c_unregister(midev);
924 }
925
926 /* Determines whether a device is an i2c adapter.
927  * Optionally returns the root i2c_adapter
928  */
929 static struct i2c_adapter *mctp_i2c_get_adapter(struct device *dev,
930                                                 struct i2c_adapter **ret_root)
931 {
932         struct i2c_adapter *root, *adap;
933
934         if (dev->type != &i2c_adapter_type)
935                 return NULL;
936         adap = to_i2c_adapter(dev);
937         root = mux_root_adapter(adap);
938         WARN_ONCE(!root, "MCTP I2C failed to find root adapter for %s\n",
939                   dev_name(dev));
940         if (!root)
941                 return NULL;
942         if (ret_root)
943                 *ret_root = root;
944         return adap;
945 }
946
947 /* Determines whether a device is an i2c adapter with the "mctp-controller"
948  * devicetree property set. If adap is not an OF node, returns match_no_of
949  */
950 static bool mctp_i2c_adapter_match(struct i2c_adapter *adap, bool match_no_of)
951 {
952         if (!adap->dev.of_node)
953                 return match_no_of;
954         return of_property_read_bool(adap->dev.of_node, MCTP_I2C_OF_PROP);
955 }
956
957 /* Called for each existing i2c device (adapter or client) when a
958  * new mctp-i2c client is probed.
959  */
960 static int mctp_i2c_client_try_attach(struct device *dev, void *data)
961 {
962         struct i2c_adapter *adap = NULL, *root = NULL;
963         struct mctp_i2c_client *mcli = data;
964
965         adap = mctp_i2c_get_adapter(dev, &root);
966         if (!adap)
967                 return 0;
968         if (mcli->client->adapter != root)
969                 return 0;
970         /* Must either have mctp-controller property on the adapter, or
971          * be a root adapter if it's non-devicetree
972          */
973         if (!mctp_i2c_adapter_match(adap, adap == root))
974                 return 0;
975
976         return mctp_i2c_add_netdev(mcli, adap);
977 }
978
979 static void mctp_i2c_notify_add(struct device *dev)
980 {
981         struct mctp_i2c_client *mcli = NULL, *m = NULL;
982         struct i2c_adapter *root = NULL, *adap = NULL;
983         int rc;
984
985         adap = mctp_i2c_get_adapter(dev, &root);
986         if (!adap)
987                 return;
988         /* Check for mctp-controller property on the adapter */
989         if (!mctp_i2c_adapter_match(adap, false))
990                 return;
991
992         /* Find an existing mcli for adap's root */
993         mutex_lock(&driver_clients_lock);
994         list_for_each_entry(m, &driver_clients, list) {
995                 if (m->client->adapter == root) {
996                         mcli = m;
997                         break;
998                 }
999         }
1000
1001         if (mcli) {
1002                 rc = mctp_i2c_add_netdev(mcli, adap);
1003                 if (rc < 0)
1004                         dev_warn(dev, "Failed adding mctp-i2c net device\n");
1005         }
1006         mutex_unlock(&driver_clients_lock);
1007 }
1008
1009 static void mctp_i2c_notify_del(struct device *dev)
1010 {
1011         struct i2c_adapter *root = NULL, *adap = NULL;
1012         struct mctp_i2c_client *mcli = NULL;
1013
1014         adap = mctp_i2c_get_adapter(dev, &root);
1015         if (!adap)
1016                 return;
1017
1018         mutex_lock(&driver_clients_lock);
1019         list_for_each_entry(mcli, &driver_clients, list) {
1020                 if (mcli->client->adapter == root) {
1021                         mctp_i2c_remove_netdev(mcli, adap);
1022                         break;
1023                 }
1024         }
1025         mutex_unlock(&driver_clients_lock);
1026 }
1027
1028 static int mctp_i2c_probe(struct i2c_client *client)
1029 {
1030         struct mctp_i2c_client *mcli = NULL;
1031         int rc;
1032
1033         mutex_lock(&driver_clients_lock);
1034         mcli = mctp_i2c_new_client(client);
1035         if (IS_ERR(mcli)) {
1036                 rc = PTR_ERR(mcli);
1037                 mcli = NULL;
1038                 goto out;
1039         } else {
1040                 list_add(&mcli->list, &driver_clients);
1041         }
1042
1043         /* Add a netdev for adapters that have a 'mctp-controller' property */
1044         i2c_for_each_dev(mcli, mctp_i2c_client_try_attach);
1045         rc = 0;
1046 out:
1047         mutex_unlock(&driver_clients_lock);
1048         return rc;
1049 }
1050
1051 static void mctp_i2c_remove(struct i2c_client *client)
1052 {
1053         struct mctp_i2c_client *mcli = i2c_get_clientdata(client);
1054         struct mctp_i2c_dev *midev = NULL, *tmp = NULL;
1055
1056         mutex_lock(&driver_clients_lock);
1057         list_del(&mcli->list);
1058         /* Remove all child adapter netdevs */
1059         list_for_each_entry_safe(midev, tmp, &mcli->devs, list)
1060                 mctp_i2c_unregister(midev);
1061
1062         mctp_i2c_free_client(mcli);
1063         mutex_unlock(&driver_clients_lock);
1064 }
1065
1066 /* We look for a 'mctp-controller' property on I2C busses as they are
1067  * added/deleted, creating/removing netdevs as required.
1068  */
1069 static int mctp_i2c_notifier_call(struct notifier_block *nb,
1070                                   unsigned long action, void *data)
1071 {
1072         struct device *dev = data;
1073
1074         switch (action) {
1075         case BUS_NOTIFY_ADD_DEVICE:
1076                 mctp_i2c_notify_add(dev);
1077                 break;
1078         case BUS_NOTIFY_DEL_DEVICE:
1079                 mctp_i2c_notify_del(dev);
1080                 break;
1081         }
1082         return NOTIFY_DONE;
1083 }
1084
1085 static struct notifier_block mctp_i2c_notifier = {
1086         .notifier_call = mctp_i2c_notifier_call,
1087 };
1088
1089 static const struct i2c_device_id mctp_i2c_id[] = {
1090         { "mctp-i2c-interface" },
1091         {}
1092 };
1093 MODULE_DEVICE_TABLE(i2c, mctp_i2c_id);
1094
1095 static const struct of_device_id mctp_i2c_of_match[] = {
1096         { .compatible = "mctp-i2c-controller" },
1097         {},
1098 };
1099 MODULE_DEVICE_TABLE(of, mctp_i2c_of_match);
1100
1101 static struct i2c_driver mctp_i2c_driver = {
1102         .driver = {
1103                 .name = "mctp-i2c-interface",
1104                 .of_match_table = mctp_i2c_of_match,
1105         },
1106         .probe = mctp_i2c_probe,
1107         .remove = mctp_i2c_remove,
1108         .id_table = mctp_i2c_id,
1109 };
1110
1111 static __init int mctp_i2c_mod_init(void)
1112 {
1113         int rc;
1114
1115         pr_info("MCTP I2C interface driver\n");
1116         rc = i2c_add_driver(&mctp_i2c_driver);
1117         if (rc < 0)
1118                 return rc;
1119         rc = bus_register_notifier(&i2c_bus_type, &mctp_i2c_notifier);
1120         if (rc < 0) {
1121                 i2c_del_driver(&mctp_i2c_driver);
1122                 return rc;
1123         }
1124         return 0;
1125 }
1126
1127 static __exit void mctp_i2c_mod_exit(void)
1128 {
1129         int rc;
1130
1131         rc = bus_unregister_notifier(&i2c_bus_type, &mctp_i2c_notifier);
1132         if (rc < 0)
1133                 pr_warn("MCTP I2C could not unregister notifier, %d\n", rc);
1134         i2c_del_driver(&mctp_i2c_driver);
1135 }
1136
1137 module_init(mctp_i2c_mod_init);
1138 module_exit(mctp_i2c_mod_exit);
1139
1140 MODULE_DESCRIPTION("MCTP I2C device");
1141 MODULE_LICENSE("GPL v2");
1142 MODULE_AUTHOR("Matt Johnston <[email protected]>");
This page took 0.091814 seconds and 4 git commands to generate.