1*050d28e1SChandrakanth patil /*-
2*050d28e1SChandrakanth patil * Broadcom NetXtreme-C/E network driver.
3*050d28e1SChandrakanth patil *
4*050d28e1SChandrakanth patil * Copyright (c) 2024 Broadcom, All Rights Reserved.
5*050d28e1SChandrakanth patil * The term Broadcom refers to Broadcom Limited and/or its subsidiaries
6*050d28e1SChandrakanth patil *
7*050d28e1SChandrakanth patil * Redistribution and use in source and binary forms, with or without
8*050d28e1SChandrakanth patil * modification, are permitted provided that the following conditions
9*050d28e1SChandrakanth patil * are met:
10*050d28e1SChandrakanth patil * 1. Redistributions of source code must retain the above copyright
11*050d28e1SChandrakanth patil * notice, this list of conditions and the following disclaimer.
12*050d28e1SChandrakanth patil * 2. Redistributions in binary form must reproduce the above copyright
13*050d28e1SChandrakanth patil * notice, this list of conditions and the following disclaimer in the
14*050d28e1SChandrakanth patil * documentation and/or other materials provided with the distribution.
15*050d28e1SChandrakanth patil *
16*050d28e1SChandrakanth patil * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
17*050d28e1SChandrakanth patil * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*050d28e1SChandrakanth patil * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*050d28e1SChandrakanth patil * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20*050d28e1SChandrakanth patil * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*050d28e1SChandrakanth patil * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*050d28e1SChandrakanth patil * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*050d28e1SChandrakanth patil * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*050d28e1SChandrakanth patil * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*050d28e1SChandrakanth patil * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26*050d28e1SChandrakanth patil * THE POSSIBILITY OF SUCH DAMAGE.
27*050d28e1SChandrakanth patil */
28*050d28e1SChandrakanth patil
29*050d28e1SChandrakanth patil #ifndef _BNXT_AUXILIARY_COMPAT_H_
30*050d28e1SChandrakanth patil #define _BNXT_AUXILIARY_COMPAT_H_
31*050d28e1SChandrakanth patil
32*050d28e1SChandrakanth patil #include <linux/device.h>
33*050d28e1SChandrakanth patil #include <linux/idr.h>
34*050d28e1SChandrakanth patil
35*050d28e1SChandrakanth patil #define KBUILD_MODNAME "if_bnxt"
36*050d28e1SChandrakanth patil #define AUXILIARY_NAME_SIZE 32
37*050d28e1SChandrakanth patil
38*050d28e1SChandrakanth patil struct auxiliary_device_id {
39*050d28e1SChandrakanth patil char name[AUXILIARY_NAME_SIZE];
40*050d28e1SChandrakanth patil uint64_t driver_data;
41*050d28e1SChandrakanth patil };
42*050d28e1SChandrakanth patil
43*050d28e1SChandrakanth patil struct auxiliary_device {
44*050d28e1SChandrakanth patil struct device dev;
45*050d28e1SChandrakanth patil const char *name;
46*050d28e1SChandrakanth patil uint32_t id;
47*050d28e1SChandrakanth patil struct list_head list;
48*050d28e1SChandrakanth patil };
49*050d28e1SChandrakanth patil
50*050d28e1SChandrakanth patil struct auxiliary_driver {
51*050d28e1SChandrakanth patil int (*probe)(struct auxiliary_device *auxdev, const struct auxiliary_device_id *id);
52*050d28e1SChandrakanth patil void (*remove)(struct auxiliary_device *auxdev);
53*050d28e1SChandrakanth patil const char *name;
54*050d28e1SChandrakanth patil struct device_driver driver;
55*050d28e1SChandrakanth patil const struct auxiliary_device_id *id_table;
56*050d28e1SChandrakanth patil struct list_head list;
57*050d28e1SChandrakanth patil };
58*050d28e1SChandrakanth patil
59*050d28e1SChandrakanth patil int auxiliary_device_init(struct auxiliary_device *auxdev);
60*050d28e1SChandrakanth patil int auxiliary_device_add(struct auxiliary_device *auxdev);
61*050d28e1SChandrakanth patil void auxiliary_device_uninit(struct auxiliary_device *auxdev);
62*050d28e1SChandrakanth patil void auxiliary_device_delete(struct auxiliary_device *auxdev);
63*050d28e1SChandrakanth patil int auxiliary_driver_register(struct auxiliary_driver *auxdrv);
64*050d28e1SChandrakanth patil void auxiliary_driver_unregister(struct auxiliary_driver *auxdrv);
65*050d28e1SChandrakanth patil
auxiliary_get_drvdata(struct auxiliary_device * auxdev)66*050d28e1SChandrakanth patil static inline void *auxiliary_get_drvdata(struct auxiliary_device *auxdev)
67*050d28e1SChandrakanth patil {
68*050d28e1SChandrakanth patil return dev_get_drvdata(&auxdev->dev);
69*050d28e1SChandrakanth patil }
70*050d28e1SChandrakanth patil
auxiliary_set_drvdata(struct auxiliary_device * auxdev,void * data)71*050d28e1SChandrakanth patil static inline void auxiliary_set_drvdata(struct auxiliary_device *auxdev, void *data)
72*050d28e1SChandrakanth patil {
73*050d28e1SChandrakanth patil dev_set_drvdata(&auxdev->dev, data);
74*050d28e1SChandrakanth patil }
75*050d28e1SChandrakanth patil #endif /* _BNXT_AUXILIARY_COMPAT_H_ */
76