forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dbus_usb_linux.c
old mode 100644new mode 100755
....@@ -1,3 +1,4 @@
1
+/* SPDX-License-Identifier: GPL-2.0 */
12 /*
23 * Dongle BUS interface
34 * USB Linux Implementation
....@@ -511,9 +512,6 @@
511512 struct usb_interface *intf;
512513 } probe_info_t;
513514
514
-/* driver info, initialized when bcmsdh_register is called */
515
-static dbus_driver_t drvinfo = {NULL, NULL, NULL, NULL};
516
-
517515 /*
518516 * USB Linux dbus_intf_t
519517 */
....@@ -591,6 +589,9 @@
591589 };
592590
593591 static probe_info_t g_probe_info;
592
+static probe_cb_t probe_cb = NULL;
593
+static disconnect_cb_t disconnect_cb = NULL;
594
+static void *probe_arg = NULL;
594595 static void *disc_arg = NULL;
595596
596597
....@@ -1232,46 +1233,26 @@
12321233 dbus_usbos_suspend(struct usb_interface *intf,
12331234 pm_message_t message)
12341235 {
1235
- usbos_info_t *usbos_info = (usbos_info_t *) g_probe_info.usbos_info;
1236
- int err = 0;
1237
-
1238
- printf("%s Enter\n", __FUNCTION__);
1239
-
1236
+ DBUSERR(("%s suspend state: %d\n", __FUNCTION__, g_probe_info.suspend_state));
12401237 /* DHD for full dongle model */
12411238 g_probe_info.suspend_state = USBOS_SUSPEND_STATE_SUSPEND_PENDING;
1242
- if (drvinfo.suspend && disc_arg)
1243
- err = drvinfo.suspend(disc_arg);
1244
- if (err) {
1245
- printf("%s: err=%d\n", __FUNCTION__, err);
1246
-// g_probe_info.suspend_state = USBOS_SUSPEND_STATE_DEVICE_ACTIVE;
1247
-// return err;
1248
- }
1249
- usbos_info->pub->busstate = DBUS_STATE_SLEEP;
1250
-
1239
+ dbus_usbos_state_change((usbos_info_t*)g_probe_info.usbos_info, DBUS_STATE_SLEEP);
12511240 dbus_usbos_cancel_all_urbs((usbos_info_t*)g_probe_info.usbos_info);
12521241 g_probe_info.suspend_state = USBOS_SUSPEND_STATE_SUSPENDED;
12531242
1254
- printf("%s Exit err=%d\n", __FUNCTION__, err);
1255
- return err;
1243
+ return 0;
12561244 }
12571245
12581246 /**
12591247 * The resume method is called to tell the driver that the device has been resumed and the driver
12601248 * can return to normal operation. URBs may once more be submitted.
12611249 */
1262
-static int
1263
-dbus_usbos_resume(struct usb_interface *intf)
1250
+static int dbus_usbos_resume(struct usb_interface *intf)
12641251 {
1265
- usbos_info_t *usbos_info = (usbos_info_t *) g_probe_info.usbos_info;
1252
+ DBUSERR(("%s Device resumed\n", __FUNCTION__));
12661253
1267
- printf("%s Enter\n", __FUNCTION__);
1268
-
1254
+ dbus_usbos_state_change((usbos_info_t*)g_probe_info.usbos_info, DBUS_STATE_UP);
12691255 g_probe_info.suspend_state = USBOS_SUSPEND_STATE_DEVICE_ACTIVE;
1270
- if (drvinfo.resume && disc_arg)
1271
- drvinfo.resume(disc_arg);
1272
- usbos_info->pub->busstate = DBUS_STATE_UP;
1273
-
1274
- printf("%s Exit\n", __FUNCTION__);
12751256 return 0;
12761257 }
12771258
....@@ -1279,16 +1260,13 @@
12791260 * This function is directly called by the Linux kernel, when the suspended device has been reset
12801261 * instead of being resumed
12811262 */
1282
-static int
1283
-dbus_usbos_reset_resume(struct usb_interface *intf)
1263
+static int dbus_usbos_reset_resume(struct usb_interface *intf)
12841264 {
1285
- printf("%s Enter\n", __FUNCTION__);
1265
+ DBUSERR(("%s Device reset resumed\n", __FUNCTION__));
12861266
1267
+ /* The device may have lost power, so a firmware download may be required */
1268
+ dbus_usbos_state_change((usbos_info_t*)g_probe_info.usbos_info, DBUS_STATE_DL_NEEDED);
12871269 g_probe_info.suspend_state = USBOS_SUSPEND_STATE_DEVICE_ACTIVE;
1288
- if (drvinfo.resume && disc_arg)
1289
- drvinfo.resume(disc_arg);
1290
-
1291
- printf("%s Exit\n", __FUNCTION__);
12921270 return 0;
12931271 }
12941272
....@@ -1577,8 +1555,8 @@
15771555 g_probe_info.device_speed = FULL_SPEED;
15781556 DBUSERR(("full speed device detected\n"));
15791557 }
1580
- if (g_probe_info.dereged == FALSE && drvinfo.probe) {
1581
- disc_arg = drvinfo.probe(usb->bus->busnum, usb->portnum, 0);
1558
+ if (g_probe_info.dereged == FALSE && probe_cb) {
1559
+ disc_arg = probe_cb(probe_arg, "", USB_BUS, usb->bus->busnum, usb->portnum, 0);
15821560 }
15831561
15841562 g_probe_info.disc_cb_done = FALSE;
....@@ -1639,8 +1617,8 @@
16391617 if (probe_usb_init_data) {
16401618 usbos_info = (usbos_info_t *) probe_usb_init_data->usbos_info;
16411619 if (usbos_info) {
1642
- if ((probe_usb_init_data->dereged == FALSE) && drvinfo.remove && disc_arg) {
1643
- drvinfo.remove(disc_arg);
1620
+ if ((probe_usb_init_data->dereged == FALSE) && disconnect_cb && disc_arg) {
1621
+ disconnect_cb(disc_arg);
16441622 disc_arg = NULL;
16451623 probe_usb_init_data->disc_cb_done = TRUE;
16461624 }
....@@ -2577,11 +2555,18 @@
25772555 }
25782556
25792557 int
2580
-dbus_bus_osl_register(dbus_driver_t *driver, dbus_intf_t **intf)
2558
+dbus_bus_osl_register(int vid, int pid, probe_cb_t prcb,
2559
+ disconnect_cb_t discb, void *prarg, dbus_intf_t **intf, void *param1, void *param2)
25812560 {
25822561 bzero(&g_probe_info, sizeof(probe_info_t));
25832562
2584
- drvinfo = *driver;
2563
+ probe_cb = prcb;
2564
+ disconnect_cb = discb;
2565
+ probe_arg = prarg;
2566
+
2567
+ devid_table[0].idVendor = vid;
2568
+ devid_table[0].idProduct = pid;
2569
+
25852570 *intf = &dbus_usbos_intf;
25862571
25872572 USB_REGISTER();
....@@ -2595,8 +2580,8 @@
25952580 g_probe_info.dereged = TRUE;
25962581
25972582 DHD_MUTEX_LOCK();
2598
- if (drvinfo.remove && disc_arg && (g_probe_info.disc_cb_done == FALSE)) {
2599
- drvinfo.remove(disc_arg);
2583
+ if (disconnect_cb && disc_arg && (g_probe_info.disc_cb_done == FALSE)) {
2584
+ disconnect_cb(disc_arg);
26002585 disc_arg = NULL;
26012586 }
26022587 DHD_MUTEX_UNLOCK();
....@@ -3198,10 +3183,8 @@
31983183 return *firmware != NULL ? 0 : -ENOENT;
31993184 }
32003185
3201
-#ifndef DHD_LINUX_STD_FW_API
32023186 static void *
3203
-dbus_get_fwfile(int devid, int chiprev, uint8 **fw, int *fwlen,
3204
- uint16 boardtype, uint16 boardrev, char *path)
3187
+dbus_get_fwfile(int devid, int chiprev, uint8 **fw, int *fwlen, uint16 boardtype, uint16 boardrev)
32053188 {
32063189 const struct firmware *firmware = NULL;
32073190 #ifndef OEM_ANDROID
....@@ -3264,12 +3247,11 @@
32643247 snprintf(file_name, sizeof(file_name), "%s", CONFIG_ANDROID_BCMDHD_FW_PATH);
32653248 #endif /* OEM_ANDROID */
32663249
3267
- ret = dbus_request_firmware(path, &firmware);
3250
+ ret = dbus_request_firmware(file_name, &firmware);
32683251 if (ret) {
3269
- DBUSERR(("fail to request firmware %s\n", path));
3252
+ DBUSERR(("fail to request firmware %s\n", file_name));
32703253 return NULL;
3271
- } else
3272
- DBUSERR(("%s: %s (%zu bytes) open success\n", __FUNCTION__, path, firmware->size));
3254
+ }
32733255
32743256 *fwlen = firmware->size;
32753257 *fw = (uint8 *)firmware->data;
....@@ -3278,8 +3260,7 @@
32783260 }
32793261
32803262 static void *
3281
-dbus_get_nvfile(int devid, int chiprev, uint8 **fw, int *fwlen,
3282
- uint16 boardtype, uint16 boardrev, char *path)
3263
+dbus_get_nvfile(int devid, int chiprev, uint8 **fw, int *fwlen, uint16 boardtype, uint16 boardrev)
32833264 {
32843265 const struct firmware *firmware = NULL;
32853266 #ifndef OEM_ANDROID
....@@ -3347,9 +3328,9 @@
33473328 snprintf(file_name, sizeof(file_name), "%s", CONFIG_ANDROID_BCMDHD_NVRAM_PATH);
33483329 #endif /* OEM_ANDROID */
33493330
3350
- ret = dbus_request_firmware(path, &firmware);
3331
+ ret = dbus_request_firmware(file_name, &firmware);
33513332 if (ret) {
3352
- DBUSERR(("fail to request nvram %s\n", path));
3333
+ DBUSERR(("fail to request nvram %s\n", file_name));
33533334
33543335 #ifndef OEM_ANDROID
33553336 /* Load generic nvram file */
....@@ -3360,11 +3341,10 @@
33603341 #endif /* OEM_ANDROID */
33613342
33623343 if (ret) {
3363
- DBUSERR(("fail to request nvram %s\n", path));
3344
+ DBUSERR(("fail to request nvram %s\n", file_name));
33643345 return NULL;
33653346 }
3366
- } else
3367
- DBUSERR(("%s: %s (%zu bytes) open success\n", __FUNCTION__, path, firmware->size));
3347
+ }
33683348
33693349 *fwlen = firmware->size;
33703350 *fw = (uint8 *)firmware->data;
....@@ -3373,39 +3353,17 @@
33733353
33743354 void *
33753355 dbus_get_fw_nvfile(int devid, int chiprev, uint8 **fw, int *fwlen, int type, uint16 boardtype,
3376
- uint16 boardrev, char *path)
3356
+ uint16 boardrev)
33773357 {
33783358 switch (type) {
33793359 case DBUS_FIRMWARE:
3380
- return dbus_get_fwfile(devid, chiprev, fw, fwlen, boardtype, boardrev, path);
3360
+ return dbus_get_fwfile(devid, chiprev, fw, fwlen, boardtype, boardrev);
33813361 case DBUS_NVFILE:
3382
- return dbus_get_nvfile(devid, chiprev, fw, fwlen, boardtype, boardrev, path);
3362
+ return dbus_get_nvfile(devid, chiprev, fw, fwlen, boardtype, boardrev);
33833363 default:
33843364 return NULL;
33853365 }
33863366 }
3387
-#else
3388
-void *
3389
-dbus_get_fw_nvfile(int devid, int chiprev, uint8 **fw, int *fwlen, int type, uint16 boardtype,
3390
- uint16 boardrev, char *path)
3391
-{
3392
- const struct firmware *firmware = NULL;
3393
- int err = DBUS_OK;
3394
-
3395
- err = dbus_request_firmware(path, &firmware);
3396
- if (err) {
3397
- DBUSERR(("fail to request firmware %s\n", path));
3398
- return NULL;
3399
- } else {
3400
- DBUSERR(("%s: %s (%zu bytes) open success\n",
3401
- __FUNCTION__, path, firmware->size));
3402
- }
3403
-
3404
- *fwlen = firmware->size;
3405
- *fw = (uint8 *)firmware->data;
3406
- return (void *)firmware;
3407
-}
3408
-#endif
34093367
34103368 void
34113369 dbus_release_fw_nvfile(void *firmware)
....@@ -3446,10 +3404,3 @@
34463404 return intf_wlan;
34473405 }
34483406 #endif /* BCMUSBDEV_COMPOSITE */
3449
-
3450
-#ifdef LINUX
3451
-struct device * dbus_get_dev(void)
3452
-{
3453
- return &g_probe_info.usb->dev;
3454
-}
3455
-#endif /* LINUX */